We do not necessarily need to map/unmap pages to zero parts of them.
On systems where physical memory is also direct mapped (alpha, sparc, ia64 etc) this is slightly harmful.
This commit is contained in:
@@ -456,6 +456,18 @@ vm_page_zero_fill(vm_page_t m)
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* vm_page_zero_fill_area:
|
||||
*
|
||||
* Like vm_page_zero_fill but only fill the specified area.
|
||||
*/
|
||||
boolean_t
|
||||
vm_page_zero_fill_area(vm_page_t m, int off, int size)
|
||||
{
|
||||
pmap_zero_page_area(m, off, size);
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
* vm_page_copy:
|
||||
*
|
||||
|
||||
@@ -327,6 +327,7 @@ void vm_page_hold(vm_page_t mem);
|
||||
void vm_page_unhold(vm_page_t mem);
|
||||
void vm_page_protect(vm_page_t mem, int prot);
|
||||
boolean_t vm_page_zero_fill(vm_page_t m);
|
||||
boolean_t vm_page_zero_fill_area(vm_page_t m, int off, int len);
|
||||
void vm_page_copy(vm_page_t src_m, vm_page_t dest_m);
|
||||
void vm_page_free(vm_page_t m);
|
||||
void vm_page_free_zero(vm_page_t m);
|
||||
|
||||
@@ -305,7 +305,6 @@ vnode_pager_setsize(vp, nsize)
|
||||
* it can screw up NFS reads, so we don't allow the case.
|
||||
*/
|
||||
if (nsize & PAGE_MASK) {
|
||||
vm_offset_t kva;
|
||||
vm_page_t m;
|
||||
|
||||
m = vm_page_lookup(object, OFF_TO_IDX(nsize));
|
||||
@@ -317,9 +316,7 @@ vnode_pager_setsize(vp, nsize)
|
||||
* Clear out partial-page garbage in case
|
||||
* the page has been mapped.
|
||||
*/
|
||||
kva = vm_pager_map_page(m);
|
||||
bzero((caddr_t)kva + base, size);
|
||||
vm_pager_unmap_page(kva);
|
||||
vm_page_zero_fill_area(m, base, size);
|
||||
|
||||
/*
|
||||
* XXX work around SMP data integrity race
|
||||
|
||||
Reference in New Issue
Block a user