aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/ttm
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@canonical.com>2014-01-09 05:03:08 -0500
committerMaarten Lankhorst <maarten.lankhorst@canonical.com>2014-09-01 04:16:43 -0400
commit58b4d720c1620bbf09e42b4f218dcb2d0d8cdf3e (patch)
tree87edd6d708d020f349702eb42049bef343540aec /drivers/gpu/drm/ttm
parentdd7cfd641228abb2669d8d047d5ec377b1835900 (diff)
drm/ttm: add interruptible parameter to ttm_eu_reserve_buffers
It seems some drivers really want this as a parameter, like vmwgfx. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Diffstat (limited to 'drivers/gpu/drm/ttm')
-rw-r--r--drivers/gpu/drm/ttm/ttm_execbuf_util.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_execbuf_util.c b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
index 0fbbbbd67afc..87d7deefc806 100644
--- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c
+++ b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
@@ -112,7 +112,7 @@ EXPORT_SYMBOL(ttm_eu_backoff_reservation);
112 */ 112 */
113 113
114int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket, 114int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket,
115 struct list_head *list) 115 struct list_head *list, bool intr)
116{ 116{
117 struct ttm_bo_global *glob; 117 struct ttm_bo_global *glob;
118 struct ttm_validate_buffer *entry; 118 struct ttm_validate_buffer *entry;
@@ -140,7 +140,7 @@ retry:
140 if (entry->reserved) 140 if (entry->reserved)
141 continue; 141 continue;
142 142
143 ret = __ttm_bo_reserve(bo, true, (ticket == NULL), true, 143 ret = __ttm_bo_reserve(bo, intr, (ticket == NULL), true,
144 ticket); 144 ticket);
145 145
146 if (ret == -EDEADLK) { 146 if (ret == -EDEADLK) {
@@ -153,13 +153,17 @@ retry:
153 ttm_eu_backoff_reservation_locked(list); 153 ttm_eu_backoff_reservation_locked(list);
154 spin_unlock(&glob->lru_lock); 154 spin_unlock(&glob->lru_lock);
155 ttm_eu_list_ref_sub(list); 155 ttm_eu_list_ref_sub(list);
156 ret = ww_mutex_lock_slow_interruptible(&bo->resv->lock, 156
157 ticket); 157 if (intr) {
158 if (unlikely(ret != 0)) { 158 ret = ww_mutex_lock_slow_interruptible(&bo->resv->lock,
159 if (ret == -EINTR) 159 ticket);
160 ret = -ERESTARTSYS; 160 if (unlikely(ret != 0)) {
161 goto err_fini; 161 if (ret == -EINTR)
162 } 162 ret = -ERESTARTSYS;
163 goto err_fini;
164 }
165 } else
166 ww_mutex_lock_slow(&bo->resv->lock, ticket);
163 167
164 entry->reserved = true; 168 entry->reserved = true;
165 if (unlikely(atomic_read(&bo->cpu_writers) > 0)) { 169 if (unlikely(atomic_read(&bo->cpu_writers) > 0)) {