Commit dd19674b authored by Chris Wilson's avatar Chris Wilson

drm/i915: Remove bitmap tracking for used-ptes

We only operate on known extents (both for alloc/clear) and so we can use
both the knowledge of the bind/unbind range along with the knowledge of
the existing pagetable to avoid having to allocate temporary and
auxiliary bitmaps.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=99295Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Reviewed-by: default avatarMichał Winiarski <michal.winiarski@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170215084357.19977-12-chris@chris-wilson.co.uk
parent 16a011c8
This diff is collapsed.
...@@ -69,7 +69,7 @@ typedef uint64_t gen8_ppgtt_pml4e_t; ...@@ -69,7 +69,7 @@ typedef uint64_t gen8_ppgtt_pml4e_t;
#define GEN6_PTE_UNCACHED (1 << 1) #define GEN6_PTE_UNCACHED (1 << 1)
#define GEN6_PTE_VALID (1 << 0) #define GEN6_PTE_VALID (1 << 0)
#define I915_PTES(pte_len) (PAGE_SIZE / (pte_len)) #define I915_PTES(pte_len) ((unsigned int)(PAGE_SIZE / (pte_len)))
#define I915_PTE_MASK(pte_len) (I915_PTES(pte_len) - 1) #define I915_PTE_MASK(pte_len) (I915_PTES(pte_len) - 1)
#define I915_PDES 512 #define I915_PDES 512
#define I915_PDE_MASK (I915_PDES - 1) #define I915_PDE_MASK (I915_PDES - 1)
...@@ -220,8 +220,7 @@ struct i915_page_dma { ...@@ -220,8 +220,7 @@ struct i915_page_dma {
struct i915_page_table { struct i915_page_table {
struct i915_page_dma base; struct i915_page_dma base;
unsigned int used_ptes;
unsigned long *used_ptes;
}; };
struct i915_page_directory { struct i915_page_directory {
......
...@@ -245,15 +245,14 @@ DEFINE_EVENT_PRINT(i915_px_entry, i915_page_directory_pointer_entry_alloc, ...@@ -245,15 +245,14 @@ DEFINE_EVENT_PRINT(i915_px_entry, i915_page_directory_pointer_entry_alloc,
DECLARE_EVENT_CLASS(i915_page_table_entry_update, DECLARE_EVENT_CLASS(i915_page_table_entry_update,
TP_PROTO(struct i915_address_space *vm, u32 pde, TP_PROTO(struct i915_address_space *vm, u32 pde,
struct i915_page_table *pt, u32 first, u32 count, u32 bits), struct i915_page_table *pt, u32 first, u32 count),
TP_ARGS(vm, pde, pt, first, count, bits), TP_ARGS(vm, pde, pt, first, count),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(struct i915_address_space *, vm) __field(struct i915_address_space *, vm)
__field(u32, pde) __field(u32, pde)
__field(u32, first) __field(u32, first)
__field(u32, last) __field(u32, last)
__dynamic_array(char, cur_ptes, TRACE_PT_SIZE(bits))
), ),
TP_fast_assign( TP_fast_assign(
...@@ -261,22 +260,16 @@ DECLARE_EVENT_CLASS(i915_page_table_entry_update, ...@@ -261,22 +260,16 @@ DECLARE_EVENT_CLASS(i915_page_table_entry_update,
__entry->pde = pde; __entry->pde = pde;
__entry->first = first; __entry->first = first;
__entry->last = first + count - 1; __entry->last = first + count - 1;
scnprintf(__get_str(cur_ptes),
TRACE_PT_SIZE(bits),
"%*pb",
bits,
pt->used_ptes);
), ),
TP_printk("vm=%p, pde=%d, updating %u:%u\t%s", TP_printk("vm=%p, pde=%d, updating %u:%u",
__entry->vm, __entry->pde, __entry->last, __entry->first, __entry->vm, __entry->pde, __entry->last, __entry->first)
__get_str(cur_ptes))
); );
DEFINE_EVENT(i915_page_table_entry_update, i915_page_table_entry_map, DEFINE_EVENT(i915_page_table_entry_update, i915_page_table_entry_map,
TP_PROTO(struct i915_address_space *vm, u32 pde, TP_PROTO(struct i915_address_space *vm, u32 pde,
struct i915_page_table *pt, u32 first, u32 count, u32 bits), struct i915_page_table *pt, u32 first, u32 count),
TP_ARGS(vm, pde, pt, first, count, bits) TP_ARGS(vm, pde, pt, first, count)
); );
TRACE_EVENT(i915_gem_object_change_domain, TRACE_EVENT(i915_gem_object_change_domain,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment