[PATCH 2/3] drm/amdgpu/pm_runtime: update usage count in fence handling
Christian König
ckoenig.leichtzumerken at gmail.com
Mon Dec 16 20:24:48 UTC 2019
Am 16.12.19 um 21:22 schrieb Alex Deucher:
> On Mon, Dec 16, 2019 at 3:19 PM Christian König
> <ckoenig.leichtzumerken at gmail.com> wrote:
>> Am 16.12.19 um 18:18 schrieb Alex Deucher:
>>> Increment the usage count in emit fence, and decrement in
>>> process fence to make sure the GPU is always considered in
>>> use while there are fences outstanding. We always wait for
>>> the engines to drain in runtime suspend, but in practice
>>> that only covers short lived jobs for gfx. This should
>>> cover us for longer lived fences.
>>>
>>> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 6 +++++-
>>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
>>> index 377fe20bce23..e9efee04ca23 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
>>> @@ -34,6 +34,7 @@
>>> #include <linux/kref.h>
>>> #include <linux/slab.h>
>>> #include <linux/firmware.h>
>>> +#include <linux/pm_runtime.h>
>>>
>>> #include <drm/drm_debugfs.h>
>>>
>>> @@ -154,7 +155,7 @@ int amdgpu_fence_emit(struct amdgpu_ring *ring, struct dma_fence **f,
>>> seq);
>>> amdgpu_ring_emit_fence(ring, ring->fence_drv.gpu_addr,
>>> seq, flags | AMDGPU_FENCE_FLAG_INT);
>>> -
>>> + pm_runtime_get_noresume(adev->ddev->dev);
>>> ptr = &ring->fence_drv.fences[seq & ring->fence_drv.num_fences_mask];
>>> if (unlikely(rcu_dereference_protected(*ptr, 1))) {
>>> struct dma_fence *old;
>>> @@ -234,6 +235,7 @@ static void amdgpu_fence_schedule_fallback(struct amdgpu_ring *ring)
>>> bool amdgpu_fence_process(struct amdgpu_ring *ring)
>>> {
>>> struct amdgpu_fence_driver *drv = &ring->fence_drv;
>>> + struct amdgpu_device *adev = ring->adev;
>>> uint32_t seq, last_seq;
>>> int r;
>>>
>>> @@ -274,6 +276,8 @@ bool amdgpu_fence_process(struct amdgpu_ring *ring)
>>> BUG();
>>>
>>> dma_fence_put(fence);
>>> + pm_runtime_mark_last_busy(adev->ddev->dev);
>>> + pm_runtime_put_autosuspend(adev->ddev->dev);
>> Are you sure this is ok? Keep in mind that this function is called in
>> interrupt context.
> According to:
> https://www.kernel.org/doc/Documentation/power/runtime_pm.txt
> it's ok to call those in an interrupt context.
In this case the patch is Reviewed-by: Christian König
<christian.koenig at amd.com>.
Christian.
>
> Alex
>
>> Christian.
>>
>>> } while (last_seq != seq);
>>>
>>> return true;
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the amd-gfx
mailing list