diff -aurpN -X /home/fletch/.diff.exclude 720-v4l2/drivers/media/video/video-buf.c 730-video_buf/drivers/media/video/video-buf.c --- 720-v4l2/drivers/media/video/video-buf.c Fri Jan 9 17:40:03 2004 +++ 730-video_buf/drivers/media/video/video-buf.c Fri Jan 9 23:11:01 2004 @@ -41,7 +41,7 @@ MODULE_LICENSE("GPL"); MODULE_PARM(debug,"i"); #define dprintk(level, fmt, arg...) if (debug >= level) \ - printk(KERN_DEBUG "vbuf: " fmt, ## arg) + printk(KERN_DEBUG "vbuf: " fmt , ## arg) struct scatterlist* videobuf_vmalloc_to_sg(unsigned char *virt, int nr_pages) @@ -236,8 +236,8 @@ int videobuf_dma_pci_map(struct pci_dev dma->sglist = kmalloc(sizeof(struct scatterlist), GFP_KERNEL); if (NULL != dma->sglist) { dma->sglen = 1; - sg_dma_address(&dma->sglist[0]) = dma->bus_addr & ~PAGE_MASK; - dma->sglist[0].offset = dma->bus_addr & PAGE_MASK; + sg_dma_address(&dma->sglist[0]) = dma->bus_addr & PAGE_MASK; + dma->sglist[0].offset = dma->bus_addr & ~PAGE_MASK; sg_dma_len(&dma->sglist[0]) = dma->nr_pages * PAGE_SIZE; } } @@ -325,8 +325,8 @@ int videobuf_waiton(struct videobuf_buff retval = -EAGAIN; break; } - set_current_state(intr ? TASK_INTERRUPTIBLE : - TASK_UNINTERRUPTIBLE); + set_current_state(intr ? TASK_INTERRUPTIBLE + : TASK_UNINTERRUPTIBLE); if (vb->state == STATE_ACTIVE || vb->state == STATE_QUEUED) schedule(); set_current_state(TASK_RUNNING); @@ -969,8 +969,10 @@ ssize_t videobuf_read_stream(struct file retval += bytes; q->read_off += bytes; } else { - /* some error -- skip buffer */ + /* some error */ q->read_off = q->read_buf->size; + if (0 == retval) + retval = -EIO; } /* requeue buffer when done with copying */ @@ -982,6 +984,8 @@ ssize_t videobuf_read_stream(struct file spin_unlock_irqrestore(q->irqlock,flags); q->read_buf = NULL; } + if (retval < 0) + break; } done: