- Define an inline pagezero() to select the appropriate full-page zeroing

function from one of bzero, i686_pagezero, or sse2_pagezero.
 - Use pagezero() in the three pmap functions that need to zero full pages.
This commit is contained in:
jeff 2003-10-01 05:42:58 +00:00
parent 44e39f9ee3
commit 8155be3845

View File

@ -2510,6 +2510,22 @@ pmap_zpi_switchout3(void)
#endif
static __inline void
pagezero(void *page)
{
#if defined(I686_CPU)
if (cpu_class == CPUCLASS_686) {
#if defined(CPU_ENABLED_SSE)
if (cpu_feature & CPUID_SSE2)
sse2_pagezero(page);
else
#endif
i686_pagezero(page);
} else
#endif
bzero(page, PAGE_SIZE);
}
/*
* pmap_zero_page zeros the specified hardware page by mapping
* the page into KVM and using bzero to clear its contents.
@ -2525,12 +2541,7 @@ pmap_zero_page(vm_page_t m)
curthread->td_pcb->pcb_switchout = pmap_zpi_switchout2;
#endif
*CMAP2 = PG_V | PG_RW | VM_PAGE_TO_PHYS(m) | PG_A | PG_M;
#if defined(I686_CPU)
if (cpu_class == CPUCLASS_686)
i686_pagezero(CADDR2);
else
#endif
bzero(CADDR2, PAGE_SIZE);
pagezero(CADDR2);
*CMAP2 = 0;
#ifdef I386_CPU
invltlb();
@ -2560,11 +2571,9 @@ pmap_zero_page_area(vm_page_t m, int off, int size)
curthread->td_pcb->pcb_switchout = pmap_zpi_switchout2;
#endif
*CMAP2 = PG_V | PG_RW | VM_PAGE_TO_PHYS(m) | PG_A | PG_M;
#if defined(I686_CPU)
if (cpu_class == CPUCLASS_686 && off == 0 && size == PAGE_SIZE)
i686_pagezero(CADDR2);
if (off == 0 && size == PAGE_SIZE)
pagezero(CADDR2);
else
#endif
bzero((char *)CADDR2 + off, size);
*CMAP2 = 0;
#ifdef I386_CPU
@ -2594,12 +2603,7 @@ pmap_zero_page_idle(vm_page_t m)
curthread->td_pcb->pcb_switchout = pmap_zpi_switchout3;
#endif
*CMAP3 = PG_V | PG_RW | VM_PAGE_TO_PHYS(m) | PG_A | PG_M;
#if defined(I686_CPU)
if (cpu_class == CPUCLASS_686)
i686_pagezero(CADDR3);
else
#endif
bzero(CADDR3, PAGE_SIZE);
pagezero(CADDR3);
*CMAP3 = 0;
#ifdef I386_CPU
invltlb();