Lines 37-45
Link Here
|
37 |
#include <sys/param.h> |
37 |
#include <sys/param.h> |
38 |
#include <sys/systm.h> |
38 |
#include <sys/systm.h> |
39 |
#include <sys/kernel.h> |
39 |
#include <sys/kernel.h> |
|
|
40 |
#include <sys/lock.h> |
40 |
#include <sys/malloc.h> |
41 |
#include <sys/malloc.h> |
41 |
#include <sys/module.h> |
42 |
#include <sys/module.h> |
42 |
#include <sys/conf.h> |
43 |
#include <sys/conf.h> |
|
|
44 |
#include <sys/rwlock.h> |
43 |
#include <sys/sysctl.h> |
45 |
#include <sys/sysctl.h> |
44 |
|
46 |
|
45 |
#include <vm/vm.h> |
47 |
#include <vm/vm.h> |
Lines 344-355
Link Here
|
344 |
os_state *state = &global_state; |
346 |
os_state *state = &global_state; |
345 |
os_pmap *pmap = &state->pmap; |
347 |
os_pmap *pmap = &state->pmap; |
346 |
|
348 |
|
347 |
if ( !vm_page_lookup(state->vmobject, page->pindex) ) { |
|
|
348 |
return; |
349 |
} |
350 |
|
349 |
|
351 |
os_pmap_putindex(pmap, page->pindex); |
350 |
#if __FreeBSD_version > 1000029 |
352 |
vm_page_free(page); |
351 |
VM_OBJECT_WLOCK(state->vmobject); |
|
|
352 |
#else |
353 |
VM_OBJECT_LOCK(state->vmobject); |
354 |
#endif |
355 |
if ( vm_page_lookup(state->vmobject, page->pindex) ) { |
356 |
os_pmap_putindex(pmap, page->pindex); |
357 |
#if __FreeBSD_version >= 900000 |
358 |
vm_page_lock(page); |
359 |
#else |
360 |
vm_page_lock_queues(); |
361 |
#endif |
362 |
vm_page_free(page); |
363 |
#if __FreeBSD_version >= 900000 |
364 |
vm_page_unlock(page); |
365 |
#else |
366 |
vm_page_unlock_queues(); |
367 |
#endif |
368 |
} |
369 |
#if __FreeBSD_version > 1000029 |
370 |
VM_OBJECT_WUNLOCK(state->vmobject); |
371 |
#else |
372 |
VM_OBJECT_UNLOCK(state->vmobject); |
373 |
#endif |
353 |
} |
374 |
} |
354 |
|
375 |
|
355 |
|
376 |
|
Lines 361-368
Link Here
|
361 |
os_state *state = &global_state; |
382 |
os_state *state = &global_state; |
362 |
os_pmap *pmap = &state->pmap; |
383 |
os_pmap *pmap = &state->pmap; |
363 |
|
384 |
|
|
|
385 |
#if __FreeBSD_version > 1000029 |
386 |
VM_OBJECT_WLOCK(state->vmobject); |
387 |
#else |
388 |
VM_OBJECT_LOCK(state->vmobject); |
389 |
#endif |
390 |
|
364 |
pindex = os_pmap_getindex(pmap); |
391 |
pindex = os_pmap_getindex(pmap); |
365 |
if (pindex == (vm_pindex_t)-1) { |
392 |
if (pindex == (vm_pindex_t)-1) { |
|
|
393 |
#if __FreeBSD_version > 1000029 |
394 |
VM_OBJECT_WUNLOCK(state->vmobject); |
395 |
#else |
396 |
VM_OBJECT_UNLOCK(state->vmobject); |
397 |
#endif |
366 |
return NULL; |
398 |
return NULL; |
367 |
} |
399 |
} |
368 |
|
400 |
|
Lines 383-388
Link Here
|
383 |
if (!page) { |
415 |
if (!page) { |
384 |
os_pmap_putindex(pmap, pindex); |
416 |
os_pmap_putindex(pmap, pindex); |
385 |
} |
417 |
} |
|
|
418 |
#if __FreeBSD_version > 1000029 |
419 |
VM_OBJECT_WUNLOCK(state->vmobject); |
420 |
#else |
421 |
VM_OBJECT_UNLOCK(state->vmobject); |
422 |
#endif |
386 |
|
423 |
|
387 |
return page; |
424 |
return page; |
388 |
} |
425 |
} |