On Fri, Aug 28, 2026 at 02:08:12PM +0800, [email protected] wrote:
> From: Lu Yao <[email protected]>
> 
> If idr_alloc() fails after create_dynamic_oa_sysfs_entry() has
> succeeded, the error path frees the OA config without removing the
> metrics sysfs group.
> 
> Remove the sysfs group before releasing the config, and fix up the
> misleading error message copied from the sysfs creation failure path.
> 
> Fixes: cdf02fe1a94a ("drm/xe/oa/uapi: Add/remove OA config perf ops")
> Signed-off-by: Lu Yao <[email protected]>
> ---
>  drivers/gpu/drm/xe/xe_oa.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 9c5384b95c63..73e51db13f56 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -2435,8 +2435,9 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, u64 
> data, struct drm_file *fi
>  
>       oa_config->id = idr_alloc(&oa->metrics_idr, oa_config, 1, 0, 
> GFP_KERNEL);
>       if (oa_config->id < 0) {
> -             drm_dbg(&oa->xe->drm, "Failed to create sysfs entry for OA 
> config\n");
> +             drm_dbg(&oa->xe->drm, "Failed to allocate id for OA config\n");
>               err = oa_config->id;
> +             sysfs_remove_group(oa->metrics_kobj, &oa_config->sysfs_metric);

good catch, but instead of adding this removal here, could you please
create a new goto so the error handling keeps consistent?

something like:

-               drm_dbg(&oa->xe->drm, "Failed to create sysfs entry for OA 
config\n");
+               drm_dbg(&oa->xe->drm, "Failed to allocate id for OA config\n");
                err = oa_config->id;
-               goto sysfs_err;
+               goto id_alloc_err;

...

+id_alloc_err:
+               sysfs_remove_group(oa->metrics_kobj, &oa_config->sysfs_metric);
sysfs_err:

>               goto sysfs_err;
>       }
>  
> -- 
> 2.25.1
> 

Reply via email to