Skip site navigation (1)Skip section navigation (2)
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>