vm_fault.c (296373) | vm_fault.c (307929) |
---|---|
1/*- 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * Copyright (c) 1994 John S. Dyson 5 * All rights reserved. 6 * Copyright (c) 1994 David Greenman 7 * All rights reserved. 8 * --- 58 unchanged lines hidden (view full) --- 67 * rights to redistribute these changes. 68 */ 69 70/* 71 * Page fault handling module. 72 */ 73 74#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1991, 1993 3 * The Regents of the University of California. All rights reserved. 4 * Copyright (c) 1994 John S. Dyson 5 * All rights reserved. 6 * Copyright (c) 1994 David Greenman 7 * All rights reserved. 8 * --- 58 unchanged lines hidden (view full) --- 67 * rights to redistribute these changes. 68 */ 69 70/* 71 * Page fault handling module. 72 */ 73 74#include <sys/cdefs.h> |
75__FBSDID("$FreeBSD: releng/10.3/sys/vm/vm_fault.c 286362 2015-08-06 08:51:15Z kib $"); | 75__FBSDID("$FreeBSD: releng/10.3/sys/vm/vm_fault.c 307929 2016-10-25 16:45:55Z glebius $"); |
76 77#include "opt_ktrace.h" 78#include "opt_vm.h" 79 80#include <sys/param.h> 81#include <sys/systm.h> 82#include <sys/kernel.h> 83#include <sys/lock.h> --- 197 unchanged lines hidden (view full) --- 281 282int 283vm_fault_hold(vm_map_t map, vm_offset_t vaddr, vm_prot_t fault_type, 284 int fault_flags, vm_page_t *m_hold) 285{ 286 vm_prot_t prot; 287 long ahead, behind; 288 int alloc_req, era, faultcount, nera, reqpage, result; | 76 77#include "opt_ktrace.h" 78#include "opt_vm.h" 79 80#include <sys/param.h> 81#include <sys/systm.h> 82#include <sys/kernel.h> 83#include <sys/lock.h> --- 197 unchanged lines hidden (view full) --- 281 282int 283vm_fault_hold(vm_map_t map, vm_offset_t vaddr, vm_prot_t fault_type, 284 int fault_flags, vm_page_t *m_hold) 285{ 286 vm_prot_t prot; 287 long ahead, behind; 288 int alloc_req, era, faultcount, nera, reqpage, result; |
289 boolean_t growstack, is_first_object_locked, wired; | 289 boolean_t dead, growstack, is_first_object_locked, wired; |
290 int map_generation; 291 vm_object_t next_object; 292 vm_page_t marray[VM_FAULT_READ_MAX]; 293 int hardfault; 294 struct faultstate fs; 295 struct vnode *vp; 296 vm_page_t m; 297 int locked, error; --- 120 unchanged lines hidden (view full) --- 418 419 /* 420 * Search for the page at object/offset. 421 */ 422 fs.object = fs.first_object; 423 fs.pindex = fs.first_pindex; 424 while (TRUE) { 425 /* | 290 int map_generation; 291 vm_object_t next_object; 292 vm_page_t marray[VM_FAULT_READ_MAX]; 293 int hardfault; 294 struct faultstate fs; 295 struct vnode *vp; 296 vm_page_t m; 297 int locked, error; --- 120 unchanged lines hidden (view full) --- 418 419 /* 420 * Search for the page at object/offset. 421 */ 422 fs.object = fs.first_object; 423 fs.pindex = fs.first_pindex; 424 while (TRUE) { 425 /* |
426 * If the object is dead, we stop here | 426 * If the object is marked for imminent termination, 427 * we retry here, since the collapse pass has raced 428 * with us. Otherwise, if we see terminally dead 429 * object, return fail. |
427 */ | 430 */ |
428 if (fs.object->flags & OBJ_DEAD) { | 431 if ((fs.object->flags & OBJ_DEAD) != 0) { 432 dead = fs.object->type == OBJT_DEAD; |
429 unlock_and_deallocate(&fs); | 433 unlock_and_deallocate(&fs); |
430 return (KERN_PROTECTION_FAILURE); | 434 if (dead) 435 return (KERN_PROTECTION_FAILURE); 436 pause("vmf_de", 1); 437 goto RetryFault; |
431 } 432 433 /* 434 * See if page is resident 435 */ 436 fs.m = vm_page_lookup(fs.object, fs.pindex); 437 if (fs.m != NULL) { 438 /* --- 1143 unchanged lines hidden --- | 438 } 439 440 /* 441 * See if page is resident 442 */ 443 fs.m = vm_page_lookup(fs.object, fs.pindex); 444 if (fs.m != NULL) { 445 /* --- 1143 unchanged lines hidden --- |