On Thu, Jun 27, 2013 at 04:30:24PM -0700, Ben Widawsky wrote: > It doesn't apply to generic VMA, so it belongs with the gtt. > > for file in `ls drivers/gpu/drm/i915/*.c` ; do > sed -i "s/mm.stolen_base/gtt.stolen_base/" $file; > done > > for file in `ls drivers/gpu/drm/i915/*.c` ; do > sed -i "s/mm.stolen/gtt.stolen/" $file; > done > > Signed-off-by: Ben Widawsky <ben at bwidawsk.net> Before I keep on merging I'd like to clarify the plan a bit: Afaics the goal is to extract useful stuff shared between global gtt and ppgtt into i915_address_space. But I'm a bit unclear what dev_priv->mm will hold in the end, so I'm not sure whether moving stolen around makes sense. Can you please elaborate on your plan a bit on how dev_priv->gtt and dev_priv->mm will relate in the end? Thanks, Daniel > --- > drivers/gpu/drm/i915/i915_drv.h | 8 +++----- > drivers/gpu/drm/i915/i915_gem_stolen.c | 32 ++++++++++++++++---------------- > drivers/gpu/drm/i915/i915_irq.c | 2 +- > drivers/gpu/drm/i915/intel_pm.c | 4 ++-- > 4 files changed, 22 insertions(+), 24 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index f428076..7016074 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -473,6 +473,9 @@ struct i915_address_space { > */ > struct i915_gtt { > struct i915_address_space base; > + > + struct drm_mm stolen; > + unsigned long stolen_base; /* limited to low memory (32-bit) */ > size_t stolen_size; /* Total size of stolen memory */ > > unsigned long mappable_end; /* End offset that we can CPU map */ > @@ -828,8 +831,6 @@ struct intel_l3_parity { > }; > > struct i915_gem_mm { > - /** Memory allocator for GTT stolen memory */ > - struct drm_mm stolen; > /** Memory allocator for GTT */ > struct drm_mm gtt_space; > /** List of all objects in gtt_space. Used to restore gtt > @@ -842,9 +843,6 @@ struct i915_gem_mm { > */ > struct list_head unbound_list; > > - /** Usable portion of the GTT for GEM */ > - unsigned long stolen_base; /* limited to low memory (32-bit) */ > - > /** PPGTT used for aliasing the PPGTT with the GTT */ > struct i915_hw_ppgtt *aliasing_ppgtt; > > diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c > index 8e02344..fd812d5 100644 > --- a/drivers/gpu/drm/i915/i915_gem_stolen.c > +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c > @@ -97,10 +97,10 @@ static int i915_setup_compression(struct drm_device *dev, int size) > struct drm_mm_node *compressed_fb, *uninitialized_var(compressed_llb); > > /* Try to over-allocate to reduce reallocations and fragmentation */ > - compressed_fb = drm_mm_search_free(&dev_priv->mm.stolen, > + compressed_fb = drm_mm_search_free(&dev_priv->gtt.stolen, > size <<= 1, 4096, 0); > if (!compressed_fb) > - compressed_fb = drm_mm_search_free(&dev_priv->mm.stolen, > + compressed_fb = drm_mm_search_free(&dev_priv->gtt.stolen, > size >>= 1, 4096, 0); > if (compressed_fb) > compressed_fb = drm_mm_get_block(compressed_fb, size, 4096); > @@ -112,7 +112,7 @@ static int i915_setup_compression(struct drm_device *dev, int size) > else if (IS_GM45(dev)) { > I915_WRITE(DPFC_CB_BASE, compressed_fb->start); > } else { > - compressed_llb = drm_mm_search_free(&dev_priv->mm.stolen, > + compressed_llb = drm_mm_search_free(&dev_priv->gtt.stolen, > 4096, 4096, 0); > if (compressed_llb) > compressed_llb = drm_mm_get_block(compressed_llb, > @@ -123,9 +123,9 @@ static int i915_setup_compression(struct drm_device *dev, int size) > dev_priv->fbc.compressed_llb = compressed_llb; > > I915_WRITE(FBC_CFB_BASE, > - dev_priv->mm.stolen_base + compressed_fb->start); > + dev_priv->gtt.stolen_base + compressed_fb->start); > I915_WRITE(FBC_LL_BASE, > - dev_priv->mm.stolen_base + compressed_llb->start); > + dev_priv->gtt.stolen_base + compressed_llb->start); > } > > dev_priv->fbc.compressed_fb = compressed_fb; > @@ -147,7 +147,7 @@ int i915_gem_stolen_setup_compression(struct drm_device *dev, int size) > { > struct drm_i915_private *dev_priv = dev->dev_private; > > - if (dev_priv->mm.stolen_base == 0) > + if (dev_priv->gtt.stolen_base == 0) > return -ENODEV; > > if (size < dev_priv->fbc.size) > @@ -180,7 +180,7 @@ void i915_gem_cleanup_stolen(struct drm_device *dev) > struct drm_i915_private *dev_priv = dev->dev_private; > > i915_gem_stolen_cleanup_compression(dev); > - drm_mm_takedown(&dev_priv->mm.stolen); > + drm_mm_takedown(&dev_priv->gtt.stolen); > } > > int i915_gem_init_stolen(struct drm_device *dev) > @@ -188,18 +188,18 @@ int i915_gem_init_stolen(struct drm_device *dev) > struct drm_i915_private *dev_priv = dev->dev_private; > int bios_reserved = 0; > > - dev_priv->mm.stolen_base = i915_stolen_to_physical(dev); > - if (dev_priv->mm.stolen_base == 0) > + dev_priv->gtt.stolen_base = i915_stolen_to_physical(dev); > + if (dev_priv->gtt.stolen_base == 0) > return 0; > > DRM_DEBUG_KMS("found %zd bytes of stolen memory at %08lx\n", > - dev_priv->gtt.stolen_size, dev_priv->mm.stolen_base); > + dev_priv->gtt.stolen_size, dev_priv->gtt.stolen_base); > > if (IS_VALLEYVIEW(dev)) > bios_reserved = 1024*1024; /* top 1M on VLV/BYT */ > > /* Basic memrange allocator for stolen space */ > - drm_mm_init(&dev_priv->mm.stolen, 0, dev_priv->gtt.stolen_size - > + drm_mm_init(&dev_priv->gtt.stolen, 0, dev_priv->gtt.stolen_size - > bios_reserved); > > return 0; > @@ -234,7 +234,7 @@ i915_pages_create_for_stolen(struct drm_device *dev, > sg->offset = offset; > sg->length = size; > > - sg_dma_address(sg) = (dma_addr_t)dev_priv->mm.stolen_base + offset; > + sg_dma_address(sg) = (dma_addr_t)dev_priv->gtt.stolen_base + offset; > sg_dma_len(sg) = size; > > return st; > @@ -300,14 +300,14 @@ i915_gem_object_create_stolen(struct drm_device *dev, u32 size) > struct drm_i915_gem_object *obj; > struct drm_mm_node *stolen; > > - if (dev_priv->mm.stolen_base == 0) > + if (dev_priv->gtt.stolen_base == 0) > return NULL; > > DRM_DEBUG_KMS("creating stolen object: size=%x\n", size); > if (size == 0) > return NULL; > > - stolen = drm_mm_search_free(&dev_priv->mm.stolen, size, 4096, 0); > + stolen = drm_mm_search_free(&dev_priv->gtt.stolen, size, 4096, 0); > if (stolen) > stolen = drm_mm_get_block(stolen, size, 4096); > if (stolen == NULL) > @@ -331,7 +331,7 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev, > struct drm_i915_gem_object *obj; > struct drm_mm_node *stolen; > > - if (dev_priv->mm.stolen_base == 0) > + if (dev_priv->gtt.stolen_base == 0) > return NULL; > > DRM_DEBUG_KMS("creating preallocated stolen object: stolen_offset=%x, gtt_offset=%x, size=%x\n", > @@ -344,7 +344,7 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_device *dev, > if (WARN_ON(size == 0)) > return NULL; > > - stolen = drm_mm_create_block(&dev_priv->mm.stolen, > + stolen = drm_mm_create_block(&dev_priv->gtt.stolen, > stolen_offset, size, > false); > if (stolen == NULL) { > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > index fa70fd0..1e25920 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -1538,7 +1538,7 @@ i915_error_object_create_sized(struct drm_i915_private *dev_priv, > } else if (src->stolen) { > unsigned long offset; > > - offset = dev_priv->mm.stolen_base; > + offset = dev_priv->gtt.stolen_base; > offset += src->stolen->start; > offset += i << PAGE_SHIFT; > > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c > index d32734d..02f2dea 100644 > --- a/drivers/gpu/drm/i915/intel_pm.c > +++ b/drivers/gpu/drm/i915/intel_pm.c > @@ -3464,7 +3464,7 @@ static void valleyview_setup_pctx(struct drm_device *dev) > /* BIOS set it up already, grab the pre-alloc'd space */ > int pcbr_offset; > > - pcbr_offset = (pcbr & (~4095)) - dev_priv->mm.stolen_base; > + pcbr_offset = (pcbr & (~4095)) - dev_priv->gtt.stolen_base; > pctx = i915_gem_object_create_stolen_for_preallocated(dev_priv->dev, > pcbr_offset, > -1, > @@ -3486,7 +3486,7 @@ static void valleyview_setup_pctx(struct drm_device *dev) > return; > } > > - pctx_paddr = dev_priv->mm.stolen_base + pctx->stolen->start; > + pctx_paddr = dev_priv->gtt.stolen_base + pctx->stolen->start; > I915_WRITE(VLV_PCBR, pctx_paddr); > > out: > -- > 1.8.3.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch