On Friday 01 November 2002 03:42 am, Holger Waechtler wrote:
> Hi Matt,
>
> there are many things changed since your patch, could you please
> regenerate your patch using "diff -pu" so that I can see the function
> names?
>
> thanks,
>
> Holger
>

Here is a diff on the changes against the REL-0-9-2 branch checked out today:

[mdavis REL-0-9-2]$ diff -rpu DVB/ temp/DVB/

diff -rpu DVB/driver/dmxdev.c temp/DVB/driver/dmxdev.c
--- DVB/driver/dmxdev.c Thu Aug  1 11:46:11 2002
+++ temp/DVB/driver/dmxdev.c    Fri Nov  1 08:48:44 2002
@@ -722,6 +722,7 @@ DmxDevFilterAlloc(dmxdev_t *dmxdev, stru
                 return -EMFILE;
        }
         dmxdevfilter=&dmxdev->filter[i];
+       sema_init(&dmxdevfilter->mutex, 1);
        file->private_data=dmxdevfilter;
 
        DmxDevBufferInit(&dmxdevfilter->buffer);
@@ -747,6 +748,11 @@ DmxDevFilterFree(dmxdev_t *dmxdev, struc
                up(&dmxdev->mutex);
                return -EINVAL;
         }
+       
+       if (down_interruptible(&dmxdevfilter->mutex)) {
+               up(&dmxdev->mutex);
+               return -ERESTARTSYS;
+       }
 
         DmxDevFilterStop(dmxdevfilter);
        DmxDevFilterReset(dmxdevfilter);
@@ -761,6 +767,7 @@ DmxDevFilterFree(dmxdev_t *dmxdev, struc
        }
        DmxDevFilterStateSet(dmxdevfilter, DMXDEV_STATE_FREE);
        wake_up(&dmxdevfilter->buffer.queue);
+       up(&dmxdevfilter->mutex);
        up(&dmxdev->mutex);
        //printk("free filters = %d\n", DmxDevFilterNum(dmxdev));
         return 0;
@@ -907,7 +914,7 @@ DmxDevRead(dmxdev_t *dmxdev, struct file
         dmxdev_filter_t *dmxdevfilter=DmxDevFile2Filter(dmxdev, file);
        int ret=0;
 
-        if (down_interruptible(&dmxdev->mutex))
+        if (down_interruptible(&dmxdevfilter->mutex))
                return -ERESTARTSYS;
 
        if (dmxdevfilter->type==DMXDEV_TYPE_SEC)
@@ -916,7 +923,7 @@ DmxDevRead(dmxdev_t *dmxdev, struct file
                ret=DmxDevBufferRead(&dmxdevfilter->buffer, 
                                     file->f_flags&O_NONBLOCK, 
                                     buf, count, ppos);
-        up(&dmxdev->mutex);
+        up(&dmxdevfilter->mutex);
        return ret;
 }
 
@@ -937,14 +944,26 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
 
        switch (cmd) {
        case DMX_START: 
+               if (down_interruptible(&dmxdevfilter->mutex)) {
+                     up(&dmxdev->mutex);
+                     return -ERESTARTSYS;
+               }
+
                if (dmxdevfilter->state<DMXDEV_STATE_SET)
                        ret=-EINVAL;
                else
                        ret=DmxDevFilterStart(dmxdevfilter);
+
+               up(&dmxdevfilter->mutex);
                break;
 
        case DMX_STOP: 
+               if (down_interruptible(&dmxdevfilter->mutex)) {
+                     up(&dmxdev->mutex);
+                     return -ERESTARTSYS;
+               }
                ret=DmxDevFilterStop(dmxdevfilter);
+               up(&dmxdevfilter->mutex);
                break;
 
        case DMX_SET_FILTER: 
@@ -954,8 +973,14 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
                if (copy_from_user(&params, parg, sizeof(params)))
                        
                        ret=-EFAULT;
-               else
+               else {
+                       if (down_interruptible(&dmxdevfilter->mutex)) {
+                               up(&dmxdev->mutex);
+                               return -ERESTARTSYS;
+                       }
                        ret=DmxDevFilterSet(dmxdev, dmxdevfilter, &params);
+                       up(&dmxdevfilter->mutex);
+               }
                break;
        }
 
@@ -965,13 +990,24 @@ int DmxDevIoctl(dmxdev_t *dmxdev, struct
                
                if (copy_from_user(&params, parg, sizeof(params)))
                        ret=-EFAULT;
-               else
+               else {
+                       if (down_interruptible(&dmxdevfilter->mutex)) {
+                             up(&dmxdev->mutex);
+                             return -ERESTARTSYS;
+                       }
                        ret=DmxDevPesFilterSet(dmxdev, dmxdevfilter, &params);
+                       up(&dmxdevfilter->mutex);
+               }
                break;
        }
 
        case DMX_SET_BUFFER_SIZE: 
+               if (down_interruptible(&dmxdevfilter->mutex)) {
+                     up(&dmxdev->mutex);
+                     return -ERESTARTSYS;
+               }
                ret=DmxDevSetBufferSize(dmxdevfilter, arg);
+               up(&dmxdevfilter->mutex);
                break;
         
         case DMX_GET_EVENT: 
diff -rpu DVB/driver/dmxdev.h temp/DVB/driver/dmxdev.h
--- DVB/driver/dmxdev.h Mon Oct 29 05:51:26 2001
+++ temp/DVB/driver/dmxdev.h    Fri Nov  1 08:48:44 2002
@@ -96,6 +96,8 @@ typedef struct dmxdev_filter_s {
         struct dmxdev_s *dev;
         dmxdev_buffer_t buffer;
 
+        struct semaphore mutex;
+
         // only for sections
         struct timer_list timer;
         int todo;




--
Info:
To unsubscribe send a mail to [EMAIL PROTECTED] with "unsubscribe linux-dvb" as 
subject.

Reply via email to