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)); 
via_decoder_futex(DRM_IOCTL_ARGS){	DRM_DEVICE;	drm_via_futex_t fx;	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 *) data, sizeof(fx));	if (fx.lock > VIA_NR_XVMC_LOCKS)		return -EFAULT;	lock = (int *)XVMCLOCKPTR(sAPriv, fx.lock);	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);		return ret;	case VIA_FUTEX_WAKE:		DRM_WAKEUP(&(dev_priv->decoder_queue[fx.lock]));		return 0;	}	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/bbaf364103cee15c895e2086723d0ad9ef47ae99/via_video.c/clean/drivers/char/drm/via_video.c