[PATCH] drm/xe/oa/uapi: Allow OA config's to have arbitrary names/id's

Cavitt, Jonathan jonathan.cavitt at intel.com
Wed Jul 10 19:33:40 UTC 2024


-----Original Message-----
From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Ashutosh Dixit
Sent: Tuesday, July 9, 2024 6:18 PM
To: intel-xe at lists.freedesktop.org
Cc: Landwerlin, Lionel G <lionel.g.landwerlin at intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa at intel.com>; Krzemien, Robert <robert.krzemien at intel.com>; Souza, Jose <jose.souza at intel.com>
Subject: [PATCH] drm/xe/oa/uapi: Allow OA config's to have arbitrary names/id's
> 
> Added OA configs were previously identified by means of a uuid. Rather than
> forcing userspace to use uuid, here we generalize this scheme to allow
> userspace the flexibility to use whatever naming scheme (including uuid)
> they may wish to use to identify and track OA config's. Names must still be
> unique or will be rejected.
> 
> Fixes: cdf02fe1a94a ("drm/xe/oa/uapi: Add/remove OA config perf ops")
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit at intel.com>

I read the extended explanation in reply and agree this is a good
change.  It might be best to try and move parts of that explanation
into the commit message for added clarity, but otherwise:
Reviewed-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
-Jonathan Cavitt

> ---
>  drivers/gpu/drm/xe/xe_oa.c | 30 ++++++++++++------------------
>  include/uapi/drm/xe_drm.h  |  4 ++--
>  2 files changed, 14 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 6d69f751bf78..4f00577e92b4 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -49,7 +49,7 @@ struct xe_oa_reg {
>  struct xe_oa_config {
>  	struct xe_oa *oa;
>  
> -	char uuid[UUID_STRING_LEN + 1];
> +	char name[UUID_STRING_LEN + 1];
>  	int id;
>  
>  	const struct xe_oa_reg *regs;
> @@ -899,8 +899,8 @@ xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_c
>  	/* Look for the buffer in the already allocated BOs attached to the stream */
>  	llist_for_each_entry(oa_bo, stream->oa_config_bos.first, node) {
>  		if (oa_bo->oa_config == oa_config &&
> -		    memcmp(oa_bo->oa_config->uuid, oa_config->uuid,
> -			   sizeof(oa_config->uuid)) == 0)
> +		    memcmp(oa_bo->oa_config->name, oa_config->name,
> +			   sizeof(oa_config->name)) == 0)
>  			goto out;
>  	}
>  
> @@ -1430,8 +1430,8 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
>  		goto err_put_k_exec_q;
>  	}
>  
> -	drm_dbg(&stream->oa->xe->drm, "opening stream oa config uuid=%s\n",
> -		stream->oa_config->uuid);
> +	drm_dbg(&stream->oa->xe->drm, "opening stream oa config name=%s\n",
> +		stream->oa_config->name);
>  
>  	WRITE_ONCE(u->exclusive_stream, stream);
>  
> @@ -2066,7 +2066,7 @@ static int create_dynamic_oa_sysfs_entry(struct xe_oa *oa,
>  	oa_config->attrs[0] = &oa_config->sysfs_metric_id.attr;
>  	oa_config->attrs[1] = NULL;
>  
> -	oa_config->sysfs_metric.name = oa_config->uuid;
> +	oa_config->sysfs_metric.name = oa_config->name;
>  	oa_config->sysfs_metric.attrs = oa_config->attrs;
>  
>  	return sysfs_create_group(oa->metrics_kobj, &oa_config->sysfs_metric);
> @@ -2118,14 +2118,8 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, u64 data, struct drm_file *fi
>  	oa_config->oa = oa;
>  	kref_init(&oa_config->ref);
>  
> -	if (!uuid_is_valid(arg->uuid)) {
> -		drm_dbg(&oa->xe->drm, "Invalid uuid format for OA config\n");
> -		err = -EINVAL;
> -		goto reg_err;
> -	}
> -
> -	/* Last character in oa_config->uuid will be 0 because oa_config is kzalloc */
> -	memcpy(oa_config->uuid, arg->uuid, sizeof(arg->uuid));
> +	/* Last character in oa_config->name will be 0 because oa_config is kzalloc */
> +	memcpy(oa_config->name, arg->name, sizeof(arg->name));
>  
>  	oa_config->regs_len = arg->n_regs;
>  	regs = xe_oa_alloc_regs(oa, xe_oa_is_valid_config_reg_addr,
> @@ -2144,8 +2138,8 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, u64 data, struct drm_file *fi
>  
>  	/* We shouldn't have too many configs, so this iteration shouldn't be too costly */
>  	idr_for_each_entry(&oa->metrics_idr, tmp, id) {
> -		if (!strcmp(tmp->uuid, oa_config->uuid)) {
> -			drm_dbg(&oa->xe->drm, "OA config already exists with this uuid\n");
> +		if (!strcmp(tmp->name, oa_config->name)) {
> +			drm_dbg(&oa->xe->drm, "OA config already exists with this name\n");
>  			err = -EADDRINUSE;
>  			goto sysfs_err;
>  		}
> @@ -2166,7 +2160,7 @@ int xe_oa_add_config_ioctl(struct drm_device *dev, u64 data, struct drm_file *fi
>  
>  	mutex_unlock(&oa->metrics_lock);
>  
> -	drm_dbg(&oa->xe->drm, "Added config %s id=%i\n", oa_config->uuid, oa_config->id);
> +	drm_dbg(&oa->xe->drm, "Added config %s id=%i\n", oa_config->name, oa_config->id);
>  
>  	return oa_config->id;
>  
> @@ -2224,7 +2218,7 @@ int xe_oa_remove_config_ioctl(struct drm_device *dev, u64 data, struct drm_file
>  
>  	mutex_unlock(&oa->metrics_lock);
>  
> -	drm_dbg(&oa->xe->drm, "Removed config %s id=%i\n", oa_config->uuid, oa_config->id);
> +	drm_dbg(&oa->xe->drm, "Removed config %s id=%i\n", oa_config->name, oa_config->id);
>  
>  	xe_oa_config_put(oa_config);
>  
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 19619d4952a8..43bcae64a7b0 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1637,8 +1637,8 @@ struct drm_xe_oa_config {
>  	/** @extensions: Pointer to the first extension struct, if any */
>  	__u64 extensions;
>  
> -	/** @uuid: String formatted like "%\08x-%\04x-%\04x-%\04x-%\012x" */
> -	char uuid[36];
> +	/** @name: Unique config name/id */
> +	char name[36];
>  
>  	/** @n_regs: Number of regs in @regs_ptr */
>  	__u32 n_regs;
> -- 
> 2.41.0
> 
> 


More information about the Intel-xe mailing list