[Intel-gfx] [PATCH 06/13 v2] drm/i915: Remove use of gtt_mappable_entries

Rodrigo Vivi rodrigo.vivi at gmail.com
Thu Jan 17 14:28:53 CET 2013


Reviewed-by: Rodrigo Vivi <rodrigo.vivi at gmail.com>

On Wed, Jan 16, 2013 at 4:22 PM, Ben Widawsky <ben at bwidawsk.net> wrote:
> Mappable_end, ie. size is almost always what you want as opposed to the
> number of entries. Since we already have that information, we can scrap
> the number of entries and only calculate it when needed.
>
> If gtt_start is !0, this will have slightly different behavior. This
> difference can only occur in DRI1, and exists when we try to kick out
> the firmware fb. The new code seems like a bugfix to me.
>
> The other case where we've changed the behavior is during init we check
> the mappable region against our current known upper and lower limits
> (64MB, and 512MB). This now matches the comment, and makes things more
> convenient after removing gtt_mappable_entries.
>
> Also worth noting is the setting of mappable_end is taken out of setup
> because we do it earlier now in the DRI2 case and therefore need to add
> that tiny hunk to support the DRI1 IOCTL.
>
> v2: Move up mappable end to before legacy AGP init
>
> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
> ---
>  drivers/gpu/drm/i915/i915_dma.c     |  8 ++++----
>  drivers/gpu/drm/i915/i915_gem.c     |  1 +
>  drivers/gpu/drm/i915/i915_gem_gtt.c | 15 +++++++--------
>  drivers/gpu/drm/i915/intel_fb.c     |  3 +--
>  4 files changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> index b8f42e0..03a97d1 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -1418,8 +1418,8 @@ static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
>                 return;
>
>         ap->ranges[0].base = dev_priv->gtt.mappable_base;
> -       ap->ranges[0].size =
> -               dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
> +       ap->ranges[0].size = dev_priv->gtt.mappable_end - dev_priv->gtt.start;
> +
>         primary =
>                 pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
>
> @@ -1533,7 +1533,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
>                 goto put_gmch;
>         }
>
> -       aperture_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
> +       aperture_size = dev_priv->gtt.mappable_end;
>
>         dev_priv->gtt.mappable =
>                 io_mapping_create_wc(dev_priv->gtt.mappable_base,
> @@ -1690,7 +1690,7 @@ int i915_driver_unload(struct drm_device *dev)
>         if (dev_priv->mm.gtt_mtrr >= 0) {
>                 mtrr_del(dev_priv->mm.gtt_mtrr,
>                          dev_priv->gtt.mappable_base,
> -                        dev_priv->mm.gtt->gtt_mappable_entries * PAGE_SIZE);
> +                        dev_priv->gtt.mappable_end);
>                 dev_priv->mm.gtt_mtrr = -1;
>         }
>
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 4ec66a9..e84c9f9 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -166,6 +166,7 @@ i915_gem_init_ioctl(struct drm_device *dev, void *data,
>         mutex_lock(&dev->struct_mutex);
>         i915_gem_setup_global_gtt(dev, args->gtt_start, args->gtt_end,
>                                   args->gtt_end);
> +       dev_priv->gtt.mappable_end = args->gtt_end;
>         mutex_unlock(&dev->struct_mutex);
>
>         return 0;
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index c5fd35b..f10aa87 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -557,7 +557,6 @@ void i915_gem_setup_global_gtt(struct drm_device *dev,
>         }
>
>         dev_priv->gtt.start = start;
> -       dev_priv->gtt.mappable_end = mappable_end;
>         dev_priv->gtt.total = end - start;
>
>         /* Clear any non-preallocated blocks */
> @@ -596,7 +595,7 @@ void i915_gem_init_global_gtt(struct drm_device *dev)
>         int ret;
>
>         gtt_size = dev_priv->mm.gtt->gtt_total_entries << PAGE_SHIFT;
> -       mappable_size = dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
> +       mappable_size = dev_priv->gtt.mappable_end;
>
>         if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
>                 /* PPGTT pdes are stolen from global gtt ptes, so shrink the
> @@ -692,6 +691,7 @@ int i915_gem_gtt_init(struct drm_device *dev)
>         int ret;
>
>         dev_priv->gtt.mappable_base = pci_resource_start(dev->pdev, 2);
> +       dev_priv->gtt.mappable_end = pci_resource_len(dev->pdev, 2);
>
>         /* On modern platforms we need not worry ourself with the legacy
>          * hostbridge query stuff. Skip it entirely
> @@ -731,14 +731,13 @@ int i915_gem_gtt_init(struct drm_device *dev)
>         else
>                 dev_priv->mm.gtt->stolen_size = gen7_get_stolen_size(snb_gmch_ctl);
>
> -       dev_priv->mm.gtt->gtt_mappable_entries = pci_resource_len(dev->pdev, 2) >> PAGE_SHIFT;
>         /* 64/512MB is the current min/max we actually know of, but this is just a
>          * coarse sanity check.
>          */
> -       if ((dev_priv->mm.gtt->gtt_mappable_entries >> 8) < 64 ||
> -           dev_priv->mm.gtt->gtt_mappable_entries > dev_priv->mm.gtt->gtt_total_entries) {
> -               DRM_ERROR("Unknown GMADR entries (%d)\n",
> -                         dev_priv->mm.gtt->gtt_mappable_entries);
> +       if ((dev_priv->gtt.mappable_end < (64<<20) ||
> +           (dev_priv->gtt.mappable_end > (512<<20)))) {
> +               DRM_ERROR("Unknown GMADR size (%lx)\n",
> +                         dev_priv->gtt.mappable_end);
>                 ret = -ENXIO;
>                 goto err_out;
>         }
> @@ -760,7 +759,7 @@ int i915_gem_gtt_init(struct drm_device *dev)
>
>         /* GMADR is the PCI aperture used by SW to access tiled GFX surfaces in a linear fashion. */
>         DRM_INFO("Memory usable by graphics device = %dM\n", dev_priv->mm.gtt->gtt_total_entries >> 8);
> -       DRM_DEBUG_DRIVER("GMADR size = %dM\n", dev_priv->mm.gtt->gtt_mappable_entries >> 8);
> +       DRM_DEBUG_DRIVER("GMADR size = %ldM\n", dev_priv->gtt.mappable_end >> 20);
>         DRM_DEBUG_DRIVER("GTT stolen size = %dM\n", dev_priv->mm.gtt->stolen_size >> 20);
>
>         return 0;
> diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
> index ce02af8..ce5f544 100644
> --- a/drivers/gpu/drm/i915/intel_fb.c
> +++ b/drivers/gpu/drm/i915/intel_fb.c
> @@ -135,8 +135,7 @@ static int intelfb_create(struct intel_fbdev *ifbdev,
>                 goto out_unpin;
>         }
>         info->apertures->ranges[0].base = dev->mode_config.fb_base;
> -       info->apertures->ranges[0].size =
> -               dev_priv->mm.gtt->gtt_mappable_entries << PAGE_SHIFT;
> +       info->apertures->ranges[0].size = dev_priv->gtt.mappable_end;
>
>         info->fix.smem_start = dev->mode_config.fb_base + obj->gtt_offset;
>         info->fix.smem_len = size;
> --
> 1.8.1.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Rodrigo Vivi
Blog: http://blog.vivi.eng.br



More information about the Intel-gfx mailing list