Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Sep 2008 20:48:01 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        current@freebsd.org
Cc:        "Yair K." <cesium2@gmail.com>, rnoland@freebsd.org, vehemens <vehemens@verizon.net>
Subject:   cdevpriv and mmap(2)
Message-ID:  <20080914174801.GC39652@deviant.kiev.zoral.com.ua>

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

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

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()).

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.

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.

Thanks !

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 &&

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

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

iEYEARECAAYFAkjNTlEACgkQC3+MBN1Mb4ht9ACg3aJ2J8zEFMECoo7bQeamCL1h
/1EAoJf8PxWzTDHsUH8Mzv5zpOGTtBpZ
=CjiN
-----END PGP SIGNATURE-----

--hgy5D1otryeNPdmY--



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