Display switch logic is added to notify the vgt mediator that current vgpu have a valid surface to show. It does so by writing the display_ready field in PV INFO page, and then will be handled in vgt mediator. This is useful to avoid trickiness when the VM's framebuffer is being accessed in the middle of VM modesetting, e.g. compositing the framebuffer in the host side. v2: - move the notification code outside the 'else' in load sequence - remove the notification code in intel_crtc_set_config() Signed-off-by: Yu Zhang <yu.c.zhang@xxxxxxxxxxxxxxx> Signed-off-by: Jike Song <jike.song@xxxxxxxxx> Signed-off-by: Zhiyuan Lv <zhiyuan.lv@xxxxxxxxx> --- drivers/gpu/drm/i915/i915_dma.c | 11 +++++++++++ drivers/gpu/drm/i915/i915_vgt_if.h | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 85d14e1..3a42b11 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -35,6 +35,7 @@ #include <drm/drm_legacy.h> #include "intel_drv.h" #include <drm/i915_drm.h> +#include "i915_vgt_if.h" #include "i915_drv.h" #include "i915_trace.h" #include <linux/pci.h> @@ -1780,6 +1781,16 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) dev_priv->ums.mm_suspended = 1; } + if (intel_vgpu_active(dev)) { + /* + * Notify a valid surface after modesetting, + * when running inside a VM. + */ + struct drm_i915_private *dev_priv = to_i915(dev); + + I915_WRITE(vgtif_reg(display_ready), VGT_DRV_DISPLAY_READY); + } + i915_setup_sysfs(dev); if (INTEL_INFO(dev)->num_pipes) { diff --git a/drivers/gpu/drm/i915/i915_vgt_if.h b/drivers/gpu/drm/i915/i915_vgt_if.h index fa45d28..633f98a 100644 --- a/drivers/gpu/drm/i915/i915_vgt_if.h +++ b/drivers/gpu/drm/i915/i915_vgt_if.h @@ -82,4 +82,12 @@ struct vgt_if { #define vgtif_reg(x) \ (VGT_PVINFO_PAGE + (long)&((struct vgt_if *) NULL)->x) +/* + * The information set by the guest gfx driver, through the display_ready field + */ +enum vgt_display_status { + VGT_DRV_DISPLAY_NOT_READY = 0, + VGT_DRV_DISPLAY_READY, /* ready for display switch */ +}; + #endif /* _I915_VGT_IF_H_ */ -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx