Hello. I'm continuing to develop full PPGTT support for the i915 driver. This series is a follow-up to the previously posted RFC [1]. This series contains reworked versions of the unmerged patches (fingers crossed that I didn't miss review comments). I've rebased this series to hell and back, so I'm sure there are some lingering errors due to that. I've found several, but my eyes are no longer capable of finding them. I've also added some last minute fixups, which I always promise myself I'll never do because they always have bugs. To reiterate the steps I am planning to take which I did this in the previous RFC [1], but it has changed a bit: 1. Make a link between contexts and PPGTT. Every context has it's own address space implemented. 2. Create the VMA/VM, plumb through the driver. 3. Create a context per fd. This involves abstracting the notion of context to not just mean a HW context, but also an address space. 4. Switch address spaces on context switch. 5. Develop interfaces. This patch series addresses steps 1 & 2. A lot of the future patches should have much less room for debate on what color to paint the bikeshed, so I feel this is a good point to submit for some review. I am currently developing 3 & 4. I have some half baked patches which aren't really ready, but do give me some notion that things will work. Note that The order of 3 and 4 really matter because if we start switching page tables for applications not using contexts, everything will blow up pretty badly. To not scare off potential reviewers, even though the series is as long as it is, many of the patches really could be squashed. To keep rebase + easier review, I've split things out to multiple steps. 1-5: Random fixes. 6-15: Equivalent to reworked version of the PPGTT prep part 1 6-9: Make PPGTT PDE allocation more generic 10-15: Tie contexts to PPGTT. 16-34: create the VM and VMAs. 16-20: Mostly cut and paste to set us up for future patches. 21-25: Set up the address space abstraction. 26-31: Reorganize code to prepare for VMAs 31-34: are logically one patch. I split them out for my own debug after the enormous patch didn't work. I'm fine with squashing them in to 1 after review, or leaving a large bisect warning (as I've done). I do have a work in progress branch on fd.o [2]. This may not reflect this series 1:1 as it will have rebases, plus some future patches as I feel they are ready. If someone wants a branch on fd.o for review, please let me know. References: [1] http://lists.freedesktop.org/archives/intel-gfx/2013-April/027144.html [2] http://cgit.freedesktop.org/~bwidawsk/drm-intel/log/?h=ppgtt-prep-2 -- Ben Widawsky (33): drm/i915: pre-fixes for checkpatch drm/i915: use mappable size for fb kickout drm/i915: use drm_mm_takedown drm/i915: context debug messages drm/i915: Call context fini at cleanup drm/i915: make PDE|PTE platform specific drm/i915: Use drm_mm for PPGTT PDEs drm/i915: Use PDEs as the guard page drm/i915: cleanup context fini drm/i915: Do a fuller init after reset drm/i915: Split context enabling from init drm/i915: destroy i915_gem_init_global_gtt drm/i915: Embed PPGTT into the context drm/i915: Tie context to PPGTT drm/i915: Really share scratch page drm/i915: Combine scratch members into a struct drm/i915: Drop dev from pte_encode drm/i915: Use gtt shortform where possible drm/i915: Move fbc members out of line drm/i915: Move gtt and ppgtt under address space umbrella drm/i915: Move gtt_mtrr to i915_gtt drm/i915: Move stolen stuff to i915_gtt drm/i915: Move aliasing_ppgtt drm/i915: Put the mm in the parent address space drm/i915: Move object tracking lists to new mm drm/i915: Create a global list of vms drm/i915: Start using vm lists drm/i915: Remove object's gtt_offset drm: pre allocate node for create_block drm/i915: Getter/setter for object attributes drm/i915: Create VMAs (part 1) drm/i915: Create VMAs (part 2) drm/i915: Create VMAs (part 3) Chris Wilson (1): drm: Optionally create mm blocks from top-to-bottom drivers/gpu/drm/drm_mm.c | 134 ++++---- drivers/gpu/drm/i915/i915_debugfs.c | 63 ++-- drivers/gpu/drm/i915/i915_dma.c | 33 +- drivers/gpu/drm/i915/i915_drv.c | 29 +- drivers/gpu/drm/i915/i915_drv.h | 275 +++++++++++------ drivers/gpu/drm/i915/i915_gem.c | 481 ++++++++++++++++++++--------- drivers/gpu/drm/i915/i915_gem_context.c | 67 ++-- drivers/gpu/drm/i915/i915_gem_debug.c | 11 +- drivers/gpu/drm/i915/i915_gem_evict.c | 63 ++-- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 83 +++-- drivers/gpu/drm/i915/i915_gem_gtt.c | 373 +++++++++++----------- drivers/gpu/drm/i915/i915_gem_stolen.c | 88 +++--- drivers/gpu/drm/i915/i915_gem_tiling.c | 18 +- drivers/gpu/drm/i915/i915_irq.c | 37 ++- drivers/gpu/drm/i915/i915_trace.h | 20 +- drivers/gpu/drm/i915/intel_display.c | 40 ++- drivers/gpu/drm/i915/intel_drv.h | 7 - drivers/gpu/drm/i915/intel_fb.c | 8 +- drivers/gpu/drm/i915/intel_overlay.c | 26 +- drivers/gpu/drm/i915/intel_pm.c | 58 ++-- drivers/gpu/drm/i915/intel_ringbuffer.c | 28 +- drivers/gpu/drm/i915/intel_sprite.c | 8 +- include/drm/drm_mm.h | 147 +++++---- 23 files changed, 1244 insertions(+), 853 deletions(-) -- 1.8.2.3