lkml.org 
[lkml]   [2008]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] Video/UVC: Port mainlined uvc video driver to NOMMU
    Date
    Hi Michael,

    On Monday 10 November 2008, Hennerich, Michael wrote:
    > >On Thursday 06 November 2008, Bryan Wu wrote:
    > > > @@ -1071,7 +1072,20 @@ static int uvc_v4l2_mmap(struct file *file,
    > > > struct vm_area_struct *vma) addr += PAGE_SIZE;
    > > > size -= PAGE_SIZE;
    > > > }
    > > > +#else
    > > > + if (i == video->queue.count ||
    > > > + PAGE_ALIGN(size) != video->queue.buf_size) {
    > >
    > > Just out of curiosity, why do you need to PAGE_ALIGN size for non-MMU
    > > platforms ?
    >
    > Size and video->queue.buf_size is not the 100% same size (off by a few
    > bytes < pagesize), I think it's because on NOMMU the kernel calls
    > kmalloc() to allocate the buffer, not get_free_page().

    That's right, but only for private mappings. It makes little sense to create a
    private mapping on a V4L2 device as the kernel will read() device data into
    the buffer when mapping the device (at least on NOMMU platforms). Only shared
    mappings make sense in this case.

    > > > + ret = -EINVAL;
    > > > + goto done;
    > > > + }
    > > > +
    > > > + vma->vm_flags |= VM_IO | VM_MAYSHARE; /* documentation/nommu-mmap.txt
    > >
    > > VM_MAYSHARE is not documented anywhere in Documentation/ in Linux
    > > 2.6.28-rc3. Why is it needed for non-MMU architectures only ?
    >
    > mmap on NOMMU is a bit tricky and very restricted.
    > In case user does a MAP_SHARED with some combination of the PROT_###
    > Flags the mmap fails. What's allowed and what's not is documented in
    > documentation/nommu-mmap.txt
    > Setting VM_MAYSHARE allows user MAP_PRIVATE mappings.

    There's something I don't understand. I've had a quick look at NOMMU mmap
    (mm/nommu.c) and it seems neither MAP_SHARED nor MAP_PRIVATE can succeed with
    UVC devices.

    The uvcvideo driver doesn't implements the read and get_unmapped_area file
    operations. validate_mmap_request will thus clear the BDI_CAP_MAP_DIRECT and
    BDI_CAP_MAP_COPY from the device mapping capabilities. As shared mappings
    require BDI_CAP_MAP_DIRECT and private mappings require BDI_CAP_MAP_COPY
    validate_mmap_request will return an error and mmap will fail.

    I might be wrong in my analysis, but if mapping a UVC device is impossible on
    a NOMMU platform the patch doesn't make much sense. Feel free to prove me
    wrong and send me back to mm/ if you've been able to map a UVC device on a
    NOMMU platform :-)

    Laurent Pinchart


    \
     
     \ /
      Last update: 2008-11-14 00:55    [W:0.024 / U:92.476 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site