Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
[sfrench/cifs-2.6.git] / drivers / char / drm / via_video.c
index 7fab9fbdf424f64aa263a592820a9ee60c75c708..6ec04ac1245991ffea7bf1a5cf1197f4b411ea46 100644 (file)
@@ -33,7 +33,7 @@ void via_init_futex(drm_via_private_t * dev_priv)
 {
        unsigned int i;
 
-       DRM_DEBUG("%s\n", __FUNCTION__);
+       DRM_DEBUG("\n");
 
        for (i = 0; i < VIA_NR_XVMC_LOCKS; ++i) {
                DRM_INIT_WAITQUEUE(&(dev_priv->decoder_queue[i]));
@@ -50,8 +50,11 @@ void via_release_futex(drm_via_private_t * dev_priv, int context)
        unsigned int i;
        volatile int *lock;
 
+       if (!dev_priv->sarea_priv)
+               return;
+
        for (i = 0; i < VIA_NR_XVMC_LOCKS; ++i) {
-               lock = (int *)XVMCLOCKPTR(dev_priv->sarea_priv, 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)) {
@@ -62,32 +65,28 @@ void via_release_futex(drm_via_private_t * dev_priv, int context)
        }
 }
 
-int via_decoder_futex(DRM_IOCTL_ARGS)
+int via_decoder_futex(struct drm_device *dev, void *data, struct drm_file *file_priv)
 {
-       DRM_DEVICE;
-       drm_via_futex_t fx;
+       drm_via_futex_t *fx = data;
        volatile int *lock;
        drm_via_private_t *dev_priv = (drm_via_private_t *) dev->dev_private;
        drm_via_sarea_t *sAPriv = dev_priv->sarea_priv;
        int ret = 0;
 
-       DRM_DEBUG("%s\n", __FUNCTION__);
-
-       DRM_COPY_FROM_USER_IOCTL(fx, (drm_via_futex_t __user *) data,
-                                sizeof(fx));
+       DRM_DEBUG("\n");
 
-       if (fx.lock > VIA_NR_XVMC_LOCKS)
+       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) {
+       switch (fx->func) {
        case VIA_FUTEX_WAIT:
-               DRM_WAIT_ON(ret, dev_priv->decoder_queue[fx.lock],
-                           (fx.ms / 10) * (DRM_HZ / 100), *lock != fx.val);
+               DRM_WAIT_ON(ret, dev_priv->decoder_queue[fx->lock],
+                           (fx->ms / 10) * (DRM_HZ / 100), *lock != fx->val);
                return ret;
        case VIA_FUTEX_WAKE:
-               DRM_WAKEUP(&(dev_priv->decoder_queue[fx.lock]));
+               DRM_WAKEUP(&(dev_priv->decoder_queue[fx->lock]));
                return 0;
        }
        return 0;