Index: i386/i386/pmap.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/pmap.c,v retrieving revision 1.333 diff -u -r1.333 pmap.c --- i386/i386/pmap.c 2002/07/07 23:05:11 1.333 +++ i386/i386/pmap.c 2002/07/08 00:04:53 @@ -3139,15 +3139,21 @@ panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); pa = pa & PG_FRAME; - for (tmpva = va; size > 0;) { + for (tmpva = va; size > 0; ) { pte = vtopte(tmpva); *pte = pa | PG_RW | PG_V | pgeflag; +#ifdef SMP + cpu_invlpg((void *)tmpva); +#else + invltlb_1pg(tmpva); +#endif size -= PAGE_SIZE; tmpva += PAGE_SIZE; pa += PAGE_SIZE; } - invltlb(); - +#ifdef SMP + smp_invltlb(); +#endif return ((void *)(va + offset)); } @@ -3157,10 +3163,23 @@ vm_size_t size; { vm_offset_t base, offset; + pt_entry_t *pte; base = va & PG_FRAME; offset = va & PAGE_MASK; size = roundup(offset + size, PAGE_SIZE); + for (tmpva = base; tmpva < (base + size); tmpva += PAGE_SIZE;) { + pte = vtopte(tmpva); + *pte = 0; +#ifdef SMP + cpu_invlpg((void *)tmpva); +#else + invltlb_1pg(tmpva); +#endif + } +#ifdef SMP + smp_invltlb(); +#endif kmem_free(kernel_map, base, size); }