Commit 1b2e3ec2 authored by Chris Wilson's avatar Chris Wilson Committed by Luis Henriques

drm/i915: Handle failure to kick out a conflicting fb driver

commit f96de58f upstream.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarLuis Henriques <luis.henriques@canonical.com>
parent 9b4367fe
...@@ -1425,15 +1425,16 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master) ...@@ -1425,15 +1425,16 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
} }
#if IS_ENABLED(CONFIG_FB) #if IS_ENABLED(CONFIG_FB)
static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) static int i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
{ {
struct apertures_struct *ap; struct apertures_struct *ap;
struct pci_dev *pdev = dev_priv->dev->pdev; struct pci_dev *pdev = dev_priv->dev->pdev;
bool primary; bool primary;
int ret;
ap = alloc_apertures(1); ap = alloc_apertures(1);
if (!ap) if (!ap)
return; return -ENOMEM;
ap->ranges[0].base = dev_priv->gtt.mappable_base; ap->ranges[0].base = dev_priv->gtt.mappable_base;
ap->ranges[0].size = dev_priv->gtt.mappable_end; ap->ranges[0].size = dev_priv->gtt.mappable_end;
...@@ -1441,13 +1442,16 @@ static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) ...@@ -1441,13 +1442,16 @@ static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
primary = primary =
pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW; pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
remove_conflicting_framebuffers(ap, "inteldrmfb", primary); ret = remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
kfree(ap); kfree(ap);
return ret;
} }
#else #else
static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv) static int i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
{ {
return 0;
} }
#endif #endif
...@@ -1664,7 +1668,11 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) ...@@ -1664,7 +1668,11 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
goto out_gtt; goto out_gtt;
} }
i915_kick_out_firmware_fb(dev_priv); ret = i915_kick_out_firmware_fb(dev_priv);
if (ret) {
DRM_ERROR("failed to remove conflicting framebuffer drivers\n");
goto out_gtt;
}
} }
pci_set_master(dev->pdev); pci_set_master(dev->pdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment