[Intel-gfx] [PATCH 11/12] drm/i915: Embed PPGTT into the context
Ben Widawsky
ben at bwidawsk.net
Wed Apr 24 08:15:39 CEST 2013
The aliasing ppgtt is just the ppgtt for the default context.
The obvious downside is until we actually do ppgtt switches, this wastes
a bit of memory. ie. by the end of the series, it's a don't care. The
other downside is PPGTT can't work without contexts, which *should* have
already been the case except for debugging scenarios. (Note the does
break the potential to easily use contexts an GEN5)
Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
---
drivers/gpu/drm/i915/i915_drv.h | 2 ++
drivers/gpu/drm/i915/i915_gem.c | 14 ++++++++------
drivers/gpu/drm/i915/i915_gem_gtt.c | 1 -
3 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 9f984cf..c123df2 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -461,6 +461,8 @@ struct i915_hw_context {
struct drm_i915_file_private *file_priv;
struct intel_ring_buffer *ring;
struct drm_i915_gem_object *obj;
+
+ struct i915_hw_ppgtt ppgtt;
};
enum no_fbc_reason {
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 24f3aef..cb9fcfb 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -4070,17 +4070,19 @@ int i915_gem_init(struct drm_device *dev)
if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) {
struct i915_hw_ppgtt *ppgtt;
- ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
- if (!ppgtt)
- goto ggtt_only;
-
i915_gem_setup_global_gtt(dev, 0, dev_priv->gtt.mappable_end,
dev_priv->gtt.total, false);
i915_gem_context_init(dev);
+ if (dev_priv->hw_contexts_disabled) {
+ drm_mm_takedown(&dev_priv->mm.gtt_space);
+ goto ggtt_only;
+ }
+
+ ppgtt = &dev_priv->ring[RCS].default_context->ppgtt;
+
ret = i915_gem_ppgtt_init(dev, ppgtt);
- if (ret) {
- kfree(ppgtt);
+ if (ret) {
drm_mm_takedown(&dev_priv->mm.gtt_space);
goto ggtt_only;
}
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 0598c6d..c260e92 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -232,7 +232,6 @@ static void gen6_ppgtt_cleanup(struct i915_hw_ppgtt *ppgtt)
for (i = 0; i < ppgtt->num_pd_entries; i++)
__free_page(ppgtt->pt_pages[i]);
kfree(ppgtt->pt_pages);
- kfree(ppgtt);
}
static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
--
1.8.2.1
More information about the Intel-gfx
mailing list