Included in this series are the unmerged patches from the VMA only version of my post [1] as well as two new sets of patches on top. Daniel has already merged the first part of the series which introduced the VMAs, and VMs, but didn't actually use them ([2]). As agreed up in the previous mail thread ([1]), I've put in a couple things on top of the old series to make the end result what Daniel was looking for; and I also agree it's an improvement. (One downside however is I can no longer use the original 66 patch series [3] as a direct reference) objective was to not throw away all the testing I had done on the previous work, make the changes easier to review, but still get to where we needed to get to. The diff churn is a bit higher than if I had just rebased it in. The two big things this adds from the last go around are: 1. map/unmap_vma function pointers for the VM. 2. conversion of some <obj,vm> -> vma in functions. Map, and unmap are logical functionalities to add for an address space. They do more or less what you'd think: take an object and create a mapping via the GPU's page tables to that object. Of course, without the rest of the patches from [3], there will only ever be 1 address space, with the weird aliasing ppgtt behind it. One thing which I toyed with, but opted not to include was to directly pass obj,vm to map/unmap instead of doing the slightly less pretty way as I've done in execbuf and bind. In the future I think I may just do this, but for now it's not a big win as the end result wasn't much better (and I didn't get it to immediately work). The conversion of <obj,vm> to VMA was a lot of churn, but the idea is simple. In the original series [1,3], I passed the pair of an object and an address space everywhere. Every time I needed to convert that into a VMA, it requires walking a list. In fact, we only need to walk the list once - GEM is still all about BOs, and I have no intention of changing this - so we must walk the list at user space entry points; but from thereon it can all be a VMA. The caveat is, we do have a few internal APIs that are easily broken unless we talk in objects (caching is one of them). As I mentioned in the original series, we may eventually want to move things over to be all in the VMA. For now, I think this is fine as it stands. You'll notice unbind() to be a wart currently - but the alternative looked worse to my eyes. Breakdown: The first 4 patches are basically what I sent in [1], except I've squashed some stuff, rebased, and applied some requested fixups, which brought the patch count down from 6->4. The next 3 patches are about the map/unmap mentioned in #1. And the final 5 patches are for replacing <obj,vm> pairs with vma, #2. Testing: IGT looks pretty stable on IVB. I was having a lot of issues on gpu reset on my ILK, but somehow after a clean build, I stopped seeing it. I've done nothing else. References: [1] http://lists.freedesktop.org/archives/intel-gfx/2013-July/029974.html [2] http://lists.freedesktop.org/archives/intel-gfx/2013-July/030395.html [3] http://lists.freedesktop.org/archives/intel-gfx/2013-June/029408.html I've pushed a badly rebased onto -nightly here (not worth fixing): http://cgit.freedesktop.org/~bwidawsk/drm-intel/log/?h=ppgtt2 --- Ben Widawsky (12): drm/i915: plumb VM into object operations drm/i915: Fix up map and fenceable for VMA drm/i915: Update error capture for VMs drm/i915: Track active by VMA instead of object drm/i915: Add map/unmap object functions to VM drm/i915: Use the new vm [un]bind functions drm/i915: eliminate vm->insert_entries() drm/i915: Add vma to list at creation drm/i915: create vmas at execbuf drm/i915: Convert execbuf code to use vmas drm/i915: Convert object coloring to VMA drm/i915: Convert active API to VMA drivers/gpu/drm/i915/i915_debugfs.c | 68 +++-- drivers/gpu/drm/i915/i915_dma.c | 4 - drivers/gpu/drm/i915/i915_drv.h | 193 +++++++------ drivers/gpu/drm/i915/i915_gem.c | 433 ++++++++++++++++++++--------- drivers/gpu/drm/i915/i915_gem_context.c | 17 +- drivers/gpu/drm/i915/i915_gem_evict.c | 78 +++--- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 321 +++++++++++---------- drivers/gpu/drm/i915/i915_gem_gtt.c | 140 ++++++---- drivers/gpu/drm/i915/i915_gem_stolen.c | 10 +- drivers/gpu/drm/i915/i915_gem_tiling.c | 10 +- drivers/gpu/drm/i915/i915_gpu_error.c | 111 +++++--- drivers/gpu/drm/i915/i915_trace.h | 20 +- drivers/gpu/drm/i915/intel_fb.c | 1 - drivers/gpu/drm/i915/intel_overlay.c | 2 +- drivers/gpu/drm/i915/intel_pm.c | 2 +- drivers/gpu/drm/i915/intel_ringbuffer.c | 16 +- 16 files changed, 880 insertions(+), 546 deletions(-) -- 1.8.3.3 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx