diff mbox

[v4] drm/i915/gvt: Deliver guest cursor hotspot info

Message ID 1523857898-9107-1-git-send-email-tina.zhang@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Zhang, Tina April 16, 2018, 5:51 a.m. UTC
Guest OS driver uses PV info registers to deliver cursor hotspot info
to host. This patch is used to get cursor hotspot info from virtual
registers and deliver it to host userspace.

v3->v4:
- return UINT_MAX when x_hot/y_hot is invalid. (Zhenyu)
- correct version.

v2->v3:
- add validate_hotspot(). (Zhenyu)

v1->v2:
- name as cursor_x_hot/cursor_y_hot. (Zhenyu)
- use i915_reg_t definition instead of magic numbers. (Zhenyu)

Signed-off-by: Tina Zhang <tina.zhang@intel.com>
Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
Cc: Zhi Wang <zhi.a.wang@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
---
 drivers/gpu/drm/i915/gvt/dmabuf.c     | 22 ++++++++++++++++------
 drivers/gpu/drm/i915/gvt/fb_decoder.c |  3 +++
 drivers/gpu/drm/i915/gvt/handlers.c   |  4 ++--
 drivers/gpu/drm/i915/gvt/vgpu.c       |  3 +++
 drivers/gpu/drm/i915/i915_pvinfo.h    |  5 ++++-
 5 files changed, 28 insertions(+), 9 deletions(-)

Comments

Zhenyu Wang April 16, 2018, 5:51 a.m. UTC | #1
On 2018.04.16 13:51:38 +0800, Tina Zhang wrote:
> Guest OS driver uses PV info registers to deliver cursor hotspot info
> to host. This patch is used to get cursor hotspot info from virtual
> registers and deliver it to host userspace.
> 
> v3->v4:
> - return UINT_MAX when x_hot/y_hot is invalid. (Zhenyu)
> - correct version.
> 
> v2->v3:
> - add validate_hotspot(). (Zhenyu)
> 
> v1->v2:
> - name as cursor_x_hot/cursor_y_hot. (Zhenyu)
> - use i915_reg_t definition instead of magic numbers. (Zhenyu)
> 
> Signed-off-by: Tina Zhang <tina.zhang@intel.com>
> Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
> Cc: Zhi Wang <zhi.a.wang@intel.com>
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  drivers/gpu/drm/i915/gvt/dmabuf.c     | 22 ++++++++++++++++------
>  drivers/gpu/drm/i915/gvt/fb_decoder.c |  3 +++
>  drivers/gpu/drm/i915/gvt/handlers.c   |  4 ++--
>  drivers/gpu/drm/i915/gvt/vgpu.c       |  3 +++
>  drivers/gpu/drm/i915/i915_pvinfo.h    |  5 ++++-
>  5 files changed, 28 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/dmabuf.c b/drivers/gpu/drm/i915/gvt/dmabuf.c
> index 6f4f8e9..a7c7082 100644
> --- a/drivers/gpu/drm/i915/gvt/dmabuf.c
> +++ b/drivers/gpu/drm/i915/gvt/dmabuf.c
> @@ -192,6 +192,14 @@ static struct drm_i915_gem_object *vgpu_create_gem(struct drm_device *dev,
>  	return obj;
>  }
>  
> +static bool validate_hotspot(struct intel_vgpu_cursor_plane_format *c)
> +{
> +	if (c && (c->x_hot <= c->width) && (c->y_hot <= c->height))
> +		return true;

No way c could be NULL here.

> +	else
> +		return false;
> +}
> +
>  static int vgpu_get_plane_info(struct drm_device *dev,
>  		struct intel_vgpu *vgpu,
>  		struct intel_vgpu_fb_info *info,
> @@ -229,12 +237,14 @@ static int vgpu_get_plane_info(struct drm_device *dev,
>  		info->x_pos = c.x_pos;
>  		info->y_pos = c.y_pos;
>  
> -		/* The invalid cursor hotspot value is delivered to host
> -		 * until we find a way to get the cursor hotspot info of
> -		 * guest OS.
> -		 */
> -		info->x_hot = UINT_MAX;
> -		info->y_hot = UINT_MAX;
> +		if (validate_hotspot(&c)) {
> +			info->x_hot = c.x_hot;
> +			info->y_hot = c.y_hot;
> +		} else {
> +			info->x_hot = UINT_MAX;
> +			info->y_hot = UINT_MAX;
> +		}
> +
>  		info->size = (((info->stride * c.height * c.bpp) / 8)
>  				+ (PAGE_SIZE - 1)) >> PAGE_SHIFT;
>  	} else {
> diff --git a/drivers/gpu/drm/i915/gvt/fb_decoder.c b/drivers/gpu/drm/i915/gvt/fb_decoder.c
> index 1c12068..5e7468b 100644
> --- a/drivers/gpu/drm/i915/gvt/fb_decoder.c
> +++ b/drivers/gpu/drm/i915/gvt/fb_decoder.c
> @@ -36,6 +36,7 @@
>  #include <uapi/drm/drm_fourcc.h>
>  #include "i915_drv.h"
>  #include "gvt.h"
> +#include "i915_pvinfo.h"
>  
>  #define PRIMARY_FORMAT_NUM	16
>  struct pixel_format {
> @@ -384,6 +385,8 @@ int intel_vgpu_decode_cursor_plane(struct intel_vgpu *vgpu,
>  	plane->y_pos = (val & _CURSOR_POS_Y_MASK) >> _CURSOR_POS_Y_SHIFT;
>  	plane->y_sign = (val & _CURSOR_SIGN_Y_MASK) >> _CURSOR_SIGN_Y_SHIFT;
>  
> +	plane->x_hot = vgpu_vreg_t(vgpu, vgtif_reg(cursor_x_hot));
> +	plane->y_hot = vgpu_vreg_t(vgpu, vgtif_reg(cursor_y_hot));
>  	return 0;
>  }
>  
> diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
> index a33c1c3e..2c824a9 100644
> --- a/drivers/gpu/drm/i915/gvt/handlers.c
> +++ b/drivers/gpu/drm/i915/gvt/handlers.c
> @@ -1201,8 +1201,8 @@ static int pvinfo_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
>  		ret = handle_g2v_notification(vgpu, data);
>  		break;
>  	/* add xhot and yhot to handled list to avoid error log */
> -	case 0x78830:
> -	case 0x78834:
> +	case _vgtif_reg(cursor_x_hot):
> +	case _vgtif_reg(cursor_y_hot):
>  	case _vgtif_reg(pdp[0].lo):
>  	case _vgtif_reg(pdp[0].hi):
>  	case _vgtif_reg(pdp[1].lo):
> diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
> index 2e0a02a..bf75300 100644
> --- a/drivers/gpu/drm/i915/gvt/vgpu.c
> +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
> @@ -58,6 +58,9 @@ void populate_pvinfo_page(struct intel_vgpu *vgpu)
>  
>  	vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.fence_num)) = vgpu_fence_sz(vgpu);
>  
> +	vgpu_vreg_t(vgpu, vgtif_reg(cursor_x_hot)) = UINT_MAX;
> +	vgpu_vreg_t(vgpu, vgtif_reg(cursor_y_hot)) = UINT_MAX;
> +
>  	gvt_dbg_core("Populate PVINFO PAGE for vGPU %d\n", vgpu->id);
>  	gvt_dbg_core("aperture base [GMADR] 0x%llx size 0x%llx\n",
>  		vgpu_aperture_gmadr_base(vgpu), vgpu_aperture_sz(vgpu));
> diff --git a/drivers/gpu/drm/i915/i915_pvinfo.h b/drivers/gpu/drm/i915/i915_pvinfo.h
> index 195203f..d61914a 100644
> --- a/drivers/gpu/drm/i915/i915_pvinfo.h
> +++ b/drivers/gpu/drm/i915/i915_pvinfo.h
> @@ -93,7 +93,10 @@ struct vgt_if {
>  	u32 rsv5[4];
>  
>  	u32 g2v_notify;
> -	u32 rsv6[7];
> +	u32 rsv6[5];
> +
> +	u32 cursor_x_hot;
> +	u32 cursor_y_hot;
>  
>  	struct {
>  		u32 lo;
> -- 
> 2.7.4
>
Zhang, Tina April 16, 2018, 6:07 a.m. UTC | #2
> -----Original Message-----
> From: Zhenyu Wang [mailto:zhenyuw@linux.intel.com]
> Sent: Monday, April 16, 2018 1:52 PM
> To: Zhang, Tina <tina.zhang@intel.com>
> Cc: intel-gvt-dev@lists.freedesktop.org; kraxel@redhat.com; intel-
> gfx@lists.freedesktop.org; Wang, Zhi A <zhi.a.wang@intel.com>
> Subject: Re: [PATCH v4] drm/i915/gvt: Deliver guest cursor hotspot info
> 
> On 2018.04.16 13:51:38 +0800, Tina Zhang wrote:
> > Guest OS driver uses PV info registers to deliver cursor hotspot info
> > to host. This patch is used to get cursor hotspot info from virtual
> > registers and deliver it to host userspace.
> >
> > v3->v4:
> > - return UINT_MAX when x_hot/y_hot is invalid. (Zhenyu)
> > - correct version.
> >
> > v2->v3:
> > - add validate_hotspot(). (Zhenyu)
> >
> > v1->v2:
> > - name as cursor_x_hot/cursor_y_hot. (Zhenyu)
> > - use i915_reg_t definition instead of magic numbers. (Zhenyu)
> >
> > Signed-off-by: Tina Zhang <tina.zhang@intel.com>
> > Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
> > Cc: Zhi Wang <zhi.a.wang@intel.com>
> > Cc: Gerd Hoffmann <kraxel@redhat.com>
> > ---
> >  drivers/gpu/drm/i915/gvt/dmabuf.c     | 22 ++++++++++++++++------
> >  drivers/gpu/drm/i915/gvt/fb_decoder.c |  3 +++
> >  drivers/gpu/drm/i915/gvt/handlers.c   |  4 ++--
> >  drivers/gpu/drm/i915/gvt/vgpu.c       |  3 +++
> >  drivers/gpu/drm/i915/i915_pvinfo.h    |  5 ++++-
> >  5 files changed, 28 insertions(+), 9 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gvt/dmabuf.c
> > b/drivers/gpu/drm/i915/gvt/dmabuf.c
> > index 6f4f8e9..a7c7082 100644
> > --- a/drivers/gpu/drm/i915/gvt/dmabuf.c
> > +++ b/drivers/gpu/drm/i915/gvt/dmabuf.c
> > @@ -192,6 +192,14 @@ static struct drm_i915_gem_object
> *vgpu_create_gem(struct drm_device *dev,
> >  	return obj;
> >  }
> >
> > +static bool validate_hotspot(struct intel_vgpu_cursor_plane_format
> > +*c) {
> > +	if (c && (c->x_hot <= c->width) && (c->y_hot <= c->height))
> > +		return true;
> 
> No way c could be NULL here.
See, we check c first.

BR,
Tina
> 
> > +	else
> > +		return false;
> > +}
> > +
> >  static int vgpu_get_plane_info(struct drm_device *dev,
> >  		struct intel_vgpu *vgpu,
> >  		struct intel_vgpu_fb_info *info,
> > @@ -229,12 +237,14 @@ static int vgpu_get_plane_info(struct drm_device
> *dev,
> >  		info->x_pos = c.x_pos;
> >  		info->y_pos = c.y_pos;
> >
> > -		/* The invalid cursor hotspot value is delivered to host
> > -		 * until we find a way to get the cursor hotspot info of
> > -		 * guest OS.
> > -		 */
> > -		info->x_hot = UINT_MAX;
> > -		info->y_hot = UINT_MAX;
> > +		if (validate_hotspot(&c)) {
> > +			info->x_hot = c.x_hot;
> > +			info->y_hot = c.y_hot;
> > +		} else {
> > +			info->x_hot = UINT_MAX;
> > +			info->y_hot = UINT_MAX;
> > +		}
> > +
> >  		info->size = (((info->stride * c.height * c.bpp) / 8)
> >  				+ (PAGE_SIZE - 1)) >> PAGE_SHIFT;
> >  	} else {
> > diff --git a/drivers/gpu/drm/i915/gvt/fb_decoder.c
> > b/drivers/gpu/drm/i915/gvt/fb_decoder.c
> > index 1c12068..5e7468b 100644
> > --- a/drivers/gpu/drm/i915/gvt/fb_decoder.c
> > +++ b/drivers/gpu/drm/i915/gvt/fb_decoder.c
> > @@ -36,6 +36,7 @@
> >  #include <uapi/drm/drm_fourcc.h>
> >  #include "i915_drv.h"
> >  #include "gvt.h"
> > +#include "i915_pvinfo.h"
> >
> >  #define PRIMARY_FORMAT_NUM	16
> >  struct pixel_format {
> > @@ -384,6 +385,8 @@ int intel_vgpu_decode_cursor_plane(struct
> intel_vgpu *vgpu,
> >  	plane->y_pos = (val & _CURSOR_POS_Y_MASK) >>
> _CURSOR_POS_Y_SHIFT;
> >  	plane->y_sign = (val & _CURSOR_SIGN_Y_MASK) >>
> _CURSOR_SIGN_Y_SHIFT;
> >
> > +	plane->x_hot = vgpu_vreg_t(vgpu, vgtif_reg(cursor_x_hot));
> > +	plane->y_hot = vgpu_vreg_t(vgpu, vgtif_reg(cursor_y_hot));
> >  	return 0;
> >  }
> >
> > diff --git a/drivers/gpu/drm/i915/gvt/handlers.c
> > b/drivers/gpu/drm/i915/gvt/handlers.c
> > index a33c1c3e..2c824a9 100644
> > --- a/drivers/gpu/drm/i915/gvt/handlers.c
> > +++ b/drivers/gpu/drm/i915/gvt/handlers.c
> > @@ -1201,8 +1201,8 @@ static int pvinfo_mmio_write(struct intel_vgpu
> *vgpu, unsigned int offset,
> >  		ret = handle_g2v_notification(vgpu, data);
> >  		break;
> >  	/* add xhot and yhot to handled list to avoid error log */
> > -	case 0x78830:
> > -	case 0x78834:
> > +	case _vgtif_reg(cursor_x_hot):
> > +	case _vgtif_reg(cursor_y_hot):
> >  	case _vgtif_reg(pdp[0].lo):
> >  	case _vgtif_reg(pdp[0].hi):
> >  	case _vgtif_reg(pdp[1].lo):
> > diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c
> > b/drivers/gpu/drm/i915/gvt/vgpu.c index 2e0a02a..bf75300 100644
> > --- a/drivers/gpu/drm/i915/gvt/vgpu.c
> > +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
> > @@ -58,6 +58,9 @@ void populate_pvinfo_page(struct intel_vgpu *vgpu)
> >
> >  	vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.fence_num)) =
> > vgpu_fence_sz(vgpu);
> >
> > +	vgpu_vreg_t(vgpu, vgtif_reg(cursor_x_hot)) = UINT_MAX;
> > +	vgpu_vreg_t(vgpu, vgtif_reg(cursor_y_hot)) = UINT_MAX;
> > +
> >  	gvt_dbg_core("Populate PVINFO PAGE for vGPU %d\n", vgpu->id);
> >  	gvt_dbg_core("aperture base [GMADR] 0x%llx size 0x%llx\n",
> >  		vgpu_aperture_gmadr_base(vgpu), vgpu_aperture_sz(vgpu));
> diff --git
> > a/drivers/gpu/drm/i915/i915_pvinfo.h
> > b/drivers/gpu/drm/i915/i915_pvinfo.h
> > index 195203f..d61914a 100644
> > --- a/drivers/gpu/drm/i915/i915_pvinfo.h
> > +++ b/drivers/gpu/drm/i915/i915_pvinfo.h
> > @@ -93,7 +93,10 @@ struct vgt_if {
> >  	u32 rsv5[4];
> >
> >  	u32 g2v_notify;
> > -	u32 rsv6[7];
> > +	u32 rsv6[5];
> > +
> > +	u32 cursor_x_hot;
> > +	u32 cursor_y_hot;
> >
> >  	struct {
> >  		u32 lo;
> > --
> > 2.7.4
> >
> 
> --
> Open Source Technology Center, Intel ltd.
> 
> $gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
Martin Peres April 17, 2018, 8:17 a.m. UTC | #3
On 16/04/18 14:45, Patchwork wrote:
> == Series Details ==
> 
> Series: drm/i915/gvt: Deliver guest cursor hotspot info (rev2)
> URL   : https://patchwork.freedesktop.org/series/41727/
> State : failure
> 
> == Summary ==
> 
> = CI Bug Log - changes from CI_DRM_4054_full -> Patchwork_8694_full =
> 
> == Summary - FAILURE ==
> 
>   Serious unknown changes coming with Patchwork_8694_full absolutely need to be
>   verified manually.
>   
>   If you think the reported changes have nothing to do with the changes
>   introduced in Patchwork_8694_full, please notify your bug team to allow them
>   to document this new failure mode, which will reduce false positives in CI.
> 
>   External URL: https://patchwork.freedesktop.org/api/1.0/series/41727/revisions/2/mbox/
> 
> == Possible new issues ==
> 
>   Here are the unknown changes that may have been introduced in Patchwork_8694_full:
> 
>   === IGT changes ===
> 
>     ==== Possible regressions ====
> 
>     igt@gem_exec_store@pages-vebox:
>       shard-hsw:          PASS -> FAIL

Known issue: https://bugs.freedesktop.org/show_bug.cgi?id=100007

> 
>     
>     ==== Warnings ====
> 
>     igt@gem_mocs_settings@mocs-rc6-ctx-dirty-render:
>       shard-kbl:          SKIP -> PASS +1
> 
>     
> == Known issues ==
> 
>   Here are the changes found in Patchwork_8694_full that come from known issues:
> 
>   === IGT changes ===
> 
>     ==== Issues hit ====
> 
>     igt@kms_cursor_crc@cursor-256x256-rapid-movement:
>       shard-kbl:          PASS -> INCOMPLETE (fdo#103665)
> 
>     igt@kms_flip@2x-dpms-vs-vblank-race:
>       shard-hsw:          PASS -> FAIL (fdo#103060)
> 
>     igt@kms_flip@plain-flip-fb-recreate:
>       shard-hsw:          PASS -> FAIL (fdo#100368)
> 
>     igt@kms_rotation_crc@sprite-rotation-180:
>       shard-snb:          PASS -> FAIL (fdo#103925)
> 
>     igt@kms_setmode@basic:
>       shard-apl:          PASS -> FAIL (fdo#99912)
> 
>     igt@kms_sysfs_edid_timing:
>       shard-apl:          PASS -> WARN (fdo#100047)
> 
>     
>     ==== Possible fixes ====
> 
>     igt@kms_cursor_legacy@flip-vs-cursor-toggle:
>       shard-hsw:          FAIL (fdo#102670) -> PASS
> 
>     igt@kms_flip@wf_vblank-ts-check:
>       shard-hsw:          FAIL (fdo#103928) -> PASS
> 
>     
>   fdo#100047 https://bugs.freedesktop.org/show_bug.cgi?id=100047
>   fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
>   fdo#102670 https://bugs.freedesktop.org/show_bug.cgi?id=102670
>   fdo#103060 https://bugs.freedesktop.org/show_bug.cgi?id=103060
>   fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
>   fdo#103925 https://bugs.freedesktop.org/show_bug.cgi?id=103925
>   fdo#103928 https://bugs.freedesktop.org/show_bug.cgi?id=103928
>   fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
> 
> 
> == Participating hosts (6 -> 4) ==
> 
>   Missing    (2): shard-glk shard-glkb 
> 
> 
> == Build changes ==
> 
>     * Linux: CI_DRM_4054 -> Patchwork_8694
> 
>   CI_DRM_4054: a0e39233b88795009de32094efa8a2135f34338f @ git://anongit.freedesktop.org/gfx-ci/linux
>   IGT_4430: 8b77704db49167f7ebfd1c470d9c129d3b862cb6 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
>   Patchwork_8694: a117fc1be218228651a8f966f1106912287f3135 @ git://anongit.freedesktop.org/gfx-ci/linux
>   piglit_4430: 93b35926a150e318439d2505901288594b3548f5 @ git://anongit.freedesktop.org/piglit
> 
> == Logs ==
> 
> For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_8694/shards.html
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/gvt/dmabuf.c b/drivers/gpu/drm/i915/gvt/dmabuf.c
index 6f4f8e9..a7c7082 100644
--- a/drivers/gpu/drm/i915/gvt/dmabuf.c
+++ b/drivers/gpu/drm/i915/gvt/dmabuf.c
@@ -192,6 +192,14 @@  static struct drm_i915_gem_object *vgpu_create_gem(struct drm_device *dev,
 	return obj;
 }
 
+static bool validate_hotspot(struct intel_vgpu_cursor_plane_format *c)
+{
+	if (c && (c->x_hot <= c->width) && (c->y_hot <= c->height))
+		return true;
+	else
+		return false;
+}
+
 static int vgpu_get_plane_info(struct drm_device *dev,
 		struct intel_vgpu *vgpu,
 		struct intel_vgpu_fb_info *info,
@@ -229,12 +237,14 @@  static int vgpu_get_plane_info(struct drm_device *dev,
 		info->x_pos = c.x_pos;
 		info->y_pos = c.y_pos;
 
-		/* The invalid cursor hotspot value is delivered to host
-		 * until we find a way to get the cursor hotspot info of
-		 * guest OS.
-		 */
-		info->x_hot = UINT_MAX;
-		info->y_hot = UINT_MAX;
+		if (validate_hotspot(&c)) {
+			info->x_hot = c.x_hot;
+			info->y_hot = c.y_hot;
+		} else {
+			info->x_hot = UINT_MAX;
+			info->y_hot = UINT_MAX;
+		}
+
 		info->size = (((info->stride * c.height * c.bpp) / 8)
 				+ (PAGE_SIZE - 1)) >> PAGE_SHIFT;
 	} else {
diff --git a/drivers/gpu/drm/i915/gvt/fb_decoder.c b/drivers/gpu/drm/i915/gvt/fb_decoder.c
index 1c12068..5e7468b 100644
--- a/drivers/gpu/drm/i915/gvt/fb_decoder.c
+++ b/drivers/gpu/drm/i915/gvt/fb_decoder.c
@@ -36,6 +36,7 @@ 
 #include <uapi/drm/drm_fourcc.h>
 #include "i915_drv.h"
 #include "gvt.h"
+#include "i915_pvinfo.h"
 
 #define PRIMARY_FORMAT_NUM	16
 struct pixel_format {
@@ -384,6 +385,8 @@  int intel_vgpu_decode_cursor_plane(struct intel_vgpu *vgpu,
 	plane->y_pos = (val & _CURSOR_POS_Y_MASK) >> _CURSOR_POS_Y_SHIFT;
 	plane->y_sign = (val & _CURSOR_SIGN_Y_MASK) >> _CURSOR_SIGN_Y_SHIFT;
 
+	plane->x_hot = vgpu_vreg_t(vgpu, vgtif_reg(cursor_x_hot));
+	plane->y_hot = vgpu_vreg_t(vgpu, vgtif_reg(cursor_y_hot));
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index a33c1c3e..2c824a9 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -1201,8 +1201,8 @@  static int pvinfo_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
 		ret = handle_g2v_notification(vgpu, data);
 		break;
 	/* add xhot and yhot to handled list to avoid error log */
-	case 0x78830:
-	case 0x78834:
+	case _vgtif_reg(cursor_x_hot):
+	case _vgtif_reg(cursor_y_hot):
 	case _vgtif_reg(pdp[0].lo):
 	case _vgtif_reg(pdp[0].hi):
 	case _vgtif_reg(pdp[1].lo):
diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
index 2e0a02a..bf75300 100644
--- a/drivers/gpu/drm/i915/gvt/vgpu.c
+++ b/drivers/gpu/drm/i915/gvt/vgpu.c
@@ -58,6 +58,9 @@  void populate_pvinfo_page(struct intel_vgpu *vgpu)
 
 	vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.fence_num)) = vgpu_fence_sz(vgpu);
 
+	vgpu_vreg_t(vgpu, vgtif_reg(cursor_x_hot)) = UINT_MAX;
+	vgpu_vreg_t(vgpu, vgtif_reg(cursor_y_hot)) = UINT_MAX;
+
 	gvt_dbg_core("Populate PVINFO PAGE for vGPU %d\n", vgpu->id);
 	gvt_dbg_core("aperture base [GMADR] 0x%llx size 0x%llx\n",
 		vgpu_aperture_gmadr_base(vgpu), vgpu_aperture_sz(vgpu));
diff --git a/drivers/gpu/drm/i915/i915_pvinfo.h b/drivers/gpu/drm/i915/i915_pvinfo.h
index 195203f..d61914a 100644
--- a/drivers/gpu/drm/i915/i915_pvinfo.h
+++ b/drivers/gpu/drm/i915/i915_pvinfo.h
@@ -93,7 +93,10 @@  struct vgt_if {
 	u32 rsv5[4];
 
 	u32 g2v_notify;
-	u32 rsv6[7];
+	u32 rsv6[5];
+
+	u32 cursor_x_hot;
+	u32 cursor_y_hot;
 
 	struct {
 		u32 lo;