cdevpriv and mmap(2)
Robert Noland
rnoland at FreeBSD.org
Tue Sep 16 01:05:34 UTC 2008
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()).
>
> 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.
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 !
>
> 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;
> }
>
> + td->td_fpop = fp;
> error = vm_mmap(&vms->vm_map, &addr, size, prot, maxprot,
> flags, handle_type, handle, pos);
> + td->td_fpop = NULL;
> #ifdef HWPMC_HOOKS
> /* inform hwpmc(4) if an executable is being mapped */
> if (error == 0 && handle_type == OBJT_VNODE &&
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part
Url : http://lists.freebsd.org/pipermail/freebsd-current/attachments/20080916/d3a106eb/attachment.pgp
More information about the freebsd-current
mailing list