Hi Bob, On Thu, Apr 21, 2011 at 11:17:42AM +0800, Bob Liu wrote: > +#ifdef CONFIG_MMU > if (i == queue->count || size != queue->buf_size) { > +#else > + if (i == queue->count || PAGE_ALIGN(size) != queue->buf_size) { > +#endif on mmu systems do_mmap_pgoff contains a len = PAGE_ALIGN(len); line. If we depend on this behavior, why not do it here as well and get rid of the #ifdef? > +unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue, > + unsigned long addr, unsigned long len, unsigned long pgoff) > +{ > + struct uvc_buffer *buffer; > + unsigned int i; > + int ret = 0; You still didn't change ret to unsigned long. > + addr = (unsigned long)queue->mem + buffer->buf.m.offset; > + ret = addr; Why the intermediate step using addr? > diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c > index 498e674..221e73f 100644 > --- a/drivers/media/video/v4l2-dev.c > +++ b/drivers/media/video/v4l2-dev.c > @@ -368,6 +368,23 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm) > return ret; > } > > +#ifdef CONFIG_MMU > +#define v4l2_get_unmapped_area NULL > +#else > +static unsigned long v4l2_get_unmapped_area(struct file *filp, > + unsigned long addr, unsigned long len, unsigned long pgoff, > + unsigned long flags) > +{ > + struct video_device *vdev = video_devdata(filp); > + > + if (!vdev->fops->get_unmapped_area) > + return -ENOSYS; > + if (!video_is_registered(vdev)) > + return -ENODEV; > + return vdev->fops->get_unmapped_area(filp, addr, len, pgoff, flags); > +} > +#endif > + > /* Override for the open function */ > static int v4l2_open(struct inode *inode, struct file *filp) > { > @@ -452,6 +469,7 @@ static const struct file_operations v4l2_fops = { > .write = v4l2_write, > .open = v4l2_open, > .mmap = v4l2_mmap, > + .get_unmapped_area = v4l2_get_unmapped_area, > .unlocked_ioctl = v4l2_ioctl, > #ifdef CONFIG_COMPAT > .compat_ioctl = v4l2_compat_ioctl32, > diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h > index 8266d5a..0616a43 100644 > --- a/include/media/v4l2-dev.h > +++ b/include/media/v4l2-dev.h > @@ -63,6 +63,8 @@ struct v4l2_file_operations { > long (*ioctl) (struct file *, unsigned int, unsigned long); > long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); > int (*mmap) (struct file *, struct vm_area_struct *); > + unsigned long (*get_unmapped_area) (struct file *, unsigned long, > + unsigned long, unsigned long, unsigned long); > int (*open) (struct file *); > int (*release) (struct file *); > }; I'd prefer a git revert c29fcff3daafbf46d64a543c1950bbd206ad8c1c for this block instead of reverting it together with the UVC changes. Daniel -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html