svn commit: r206582 - head/sys/mips/mips

Neel Natu neel at FreeBSD.org
Wed Apr 14 01:29:31 UTC 2010


Author: neel
Date: Wed Apr 14 01:29:31 2010
New Revision: 206582
URL: http://svn.freebsd.org/changeset/base/206582

Log:
  Revert the vm_machdep.c part of r205072.
  
  This causes a panic in vm_thread_dispose() when it tries to add this kstack
  to the kstack cache. This happens only when 'td_kstack' is not (PAGE_SIZE * 2)
  bytes aligned and we have unmapped the page at that address in cpu_thread_alloc.
  
  Pointed out by: nwhitehorn@

Modified:
  head/sys/mips/mips/vm_machdep.c

Modified: head/sys/mips/mips/vm_machdep.c
==============================================================================
--- head/sys/mips/mips/vm_machdep.c	Wed Apr 14 01:24:09 2010	(r206581)
+++ head/sys/mips/mips/vm_machdep.c	Wed Apr 14 01:29:31 2010	(r206582)
@@ -214,16 +214,6 @@ cpu_thread_swapin(struct thread *td)
 {
 	pt_entry_t *pte;
 	int i;
-	vm_offset_t unused_kstack_page;
-
-	/*
-	 * Unmap the unused kstack page.
-	 */
-	unused_kstack_page = td->td_kstack;
-	if (td->td_md.md_realstack == td->td_kstack)
-		unused_kstack_page += (KSTACK_PAGES - 1) * PAGE_SIZE;
-
-	pmap_kremove(unused_kstack_page);
 
 	/*
 	 * The kstack may be at a different physical address now.
@@ -249,19 +239,13 @@ cpu_thread_swapout(struct thread *td)
 void
 cpu_thread_alloc(struct thread *td)
 {
-	vm_offset_t unused_kstack_page;
 	pt_entry_t *pte;
 	int i;
 
-	if (td->td_kstack & (1 << PAGE_SHIFT)) {
+	if (td->td_kstack & (1 << PAGE_SHIFT))
 		td->td_md.md_realstack = td->td_kstack + PAGE_SIZE;
-		unused_kstack_page = td->td_kstack;
-	} else {
+	else
 		td->td_md.md_realstack = td->td_kstack;
-		unused_kstack_page = td->td_kstack +
-					(KSTACK_PAGES - 1) * PAGE_SIZE;
-	}
-	pmap_kremove(unused_kstack_page);
 
 	td->td_pcb = (struct pcb *)(td->td_md.md_realstack +
 	    (td->td_kstack_pages - 1) * PAGE_SIZE) - 1;


More information about the svn-src-head mailing list