[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