i965: Add virtual memory allocator infrastructure to brw_bufmgr.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 10 Apr 2018 07:39:40 +0000 (00:39 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 5 Jun 2018 01:38:41 +0000 (18:38 -0700)
commit01058a552294ed641f2e933c0cc374917fb3bc70
tree7fb002e280fa80c3d7de2188f1d21f21ee22dcc2
parente99b32d4d6f0cce43ead45fee5d24c882004ba2f
i965: Add virtual memory allocator infrastructure to brw_bufmgr.

This introduces a new fast virtual memory allocator integrated with our
BO cache bucketing.  For larger objects, it falls back to the simple
free-list allocator (util_vma).

This puts the allocators in place but doesn't enable softpin yet.

v2:
 (feedback from Chris Wilson)
 - Check (bo->kflags & EXEC_OBJECT_PINNED) instead of a global flag
 - Avoid vma_free(0ull) on the err_free path.
 - Only enable if the kernel says we have full PPGTT support
 - Make bucketing allocators more resistant to failing to grow arrays
 (feedback from Scott Phillips)
 - Don't use node after popping it from the list.
 - Avoid undefined behavior in canonicalization by reusing new helper
 - Comment updates
 (feedback from myself)
 - Avoid __vma_alloc vs. vma_alloc by making a zero_high_bits helper
   to return a non-canonical address with the high bits zeroed.
 - Don't shadow loop variable 'i' when destroying things (ugly; worked)
v3:
 - Replace zero_high_bits with new common gen_48b_address helper.

Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
src/mesa/drivers/dri/i965/brw_bufmgr.c
src/mesa/drivers/dri/i965/brw_bufmgr.h