[PATCH v2] drm: introduce a capability flag for syncobj timeline support
Christian König
ckoenig.leichtzumerken at gmail.com
Tue Apr 16 13:47:16 UTC 2019
I can't judge if that UAPI is actually sufficient, but the rest still
looks good to me.
Acked-by: Christian König <christian.koenig at amd.com>
Christian.
Am 16.04.19 um 15:15 schrieb Zhou, David(ChunMing):
> Reviewed-by: Chunming Zhou <david1.zhou at amd.com> for series.
>
> -------- Original Message --------
> Subject: [PATCH v2] drm: introduce a capability flag for syncobj
> timeline support
> From: Lionel Landwerlin
> To: dri-devel at lists.freedesktop.org
> CC: Lionel Landwerlin ,"Koenig, Christian" ,Dave Airlie ,Daniel Vetter
> ,"Zhou, David(ChunMing)"
>
> Unfortunately userspace users of this API cannot be publicly disclosed
> yet.
>
> This commit effectively disables timeline syncobj ioctls for all
> drivers. Each driver wishing to support this feature will need to
> expose DRIVER_SYNCOBJ_TIMELINE.
>
> v2: Add uAPI capability check (Christian)
>
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> Reviewed-by: Christian König <christian.koenig at amd.com> (v1)
> Cc: Dave Airlie <airlied at redhat.com>
> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
> Cc: Christian König <christian.koenig at amd.com>
> Cc: Chunming Zhou <david1.zhou at amd.com>
> ---
> drivers/gpu/drm/drm_ioctl.c | 3 +++
> drivers/gpu/drm/drm_syncobj.c | 10 +++++-----
> include/drm/drm_drv.h | 7 +++++++
> include/uapi/drm/drm.h | 1 +
> 4 files changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> index d337f161909c..15ca94338d55 100644
> --- a/drivers/gpu/drm/drm_ioctl.c
> +++ b/drivers/gpu/drm/drm_ioctl.c
> @@ -245,6 +245,9 @@ static int drm_getcap(struct drm_device *dev, void
> *data, struct drm_file *file_
> case DRM_CAP_SYNCOBJ:
> req->value = drm_core_check_feature(dev, DRIVER_SYNCOBJ);
> return 0;
> + case DRM_CAP_SYNCOBJ_TIMELINE:
> + req->value = drm_core_check_feature(dev,
> DRIVER_SYNCOBJ_TIMELINE);
> + return 0;
> }
>
> /* Other caps only work with KMS drivers */
> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> index fb65f13d25cf..72a38ff6e3e4 100644
> --- a/drivers/gpu/drm/drm_syncobj.c
> +++ b/drivers/gpu/drm/drm_syncobj.c
> @@ -755,7 +755,7 @@ drm_syncobj_transfer_ioctl(struct drm_device *dev,
> void *data,
> struct drm_syncobj_transfer *args = data;
> int ret;
>
> - if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
> + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> return -EOPNOTSUPP;
>
> if (args->pad)
> @@ -1106,7 +1106,7 @@ drm_syncobj_timeline_wait_ioctl(struct
> drm_device *dev, void *data,
> struct drm_syncobj **syncobjs;
> int ret = 0;
>
> - if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
> + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> return -EOPNOTSUPP;
>
> if (args->flags & ~(DRM_SYNCOBJ_WAIT_FLAGS_WAIT_ALL |
> @@ -1210,7 +1210,7 @@ drm_syncobj_timeline_signal_ioctl(struct
> drm_device *dev, void *data,
> uint32_t i, j;
> int ret;
>
> - if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
> + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> return -EOPNOTSUPP;
>
> if (args->pad != 0)
> @@ -1281,8 +1281,8 @@ int drm_syncobj_query_ioctl(struct drm_device
> *dev, void *data,
> uint32_t i;
> int ret;
>
> - if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
> - return -ENODEV;
> + if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> + return -EOPNOTSUPP;
>
> if (args->pad != 0)
> return -EINVAL;
> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
> index 5cc7f728ec73..68ca736c548d 100644
> --- a/include/drm/drm_drv.h
> +++ b/include/drm/drm_drv.h
> @@ -91,6 +91,13 @@ enum drm_driver_feature {
> * submission.
> */
> DRIVER_SYNCOBJ = BIT(5),
> + /**
> + * @DRIVER_SYNCOBJ_TIMELINE:
> + *
> + * Driver supports the timeline flavor of &drm_syncobj for
> explicit
> + * synchronization of command submission.
> + */
> + DRIVER_SYNCOBJ_TIMELINE = BIT(6),
>
> /* IMPORTANT: Below are all the legacy flags, add new ones
> above. */
>
> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> index 236b01a1fabf..661d73f9a919 100644
> --- a/include/uapi/drm/drm.h
> +++ b/include/uapi/drm/drm.h
> @@ -649,6 +649,7 @@ struct drm_gem_open {
> #define DRM_CAP_PAGE_FLIP_TARGET 0x11
> #define DRM_CAP_CRTC_IN_VBLANK_EVENT 0x12
> #define DRM_CAP_SYNCOBJ 0x13
> +#define DRM_CAP_SYNCOBJ_TIMELINE 0x14
>
> /** DRM_IOCTL_GET_CAP ioctl argument type */
> struct drm_get_cap {
> --
> 2.21.0.392.gf8f6787159e
>
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20190416/de28d774/attachment.html>
More information about the dri-devel
mailing list