| History log of /src/sys/arch/powerpc/oea/pmap.c |
| Revision | | Date | Author | Comments |
| 1.122 |
| 28-Feb-2025 |
andvar | Fix various typos in comments.
|
| 1.121 |
| 15-Dec-2023 |
rin | powerpc: oea: For OEA64_BRIDGE, 1:1 map up to 3GiB memory
As done for OEA. Note that kva over 3GiB is reserved.
Provide PMAP_MAP_POOLPAGE for OEA64_BRIDGE at the same time, by which direct-mapped memory is utilized in order to work around starvation of 512MiB kernel virtual space.
PR kern/57621
|
| 1.120 |
| 15-Dec-2023 |
rin | powerpc/oea: pmap_create: Use PR_ZERO and drop memset(9), NFC
Part of PR kern/57621
|
| 1.119 |
| 15-Dec-2023 |
rin | powerpc/oea: pmap: Fix mostly-pointless overhead of pmap_pvo_pool
(1) Drop __aligned(32) from struct pvo_entry; otherwise, sizeof(struct pvo_entry) is round-up'ed to a multiple of 32.
(2) Do not set sizeof(struct pvo_entry) to `align` argument for pool_init(9); it must be power of 2.
(3) Align pvo_entry to 32-byte boundary only if reasonably possible, i.e., OEA without DIAGNOSTIC (--> POOL_REDZONE) for now.
Part of PR kern/57621
|
| 1.118 |
| 15-Dec-2023 |
rin | powerpc/oea: pmap: Rework pmap_pte_spill()
It was broken in many ways... Now, it gets working stable both for OEA and OEA64_BRIDGE, as far as I can see.
Part of PR kern/57621
|
| 1.117 |
| 15-Dec-2023 |
rin | powerpc/oea: pmap: Drop unused argument for pmap_pvo_reclaim(), NFC
Part of PR kern/57621
|
| 1.116 |
| 08-Dec-2023 |
andvar | fix triple s typos in comments.
|
| 1.115 |
| 09-Oct-2023 |
rin | powerpc/oea: pmap: Use pool_allocator_nointr() for pmap_pool
As done for (majority of) other pmap implementations.
pmap_pool_allocator() allocates memory below 256MB, but it is not necessary for struct pmap.
Fix part of PR kern/57621, i.e., stall in pmap_create(9).
There should be another bugs that cause (MP?) kernel hangs reported in the PR, in pmap or other MD components for powerpc (PR port-powerpc/56922 should be one of the candidates).
XXX pmap for powerpc/oea apparently needs some clean ups. But leave it as is, and pull up this minimum fix to netbsd-10 at the moment.
|
| 1.114 |
| 09-May-2022 |
rin | branches: 1.114.4; PR port-powerpc/56818
Fix inverted logic introduced in rev. 1.108, by which modified/referenced bits of pages were never cleared appropriately.
Now, full ATF runs on macppc and sandpoint, with no regression observed.
|
| 1.113 |
| 09-Apr-2022 |
riastradh | sys: Use membar_release/acquire around reference drop.
This just goes through my recent reference count membar audit and changes membar_exit to membar_release and membar_enter to membar_acquire -- this should make everything cheaper on most CPUs without hurting correctness, because membar_acquire is generally cheaper than membar_enter.
|
| 1.112 |
| 12-Mar-2022 |
riastradh | sys: Membar audit around reference count releases.
If two threads are using an object that is freed when the reference count goes to zero, we need to ensure that all memory operations related to the object happen before freeing the object.
Using an atomic_dec_uint_nv(&refcnt) == 0 ensures that only one thread takes responsibility for freeing, but it's not enough to ensure that the other thread's memory operations happen before the freeing.
Consider:
Thread A Thread B obj->foo = 42; obj->baz = 73; mumble(&obj->bar); grumble(&obj->quux); /* membar_exit(); */ /* membar_exit(); */ atomic_dec -- not last atomic_dec -- last /* membar_enter(); */ KASSERT(invariant(obj->foo, obj->bar)); free_stuff(obj);
The memory barriers ensure that
obj->foo = 42; mumble(&obj->bar);
in thread A happens before
KASSERT(invariant(obj->foo, obj->bar)); free_stuff(obj);
in thread B. Without them, this ordering is not guaranteed.
So in general it is necessary to do
membar_exit(); if (atomic_dec_uint_nv(&obj->refcnt) != 0) return; membar_enter();
to release a reference, for the `last one out hit the lights' style of reference counting. (This is in contrast to the style where one thread blocks new references and then waits under a lock for existing ones to drain with a condvar -- no membar needed thanks to mutex(9).)
I searched for atomic_dec to find all these. Obviously we ought to have a better abstraction for this because there's so much copypasta. This is a stop-gap measure to fix actual bugs until we have that. It would be nice if an abstraction could gracefully handle the different styles of reference counting in use -- some years ago I drafted an API for this, but making it cover everything got a little out of hand (particularly with struct vnode::v_usecount) and I ended up setting it aside to work on psref/localcount instead for better scalability.
I got bored of adding #ifdef __HAVE_ATOMIC_AS_MEMBAR everywhere, so I only put it on things that look performance-critical on 5sec review. We should really adopt membar_enter_preatomic/membar_exit_postatomic or something (except they are applicable only to atomic r/m/w, not to atomic_load/store_*, making the naming annoying) and get rid of all the ifdefs.
|
| 1.111 |
| 18-Feb-2022 |
martin | Backout previous and fix the correct macro magic
|
| 1.110 |
| 18-Feb-2022 |
martin | pmap_pv_protect is not STATIC
|
| 1.109 |
| 16-Feb-2022 |
riastradh | powerpc: Sprinkle "memory" clobbers on eieio and nearby asm blocks.
Otherwise the compiler may reorder these around loads and stores, which mostly defeats the purpose. `asm volatile' just ensures the instruction isn't _deleted_; it may still move around.
|
| 1.108 |
| 16-Feb-2022 |
riastradh | powerpc: Implement pv-tracking for unmanaged pages.
Needed for drm.
|
| 1.107 |
| 19-Jul-2021 |
chs | there is no need to keep pvos for unmanaged mappings on a hidden p/v list, since "unmanaged" means that we don't want to find such pvos on any p/v list. instead, just don't put such pvos on any p/v list at all and remove the two hidden p/v lists for unmanaged mappings. code mostly from martin, to implement rin's suggestion of unifying the two hidden lists.
|
| 1.106 |
| 27-Jun-2021 |
martin | PR 55325: unify both pvo pools (for managed and unmanaged pages). Analyzis by rin, fix suggested by chs.
|
| 1.105 |
| 12-Mar-2021 |
thorpej | branches: 1.105.4; Fix paste-o in last.
|
| 1.104 |
| 12-Mar-2021 |
thorpej | Re-factor the code in pmap_extract() that checks the 601 I/O segment table and the BAT tables into separate functions that can be called from outside of the pmap module.
|
| 1.103 |
| 11-Mar-2021 |
thorpej | Tidy up initialization of the kernel SRs just a bit.
|
| 1.102 |
| 10-Mar-2021 |
thorpej | - In pmap_bootstrap1(), make sure to initialize pmap_kernel()->pm_vsid with the kernel's base VSID. - In va_to_vsid(), always compute the VSID from the base VSID in the pmap and the effective segment ID (ESID), rather than extracting it from the pmap's segment register value for that ESID. Not only does this make the code the same between OEA and OEA64, but is also lets us compute the correct VSID for that pmap/ESID even if the cached SR for that ESID currently contains something else, such as an I/O segment mapping (as might be the case on a 601).
With this change, we can temporarily toggle between an I/O segment and and HTAB-mapped segment if needed (e.g. when calling OpenFirmware on a 601-based system).
|
| 1.101 |
| 02-Mar-2021 |
thorpej | Complete the pmap symbol renaming shenanigans for pmap_bootstrap[12]().
|
| 1.100 |
| 02-Mar-2021 |
rin | Apply PMAPNAME() to pmap_bootstrap[12](); fix build for ofppc, which has both pmap32 and pmap64bridge in a single kernel.
|
| 1.99 |
| 01-Mar-2021 |
thorpej | Split pmap_bootstrap() into 2 functions: - pmap_bootstrap1(), which sets up the low-level pmap data structures. - pmap_bootstrap2(), which actually programs the MMU hardware based on pmap_bootstrap1()'s work.
pmap_bootstrap() is still provided as a wrapper around the two, but this provides flexibility to platforms that might need to do additional work between these two phases.
|
| 1.98 |
| 06-Jul-2020 |
rin | branches: 1.98.2; Style and cosmetic changes. No binary changes intended.
|
| 1.97 |
| 02-Jul-2020 |
rin | Fix typo; PMAP_OEA64_BRIDGE not PMAP_OEA_BRIDGE. Tested on Power Mac G5.
|
| 1.96 |
| 31-May-2020 |
rin | Stop returning while PMAP_LOCK() (= KERNEL_LOCK(1, NULL)) is held.
Kernel freeze with heavy load is significantly mitigated (fixed?), in which I could not even enter DDB from console.
XXX There is still inconsistency in usage of two PVO pools. I will send-pr later.
XXX pullup to netbsd-[987]
|
| 1.95 |
| 27-Jan-2018 |
chs | branches: 1.95.8; apply the change from arch/x86/x86/pmap.c rev. 1.266 commitid vZRjvmxG7YTHLOfA:
In pmap_enter_ma(), only try to allocate pves if we might need them, and even if that fails, only fail the operation if we later discover that we really do need them. If we are replacing an existing mapping, reuse the pv structure where possible.
This implements the requirement that pmap_enter(PMAP_CANFAIL) must not fail when replacing an existing mapping with the first mapping of a new page, which is an unintended consequence of the changes from the rmind-uvmplock branch in 2011.
The problem arises when pmap_enter(PMAP_CANFAIL) is used to replace an existing pmap mapping with a mapping of a different page (eg. to resolve a copy-on-write). If that fails and leaves the old pmap entry in place, then UVM won't hold the right locks when it eventually retries. This entanglement of the UVM and pmap locking was done in rmind-uvmplock in order to improve performance, but it also means that the UVM state and pmap state need to be kept in sync more than they did before. It would be possible to handle this in the UVM code instead of in the pmap code, but these pmap changes improve the handling of low memory situations in general, and handling this in UVM would be clunky, so this seemed like the better way to go.
This somewhat indirectly fixes PR 52706 on the remaining platforms where this problem existed.
|
| 1.94 |
| 23-Dec-2016 |
cherry | branches: 1.94.8; "Make NetBSD great again!"
Introduce uvm_hotplug(9) to the kernel.
Many thanks, in no particular order to:
TNF, for funding the project.
Chuck Silvers - for multiple API reviews and feedback. Nick Hudson - for testing on multiple architectures and bugfix patches. Everyone who helped with boot testing.
KeK (http://www.kek.org.in) for hosting the primary developers.
|
| 1.93 |
| 14-Feb-2016 |
dholland | branches: 1.93.2; Add missing va_end; PR 50795 from David Binderman.
|
| 1.92 |
| 10-Aug-2014 |
joerg | branches: 1.92.2; 1.92.4; Update conditions on mfsrin definition to match use.
|
| 1.91 |
| 03-Mar-2014 |
macallan | support ppc601 from scole_mail, ok matt@
|
| 1.90 |
| 03-Nov-2013 |
mrg | gcc 4.8.1 wants: - remove some set but unused variables - move some variables inside their usage #ifdef's - cast to (void) instead of using a dummy return variable
(there are more to come, but this one is now tested with gcc 4.5)
|
| 1.89 |
| 11-Apr-2013 |
macallan | branches: 1.89.4; make PPC_OEA64_BRIDGE mode work from Phileas Fogg
|
| 1.88 |
| 28-Mar-2013 |
christos | Fix loop bug (Phileas Fogg)
|
| 1.87 |
| 20-Oct-2012 |
kiyohara | Support Cache Protocol 'MEI' with MULTIPROCESSOR.
|
| 1.86 |
| 28-Jul-2012 |
matt | branches: 1.86.2; Fix -fno-common fallout.
|
| 1.85 |
| 03-Feb-2012 |
matt | Use CPP __VA_ARGS__ for DPRINTF*
|
| 1.84 |
| 01-Feb-2012 |
matt | Use kmem instead of malloc. Remove unneeded <sys/malloc.h> includes.
|
| 1.83 |
| 01-Feb-2012 |
matt | Enable XBSEN and HIGHBAT for OEA 7455 and related CPUs. The BAT entries now have a resolution of 8MB. (Adjacent entries are merged up to a total of 2GB per entry).
|
| 1.82 |
| 17-Jul-2011 |
joerg | branches: 1.82.2; 1.82.6; Retire varargs.h support. Move machine/stdarg.h logic into MI sys/stdarg.h and expect compiler to provide proper builtins, defaulting to the GCC interface. lint still has a special fallback. Reduce abuse of _BSD_VA_LIST_ by defining __va_list by default and derive va_list as required by standards.
|
| 1.81 |
| 30-Jun-2011 |
matt | Modify mapiodev to take a third argument indicating whether the space should be prefetchable (true) or not (false).
|
| 1.80 |
| 19-Jun-2011 |
matt | Use __builtin_clz instead of cntlzw
|
| 1.79 |
| 02-May-2011 |
matt | branches: 1.79.2; A little PMAP_OEA64 pmap support.
|
| 1.78 |
| 18-Feb-2011 |
matt | Move powerpc_mmap_flags since pmap.c can get compiled multiple time resulting in multiple defintions of powerpc_mmap_flags.
|
| 1.77 |
| 15-Feb-2011 |
macallan | implement pmap_mmap_flags() and teach PowerPC's bus_space_mmap() to actually use BUS_SPACE_MAP_PREFETCHABLE which, now that /dev/pci* knows how to use it, helps improve X performance
|
| 1.76 |
| 12-Feb-2011 |
matt | When an OEA kernel is configured for multiple MMU types, use the new powerpc fixup mechanism to bind the kernel to a particular MMU. This avoids an indirect call for every pmap call.
|
| 1.75 |
| 18-Jan-2011 |
matt | branches: 1.75.2; Add support for BookE Freescale MPC85xx (e500 core) processors. Add fast softint support for PowerPC (though only booke uses it). Redo FPU/VEC support and add e500 SPE support. Rework trap/intrs to use a common trapframe format. Support SOFTFLOAT (no hardfloat or fpu emulation) for BookE.
|
| 1.74 |
| 12-Nov-2010 |
uebayasi | branches: 1.74.2; Put VM_PAGE_TO_MD() definition in one place. No functional changes.
|
| 1.73 |
| 10-Nov-2010 |
uebayasi | Use more VM_PHYSMEM_*() accessors. No functional changes.
|
| 1.72 |
| 30-Oct-2010 |
uebayasi | Use VM_PAGE_TO_MD() to locate struct vm_page_md. No functional changes.
|
| 1.71 |
| 25-Feb-2010 |
matt | branches: 1.71.2; Adapt to spr.h breakup.
|
| 1.70 |
| 25-Feb-2010 |
skrll | s/cpu_fork/cpu_lwp_fork/ in comment
|
| 1.69 |
| 21-Nov-2009 |
rmind | branches: 1.69.2; Use lwp_getpcb() on mips, powerpc and sh3, clean from struct user usage.
|
| 1.68 |
| 07-Nov-2009 |
cegger | Add a flags argument to pmap_kenter_pa(9). Patch showed on tech-kern@ http://mail-index.netbsd.org/tech-kern/2009/11/04/msg006434.html No objections.
|
| 1.67 |
| 21-Oct-2009 |
rmind | Remove uarea swap-out functionality:
- Addresses the issue described in PR/38828. - Some simplification in threading and sleepq subsystems. - Eliminates pmap_collect() and, as a side note, allows pmap optimisations. - Eliminates XS_CTL_DATA_ONSTACK in scsipi code. - Avoids few scans on LWP list and thus potentially long holds of proc_lock. - Cuts ~1.5k lines of code. Reduces amd64 kernel size by ~4k. - Removes __SWAP_BROKEN cases.
Tested on x86, mips, acorn32 (thanks <mpumford>) and partly tested on acorn26 (thanks to <bjh21>).
Discussed on <tech-kern>, reviewed by <ad>.
|
| 1.66 |
| 11-Aug-2009 |
matt | Remove all declarations of physmem from sys/arch. Add an include of <sys/systm.h> to the one file that did not already contain it. This now means that physmem can be changed by updating systm.h and uvm_page.c (excluding fixing printfs)
|
| 1.65 |
| 21-Apr-2009 |
cegger | change pmap flags argument from int to u_int. discussed with christos@ on source-changes-d@
|
| 1.64 |
| 11-Dec-2008 |
pooka | branches: 1.64.2; Since oea pmap.c is #included many times, put kernel_pmap_ptr into its own source module to avoid multiple initialized data definitions.
|
| 1.63 |
| 10-Dec-2008 |
pooka | Make kernel_pmap_ptr a const. Requested by steve_martin.
|
| 1.62 |
| 09-Dec-2008 |
pooka | Make pmap_kernel() a MI macro for struct pmap *kernel_pmap_ptr, which is now the "API" provided by the pmap module. pmap_kernel() remains as the syntactic sugar.
Bonus cosmetics round: move all the pmap_t pointer typedefs into uvm_pmap.h.
Thanks to Greg Oster for providing cpu muscle for doing test builds.
|
| 1.61 |
| 29-Oct-2008 |
skrll | branches: 1.61.12; Typo in comment.
|
| 1.60 |
| 05-May-2008 |
chs | branches: 1.60.6; 1.60.8; pmap_upvo_pool needs to use IPL_VM since it is used from pmap_kenter_pa(), which can be called from interrupt context.
|
| 1.59 |
| 28-Apr-2008 |
martin | Remove clause 3 and 4 from TNF licenses
|
| 1.58 |
| 08-Apr-2008 |
garbled | branches: 1.58.2; 1.58.4; SMP support for ofppc. (finally) Much thanks to Matt Thomas for help in figuring out all the crazy nuances of getting this working, and to Michael Lorenz for testing/fixing my changes on macppc. Tested with a quad-proc 7044-270. Summary of changes:
Bumped CPU_MAXNUM to 16 on ofppc. Added md_* routines to ofppc/cpu.c, to sync the timebase, and awaken the CPUs. Fixed a bug in the test for a 64bit bridge cpu early in locore.S Added code to set the interrupt priority for all CPUs with an openpic. Change rtas to probe before cpus, to allow use of the rtas freeze/thaw timebase code routines. Fix CPU_INFO_FOREACH macro to iterate through detected cpus, not CPU_MAXNUM. Change most uses of ci_cpuid to ci_index, to deal with CPUs that do not allow writing to SPR_PIR. Don't write SPR_PIR unless the secondary cpu identifies itself as 0. Change the hatchstack/interrupt stack allocations to allocate a 8192byte interrupt stack, and a 4096 byte hatch stack, align them to 16 bytes, and allocate them no lower than 0x10000. Allocate them separately to prevent the hatch stack corrupting the interrupt stack later on. If the CPU is a 64bit cpu, copy SPR_ASR in cpu_hatch() Set the idle stack to ci->ci_data.cpu_idlelwp->l_addr->u_pcb.pcb_sp. Add OF_start_cpu(). Add a routine to ofwoea_initppc to spin up secondary procs early, and place them into a spinloop waiting for the hatch routines to be ready. Modify the ipi routines to deal with openpics that reverse byte order on read from an ipi register. (such as on the 7044) Change the rtas setup to allocate the rtas physical base address above the kernel, to avoid mucking up the hatch/interrupt stacks.
|
| 1.57 |
| 11-Mar-2008 |
matt | on MP systems, whenever we change a PTE, make to sync the data cache so that other processors can see the change.
|
| 1.56 |
| 17-Feb-2008 |
phx | branches: 1.56.2; 1.56.6; Fixed compilation with DEBUG option for PMAP_OEA64_BRIDGE. Approved by garbled.
|
| 1.55 |
| 05-Feb-2008 |
garbled | Ifdef out all the MPC601 code with PPC_OEA601. Now only arches that have the possibility of running on an MPC601, are infected with all the extra code and nops that it added.
Also, fix compilation that I broke with the pmap code, by adding oeacpufeat to the locores of various ppc arches. Noted by mlelstv.
|
| 1.54 |
| 05-Feb-2008 |
mlelstv | fix and cleanup debug printf formats
|
| 1.53 |
| 05-Feb-2008 |
garbled | Rewrite a big chunk of the pmap and locore code for powerpc to better deal with the 64bit bridge mode. pmap changes by Matt Thomas, rest by myself.
Change pmap.c to work similar to exec_elf.c to allow us to compile in multiple pmaps to a single kernel. This allows the pmap for bridge64 to co-exist with the 32bit pmap.
Yank __HAVE_PMAP_PHYSSEG from all the oea code.
Add a new global, "oeacpufeat", which is used early in locore to determine certain cpu features. This allows us to conditionalize code early in the boot for certain CPUs that have special needs.
Yank most of the ifdef PPC_OEA_BRIDGE64 code from almost every file it was found in. Some of it seemed incorrect, and my 7044 booted just fine without it. It would appear that the bridge cpus treat BAT instructions as nops, so they seem to be safe.
In ofppc, check the oeacpufeat, and if we are on a 64bit proc, clear MSR[SF], and ASR[V].
With all of these changes, a kernel with both PPC_OEA and PPC_OEA_BRIDGE64 will boot on the POWERIII-2 cpu. However, it will not yet boot on a 32bit cpu, because of CACHELINESIZE. Work remains to be done there to fix that.
|
| 1.52 |
| 17-Jan-2008 |
garbled | Add support to ofppc for the IBM 7044-270 machine. This is a POWER3-II based machine. Currently the kernel to run on this machine is incompatible with the standard GENERIC kernel, so for now, we have a separate GENERIC_B64. Eventually, I hope to combine the two.
Please note, this is a port of 32bit ofppc, not a powerpc64 port.
Thanks to Matt Thomas and Kevin Bowling for helping to make this port possible.
Summary of changes:
Change ofwpci to use the ofmethod config for configuring the PCI bus, rather than indirect configuration. Move the wiring of the interrupt controllers from at the start of the boot, into the configuration of the first PCI bus. Rewrite the map_isa_ioregs() hack to work on a machine without BATs Fix a ton of bugs in the genofw_find_pics routine, and in the map_space code. Split the pic_openpic into openpic_common and pic_openpic. Create a new pic_distopenpic driver, for the distributed openpic found on some newer IBM machines. Fix a bad panic in pmap_extract on 64bit bridge mode
|
| 1.51 |
| 09-Jan-2008 |
garbled | fix a bad cast when compiling in bridge mode
|
| 1.50 |
| 02-Jan-2008 |
ad | Merge vmlocking2 to head.
|
| 1.49 |
| 15-Dec-2007 |
perry | __FUNCTION__ -> __func__
|
| 1.48 |
| 12-Mar-2007 |
ad | branches: 1.48.18; 1.48.24; 1.48.26; 1.48.30; Pass an ipl argument to pool_init/POOL_INIT to be used when initializing the pool's lock.
|
| 1.47 |
| 04-Mar-2007 |
macallan | branches: 1.47.2; make this compile again
|
| 1.46 |
| 04-Mar-2007 |
christos | Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
|
| 1.45 |
| 22-Feb-2007 |
thorpej | TRUE -> true, FALSE -> false
|
| 1.44 |
| 21-Feb-2007 |
thorpej | Replace the Mach-derived boolean_t type with the C99 bool type. A future commit will replace use of TRUE and FALSE with true and false.
|
| 1.43 |
| 30-Oct-2006 |
garbled | branches: 1.43.4; Make these files compile with -Wextra -Wno-unused.
|
| 1.42 |
| 19-Sep-2006 |
matt | When mapping the kernel, make to update its segment register to be valid.
|
| 1.41 |
| 19-Sep-2006 |
matt | At the end of pmap_bootstrap, if PMAP_NEED_MAPKERNEL, map the kernel into the kernel's pmap (text will be rx, data will be rw).
|
| 1.40 |
| 07-Sep-2006 |
sanjayl | branches: 1.40.2; 1.40.4; Remove debug printf that got left in accidentally
|
| 1.39 |
| 02-Sep-2006 |
matt | Add/rename macros (PVO_xxx_P) for testing WIRED, MANAGED, EXECUTABLE ness of a PVO entry. (Fixes where PVO_WIRED was tested against pvo_pt.pte_lo instead of pvo_vaddr)
|
| 1.38 |
| 05-Aug-2006 |
sanjayl | branches: 1.38.2; 1st cut of Powermac G5 support (uses bridge mode).
|
| 1.37 |
| 13-May-2006 |
matt | Fix a problem when an exec page is mapped, modified, and then unmapped. Make sure to either clear the execness or sync the page to the icache.
This fixes gdb testsuite failures. Thanks for nathanw for testing.
|
| 1.36 |
| 12-May-2006 |
nathanw | Fix a typo in a comment.
|
| 1.35 |
| 24-Dec-2005 |
perry | branches: 1.35.4; 1.35.6; 1.35.8; 1.35.12; Remove leading __ from __(const|inline|signed|volatile) -- it is obsolete.
|
| 1.34 |
| 08-Dec-2005 |
yamt | use VM_PAGE_TO_PHYS macro.
|
| 1.33 |
| 27-Sep-2005 |
chs | avoid calling into the pool code while PSL_EE is off. the pool code can do spl*()/splx(), and splx() requires PSL_EE to be on.
|
| 1.32 |
| 02-Jun-2005 |
he | branches: 1.32.2; Remove the hack to compile oea/pmap.c with -Wno-cast-qual, and instead make use of the new __UNVOLATILE() macro in memset() usage.
|
| 1.31 |
| 02-Jun-2005 |
he | Fix variable shadowing warning.
|
| 1.30 |
| 29-May-2005 |
chs | in pmap_enter(), preset the ref bit for execute-only mappings too.
|
| 1.29 |
| 22-Feb-2005 |
briggs | branches: 1.29.2; pmap_extract(): Only attempt to set '*pap' if pap is non-NULL. PR port-powerpc/29507 from Neil Ludban.
|
| 1.28 |
| 13-Feb-2005 |
chs | move recursion-detection code inside interrupt-protected region. PR 24254.
|
| 1.27 |
| 16-Jan-2005 |
chs | branches: 1.27.2; add some whitespace.
|
| 1.26 |
| 24-Aug-2004 |
matt | branches: 1.26.4; Add pmap counters for reclaimed pvos and for the times a pvo could not be obtained. Switch to EVCNT_ATTACH_STATIC* In DEBUG/DIAGNOSTIC, decrement/increment pmap_pvo_enter_depth around pool calls since they could possibly cause a recursion back into pmap_pvo_enter.
|
| 1.25 |
| 19-Aug-2004 |
chs | implement pmap_pvo_reclaim(), which steals an existing non-wired pvo entry for reuse, and use this in pmap_pvo_enter() when we can't allocate a new one.
|
| 1.24 |
| 09-Jun-2004 |
kleink | pmap_extract(): consider the MPC601's different battable layout, and its use of I/O segments.
|
| 1.23 |
| 21-Mar-2004 |
aymeric | branches: 1.23.2; pmap_pinit(): improve the hash function in the case of collisions, the previous version would easily make the low order bits oscillate between 0 and some other value.
Together with the previous change, this should make those pmap_pinit: out of segments panics even less likely.
We should really attempt a systematic search before panic()ing at the end.
|
| 1.22 |
| 21-Mar-2004 |
aymeric | . don't call VSID_TO_HASH() on a pmap.pm_vsid. It already holds the hash value. This should fix PR #24754, as well as many of the hangs and process aborts reported on port-macppc@ in the last weeks. This error would cause the pmap's vsid never to be freed, and would occasionnally free a valid vsid used by another pmap, sometimes the kernel's. . add a related KASSERT() to avoid regression
|
| 1.21 |
| 17-Mar-2004 |
aymeric | defparam PMAP_MEMLIMIT
|
| 1.20 |
| 13-Feb-2004 |
wiz | Uppercase CPU, plural is CPUs.
|
| 1.19 |
| 27-Dec-2003 |
mjl | Add some casts to printf() args to make it compile w/ DEBUG set.
|
| 1.18 |
| 21-Nov-2003 |
matt | More PPC64 changes. (latent for now).
|
| 1.17 |
| 21-Nov-2003 |
matt | Restore ci_curpm since it re-enables 603 to working state.
|
| 1.16 |
| 27-Oct-2003 |
kleink | pmap_print_mmuregs(): move initialization of addr before its first use; reported by David Young.
|
| 1.15 |
| 27-Oct-2003 |
dyoung | Stop false uninitialized variable warning.
|
| 1.14 |
| 24-Aug-2003 |
chs | add support for non-executable mappings (where the hardware allows this) and make the stack and heap non-executable by default. the changes fall into two basic catagories:
- pmap and trap-handler changes. these are all MD: = alpha: we already track per-page execute permission with the (software) PG_EXEC bit, so just have the trap handler pay attention to it. = i386: use a new GDT segment for %cs for processes that have no executable mappings above a certain threshold (currently the bottom of the stack). track per-page execute permission with the last unused PTE bit. = powerpc/ibm4xx: just use the hardware exec bit. = powerpc/oea: we already track per-page exec bits, but the hardware only implements non-exec mappings at the segment level. so track the number of executable mappings in each segment and turn on the no-exec segment bit iff the count is 0. adjust the trap handler to deal. = sparc (sun4m): fix our use of the hardware protection bits. fix the trap handler to recognize text faults. = sparc64: split the existing unified TSB into data and instruction TSBs, and only load TTEs into the appropriate TSB(s) for the permissions. fix the trap handler to check for execute permission. = not yet implemented: amd64, hppa, sh5
- changes in all the emulations that put a signal trampoline on the stack. instead, we now put the trampoline into a uvm_aobj and map that into the process separately.
originally from openbsd, adapted for netbsd by me.
|
| 1.13 |
| 12-Aug-2003 |
matt | Nuke ci_curpm and curpm. Nuke pcb_pmreal. Those were use for spill stacks and those no longer exist. for few uses that need CURPM, use CURPCB/PCB_PM
|
| 1.12 |
| 08-Aug-2003 |
matt | Allow only user-mappings to be evicted (spillage). This prevents the dreaded eviction of a kernel stack page.
|
| 1.11 |
| 15-Jul-2003 |
lukem | __KERNEL_RCSID()
|
| 1.10 |
| 10-May-2003 |
thorpej | branches: 1.10.2; Back out the following chagne: http://mail-index.netbsd.org/source-changes/2003/05/08/0068.html
There were some side-effects that I didn't anticipate, and fixing them is proving to be more difficult than I thought, do just eject for now. Maybe one day we can look at this again.
Fixes PR kern/21517.
|
| 1.9 |
| 08-May-2003 |
thorpej | Simplify the way the bounds of the managed kernel virtual address space is advertised to UVM by making virtual_avail and virtual_end first-class exported variables by UVM. Machine-dependent code is responsible for initializing them before main() is called. Anything that steals KVA must adjust these variables accordingly.
This reduces the number of instances of this info from 3 to 1, and simplifies the pmap(9) interface by removing the pmap_virtual_space() function call, and removing two arguments from pmap_steal_memory().
This also eliminates some kludges such as having to burn kernel_map entries on space used by the kernel and stolen KVA.
This also eliminates use of VM_{MIN,MAX}_KERNEL_ADDRESS from MI code, this giving MD code greater flexibility over the bounds of the managed kernel virtual address space if a given port's specific platforms can vary in this regard (this is especially true of the evb* ports).
|
| 1.8 |
| 07-Apr-2003 |
matt | Add a KASSERT to pmap_extract so that vtophys is never attempted on a mapped user address.
|
| 1.7 |
| 04-Apr-2003 |
matt | If extracting an address from the kernel pmap, see if the address is outside the mapped address range. If so, try to look it up via the BAT table. If successful, translate and return the BAT'ed pa.
|
| 1.6 |
| 02-Apr-2003 |
thorpej | Use PAGE_SIZE rather than NBPG.
|
| 1.5 |
| 17-Mar-2003 |
matt | fix typo in comment.
|
| 1.4 |
| 16-Mar-2003 |
matt | Honor PMAP_NC for pmap_kenter_pa. Fix goof in pmap_pte_to_va.
|
| 1.3 |
| 14-Mar-2003 |
matt | Remove Debugger call.
|
| 1.2 |
| 05-Feb-2003 |
matt | Make things a bit more LP64 friendly.
|
| 1.1 |
| 03-Feb-2003 |
matt | Rename PPC_MPC6XX to PPC_OEA (and any mpc6xx reference to oea).
|
| 1.10.2.10 |
| 11-Dec-2005 |
christos | Sync with head.
|
| 1.10.2.9 |
| 10-Nov-2005 |
skrll | Sync with HEAD. Here we go again...
|
| 1.10.2.8 |
| 04-Mar-2005 |
skrll | Sync with HEAD.
Hi Perry!
|
| 1.10.2.7 |
| 15-Feb-2005 |
skrll | Sync with HEAD.
|
| 1.10.2.6 |
| 17-Jan-2005 |
skrll | Sync with HEAD.
|
| 1.10.2.5 |
| 21-Sep-2004 |
skrll | Fix the sync with head I botched.
|
| 1.10.2.4 |
| 18-Sep-2004 |
skrll | Sync with HEAD.
|
| 1.10.2.3 |
| 03-Sep-2004 |
skrll | Sync with HEAD
|
| 1.10.2.2 |
| 25-Aug-2004 |
skrll | Sync with HEAD.
|
| 1.10.2.1 |
| 03-Aug-2004 |
skrll | Sync with HEAD
|
| 1.23.2.1 |
| 22-Aug-2004 |
tron | branches: 1.23.2.1.2; Pull up revision 1.25 (requested by chs in ticket #780): implement pmap_pvo_reclaim(), which steals an existing non-wired pvo entry for reuse, and use this in pmap_pvo_enter() when we can't allocate a new one.
|
| 1.23.2.1.2.1 |
| 07-Aug-2005 |
riz | Pull up revisions 1.23 and 1.29 (requested by briggs in ticket #1238): Consider the MPC601's different battable layout and its use of I/O segments. Ensure that pap is non-NULL before use in pmap_extract(). Fixes PR#29507.
|
| 1.26.4.1 |
| 29-Apr-2005 |
kent | sync with -current
|
| 1.27.2.1 |
| 19-Mar-2005 |
yamt | sync with head. xen and whitespace. xen part is not finished.
|
| 1.29.2.1 |
| 21-Oct-2005 |
tron | Pull up following revision(s) (requested by chs in ticket #897): sys/arch/powerpc/oea/pmap.c: revision 1.33 via patch avoid calling into the pool code while PSL_EE is off. the pool code can do spl*()/splx(), and splx() requires PSL_EE to be on.
|
| 1.32.2.8 |
| 17-Mar-2008 |
yamt | sync with head.
|
| 1.32.2.7 |
| 27-Feb-2008 |
yamt | sync with head.
|
| 1.32.2.6 |
| 11-Feb-2008 |
yamt | sync with head.
|
| 1.32.2.5 |
| 21-Jan-2008 |
yamt | sync with head
|
| 1.32.2.4 |
| 03-Sep-2007 |
yamt | sync with head.
|
| 1.32.2.3 |
| 26-Feb-2007 |
yamt | sync with head.
|
| 1.32.2.2 |
| 30-Dec-2006 |
yamt | sync with head.
|
| 1.32.2.1 |
| 21-Jun-2006 |
yamt | sync with head.
|
| 1.35.12.1 |
| 24-May-2006 |
tron | Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
|
| 1.35.8.4 |
| 14-Sep-2006 |
yamt | sync with head.
|
| 1.35.8.3 |
| 03-Sep-2006 |
yamt | sync with head.
|
| 1.35.8.2 |
| 11-Aug-2006 |
yamt | sync with head
|
| 1.35.8.1 |
| 24-May-2006 |
yamt | sync with head.
|
| 1.35.6.1 |
| 01-Jun-2006 |
kardel | Sync with head.
|
| 1.35.4.1 |
| 09-Sep-2006 |
rpaulo | sync with head
|
| 1.38.2.1 |
| 08-Sep-2006 |
rpaulo | Pull up following revision(s) (requested by garbled in ticket #134): sys/arch/powerpc/oea/pmap.c: revision 1.40 Remove debug printf that got left in accidentally
|
| 1.40.4.2 |
| 10-Dec-2006 |
yamt | sync with head.
|
| 1.40.4.1 |
| 22-Oct-2006 |
yamt | sync with head
|
| 1.40.2.1 |
| 18-Nov-2006 |
ad | Sync with head.
|
| 1.43.4.3 |
| 24-Mar-2007 |
yamt | sync with head.
|
| 1.43.4.2 |
| 12-Mar-2007 |
rmind | Sync with HEAD.
|
| 1.43.4.1 |
| 27-Feb-2007 |
yamt | - sync with head. - move sched_changepri back to kern_synch.c as it doesn't know PPQ anymore.
|
| 1.47.2.1 |
| 13-Mar-2007 |
ad | Sync with head.
|
| 1.48.30.3 |
| 19-Jan-2008 |
bouyer | Sync with HEAD
|
| 1.48.30.2 |
| 10-Jan-2008 |
bouyer | Sync with HEAD
|
| 1.48.30.1 |
| 02-Jan-2008 |
bouyer | Sync with HEAD
|
| 1.48.26.2 |
| 27-Dec-2007 |
ad | locking changes for macppc. Please test.
|
| 1.48.26.1 |
| 26-Dec-2007 |
ad | Sync with head.
|
| 1.48.24.1 |
| 18-Feb-2008 |
mjf | Sync with HEAD.
|
| 1.48.18.2 |
| 23-Mar-2008 |
matt | sync with HEAD
|
| 1.48.18.1 |
| 09-Jan-2008 |
matt | sync with HEAD
|
| 1.56.6.3 |
| 17-Jan-2009 |
mjf | Sync with HEAD.
|
| 1.56.6.2 |
| 02-Jun-2008 |
mjf | Sync with HEAD.
|
| 1.56.6.1 |
| 03-Apr-2008 |
mjf | Sync with HEAD.
|
| 1.56.2.1 |
| 24-Mar-2008 |
keiichi | sync with head.
|
| 1.58.4.4 |
| 11-Mar-2010 |
yamt | sync with head
|
| 1.58.4.3 |
| 19-Aug-2009 |
yamt | sync with head.
|
| 1.58.4.2 |
| 04-May-2009 |
yamt | sync with head.
|
| 1.58.4.1 |
| 16-May-2008 |
yamt | sync with head.
|
| 1.58.2.1 |
| 18-May-2008 |
yamt | sync with head.
|
| 1.60.8.2 |
| 28-Apr-2009 |
skrll | Sync with HEAD.
|
| 1.60.8.1 |
| 19-Jan-2009 |
skrll | Sync with HEAD.
|
| 1.60.6.1 |
| 13-Dec-2008 |
haad | Update haad-dm branch to haad-dm-base2.
|
| 1.61.12.3 |
| 26-Jan-2011 |
matt | Change battable to have a granularity of 8MB.
|
| 1.61.12.2 |
| 17-Jan-2011 |
matt | Add SPE (signal processing engine) support for mpc85xx/booke. Think of it as AltiVec-lite (really lite). Genercize AltiVec support so that it could the same interface could support SPE as well. Rework the FPU support along the same lines. Move the __asm() to their own XXX_subr.S (altivec, fpu, spe).
|
| 1.61.12.1 |
| 07-Jan-2011 |
matt | Deal with new powerpc world.
|
| 1.64.2.1 |
| 13-May-2009 |
jym | Sync with HEAD.
Commit is split, to avoid a "too many arguments" protocol error.
|
| 1.69.2.5 |
| 06-Nov-2010 |
uebayasi | Sync with HEAD.
|
| 1.69.2.4 |
| 30-Oct-2010 |
uebayasi | Implement pmap_physload_device(9) to replace xmd(4) MD backend. Implement pmap_mmap(9) and use it from mem(4) and xmd(4).
|
| 1.69.2.3 |
| 30-Apr-2010 |
uebayasi | Sync with HEAD.
|
| 1.69.2.2 |
| 28-Apr-2010 |
uebayasi | Always use struct vm_physseg *vm_physmem_ptrs[] in MD code.
|
| 1.69.2.1 |
| 26-Feb-2010 |
uebayasi | Use VM_PAGE_TO_MD(). Only compile tested.
|
| 1.71.2.2 |
| 31-May-2011 |
rmind | sync with head
|
| 1.71.2.1 |
| 05-Mar-2011 |
rmind | sync with head
|
| 1.74.2.1 |
| 06-Jun-2011 |
jruoho | Sync with HEAD.
|
| 1.75.2.2 |
| 05-Mar-2011 |
bouyer | Sync with HEAD
|
| 1.75.2.1 |
| 17-Feb-2011 |
bouyer | Sync with HEAD
|
| 1.79.2.1 |
| 23-Jun-2011 |
cherry | Catchup with rmind-uvmplock merge.
|
| 1.82.6.1 |
| 18-Feb-2012 |
mrg | merge to -current.
|
| 1.82.2.3 |
| 22-May-2014 |
yamt | sync with head.
for a reference, the tree before this commit was tagged as yamt-pagecache-tag8.
this commit was splitted into small chunks to avoid a limitation of cvs. ("Protocol error: too many arguments")
|
| 1.82.2.2 |
| 30-Oct-2012 |
yamt | sync with head
|
| 1.82.2.1 |
| 17-Apr-2012 |
yamt | sync with head
|
| 1.86.2.4 |
| 03-Dec-2017 |
jdolecek | update from HEAD
|
| 1.86.2.3 |
| 20-Aug-2014 |
tls | Rebase to HEAD as of a few days ago.
|
| 1.86.2.2 |
| 23-Jun-2013 |
tls | resync from head
|
| 1.86.2.1 |
| 20-Nov-2012 |
tls | Resync to 2012-11-19 00:00:00 UTC
|
| 1.89.4.1 |
| 18-May-2014 |
rmind | sync with head
|
| 1.92.4.2 |
| 05-Feb-2017 |
skrll | Sync with HEAD
|
| 1.92.4.1 |
| 19-Mar-2016 |
skrll | Sync with HEAD
|
| 1.92.2.1 |
| 07-Jun-2020 |
martin | Pull up following revision(s) (requested by rin in ticket #1732):
sys/arch/powerpc/oea/pmap.c: revision 1.96
Stop returning while PMAP_LOCK() (= KERNEL_LOCK(1, NULL)) is held. Kernel freeze with heavy load is significantly mitigated (fixed?), in which I could not even enter DDB from console.
XXX There is still inconsistency in usage of two PVO pools. I will send-pr later.
XXX pullup to netbsd-[987]
|
| 1.93.2.1 |
| 07-Jan-2017 |
pgoyette | Sync with HEAD. (Note that most of these changes are simply $NetBSD$ tag issues.)
|
| 1.94.8.2 |
| 07-Jun-2020 |
martin | Pull up following revision(s) (requested by rin in ticket #1554):
sys/arch/powerpc/oea/pmap.c: revision 1.96
Stop returning while PMAP_LOCK() (= KERNEL_LOCK(1, NULL)) is held. Kernel freeze with heavy load is significantly mitigated (fixed?), in which I could not even enter DDB from console.
XXX There is still inconsistency in usage of two PVO pools. I will send-pr later.
XXX pullup to netbsd-[987]
|
| 1.94.8.1 |
| 27-Feb-2018 |
martin | Pull up following revision(s) (requested by mrg in ticket #593): sys/dev/marvell/mvxpsec.c: revision 1.2 sys/arch/m68k/m68k/pmap_motorola.c: revision 1.70 sys/opencrypto/crypto.c: revision 1.102 sys/arch/sparc64/sparc64/pmap.c: revision 1.308 sys/ufs/chfs/chfs_malloc.c: revision 1.5 sys/arch/powerpc/oea/pmap.c: revision 1.95 sys/sys/pool.h: revision 1.80,1.82 sys/kern/subr_pool.c: revision 1.209-1.216,1.219-1.220 sys/arch/alpha/alpha/pmap.c: revision 1.262 sys/kern/uipc_mbuf.c: revision 1.173 sys/uvm/uvm_fault.c: revision 1.202 sys/sys/mbuf.h: revision 1.172 sys/kern/subr_extent.c: revision 1.86 sys/arch/x86/x86/pmap.c: revision 1.266 (via patch) sys/dev/dtv/dtv_scatter.c: revision 1.4
Allow only one pending call to a pool's backing allocator at a time. Candidate fix for problems with hanging after kva fragmentation related to PR kern/45718.
Proposed on tech-kern: https://mail-index.NetBSD.org/tech-kern/2017/10/23/msg022472.html Tested by bouyer@ on i386.
This makes one small change to the semantics of pool_prime and pool_setlowat: they may fail with EWOULDBLOCK instead of ENOMEM, if there is a pending call to the backing allocator in another thread but we are not actually out of memory. That is unlikely because nearly always these are used during initialization, when the pool is not in use.
Define the new flag too for previous commit.
pool_grow can now fail even when sleeping is ok. Catch this case in pool_get and retry.
Assert that pool_get failure happens only with PR_NOWAIT. This would have caught the mistake I made last week leading to null pointer dereferences all over the place, a mistake which I evidently poorly scheduled alongside maxv's change to the panic message on x86 for null pointer dereferences.
Since pr_lock is now used to wait for two things now (PR_GROWING and PR_WANTED) we need to loop for the condition we wanted. make the KASSERTMSG/panic strings consistent as '%s: [%s], __func__, wchan' Handle the ERESTART case from pool_grow()
don't pass 0 to the pool flags Guess pool_cache_get(pc, 0) means PR_WAITOK here. Earlier on in the same context we use kmem_alloc(sz, KM_SLEEP).
use PR_WAITOK everywhere. use PR_NOWAIT.
Don't use 0 for PR_NOWAIT
use PR_NOWAIT instead of 0
panic ex nihilo -- PR_NOWAITing for zerot
Add assertions that either PR_WAITOK or PR_NOWAIT are set. - fix an assert; we can reach there if we are nowait or limitfail. - when priming the pool and failing with ERESTART, don't decrement the number of pages; this avoids the issue of returning an ERESTART when we get to 0, and is more correct. - simplify the pool_grow code, and don't wakeup things if we ENOMEM.
In pmap_enter_ma(), only try to allocate pves if we might need them, and even if that fails, only fail the operation if we later discover that we really do need them. This implements the requirement that pmap_enter(PMAP_CANFAIL) must not fail when replacing an existing mapping with the first mapping of a new page, which is an unintended consequence of the changes from the rmind-uvmplock branch in 2011.
The problem arises when pmap_enter(PMAP_CANFAIL) is used to replace an existing pmap mapping with a mapping of a different page (eg. to resolve a copy-on-write). If that fails and leaves the old pmap entry in place, then UVM won't hold the right locks when it eventually retries. This entanglement of the UVM and pmap locking was done in rmind-uvmplock in order to improve performance, but it also means that the UVM state and pmap state need to be kept in sync more than they did before. It would be possible to handle this in the UVM code instead of in the pmap code, but these pmap changes improve the handling of low memory situations in general, and handling this in UVM would be clunky, so this seemed like the better way to go.
This somewhat indirectly fixes PR 52706, as well as the failing assertion about "uvm_page_locked_p(old_pg)". (but only on x86, various other platforms will need their own changes to handle this issue.) In uvm_fault_upper_enter(), if pmap_enter(PMAP_CANFAIL) fails, assert that the pmap did not leave around a now-stale pmap mapping for an old page. If such a pmap mapping still existed after we unlocked the vm_map, the UVM code would not know later that it would need to lock the lower layer object while calling the pmap to remove or replace that stale pmap mapping. See PR 52706 for further details. hopefully workaround the irregularly "fork fails in init" problem. if a pool is growing, and the grower is PR_NOWAIT, mark this. if another caller wants to grow the pool and is also PR_NOWAIT, busy-wait for the original caller, which should either succeed or hard-fail fairly quickly.
implement the busy-wait by unlocking and relocking this pools mutex and returning ERESTART. other methods (such as having the caller do this) were significantly more code and this hack is fairly localised. ok chs@ riastradh@
Don't release the lock in the PR_NOWAIT allocation. Move flags setting after the acquiring the mutex. (from Tobias Nygren) apply the change from arch/x86/x86/pmap.c rev. 1.266 commitid vZRjvmxG7YTHLOfA:
In pmap_enter_ma(), only try to allocate pves if we might need them, and even if that fails, only fail the operation if we later discover that we really do need them. If we are replacing an existing mapping, reuse the pv structure where possible.
This implements the requirement that pmap_enter(PMAP_CANFAIL) must not fail when replacing an existing mapping with the first mapping of a new page, which is an unintended consequence of the changes from the rmind-uvmplock branch in 2011.
The problem arises when pmap_enter(PMAP_CANFAIL) is used to replace an existing pmap mapping with a mapping of a different page (eg. to resolve a copy-on-write). If that fails and leaves the old pmap entry in place, then UVM won't hold the right locks when it eventually retries. This entanglement of the UVM and pmap locking was done in rmind-uvmplock in order to improve performance, but it also means that the UVM state and pmap state need to be kept in sync more than they did before. It would be possible to handle this in the UVM code instead of in the pmap code, but these pmap changes improve the handling of low memory situations in general, and handling this in UVM would be clunky, so this seemed like the better way to go.
This somewhat indirectly fixes PR 52706 on the remaining platforms where this problem existed.
|
| 1.95.8.1 |
| 07-Jun-2020 |
martin | Pull up following revision(s) (requested by rin in ticket #938):
sys/arch/powerpc/oea/pmap.c: revision 1.96
Stop returning while PMAP_LOCK() (= KERNEL_LOCK(1, NULL)) is held. Kernel freeze with heavy load is significantly mitigated (fixed?), in which I could not even enter DDB from console.
XXX There is still inconsistency in usage of two PVO pools. I will send-pr later.
XXX pullup to netbsd-[987]
|
| 1.98.2.1 |
| 03-Apr-2021 |
thorpej | Sync with HEAD.
|
| 1.105.4.1 |
| 01-Aug-2021 |
thorpej | Sync with HEAD.
|
| 1.114.4.2 |
| 29-Dec-2023 |
martin | Additionally pull up following revision(s) (requested by rin in ticket #400):
sys/arch/powerpc/include/oea/pmap.h: revision 1.39 sys/arch/powerpc/include/pmap.h: revision 1.43 sys/arch/powerpc/oea/pmap_kernel.c: revision 1.14 sys/arch/powerpc/oea/pmap.c: revision 1.117 sys/arch/powerpc/oea/pmap.c: revision 1.118 sys/arch/powerpc/oea/pmap.c: revision 1.119 sys/arch/powerpc/include/vmparam.h: revision 1.27 sys/arch/powerpc/powerpc/trap.c: revision 1.165 sys/arch/powerpc/oea/pmap.c: revision 1.120 sys/arch/powerpc/oea/pmap.c: revision 1.121 sys/arch/powerpc/powerpc/vm_machdep.c: revision 1.106 sys/arch/powerpc/powerpc/bus_dma.c: revision 1.56
powerpc/oea: trap: pmap_{pte,ste}_spill() even in the interrupt context
Page table for oea is something like L2 TLB on memory; kernel and processes share its entries, and process entries can be spilled out.
As done for MMU based on software-managed TLB, we need to restore such entries even in the interrupt context.
Note that pmap_pte_spill() require no resouce to restore entries. Still-not-implemented pmap_ste_spill() for OEA64 should also. Part of PR kern/57621
powerpc/oea: pmap: Drop unused argument for pmap_pvo_reclaim(), NFC Part of PR kern/57621
powerpc/oea: pmap: Rework pmap_pte_spill()
It was broken in many ways... Now, it gets working stable both for OEA and OEA64_BRIDGE, as far as I can see. Part of PR kern/57621
powerpc/oea: pmap: Fix mostly-pointless overhead of pmap_pvo_pool (1) Drop __aligned(32) from struct pvo_entry; otherwise, sizeof(struct pvo_entry) is round-up'ed to a multiple of 32. (2) Do not set sizeof(struct pvo_entry) to `align` argument for pool_init(9); it must be power of 2. (3) Align pvo_entry to 32-byte boundary only if reasonably possible, i.e., OEA without DIAGNOSTIC (--> POOL_REDZONE) for now. Part of PR kern/57621
powerpc/oea: pmap_create: Use PR_ZERO and drop memset(9), NFC Part of PR kern/57621
powerpc: oea: For OEA64_BRIDGE, 1:1 map up to 3GiB memory As done for OEA. Note that kva over 3GiB is reserved.
Provide PMAP_MAP_POOLPAGE for OEA64_BRIDGE at the same time, by which direct-mapped memory is utilized in order to work around starvation of 512MiB kernel virtual space. PR kern/57621
powerpc: Make sure direct-mapped buffer fits within correct range
For OEA and OEA64_BRIDGE, only first 3GiB memory is direct-mapped. Part of PR kern/57621
|
| 1.114.4.1 |
| 09-Oct-2023 |
martin | Pull up following revision(s) (requested by rin in ticket #400):
sys/arch/powerpc/oea/pmap.c: revision 1.115
powerpc/oea: pmap: Use pool_allocator_nointr() for pmap_pool
As done for (majority of) other pmap implementations. pmap_pool_allocator() allocates memory below 256MB, but it is not necessary for struct pmap.
Fix part of PR kern/57621, i.e., stall in pmap_create(9).
There should be another bugs that cause (MP?) kernel hangs reported in the PR, in pmap or other MD components for powerpc (PR port-powerpc/56922 should be one of the candidates). XXX
pmap for powerpc/oea apparently needs some clean ups. But leave it as is, and pull up this minimum fix to netbsd-10 at the moment.
|