- Shift a leading misaligned quad to compensate for the implicit shift
in the "ldlo.q" instruction. (And remove the "XXX:" comment which correctly
hinted that this might be necessary).
- Clean up some comments.
- in pmap_pte_spill(), the victim PTE could be using the secondary hash,
in which case its pvo entry is actually in the other bucket. use the
correct bucket for the victim pvo when moving it to the front of its list.
- similarly, in pmap_pvo_remove(), if the pteidx is pre-computed for us,
it might actually point to the other bucket if the entry is using the
secondary hash. adjust ptegidx if this is the case.
these should fix PRs 18645 and 18736.
while I'm here, wrap line lines and do some other misc cleanup.
UPA is just a physical incarnation of our mainbus0.
Evidence:
- There can only be one!
- The firmware node coresponding to it is the root of the OF tree
So: remove the unused (and uncompilable) upa.c, remove upavar.h after
moving the only declaration used from it to autoconf.h.
- If the BIOS reports the same memory cluster multiple times,
only allocate the extent once.
- If we fail to allocate an extent,
don't add it to mem_clusters and don't increment mem_cluster_cnt.
- When loading the physical extents,
make sure we don't try to add an extent with zero length (seg_start == tmp).
port-i386/13399: from maximum entropy <entropy@tappedin.com>.
clean up some other stuff along the way, including:
- use m68k/cacheops.*, remove duplicates from cpu.h.
- centralize a few declarations in (all the copies of) cpu.h.
- define M68K_VAC on platforms which have a VAC.
- switch the sun platforms to the (now common) proc_trampoline().
- do the phys_map thang on the sun platforms too, no reason not to.
alignment code. (There was nothing wrong with the original code path
other than it was slightly slower if the buffer was already aligned).
Also, catch another corner case related to alignment/length of the
last 1-7 bytes.
In particular, use r8 to hold the old process, and r7 for medium-term
scratch, saving r0-r3 for things we don't need saved over function
calls. This gets rid of five register-to-register MOVs.
and hence save fewer into the PCB. This should give me enough free
registers in cpu_switch to tidy things up and support MULTIPROCESSOR
properly. While we're here, make the stacked registers into an
APCS stack frame, so that DDB backtraces through cpu_switch() will
work.
This also affects cpu_fork(), which has to fabricate a switchframe and
PCB for the new process.
using a "movi imm, Rn / sub R15, RN, R15" pair. This is how the compiler
creates frames which are too big to fit in the immediate field of "addi";
something which happens a lot with -O0 ...
While I'm here, add a simple heuristic to detect infinite loops caused by
tracing back through some non-leaf asm routines which don't set up frames.