Host maintian the hardware's forcewake state, guest don't need and also can't control it. Although vgpu_read/write bypass forcewake_get/put in MMIO read/write, but still have separate path called by "intel_uncore_forcewake_get/put" and "intel_uncore_forcewake_get/put__locked". Unnecessary MMIO access in guest waste much CPU cost. Since we full virtualize the MMIO, just noop the forcewake get/put. Signed-off-by: Weinan Li <weinan.z.li@xxxxxxxxx> --- drivers/gpu/drm/i915/intel_uncore.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index abe0888..9fad4de 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c @@ -133,6 +133,13 @@ } static void +vgpu_fw_domains_nop(struct drm_i915_private *dev_priv, + enum forcewake_domains fw_domains) +{ + /* Guest driver doesn't need to takes care forcewake. */ +} + +static void fw_domains_posting_read(struct drm_i915_private *dev_priv) { struct intel_uncore_forcewake_domain *d; @@ -1374,6 +1381,12 @@ static void intel_uncore_fw_domains_init(struct drm_i915_private *dev_priv) fw_domain_init(dev_priv, FW_DOMAIN_ID_RENDER, FORCEWAKE, FORCEWAKE_ACK); } + if (intel_vgpu_active(dev_priv)) { + dev_priv->uncore.funcs.force_wake_get = + vgpu_fw_domains_nop; + dev_priv->uncore.funcs.force_wake_put = + vgpu_fw_domains_nop; + } /* All future platforms are expected to require complex power gating */ WARN_ON(dev_priv->uncore.fw_domains == 0); -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx