From 26d593b3b3255a57536aabc5cdf0f57061b6d888 Mon Sep 17 00:00:00 2001 From: Konrad Rzeszutek Wilk Date: Wed, 23 Jul 2014 16:41:47 -0400 Subject: [PATCH 3/3] i915/drm/xen: If we are running under virtualized env we don't need the bridge. So lets check if the subsystem tells us that we are under Xen and if so ignore the bridge. Signed-off-by: Konrad Rzeszutek Wilk --- drivers/gpu/drm/i915/i915_dma.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 6c65639..70bd61f 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -1123,6 +1123,11 @@ static int i915_set_status_page(struct drm_device *dev, void *data, static int i915_get_bridge_dev(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; + struct pci_dev *pch = dev->pdev; + + /* If we are virtualized we don't need the bridge. */ + if (pch->subsystem_vendor == PCI_VENDOR_ID_XEN) + return 0; dev_priv->bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0, 0)); if (!dev_priv->bridge_dev) { @@ -1199,6 +1204,9 @@ intel_setup_mchbar(struct drm_device *dev) dev_priv->mchbar_need_disable = false; + if (!dev_priv->bridge_dev) + return; + if (IS_I915G(dev) || IS_I915GM(dev)) { pci_read_config_dword(dev_priv->bridge_dev, DEVEN_REG, &temp); enabled = !!(temp & DEVEN_MCHBAR_EN); @@ -1801,7 +1809,8 @@ out_regs: intel_uncore_fini(dev); pci_iounmap(dev->pdev, dev_priv->regs); put_bridge: - pci_dev_put(dev_priv->bridge_dev); + if (dev_priv->bridge_dev) + pci_dev_put(dev_priv->bridge_dev); free_priv: if (dev_priv->slab) kmem_cache_destroy(dev_priv->slab); @@ -1903,7 +1912,8 @@ int i915_driver_unload(struct drm_device *dev) if (dev_priv->slab) kmem_cache_destroy(dev_priv->slab); - pci_dev_put(dev_priv->bridge_dev); + if (dev_priv->bridge_dev) + pci_dev_put(dev_priv->bridge_dev); kfree(dev_priv); return 0; -- 1.9.3