|
@@ -406,11 +406,9 @@ int vmw_3d_resource_inc(struct vmw_private *dev_priv,
|
|
|
if (unlikely(ret != 0))
|
|
|
--dev_priv->num_3d_resources;
|
|
|
} else if (unhide_svga) {
|
|
|
- mutex_lock(&dev_priv->hw_mutex);
|
|
|
vmw_write(dev_priv, SVGA_REG_ENABLE,
|
|
|
vmw_read(dev_priv, SVGA_REG_ENABLE) &
|
|
|
~SVGA_REG_ENABLE_HIDE);
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
}
|
|
|
|
|
|
mutex_unlock(&dev_priv->release_mutex);
|
|
@@ -433,13 +431,10 @@ void vmw_3d_resource_dec(struct vmw_private *dev_priv,
|
|
|
mutex_lock(&dev_priv->release_mutex);
|
|
|
if (unlikely(--dev_priv->num_3d_resources == 0))
|
|
|
vmw_release_device(dev_priv);
|
|
|
- else if (hide_svga) {
|
|
|
- mutex_lock(&dev_priv->hw_mutex);
|
|
|
+ else if (hide_svga)
|
|
|
vmw_write(dev_priv, SVGA_REG_ENABLE,
|
|
|
vmw_read(dev_priv, SVGA_REG_ENABLE) |
|
|
|
SVGA_REG_ENABLE_HIDE);
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
- }
|
|
|
|
|
|
n3d = (int32_t) dev_priv->num_3d_resources;
|
|
|
mutex_unlock(&dev_priv->release_mutex);
|
|
@@ -600,12 +595,14 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
|
|
|
dev_priv->dev = dev;
|
|
|
dev_priv->vmw_chipset = chipset;
|
|
|
dev_priv->last_read_seqno = (uint32_t) -100;
|
|
|
- mutex_init(&dev_priv->hw_mutex);
|
|
|
mutex_init(&dev_priv->cmdbuf_mutex);
|
|
|
mutex_init(&dev_priv->release_mutex);
|
|
|
mutex_init(&dev_priv->binding_mutex);
|
|
|
rwlock_init(&dev_priv->resource_lock);
|
|
|
ttm_lock_init(&dev_priv->reservation_sem);
|
|
|
+ spin_lock_init(&dev_priv->hw_lock);
|
|
|
+ spin_lock_init(&dev_priv->waiter_lock);
|
|
|
+ spin_lock_init(&dev_priv->cap_lock);
|
|
|
|
|
|
for (i = vmw_res_context; i < vmw_res_max; ++i) {
|
|
|
idr_init(&dev_priv->res_idr[i]);
|
|
@@ -626,14 +623,11 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
|
|
|
|
|
|
dev_priv->enable_fb = enable_fbdev;
|
|
|
|
|
|
- mutex_lock(&dev_priv->hw_mutex);
|
|
|
-
|
|
|
vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2);
|
|
|
svga_id = vmw_read(dev_priv, SVGA_REG_ID);
|
|
|
if (svga_id != SVGA_ID_2) {
|
|
|
ret = -ENOSYS;
|
|
|
DRM_ERROR("Unsupported SVGA ID 0x%x\n", svga_id);
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
goto out_err0;
|
|
|
}
|
|
|
|
|
@@ -683,10 +677,8 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
|
|
|
dev_priv->prim_bb_mem = dev_priv->vram_size;
|
|
|
|
|
|
ret = vmw_dma_masks(dev_priv);
|
|
|
- if (unlikely(ret != 0)) {
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
+ if (unlikely(ret != 0))
|
|
|
goto out_err0;
|
|
|
- }
|
|
|
|
|
|
/*
|
|
|
* Limit back buffer size to VRAM size. Remove this once
|
|
@@ -695,8 +687,6 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
|
|
|
if (dev_priv->prim_bb_mem > dev_priv->vram_size)
|
|
|
dev_priv->prim_bb_mem = dev_priv->vram_size;
|
|
|
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
-
|
|
|
vmw_print_capabilities(dev_priv->capabilities);
|
|
|
|
|
|
if (dev_priv->capabilities & SVGA_CAP_GMR2) {
|
|
@@ -1160,9 +1150,7 @@ static int vmw_master_set(struct drm_device *dev,
|
|
|
if (unlikely(ret != 0))
|
|
|
return ret;
|
|
|
vmw_kms_save_vga(dev_priv);
|
|
|
- mutex_lock(&dev_priv->hw_mutex);
|
|
|
vmw_write(dev_priv, SVGA_REG_TRACES, 0);
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
}
|
|
|
|
|
|
if (active) {
|
|
@@ -1196,9 +1184,7 @@ out_no_active_lock:
|
|
|
if (!dev_priv->enable_fb) {
|
|
|
vmw_kms_restore_vga(dev_priv);
|
|
|
vmw_3d_resource_dec(dev_priv, true);
|
|
|
- mutex_lock(&dev_priv->hw_mutex);
|
|
|
vmw_write(dev_priv, SVGA_REG_TRACES, 1);
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
}
|
|
|
return ret;
|
|
|
}
|
|
@@ -1233,9 +1219,7 @@ static void vmw_master_drop(struct drm_device *dev,
|
|
|
DRM_ERROR("Unable to clean VRAM on master drop.\n");
|
|
|
vmw_kms_restore_vga(dev_priv);
|
|
|
vmw_3d_resource_dec(dev_priv, true);
|
|
|
- mutex_lock(&dev_priv->hw_mutex);
|
|
|
vmw_write(dev_priv, SVGA_REG_TRACES, 1);
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
}
|
|
|
|
|
|
dev_priv->active_master = &dev_priv->fbdev_master;
|
|
@@ -1367,10 +1351,8 @@ static void vmw_pm_complete(struct device *kdev)
|
|
|
struct drm_device *dev = pci_get_drvdata(pdev);
|
|
|
struct vmw_private *dev_priv = vmw_priv(dev);
|
|
|
|
|
|
- mutex_lock(&dev_priv->hw_mutex);
|
|
|
vmw_write(dev_priv, SVGA_REG_ID, SVGA_ID_2);
|
|
|
(void) vmw_read(dev_priv, SVGA_REG_ID);
|
|
|
- mutex_unlock(&dev_priv->hw_mutex);
|
|
|
|
|
|
/**
|
|
|
* Reclaim 3d reference held by fbdev and potentially
|