[Intel-gfx] [PATCH] drm/i915/vgpu: Neuter forcewakes for VGPU more thouroughly
Xu, Terrence
terrence.xu at intel.com
Fri Mar 17 09:42:56 UTC 2017
>-----Original Message-----
>From: Tvrtko Ursulin [mailto:tvrtko.ursulin at linux.intel.com]
>Sent: Friday, March 17, 2017 5:30 PM
>To: Zhenyu Wang <zhenyuw at linux.intel.com>
>Cc: Chris Wilson <chris at chris-wilson.co.uk>; Tvrtko Ursulin
><tursulin at ursulin.net>; Intel-gfx at lists.freedesktop.org; Ursulin, Tvrtko
><tvrtko.ursulin at intel.com>; Li, Weinan Z <weinan.z.li at intel.com>; Xu,
>Terrence <terrence.xu at intel.com>
>Subject: Re: [Intel-gfx] [PATCH] drm/i915/vgpu: Neuter forcewakes for VGPU
>more thouroughly
>
>
>Hi,
>
>On 13/03/2017 09:37, Zhenyu Wang wrote:
>> On 2017.03.13 09:26:26 +0000, Tvrtko Ursulin wrote:
>>>
>>> On 10/03/2017 10:09, Chris Wilson wrote:
>>>> On Fri, Mar 10, 2017 at 09:57:47AM +0000, Tvrtko Ursulin wrote:
>>>>> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>>>>
>>>>> If we avoid initializing forcewake domains when running as a guest,
>>>>> and also use gen2 mmio accessors in that case, we can avoid the
>>>>> timer traffic and any looping through the forcewake code which is
>>>>> currently just so it can end up in the no-op forcewake
>>>>> implementation.
>>>>>
>>>>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>>>>> Cc: Weinan Li <weinan.z.li at intel.com>
>>>>> Cc: Chris Wilson <chris at chris-wilson.co.uk>
>>>>> ---
>>>>> drivers/gpu/drm/i915/intel_uncore.c | 76
>>>>> +++++++++++++------------------------
>>>>> 1 file changed, 27 insertions(+), 49 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/i915/intel_uncore.c
>>>>> b/drivers/gpu/drm/i915/intel_uncore.c
>>>>> index 71b9b387ad04..09f5f02d7901 100644
>>>>> --- a/drivers/gpu/drm/i915/intel_uncore.c
>>>>> +++ b/drivers/gpu/drm/i915/intel_uncore.c
>>>>> @@ -138,13 +138,6 @@ fw_domains_put(struct drm_i915_private
>>>>> *dev_priv, enum forcewake_domains fw_doma }
>>>>>
>>>>> 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; @@ -1187,7 +1180,7
>@@
>>>>> static void fw_domain_init(struct drm_i915_private *dev_priv,
>>>>>
>>>>> static void intel_uncore_fw_domains_init(struct drm_i915_private
>>>>> *dev_priv) {
>>>>> - if (INTEL_INFO(dev_priv)->gen <= 5)
>>>>> + if (INTEL_GEN(dev_priv) <= 5 || intel_vgpu_active(dev_priv))
>>>>
>>>> Make these separate ifs, they aren't semantically related so be verbose.
>>>>
>>>>> return;
>>>>>
>>>>> if (IS_GEN9(dev_priv)) {
>>>>> @@ -1273,11 +1266,6 @@ static void
>intel_uncore_fw_domains_init(struct drm_i915_private *dev_priv)
>>>>> 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); } @@ -1327,22
>>>>> +1315,22 @@ void intel_uncore_init(struct drm_i915_private
>*dev_priv)
>>>>> dev_priv->uncore.pmic_bus_access_nb.notifier_call =
>>>>> i915_pmic_bus_access_notifier;
>>>>>
>>>>> - switch (INTEL_INFO(dev_priv)->gen) {
>>>>> - default:
>>>>> - case 9:
>>>>> - ASSIGN_FW_DOMAINS_TABLE(__gen9_fw_ranges);
>>>>> - ASSIGN_WRITE_MMIO_VFUNCS(fwtable);
>>>>> - ASSIGN_READ_MMIO_VFUNCS(fwtable);
>>>>> - if (HAS_DECOUPLED_MMIO(dev_priv)) {
>>>>> - dev_priv->uncore.funcs.mmio_readl =
>>>>> - gen9_decoupled_read32;
>>>>> - dev_priv->uncore.funcs.mmio_readq =
>>>>> - gen9_decoupled_read64;
>>>>> - dev_priv->uncore.funcs.mmio_writel =
>>>>> - gen9_decoupled_write32;
>>>>> + if (IS_GEN(dev_priv, 2, 4) || intel_vgpu_active(dev_priv)) {
>>>>
>>>> Ok, this doesn't look too bad.
>>>>
>>>> Do the gvt-g hosts in CI now provide coverage for us of vgpu paths?
>>>
>>> No idea.
>>>
>>> Adding Zhenyu. So this patch avoids burning CPU cycles in guests and
>>> scheduling timers when all of that ends up in the dummy/no-op
>>> forcewake implementation.
>>>
>>> If interesting to you, would it be easy for you to test it or how
>>> should we proceed?
>>>
>>
>> Patch looks fine to me. I can apply it for our QA testing if required.
>
>Were you perhaps able to smoke test this one?
Hi Ursulin, we have verified your patch in guest, no regression be found.
Tested-by: Terrence Xu <terrence.xu at intel.com>
>Regards,
>
>Tvrtko
More information about the Intel-gfx
mailing list