Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/msm: preserve IOVAs in submit's bo table

We need this if we want to dump the submit after cleanup (ie. from hang
or fault). But in the backoff/unpin case we want to clear them. So add
a flag so we can skip clearing the IOVAs in at cleanup.

Signed-off-by: Rob Clark <robdclark@gmail.com>

+6 -5
+6 -5
drivers/gpu/drm/msm/msm_gem_submit.c
··· 161 161 return ret; 162 162 } 163 163 164 - static void submit_unlock_unpin_bo(struct msm_gem_submit *submit, int i) 164 + static void submit_unlock_unpin_bo(struct msm_gem_submit *submit, 165 + int i, bool backoff) 165 166 { 166 167 struct msm_gem_object *msm_obj = submit->bos[i].obj; 167 168 ··· 172 171 if (submit->bos[i].flags & BO_LOCKED) 173 172 ww_mutex_unlock(&msm_obj->resv->lock); 174 173 175 - if (!(submit->bos[i].flags & BO_VALID)) 174 + if (backoff && !(submit->bos[i].flags & BO_VALID)) 176 175 submit->bos[i].iova = 0; 177 176 178 177 submit->bos[i].flags &= ~(BO_LOCKED | BO_PINNED); ··· 207 206 208 207 fail: 209 208 for (; i >= 0; i--) 210 - submit_unlock_unpin_bo(submit, i); 209 + submit_unlock_unpin_bo(submit, i, true); 211 210 212 211 if (slow_locked > 0) 213 - submit_unlock_unpin_bo(submit, slow_locked); 212 + submit_unlock_unpin_bo(submit, slow_locked, true); 214 213 215 214 if (ret == -EDEADLK) { 216 215 struct msm_gem_object *msm_obj = submit->bos[contended].obj; ··· 394 393 395 394 for (i = 0; i < submit->nr_bos; i++) { 396 395 struct msm_gem_object *msm_obj = submit->bos[i].obj; 397 - submit_unlock_unpin_bo(submit, i); 396 + submit_unlock_unpin_bo(submit, i, false); 398 397 list_del_init(&msm_obj->submit_entry); 399 398 drm_gem_object_unreference(&msm_obj->base); 400 399 }