dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/9] Fix cursor planes with virtualized drivers
@ 2023-07-19  1:42 Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 1/9] drm: Disable the cursor plane on atomic contexts " Zack Rusin
                   ` (8 more replies)
  0 siblings, 9 replies; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel; +Cc: javierm, banackm, krastevm, ppaalanen, iforbes, mombasawalam

From: Zack Rusin <zackr@vmware.com>

v5: Add a change with documentation from Michael, based on his discussion
with Pekka and bump the kernel version DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
might be introduced with to 6.6.

v4: Make drm_plane_create_hotspot_properties static, rename
DRM_CLIENT_CAP_VIRTUALIZED_CURSOR_PLANE to DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
and some minor stylistic fixes for things found by Javier and Pekka
in v3.

v3: Renames, fixes and cleanups suggested by Daniel, Simon and Pekka
after v2. There's no major changes in functionality. Please let me know
if I missed anything, it's been a while since v2.

Virtualized drivers have had a lot of issues with cursor support on top
of atomic modesetting. This set both fixes the long standing problems
with atomic kms and virtualized drivers and adds code to let userspace
use atomic kms on virtualized drivers while preserving functioning
seamless cursors between the host and guest.

The first change in the set is one that should be backported as far as
possible, likely 5.4 stable, because earlier stable kernels do not have
virtualbox driver. The change makes virtualized drivers stop exposing
a cursor plane for atomic clients, this fixes mouse cursor on all well
formed compositors which will automatically fallback to software cursor.

The rest of the changes until the last one ports the legacy hotspot code
to atomic plane properties.

Finally the last change introduces userspace API to let userspace
clients advertise the fact that they are aware of additional restrictions
placed upon the cursor plane by virtualized drivers and lets them use
atomic kms with virtualized drivers (the clients are expected to set
hotspots correctly when advertising support for virtual cursor plane).

Michael Banack (1):
  drm: Introduce documentation for hotspot properties

Zack Rusin (8):
  drm: Disable the cursor plane on atomic contexts with virtualized
    drivers
  drm/atomic: Add support for mouse hotspots
  drm/vmwgfx: Use the hotspot properties from cursor planes
  drm/qxl: Use the hotspot properties from cursor planes
  drm/vboxvideo: Use the hotspot properties from cursor planes
  drm/virtio: Use the hotspot properties from cursor planes
  drm: Remove legacy cursor hotspot code
  drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT

 Documentation/gpu/drm-kms.rst             |   6 ++
 drivers/gpu/drm/drm_atomic_state_helper.c |  14 +++
 drivers/gpu/drm/drm_atomic_uapi.c         |  20 ++++
 drivers/gpu/drm/drm_ioctl.c               |   9 ++
 drivers/gpu/drm/drm_plane.c               | 120 +++++++++++++++++++++-
 drivers/gpu/drm/qxl/qxl_display.c         |  14 ++-
 drivers/gpu/drm/qxl/qxl_drv.c             |   2 +-
 drivers/gpu/drm/vboxvideo/vbox_drv.c      |   2 +-
 drivers/gpu/drm/vboxvideo/vbox_mode.c     |   4 +-
 drivers/gpu/drm/virtio/virtgpu_drv.c      |   3 +-
 drivers/gpu/drm/virtio/virtgpu_plane.c    |   8 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c       |   2 +-
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c       |   9 +-
 include/drm/drm_drv.h                     |   9 ++
 include/drm/drm_file.h                    |  12 +++
 include/drm/drm_framebuffer.h             |  12 ---
 include/drm/drm_plane.h                   |  14 +++
 include/uapi/drm/drm.h                    |  25 +++++
 18 files changed, 246 insertions(+), 39 deletions(-)

-- 
2.39.2


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [PATCH v5 1/9] drm: Disable the cursor plane on atomic contexts with virtualized drivers
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-20  9:46   ` Simon Ser
  2023-07-19  1:42 ` [PATCH v5 2/9] drm/atomic: Add support for mouse hotspots Zack Rusin
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel
  Cc: David Airlie, banackm, Gurchetan Singh, Gerd Hoffmann,
	mombasawalam, javierm, spice-devel, virtualization,
	Maxime Ripard, Hans de Goede, ppaalanen, Dave Airlie, iforbes,
	Pekka Paalanen, stable, krastevm, Thomas Zimmermann

From: Zack Rusin <zackr@vmware.com>

Cursor planes on virtualized drivers have special meaning and require
that the clients handle them in specific ways, e.g. the cursor plane
should react to the mouse movement the way a mouse cursor would be
expected to and the client is required to set hotspot properties on it
in order for the mouse events to be routed correctly.

This breaks the contract as specified by the "universal planes". Fix it
by disabling the cursor planes on virtualized drivers while adding
a foundation on top of which it's possible to special case mouse cursor
planes for clients that want it.

Disabling the cursor planes makes some kms compositors which were broken,
e.g. Weston, fallback to software cursor which works fine or at least
better than currently while having no effect on others, e.g. gnome-shell
or kwin, which put virtualized drivers on a deny-list when running in
atomic context to make them fallback to legacy kms and avoid this issue.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Fixes: 681e7ec73044 ("drm: Allow userspace to ask for universal plane list (v2)")
Cc: <stable@vger.kernel.org> # v5.4+
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Chia-I Wu <olvaffe@gmail.com>
Cc: dri-devel@lists.freedesktop.org
Cc: virtualization@lists.linux-foundation.org
Cc: spice-devel@lists.freedesktop.org
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
---
 drivers/gpu/drm/drm_plane.c          | 13 +++++++++++++
 drivers/gpu/drm/qxl/qxl_drv.c        |  2 +-
 drivers/gpu/drm/vboxvideo/vbox_drv.c |  2 +-
 drivers/gpu/drm/virtio/virtgpu_drv.c |  3 ++-
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.c  |  2 +-
 include/drm/drm_drv.h                |  9 +++++++++
 include/drm/drm_file.h               | 12 ++++++++++++
 7 files changed, 39 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 24e7998d1731..c6bbb0c209f4 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -678,6 +678,19 @@ int drm_mode_getplane_res(struct drm_device *dev, void *data,
 		    !file_priv->universal_planes)
 			continue;
 
+		/*
+		 * If we're running on a virtualized driver then,
+		 * unless userspace advertizes support for the
+		 * virtualized cursor plane, disable cursor planes
+		 * because they'll be broken due to missing cursor
+		 * hotspot info.
+		 */
+		if (plane->type == DRM_PLANE_TYPE_CURSOR &&
+		    drm_core_check_feature(dev, DRIVER_CURSOR_HOTSPOT) &&
+		    file_priv->atomic &&
+		    !file_priv->supports_virtualized_cursor_plane)
+			continue;
+
 		if (drm_lease_held(file_priv, plane->base.id)) {
 			if (count < plane_resp->count_planes &&
 			    put_user(plane->base.id, plane_ptr + count))
diff --git a/drivers/gpu/drm/qxl/qxl_drv.c b/drivers/gpu/drm/qxl/qxl_drv.c
index b30ede1cf62d..91930e84a9cd 100644
--- a/drivers/gpu/drm/qxl/qxl_drv.c
+++ b/drivers/gpu/drm/qxl/qxl_drv.c
@@ -283,7 +283,7 @@ static const struct drm_ioctl_desc qxl_ioctls[] = {
 };
 
 static struct drm_driver qxl_driver = {
-	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC,
+	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC | DRIVER_CURSOR_HOTSPOT,
 
 	.dumb_create = qxl_mode_dumb_create,
 	.dumb_map_offset = drm_gem_ttm_dumb_map_offset,
diff --git a/drivers/gpu/drm/vboxvideo/vbox_drv.c b/drivers/gpu/drm/vboxvideo/vbox_drv.c
index 4fee15c97c34..8ecd0863fad7 100644
--- a/drivers/gpu/drm/vboxvideo/vbox_drv.c
+++ b/drivers/gpu/drm/vboxvideo/vbox_drv.c
@@ -172,7 +172,7 @@ DEFINE_DRM_GEM_FOPS(vbox_fops);
 
 static const struct drm_driver driver = {
 	.driver_features =
-	    DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
+	    DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC | DRIVER_CURSOR_HOTSPOT,
 
 	.fops = &vbox_fops,
 	.name = DRIVER_NAME,
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.c b/drivers/gpu/drm/virtio/virtgpu_drv.c
index a7ec5a3770da..60b1fd23229c 100644
--- a/drivers/gpu/drm/virtio/virtgpu_drv.c
+++ b/drivers/gpu/drm/virtio/virtgpu_drv.c
@@ -176,7 +176,8 @@ static const struct drm_driver driver = {
 	 * If KMS is disabled DRIVER_MODESET and DRIVER_ATOMIC are masked
 	 * out via drm_device::driver_features:
 	 */
-	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_RENDER | DRIVER_ATOMIC,
+	.driver_features = DRIVER_MODESET | DRIVER_GEM | DRIVER_RENDER | DRIVER_ATOMIC |
+			   DRIVER_CURSOR_HOTSPOT,
 	.open = virtio_gpu_driver_open,
 	.postclose = virtio_gpu_driver_postclose,
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 8b24ecf60e3e..d3e308fdfd5b 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -1611,7 +1611,7 @@ static const struct file_operations vmwgfx_driver_fops = {
 
 static const struct drm_driver driver = {
 	.driver_features =
-	DRIVER_MODESET | DRIVER_RENDER | DRIVER_ATOMIC | DRIVER_GEM,
+	DRIVER_MODESET | DRIVER_RENDER | DRIVER_ATOMIC | DRIVER_GEM | DRIVER_CURSOR_HOTSPOT,
 	.ioctls = vmw_ioctls,
 	.num_ioctls = ARRAY_SIZE(vmw_ioctls),
 	.master_set = vmw_master_set,
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index b77f2c7275b7..8303016665dd 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -104,6 +104,15 @@ enum drm_driver_feature {
 	 * acceleration should be handled by two drivers that are connected using auxiliary bus.
 	 */
 	DRIVER_COMPUTE_ACCEL            = BIT(7),
+	/**
+	 * @DRIVER_CURSOR_HOTSPOT:
+	 *
+	 * Driver supports and requires cursor hotspot information in the
+	 * cursor plane (e.g. cursor plane has to actually track the mouse
+	 * cursor and the clients are required to set hotspot in order for
+	 * the cursor planes to work correctly).
+	 */
+	DRIVER_CURSOR_HOTSPOT           = BIT(8),
 
 	/* IMPORTANT: Below are all the legacy flags, add new ones above. */
 
diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
index 010239392adf..69720ac29c67 100644
--- a/include/drm/drm_file.h
+++ b/include/drm/drm_file.h
@@ -228,6 +228,18 @@ struct drm_file {
 	 */
 	bool is_master;
 
+	/**
+	 * @supports_virtualized_cursor_plane:
+	 *
+	 * This client is capable of handling the cursor plane with the
+	 * restrictions imposed on it by the virtualized drivers.
+	 *
+	 * This implies that the cursor plane has to behave like a cursor
+	 * i.e. track cursor movement. It also requires setting of the
+	 * hotspot properties by the client on the cursor plane.
+	 */
+	bool supports_virtualized_cursor_plane;
+
 	/**
 	 * @master:
 	 *
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 2/9] drm/atomic: Add support for mouse hotspots
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 1/9] drm: Disable the cursor plane on atomic contexts " Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-20  9:20   ` Simon Ser
  2023-07-19  1:42 ` [PATCH v5 3/9] drm/vmwgfx: Use the hotspot properties from cursor planes Zack Rusin
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel
  Cc: Maxime Ripard, Thomas Zimmermann, David Airlie, javierm, banackm,
	krastevm, ppaalanen, iforbes, mombasawalam

From: Zack Rusin <zackr@vmware.com>

Atomic modesetting code lacked support for specifying mouse cursor
hotspots. The legacy kms DRM_IOCTL_MODE_CURSOR2 had support for setting
the hotspot but the functionality was not implemented in the new atomic
paths.

Due to the lack of hotspots in the atomic paths userspace compositors
completely disable atomic modesetting for drivers that require it (i.e.
all paravirtualized drivers).

This change adds hotspot properties to the atomic codepaths throughtout
the DRM core and will allow enabling atomic modesetting for virtualized
drivers in the userspace.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
---
 drivers/gpu/drm/drm_atomic_state_helper.c | 14 +++++++
 drivers/gpu/drm/drm_atomic_uapi.c         | 20 +++++++++
 drivers/gpu/drm/drm_plane.c               | 50 +++++++++++++++++++++++
 include/drm/drm_plane.h                   | 14 +++++++
 4 files changed, 98 insertions(+)

diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
index 784e63d70a42..54975de44a0e 100644
--- a/drivers/gpu/drm/drm_atomic_state_helper.c
+++ b/drivers/gpu/drm/drm_atomic_state_helper.c
@@ -275,6 +275,20 @@ void __drm_atomic_helper_plane_state_reset(struct drm_plane_state *plane_state,
 			plane_state->normalized_zpos = val;
 		}
 	}
+
+	if (plane->hotspot_x_property) {
+		if (!drm_object_property_get_default_value(&plane->base,
+							   plane->hotspot_x_property,
+							   &val))
+			plane_state->hotspot_x = val;
+	}
+
+	if (plane->hotspot_y_property) {
+		if (!drm_object_property_get_default_value(&plane->base,
+							   plane->hotspot_y_property,
+							   &val))
+			plane_state->hotspot_y = val;
+	}
 }
 EXPORT_SYMBOL(__drm_atomic_helper_plane_state_reset);
 
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index 98d3b10c08ae..07a7b3f18df2 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -593,6 +593,22 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
 	} else if (plane->funcs->atomic_set_property) {
 		return plane->funcs->atomic_set_property(plane, state,
 				property, val);
+	} else if (property == plane->hotspot_x_property) {
+		if (plane->type != DRM_PLANE_TYPE_CURSOR) {
+			drm_dbg_atomic(plane->dev,
+				       "[PLANE:%d:%s] is not a cursor plane: 0x%llx\n",
+				       plane->base.id, plane->name, val);
+			return -EINVAL;
+		}
+		state->hotspot_x = val;
+	} else if (property == plane->hotspot_y_property) {
+		if (plane->type != DRM_PLANE_TYPE_CURSOR) {
+			drm_dbg_atomic(plane->dev,
+				       "[PLANE:%d:%s] is not a cursor plane: 0x%llx\n",
+				       plane->base.id, plane->name, val);
+			return -EINVAL;
+		}
+		state->hotspot_y = val;
 	} else {
 		drm_dbg_atomic(plane->dev,
 			       "[PLANE:%d:%s] unknown property [PROP:%d:%s]\n",
@@ -653,6 +669,10 @@ drm_atomic_plane_get_property(struct drm_plane *plane,
 		*val = state->scaling_filter;
 	} else if (plane->funcs->atomic_get_property) {
 		return plane->funcs->atomic_get_property(plane, state, property, val);
+	} else if (property == plane->hotspot_x_property) {
+		*val = state->hotspot_x;
+	} else if (property == plane->hotspot_y_property) {
+		*val = state->hotspot_y;
 	} else {
 		drm_dbg_atomic(dev,
 			       "[PLANE:%d:%s] unknown property [PROP:%d:%s]\n",
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index c6bbb0c209f4..eaca367bdc7e 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -230,6 +230,47 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
 	return 0;
 }
 
+/**
+ * drm_plane_create_hotspot_properties - creates the mouse hotspot
+ * properties and attaches them to the given cursor plane
+ *
+ * @plane: drm cursor plane
+ *
+ * This function enables the mouse hotspot property on a given
+ * cursor plane.
+ *
+ * RETURNS:
+ * Zero for success or -errno
+ */
+static int drm_plane_create_hotspot_properties(struct drm_plane *plane)
+{
+	struct drm_property *prop_x;
+	struct drm_property *prop_y;
+
+	drm_WARN_ON(plane->dev,
+		    !drm_core_check_feature(plane->dev,
+					    DRIVER_CURSOR_HOTSPOT));
+
+	prop_x = drm_property_create_signed_range(plane->dev, 0, "HOTSPOT_X",
+						  INT_MIN, INT_MAX);
+	if (IS_ERR(prop_x))
+		return PTR_ERR(prop_x);
+
+	prop_y = drm_property_create_signed_range(plane->dev, 0, "HOTSPOT_Y",
+						  INT_MIN, INT_MAX);
+	if (IS_ERR(prop_y)) {
+		drm_property_destroy(plane->dev, prop_x);
+		return PTR_ERR(prop_y);
+	}
+
+	drm_object_attach_property(&plane->base, prop_x, 0);
+	drm_object_attach_property(&plane->base, prop_y, 0);
+	plane->hotspot_x_property = prop_x;
+	plane->hotspot_y_property = prop_y;
+
+	return 0;
+}
+
 __printf(9, 0)
 static int __drm_universal_plane_init(struct drm_device *dev,
 				      struct drm_plane *plane,
@@ -348,6 +389,10 @@ static int __drm_universal_plane_init(struct drm_device *dev,
 		drm_object_attach_property(&plane->base, config->prop_src_w, 0);
 		drm_object_attach_property(&plane->base, config->prop_src_h, 0);
 	}
+	if (drm_core_check_feature(dev, DRIVER_CURSOR_HOTSPOT) &&
+	    type == DRM_PLANE_TYPE_CURSOR) {
+		drm_plane_create_hotspot_properties(plane);
+	}
 
 	if (format_modifier_count)
 		create_in_format_blob(dev, plane);
@@ -1067,6 +1112,11 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc,
 
 			fb->hot_x = req->hot_x;
 			fb->hot_y = req->hot_y;
+
+			if (plane->hotspot_x_property && plane->state)
+				plane->state->hotspot_x = req->hot_x;
+			if (plane->hotspot_y_property && plane->state)
+				plane->state->hotspot_y = req->hot_y;
 		} else {
 			fb = NULL;
 		}
diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
index 51291983ea44..74e62f90a1ad 100644
--- a/include/drm/drm_plane.h
+++ b/include/drm/drm_plane.h
@@ -116,6 +116,10 @@ struct drm_plane_state {
 	/** @src_h: height of visible portion of plane (in 16.16) */
 	uint32_t src_h, src_w;
 
+	/** @hotspot_x: x offset to mouse cursor hotspot */
+	/** @hotspot_y: y offset to mouse cursor hotspot */
+	int32_t hotspot_x, hotspot_y;
+
 	/**
 	 * @alpha:
 	 * Opacity of the plane with 0 as completely transparent and 0xffff as
@@ -748,6 +752,16 @@ struct drm_plane {
 	 * scaling.
 	 */
 	struct drm_property *scaling_filter_property;
+
+	/**
+	 * @hotspot_x_property: property to set mouse hotspot x offset.
+	 */
+	struct drm_property *hotspot_x_property;
+
+	/**
+	 * @hotspot_y_property: property to set mouse hotspot y offset.
+	 */
+	struct drm_property *hotspot_y_property;
 };
 
 #define obj_to_plane(x) container_of(x, struct drm_plane, base)
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 3/9] drm/vmwgfx: Use the hotspot properties from cursor planes
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 1/9] drm: Disable the cursor plane on atomic contexts " Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 2/9] drm/atomic: Add support for mouse hotspots Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 4/9] drm/qxl: " Zack Rusin
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel; +Cc: javierm, banackm, krastevm, ppaalanen, iforbes, mombasawalam

From: Zack Rusin <zackr@vmware.com>

Atomic modesetting got support for mouse hotspots via the hotspot
properties. Port the legacy kms hotspot handling to the new properties
on cursor planes.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Cc: Maaz Mombasawala <mombasawalam@vmware.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Martin Krastev <krastevm@vmware.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index b62207be3363..de294dfe05d0 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -768,13 +768,8 @@ vmw_du_cursor_plane_atomic_update(struct drm_plane *plane,
 	struct vmw_plane_state *old_vps = vmw_plane_state_to_vps(old_state);
 	s32 hotspot_x, hotspot_y;
 
-	hotspot_x = du->hotspot_x;
-	hotspot_y = du->hotspot_y;
-
-	if (new_state->fb) {
-		hotspot_x += new_state->fb->hot_x;
-		hotspot_y += new_state->fb->hot_y;
-	}
+	hotspot_x = du->hotspot_x + new_state->hotspot_x;
+	hotspot_y = du->hotspot_y + new_state->hotspot_y;
 
 	du->cursor_surface = vps->surf;
 	du->cursor_bo = vps->bo;
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 4/9] drm/qxl: Use the hotspot properties from cursor planes
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
                   ` (2 preceding siblings ...)
  2023-07-19  1:42 ` [PATCH v5 3/9] drm/vmwgfx: Use the hotspot properties from cursor planes Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 5/9] drm/vboxvideo: " Zack Rusin
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel
  Cc: javierm, banackm, virtualization, krastevm, ppaalanen,
	spice-devel, Dave Airlie, iforbes, mombasawalam, Gerd Hoffmann

From: Zack Rusin <zackr@vmware.com>

Atomic modesetting got support for mouse hotspots via the hotspot
properties. Port the legacy kms hotspot handling to the new properties
on cursor planes.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Cc: Dave Airlie <airlied@redhat.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: virtualization@lists.linux-foundation.org
Cc: spice-devel@lists.freedesktop.org
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
---
 drivers/gpu/drm/qxl/qxl_display.c | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
index 6492a70e3c39..5d689e0d3586 100644
--- a/drivers/gpu/drm/qxl/qxl_display.c
+++ b/drivers/gpu/drm/qxl/qxl_display.c
@@ -485,7 +485,6 @@ static int qxl_primary_atomic_check(struct drm_plane *plane,
 static int qxl_primary_apply_cursor(struct qxl_device *qdev,
 				    struct drm_plane_state *plane_state)
 {
-	struct drm_framebuffer *fb = plane_state->fb;
 	struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc);
 	struct qxl_cursor_cmd *cmd;
 	struct qxl_release *release;
@@ -510,8 +509,8 @@ static int qxl_primary_apply_cursor(struct qxl_device *qdev,
 
 	cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
 	cmd->type = QXL_CURSOR_SET;
-	cmd->u.set.position.x = plane_state->crtc_x + fb->hot_x;
-	cmd->u.set.position.y = plane_state->crtc_y + fb->hot_y;
+	cmd->u.set.position.x = plane_state->crtc_x + plane_state->hotspot_x;
+	cmd->u.set.position.y = plane_state->crtc_y + plane_state->hotspot_y;
 
 	cmd->u.set.shape = qxl_bo_physical_address(qdev, qcrtc->cursor_bo, 0);
 
@@ -531,7 +530,6 @@ static int qxl_primary_apply_cursor(struct qxl_device *qdev,
 static int qxl_primary_move_cursor(struct qxl_device *qdev,
 				   struct drm_plane_state *plane_state)
 {
-	struct drm_framebuffer *fb = plane_state->fb;
 	struct qxl_crtc *qcrtc = to_qxl_crtc(plane_state->crtc);
 	struct qxl_cursor_cmd *cmd;
 	struct qxl_release *release;
@@ -554,8 +552,8 @@ static int qxl_primary_move_cursor(struct qxl_device *qdev,
 
 	cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release);
 	cmd->type = QXL_CURSOR_MOVE;
-	cmd->u.position.x = plane_state->crtc_x + fb->hot_x;
-	cmd->u.position.y = plane_state->crtc_y + fb->hot_y;
+	cmd->u.position.x = plane_state->crtc_x + plane_state->hotspot_x;
+	cmd->u.position.y = plane_state->crtc_y + plane_state->hotspot_y;
 	qxl_release_unmap(qdev, release, &cmd->release_info);
 
 	qxl_release_fence_buffer_objects(release);
@@ -851,8 +849,8 @@ static int qxl_plane_prepare_fb(struct drm_plane *plane,
 		struct qxl_bo *old_cursor_bo = qcrtc->cursor_bo;
 
 		qcrtc->cursor_bo = qxl_create_cursor(qdev, user_bo,
-						     new_state->fb->hot_x,
-						     new_state->fb->hot_y);
+						     new_state->hotspot_x,
+						     new_state->hotspot_y);
 		qxl_free_cursor(old_cursor_bo);
 	}
 
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 5/9] drm/vboxvideo: Use the hotspot properties from cursor planes
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
                   ` (3 preceding siblings ...)
  2023-07-19  1:42 ` [PATCH v5 4/9] drm/qxl: " Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 6/9] drm/virtio: " Zack Rusin
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel
  Cc: Hans de Goede, David Airlie, javierm, banackm, krastevm,
	ppaalanen, iforbes, mombasawalam

From: Zack Rusin <zackr@vmware.com>

Atomic modesetting got support for mouse hotspots via the hotspot
properties. Port the legacy kms hotspot handling to the new properties
on cursor planes.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
---
 drivers/gpu/drm/vboxvideo/vbox_mode.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/vboxvideo/vbox_mode.c b/drivers/gpu/drm/vboxvideo/vbox_mode.c
index 341edd982cb3..9ff3bade9795 100644
--- a/drivers/gpu/drm/vboxvideo/vbox_mode.c
+++ b/drivers/gpu/drm/vboxvideo/vbox_mode.c
@@ -429,8 +429,8 @@ static void vbox_cursor_atomic_update(struct drm_plane *plane,
 	flags = VBOX_MOUSE_POINTER_VISIBLE | VBOX_MOUSE_POINTER_SHAPE |
 		VBOX_MOUSE_POINTER_ALPHA;
 	hgsmi_update_pointer_shape(vbox->guest_pool, flags,
-				   min_t(u32, max(fb->hot_x, 0), width),
-				   min_t(u32, max(fb->hot_y, 0), height),
+				   min_t(u32, max(new_state->hotspot_x, 0), width),
+				   min_t(u32, max(new_state->hotspot_y, 0), height),
 				   width, height, vbox->cursor_data, data_size);
 
 	mutex_unlock(&vbox->hw_mutex);
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 6/9] drm/virtio: Use the hotspot properties from cursor planes
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
                   ` (4 preceding siblings ...)
  2023-07-19  1:42 ` [PATCH v5 5/9] drm/vboxvideo: " Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 7/9] drm: Remove legacy cursor hotspot code Zack Rusin
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel
  Cc: David Airlie, javierm, banackm, Gurchetan Singh, krastevm,
	ppaalanen, iforbes, virtualization, mombasawalam, Gerd Hoffmann

From: Zack Rusin <zackr@vmware.com>

Atomic modesetting got support for mouse hotspots via the hotspot
properties. Port the legacy kms hotspot handling to the new properties
on cursor planes.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Chia-I Wu <olvaffe@gmail.com>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: virtualization@lists.linux-foundation.org
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
---
 drivers/gpu/drm/virtio/virtgpu_plane.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index a2e045f3a000..20de599658c1 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -323,16 +323,16 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane,
 		DRM_DEBUG("update, handle %d, pos +%d+%d, hot %d,%d\n", handle,
 			  plane->state->crtc_x,
 			  plane->state->crtc_y,
-			  plane->state->fb ? plane->state->fb->hot_x : 0,
-			  plane->state->fb ? plane->state->fb->hot_y : 0);
+			  plane->state->hotspot_x,
+			  plane->state->hotspot_y);
 		output->cursor.hdr.type =
 			cpu_to_le32(VIRTIO_GPU_CMD_UPDATE_CURSOR);
 		output->cursor.resource_id = cpu_to_le32(handle);
 		if (plane->state->fb) {
 			output->cursor.hot_x =
-				cpu_to_le32(plane->state->fb->hot_x);
+				cpu_to_le32(plane->state->hotspot_x);
 			output->cursor.hot_y =
-				cpu_to_le32(plane->state->fb->hot_y);
+				cpu_to_le32(plane->state->hotspot_y);
 		} else {
 			output->cursor.hot_x = cpu_to_le32(0);
 			output->cursor.hot_y = cpu_to_le32(0);
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 7/9] drm: Remove legacy cursor hotspot code
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
                   ` (5 preceding siblings ...)
  2023-07-19  1:42 ` [PATCH v5 6/9] drm/virtio: " Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 8/9] drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT Zack Rusin
  2023-07-19  1:42 ` [PATCH v5 9/9] drm: Introduce documentation for hotspot properties Zack Rusin
  8 siblings, 0 replies; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel
  Cc: Maxime Ripard, Thomas Zimmermann, David Airlie, javierm, banackm,
	krastevm, ppaalanen, iforbes, mombasawalam

From: Zack Rusin <zackr@vmware.com>

Atomic modesetting supports mouse cursor offsets via the hotspot
properties that are created on cursor planes. All drivers which
support hotspots are atomic and the legacy code has been implemented
in terms of the atomic properties as well.

Due to the above the lagacy cursor hotspot code is no longer used or
needed and can be removed.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
---
 drivers/gpu/drm/drm_plane.c   |  3 ---
 include/drm/drm_framebuffer.h | 12 ------------
 2 files changed, 15 deletions(-)

diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index eaca367bdc7e..1dc00ad4c33c 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -1110,9 +1110,6 @@ static int drm_mode_cursor_universal(struct drm_crtc *crtc,
 				return PTR_ERR(fb);
 			}
 
-			fb->hot_x = req->hot_x;
-			fb->hot_y = req->hot_y;
-
 			if (plane->hotspot_x_property && plane->state)
 				plane->state->hotspot_x = req->hot_x;
 			if (plane->hotspot_y_property && plane->state)
diff --git a/include/drm/drm_framebuffer.h b/include/drm/drm_framebuffer.h
index 0dcc07b68654..1e108c1789b1 100644
--- a/include/drm/drm_framebuffer.h
+++ b/include/drm/drm_framebuffer.h
@@ -188,18 +188,6 @@ struct drm_framebuffer {
 	 * DRM_MODE_FB_MODIFIERS.
 	 */
 	int flags;
-	/**
-	 * @hot_x: X coordinate of the cursor hotspot. Used by the legacy cursor
-	 * IOCTL when the driver supports cursor through a DRM_PLANE_TYPE_CURSOR
-	 * universal plane.
-	 */
-	int hot_x;
-	/**
-	 * @hot_y: Y coordinate of the cursor hotspot. Used by the legacy cursor
-	 * IOCTL when the driver supports cursor through a DRM_PLANE_TYPE_CURSOR
-	 * universal plane.
-	 */
-	int hot_y;
 	/**
 	 * @filp_head: Placed on &drm_file.fbs, protected by &drm_file.fbs_lock.
 	 */
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 8/9] drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
                   ` (6 preceding siblings ...)
  2023-07-19  1:42 ` [PATCH v5 7/9] drm: Remove legacy cursor hotspot code Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-20  9:54   ` Simon Ser
  2023-07-19  1:42 ` [PATCH v5 9/9] drm: Introduce documentation for hotspot properties Zack Rusin
  8 siblings, 1 reply; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel
  Cc: Maxime Ripard, Pekka Paalanen, Thomas Zimmermann, David Airlie,
	javierm, banackm, krastevm, ppaalanen, iforbes, mombasawalam

From: Zack Rusin <zackr@vmware.com>

Virtualized drivers place additional restrictions on the cursor plane
which breaks the contract of universal planes. To allow atomic
modesettings with virtualized drivers the clients need to advertise
that they're capable of dealing with those extra restrictions.

To do that introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT which
lets DRM know that the client is aware of and capable of dealing with
the extra restrictions on the virtual cursor plane.

Setting this option to true makes DRM expose the cursor plane on
virtualized drivers. The userspace is expected to set the hotspots
and handle mouse events on that plane.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@linux.ie>
Cc: Daniel Vetter <daniel@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
---
 drivers/gpu/drm/drm_ioctl.c |  9 +++++++++
 include/uapi/drm/drm.h      | 25 +++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index 8e9afe7af19c..06c6497fb4d0 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -361,6 +361,15 @@ drm_setclientcap(struct drm_device *dev, void *data, struct drm_file *file_priv)
 			return -EINVAL;
 		file_priv->writeback_connectors = req->value;
 		break;
+	case DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT:
+		if (!drm_core_check_feature(dev, DRIVER_CURSOR_HOTSPOT))
+			return -EOPNOTSUPP;
+		if (!file_priv->atomic)
+			return -EINVAL;
+		if (req->value > 1)
+			return -EINVAL;
+		file_priv->supports_virtualized_cursor_plane = req->value;
+		break;
 	default:
 		return -EINVAL;
 	}
diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
index a87bbbbca2d4..a8069294fe81 100644
--- a/include/uapi/drm/drm.h
+++ b/include/uapi/drm/drm.h
@@ -836,6 +836,31 @@ struct drm_get_cap {
  */
 #define DRM_CLIENT_CAP_WRITEBACK_CONNECTORS	5
 
+/**
+ * DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
+ *
+ * Drivers for para-virtualized hardware (e.g. vmwgfx, qxl, virtio and
+ * virtualbox) have additional restrictions for cursor planes (thus
+ * making cursor planes on those drivers not truly universal,) e.g.
+ * they need cursor planes to act like one would expect from a mouse
+ * cursor and have correctly set hotspot properties.
+ * If this client cap is not set the DRM core will hide cursor plane on
+ * those virtualized drivers because not setting it implies that the
+ * client is not capable of dealing with those extra restictions.
+ * Clients which do set cursor hotspot and treat the cursor plane
+ * like a mouse cursor should set this property.
+ * The client must enable &DRM_CLIENT_CAP_ATOMIC first.
+ *
+ * Setting this property on drivers which do not special case
+ * cursor planes (i.e. non-virtualized drivers) will return
+ * EOPNOTSUPP, which can be used by userspace to gauge
+ * requirements of the hardware/drivers they're running on.
+ *
+ * This capability is always supported for atomic-capable virtualized
+ * drivers starting from kernel version 6.6.
+ */
+#define DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT	6
+
 /* DRM_IOCTL_SET_CLIENT_CAP ioctl argument type */
 struct drm_set_client_cap {
 	__u64 capability;
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
                   ` (7 preceding siblings ...)
  2023-07-19  1:42 ` [PATCH v5 8/9] drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT Zack Rusin
@ 2023-07-19  1:42 ` Zack Rusin
  2023-07-19  7:53   ` Javier Martinez Canillas
                     ` (2 more replies)
  8 siblings, 3 replies; 24+ messages in thread
From: Zack Rusin @ 2023-07-19  1:42 UTC (permalink / raw)
  To: dri-devel; +Cc: javierm, banackm, krastevm, ppaalanen, iforbes, mombasawalam

From: Michael Banack <banackm@vmware.com>

To clarify the intent and reasoning behind the hotspot properties
introduce userspace documentation that goes over cursor handling
in para-virtualized environments.

The documentation is generic enough to not special case for any
specific hypervisor and should apply equally to all.

Signed-off-by: Zack Rusin <zackr@vmware.com>
---
 Documentation/gpu/drm-kms.rst |  6 ++++
 drivers/gpu/drm/drm_plane.c   | 58 ++++++++++++++++++++++++++++++++++-
 2 files changed, 63 insertions(+), 1 deletion(-)

diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
index c92d425cb2dd..7159b3e90a8a 100644
--- a/Documentation/gpu/drm-kms.rst
+++ b/Documentation/gpu/drm-kms.rst
@@ -577,6 +577,12 @@ Variable Refresh Properties
 .. kernel-doc:: drivers/gpu/drm/drm_connector.c
    :doc: Variable refresh properties
 
+Cursor Hotspot Properties
+---------------------------
+
+.. kernel-doc:: drivers/gpu/drm/drm_plane.c
+   :doc: hotspot properties
+
 Existing KMS Properties
 -----------------------
 
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 1dc00ad4c33c..f3f2eae83cca 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -230,6 +230,61 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
 	return 0;
 }
 
+/**
+ * DOC: hotspot properties
+ *
+ * HOTSPOT_X: property to set mouse hotspot x offset.
+ * HOTSPOT_Y: property to set mouse hotspot y offset.
+ *
+ * When the plane is being used as a cursor image to display a mouse pointer,
+ * the "hotspot" is the offset within the cursor image where mouse events
+ * are expected to go.
+ *
+ * Positive values move the hotspot from the top-left corner of the cursor
+ * plane towards the right and bottom.
+ *
+ * Most display drivers do not need this information because the
+ * hotspot is not actually connected to anything visible on screen.
+ * However, this is necessary for display drivers like the para-virtualized
+ * drivers (eg qxl, vbox, virtio, vmwgfx), that are attached to a user console
+ * with a mouse pointer.  Since these consoles are often being remoted over a
+ * network, they would otherwise have to wait to display the pointer movement to
+ * the user until a full network round-trip has occurred.  New mouse events have
+ * to be sent from the user's console, over the network to the virtual input
+ * devices, forwarded to the desktop for processing, and then the cursor plane's
+ * position can be updated and sent back to the user's console over the network.
+ * Instead, with the hotspot information, the console can anticipate the new
+ * location, and draw the mouse cursor there before the confirmation comes in.
+ * To do that correctly, the user's console must be able predict how the
+ * desktop will process mouse events, which normally requires the desktop's
+ * mouse topology information, ie where each CRTC sits in the mouse coordinate
+ * space.  This is typically sent to the para-virtualized drivers using some
+ * driver-specific method, and the driver then forwards it to the console by
+ * way of the virtual display device or hypervisor.
+ *
+ * The assumption is generally made that there is only one cursor plane being
+ * used this way at a time, and that the desktop is feeding all mouse devices
+ * into the same global pointer.  Para-virtualized drivers that require this
+ * should only be exposing a single cursor plane, or find some other way
+ * to coordinate with a userspace desktop that supports multiple pointers.
+ * If the hotspot properties are set, the cursor plane is therefore assumed to be
+ * used only for displaying a mouse cursor image, and the position of the combined
+ * cursor plane + offset can therefore be used for coordinating with input from a
+ * mouse device.
+ *
+ * The cursor will then be drawn either at the location of the plane in the CRTC
+ * console, or as a free-floating cursor plane on the user's console
+ * corresponding to their desktop mouse position.
+ *
+ * DRM clients which would like to work correctly on drivers which expose
+ * hotspot properties should advertise DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT.
+ * Setting this property on drivers which do not special case
+ * cursor planes will return EOPNOTSUPP, which can be used by userspace to
+ * gauge requirements of the hardware/drivers they're running on. Advertising
+ * DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT implies that the userspace client will be
+ * correctly setting the hotspot properties.
+ */
+
 /**
  * drm_plane_create_hotspot_properties - creates the mouse hotspot
  * properties and attaches them to the given cursor plane
@@ -237,7 +292,8 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
  * @plane: drm cursor plane
  *
  * This function enables the mouse hotspot property on a given
- * cursor plane.
+ * cursor plane. Look at the documentation for hotspot properties
+ * to get a better understanding for what they're used for.
  *
  * RETURNS:
  * Zero for success or -errno
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-19  1:42 ` [PATCH v5 9/9] drm: Introduce documentation for hotspot properties Zack Rusin
@ 2023-07-19  7:53   ` Javier Martinez Canillas
  2023-07-19  8:15   ` Pekka Paalanen
  2023-07-20  9:51   ` Simon Ser
  2 siblings, 0 replies; 24+ messages in thread
From: Javier Martinez Canillas @ 2023-07-19  7:53 UTC (permalink / raw)
  To: Zack Rusin, dri-devel; +Cc: banackm, krastevm, ppaalanen, iforbes, mombasawalam

Zack Rusin <zack@kde.org> writes:

Hello Zack,

> From: Michael Banack <banackm@vmware.com>
>
> To clarify the intent and reasoning behind the hotspot properties
> introduce userspace documentation that goes over cursor handling
> in para-virtualized environments.
>
> The documentation is generic enough to not special case for any
> specific hypervisor and should apply equally to all.
>

This is missing the S-o-B from Michael. But no need to resend I think, you
could just fixup that when applying the patch.

> Signed-off-by: Zack Rusin <zackr@vmware.com>
> ---

I think this documentation is great and it personaly closed some conceptual
gaps for me. Thanks a lot for that.

Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>

-- 
Best regards,

Javier Martinez Canillas
Core Platforms
Red Hat


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-19  1:42 ` [PATCH v5 9/9] drm: Introduce documentation for hotspot properties Zack Rusin
  2023-07-19  7:53   ` Javier Martinez Canillas
@ 2023-07-19  8:15   ` Pekka Paalanen
  2023-07-20  5:03     ` Zack Rusin
  2023-07-20  9:51   ` Simon Ser
  2 siblings, 1 reply; 24+ messages in thread
From: Pekka Paalanen @ 2023-07-19  8:15 UTC (permalink / raw)
  To: Zack Rusin; +Cc: banackm, javierm, krastevm, dri-devel, iforbes, mombasawalam

[-- Attachment #1: Type: text/plain, Size: 5747 bytes --]

On Tue, 18 Jul 2023 21:42:18 -0400
Zack Rusin <zack@kde.org> wrote:

> From: Michael Banack <banackm@vmware.com>
> 
> To clarify the intent and reasoning behind the hotspot properties
> introduce userspace documentation that goes over cursor handling
> in para-virtualized environments.
> 
> The documentation is generic enough to not special case for any
> specific hypervisor and should apply equally to all.
> 
> Signed-off-by: Zack Rusin <zackr@vmware.com>
> ---
>  Documentation/gpu/drm-kms.rst |  6 ++++
>  drivers/gpu/drm/drm_plane.c   | 58 ++++++++++++++++++++++++++++++++++-
>  2 files changed, 63 insertions(+), 1 deletion(-)
> 
> diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
> index c92d425cb2dd..7159b3e90a8a 100644
> --- a/Documentation/gpu/drm-kms.rst
> +++ b/Documentation/gpu/drm-kms.rst
> @@ -577,6 +577,12 @@ Variable Refresh Properties
>  .. kernel-doc:: drivers/gpu/drm/drm_connector.c
>     :doc: Variable refresh properties
>  
> +Cursor Hotspot Properties
> +---------------------------
> +
> +.. kernel-doc:: drivers/gpu/drm/drm_plane.c
> +   :doc: hotspot properties
> +
>  Existing KMS Properties
>  -----------------------
>  
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 1dc00ad4c33c..f3f2eae83cca 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -230,6 +230,61 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
>  	return 0;
>  }
>  
> +/**
> + * DOC: hotspot properties
> + *
> + * HOTSPOT_X: property to set mouse hotspot x offset.
> + * HOTSPOT_Y: property to set mouse hotspot y offset.
> + *
> + * When the plane is being used as a cursor image to display a mouse pointer,
> + * the "hotspot" is the offset within the cursor image where mouse events
> + * are expected to go.
> + *
> + * Positive values move the hotspot from the top-left corner of the cursor
> + * plane towards the right and bottom.
> + *
> + * Most display drivers do not need this information because the
> + * hotspot is not actually connected to anything visible on screen.
> + * However, this is necessary for display drivers like the para-virtualized
> + * drivers (eg qxl, vbox, virtio, vmwgfx), that are attached to a user console
> + * with a mouse pointer.  Since these consoles are often being remoted over a
> + * network, they would otherwise have to wait to display the pointer movement to
> + * the user until a full network round-trip has occurred.  New mouse events have
> + * to be sent from the user's console, over the network to the virtual input
> + * devices, forwarded to the desktop for processing, and then the cursor plane's
> + * position can be updated and sent back to the user's console over the network.
> + * Instead, with the hotspot information, the console can anticipate the new
> + * location, and draw the mouse cursor there before the confirmation comes in.
> + * To do that correctly, the user's console must be able predict how the
> + * desktop will process mouse events, which normally requires the desktop's
> + * mouse topology information, ie where each CRTC sits in the mouse coordinate
> + * space.  This is typically sent to the para-virtualized drivers using some
> + * driver-specific method, and the driver then forwards it to the console by
> + * way of the virtual display device or hypervisor.
> + *
> + * The assumption is generally made that there is only one cursor plane being
> + * used this way at a time, and that the desktop is feeding all mouse devices
> + * into the same global pointer.  Para-virtualized drivers that require this
> + * should only be exposing a single cursor plane, or find some other way
> + * to coordinate with a userspace desktop that supports multiple pointers.
> + * If the hotspot properties are set, the cursor plane is therefore assumed to be
> + * used only for displaying a mouse cursor image, and the position of the combined
> + * cursor plane + offset can therefore be used for coordinating with input from a
> + * mouse device.
> + *
> + * The cursor will then be drawn either at the location of the plane in the CRTC
> + * console, or as a free-floating cursor plane on the user's console
> + * corresponding to their desktop mouse position.
> + *
> + * DRM clients which would like to work correctly on drivers which expose
> + * hotspot properties should advertise DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT.
> + * Setting this property on drivers which do not special case
> + * cursor planes will return EOPNOTSUPP, which can be used by userspace to
> + * gauge requirements of the hardware/drivers they're running on. Advertising
> + * DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT implies that the userspace client will be
> + * correctly setting the hotspot properties.
> + */

Yes! This is exactly what I was after. Thank you!

> +
>  /**
>   * drm_plane_create_hotspot_properties - creates the mouse hotspot
>   * properties and attaches them to the given cursor plane
> @@ -237,7 +292,8 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
>   * @plane: drm cursor plane
>   *
>   * This function enables the mouse hotspot property on a given
> - * cursor plane.
> + * cursor plane. Look at the documentation for hotspot properties
> + * to get a better understanding for what they're used for.

I haven't seen the rendered HTML, but is there a hyperlink from here to
the hotspot property doc? I think a link would be neat.

>   *
>   * RETURNS:
>   * Zero for success or -errno

Anyway:

Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>


Thanks,
pq

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-19  8:15   ` Pekka Paalanen
@ 2023-07-20  5:03     ` Zack Rusin
  2023-07-20  6:47       ` Simon Ser
  0 siblings, 1 reply; 24+ messages in thread
From: Zack Rusin @ 2023-07-20  5:03 UTC (permalink / raw)
  To: ppaalanen
  Cc: javierm, dri-devel, Martin Krastev, Michael Banack, Ian Forbes,
	Maaz Mombasawala

On Wed, 2023-07-19 at 11:15 +0300, Pekka Paalanen wrote:
> On Tue, 18 Jul 2023 21:42:18 -0400
> Zack Rusin <zack@kde.org> wrote:
> 
> > From: Michael Banack <banackm@vmware.com>
> > 
> > To clarify the intent and reasoning behind the hotspot properties
> > introduce userspace documentation that goes over cursor handling
> > in para-virtualized environments.
> > 
> > The documentation is generic enough to not special case for any
> > specific hypervisor and should apply equally to all.
> > 
> > Signed-off-by: Zack Rusin <zackr@vmware.com>
> > ---
> >  Documentation/gpu/drm-kms.rst |  6 ++++
> >  drivers/gpu/drm/drm_plane.c   | 58 ++++++++++++++++++++++++++++++++++-
> >  2 files changed, 63 insertions(+), 1 deletion(-)
> > 
> > diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
> > index c92d425cb2dd..7159b3e90a8a 100644
> > --- a/Documentation/gpu/drm-kms.rst
> > +++ b/Documentation/gpu/drm-kms.rst
> > @@ -577,6 +577,12 @@ Variable Refresh Properties
> >  .. kernel-doc:: drivers/gpu/drm/drm_connector.c
> >     :doc: Variable refresh properties
> >  
> > +Cursor Hotspot Properties
> > +---------------------------
> > +
> > +.. kernel-doc:: drivers/gpu/drm/drm_plane.c
> > +   :doc: hotspot properties
> > +
> >  Existing KMS Properties
> >  -----------------------
> >  
> > diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> > index 1dc00ad4c33c..f3f2eae83cca 100644
> > --- a/drivers/gpu/drm/drm_plane.c
> > +++ b/drivers/gpu/drm/drm_plane.c
> > @@ -230,6 +230,61 @@ static int create_in_format_blob(struct drm_device *dev,
> > struct drm_plane *plane
> >         return 0;
> >  }
> >  
> > +/**
> > + * DOC: hotspot properties
> > + *
> > + * HOTSPOT_X: property to set mouse hotspot x offset.
> > + * HOTSPOT_Y: property to set mouse hotspot y offset.
> > + *
> > + * When the plane is being used as a cursor image to display a mouse pointer,
> > + * the "hotspot" is the offset within the cursor image where mouse events
> > + * are expected to go.
> > + *
> > + * Positive values move the hotspot from the top-left corner of the cursor
> > + * plane towards the right and bottom.
> > + *
> > + * Most display drivers do not need this information because the
> > + * hotspot is not actually connected to anything visible on screen.
> > + * However, this is necessary for display drivers like the para-virtualized
> > + * drivers (eg qxl, vbox, virtio, vmwgfx), that are attached to a user console
> > + * with a mouse pointer.  Since these consoles are often being remoted over a
> > + * network, they would otherwise have to wait to display the pointer movement
> > to
> > + * the user until a full network round-trip has occurred.  New mouse events
> > have
> > + * to be sent from the user's console, over the network to the virtual input
> > + * devices, forwarded to the desktop for processing, and then the cursor
> > plane's
> > + * position can be updated and sent back to the user's console over the
> > network.
> > + * Instead, with the hotspot information, the console can anticipate the new
> > + * location, and draw the mouse cursor there before the confirmation comes in.
> > + * To do that correctly, the user's console must be able predict how the
> > + * desktop will process mouse events, which normally requires the desktop's
> > + * mouse topology information, ie where each CRTC sits in the mouse coordinate
> > + * space.  This is typically sent to the para-virtualized drivers using some
> > + * driver-specific method, and the driver then forwards it to the console by
> > + * way of the virtual display device or hypervisor.
> > + *
> > + * The assumption is generally made that there is only one cursor plane being
> > + * used this way at a time, and that the desktop is feeding all mouse devices
> > + * into the same global pointer.  Para-virtualized drivers that require this
> > + * should only be exposing a single cursor plane, or find some other way
> > + * to coordinate with a userspace desktop that supports multiple pointers.
> > + * If the hotspot properties are set, the cursor plane is therefore assumed to
> > be
> > + * used only for displaying a mouse cursor image, and the position of the
> > combined
> > + * cursor plane + offset can therefore be used for coordinating with input from
> > a
> > + * mouse device.
> > + *
> > + * The cursor will then be drawn either at the location of the plane in the
> > CRTC
> > + * console, or as a free-floating cursor plane on the user's console
> > + * corresponding to their desktop mouse position.
> > + *
> > + * DRM clients which would like to work correctly on drivers which expose
> > + * hotspot properties should advertise DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT.
> > + * Setting this property on drivers which do not special case
> > + * cursor planes will return EOPNOTSUPP, which can be used by userspace to
> > + * gauge requirements of the hardware/drivers they're running on. Advertising
> > + * DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT implies that the userspace client will
> > be
> > + * correctly setting the hotspot properties.
> > + */
> 
> Yes! This is exactly what I was after. Thank you!
> 
> > +
> >  /**
> >   * drm_plane_create_hotspot_properties - creates the mouse hotspot
> >   * properties and attaches them to the given cursor plane
> > @@ -237,7 +292,8 @@ static int create_in_format_blob(struct drm_device *dev,
> > struct drm_plane *plane
> >   * @plane: drm cursor plane
> >   *
> >   * This function enables the mouse hotspot property on a given
> > - * cursor plane.
> > + * cursor plane. Look at the documentation for hotspot properties
> > + * to get a better understanding for what they're used for.
> 
> I haven't seen the rendered HTML, but is there a hyperlink from here to
> the hotspot property doc? I think a link would be neat.

drm_plane_create_hotspot_properties is now a static function so it's not
generated in the docs (but to be fair, I'm also not aware of how to link to drm-
kms.rst section from within function docs because I tried that first only to realize
it's a static function and not in the generated html docs).

I'll give this series a few more hours on the list and if no one objects I'll push
it to drm-misc later today. Thanks!

z

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-20  5:03     ` Zack Rusin
@ 2023-07-20  6:47       ` Simon Ser
  2023-07-20  8:50         ` Javier Martinez Canillas
  0 siblings, 1 reply; 24+ messages in thread
From: Simon Ser @ 2023-07-20  6:47 UTC (permalink / raw)
  To: Zack Rusin
  Cc: javierm, dri-devel, Martin Krastev, ppaalanen, Michael Banack,
	Ian Forbes, Maaz Mombasawala

On Thursday, July 20th, 2023 at 07:03, Zack Rusin <zackr@vmware.com> wrote:

> I'll give this series a few more hours on the list and if no one objects I'll push
> it to drm-misc later today. Thanks!

Sorry, but this doesn't seem to be enough to satisfy the DRM merge
requirements. This introduces a new uAPI but is missing user-space
patches and IGT. See [1] and [2].

[1]: https://dri.freedesktop.org/docs/drm/gpu/drm-kms.html#requirements
[2]: https://dri.freedesktop.org/docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-20  6:47       ` Simon Ser
@ 2023-07-20  8:50         ` Javier Martinez Canillas
  2023-07-20  9:07           ` Simon Ser
  0 siblings, 1 reply; 24+ messages in thread
From: Javier Martinez Canillas @ 2023-07-20  8:50 UTC (permalink / raw)
  To: Simon Ser, Zack Rusin
  Cc: aesteve, Michael Banack, Martin Krastev, ppaalanen, dri-devel,
	Ian Forbes, Maaz Mombasawala

Simon Ser <contact@emersion.fr> writes:

Hello Simon,

> On Thursday, July 20th, 2023 at 07:03, Zack Rusin <zackr@vmware.com> wrote:
>
>> I'll give this series a few more hours on the list and if no one objects I'll push
>> it to drm-misc later today. Thanks!
>
> Sorry, but this doesn't seem to be enough to satisfy the DRM merge
> requirements. This introduces a new uAPI but is missing user-space
> patches and IGT. See [1] and [2].
>
> [1]: https://dri.freedesktop.org/docs/drm/gpu/drm-kms.html#requirements
> [2]: https://dri.freedesktop.org/docs/drm/gpu/drm-uapi.html#open-source-userspace-requirements
>

Albert (Cc'ed) wrote IGT tests for this new uAPI and was waiting for
Zack's patches to land to post them. I believe his branch is [0] but
he can correct me if I'm wrong on that.

Zack also has mutter patches and Albert has been testing those too.

[0]: https://gitlab.freedesktop.org/aesteve/igt-gpu-tools/-/commits/modeset-cursor-hotspot-test/

-- 
Best regards,

Javier Martinez Canillas
Core Platforms
Red Hat


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-20  8:50         ` Javier Martinez Canillas
@ 2023-07-20  9:07           ` Simon Ser
  2023-07-20 19:28             ` Zack Rusin
  0 siblings, 1 reply; 24+ messages in thread
From: Simon Ser @ 2023-07-20  9:07 UTC (permalink / raw)
  To: Javier Martinez Canillas
  Cc: Michael Banack, aesteve, dri-devel, Martin Krastev, ppaalanen,
	Ian Forbes, Maaz Mombasawala

On Thursday, July 20th, 2023 at 10:50, Javier Martinez Canillas <javierm@redhat.com> wrote:

> > On Thursday, July 20th, 2023 at 07:03, Zack Rusin zackr@vmware.com wrote:
> > 
> > > I'll give this series a few more hours on the list and if no one objects I'll push
> > > it to drm-misc later today. Thanks!
> > 
> > Sorry, but this doesn't seem to be enough to satisfy the DRM merge
> > requirements. This introduces a new uAPI but is missing user-space
> > patches and IGT. See 1 and 2.
> 
> 
> Albert (Cc'ed) wrote IGT tests for this new uAPI and was waiting for
> Zack's patches to land to post them. I believe his branch is [0] but
> he can correct me if I'm wrong on that.
> 
> Zack also has mutter patches and Albert has been testing those too.
> 
> [0]: https://gitlab.freedesktop.org/aesteve/igt-gpu-tools/-/commits/modeset-cursor-hotspot-test/

Ah, nice. Please do post all of these (without merging them) and
include links to them in the commit message. Posting is important
to make sure there are no gaps/mistakes in the tests and user-space
impl.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 2/9] drm/atomic: Add support for mouse hotspots
  2023-07-19  1:42 ` [PATCH v5 2/9] drm/atomic: Add support for mouse hotspots Zack Rusin
@ 2023-07-20  9:20   ` Simon Ser
  0 siblings, 0 replies; 24+ messages in thread
From: Simon Ser @ 2023-07-20  9:20 UTC (permalink / raw)
  To: Zack Rusin
  Cc: Maxime Ripard, Thomas Zimmermann, David Airlie, javierm, banackm,
	krastevm, ppaalanen, dri-devel, iforbes, mombasawalam

On Wednesday, July 19th, 2023 at 03:42, Zack Rusin <zack@kde.org> wrote:

> From: Zack Rusin <zackr@vmware.com>
> 
> Atomic modesetting code lacked support for specifying mouse cursor
> hotspots. The legacy kms DRM_IOCTL_MODE_CURSOR2 had support for setting
> the hotspot but the functionality was not implemented in the new atomic
> paths.
> 
> Due to the lack of hotspots in the atomic paths userspace compositors
> completely disable atomic modesetting for drivers that require it (i.e.
> all paravirtualized drivers).
> 
> This change adds hotspot properties to the atomic codepaths throughtout
> the DRM core and will allow enabling atomic modesetting for virtualized
> drivers in the userspace.
> 
> Signed-off-by: Zack Rusin <zackr@vmware.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
> ---
>  drivers/gpu/drm/drm_atomic_state_helper.c | 14 +++++++
>  drivers/gpu/drm/drm_atomic_uapi.c         | 20 +++++++++
>  drivers/gpu/drm/drm_plane.c               | 50 +++++++++++++++++++++++
>  include/drm/drm_plane.h                   | 14 +++++++
>  4 files changed, 98 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
> index 784e63d70a42..54975de44a0e 100644
> --- a/drivers/gpu/drm/drm_atomic_state_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_state_helper.c
> @@ -275,6 +275,20 @@ void __drm_atomic_helper_plane_state_reset(struct drm_plane_state *plane_state,
>  			plane_state->normalized_zpos = val;
>  		}
>  	}
> +
> +	if (plane->hotspot_x_property) {
> +		if (!drm_object_property_get_default_value(&plane->base,
> +							   plane->hotspot_x_property,
> +							   &val))
> +			plane_state->hotspot_x = val;
> +	}
> +
> +	if (plane->hotspot_y_property) {
> +		if (!drm_object_property_get_default_value(&plane->base,
> +							   plane->hotspot_y_property,
> +							   &val))
> +			plane_state->hotspot_y = val;
> +	}
>  }
>  EXPORT_SYMBOL(__drm_atomic_helper_plane_state_reset);
> 
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> index 98d3b10c08ae..07a7b3f18df2 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -593,6 +593,22 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
>  	} else if (plane->funcs->atomic_set_property) {
>  		return plane->funcs->atomic_set_property(plane, state,
>  				property, val);
> +	} else if (property == plane->hotspot_x_property) {
> +		if (plane->type != DRM_PLANE_TYPE_CURSOR) {
> +			drm_dbg_atomic(plane->dev,
> +				       "[PLANE:%d:%s] is not a cursor plane: 0x%llx\n",
> +				       plane->base.id, plane->name, val);
> +			return -EINVAL;
> +		}

Hm, it sounds a bit weird to catch this case here. Wouldn't it be a driver bug
to attach the hotspot props to a plane which isn't a cursor? Wouldn't it make
more sense to WARN in drm_plane_create_hotspot_properties() if a driver
attempts to do so?

> +		state->hotspot_x = val;
> +	} else if (property == plane->hotspot_y_property) {
> +		if (plane->type != DRM_PLANE_TYPE_CURSOR) {
> +			drm_dbg_atomic(plane->dev,
> +				       "[PLANE:%d:%s] is not a cursor plane: 0x%llx\n",
> +				       plane->base.id, plane->name, val);
> +			return -EINVAL;
> +		}
> +		state->hotspot_y = val;
>  	} else {
>  		drm_dbg_atomic(plane->dev,
>  			       "[PLANE:%d:%s] unknown property [PROP:%d:%s]\n",
> @@ -653,6 +669,10 @@ drm_atomic_plane_get_property(struct drm_plane *plane,
>  		*val = state->scaling_filter;
>  	} else if (plane->funcs->atomic_get_property) {
>  		return plane->funcs->atomic_get_property(plane, state, property, val);
> +	} else if (property == plane->hotspot_x_property) {
> +		*val = state->hotspot_x;
> +	} else if (property == plane->hotspot_y_property) {
> +		*val = state->hotspot_y;
>  	} else {
>  		drm_dbg_atomic(dev,
>  			       "[PLANE:%d:%s] unknown property [PROP:%d:%s]\n",
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index c6bbb0c209f4..eaca367bdc7e 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -230,6 +230,47 @@ static int create_in_format_blob(struct drm_device *dev, struct drm_plane *plane
>  	return 0;
>  }
> 
> +/**
> + * drm_plane_create_hotspot_properties - creates the mouse hotspot
> + * properties and attaches them to the given cursor plane
> + *
> + * @plane: drm cursor plane
> + *
> + * This function enables the mouse hotspot property on a given
> + * cursor plane.
> + *
> + * RETURNS:
> + * Zero for success or -errno
> + */
> +static int drm_plane_create_hotspot_properties(struct drm_plane *plane)
> +{
> +	struct drm_property *prop_x;
> +	struct drm_property *prop_y;
> +
> +	drm_WARN_ON(plane->dev,
> +		    !drm_core_check_feature(plane->dev,
> +					    DRIVER_CURSOR_HOTSPOT));
> +
> +	prop_x = drm_property_create_signed_range(plane->dev, 0, "HOTSPOT_X",
> +						  INT_MIN, INT_MAX);

This is an atomic-only property, the DRM_MODE_PROP_ATOMIC flag should be passed.

> +	if (IS_ERR(prop_x))
> +		return PTR_ERR(prop_x);
> +
> +	prop_y = drm_property_create_signed_range(plane->dev, 0, "HOTSPOT_Y",
> +						  INT_MIN, INT_MAX);
> +	if (IS_ERR(prop_y)) {
> +		drm_property_destroy(plane->dev, prop_x);
> +		return PTR_ERR(prop_y);
> +	}
> +
> +	drm_object_attach_property(&plane->base, prop_x, 0);
> +	drm_object_attach_property(&plane->base, prop_y, 0);
> +	plane->hotspot_x_property = prop_x;
> +	plane->hotspot_y_property = prop_y;
> +
> +	return 0;
> +}

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 1/9] drm: Disable the cursor plane on atomic contexts with virtualized drivers
  2023-07-19  1:42 ` [PATCH v5 1/9] drm: Disable the cursor plane on atomic contexts " Zack Rusin
@ 2023-07-20  9:46   ` Simon Ser
  0 siblings, 0 replies; 24+ messages in thread
From: Simon Ser @ 2023-07-20  9:46 UTC (permalink / raw)
  To: Zack Rusin
  Cc: Maxime Ripard, Pekka Paalanen, Thomas Zimmermann, Hans de Goede,
	David Airlie, spice-devel, javierm, banackm, Gurchetan Singh,
	krastevm, ppaalanen, dri-devel, Dave Airlie, stable, iforbes,
	virtualization, mombasawalam, Gerd Hoffmann

On Wednesday, July 19th, 2023 at 03:42, Zack Rusin <zack@kde.org> wrote:

> From: Zack Rusin <zackr@vmware.com>
> 
> Cursor planes on virtualized drivers have special meaning and require
> that the clients handle them in specific ways, e.g. the cursor plane
> should react to the mouse movement the way a mouse cursor would be
> expected to and the client is required to set hotspot properties on it
> in order for the mouse events to be routed correctly.
> 
> This breaks the contract as specified by the "universal planes". Fix it
> by disabling the cursor planes on virtualized drivers while adding
> a foundation on top of which it's possible to special case mouse cursor
> planes for clients that want it.
> 
> Disabling the cursor planes makes some kms compositors which were broken,
> e.g. Weston, fallback to software cursor which works fine or at least
> better than currently while having no effect on others, e.g. gnome-shell
> or kwin, which put virtualized drivers on a deny-list when running in
> atomic context to make them fallback to legacy kms and avoid this issue.
> 
> Signed-off-by: Zack Rusin <zackr@vmware.com>
> Fixes: 681e7ec73044 ("drm: Allow userspace to ask for universal plane list (v2)")
> Cc: <stable@vger.kernel.org> # v5.4+
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Dave Airlie <airlied@redhat.com>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Cc: Hans de Goede <hdegoede@redhat.com>
> Cc: Gurchetan Singh <gurchetansingh@chromium.org>
> Cc: Chia-I Wu <olvaffe@gmail.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: virtualization@lists.linux-foundation.org
> Cc: spice-devel@lists.freedesktop.org
> Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>

Nit: I think it would be better to reflect the name of the DRM client cap in
the supports_virtualized_cursor_plane field.

Regardless:

Reviewed-by: Simon Ser <contact@emersion.fr>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-19  1:42 ` [PATCH v5 9/9] drm: Introduce documentation for hotspot properties Zack Rusin
  2023-07-19  7:53   ` Javier Martinez Canillas
  2023-07-19  8:15   ` Pekka Paalanen
@ 2023-07-20  9:51   ` Simon Ser
  2 siblings, 0 replies; 24+ messages in thread
From: Simon Ser @ 2023-07-20  9:51 UTC (permalink / raw)
  To: Zack Rusin
  Cc: javierm, banackm, krastevm, ppaalanen, dri-devel, iforbes, mombasawalam

On Wednesday, July 19th, 2023 at 03:42, Zack Rusin <zack@kde.org> wrote:

> +/**
> + * DOC: hotspot properties
> + *
> + * HOTSPOT_X: property to set mouse hotspot x offset.
> + * HOTSPOT_Y: property to set mouse hotspot y offset.
> + *
> + * When the plane is being used as a cursor image to display a mouse pointer,
> + * the "hotspot" is the offset within the cursor image where mouse events
> + * are expected to go.
> + *
> + * Positive values move the hotspot from the top-left corner of the cursor
> + * plane towards the right and bottom.
> + *
> + * Most display drivers do not need this information because the
> + * hotspot is not actually connected to anything visible on screen.
> + * However, this is necessary for display drivers like the para-virtualized
> + * drivers (eg qxl, vbox, virtio, vmwgfx), that are attached to a user console
> + * with a mouse pointer.  Since these consoles are often being remoted over a
> + * network, they would otherwise have to wait to display the pointer movement to
> + * the user until a full network round-trip has occurred.  New mouse events have
> + * to be sent from the user's console, over the network to the virtual input
> + * devices, forwarded to the desktop for processing, and then the cursor plane's
> + * position can be updated and sent back to the user's console over the network.
> + * Instead, with the hotspot information, the console can anticipate the new
> + * location, and draw the mouse cursor there before the confirmation comes in.
> + * To do that correctly, the user's console must be able predict how the
> + * desktop will process mouse events, which normally requires the desktop's
> + * mouse topology information, ie where each CRTC sits in the mouse coordinate
> + * space.  This is typically sent to the para-virtualized drivers using some
> + * driver-specific method, and the driver then forwards it to the console by
> + * way of the virtual display device or hypervisor.
> + *
> + * The assumption is generally made that there is only one cursor plane being
> + * used this way at a time, and that the desktop is feeding all mouse devices
> + * into the same global pointer.  Para-virtualized drivers that require this
> + * should only be exposing a single cursor plane, or find some other way
> + * to coordinate with a userspace desktop that supports multiple pointers.
> + * If the hotspot properties are set, the cursor plane is therefore assumed to be
> + * used only for displaying a mouse cursor image, and the position of the combined
> + * cursor plane + offset can therefore be used for coordinating with input from a
> + * mouse device.
> + *
> + * The cursor will then be drawn either at the location of the plane in the CRTC
> + * console, or as a free-floating cursor plane on the user's console
> + * corresponding to their desktop mouse position.
> + *
> + * DRM clients which would like to work correctly on drivers which expose
> + * hotspot properties should advertise DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT.

Nit: an ampersand ("&") can be used to linkify that cap.

> + * Setting this property on drivers which do not special case
> + * cursor planes will return EOPNOTSUPP, which can be used by userspace to
> + * gauge requirements of the hardware/drivers they're running on. Advertising
> + * DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT implies that the userspace client will be
> + * correctly setting the hotspot properties.

Thanks a lot for writing these docs! It's super helpful!

Reviewed-by: Simon Ser <contact@emersion.fr>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 8/9] drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
  2023-07-19  1:42 ` [PATCH v5 8/9] drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT Zack Rusin
@ 2023-07-20  9:54   ` Simon Ser
  0 siblings, 0 replies; 24+ messages in thread
From: Simon Ser @ 2023-07-20  9:54 UTC (permalink / raw)
  To: Zack Rusin
  Cc: Maxime Ripard, Pekka Paalanen, Thomas Zimmermann, David Airlie,
	javierm, banackm, krastevm, ppaalanen, dri-devel, iforbes,
	mombasawalam

On Wednesday, July 19th, 2023 at 03:42, Zack Rusin <zack@kde.org> wrote:

> From: Zack Rusin <zackr@vmware.com>
> 
> Virtualized drivers place additional restrictions on the cursor plane
> which breaks the contract of universal planes. To allow atomic
> modesettings with virtualized drivers the clients need to advertise
> that they're capable of dealing with those extra restrictions.
> 
> To do that introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT which
> lets DRM know that the client is aware of and capable of dealing with
> the extra restrictions on the virtual cursor plane.
> 
> Setting this option to true makes DRM expose the cursor plane on
> virtualized drivers. The userspace is expected to set the hotspots
> and handle mouse events on that plane.
> 
> Signed-off-by: Zack Rusin <zackr@vmware.com>
> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Maxime Ripard <mripard@kernel.org>
> Cc: Thomas Zimmermann <tzimmermann@suse.de>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: dri-devel@lists.freedesktop.org
> Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>

Looks good!

Reviewed-by: Simon Ser <contact@emersion.fr>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-20  9:07           ` Simon Ser
@ 2023-07-20 19:28             ` Zack Rusin
  2023-07-20 19:32               ` Simon Ser
  0 siblings, 1 reply; 24+ messages in thread
From: Zack Rusin @ 2023-07-20 19:28 UTC (permalink / raw)
  To: javierm, contact
  Cc: aesteve, Michael Banack, Martin Krastev, ppaalanen, dri-devel,
	Ian Forbes, Maaz Mombasawala

On Thu, 2023-07-20 at 09:07 +0000, Simon Ser wrote:
> !! External Email
>
> On Thursday, July 20th, 2023 at 10:50, Javier Martinez Canillas
> <javierm@redhat.com> wrote:
>
> > > On Thursday, July 20th, 2023 at 07:03, Zack Rusin zackr@vmware.com wrote:
> > >
> > > > I'll give this series a few more hours on the list and if no one objects
> > > > I'll push
> > > > it to drm-misc later today. Thanks!
> > >
> > > Sorry, but this doesn't seem to be enough to satisfy the DRM merge
> > > requirements. This introduces a new uAPI but is missing user-space
> > > patches and IGT. See 1 and 2.
> >
> >
> > Albert (Cc'ed) wrote IGT tests for this new uAPI and was waiting for
> > Zack's patches to land to post them. I believe his branch is [0] but
> > he can correct me if I'm wrong on that.
> >
> > Zack also has mutter patches and Albert has been testing those too.
> >
> > [0]:
> > https://gitlab.freedesktop.org/aesteve/igt-gpu-tools/-/commits/modeset-cursor-hotspot-test/
>
> Ah, nice. Please do post all of these (without merging them) and
> include links to them in the commit message. Posting is important
> to make sure there are no gaps/mistakes in the tests and user-space
> impl.

What should those links point to? Because my private mutter repository is definitely
not going to last long so I'm not sure if there's any point in putting that in a
kernel commit log. Or would you like the links to those in the cover letter?

z

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-20 19:28             ` Zack Rusin
@ 2023-07-20 19:32               ` Simon Ser
  2023-07-24 11:04                 ` Albert Esteve
  0 siblings, 1 reply; 24+ messages in thread
From: Simon Ser @ 2023-07-20 19:32 UTC (permalink / raw)
  To: Zack Rusin
  Cc: aesteve, javierm, dri-devel, Martin Krastev, ppaalanen,
	Michael Banack, Ian Forbes, Maaz Mombasawala

On Thursday, July 20th, 2023 at 21:28, Zack Rusin <zackr@vmware.com> wrote:

> On Thu, 2023-07-20 at 09:07 +0000, Simon Ser wrote:
> 
> > !! External Email
> > 
> > On Thursday, July 20th, 2023 at 10:50, Javier Martinez Canillas
> > javierm@redhat.com wrote:
> > 
> > > > On Thursday, July 20th, 2023 at 07:03, Zack Rusin zackr@vmware.com wrote:
> > > > 
> > > > > I'll give this series a few more hours on the list and if no one objects
> > > > > I'll push
> > > > > it to drm-misc later today. Thanks!
> > > > 
> > > > Sorry, but this doesn't seem to be enough to satisfy the DRM merge
> > > > requirements. This introduces a new uAPI but is missing user-space
> > > > patches and IGT. See 1 and 2.
> > > 
> > > Albert (Cc'ed) wrote IGT tests for this new uAPI and was waiting for
> > > Zack's patches to land to post them. I believe his branch is 0 but
> > > he can correct me if I'm wrong on that.
> > > 
> > > Zack also has mutter patches and Albert has been testing those too.
> > 
> > Ah, nice. Please do post all of these (without merging them) and
> > include links to them in the commit message. Posting is important
> > to make sure there are no gaps/mistakes in the tests and user-space
> > impl.
> 
> What should those links point to? Because my private mutter repository is definitely
> not going to last long so I'm not sure if there's any point in putting that in a
> kernel commit log. Or would you like the links to those in the cover letter?

The kernel docs say: "The userspace side must be fully reviewed and
tested to the standards of that userspace project".

So you need to open a merge request for mutter. Same for IGT.

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-20 19:32               ` Simon Ser
@ 2023-07-24 11:04                 ` Albert Esteve
  2023-08-10 11:06                   ` Albert Esteve
  0 siblings, 1 reply; 24+ messages in thread
From: Albert Esteve @ 2023-07-24 11:04 UTC (permalink / raw)
  To: Simon Ser
  Cc: Michael Banack, javierm, dri-devel, Martin Krastev, ppaalanen,
	Ian Forbes, Maaz Mombasawala

[-- Attachment #1: Type: text/plain, Size: 1959 bytes --]

On Thu, Jul 20, 2023 at 9:32 PM Simon Ser <contact@emersion.fr> wrote:

> On Thursday, July 20th, 2023 at 21:28, Zack Rusin <zackr@vmware.com>
> wrote:
>
> > On Thu, 2023-07-20 at 09:07 +0000, Simon Ser wrote:
> >
> > > !! External Email
> > >
> > > On Thursday, July 20th, 2023 at 10:50, Javier Martinez Canillas
> > > javierm@redhat.com wrote:
> > >
> > > > > On Thursday, July 20th, 2023 at 07:03, Zack Rusin zackr@vmware.com
> wrote:
> > > > >
> > > > > > I'll give this series a few more hours on the list and if no one
> objects
> > > > > > I'll push
> > > > > > it to drm-misc later today. Thanks!
> > > > >
> > > > > Sorry, but this doesn't seem to be enough to satisfy the DRM merge
> > > > > requirements. This introduces a new uAPI but is missing user-space
> > > > > patches and IGT. See 1 and 2.
> > > >
> > > > Albert (Cc'ed) wrote IGT tests for this new uAPI and was waiting for
> > > > Zack's patches to land to post them. I believe his branch is 0 but
> > > > he can correct me if I'm wrong on that.
> > > >
> > > > Zack also has mutter patches and Albert has been testing those too.
> > >
> > > Ah, nice. Please do post all of these (without merging them) and
> > > include links to them in the commit message. Posting is important
> > > to make sure there are no gaps/mistakes in the tests and user-space
> > > impl.
> >
> > What should those links point to? Because my private mutter repository
> is definitely
> > not going to last long so I'm not sure if there's any point in putting
> that in a
> > kernel commit log. Or would you like the links to those in the cover
> letter?
>
> The kernel docs say: "The userspace side must be fully reviewed and
> tested to the standards of that userspace project".
>
> So you need to open a merge request for mutter. Same for IGT.
>
>
Hi,

Here's the link to the IGT patch:
https://lists.freedesktop.org/archives/igt-dev/2023-July/058427.html

[-- Attachment #2: Type: text/html, Size: 3004 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [PATCH v5 9/9] drm: Introduce documentation for hotspot properties
  2023-07-24 11:04                 ` Albert Esteve
@ 2023-08-10 11:06                   ` Albert Esteve
  0 siblings, 0 replies; 24+ messages in thread
From: Albert Esteve @ 2023-08-10 11:06 UTC (permalink / raw)
  To: Simon Ser
  Cc: Michael Banack, javierm, dri-devel, Martin Krastev, ppaalanen,
	Ian Forbes, Maaz Mombasawala

[-- Attachment #1: Type: text/plain, Size: 2447 bytes --]

On Mon, Jul 24, 2023 at 1:04 PM Albert Esteve <aesteve@redhat.com> wrote:

>
>
> On Thu, Jul 20, 2023 at 9:32 PM Simon Ser <contact@emersion.fr> wrote:
>
>> On Thursday, July 20th, 2023 at 21:28, Zack Rusin <zackr@vmware.com>
>> wrote:
>>
>> > On Thu, 2023-07-20 at 09:07 +0000, Simon Ser wrote:
>> >
>> > > !! External Email
>> > >
>> > > On Thursday, July 20th, 2023 at 10:50, Javier Martinez Canillas
>> > > javierm@redhat.com wrote:
>> > >
>> > > > > On Thursday, July 20th, 2023 at 07:03, Zack Rusin
>> zackr@vmware.com wrote:
>> > > > >
>> > > > > > I'll give this series a few more hours on the list and if no
>> one objects
>> > > > > > I'll push
>> > > > > > it to drm-misc later today. Thanks!
>> > > > >
>> > > > > Sorry, but this doesn't seem to be enough to satisfy the DRM merge
>> > > > > requirements. This introduces a new uAPI but is missing user-space
>> > > > > patches and IGT. See 1 and 2.
>> > > >
>> > > > Albert (Cc'ed) wrote IGT tests for this new uAPI and was waiting for
>> > > > Zack's patches to land to post them. I believe his branch is 0 but
>> > > > he can correct me if I'm wrong on that.
>> > > >
>> > > > Zack also has mutter patches and Albert has been testing those too.
>> > >
>> > > Ah, nice. Please do post all of these (without merging them) and
>> > > include links to them in the commit message. Posting is important
>> > > to make sure there are no gaps/mistakes in the tests and user-space
>> > > impl.
>> >
>> > What should those links point to? Because my private mutter repository
>> is definitely
>> > not going to last long so I'm not sure if there's any point in putting
>> that in a
>> > kernel commit log. Or would you like the links to those in the cover
>> letter?
>>
>> The kernel docs say: "The userspace side must be fully reviewed and
>> tested to the standards of that userspace project".
>>
>> So you need to open a merge request for mutter. Same for IGT.
>>
>>
> Hi,
>
> Here's the link to the IGT patch:
> https://lists.freedesktop.org/archives/igt-dev/2023-July/058427.html
>

Hi,

The IGT patch series already got the Reviewed-by flags.

Here's the link https://patchwork.freedesktop.org/series/121225/

@zackr Is the mutter patch posted too? If so, IIUC the next step would be
to post a new revision
of this patch with the links to the igt and mutter patches.
Is there anything else missing?

BR,
Albert

[-- Attachment #2: Type: text/html, Size: 3957 bytes --]

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2023-08-10 11:06 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-19  1:42 [PATCH v5 0/9] Fix cursor planes with virtualized drivers Zack Rusin
2023-07-19  1:42 ` [PATCH v5 1/9] drm: Disable the cursor plane on atomic contexts " Zack Rusin
2023-07-20  9:46   ` Simon Ser
2023-07-19  1:42 ` [PATCH v5 2/9] drm/atomic: Add support for mouse hotspots Zack Rusin
2023-07-20  9:20   ` Simon Ser
2023-07-19  1:42 ` [PATCH v5 3/9] drm/vmwgfx: Use the hotspot properties from cursor planes Zack Rusin
2023-07-19  1:42 ` [PATCH v5 4/9] drm/qxl: " Zack Rusin
2023-07-19  1:42 ` [PATCH v5 5/9] drm/vboxvideo: " Zack Rusin
2023-07-19  1:42 ` [PATCH v5 6/9] drm/virtio: " Zack Rusin
2023-07-19  1:42 ` [PATCH v5 7/9] drm: Remove legacy cursor hotspot code Zack Rusin
2023-07-19  1:42 ` [PATCH v5 8/9] drm: Introduce DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT Zack Rusin
2023-07-20  9:54   ` Simon Ser
2023-07-19  1:42 ` [PATCH v5 9/9] drm: Introduce documentation for hotspot properties Zack Rusin
2023-07-19  7:53   ` Javier Martinez Canillas
2023-07-19  8:15   ` Pekka Paalanen
2023-07-20  5:03     ` Zack Rusin
2023-07-20  6:47       ` Simon Ser
2023-07-20  8:50         ` Javier Martinez Canillas
2023-07-20  9:07           ` Simon Ser
2023-07-20 19:28             ` Zack Rusin
2023-07-20 19:32               ` Simon Ser
2023-07-24 11:04                 ` Albert Esteve
2023-08-10 11:06                   ` Albert Esteve
2023-07-20  9:51   ` Simon Ser

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).