Hello, Can somebody explain how socow_setup() synchronizes access to the page it wants to COW:
99 s = splvm(); 100 /* 101 * verify page is mapped & not already wired for i/o 102 */ 103 socow_stats.attempted++; 104 pa=pmap_extract(map->pmap, uva); 105 if(!pa) { 106 socow_stats.fail_not_mapped++; 107 splx(s); 108 return(0); 109 } 110 pp = PHYS_TO_VM_PAGE(pa); 111 /* 112 * set up COW 113 */ 114 vm_page_lock_queues(); 115 vm_page_cowsetup(pp); How socow_setup() is sure, that pp is valid after pmap_extract() (line 104) and before vm_page_lock_queues() (line 114) ? Another question, why socow_setup() uses vm_page_wire() instead of pmap_extract_and_hold() ? When a page should be held and when it should be wired? According the comment for vm_page_hold(), a page should be held only for "*very* temporary holding", so when one decides what to use (vm_page_hold() or vm_page_wire()), he should decide what will be more effective: simply increment m->hold_count or increment m->wire_count and remove m from the page queue (so this page will be invisible for vm_pageout_scan()). Am I right? _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"