* [PATCH v2 0/2] drm/panthor: Expose realtime group priority and allowed priorites to userspace @ 2024-09-05 17:32 Mary Guillemard 2024-09-05 17:32 ` [PATCH v2 1/2] drm/panthor: Add PANTHOR_GROUP_PRIORITY_REALTIME group priority Mary Guillemard 2024-09-05 17:32 ` [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query Mary Guillemard 0 siblings, 2 replies; 6+ messages in thread From: Mary Guillemard @ 2024-09-05 17:32 UTC (permalink / raw) To: linux-kernel Cc: dri-devel, Boris Brezillon, Christopher Healy, kernel, Mary Guillemard This patch series adds support for realtime group priority and exposes allowed priorities info with a new dev query. Those changes are required to implement EGL_IMG_context_priority and EGL_NV_context_priority_realtime extensions properly. This patch series assumes that [1] is applied. (found in drm-misc-fixes) The Mesa MR using this series is available here [2]. v2: - Add Steven Price r-b on the first patch - Remove drm_panthor_group_allow_priority_flags definition and document that allowed_mask is a bitmask of drm_panthor_group_priority on the second patch [1]https://lore.kernel.org/all/20240903144955.144278-2-mary.guillemard@collabora.com/ [2]https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30991 Mary Guillemard (2): drm/panthor: Add PANTHOR_GROUP_PRIORITY_REALTIME group priority drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query drivers/gpu/drm/panthor/panthor_drv.c | 61 +++++++++++++++++-------- drivers/gpu/drm/panthor/panthor_sched.c | 2 - include/uapi/drm/panthor_drm.h | 29 ++++++++++++ 3 files changed, 71 insertions(+), 21 deletions(-) -- 2.46.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] drm/panthor: Add PANTHOR_GROUP_PRIORITY_REALTIME group priority 2024-09-05 17:32 [PATCH v2 0/2] drm/panthor: Expose realtime group priority and allowed priorites to userspace Mary Guillemard @ 2024-09-05 17:32 ` Mary Guillemard 2024-09-06 6:13 ` Boris Brezillon 2024-09-05 17:32 ` [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query Mary Guillemard 1 sibling, 1 reply; 6+ messages in thread From: Mary Guillemard @ 2024-09-05 17:32 UTC (permalink / raw) To: linux-kernel Cc: dri-devel, Boris Brezillon, Christopher Healy, kernel, Mary Guillemard, Steven Price, Liviu Dudau, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter This adds a new value to drm_panthor_group_priority exposing the realtime priority to userspace. This is required to implement NV_context_priority_realtime in Mesa. v2: - Add Steven Price r-b Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> Reviewed-by: Steven Price <steven.price@arm.com> --- drivers/gpu/drm/panthor/panthor_drv.c | 2 +- drivers/gpu/drm/panthor/panthor_sched.c | 2 -- include/uapi/drm/panthor_drm.h | 7 +++++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c index 0caf9e9a8c45..7b1db2adcb4c 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -1041,7 +1041,7 @@ static int group_priority_permit(struct drm_file *file, u8 priority) { /* Ensure that priority is valid */ - if (priority > PANTHOR_GROUP_PRIORITY_HIGH) + if (priority > PANTHOR_GROUP_PRIORITY_REALTIME) return -EINVAL; /* Medium priority and below are always allowed */ diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c index 91a31b70c037..86908ada7335 100644 --- a/drivers/gpu/drm/panthor/panthor_sched.c +++ b/drivers/gpu/drm/panthor/panthor_sched.c @@ -137,8 +137,6 @@ enum panthor_csg_priority { * non-real-time groups. When such a group becomes executable, * it will evict the group with the lowest non-rt priority if * there's no free group slot available. - * - * Currently not exposed to userspace. */ PANTHOR_CSG_PRIORITY_RT, diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h index 1fd8473548ac..011a555e4674 100644 --- a/include/uapi/drm/panthor_drm.h +++ b/include/uapi/drm/panthor_drm.h @@ -720,6 +720,13 @@ enum drm_panthor_group_priority { * Requires CAP_SYS_NICE or DRM_MASTER. */ PANTHOR_GROUP_PRIORITY_HIGH, + + /** + * @PANTHOR_GROUP_PRIORITY_REALTIME: Realtime priority group. + * + * Requires CAP_SYS_NICE or DRM_MASTER. + */ + PANTHOR_GROUP_PRIORITY_REALTIME, }; /** -- 2.46.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] drm/panthor: Add PANTHOR_GROUP_PRIORITY_REALTIME group priority 2024-09-05 17:32 ` [PATCH v2 1/2] drm/panthor: Add PANTHOR_GROUP_PRIORITY_REALTIME group priority Mary Guillemard @ 2024-09-06 6:13 ` Boris Brezillon 0 siblings, 0 replies; 6+ messages in thread From: Boris Brezillon @ 2024-09-06 6:13 UTC (permalink / raw) To: Mary Guillemard Cc: linux-kernel, dri-devel, Christopher Healy, kernel, Steven Price, Liviu Dudau, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter On Thu, 5 Sep 2024 19:32:22 +0200 Mary Guillemard <mary.guillemard@collabora.com> wrote: > This adds a new value to drm_panthor_group_priority exposing the > realtime priority to userspace. > > This is required to implement NV_context_priority_realtime in Mesa. > > v2: > - Add Steven Price r-b > > Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> > Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> > --- > drivers/gpu/drm/panthor/panthor_drv.c | 2 +- > drivers/gpu/drm/panthor/panthor_sched.c | 2 -- > include/uapi/drm/panthor_drm.h | 7 +++++++ > 3 files changed, 8 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c > index 0caf9e9a8c45..7b1db2adcb4c 100644 > --- a/drivers/gpu/drm/panthor/panthor_drv.c > +++ b/drivers/gpu/drm/panthor/panthor_drv.c > @@ -1041,7 +1041,7 @@ static int group_priority_permit(struct drm_file *file, > u8 priority) > { > /* Ensure that priority is valid */ > - if (priority > PANTHOR_GROUP_PRIORITY_HIGH) > + if (priority > PANTHOR_GROUP_PRIORITY_REALTIME) > return -EINVAL; > > /* Medium priority and below are always allowed */ > diff --git a/drivers/gpu/drm/panthor/panthor_sched.c b/drivers/gpu/drm/panthor/panthor_sched.c > index 91a31b70c037..86908ada7335 100644 > --- a/drivers/gpu/drm/panthor/panthor_sched.c > +++ b/drivers/gpu/drm/panthor/panthor_sched.c > @@ -137,8 +137,6 @@ enum panthor_csg_priority { > * non-real-time groups. When such a group becomes executable, > * it will evict the group with the lowest non-rt priority if > * there's no free group slot available. > - * > - * Currently not exposed to userspace. > */ > PANTHOR_CSG_PRIORITY_RT, > > diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h > index 1fd8473548ac..011a555e4674 100644 > --- a/include/uapi/drm/panthor_drm.h > +++ b/include/uapi/drm/panthor_drm.h > @@ -720,6 +720,13 @@ enum drm_panthor_group_priority { > * Requires CAP_SYS_NICE or DRM_MASTER. > */ > PANTHOR_GROUP_PRIORITY_HIGH, > + > + /** > + * @PANTHOR_GROUP_PRIORITY_REALTIME: Realtime priority group. > + * > + * Requires CAP_SYS_NICE or DRM_MASTER. > + */ > + PANTHOR_GROUP_PRIORITY_REALTIME, > }; > > /** ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query 2024-09-05 17:32 [PATCH v2 0/2] drm/panthor: Expose realtime group priority and allowed priorites to userspace Mary Guillemard 2024-09-05 17:32 ` [PATCH v2 1/2] drm/panthor: Add PANTHOR_GROUP_PRIORITY_REALTIME group priority Mary Guillemard @ 2024-09-05 17:32 ` Mary Guillemard 2024-09-06 6:12 ` Boris Brezillon 2024-09-06 10:22 ` Steven Price 1 sibling, 2 replies; 6+ messages in thread From: Mary Guillemard @ 2024-09-05 17:32 UTC (permalink / raw) To: linux-kernel Cc: dri-devel, Boris Brezillon, Christopher Healy, kernel, Mary Guillemard, Steven Price, Liviu Dudau, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter Expose allowed group priorities with a new device query. This new uAPI will be used in Mesa to properly report what priorities a user can use for EGL_IMG_context_priority. Since this extends the uAPI and because userland needs a way to advertise priorities accordingly, this also bumps the driver minor version. v2: - Remove drm_panthor_group_allow_priority_flags definition - Document that allowed_mask is a bitmask of drm_panthor_group_priority Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> --- drivers/gpu/drm/panthor/panthor_drv.c | 61 ++++++++++++++++++--------- include/uapi/drm/panthor_drm.h | 22 ++++++++++ 2 files changed, 64 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c index 7b1db2adcb4c..f85aa2d99f09 100644 --- a/drivers/gpu/drm/panthor/panthor_drv.c +++ b/drivers/gpu/drm/panthor/panthor_drv.c @@ -170,6 +170,7 @@ panthor_get_uobj_array(const struct drm_panthor_obj_array *in, u32 min_stride, PANTHOR_UOBJ_DECL(struct drm_panthor_gpu_info, tiler_present), \ PANTHOR_UOBJ_DECL(struct drm_panthor_csif_info, pad), \ PANTHOR_UOBJ_DECL(struct drm_panthor_timestamp_info, current_timestamp), \ + PANTHOR_UOBJ_DECL(struct drm_panthor_group_priorities_info, pad), \ PANTHOR_UOBJ_DECL(struct drm_panthor_sync_op, timeline_value), \ PANTHOR_UOBJ_DECL(struct drm_panthor_queue_submit, syncs), \ PANTHOR_UOBJ_DECL(struct drm_panthor_queue_create, ringbuf_size), \ @@ -777,11 +778,41 @@ static int panthor_query_timestamp_info(struct panthor_device *ptdev, return 0; } +static int group_priority_permit(struct drm_file *file, + u8 priority) +{ + /* Ensure that priority is valid */ + if (priority > PANTHOR_GROUP_PRIORITY_REALTIME) + return -EINVAL; + + /* Medium priority and below are always allowed */ + if (priority <= PANTHOR_GROUP_PRIORITY_MEDIUM) + return 0; + + /* Higher priorities require CAP_SYS_NICE or DRM_MASTER */ + if (capable(CAP_SYS_NICE) || drm_is_current_master(file)) + return 0; + + return -EACCES; +} + +static void panthor_query_group_priorities_info(struct drm_file *file, + struct drm_panthor_group_priorities_info *arg) +{ + int prio; + + for (prio = PANTHOR_GROUP_PRIORITY_REALTIME; prio >= 0; prio--) { + if (!group_priority_permit(file, prio)) + arg->allowed_mask |= 1 << prio; + } +} + static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct drm_file *file) { struct panthor_device *ptdev = container_of(ddev, struct panthor_device, base); struct drm_panthor_dev_query *args = data; struct drm_panthor_timestamp_info timestamp_info; + struct drm_panthor_group_priorities_info priorities_info; int ret; if (!args->pointer) { @@ -798,6 +829,10 @@ static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct d args->size = sizeof(timestamp_info); return 0; + case DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO: + args->size = sizeof(priorities_info); + return 0; + default: return -EINVAL; } @@ -818,6 +853,10 @@ static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct d return PANTHOR_UOBJ_SET(args->pointer, args->size, timestamp_info); + case DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO: + panthor_query_group_priorities_info(file, &priorities_info); + return PANTHOR_UOBJ_SET(args->pointer, args->size, priorities_info); + default: return -EINVAL; } @@ -1037,24 +1076,6 @@ static int panthor_ioctl_group_destroy(struct drm_device *ddev, void *data, return panthor_group_destroy(pfile, args->group_handle); } -static int group_priority_permit(struct drm_file *file, - u8 priority) -{ - /* Ensure that priority is valid */ - if (priority > PANTHOR_GROUP_PRIORITY_REALTIME) - return -EINVAL; - - /* Medium priority and below are always allowed */ - if (priority <= PANTHOR_GROUP_PRIORITY_MEDIUM) - return 0; - - /* Higher priorities require CAP_SYS_NICE or DRM_MASTER */ - if (capable(CAP_SYS_NICE) || drm_is_current_master(file)) - return 0; - - return -EACCES; -} - static int panthor_ioctl_group_create(struct drm_device *ddev, void *data, struct drm_file *file) { @@ -1436,6 +1457,8 @@ static void panthor_debugfs_init(struct drm_minor *minor) * PanCSF driver version: * - 1.0 - initial interface * - 1.1 - adds DEV_QUERY_TIMESTAMP_INFO query + * - 1.2 - adds DEV_QUERY_GROUP_PRIORITIES_INFO query + * - adds PANTHOR_GROUP_PRIORITY_REALTIME priority */ static const struct drm_driver panthor_drm_driver = { .driver_features = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ | @@ -1449,7 +1472,7 @@ static const struct drm_driver panthor_drm_driver = { .desc = "Panthor DRM driver", .date = "20230801", .major = 1, - .minor = 1, + .minor = 2, .gem_create_object = panthor_gem_create_object, .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table, diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h index 011a555e4674..87c9cb555dd1 100644 --- a/include/uapi/drm/panthor_drm.h +++ b/include/uapi/drm/panthor_drm.h @@ -263,6 +263,11 @@ enum drm_panthor_dev_query_type { /** @DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: Query timestamp information. */ DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO, + + /** + * @DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO: Query allowed group priorities information. + */ + DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO, }; /** @@ -399,6 +404,23 @@ struct drm_panthor_timestamp_info { __u64 timestamp_offset; }; +/** + * struct drm_panthor_group_priorities_info - Group priorities information + * + * Structure grouping all queryable information relating to the allowed group priorities. + */ +struct drm_panthor_group_priorities_info { + /** + * @allowed_mask: Bitmask of the allowed group priorities. + * + * Each bit represents a variant of the enum drm_panthor_group_priority. + */ + __u8 allowed_mask; + + /** @pad: Padding fields, MBZ. */ + __u8 pad[3]; +}; + /** * struct drm_panthor_dev_query - Arguments passed to DRM_PANTHOR_IOCTL_DEV_QUERY */ -- 2.46.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query 2024-09-05 17:32 ` [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query Mary Guillemard @ 2024-09-06 6:12 ` Boris Brezillon 2024-09-06 10:22 ` Steven Price 1 sibling, 0 replies; 6+ messages in thread From: Boris Brezillon @ 2024-09-06 6:12 UTC (permalink / raw) To: Mary Guillemard Cc: linux-kernel, dri-devel, Christopher Healy, kernel, Steven Price, Liviu Dudau, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter On Thu, 5 Sep 2024 19:32:23 +0200 Mary Guillemard <mary.guillemard@collabora.com> wrote: > Expose allowed group priorities with a new device query. > > This new uAPI will be used in Mesa to properly report what priorities a > user can use for EGL_IMG_context_priority. > > Since this extends the uAPI and because userland needs a way to > advertise priorities accordingly, this also bumps the driver minor > version. > > v2: > - Remove drm_panthor_group_allow_priority_flags definition > - Document that allowed_mask is a bitmask of drm_panthor_group_priority > > Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> > --- > drivers/gpu/drm/panthor/panthor_drv.c | 61 ++++++++++++++++++--------- > include/uapi/drm/panthor_drm.h | 22 ++++++++++ > 2 files changed, 64 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c > index 7b1db2adcb4c..f85aa2d99f09 100644 > --- a/drivers/gpu/drm/panthor/panthor_drv.c > +++ b/drivers/gpu/drm/panthor/panthor_drv.c > @@ -170,6 +170,7 @@ panthor_get_uobj_array(const struct drm_panthor_obj_array *in, u32 min_stride, > PANTHOR_UOBJ_DECL(struct drm_panthor_gpu_info, tiler_present), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_csif_info, pad), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_timestamp_info, current_timestamp), \ > + PANTHOR_UOBJ_DECL(struct drm_panthor_group_priorities_info, pad), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_sync_op, timeline_value), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_queue_submit, syncs), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_queue_create, ringbuf_size), \ > @@ -777,11 +778,41 @@ static int panthor_query_timestamp_info(struct panthor_device *ptdev, > return 0; > } > > +static int group_priority_permit(struct drm_file *file, > + u8 priority) > +{ > + /* Ensure that priority is valid */ > + if (priority > PANTHOR_GROUP_PRIORITY_REALTIME) > + return -EINVAL; > + > + /* Medium priority and below are always allowed */ > + if (priority <= PANTHOR_GROUP_PRIORITY_MEDIUM) > + return 0; > + > + /* Higher priorities require CAP_SYS_NICE or DRM_MASTER */ > + if (capable(CAP_SYS_NICE) || drm_is_current_master(file)) > + return 0; > + > + return -EACCES; > +} > + > +static void panthor_query_group_priorities_info(struct drm_file *file, > + struct drm_panthor_group_priorities_info *arg) > +{ > + int prio; > + > + for (prio = PANTHOR_GROUP_PRIORITY_REALTIME; prio >= 0; prio--) { > + if (!group_priority_permit(file, prio)) > + arg->allowed_mask |= 1 << prio; nit: we have a BIT() macro for that ;-). Other than that, it looks good to me. Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query 2024-09-05 17:32 ` [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query Mary Guillemard 2024-09-06 6:12 ` Boris Brezillon @ 2024-09-06 10:22 ` Steven Price 1 sibling, 0 replies; 6+ messages in thread From: Steven Price @ 2024-09-06 10:22 UTC (permalink / raw) To: Mary Guillemard, linux-kernel Cc: dri-devel, Boris Brezillon, Christopher Healy, kernel, Liviu Dudau, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann, David Airlie, Daniel Vetter On 05/09/2024 18:32, Mary Guillemard wrote: > Expose allowed group priorities with a new device query. > > This new uAPI will be used in Mesa to properly report what priorities a > user can use for EGL_IMG_context_priority. > > Since this extends the uAPI and because userland needs a way to > advertise priorities accordingly, this also bumps the driver minor > version. > > v2: > - Remove drm_panthor_group_allow_priority_flags definition > - Document that allowed_mask is a bitmask of drm_panthor_group_priority > > Signed-off-by: Mary Guillemard <mary.guillemard@collabora.com> With Boris' BIT() macro change: Reviewed-by: Steven Price <steven.price@arm.com> Thanks, Steve > --- > drivers/gpu/drm/panthor/panthor_drv.c | 61 ++++++++++++++++++--------- > include/uapi/drm/panthor_drm.h | 22 ++++++++++ > 2 files changed, 64 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/panthor/panthor_drv.c b/drivers/gpu/drm/panthor/panthor_drv.c > index 7b1db2adcb4c..f85aa2d99f09 100644 > --- a/drivers/gpu/drm/panthor/panthor_drv.c > +++ b/drivers/gpu/drm/panthor/panthor_drv.c > @@ -170,6 +170,7 @@ panthor_get_uobj_array(const struct drm_panthor_obj_array *in, u32 min_stride, > PANTHOR_UOBJ_DECL(struct drm_panthor_gpu_info, tiler_present), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_csif_info, pad), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_timestamp_info, current_timestamp), \ > + PANTHOR_UOBJ_DECL(struct drm_panthor_group_priorities_info, pad), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_sync_op, timeline_value), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_queue_submit, syncs), \ > PANTHOR_UOBJ_DECL(struct drm_panthor_queue_create, ringbuf_size), \ > @@ -777,11 +778,41 @@ static int panthor_query_timestamp_info(struct panthor_device *ptdev, > return 0; > } > > +static int group_priority_permit(struct drm_file *file, > + u8 priority) > +{ > + /* Ensure that priority is valid */ > + if (priority > PANTHOR_GROUP_PRIORITY_REALTIME) > + return -EINVAL; > + > + /* Medium priority and below are always allowed */ > + if (priority <= PANTHOR_GROUP_PRIORITY_MEDIUM) > + return 0; > + > + /* Higher priorities require CAP_SYS_NICE or DRM_MASTER */ > + if (capable(CAP_SYS_NICE) || drm_is_current_master(file)) > + return 0; > + > + return -EACCES; > +} > + > +static void panthor_query_group_priorities_info(struct drm_file *file, > + struct drm_panthor_group_priorities_info *arg) > +{ > + int prio; > + > + for (prio = PANTHOR_GROUP_PRIORITY_REALTIME; prio >= 0; prio--) { > + if (!group_priority_permit(file, prio)) > + arg->allowed_mask |= 1 << prio; > + } > +} > + > static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct drm_file *file) > { > struct panthor_device *ptdev = container_of(ddev, struct panthor_device, base); > struct drm_panthor_dev_query *args = data; > struct drm_panthor_timestamp_info timestamp_info; > + struct drm_panthor_group_priorities_info priorities_info; > int ret; > > if (!args->pointer) { > @@ -798,6 +829,10 @@ static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct d > args->size = sizeof(timestamp_info); > return 0; > > + case DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO: > + args->size = sizeof(priorities_info); > + return 0; > + > default: > return -EINVAL; > } > @@ -818,6 +853,10 @@ static int panthor_ioctl_dev_query(struct drm_device *ddev, void *data, struct d > > return PANTHOR_UOBJ_SET(args->pointer, args->size, timestamp_info); > > + case DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO: > + panthor_query_group_priorities_info(file, &priorities_info); > + return PANTHOR_UOBJ_SET(args->pointer, args->size, priorities_info); > + > default: > return -EINVAL; > } > @@ -1037,24 +1076,6 @@ static int panthor_ioctl_group_destroy(struct drm_device *ddev, void *data, > return panthor_group_destroy(pfile, args->group_handle); > } > > -static int group_priority_permit(struct drm_file *file, > - u8 priority) > -{ > - /* Ensure that priority is valid */ > - if (priority > PANTHOR_GROUP_PRIORITY_REALTIME) > - return -EINVAL; > - > - /* Medium priority and below are always allowed */ > - if (priority <= PANTHOR_GROUP_PRIORITY_MEDIUM) > - return 0; > - > - /* Higher priorities require CAP_SYS_NICE or DRM_MASTER */ > - if (capable(CAP_SYS_NICE) || drm_is_current_master(file)) > - return 0; > - > - return -EACCES; > -} > - > static int panthor_ioctl_group_create(struct drm_device *ddev, void *data, > struct drm_file *file) > { > @@ -1436,6 +1457,8 @@ static void panthor_debugfs_init(struct drm_minor *minor) > * PanCSF driver version: > * - 1.0 - initial interface > * - 1.1 - adds DEV_QUERY_TIMESTAMP_INFO query > + * - 1.2 - adds DEV_QUERY_GROUP_PRIORITIES_INFO query > + * - adds PANTHOR_GROUP_PRIORITY_REALTIME priority > */ > static const struct drm_driver panthor_drm_driver = { > .driver_features = DRIVER_RENDER | DRIVER_GEM | DRIVER_SYNCOBJ | > @@ -1449,7 +1472,7 @@ static const struct drm_driver panthor_drm_driver = { > .desc = "Panthor DRM driver", > .date = "20230801", > .major = 1, > - .minor = 1, > + .minor = 2, > > .gem_create_object = panthor_gem_create_object, > .gem_prime_import_sg_table = drm_gem_shmem_prime_import_sg_table, > diff --git a/include/uapi/drm/panthor_drm.h b/include/uapi/drm/panthor_drm.h > index 011a555e4674..87c9cb555dd1 100644 > --- a/include/uapi/drm/panthor_drm.h > +++ b/include/uapi/drm/panthor_drm.h > @@ -263,6 +263,11 @@ enum drm_panthor_dev_query_type { > > /** @DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO: Query timestamp information. */ > DRM_PANTHOR_DEV_QUERY_TIMESTAMP_INFO, > + > + /** > + * @DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO: Query allowed group priorities information. > + */ > + DRM_PANTHOR_DEV_QUERY_GROUP_PRIORITIES_INFO, > }; > > /** > @@ -399,6 +404,23 @@ struct drm_panthor_timestamp_info { > __u64 timestamp_offset; > }; > > +/** > + * struct drm_panthor_group_priorities_info - Group priorities information > + * > + * Structure grouping all queryable information relating to the allowed group priorities. > + */ > +struct drm_panthor_group_priorities_info { > + /** > + * @allowed_mask: Bitmask of the allowed group priorities. > + * > + * Each bit represents a variant of the enum drm_panthor_group_priority. > + */ > + __u8 allowed_mask; > + > + /** @pad: Padding fields, MBZ. */ > + __u8 pad[3]; > +}; > + > /** > * struct drm_panthor_dev_query - Arguments passed to DRM_PANTHOR_IOCTL_DEV_QUERY > */ ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-09-06 10:22 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-09-05 17:32 [PATCH v2 0/2] drm/panthor: Expose realtime group priority and allowed priorites to userspace Mary Guillemard 2024-09-05 17:32 ` [PATCH v2 1/2] drm/panthor: Add PANTHOR_GROUP_PRIORITY_REALTIME group priority Mary Guillemard 2024-09-06 6:13 ` Boris Brezillon 2024-09-05 17:32 ` [PATCH v2 2/2] drm/panthor: Add DEV_QUERY_GROUP_PRIORITIES_INFO dev query Mary Guillemard 2024-09-06 6:12 ` Boris Brezillon 2024-09-06 10:22 ` Steven Price
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.