diff options
| author | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2014-01-09 05:03:08 -0500 |
|---|---|---|
| committer | Maarten Lankhorst <maarten.lankhorst@canonical.com> | 2014-09-01 04:16:43 -0400 |
| commit | 58b4d720c1620bbf09e42b4f218dcb2d0d8cdf3e (patch) | |
| tree | 87edd6d708d020f349702eb42049bef343540aec /drivers/gpu/drm/ttm | |
| parent | dd7cfd641228abb2669d8d047d5ec377b1835900 (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.c | 22 |
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 | ||
| 114 | int ttm_eu_reserve_buffers(struct ww_acquire_ctx *ticket, | 114 | int 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)) { |
