From daaffd5f71cac170c2eabc4f36c7013ff70968e4 Mon Sep 17 00:00:00 2001 From: Brandon Philips Date: Wed, 2 Apr 2008 18:10:59 -0300 Subject: [PATCH] --- yaml --- r: 92591 b: refs/heads/master c: ce54093cefd64c1a2cb6b8c5ed1d68d2bd7a34ab h: refs/heads/master i: 92589: 98b28d4f993eeb7c55467030576c264bad86e99e 92587: 4a009aa9608dd745921ebba324a4fd026b66c13d 92583: 1b4cd23d5807e3295e7c60bf2ccf1334cb42e6dc 92575: e4dafbb7f7d1a163c0a91c023e356cd8e5bd759d v: v3 --- [refs] | 2 +- trunk/drivers/media/video/videobuf-dma-sg.c | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 12ea06546a29..2e1771dbff2f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 137d1cb19d9da163ce6cb57a6fa1e6a3468af6a4 +refs/heads/master: ce54093cefd64c1a2cb6b8c5ed1d68d2bd7a34ab diff --git a/trunk/drivers/media/video/videobuf-dma-sg.c b/trunk/drivers/media/video/videobuf-dma-sg.c index 717783fa8b3e..e6ce99ff7fd1 100644 --- a/trunk/drivers/media/video/videobuf-dma-sg.c +++ b/trunk/drivers/media/video/videobuf-dma-sg.c @@ -546,6 +546,14 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q, goto done; } + /* This function maintains backwards compatibility with V4L1 and will + * map more than one buffer if the vma length is equal to the combined + * size of multiple buffers than it will map them together. See + * VIDIOCGMBUF in the v4l spec + * + * TODO: Allow drivers to specify if they support this mode + */ + /* look for first buffer to map */ for (first = 0; first < VIDEO_MAX_FRAME; first++) { if (NULL == q->bufs[first]) @@ -590,10 +598,16 @@ static int __videobuf_mmap_mapper(struct videobuf_queue *q, map = kmalloc(sizeof(struct videobuf_mapping),GFP_KERNEL); if (NULL == map) goto done; - for (size = 0, i = first; i <= last; size += q->bufs[i++]->bsize) { + + size = 0; + for (i = first; i <= last; i++) { + if (NULL == q->bufs[i]) + continue; q->bufs[i]->map = map; q->bufs[i]->baddr = vma->vm_start + size; + size += q->bufs[i]->bsize; } + map->count = 1; map->start = vma->vm_start; map->end = vma->vm_end;