All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chunming Zhou <david1.zhou@amd.com>
To: dri-devel@lists.freedesktop.org
Cc: amd-gfx@lists.freedesktop.org
Subject: [PATCH 4/7] drm: add timeline syncobj payload query ioctl v2
Date: Mon, 15 Oct 2018 16:55:50 +0800	[thread overview]
Message-ID: <20181015085553.30656-4-david1.zhou@amd.com> (raw)
In-Reply-To: <20181015085553.30656-1-david1.zhou@amd.com>

user mode can query timeline payload.
v2: check return value of copy_to_user

Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
---
 drivers/gpu/drm/drm_internal.h |  2 ++
 drivers/gpu/drm/drm_ioctl.c    |  2 ++
 drivers/gpu/drm/drm_syncobj.c  | 52 ++++++++++++++++++++++++++++++++++
 include/uapi/drm/drm.h         | 11 +++++++
 4 files changed, 67 insertions(+)

diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h
index 566d44e3c782..9c4826411a3c 100644
--- a/drivers/gpu/drm/drm_internal.h
+++ b/drivers/gpu/drm/drm_internal.h
@@ -189,6 +189,8 @@ int drm_syncobj_reset_ioctl(struct drm_device *dev, void *data,
 			    struct drm_file *file_private);
 int drm_syncobj_signal_ioctl(struct drm_device *dev, void *data,
 			     struct drm_file *file_private);
+int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
+			    struct drm_file *file_private);
 
 /* drm_framebuffer.c */
 void drm_framebuffer_print_info(struct drm_printer *p, unsigned int indent,
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index c0891614f516..c3c0617e6372 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -675,6 +675,8 @@ static const struct drm_ioctl_desc drm_ioctls[] = {
 		      DRM_UNLOCKED|DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_SIGNAL, drm_syncobj_signal_ioctl,
 		      DRM_UNLOCKED|DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_QUERY, drm_syncobj_query_ioctl,
+		      DRM_UNLOCKED|DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_CRTC_GET_SEQUENCE, drm_crtc_get_sequence_ioctl, DRM_UNLOCKED),
 	DRM_IOCTL_DEF(DRM_IOCTL_CRTC_QUEUE_SEQUENCE, drm_crtc_queue_sequence_ioctl, DRM_UNLOCKED),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_LEASE, drm_mode_create_lease_ioctl, DRM_MASTER|DRM_UNLOCKED),
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index f3f11ac2ef28..17124d40532f 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -1304,3 +1304,55 @@ drm_syncobj_signal_ioctl(struct drm_device *dev, void *data,
 
 	return ret;
 }
+
+static void drm_syncobj_timeline_query_payload(struct drm_syncobj *syncobj,
+					       uint64_t *point)
+{
+	if (syncobj->type != DRM_SYNCOBJ_TYPE_TIMELINE) {
+		DRM_ERROR("Normal syncobj cann't be queried!");
+		*point = 0;
+		return;
+	}
+	*point = syncobj->signal_point;
+}
+
+int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
+			    struct drm_file *file_private)
+{
+	struct drm_syncobj_timeline_query *args = data;
+	struct drm_syncobj **syncobjs;
+	uint64_t *points;
+	uint32_t i;
+	int ret;
+
+	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ))
+		return -ENODEV;
+
+	if (args->count_handles == 0)
+		return -EINVAL;
+
+	ret = drm_syncobj_array_find(file_private,
+				     u64_to_user_ptr(args->handles),
+				     args->count_handles,
+				     &syncobjs);
+	if (ret < 0)
+		return ret;
+
+
+	points = kmalloc_array(args->count_handles, sizeof(*points),
+			       GFP_KERNEL);
+	if (points == NULL) {
+		ret = -ENOMEM;
+		goto out;
+	}
+	for (i = 0; i < args->count_handles; i++)
+		drm_syncobj_timeline_query_payload(syncobjs[i], &points[i]);
+	ret = copy_to_user(u64_to_user_ptr(args->points), points,
+			   sizeof(uint64_t) * args->count_handles) ? -EFAULT : 0;
+
+	kfree(points);
+out:
+	drm_syncobj_array_free(syncobjs, args->count_handles);
+
+	return ret;
+}
diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
index c8bc1414753d..23c4979d8a1c 100644
--- a/include/uapi/drm/drm.h
+++ b/include/uapi/drm/drm.h
@@ -771,6 +771,15 @@ struct drm_syncobj_array {
 	__u32 pad;
 };
 
+struct drm_syncobj_timeline_query {
+	__u64 handles;
+	/* points are timeline syncobjs payloads returned by query ioctl */
+	__u64 points;
+	__u32 count_handles;
+	__u32 pad;
+};
+
+
 /* Query current scanout sequence number */
 struct drm_crtc_get_sequence {
 	__u32 crtc_id;		/* requested crtc_id */
@@ -928,6 +937,8 @@ extern "C" {
 #define DRM_IOCTL_MODE_REVOKE_LEASE	DRM_IOWR(0xC9, struct drm_mode_revoke_lease)
 
 #define DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT	DRM_IOWR(0xCA, struct drm_syncobj_timeline_wait)
+#define DRM_IOCTL_SYNCOBJ_QUERY		DRM_IOWR(0xCB, struct drm_syncobj_timeline_query)
+
 /**
  * Device specific ioctls should only be in their respective headers
  * The device specific ioctl range is from 0x40 to 0x9f.
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2018-10-15  8:55 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-15  8:55 [PATCH 1/7] drm: add flags to drm_syncobj_find_fence Chunming Zhou
2018-10-15  8:55 ` [PATCH 2/7] drm: add syncobj timeline support v8 Chunming Zhou
2018-10-17  8:09   ` Daniel Vetter
     [not found]     ` <20181017080908.GK31561-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2018-10-17  9:17       ` zhoucm1
2018-10-17  9:29         ` Koenig, Christian
2018-10-17 10:24           ` Daniel Vetter
     [not found]             ` <CAKMK7uGxptMKtz-4JzT9us3M2dsLGhTSVuAKduNH+VGCsCSsQw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-10-18  3:11               ` zhoucm1
     [not found]                 ` <b08b1f23-d8dc-a294-2176-5125075c9acc-5C7GfCeVMHo@public.gmane.org>
2018-10-18 11:50                   ` Christian König
2018-10-19  2:29                     ` zhoucm1
2018-10-19  8:55                       ` Daniel Vetter
2018-10-19  9:20                         ` zhoucm1
     [not found]                           ` <19972bac-f2a9-49ee-592d-85f9eaf06145-5C7GfCeVMHo@public.gmane.org>
2018-10-19 10:12                             ` zhoucm1
     [not found]                               ` <22a52713-0ab5-80d9-a604-b171f916eedd-5C7GfCeVMHo@public.gmane.org>
2018-10-19 10:45                                 ` zhoucm1
     [not found]                                   ` <69039ffa-425e-81e7-4b08-1d431d8a212f-5C7GfCeVMHo@public.gmane.org>
2018-10-19 18:17                                     ` Daniel Vetter
     [not found]         ` <2066a18d-8002-014b-ef3c-a6f6014bdb55-5C7GfCeVMHo@public.gmane.org>
2018-10-17 10:22           ` Daniel Vetter
     [not found]             ` <CAKMK7uEEKpzjdON-qOstM67OYfDjHc5gS0+kSpuh1pm5t4BAHA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-10-17 10:37               ` zhoucm1
     [not found]   ` <20181015085553.30656-2-david1.zhou-5C7GfCeVMHo@public.gmane.org>
2018-10-19  8:49     ` Chris Wilson
2018-10-15  8:55 ` [PATCH 3/7] drm: add support of syncobj timeline point wait v2 Chunming Zhou
2018-10-15  8:55 ` Chunming Zhou [this message]
     [not found] ` <20181015085553.30656-1-david1.zhou-5C7GfCeVMHo@public.gmane.org>
2018-10-15  8:55   ` [PATCH 5/7] drm: add timeline support for syncobj export/import Chunming Zhou
2018-10-15  8:55   ` [PATCH 6/7] drm/amdgpu: add timeline support in amdgpu CS v2 Chunming Zhou
2018-10-15  8:55   ` [PATCH 7/7] drm/amdgpu: update version for timeline syncobj support in amdgpu Chunming Zhou
2018-10-15  9:01     ` Zhou, David(ChunMing)
     [not found]       ` <BY1PR12MB0502F0E543F50239A43E5F94B4FD0-PicGAnIBOobrCwm+z9iKNgdYzm3356FpvxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2018-10-15  9:04         ` Koenig, Christian
     [not found]           ` <cf4590f5-8e0a-ac0e-f34b-3e1b4b01fd99-5C7GfCeVMHo@public.gmane.org>
2018-10-16 12:54             ` Christian König
     [not found]               ` <dcb28515-7250-9a1c-2784-a4cbf517e467-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-10-17  7:46                 ` zhoucm1

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181015085553.30656-4-david1.zhou@amd.com \
    --to=david1.zhou@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.