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:
parent
548dd1da87
commit
2c2d68bf78
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user