[Intel-xe] [PATCH] drm/xe: Add max engine priority to xe query
Matthew Brost
matthew.brost at intel.com
Thu Mar 23 22:42:16 UTC 2023
On Thu, Mar 23, 2023 at 02:13:22PM -0700, José Roberto de Souza wrote:
> Intel Vulkan driver needs to know what is the maximum priority to fill
> a device info struct for applications.
>
> Right now we getting this information by creating a engine and setting
> priorities from min to high to know what is the maximum priority for
> running process but this leads to info messages to be printed to
> dmesg:
>
> xe 0000:03:00.0: [drm] Ioctl argument check failed at drivers/gpu/drm/xe/xe_engine.c:178: value == DRM_SCHED_PRIORITY_HIGH && !capable(CAP_SYS_NICE)
>
> It does not cause any harm but when executing a test suite like
> crucible it causes thousands of those messages to be printed.
>
> So here adding one more property to drm_xe_query_config to fetch the
> max engine priority.
>
> Cc: Matthew Brost <matthew.brost at intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
Reviewed-by: Matthew Brost <matthew.brost at intel.com>
> ---
> drivers/gpu/drm/xe/xe_engine.c | 10 ++++++++--
> drivers/gpu/drm/xe/xe_engine.h | 1 +
> drivers/gpu/drm/xe/xe_query.c | 3 +++
> include/uapi/drm/xe_drm.h | 3 ++-
> 4 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_engine.c b/drivers/gpu/drm/xe/xe_engine.c
> index a4fc5afdf6883..37209b13bcd6b 100644
> --- a/drivers/gpu/drm/xe/xe_engine.c
> +++ b/drivers/gpu/drm/xe/xe_engine.c
> @@ -169,14 +169,20 @@ struct xe_engine *xe_engine_lookup(struct xe_file *xef, u32 id)
> return e;
> }
>
> +enum drm_sched_priority
> +xe_engine_device_get_max_priority(struct xe_device *xe)
> +{
> + return capable(CAP_SYS_NICE) ? DRM_SCHED_PRIORITY_HIGH :
> + DRM_SCHED_PRIORITY_NORMAL;
> +}
> +
> static int engine_set_priority(struct xe_device *xe, struct xe_engine *e,
> u64 value, bool create)
> {
> if (XE_IOCTL_ERR(xe, value > DRM_SCHED_PRIORITY_HIGH))
> return -EINVAL;
>
> - if (XE_IOCTL_ERR(xe, value == DRM_SCHED_PRIORITY_HIGH &&
> - !capable(CAP_SYS_NICE)))
> + if (XE_IOCTL_ERR(xe, value > xe_engine_device_get_max_priority(xe)))
> return -EPERM;
>
> return e->ops->set_priority(e, value);
> diff --git a/drivers/gpu/drm/xe/xe_engine.h b/drivers/gpu/drm/xe/xe_engine.h
> index 1cf7f23c4afd6..a49cf2ab405eb 100644
> --- a/drivers/gpu/drm/xe/xe_engine.h
> +++ b/drivers/gpu/drm/xe/xe_engine.h
> @@ -54,5 +54,6 @@ int xe_engine_set_property_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file);
> int xe_engine_get_property_ioctl(struct drm_device *dev, void *data,
> struct drm_file *file);
> +enum drm_sched_priority xe_engine_device_get_max_priority(struct xe_device *xe);
>
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index 0f70945176f60..dd64ff0d2a575 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -12,6 +12,7 @@
>
> #include "xe_bo.h"
> #include "xe_device.h"
> +#include "xe_engine.h"
> #include "xe_ggtt.h"
> #include "xe_gt.h"
> #include "xe_guc_hwconfig.h"
> @@ -194,6 +195,8 @@ static int query_config(struct xe_device *xe, struct drm_xe_device_query *query)
> config->info[XE_QUERY_CONFIG_GT_COUNT] = xe->info.tile_count;
> config->info[XE_QUERY_CONFIG_MEM_REGION_COUNT] =
> hweight_long(xe->info.mem_region_mask);
> + config->info[XE_QUERY_CONFIG_MAX_ENGINE_PRIORITY] =
> + xe_engine_device_get_max_priority(xe);
>
> if (copy_to_user(query_ptr, config, size)) {
> kfree(config);
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 661d7929210c5..b0b80aae3ee88 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -184,7 +184,8 @@ struct drm_xe_query_config {
> #define XE_QUERY_CONFIG_VA_BITS 3
> #define XE_QUERY_CONFIG_GT_COUNT 4
> #define XE_QUERY_CONFIG_MEM_REGION_COUNT 5
> -#define XE_QUERY_CONFIG_NUM_PARAM XE_QUERY_CONFIG_MEM_REGION_COUNT + 1
> +#define XE_QUERY_CONFIG_MAX_ENGINE_PRIORITY 6
> +#define XE_QUERY_CONFIG_NUM_PARAM XE_QUERY_CONFIG_MAX_ENGINE_PRIORITY + 1
> __u64 info[];
> };
>
> --
> 2.40.0
>
More information about the Intel-xe
mailing list