lkml.org 
[lkml]   [2014]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16.y-ckt 030/168] drm/i915: Handle failure to kick out a conflicting fb driver
    Date
    3.16.7-ckt3 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Chris Wilson <chris@chris-wilson.co.uk>

    commit f96de58fc7e7d3d717c7c63975c3b896c906b5e3 upstream.

    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    drivers/gpu/drm/i915/i915_dma.c | 18 +++++++++++++-----
    1 file changed, 13 insertions(+), 5 deletions(-)

    diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
    index d44344140627..0663fb4fa606 100644
    --- a/drivers/gpu/drm/i915/i915_dma.c
    +++ b/drivers/gpu/drm/i915/i915_dma.c
    @@ -1425,15 +1425,16 @@ void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
    }

    #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 pci_dev *pdev = dev_priv->dev->pdev;
    bool primary;
    + int ret;

    ap = alloc_apertures(1);
    if (!ap)
    - return;
    + return -ENOMEM;

    ap->ranges[0].base = dev_priv->gtt.mappable_base;
    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)
    primary =
    pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;

    - remove_conflicting_framebuffers(ap, "inteldrmfb", primary);
    + ret = remove_conflicting_framebuffers(ap, "inteldrmfb", primary);

    kfree(ap);
    +
    + return ret;
    }
    #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

    @@ -1664,7 +1668,11 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
    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);
    --
    2.1.3


    \
     
     \ /
      Last update: 2014-12-15 16:41    [W:3.087 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site