mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
ida: Use exceptional entries for small IDAs
We can use the root entry as a bitmap and save allocating a 128 byte bitmap for an IDA that contains only a few entries (30 on a 32-bit machine, 62 on a 64-bit machine). This costs about 300 bytes of kernel text on x86-64, so as long as 3 IDAs fall into this category, this is a net win for memory consumption. Thanks to Rasmus Villemoes for his work documenting the problem and collecting statistics on IDAs. Signed-off-by: Matthew Wilcox <[email protected]>
This commit is contained in:
parent
7ad3d4d85c
commit
d37cacc5ad
3 changed files with 181 additions and 7 deletions
|
|
@ -338,6 +338,14 @@ static void dump_ida_node(void *entry, unsigned long index)
|
|||
for (i = 0; i < RADIX_TREE_MAP_SIZE; i++)
|
||||
dump_ida_node(node->slots[i],
|
||||
index | (i << node->shift));
|
||||
} else if (radix_tree_exceptional_entry(entry)) {
|
||||
pr_debug("ida excp: %p offset %d indices %lu-%lu data %lx\n",
|
||||
entry, (int)(index & RADIX_TREE_MAP_MASK),
|
||||
index * IDA_BITMAP_BITS,
|
||||
index * IDA_BITMAP_BITS + BITS_PER_LONG -
|
||||
RADIX_TREE_EXCEPTIONAL_SHIFT,
|
||||
(unsigned long)entry >>
|
||||
RADIX_TREE_EXCEPTIONAL_SHIFT);
|
||||
} else {
|
||||
struct ida_bitmap *bitmap = entry;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue