On Sun, Nov 13, 2005 at 01:22:51AM +0300, Nickolay V. Shmyrev wrote: > Hello all. > > We have even found the hack that fix that problem:
A hack, but working one.. (for the small while that I tested it) > Index: linux/drivers/media/video/video-buf.c > =================================================================== > RCS file: /cvs/video4linux/v4l-kernel/linux/drivers/media/video/video-buf.c,v > retrieving revision 1.21 > diff -u -p -r1.21 video-buf.c > --- linux/drivers/media/video/video-buf.c 16 Oct 2005 12:13:58 -0000 > +++ linux/drivers/media/video/video-buf.c 12 Nov 2005 22:19:13 -0000 > @@ -1248,7 +1248,7 @@ int videobuf_mmap_mapper(struct videobuf > map->end = vma->vm_end; > map->q = q; > vma->vm_ops = &videobuf_vm_ops; > - vma->vm_flags |= VM_DONTEXPAND | VM_RESERVED; > + vma->vm_flags |= VM_DONTEXPAND; > vma->vm_flags &= ~VM_IO; /* using shared anonymous pages */ > vma->vm_private_data = map; > dprintk(1,"mmap %p: q=%p %08lx-%08lx pgoff %08lx bufs %d-%d\n", > > Somehow since 2.6.15-rc1 VM_RESERVED makes get_user_pages return EFAULT. > I don't know the exact reason of that behavior and the correct way to fix > that problem. Just kernel interfaces changed once again, the old > point everyone knows. So if someone can explain it, that would be helpful. This EFAULT rejection is due to change in get_user_pages() function in mm/memory.c file of 2.6.14-git2 @@ -945,8 +947,8 @@ int get_user_pages(struct task_struct *t continue; } - if (!vma || (vma->vm_flags & VM_IO) - || !(flags & vma->vm_flags)) + if (!vma || (vma->vm_flags & (VM_IO | VM_RESERVED)) + || !(vm_flags & vma->vm_flags)) return i ? : -EFAULT; if (is_vm_hugetlb_page(vma)) { I don't know how to use git tools to see, whose patch actually did this particular change. /Matti Aarnio -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]