debug.mpsafevm=1 now usable

Kris Kennaway kris at obsecurity.org
Tue Mar 1 10:19:09 GMT 2005


FYI, this seems to make debug.mpsafevm=1 usable for me.  Very nice on
a SMP machine (e.g. hrs's 12-cpu e4500 :-).

Many thanks to Alan for finding and fixing this!

Kris

----- Forwarded message from Alan Cox <alc at FreeBSD.org> -----

X-Original-To: kkenn at localhost
Delivered-To: kkenn at localhost.obsecurity.org
Delivered-To: kris at freebsd.org
Delivered-To: src-committers at freebsd.org
From: Alan Cox <alc at FreeBSD.org>
Date: Tue, 1 Mar 2005 05:06:52 +0000 (UTC)
To: src-committers at FreeBSD.org, cvs-src at FreeBSD.org,
	cvs-all at FreeBSD.org
Subject: cvs commit: src/sys/sparc64/sparc64 pmap.c
X-FreeBSD-CVS-Branch: HEAD
Precedence: bulk
X-Loop: FreeBSD.ORG
X-UIDL: 1:T"!knl!!KQA"!eM2"!
X-Bogosity: No, tests=bogofilter, spamicity=0.000000, version=0.92.8

alc         2005-03-01 05:06:52 UTC

  FreeBSD src repository

  Modified files:
    sys/sparc64/sparc64  pmap.c 
  Log:
  Use the kernel pmap's lock to guarantee that only one thread at a time is
  using either pmap_temp_map_1 or pmap_temp_map_2.
  
  Tested by: kris@
  
  Revision  Changes    Path
  1.146     +10 -0     src/sys/sparc64/sparc64/pmap.c
http://cvsweb.FreeBSD.org/src/sys/sparc64/sparc64/pmap.c.diff?r1=1.145&r2=1.146
| ===================================================================
| RCS file: /usr/local/www/cvsroot/FreeBSD/src/sys/sparc64/sparc64/pmap.c,v
| retrieving revision 1.145
| retrieving revision 1.146
| diff -u -p -r1.145 -r1.146
| --- src/sys/sparc64/sparc64/pmap.c	2005/02/05 22:06:47	1.145
| +++ src/sys/sparc64/sparc64/pmap.c	2005/03/01 05:06:52	1.146
| @@ -39,7 +39,7 @@
|   * SUCH DAMAGE.
|   *
|   *      from:   @(#)pmap.c      7.7 (Berkeley)  5/12/91
| - * $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/sparc64/sparc64/pmap.c,v 1.145 2005/02/05 22:06:47 alc Exp $
| + * $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/sparc64/sparc64/pmap.c,v 1.146 2005/03/01 05:06:52 alc Exp $
|   */
|  
|  /*
| @@ -1518,12 +1518,14 @@ pmap_zero_page(vm_page_t m)
|  		cpu_block_zero((void *)va, PAGE_SIZE);
|  	} else {
|  		PMAP_STATS_INC(pmap_nzero_page_oc);
| +		PMAP_LOCK(kernel_pmap);
|  		va = pmap_temp_map_1 + (m->md.color * PAGE_SIZE);
|  		tp = tsb_kvtotte(va);
|  		tp->tte_data = TD_V | TD_8K | TD_PA(pa) | TD_CP | TD_CV | TD_W;
|  		tp->tte_vpn = TV_VPN(va, TS_8K);
|  		cpu_block_zero((void *)va, PAGE_SIZE);
|  		tlb_page_demap(kernel_pmap, va);
| +		PMAP_UNLOCK(kernel_pmap);
|  	}
|  }
|  
| @@ -1548,12 +1550,14 @@ pmap_zero_page_area(vm_page_t m, int off
|  		bzero((void *)(va + off), size);
|  	} else {
|  		PMAP_STATS_INC(pmap_nzero_page_area_oc);
| +		PMAP_LOCK(kernel_pmap);
|  		va = pmap_temp_map_1 + (m->md.color * PAGE_SIZE);
|  		tp = tsb_kvtotte(va);
|  		tp->tte_data = TD_V | TD_8K | TD_PA(pa) | TD_CP | TD_CV | TD_W;
|  		tp->tte_vpn = TV_VPN(va, TS_8K);
|  		bzero((void *)(va + off), size);
|  		tlb_page_demap(kernel_pmap, va);
| +		PMAP_UNLOCK(kernel_pmap);
|  	}
|  }
|  
| @@ -1619,6 +1623,7 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
|  			    PAGE_SIZE);
|  		} else {
|  			PMAP_STATS_INC(pmap_ncopy_page_doc);
| +			PMAP_LOCK(kernel_pmap);
|  			vdst = pmap_temp_map_1 + (mdst->md.color * PAGE_SIZE);
|  			tp = tsb_kvtotte(vdst);
|  			tp->tte_data =
| @@ -1627,6 +1632,7 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
|  			ascopyfrom(ASI_PHYS_USE_EC, psrc, (void *)vdst,
|  			    PAGE_SIZE);
|  			tlb_page_demap(kernel_pmap, vdst);
| +			PMAP_UNLOCK(kernel_pmap);
|  		}
|  	} else if (mdst->md.color == -1) {
|  		if (msrc->md.color == DCACHE_COLOR(psrc)) {
| @@ -1636,6 +1642,7 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
|  			    PAGE_SIZE);
|  		} else {
|  			PMAP_STATS_INC(pmap_ncopy_page_soc);
| +			PMAP_LOCK(kernel_pmap);
|  			vsrc = pmap_temp_map_1 + (msrc->md.color * PAGE_SIZE);
|  			tp = tsb_kvtotte(vsrc);
|  			tp->tte_data =
| @@ -1644,9 +1651,11 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
|  			ascopyto((void *)vsrc, ASI_PHYS_USE_EC, pdst,
|  			    PAGE_SIZE);
|  			tlb_page_demap(kernel_pmap, vsrc);
| +			PMAP_UNLOCK(kernel_pmap);
|  		}
|  	} else {
|  		PMAP_STATS_INC(pmap_ncopy_page_oc);
| +		PMAP_LOCK(kernel_pmap);
|  		vdst = pmap_temp_map_1 + (mdst->md.color * PAGE_SIZE);
|  		tp = tsb_kvtotte(vdst);
|  		tp->tte_data =
| @@ -1660,6 +1669,7 @@ pmap_copy_page(vm_page_t msrc, vm_page_t
|  		cpu_block_copy((void *)vsrc, (void *)vdst, PAGE_SIZE);
|  		tlb_page_demap(kernel_pmap, vdst);
|  		tlb_page_demap(kernel_pmap, vsrc);
| +		PMAP_UNLOCK(kernel_pmap);
|  	}
|  }
|  


----- End forwarded message -----
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-sparc64/attachments/20050301/d7192e2a/attachment.bin


More information about the freebsd-sparc64 mailing list