Commit 4d8d9fc7 authored by Tvrtko Ursulin's avatar Tvrtko Ursulin

drm/i915: Trim unused workaround list entries

The new workaround list allocator grows the list in chunks so will end up
with some unused space. Trim it when the initialization phase is done to
free up a tiny bit of slab.

v2:
 * Simplify with kmemdup. (Chris Wilson)

v3:
 * Refactor for __size removal.
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20181203125014.3219-8-tvrtko.ursulin@linux.intel.com
parent 452420d2
...@@ -53,8 +53,22 @@ static void wa_init_start(struct i915_wa_list *wal, const char *name) ...@@ -53,8 +53,22 @@ static void wa_init_start(struct i915_wa_list *wal, const char *name)
wal->name = name; wal->name = name;
} }
#define WA_LIST_CHUNK (1 << 4)
static void wa_init_finish(struct i915_wa_list *wal) static void wa_init_finish(struct i915_wa_list *wal)
{ {
/* Trim unused entries. */
if (!IS_ALIGNED(wal->count, WA_LIST_CHUNK)) {
struct i915_wa *list = kmemdup(wal->list,
wal->count * sizeof(*list),
GFP_KERNEL);
if (list) {
kfree(wal->list);
wal->list = list;
}
}
if (!wal->count) if (!wal->count)
return; return;
...@@ -66,7 +80,7 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa) ...@@ -66,7 +80,7 @@ static void _wa_add(struct i915_wa_list *wal, const struct i915_wa *wa)
{ {
unsigned int addr = i915_mmio_reg_offset(wa->reg); unsigned int addr = i915_mmio_reg_offset(wa->reg);
unsigned int start = 0, end = wal->count; unsigned int start = 0, end = wal->count;
const unsigned int grow = 1 << 4; const unsigned int grow = WA_LIST_CHUNK;
struct i915_wa *wa_; struct i915_wa *wa_;
GEM_BUG_ON(!is_power_of_2(grow)); GEM_BUG_ON(!is_power_of_2(grow));
......
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