lkml.org 
[lkml]   [2015]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 129/221] drm/vmwgfx: Reorder device takedown somewhat
    3.2.69-rc1 review patch.  If anyone has any objections, please let me know.

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

    From: Thomas Hellstrom <thellstrom@vmware.com>

    commit 3458390b9f0ba784481d23134798faee27b5f16f upstream.

    To take down the MOB and GMR memory types, the driver may have to issue
    fence objects and thus make sure that the fence manager is taken down
    after those memory types.
    Reorder device init accordingly.

    Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
    Reviewed-by: Sinclair Yeh <syeh@vmware.com>
    [bwh: Backported to 3.2:
    - Adjust context
    - Only the GMR memory type is used]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 77 +++++++++++++++++++------------------
    1 file changed, 40 insertions(+), 37 deletions(-)

    --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
    +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
    @@ -503,21 +503,6 @@ static int vmw_driver_load(struct drm_de
    goto out_err1;
    }

    - ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM,
    - (dev_priv->vram_size >> PAGE_SHIFT));
    - if (unlikely(ret != 0)) {
    - DRM_ERROR("Failed initializing memory manager for VRAM.\n");
    - goto out_err2;
    - }
    -
    - dev_priv->has_gmr = true;
    - if (ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_GMR,
    - dev_priv->max_gmr_ids) != 0) {
    - DRM_INFO("No GMR memory available. "
    - "Graphics memory resources are very limited.\n");
    - dev_priv->has_gmr = false;
    - }
    -
    dev_priv->mmio_mtrr = drm_mtrr_add(dev_priv->mmio_start,
    dev_priv->mmio_size, DRM_MTRR_WC);

    @@ -570,6 +555,22 @@ static int vmw_driver_load(struct drm_de
    if (unlikely(dev_priv->fman == NULL))
    goto out_no_fman;

    +
    + ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM,
    + (dev_priv->vram_size >> PAGE_SHIFT));
    + if (unlikely(ret != 0)) {
    + DRM_ERROR("Failed initializing memory manager for VRAM.\n");
    + goto out_no_vram;
    + }
    +
    + dev_priv->has_gmr = true;
    + if (ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_GMR,
    + dev_priv->max_gmr_ids) != 0) {
    + DRM_INFO("No GMR memory available. "
    + "Graphics memory resources are very limited.\n");
    + dev_priv->has_gmr = false;
    + }
    +
    /* Need to start the fifo to check if we can do screen objects */
    ret = vmw_3d_resource_inc(dev_priv, true);
    if (unlikely(ret != 0))
    @@ -620,6 +621,10 @@ out_no_kms:
    vmw_3d_resource_dec(dev_priv, false);
    }
    out_no_fifo:
    + if (dev_priv->has_gmr)
    + (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
    + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
    +out_no_vram:
    vmw_fence_manager_takedown(dev_priv->fman);
    out_no_fman:
    if (dev_priv->stealth)
    @@ -633,10 +638,6 @@ out_err4:
    out_err3:
    drm_mtrr_del(dev_priv->mmio_mtrr, dev_priv->mmio_start,
    dev_priv->mmio_size, DRM_MTRR_WC);
    - if (dev_priv->has_gmr)
    - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
    - (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
    -out_err2:
    (void)ttm_bo_device_release(&dev_priv->bdev);
    out_err1:
    vmw_ttm_global_release(dev_priv);
    @@ -665,6 +666,11 @@ static int vmw_driver_unload(struct drm_
    }
    vmw_kms_close(dev_priv);
    vmw_overlay_close(dev_priv);
    +
    + if (dev_priv->has_gmr)
    + (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
    + (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
    +
    vmw_fence_manager_takedown(dev_priv->fman);
    if (dev_priv->stealth)
    pci_release_region(dev->pdev, 2);
    @@ -675,9 +681,6 @@ static int vmw_driver_unload(struct drm_
    iounmap(dev_priv->mmio_virt);
    drm_mtrr_del(dev_priv->mmio_mtrr, dev_priv->mmio_start,
    dev_priv->mmio_size, DRM_MTRR_WC);
    - if (dev_priv->has_gmr)
    - (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR);
    - (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM);
    (void)ttm_bo_device_release(&dev_priv->bdev);
    vmw_ttm_global_release(dev_priv);
    idr_destroy(&dev_priv->surface_idr);


    \
     
     \ /
      Last update: 2015-05-05 04:01    [W:4.235 / U:0.452 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site