"Cavitt, Jonathan" <[email protected]> writes:

> -----Original Message-----
> From: Sousa, Gustavo <[email protected]> 
> Sent: Thursday, May 28, 2026 3:30 PM
> To: Cavitt, Jonathan <[email protected]>; 
> [email protected]
> Cc: Gupta, Saurabhg <[email protected]>; Zuo, Alex 
> <[email protected]>; Cavitt, Jonathan <[email protected]>
> Subject: Re: [PATCH] drm/xe/rtp: Check hwe before calling match_func
>> 
>> Jonathan Cavitt <[email protected]> writes:
>> 
>> > XE_RTP_MATCH_FUNC may attempt to dereference the target xe_hw_engine.
>> > Ensure the hwe is not NULL before calling the function, matching
>> > XE_RTP_MATCH_ENGINE_CLASS, for example.
>> >
>> > This covers a static analysis issue.
>> >
>> > Signed-off-by: Jonathan Cavitt <[email protected]>
>> > Cc: Gustavo Sousa <[email protected]>
>> > ---
>> >  drivers/gpu/drm/xe/xe_rtp.c | 3 +++
>> >  1 file changed, 3 insertions(+)
>> >
>> > diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
>> > index dec9d94e6fb0..2cd26db113d9 100644
>> > --- a/drivers/gpu/drm/xe/xe_rtp.c
>> > +++ b/drivers/gpu/drm/xe/xe_rtp.c
>> > @@ -129,6 +129,9 @@ static bool rule_match_item(struct rule_match_ctx 
>> > *match_ctx)
>> >  
>> >            return hwe->class != r->engine_class;
>> >    case XE_RTP_MATCH_FUNC:
>> > +          if (drm_WARN_ON(&xe->drm, !hwe))
>> > +                  return false;
>> 
>> There are several functions passed via XE_RTP_MATCH_FUNC() (i.e. MATCH()
>> in definitions of RTP rules) that are meant to be used to do checks that
>> do not depend on hwe.  Returning false here is wrong as it will cause
>> those checks to be skipped.
>> 
>> The developer is responsible for not passing a function that uses hwe in
>> a context where it is NULL.
>
> Understood, though quick question: is this also the case for GT?

Yep. Some examples:

  * match_has_mert
  * xe_rtp_match_not_sriov_vf
  * xe_rtp_match_has_flat_ccs

--
Gustavo Sousa

> -Jonathan Cavitt
>
>> 
>> --
>> Gustavo Sousa
>> 
>> > +
>> >            return r->match_func(xe, gt, hwe);
>> >    default:
>> >            drm_warn(&xe->drm, "Invalid RTP match %u\n",
>> > -- 
>> > 2.53.0
>> 

Reply via email to