[PATCH v2] drm/xe/uapi: restructure query config types in an enum

Gustavo Sousa gustavo.sousa at intel.com
Mon Jul 29 12:41:13 UTC 2024


Quoting Ohad Sharabi (2024-07-29 09:15:26-03:00)
>The config query has entries per config type.
>
>In query_config(), an array is allocated using the last element of
>the query config to dictate the array length.
>
>Instead, a more robust approach would be to use the standard "number of
>elements" last element of an enum such that one wouldn't need to modify
>the ioctl each time another entry is added.
>
>v2:
> - modify `enum drm_xe_query_config_type` doc
>
>Signed-off-by: Ohad Sharabi <osharabi at habana.ai>

Reviewed-by: Gustavo Sousa <gustavo.sousa at intel.com>

>---
> drivers/gpu/drm/xe/xe_query.c |  2 +-
> include/uapi/drm/xe_drm.h     | 58 ++++++++++++++++++++++-------------
> 2 files changed, 38 insertions(+), 22 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
>index 73ef6e4c2dc9..aaa60ff764ee 100644
>--- a/drivers/gpu/drm/xe/xe_query.c
>+++ b/drivers/gpu/drm/xe/xe_query.c
>@@ -313,7 +313,7 @@ static int query_mem_regions(struct xe_device *xe,
> 
> static int query_config(struct xe_device *xe, struct drm_xe_device_query *query)
> {
>-        const u32 num_params = DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY + 1;
>+        const u32 num_params = DRM_XE_QUERY_CONFIG_NUM_CONFIGS;
>         size_t size =
>                 sizeof(struct drm_xe_query_config) + num_params * sizeof(u64);
>         struct drm_xe_query_config __user *query_ptr =
>diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
>index 29425d7fdc77..9222563cddc3 100644
>--- a/include/uapi/drm/xe_drm.h
>+++ b/include/uapi/drm/xe_drm.h
>@@ -378,6 +378,42 @@ struct drm_xe_query_mem_regions {
>         struct drm_xe_mem_region mem_regions[];
> };
> 
>+#define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM        (1 << 0)
>+
>+/**
>+ * enum drm_xe_query_config_type - Indices for the supported configs returned
>+ * in &drm_xe_query_config.info array
>+ */
>+enum drm_xe_query_config_type {
>+        /**
>+         * @DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID: Device ID (lower 16 bits)
>+         * and the device revision (next 8 bits).
>+         */
>+        DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID,
>+        /**
>+         * @DRM_XE_QUERY_CONFIG_FLAGS: Flags describing the device
>+         * configuration, see list below.
>+         *
>+         *    - %DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM - Flag is set if the device
>+         *      has usable VRAM
>+         */
>+        DRM_XE_QUERY_CONFIG_FLAGS,
>+        /**
>+         * @DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT: Minimal memory alignment
>+         * required by this device, typically SZ_4K or SZ_64K.
>+         */
>+        DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT,
>+        /** @DRM_XE_QUERY_CONFIG_VA_BITS: Maximum bits of a virtual address. */
>+        DRM_XE_QUERY_CONFIG_VA_BITS,
>+        /**
>+         * @DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY: Value of the highest
>+         * available exec queue priority.
>+         */
>+        DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY,
>+        /** @DRM_XE_QUERY_CONFIG_NUM_CONFIGS: must be last. Number of configs */
>+        DRM_XE_QUERY_CONFIG_NUM_CONFIGS,
>+};
>+
> /**
>  * struct drm_xe_query_config - describe the device configuration
>  *
>@@ -385,33 +421,13 @@ struct drm_xe_query_mem_regions {
>  * is equal to DRM_XE_DEVICE_QUERY_CONFIG, then the reply uses
>  * struct drm_xe_query_config in .data.
>  *
>- * The index in @info can be:
>- *  - %DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID - Device ID (lower 16 bits)
>- *    and the device revision (next 8 bits)
>- *  - %DRM_XE_QUERY_CONFIG_FLAGS - Flags describing the device
>- *    configuration, see list below
>- *
>- *    - %DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM - Flag is set if the device
>- *      has usable VRAM
>- *  - %DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT - Minimal memory alignment
>- *    required by this device, typically SZ_4K or SZ_64K
>- *  - %DRM_XE_QUERY_CONFIG_VA_BITS - Maximum bits of a virtual address
>- *  - %DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY - Value of the highest
>- *    available exec queue priority
>+ * The index in @info are the entries in `enum drm_xe_query_config`
>  */
> struct drm_xe_query_config {
>         /** @num_params: number of parameters returned in info */
>         __u32 num_params;
>-
>         /** @pad: MBZ */
>         __u32 pad;
>-
>-#define DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID        0
>-#define DRM_XE_QUERY_CONFIG_FLAGS                        1
>-        #define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM        (1 << 0)
>-#define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT                2
>-#define DRM_XE_QUERY_CONFIG_VA_BITS                        3
>-#define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY        4
>         /** @info: array of elements containing the config info */
>         __u64 info[];
> };
>-- 
>2.34.1
>


More information about the Intel-xe mailing list