Hopefully fix the problem with the TLB not being updated correctly.

Problem tracked down by bde@freebsd.org, but this is an attempted
efficient fix.
This commit is contained in:
dyson 1997-12-22 00:36:48 +00:00
parent 548dd1da87
commit 2c2d68bf78
2 changed files with 14 additions and 10 deletions

View File

@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* from: @(#)pmap.c 7.7 (Berkeley) 5/12/91
* $Id: pmap.c,v 1.173 1997/11/20 19:30:31 bde Exp $
* $Id: pmap.c,v 1.174 1997/12/14 02:11:04 dyson Exp $
*/
/*
@ -925,19 +925,21 @@ pmap_dispose_proc(p)
upobj = p->p_upages_obj;
for(i=0;i<UPAGES;i++) {
unsigned oldpte;
if ((m = vm_page_lookup(upobj, i)) == NULL)
panic("pmap_dispose_proc: upage already missing???");
oldpte = *(ptek + i);
*(ptek + i) = 0;
if (oldpte & PG_G)
if (cpu_class != CPUCLASS_386)
invlpg((vm_offset_t) p->p_addr + i * PAGE_SIZE);
vm_page_unwire(m);
vm_page_free(m);
}
vm_object_deallocate(upobj);
#if defined(I386_CPU)
if (cpu_class == CPUCLASS_386)
invltlb();
#endif
vm_object_deallocate(upobj);
kmem_free(u_map, (vm_offset_t)p->p_addr, ctob(UPAGES));
}

View File

@ -39,7 +39,7 @@
* SUCH DAMAGE.
*
* from: @(#)pmap.c 7.7 (Berkeley) 5/12/91
* $Id: pmap.c,v 1.173 1997/11/20 19:30:31 bde Exp $
* $Id: pmap.c,v 1.174 1997/12/14 02:11:04 dyson Exp $
*/
/*
@ -925,19 +925,21 @@ pmap_dispose_proc(p)
upobj = p->p_upages_obj;
for(i=0;i<UPAGES;i++) {
unsigned oldpte;
if ((m = vm_page_lookup(upobj, i)) == NULL)
panic("pmap_dispose_proc: upage already missing???");
oldpte = *(ptek + i);
*(ptek + i) = 0;
if (oldpte & PG_G)
if (cpu_class != CPUCLASS_386)
invlpg((vm_offset_t) p->p_addr + i * PAGE_SIZE);
vm_page_unwire(m);
vm_page_free(m);
}
vm_object_deallocate(upobj);
#if defined(I386_CPU)
if (cpu_class == CPUCLASS_386)
invltlb();
#endif
vm_object_deallocate(upobj);
kmem_free(u_map, (vm_offset_t)p->p_addr, ctob(UPAGES));
}