* The info structure for the pmap_inval*() API is only initialized
conditionally as an optimization.
* There was a case where the info structure was being used without
first being initialized which matches reported panics (essentially
a pipe buffer page in kernel memory is swapped out and the faulted back
in during a uiomove).
Reported-by: vsrinivas, marino, several others
while (opa) {
KKASSERT((origpte & PG_FRAME) ==
(*(vm_offset_t *)pte & PG_FRAME));
+ if (prot & VM_PROT_NOSYNC) {
+ prot &= ~VM_PROT_NOSYNC;
+ pmap_inval_init(&info);
+ }
pmap_remove_pte(pmap, pte, va, &info);
pte = pmap_pte(pmap, va);
origpte = *(vm_offset_t *)pte;