drm/vmwgfx fixes for 5.12-rc7
vmwgfx: - fixed unpinning before destruction - lockdep init reordering -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJge3NBAAoJEAx081l5xIa+U28P/04l35qKLMQhK3EwBZS1cyis bii8W0RKfAuWl7dEp53nEtHEHG+z0cDH+/RRDhXtr3NV+wCuDF7I8r+P1xn2P+Xy siWRBsbg5Mp3sH2UegpMrDwgl0uAV7mhkpMZJ08ASCVzsgLNBMiDiDPfDrbSA6ne yfV3n4Fv4VPdJwMhp33OYB5OYqDpIlgGsei5R0w9zrv7bKnX2193UW5qaVuAd6k2 quKd0aGBATLm/BWBRL4pe1xgR7DJRFe4x4Tihn818tHe8gGaH2xvO6V5k894QlUM h5lk8xjLFqICj1kDuzmtZhNKU0iOK357NLcimxZYgSf5gXLLZsTwYCaFPAgEquX6 s+q48J9hfo+1TkcMBRih4zpxsRnjaPRIvNmUE6pYgUiUtmJzE9eu/Jblll/keHzr 4miyjiZHOiV8Q+WhpgLbJdPOdqNavxJj8BGCNQajMEQkzN7pZr4ilkhHYMNnslQO ug+ZqxWM6pPXvOMs/k+M4SOcPEaGcnxVZpAOL/DbtD8iPUlj9J6DkzL943rvpo+o pMBdEiVuVneJ03ev8IsAzKPID3UJJ0pmnlrZgJpkRpWWkoH75hHzG4Ps4zOAvUsa ykIY+lcf5GxI2hGVDnOUAfAm/URNooiDIhVc/rf8i5/UJBaK48ORfC8DeZw6r2Wq pLvZW1PKN/b+IYrOrl4n =nr7Z -----END PGP SIGNATURE----- Merge tag 'drm-fixes-2021-04-18' of git://anongit.freedesktop.org/drm/drm Pull vmwgfx fixes from Dave Airlie: "This contains two regression fixes for vmwgfx, one due to a refactor which meant locks were being used before initialisation, and the other in fixing up some warnings from the core when destroying pinned buffers. vmwgfx: - fixed unpinning before destruction - lockdep init reordering" * tag 'drm-fixes-2021-04-18' of git://anongit.freedesktop.org/drm/drm: drm/vmwgfx: Make sure bo's are unpinned before putting them back drm/vmwgfx: Fix the lockdep breakage drm/vmwgfx: Make sure we unpin no longer needed buffers
This commit is contained in:
commit
aba5970c4d
|
@ -481,11 +481,15 @@ static int vmw_cotable_resize(struct vmw_resource *res, size_t new_size)
|
|||
vmw_bo_unreference(&old_buf);
|
||||
res->id = vcotbl->type;
|
||||
|
||||
/* Release the pin acquired in vmw_bo_init */
|
||||
ttm_bo_unpin(bo);
|
||||
|
||||
return 0;
|
||||
|
||||
out_map_new:
|
||||
ttm_bo_kunmap(&old_map);
|
||||
out_wait:
|
||||
ttm_bo_unpin(bo);
|
||||
ttm_bo_unreserve(bo);
|
||||
vmw_bo_unreference(&buf);
|
||||
|
||||
|
|
|
@ -712,6 +712,15 @@ static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id)
|
|||
dev_priv->last_read_seqno = (uint32_t) -100;
|
||||
dev_priv->drm.dev_private = dev_priv;
|
||||
|
||||
mutex_init(&dev_priv->cmdbuf_mutex);
|
||||
mutex_init(&dev_priv->binding_mutex);
|
||||
ttm_lock_init(&dev_priv->reservation_sem);
|
||||
spin_lock_init(&dev_priv->resource_lock);
|
||||
spin_lock_init(&dev_priv->hw_lock);
|
||||
spin_lock_init(&dev_priv->waiter_lock);
|
||||
spin_lock_init(&dev_priv->cap_lock);
|
||||
spin_lock_init(&dev_priv->cursor_lock);
|
||||
|
||||
ret = vmw_setup_pci_resources(dev_priv, pci_id);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -719,16 +728,6 @@ static int vmw_driver_load(struct vmw_private *dev_priv, u32 pci_id)
|
|||
if (ret)
|
||||
goto out_no_pci_or_version;
|
||||
|
||||
mutex_init(&dev_priv->cmdbuf_mutex);
|
||||
mutex_init(&dev_priv->release_mutex);
|
||||
mutex_init(&dev_priv->binding_mutex);
|
||||
mutex_init(&dev_priv->global_kms_state_mutex);
|
||||
ttm_lock_init(&dev_priv->reservation_sem);
|
||||
spin_lock_init(&dev_priv->resource_lock);
|
||||
spin_lock_init(&dev_priv->hw_lock);
|
||||
spin_lock_init(&dev_priv->waiter_lock);
|
||||
spin_lock_init(&dev_priv->cap_lock);
|
||||
spin_lock_init(&dev_priv->cursor_lock);
|
||||
|
||||
for (i = vmw_res_context; i < vmw_res_max; ++i) {
|
||||
idr_init(&dev_priv->res_idr[i]);
|
||||
|
|
|
@ -529,7 +529,6 @@ struct vmw_private {
|
|||
struct vmw_overlay *overlay_priv;
|
||||
struct drm_property *hotplug_mode_update_property;
|
||||
struct drm_property *implicit_placement_property;
|
||||
struct mutex global_kms_state_mutex;
|
||||
spinlock_t cursor_lock;
|
||||
struct drm_atomic_state *suspend_state;
|
||||
|
||||
|
@ -592,7 +591,6 @@ struct vmw_private {
|
|||
bool refuse_hibernation;
|
||||
bool suspend_locked;
|
||||
|
||||
struct mutex release_mutex;
|
||||
atomic_t num_fifo_resources;
|
||||
|
||||
/*
|
||||
|
@ -1524,9 +1522,8 @@ static inline void vmw_bo_unreference(struct vmw_buffer_object **buf)
|
|||
struct vmw_buffer_object *tmp_buf = *buf;
|
||||
|
||||
*buf = NULL;
|
||||
if (tmp_buf != NULL) {
|
||||
if (tmp_buf != NULL)
|
||||
ttm_bo_put(&tmp_buf->base);
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct vmw_buffer_object *
|
||||
|
|
|
@ -94,6 +94,16 @@ static void vmw_mob_pt_setup(struct vmw_mob *mob,
|
|||
struct vmw_piter data_iter,
|
||||
unsigned long num_data_pages);
|
||||
|
||||
|
||||
static inline void vmw_bo_unpin_unlocked(struct ttm_buffer_object *bo)
|
||||
{
|
||||
int ret = ttm_bo_reserve(bo, false, true, NULL);
|
||||
BUG_ON(ret != 0);
|
||||
ttm_bo_unpin(bo);
|
||||
ttm_bo_unreserve(bo);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* vmw_setup_otable_base - Issue an object table base setup command to
|
||||
* the device
|
||||
|
@ -277,6 +287,7 @@ out_no_setup:
|
|||
&batch->otables[i]);
|
||||
}
|
||||
|
||||
vmw_bo_unpin_unlocked(batch->otable_bo);
|
||||
ttm_bo_put(batch->otable_bo);
|
||||
batch->otable_bo = NULL;
|
||||
return ret;
|
||||
|
@ -340,6 +351,7 @@ static void vmw_otable_batch_takedown(struct vmw_private *dev_priv,
|
|||
BUG_ON(ret != 0);
|
||||
|
||||
vmw_bo_fence_single(bo, NULL);
|
||||
ttm_bo_unpin(bo);
|
||||
ttm_bo_unreserve(bo);
|
||||
|
||||
ttm_bo_put(batch->otable_bo);
|
||||
|
@ -528,6 +540,7 @@ static void vmw_mob_pt_setup(struct vmw_mob *mob,
|
|||
void vmw_mob_destroy(struct vmw_mob *mob)
|
||||
{
|
||||
if (mob->pt_bo) {
|
||||
vmw_bo_unpin_unlocked(mob->pt_bo);
|
||||
ttm_bo_put(mob->pt_bo);
|
||||
mob->pt_bo = NULL;
|
||||
}
|
||||
|
@ -643,6 +656,7 @@ int vmw_mob_bind(struct vmw_private *dev_priv,
|
|||
out_no_cmd_space:
|
||||
vmw_fifo_resource_dec(dev_priv);
|
||||
if (pt_set_up) {
|
||||
vmw_bo_unpin_unlocked(mob->pt_bo);
|
||||
ttm_bo_put(mob->pt_bo);
|
||||
mob->pt_bo = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue