[Intel-gfx] [PATCH] Fix intel_detect_pch() to work in xen environment.
Daniel Vetter
daniel at ffwll.ch
Wed Jun 19 08:01:57 CEST 2013
Can you please resubmit this as a proper patch with a committ message,
signed-off-by line and everything else (see
Documentation/SubmittingPatches).
-Daniel
On Tue, Jun 18, 2013 at 2:54 PM, G.R. <firemeteor at users.sourceforge.net> wrote:
> On Sun, Dec 23, 2012 at 2:51 PM, G.R. <firemeteor at users.sourceforge.net> wrote:
>>>> Hi Jesse, I think I need to resend the patch with proper comment to
>>>> have it formally accepted.
>>>> Any guide line for formal patch submission? Do I need to start a
>>>> separate thread?
>>>
>>> No, just cc Daniel Vetter.
>>>
>>> --
>>> Jesse Barnes, Intel Open Source Technology Center
>>
>> Thanks,
>> Resend with updated patch && Daniel involved.
>> Also include the background info for easy reading.
>>
>> In XEN HVM guest, there is always an emulated PIIX3 ISA bridge on slot 01.0.
>> This shadows the PCH ISA bridge on 1f.0 with the current
>> intel_detect_pch() implementation.
>> The issue can be easily solved by looping through all the ISA bridges
>> until the first match is found, instead of just check against the
>> first one.
>>
>
> This seems to have lost in the list. Retry it again with latest
> torvalds' kernel:
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
> index a2e4953..e38fa86 100644
> --- a/drivers/gpu/drm/i915/i915_drv.c
> +++ b/drivers/gpu/drm/i915/i915_drv.c
> @@ -454,11 +454,18 @@ void intel_detect_pch(struct drm_device *dev)
> * make graphics device passthrough work easy for VMM, that only
> * need to expose ISA bridge to let driver know the real hardware
> * underneath. This is a requirement from virtualization team.
> + *
> + * In some virtualized environments (e.g. XEN), there is irrelevant
> + * ISA bridge in the system. To work reliably, we should scan trhough
> + * all the ISA bridge devices and check for the first match, instead
> + * of only checking the first one.
> */
> pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
> - if (pch) {
> + while (pch) {
> + struct pci_dev * curr = pch;
> if (pch->vendor == PCI_VENDOR_ID_INTEL) {
> unsigned short id;
> + unsigned found = 1;
> id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
> dev_priv->pch_id = id;
>
> @@ -490,10 +497,20 @@ void intel_detect_pch(struct drm_device *dev)
> DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
> WARN_ON(!IS_HASWELL(dev));
> WARN_ON(!IS_ULT(dev));
> + } else {
> + found = 0;
> + }
> + if (found) {
> + BUG_ON(dev_priv->num_pch_pll > I915_NUM_PLLS);
> + pci_dev_put(pch);
> + break;
> }
> - BUG_ON(dev_priv->num_pch_pll > I915_NUM_PLLS);
> }
> - pci_dev_put(pch);
> + pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, curr);
> + pci_dev_put(curr);
> + }
> + if (!pch) {
> + DRM_DEBUG_KMS("No PCH found?\n");
> }
> }
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the Intel-gfx
mailing list