Changeset View
Changeset View
Standalone View
Standalone View
vm_fault.c
Show First 20 Lines • Show All 599 Lines • ▼ Show 20 Lines | if (fs.entry->eflags & MAP_ENTRY_NOFAULT) { | ||||
panic("%s: fault on nofault entry, addr: %#lx", | panic("%s: fault on nofault entry, addr: %#lx", | ||||
__func__, (u_long)vaddr); | __func__, (u_long)vaddr); | ||||
} | } | ||||
if (fs.entry->eflags & MAP_ENTRY_IN_TRANSITION && | if (fs.entry->eflags & MAP_ENTRY_IN_TRANSITION && | ||||
fs.entry->wiring_thread != curthread) { | fs.entry->wiring_thread != curthread) { | ||||
vm_map_unlock_read(fs.map); | vm_map_unlock_read(fs.map); | ||||
vm_map_lock(fs.map); | vm_map_lock(fs.map); | ||||
if (vm_map_lookup_entry(fs.map, vaddr, &fs.entry) && | if (vm_map_lookup_entry_lesseq(fs.map, vaddr, &fs.entry) && | ||||
(fs.entry->eflags & MAP_ENTRY_IN_TRANSITION)) { | (fs.entry->eflags & MAP_ENTRY_IN_TRANSITION)) { | ||||
unlock_vp(&fs); | unlock_vp(&fs); | ||||
fs.entry->eflags |= MAP_ENTRY_NEEDS_WAKEUP; | fs.entry->eflags |= MAP_ENTRY_NEEDS_WAKEUP; | ||||
vm_map_unlock_and_wait(fs.map, 0); | vm_map_unlock_and_wait(fs.map, 0); | ||||
} else | } else | ||||
vm_map_unlock(fs.map); | vm_map_unlock(fs.map); | ||||
goto RetryFault; | goto RetryFault; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,227 Lines • Show Last 20 Lines |