Re: [PATCH] drm/xe/oa: Remove sysfs entry on idr_alloc failure in xe_oa_add_config_ioctl()

From: Rodrigo Vivi

Date: Fri Aug 28 2026 - 11:52:37 EST


On Fri, Aug 28, 2026 at 02:08:12PM +0800, yaolu@xxxxxxxxxx wrote:
> From: Lu Yao <yaolu@xxxxxxxxxx>
>
> 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 <yaolu@xxxxxxxxxx>
> ---
> 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
>