[PATCH 2/2] drm/amdgpu/vcn: Allow limiting ctx to instance 0 for AV1 at any time

Liu, Leo Leo.Liu at amd.com
Tue Aug 19 20:30:46 UTC 2025


[AMD Official Use Only - AMD Internal Distribution Only]

The series is:
Reviewed-by: Leo Liu <leo.liu at amd.com>

> -----Original Message-----
> From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> On Behalf Of David
> Rosca
> Sent: August 18, 2025 5:43 AM
> To: amd-gfx at lists.freedesktop.org
> Cc: Rosca, David <David.Rosca at amd.com>
> Subject: [PATCH 2/2] drm/amdgpu/vcn: Allow limiting ctx to instance 0 for AV1
> at any time
>
> There is no reason to require this to happen on first submitted IB only.
> We need to wait for the queue to be idle, but it can be done at any time
> (including when there are multiple video sessions active).
>
> Signed-off-by: David Rosca <david.rosca at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 12 ++++++++----
> drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c | 12 ++++++++----
>  2 files changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
> b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
> index 95173156f956..f3085137ba08 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c
> @@ -1886,15 +1886,19 @@ static int vcn_v3_0_limit_sched(struct
> amdgpu_cs_parser *p,
>                               struct amdgpu_job *job)
>  {
>       struct drm_gpu_scheduler **scheds;
> -
> -     /* The create msg must be in the first IB submitted */
> -     if (atomic_read(&job->base.entity->fence_seq))
> -             return -EINVAL;
> +     struct dma_fence *fence;
>
>       /* if VCN0 is harvested, we can't support AV1 */
>       if (p->adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0)
>               return -EINVAL;
>
> +     /* wait for all jobs to finish before switching to instance 0 */
> +     fence = amdgpu_ctx_get_fence(p->ctx, job->base.entity, ~0ull);
> +     if (fence) {
> +             dma_fence_wait(fence, false);
> +             dma_fence_put(fence);
> +     }
> +
>       scheds = p->adev->gpu_sched[AMDGPU_HW_IP_VCN_DEC]
>               [AMDGPU_RING_PRIO_DEFAULT].sched;
>       drm_sched_entity_modify_sched(job->base.entity, scheds, 1); diff --
> git a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
> b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
> index 23b98f011879..235fc9e01dd7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c
> @@ -1805,15 +1805,19 @@ static int vcn_v4_0_limit_sched(struct
> amdgpu_cs_parser *p,
>                               struct amdgpu_job *job)
>  {
>       struct drm_gpu_scheduler **scheds;
> -
> -     /* The create msg must be in the first IB submitted */
> -     if (atomic_read(&job->base.entity->fence_seq))
> -             return -EINVAL;
> +     struct dma_fence *fence;
>
>       /* if VCN0 is harvested, we can't support AV1 */
>       if (p->adev->vcn.harvest_config & AMDGPU_VCN_HARVEST_VCN0)
>               return -EINVAL;
>
> +     /* wait for all jobs to finish before switching to instance 0 */
> +     fence = amdgpu_ctx_get_fence(p->ctx, job->base.entity, ~0ull);
> +     if (fence) {
> +             dma_fence_wait(fence, false);
> +             dma_fence_put(fence);
> +     }
> +
>       scheds = p->adev->gpu_sched[AMDGPU_HW_IP_VCN_ENC]
>               [AMDGPU_RING_PRIO_0].sched;
>       drm_sched_entity_modify_sched(job->base.entity, scheds, 1);
> --
> 2.43.0



More information about the amd-gfx mailing list