Hi Ulisses,

On 05/05/2026 14:50, Ulisses Paixao wrote:
>  
> +/**
> + * amdgpu_gfx_handle_priv_fault - Handle privileged instruction fault
> + *
> + * @adev: amdgpu_device pointer
> + * @me_id: micro-engine ID of the faulty ring
> + * @pipe_id: pipe ID of the faulty ring
> + * @queue_id: queue ID of the faulty ring
> + *
> + * This function handles privileged instruction faults by identifying
> + * the faulty ring (gfx or compute) and triggering a scheduler fault.
> + */
> +void amdgpu_gfx_handle_priv_fault(struct amdgpu_device *adev,
> +                                     u8 me_id, u8 pipe_id, u8 queue_id)
> +{
> +     struct amdgpu_ring *ring;
> +     int i;
> +
> +     for (i = 0; i < adev->gfx.num_gfx_rings; i++) {
> +             ring = &adev->gfx.gfx_ring[i];
> +             if (ring->me == me_id && ring->pipe == pipe_id &&
> +                 ring->queue == queue_id) {
> +                     drm_sched_fault(&ring->sched);
> +                     return;
> +             }
> +     }
> +
> +     for (i = 0; i < adev->gfx.num_compute_rings; i++) {
> +             ring = &adev->gfx.compute_ring[i];
> +             if (ring->me == me_id && ring->pipe == pipe_id &&
> +                 ring->queue == queue_id)
> +                     drm_sched_fault(&ring->sched);
> +     }
> +}
> +
>  
Looks like the same pattern already exists in gfx_v10 as well.

gfx_v8 and gfx_v9 are slightly different though, since they directly
fault gfx_ring[0] for me_id == 0 instead of matching pipe/queue.

Mentioning this in case it’s useful for considering whether the same
cleanup could be applied there as well.

--
Kind regards,
Guilherme Ivo


Reply via email to