Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
[powerpc.git] / drivers / char / drm / via_video.c
index 37a61c6..300ac61 100644 (file)
@@ -29,8 +29,7 @@
 #include "via_drm.h"
 #include "via_drv.h"
 
-void
-via_init_futex(drm_via_private_t *dev_priv)
+void via_init_futex(drm_via_private_t * dev_priv)
 {
        unsigned int i;
 
@@ -42,30 +41,31 @@ via_init_futex(drm_via_private_t *dev_priv)
        }
 }
 
-void
-via_cleanup_futex(drm_via_private_t *dev_priv)
+void via_cleanup_futex(drm_via_private_t * dev_priv)
 {
-}      
+}
 
-void
-via_release_futex(drm_via_private_t *dev_priv, int context)
+void via_release_futex(drm_via_private_t * dev_priv, int context)
 {
        unsigned int i;
        volatile int *lock;
 
-       for (i=0; i < VIA_NR_XVMC_LOCKS; ++i) {
-               lock = (int *) XVMCLOCKPTR(dev_priv->sarea_priv, i);
-               if ( (_DRM_LOCKING_CONTEXT( *lock ) == context)) {
-                       if (_DRM_LOCK_IS_HELD( *lock ) && (*lock & _DRM_LOCK_CONT)) {
-                               DRM_WAKEUP( &(dev_priv->decoder_queue[i]));
+       if (!dev_priv->sarea_priv)
+               return;
+
+       for (i = 0; i < VIA_NR_XVMC_LOCKS; ++i) {
+               lock = (volatile int *)XVMCLOCKPTR(dev_priv->sarea_priv, i);
+               if ((_DRM_LOCKING_CONTEXT(*lock) == context)) {
+                       if (_DRM_LOCK_IS_HELD(*lock)
+                           && (*lock & _DRM_LOCK_CONT)) {
+                               DRM_WAKEUP(&(dev_priv->decoder_queue[i]));
                        }
                        *lock = 0;
                }
-       }       
-}      
+       }
+}
 
-int 
-via_decoder_futex(DRM_IOCTL_ARGS)
+int via_decoder_futex(DRM_IOCTL_ARGS)
 {
        DRM_DEVICE;
        drm_via_futex_t fx;
@@ -76,12 +76,13 @@ via_decoder_futex(DRM_IOCTL_ARGS)
 
        DRM_DEBUG("%s\n", __FUNCTION__);
 
-       DRM_COPY_FROM_USER_IOCTL(fx, (drm_via_futex_t *) data, sizeof(fx));
+       DRM_COPY_FROM_USER_IOCTL(fx, (drm_via_futex_t __user *) data,
+                                sizeof(fx));
 
        if (fx.lock > VIA_NR_XVMC_LOCKS)
                return -EFAULT;
 
-       lock = (int *)XVMCLOCKPTR(sAPriv, fx.lock);
+       lock = (volatile int *)XVMCLOCKPTR(sAPriv, fx.lock);
 
        switch (fx.func) {
        case VIA_FUTEX_WAIT:
@@ -94,4 +95,3 @@ via_decoder_futex(DRM_IOCTL_ARGS)
        }
        return 0;
 }
-