Date: Mon, 15 Sep 2008 20:51:55 -0400 From: Robert Noland <rnoland@FreeBSD.org> To: Kostik Belousov <kostikbel@gmail.com> Cc: current@freebsd.org, "Yair K." <cesium2@gmail.com>, vehemens <vehemens@verizon.net> Subject: Re: cdevpriv and mmap(2) Message-ID: <1221526316.1848.1.camel@wombat.2hip.net> In-Reply-To: <20080914174801.GC39652@deviant.kiev.zoral.com.ua> References: <20080914174801.GC39652@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
--=-2QtV01B86GwgnfjI9CNd Content-Type: text/plain Content-Transfer-Encoding: quoted-printable On Sun, 2008-09-14 at 20:48 +0300, Kostik Belousov wrote: > When implementing cdevpriv, I completeley missed the support for > d_mmap() driver method. This method is called by the kernel (at least) > twice: one time to validate the mmaped region and protection mode (see > vm/device_pager.c:dev_pager_alloc()), and second time to obtain the > physical address when serving page fault (see dev_pager_getpages()). >=20 > Support for cdevpriv for the first call(s) is trivial, and is > implemented by the patch below. Second calls are much harder and > essentially require attaching cdevpriv bookkeeping data to the struct > vm_map_entry. In fact, I am not sure whether this support for the second > time calls is needed at all in real usage. >=20 > I Cc:ed people that pointed me to the issue, please evaluate the > patch against your needs. I think I will commit it shortly after your > feedback. On the other hand, I would think about implementing full > support for d_mmap only if actually needed. The needs of drm in this case are very minor, but after talking with rwatson the other night, I was going to work around this issue. But it would be great if this works, so I'll try it as soon as I get caught up on mail... robert. > Thanks ! >=20 > diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c > index 7e6b04f..c3f08b0 100644 > --- a/sys/vm/vm_mmap.c > +++ b/sys/vm/vm_mmap.c > @@ -391,8 +391,10 @@ map: > goto done; > } > =20 > + td->td_fpop =3D fp; > error =3D vm_mmap(&vms->vm_map, &addr, size, prot, maxprot, > flags, handle_type, handle, pos); > + td->td_fpop =3D NULL; > #ifdef HWPMC_HOOKS > /* inform hwpmc(4) if an executable is being mapped */ > if (error =3D=3D 0 && handle_type =3D=3D OBJT_VNODE && --=-2QtV01B86GwgnfjI9CNd Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (FreeBSD) iEYEABECAAYFAkjPAysACgkQM4TrQ4qfROOumACePYop9EbPnY7aUh5NeHlHy5sO 6nQAn3I40H0hAqLWJJDKXzcvmHhm4XNk =LOuX -----END PGP SIGNATURE----- --=-2QtV01B86GwgnfjI9CNd--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1221526316.1848.1.camel>
