Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 1 Mar 2005 02:19:08 -0800
From:      Kris Kennaway <kris@obsecurity.org>
To:        sparc64@FreeBSD.org
Subject:   debug.mpsafevm=1 now usable
Message-ID:  <20050301101907.GA11640@xor.obsecurity.org>

next in thread | raw e-mail | index | archive | help

--AqsLC8rIMeq19msA
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

FYI, this seems to make debug.mpsafevm=3D1 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@FreeBSD.org> -----

X-Original-To: kkenn@localhost
Delivered-To: kkenn@localhost.obsecurity.org
Delivered-To: kris@freebsd.org
Delivered-To: src-committers@freebsd.org
From: Alan Cox <alc@FreeBSD.org>
Date: Tue, 1 Mar 2005 05:06:52 +0000 (UTC)
To: src-committers@FreeBSD.org, cvs-src@FreeBSD.org,
	cvs-all@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=3Dbogofilter, spamicity=3D0.000000, version=3D0.92.8

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

  FreeBSD src repository

  Modified files:
    sys/sparc64/sparc64  pmap.c=20
  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.
 =20
  Tested by: kris@
 =20
  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=3D1.145&r2=
=3D1.146
| =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
| 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 $
|   */
| =20
|  /*
| @@ -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 =3D pmap_temp_map_1 + (m->md.color * PAGE_SIZE);
|  		tp =3D tsb_kvtotte(va);
|  		tp->tte_data =3D TD_V | TD_8K | TD_PA(pa) | TD_CP | TD_CV | TD_W;
|  		tp->tte_vpn =3D TV_VPN(va, TS_8K);
|  		cpu_block_zero((void *)va, PAGE_SIZE);
|  		tlb_page_demap(kernel_pmap, va);
| +		PMAP_UNLOCK(kernel_pmap);
|  	}
|  }
| =20
| @@ -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 =3D pmap_temp_map_1 + (m->md.color * PAGE_SIZE);
|  		tp =3D tsb_kvtotte(va);
|  		tp->tte_data =3D TD_V | TD_8K | TD_PA(pa) | TD_CP | TD_CV | TD_W;
|  		tp->tte_vpn =3D TV_VPN(va, TS_8K);
|  		bzero((void *)(va + off), size);
|  		tlb_page_demap(kernel_pmap, va);
| +		PMAP_UNLOCK(kernel_pmap);
|  	}
|  }
| =20
| @@ -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 =3D pmap_temp_map_1 + (mdst->md.color * PAGE_SIZE);
|  			tp =3D tsb_kvtotte(vdst);
|  			tp->tte_data =3D
| @@ -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 =3D=3D -1) {
|  		if (msrc->md.color =3D=3D 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 =3D pmap_temp_map_1 + (msrc->md.color * PAGE_SIZE);
|  			tp =3D tsb_kvtotte(vsrc);
|  			tp->tte_data =3D
| @@ -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 =3D pmap_temp_map_1 + (mdst->md.color * PAGE_SIZE);
|  		tp =3D tsb_kvtotte(vdst);
|  		tp->tte_data =3D
| @@ -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);
|  	}
|  }
| =20


----- End forwarded message -----

--AqsLC8rIMeq19msA
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (FreeBSD)

iD8DBQFCJEGbWry0BWjoQKURAt70AJ9/B74CHtZKmcsfjH643vRu94hXcgCeMMc4
qyh/ov/hWB8p2Vg489NyQJM=
=fvTK
-----END PGP SIGNATURE-----

--AqsLC8rIMeq19msA--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050301101907.GA11640>