[PATCH v2] drm: introduce a capability flag for syncobj timeline support

Zhou, David(ChunMing) David1.Zhou at amd.com
Tue Apr 16 13:15:03 UTC 2019


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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20190416/12c14a42/attachment-0001.html>


More information about the dri-devel mailing list