mirror of https://gitee.com/openkylin/linux.git
Merge branch 'drm-etnaviv-fixes' of git://git.pengutronix.de/git/lst/linux into drm-fixes
Single GPU recovery fix * 'drm-etnaviv-fixes' of git://git.pengutronix.de/git/lst/linux: drm/etnaviv: take GPU lock later in the submit process
This commit is contained in:
commit
aae2d1fc83
|
@ -1333,8 +1333,6 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
mutex_lock(&gpu->lock);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TODO
|
* TODO
|
||||||
*
|
*
|
||||||
|
@ -1348,16 +1346,18 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu,
|
||||||
if (unlikely(event == ~0U)) {
|
if (unlikely(event == ~0U)) {
|
||||||
DRM_ERROR("no free event\n");
|
DRM_ERROR("no free event\n");
|
||||||
ret = -EBUSY;
|
ret = -EBUSY;
|
||||||
goto out_unlock;
|
goto out_pm_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
fence = etnaviv_gpu_fence_alloc(gpu);
|
fence = etnaviv_gpu_fence_alloc(gpu);
|
||||||
if (!fence) {
|
if (!fence) {
|
||||||
event_free(gpu, event);
|
event_free(gpu, event);
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto out_unlock;
|
goto out_pm_put;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_lock(&gpu->lock);
|
||||||
|
|
||||||
gpu->event[event].fence = fence;
|
gpu->event[event].fence = fence;
|
||||||
submit->fence = fence->seqno;
|
submit->fence = fence->seqno;
|
||||||
gpu->active_fence = submit->fence;
|
gpu->active_fence = submit->fence;
|
||||||
|
@ -1395,9 +1395,9 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu,
|
||||||
hangcheck_timer_reset(gpu);
|
hangcheck_timer_reset(gpu);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
out_unlock:
|
|
||||||
mutex_unlock(&gpu->lock);
|
mutex_unlock(&gpu->lock);
|
||||||
|
|
||||||
|
out_pm_put:
|
||||||
etnaviv_gpu_pm_put(gpu);
|
etnaviv_gpu_pm_put(gpu);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in New Issue