Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Jul 2013 10:20:36 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Neel Natu <neel@FreeBSD.org>
Cc:        svn-src-projects@freebsd.org, src-committers@freebsd.org
Subject:   Re: svn commit: r253135 - in projects/bhyve_npt_pmap/sys/amd64: include vmm
Message-ID:  <20130710072036.GY91021@kib.kiev.ua>
In-Reply-To: <201307100712.r6A7CtsB031581@svn.freebsd.org>
References:  <201307100712.r6A7CtsB031581@svn.freebsd.org>

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

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

On Wed, Jul 10, 2013 at 07:12:55AM +0000, Neel Natu wrote:
> Author: neel
> Date: Wed Jul 10 07:12:55 2013
> New Revision: 253135
> URL: http://svnweb.freebsd.org/changeset/base/253135
>=20
> Log:
>   Replace vm_gpa2hpa() with a pair of functions vm_gpa_hold()/vm_gpa_rele=
ase().
>  =20
>   We guarantee that the vm_page backing the 'gpa' is not reclaimed by
>   the page daemon until the caller indicates that they are done using it
>   by calling 'vm_gpa_release()'.
>=20
> Modified:
>   projects/bhyve_npt_pmap/sys/amd64/include/vmm.h
>   projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c
>   projects/bhyve_npt_pmap/sys/amd64/vmm/vmm_dev.c
>   projects/bhyve_npt_pmap/sys/amd64/vmm/vmm_instruction_emul.c
>=20
> Modified: projects/bhyve_npt_pmap/sys/amd64/include/vmm.h
> =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=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- projects/bhyve_npt_pmap/sys/amd64/include/vmm.h	Wed Jul 10 06:46:46 2=
013	(r253134)
> +++ projects/bhyve_npt_pmap/sys/amd64/include/vmm.h	Wed Jul 10 07:12:55 2=
013	(r253135)
> @@ -93,6 +93,9 @@ const char *vm_name(struct vm *vm);
>  int vm_malloc(struct vm *vm, vm_paddr_t gpa, size_t len);
>  int vm_map_mmio(struct vm *vm, vm_paddr_t gpa, size_t len, vm_paddr_t hp=
a);
>  int vm_unmap_mmio(struct vm *vm, vm_paddr_t gpa, size_t len);
> +void *vm_gpa_hold(struct vm *, vm_paddr_t gpa, size_t len, int prot,
> +		  void **cookie);
> +void vm_gpa_release(void *cookie);
>  vm_paddr_t vm_gpa2hpa(struct vm *vm, vm_paddr_t gpa, size_t size);
>  int vm_gpabase2memseg(struct vm *vm, vm_paddr_t gpabase,
>  	      struct vm_memory_segment *seg);
>=20
> Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c
> =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=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c	Wed Jul 10 06:46:46 2013	=
(r253134)
> +++ projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c	Wed Jul 10 07:12:55 2013	=
(r253135)
> @@ -439,16 +439,48 @@ vm_malloc(struct vm *vm, vm_paddr_t gpa,
>  	return (0);
>  }
> =20
> -vm_paddr_t
> -vm_gpa2hpa(struct vm *vm, vm_paddr_t gpa, size_t len)
> +void *
> +vm_gpa_hold(struct vm *vm, vm_paddr_t gpa, size_t len, int reqprot,
> +	    void **cookie)
>  {
> -	vm_paddr_t nextpage;
> +	int rv, pageoff;
> +	vm_page_t m;
> +	struct proc *p;
> +
> +	pageoff =3D gpa & PAGE_MASK;
> +	if (len > PAGE_SIZE - pageoff)
> +		panic("vm_gpa_hold: invalid gpa/len: 0x%016lx/%lu", gpa, len);
> +
> +	p =3D curthread->td_proc;
> +
> +	PROC_LOCK(p);
> +	p->p_lock++;
> +	PROC_UNLOCK(p);
Why do you need to hold the process there ?
I do not think that hold in the trap handler is really useful, probably
the reverse.

--T0/aMKx8NezEC19d
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.20 (FreeBSD)

iQIcBAEBAgAGBQJR3QtDAAoJEJDCuSvBvK1BuloP/0dFkk7/lexiOW4Mq8h3Y1u0
aELW5gmHqx/hO5Ws/qF0f9a115PhriZ2AlVaYSp4Kdv0oht7zac3XenJTec4+Cet
KKrImqiOkvZbwt20kpd14QtPfp5mLlZcZ/1owu50SZBjHvypQuoeNPjkj61DpAgz
RhZssGcIctOwVzjIvkcfO3U3U2CbHuv1buDftRzgcePKWRJSRIfb1OUuXVpenl+7
c7R2AB/9ZgC04Ra5I1oFryOyfz0W3Kkw0ArrXNjp544Z1+6YXvg1YggLfgh1rQ5S
Vr2O1hM60ESuyJYt+Io+SrTSCbfbPdz80IK1Uvep6+9EoZGkl14B2iwGvMoLLTbj
vLW9afwj8RWUN67P9esGb33hwKUGuqqDijWbJaWRq5s9+8Q1hNGqaUdW2MZoNcP7
X6V4byTv/uVfYb2q2rfrw5LysSEGgpTwRiXJkkk3s+GWwWtABupXybgTo562rUyg
q0T6v5peWs7r4ItmdBCG25uIBFzpmfRBK2aCCW75QTiI20d2R/2WxKkhjh/8mlKg
S5ywfCQvAWoSsJ526nuBTurg2o6hbtNT5jD1KKwpOsXtxq7nYfJx4uPoGoABD6yL
LxpCY4n+iFHJqVM52ObbJ4YDbmBtXy80KIOQCIbF9eXzFGXjX9+JE++E24eMT3gh
kMf/uL7/rxez1+uulp59
=S5jH
-----END PGP SIGNATURE-----

--T0/aMKx8NezEC19d--



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