forked from Minki/linux
[PATCH] V4L/DVB: (3113) Convert em28xx to use vm_insert_page instead of remap_pfn_range
Convert em28xx to use vm_insert_page instead of remap_pfn_range Signed-off-by: Sascha Sommer <saschasommer@freenet.de> Signed-off-by: Michael Krufky <mkrufky@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@brturbo.com.br> Cc: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
225a0cb671
commit
3639c8619d
@ -116,48 +116,6 @@ void em28xx_print_ioctl(char *name, unsigned int cmd)
|
||||
}
|
||||
}
|
||||
|
||||
static void *rvmalloc(size_t size)
|
||||
{
|
||||
void *mem;
|
||||
unsigned long adr;
|
||||
|
||||
size = PAGE_ALIGN(size);
|
||||
|
||||
mem = vmalloc_32((unsigned long)size);
|
||||
if (!mem)
|
||||
return NULL;
|
||||
|
||||
memset(mem, 0, size);
|
||||
|
||||
adr = (unsigned long)mem;
|
||||
while (size > 0) {
|
||||
SetPageReserved(vmalloc_to_page((void *)adr));
|
||||
adr += PAGE_SIZE;
|
||||
size -= PAGE_SIZE;
|
||||
}
|
||||
|
||||
return mem;
|
||||
}
|
||||
|
||||
static void rvfree(void *mem, size_t size)
|
||||
{
|
||||
unsigned long adr;
|
||||
|
||||
if (!mem)
|
||||
return;
|
||||
|
||||
size = PAGE_ALIGN(size);
|
||||
|
||||
adr = (unsigned long)mem;
|
||||
while (size > 0) {
|
||||
ClearPageReserved(vmalloc_to_page((void *)adr));
|
||||
adr += PAGE_SIZE;
|
||||
size -= PAGE_SIZE;
|
||||
}
|
||||
|
||||
vfree(mem);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* em28xx_request_buffers()
|
||||
@ -174,8 +132,10 @@ u32 em28xx_request_buffers(struct em28xx *dev, u32 count)
|
||||
|
||||
dev->num_frames = count;
|
||||
while (dev->num_frames > 0) {
|
||||
if ((buff = rvmalloc(dev->num_frames * imagesize)))
|
||||
if ((buff = vmalloc_32(dev->num_frames * imagesize))) {
|
||||
memset(buff, 0, dev->num_frames * imagesize);
|
||||
break;
|
||||
}
|
||||
dev->num_frames--;
|
||||
}
|
||||
|
||||
@ -218,8 +178,7 @@ void em28xx_queue_unusedframes(struct em28xx *dev)
|
||||
void em28xx_release_buffers(struct em28xx *dev)
|
||||
{
|
||||
if (dev->num_frames) {
|
||||
rvfree(dev->frame[0].bufmem,
|
||||
dev->num_frames * PAGE_ALIGN(dev->frame[0].buf.length));
|
||||
vfree(dev->frame[0].bufmem);
|
||||
dev->num_frames = 0;
|
||||
}
|
||||
}
|
||||
|
@ -189,16 +189,6 @@ static DECLARE_RWSEM(em28xx_disconnect);
|
||||
|
||||
/********************* v4l2 interface ******************************************/
|
||||
|
||||
static inline unsigned long kvirt_to_pa(unsigned long adr)
|
||||
{
|
||||
unsigned long kva, ret;
|
||||
|
||||
kva = (unsigned long)page_address(vmalloc_to_page((void *)adr));
|
||||
kva |= adr & (PAGE_SIZE - 1);
|
||||
ret = __pa(kva);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* em28xx_config()
|
||||
* inits registers with sane defaults
|
||||
@ -616,7 +606,8 @@ static struct vm_operations_struct em28xx_vm_ops = {
|
||||
static int em28xx_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||
{
|
||||
unsigned long size = vma->vm_end - vma->vm_start,
|
||||
start = vma->vm_start, pos, page;
|
||||
start = vma->vm_start;
|
||||
void *pos;
|
||||
u32 i;
|
||||
|
||||
struct em28xx *dev = filp->private_data;
|
||||
@ -657,12 +648,10 @@ static int em28xx_v4l2_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||
vma->vm_flags |= VM_IO;
|
||||
vma->vm_flags |= VM_RESERVED; /* avoid to swap out this VMA */
|
||||
|
||||
pos = (unsigned long)dev->frame[i].bufmem;
|
||||
pos = dev->frame[i].bufmem;
|
||||
while (size > 0) { /* size is page-aligned */
|
||||
page = vmalloc_to_pfn((void *)pos);
|
||||
if (remap_pfn_range(vma, start, page, PAGE_SIZE,
|
||||
vma->vm_page_prot)) {
|
||||
em28xx_videodbg("mmap: rename page map failed\n");
|
||||
if (vm_insert_page(vma, start, vmalloc_to_page(pos))) {
|
||||
em28xx_videodbg("mmap: vm_insert_page failed\n");
|
||||
up(&dev->fileop_lock);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user