aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@canonical.com>2014-09-03 10:59:41 -0400
committerMaarten Lankhorst <maarten.lankhorst@canonical.com>2014-09-03 11:09:11 -0400
commitd7e4d671369263381dd3a02e1f240f675be6b1f5 (patch)
treee4c8b80b475129edbf1fec601d3d07696ef11725
parent47c1296829505d119d7d58dd23d39cc5db344f12 (diff)
drm/qxl: Remove release_lock stupidity
The locking of release_lock was stupid; t should have been be called with fence_lock_irq if it was legitimately used. Unfortunately it never protected anything except the fence implementation correctly. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
-rw-r--r--drivers/gpu/drm/qxl/qxl_debugfs.c2
-rw-r--r--drivers/gpu/drm/qxl/qxl_release.c9
2 files changed, 3 insertions, 8 deletions
diff --git a/drivers/gpu/drm/qxl/qxl_debugfs.c b/drivers/gpu/drm/qxl/qxl_debugfs.c
index a4a63fd84803..6911b8c44492 100644
--- a/drivers/gpu/drm/qxl/qxl_debugfs.c
+++ b/drivers/gpu/drm/qxl/qxl_debugfs.c
@@ -57,7 +57,6 @@ qxl_debugfs_buffers_info(struct seq_file *m, void *data)
57 struct qxl_device *qdev = node->minor->dev->dev_private; 57 struct qxl_device *qdev = node->minor->dev->dev_private;
58 struct qxl_bo *bo; 58 struct qxl_bo *bo;
59 59
60 spin_lock(&qdev->release_lock);
61 list_for_each_entry(bo, &qdev->gem.objects, list) { 60 list_for_each_entry(bo, &qdev->gem.objects, list) {
62 struct reservation_object_list *fobj; 61 struct reservation_object_list *fobj;
63 int rel; 62 int rel;
@@ -71,7 +70,6 @@ qxl_debugfs_buffers_info(struct seq_file *m, void *data)
71 (unsigned long)bo->gem_base.size, 70 (unsigned long)bo->gem_base.size,
72 bo->pin_count, rel); 71 bo->pin_count, rel);
73 } 72 }
74 spin_unlock(&qdev->release_lock);
75 return 0; 73 return 0;
76} 74}
77 75
diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
index 15158c5a5b3a..828d47e90dce 100644
--- a/drivers/gpu/drm/qxl/qxl_release.c
+++ b/drivers/gpu/drm/qxl/qxl_release.c
@@ -71,7 +71,7 @@ static long qxl_fence_wait(struct fence *fence, bool intr, signed long timeout)
71retry: 71retry:
72 sc++; 72 sc++;
73 73
74 if (fence_is_signaled_locked(fence)) 74 if (fence_is_signaled(fence))
75 goto signaled; 75 goto signaled;
76 76
77 qxl_io_notify_oom(qdev); 77 qxl_io_notify_oom(qdev);
@@ -80,11 +80,11 @@ retry:
80 if (!qxl_queue_garbage_collect(qdev, true)) 80 if (!qxl_queue_garbage_collect(qdev, true))
81 break; 81 break;
82 82
83 if (fence_is_signaled_locked(fence)) 83 if (fence_is_signaled(fence))
84 goto signaled; 84 goto signaled;
85 } 85 }
86 86
87 if (fence_is_signaled_locked(fence)) 87 if (fence_is_signaled(fence))
88 goto signaled; 88 goto signaled;
89 89
90 if (have_drawable_releases || sc < 4) { 90 if (have_drawable_releases || sc < 4) {
@@ -457,8 +457,6 @@ void qxl_release_fence_buffer_objects(struct qxl_release *release)
457 glob = bo->glob; 457 glob = bo->glob;
458 458
459 spin_lock(&glob->lru_lock); 459 spin_lock(&glob->lru_lock);
460 /* acquire release_lock to protect bo->resv->fence and its contents */
461 spin_lock(&qdev->release_lock);
462 460
463 list_for_each_entry(entry, &release->bos, head) { 461 list_for_each_entry(entry, &release->bos, head) {
464 bo = entry->bo; 462 bo = entry->bo;
@@ -468,7 +466,6 @@ void qxl_release_fence_buffer_objects(struct qxl_release *release)
468 ttm_bo_add_to_lru(bo); 466 ttm_bo_add_to_lru(bo);
469 __ttm_bo_unreserve(bo); 467 __ttm_bo_unreserve(bo);
470 } 468 }
471 spin_unlock(&qdev->release_lock);
472 spin_unlock(&glob->lru_lock); 469 spin_unlock(&glob->lru_lock);
473 ww_acquire_fini(&release->ticket); 470 ww_acquire_fini(&release->ticket);
474} 471}