diff --git a/linux-core/mga_drv.c b/linux-core/mga_drv.c index 5e47f436..db4711a9 100644 --- a/linux-core/mga_drv.c +++ b/linux-core/mga_drv.c @@ -95,8 +95,8 @@ static drm_ioctl_desc_t mga_ioctls[] = { [DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { mga_dma, 1, 0, 1 }, - [DRM_IOCTL_NR(DRM_IOCTL_LOCK)] = { mga_lock, 1, 0, 1 }, - [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)] = { mga_unlock, 1, 0, 1 }, + [DRM_IOCTL_NR(DRM_IOCTL_LOCK)] = { mga_lock, 1, 0, 0 }, + [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)] = { mga_unlock, 1, 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_FINISH)] = { drm_finish, 1, 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)] = { drm_agp_acquire, 1, 1, 0 }, @@ -113,7 +113,7 @@ static drm_ioctl_desc_t mga_ioctls[] = { [DRM_IOCTL_NR(DRM_IOCTL_MGA_CLEAR)] = { mga_clear_bufs, 1, 0, 1 }, [DRM_IOCTL_NR(DRM_IOCTL_MGA_ILOAD)] = { mga_iload, 1, 0, 1 }, [DRM_IOCTL_NR(DRM_IOCTL_MGA_VERTEX)] = { mga_vertex, 1, 0, 1 }, - [DRM_IOCTL_NR(DRM_IOCTL_MGA_FLUSH)] = { mga_flush_ioctl, 1, 0, 1 }, + [DRM_IOCTL_NR(DRM_IOCTL_MGA_FLUSH)] = { mga_flush_ioctl, 1, 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_MGA_INDICES)] = { mga_indices, 1, 0, 1 }, }; diff --git a/linux/mga_dma.c b/linux/mga_dma.c index 40cc3a55..4e24258e 100644 --- a/linux/mga_dma.c +++ b/linux/mga_dma.c @@ -182,7 +182,6 @@ static inline void mga_dma_quiescent(drm_device_t *dev) for (i = 0 ; i < 2000 ; i++) mga_delay(); } sarea_priv->dirty |= MGA_DMA_FLUSH; - out_status: clear_bit(MGA_IN_DISPATCH, &dev_priv->dispatch_status); out_nolock: @@ -956,6 +955,8 @@ static int mga_flush_queue(drm_device_t *dev) if(dev_priv == NULL) { return 0; } + /* Get bfscking lock */ + drm_big_fscking_lock(dev); if(dev_priv->next_prim->num_dwords != 0) { current->state = TASK_INTERRUPTIBLE; @@ -978,6 +979,8 @@ static int mga_flush_queue(drm_device_t *dev) current->state = TASK_RUNNING; remove_wait_queue(&dev_priv->flush_queue, &entry); } + drm_big_fscking_unlock(dev); + return ret; } diff --git a/linux/mga_drv.c b/linux/mga_drv.c index 5e47f436..db4711a9 100644 --- a/linux/mga_drv.c +++ b/linux/mga_drv.c @@ -95,8 +95,8 @@ static drm_ioctl_desc_t mga_ioctls[] = { [DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { mga_dma, 1, 0, 1 }, - [DRM_IOCTL_NR(DRM_IOCTL_LOCK)] = { mga_lock, 1, 0, 1 }, - [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)] = { mga_unlock, 1, 0, 1 }, + [DRM_IOCTL_NR(DRM_IOCTL_LOCK)] = { mga_lock, 1, 0, 0 }, + [DRM_IOCTL_NR(DRM_IOCTL_UNLOCK)] = { mga_unlock, 1, 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_FINISH)] = { drm_finish, 1, 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_AGP_ACQUIRE)] = { drm_agp_acquire, 1, 1, 0 }, @@ -113,7 +113,7 @@ static drm_ioctl_desc_t mga_ioctls[] = { [DRM_IOCTL_NR(DRM_IOCTL_MGA_CLEAR)] = { mga_clear_bufs, 1, 0, 1 }, [DRM_IOCTL_NR(DRM_IOCTL_MGA_ILOAD)] = { mga_iload, 1, 0, 1 }, [DRM_IOCTL_NR(DRM_IOCTL_MGA_VERTEX)] = { mga_vertex, 1, 0, 1 }, - [DRM_IOCTL_NR(DRM_IOCTL_MGA_FLUSH)] = { mga_flush_ioctl, 1, 0, 1 }, + [DRM_IOCTL_NR(DRM_IOCTL_MGA_FLUSH)] = { mga_flush_ioctl, 1, 0, 0 }, [DRM_IOCTL_NR(DRM_IOCTL_MGA_INDICES)] = { mga_indices, 1, 0, 1 }, };