Davidlohr Bueso
cd9e61ed1e
rbtree: cache leftmost node internally
...
Patch series "rbtree: Cache leftmost node internally", v4.
A series to extending rbtrees to internally cache the leftmost node such
that we can have fast overlap check optimization for all interval tree
users[1]. The benefits of this series are that:
(i) Unify users that do internal leftmost node caching.
(ii) Optimize all interval tree users.
(iii) Convert at least two new users (epoll and procfs) to the new interface.
This patch (of 16):
Red-black tree semantics imply that nodes with smaller or greater (or
equal for duplicates) keys always be to the left and right,
respectively. For the kernel this is extremely evident when considering
our rb_first() semantics. Enabling lookups for the smallest node in the
tree in O(1) can save a good chunk of cycles in not having to walk down
the tree each time. To this end there are a few core users that
explicitly do this, such as the scheduler and rtmutexes. There is also
the desire for interval trees to have this optimization allowing faster
overlap checking.
This patch introduces a new 'struct rb_root_cached' which is just the
root with a cached pointer to the leftmost node. The reason why the
regular rb_root was not extended instead of adding a new structure was
that this allows the user to have the choice between memory footprint
and actual tree performance. The new wrappers on top of the regular
rb_root calls are:
- rb_first_cached(cached_root) -- which is a fast replacement
for rb_first.
- rb_insert_color_cached(node, cached_root, new)
- rb_erase_cached(node, cached_root)
In addition, augmented cached interfaces are also added for basic
insertion and deletion operations; which becomes important for the
interval tree changes.
With the exception of the inserts, which adds a bool for updating the
new leftmost, the interfaces are kept the same. To this end, porting rb
users to the cached version becomes really trivial, and keeping current
rbtree semantics for users that don't care about the optimization
requires zero overhead.
Link: http://lkml.kernel.org/r/20170719014603.19029-2-dave@stgolabs.net
Signed-off-by: Davidlohr Bueso <dbueso@suse.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2017-09-08 18:26:48 -07:00
..
842
fonts
lib/fonts/Kconfig: keep non-Sparc fonts listed together
2017-02-27 18:43:46 -08:00
lz4
lib/lz4: remove back-compat wrappers
2017-02-24 17:46:57 -08:00
lzo
mpi
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
2017-08-22 14:53:32 +08:00
raid6
Merge tag 'md/4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/shli/md
2017-09-07 12:41:48 -07:00
reed_solomon
xz
zlib_deflate
zlib_inflate
lib/zlib_inflate/inftrees.c: fix potential buffer overflow
2017-05-08 17:15:12 -07:00
.gitignore
argv_split.c
asn1_decoder.c
assoc_array.c
assoc_array: fix path to assoc_array documentation
2017-08-30 16:40:11 -06:00
atomic64.c
atomic64_test.c
lib/atomic64_test.c: add a test that atomic64_inc_not_zero() returns an int
2017-07-14 15:05:13 -07:00
audit.c
bcd.c
bch.c
bitmap.c
bitmap: optimise bitmap_set and bitmap_clear of a single bit
2017-07-10 16:32:34 -07:00
bitrev.c
bsearch.c
lib/bsearch.c: micro-optimize pivot position calculation
2017-07-10 16:32:35 -07:00
btree.c
bug.c
debug: Add _ONCE() logic to report_bug()
2017-03-30 09:37:20 +02:00
build_OID_registry
bust_spinlocks.c
chacha20.c
check_signature.c
checksum.c
clz_ctz.c
clz_tab.c
cmdline.c
lib/cmdline.c: fix get_options() overflow while parsing ranges
2017-06-23 16:15:55 -07:00
compat_audit.c
cordic.c
cpu_rmap.c
cpumask.c
sched/fair, cpumask: Export for_each_cpu_wrap()
2017-05-15 10:15:23 +02:00
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
crc4.c
lib: Add crc4 module
2017-06-09 11:52:07 +02:00
crc7.c
crc8.c
crc16.c
crc32.c
lib: add module support to crc32 tests
2017-02-24 17:46:57 -08:00
crc32defs.h
crc32test.c
lib: add module support to crc32 tests
2017-02-24 17:46:57 -08:00
ctype.c
debug_info.c
debug_locks.c
debugobjects.c
debugobjects: Make kmemleak ignore debug objects
2017-08-14 16:51:01 +02:00
dec_and_lock.c
decompress.c
decompress_bunzip2.c
decompress_inflate.c
decompress_unlz4.c
lib/decompress_unlz4: change module to work with new LZ4 module version
2017-02-24 17:46:57 -08:00
decompress_unlzma.c
decompress_unlzo.c
decompress_unxz.c
devres.c
devres: fix devm_ioremap_*() offset parameter kerneldoc description
2017-04-24 13:53:13 -05:00
digsig.c
KEYS: Differentiate uses of rcu_dereference_key() and user_key_payload()
2017-03-02 10:09:00 +11:00
div64.c
dma-debug.c
dmaengine updates for 4.12-rc1
2017-05-09 15:40:28 -07:00
dma-noop.c
dma: Take into account dma_pfn_offset
2017-06-28 06:55:01 -07:00
dma-virt.c
dma-virt: remove dma_supported and mapping_error methods
2017-06-28 06:54:41 -07:00
dump_stack.c
sched/headers: Prepare for new header dependencies before moving code to <linux/sched/debug.h>
2017-03-02 08:42:34 +01:00
dynamic_debug.c
dynamic_queue_limits.c
earlycpio.c
errseq.c
errseq: rename __errseq_set to errseq_set
2017-07-26 12:24:36 -04:00
extable.c
lib/extable.c: use bsearch() library function in search_extable()
2017-07-10 16:32:35 -07:00
fault-inject.c
fault-inject: fix wrong should_fail() decision in task context
2017-08-10 15:54:06 -07:00
fdt.c
fdt_empty_tree.c
fdt_ro.c
fdt_rw.c
fdt_strerror.c
fdt_sw.c
fdt_wip.c
find_bit.c
lib/find_bit.c: micro-optimise find_next_*_bit
2017-02-24 17:46:57 -08:00
flex_array.c
flex_proportions.c
percpu_counter: Rename __percpu_counter_add to percpu_counter_add_batch
2017-06-20 15:42:32 -04:00
gcd.c
gen_crc32table.c
genalloc.c
lib/genalloc.c: start search from start of chunk
2016-10-27 18:43:43 -07:00
glob.c
lib: add module support to glob tests
2017-02-24 17:46:57 -08:00
globtest.c
lib: add module support to glob tests
2017-02-24 17:46:57 -08:00
hexdump.c
hweight.c
idr.c
idr: Add new APIs to support unsigned long
2017-08-30 14:36:44 -07:00
inflate.c
int_sqrt.c
interval_tree.c
interval_tree_test.c
lib/interval_tree_test.c: allow full tree search
2017-07-10 16:32:35 -07:00
iomap.c
iomap_copy.c
iommu-common.c
iommu-helper.c
ioremap.c
mm: convert generic code to 5-level paging
2017-03-09 11:48:47 -08:00
iov_iter.c
Merge branch 'uaccess-work.iov_iter' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
2017-07-07 20:39:20 -07:00
irq_poll.c
This adds a new gcc plugin named "latent_entropy". It is designed to
2016-10-15 10:03:15 -07:00
irq_regs.c
is_single_threaded.c
sched/headers: Prepare to move 'init_task' and 'init_thread_union' from <linux/sched.h> to <linux/sched/task.h>
2017-03-02 08:42:38 +01:00
jedec_ddr_data.c
kasprintf.c
Kconfig
lib/string.c: add testcases for memset16/32/64
2017-09-08 18:26:48 -07:00
Kconfig.debug
Merge branch 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2017-09-04 11:52:29 -07:00
Kconfig.kasan
Kconfig.kgdb
lib: update location of kgdb documentation
2017-05-16 08:44:22 -03:00
Kconfig.kmemcheck
Kconfig.ubsan
Kconfig: lib/Kconfig.ubsan fix reference to ubsan documentation
2016-12-14 16:04:08 -08:00
kfifo.c
klist.c
kobject.c
kobject: Export kobject_get_unless_zero()
2017-03-22 20:11:35 -06:00
kobject_uevent.c
Merge branch 'bind_unbind' into driver-core-next
2017-07-22 12:00:15 +02:00
kstrtox.c
lib/kstrtox.c: use "unsigned int" more
2017-07-10 16:32:34 -07:00
kstrtox.h
lcm.c
libcrc32c.c
crypto: Work around deallocated stack frame reference gcc bug on sparc.
2017-06-08 17:36:03 +08:00
list_debug.c
bug: switch data corruption check to __must_check
2017-02-24 17:46:56 -08:00
list_sort.c
lib: add module support to linked list sorting tests
2017-05-08 17:15:10 -07:00
llist.c
locking-selftest-hardirq.h
locking-selftest-mutex.h
locking-selftest-rlock-hardirq.h
locking-selftest-rlock-softirq.h
locking-selftest-rlock.h
locking-selftest-rsem.h
locking-selftest-rtmutex.h
locking/selftest: Add RT-mutex support
2017-06-08 10:35:50 +02:00
locking-selftest-softirq.h
locking-selftest-spin-hardirq.h
locking-selftest-spin-softirq.h
locking-selftest-spin.h
locking-selftest-wlock-hardirq.h
locking-selftest-wlock-softirq.h
locking-selftest-wlock.h
locking-selftest-wsem.h
locking-selftest.c
locking/lockdep/selftests: Fix mixed read-write ABBA tests
2017-08-29 15:15:17 +02:00
lockref.c
locking/core: Remove cpu_relax_lowlatency() users
2016-11-16 10:15:10 +01:00
lru_cache.c
Makefile
kmod: add test driver to stress test the module loader
2017-07-14 15:05:13 -07:00
memory-notifier-error-inject.c
memweight.c
net_utils.c
netdev-notifier-error-inject.c
nlattr.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
2017-09-03 17:08:42 -07:00
nmi_backtrace.c
printk: Use the main logbuf in NMI when logbuf_lock is available
2017-05-19 14:42:19 +02:00
nodemask.c
notifier-error-inject.c
notifier-error-inject.h
of-reconfig-notifier-error-inject.c
oid_registry.c
once.c
parman.c
lib: Introduce priority array area manager
2017-02-03 16:35:42 -05:00
parser.c
parser: add u64 number parser
2016-12-06 10:17:03 +02:00
pci_iomap.c
percpu-refcount.c
percpu-refcount: support synchronous switch to atomic mode.
2017-03-22 19:18:43 -07:00
percpu_counter.c
writeback: rework wb_[dec|inc]_stat family of functions
2017-07-12 16:26:05 -07:00
percpu_ida.c
sched/headers: Prepare to remove the <linux/gfp.h> include from <linux/sched.h>
2017-03-02 08:42:34 +01:00
percpu_test.c
plist.c
sched/headers: Prepare for new header dependencies before moving code to <linux/sched/clock.h>
2017-03-02 08:42:27 +01:00
pm-notifier-error-inject.c
prime_numbers.c
lib/prime_numbers: Suppress warn on kmalloc failure
2017-01-23 09:17:12 +01:00
radix-tree.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2017-09-06 14:45:08 -07:00
random32.c
This adds a new gcc plugin named "latent_entropy". It is designed to
2016-10-15 10:03:15 -07:00
ratelimit.c
rational.c
rbtree.c
rbtree: cache leftmost node internally
2017-09-08 18:26:48 -07:00
rbtree_test.c
reciprocal_div.c
refcount.c
locking/refcount: Create unchecked atomic_t implementation
2017-06-28 18:54:46 +02:00
rhashtable.c
Add wait_for_random_bytes() and get_random_*_wait() functions so that
2017-07-15 12:44:02 -07:00
sbitmap.c
sbitmap: add sbitmap_get_shallow() operation
2017-04-14 14:06:52 -06:00
scatterlist.c
scatterlist: add sg_zero_buffer() helper
2017-06-15 14:30:14 +02:00
seq_buf.c
sg_pool.c
sg_split.c
sha1.c
show_mem.c
lib/show_mem.c: teach show_mem to work with the given nodemask
2017-02-22 16:41:30 -08:00
siphash.c
siphash: implement HalfSipHash1-3 for hash tables
2017-01-09 13:58:57 -05:00
smp_processor_id.c
sched/core: Enable might_sleep() and smp_processor_id() checks early
2017-05-23 10:01:38 +02:00
sort.c
lib: add CONFIG_TEST_SORT to enable self-test of sort()
2017-02-24 17:46:57 -08:00
stackdepot.c
lib/stackdepot: export save/fetch stack for drivers
2016-11-11 08:12:37 -08:00
stmp_device.c
string.c
lib/string.c: add testcases for memset16/32/64
2017-09-08 18:26:48 -07:00
string_helpers.c
strncpy_from_user.c
lib: harden strncpy_from_user
2016-10-11 15:06:30 -07:00
strnlen_user.c
kill strlen_user()
2017-05-15 23:40:22 -04:00
swiotlb.c
swiotlb: Add warnings for use of bounce buffers with SME
2017-07-18 11:38:03 +02:00
syscall.c
lib/syscall: Clear return values when no stack
2017-03-24 07:43:35 +01:00
test-kstrtox.c
test-string_helpers.c
test_bitmap.c
bitmap: optimise bitmap_set and bitmap_clear of a single bit
2017-07-10 16:32:34 -07:00
test_bpf.c
bpf: add BPF_J{LT,LE,SLT,SLE} instructions
2017-08-09 16:53:56 -07:00
test_firmware.c
test_firmware: add batched firmware tests
2017-08-10 13:58:41 -07:00
test_hash.c
test_hexdump.c
test_kasan.c
kasan: report only the first error by default
2017-03-31 17:13:30 -07:00
test_kmod.c
test_kmod: fix small memory leak on filesystem tests
2017-08-10 15:54:06 -07:00
test_list_sort.c
lib: add module support to linked list sorting tests
2017-05-08 17:15:10 -07:00
test_module.c
test_parman.c
lib: fix spelling mistake: "actualy" -> "actually"
2017-02-26 11:03:38 -05:00
test_printf.c
test_rhashtable.c
lib: test_rhashtable: Fix KASAN warning
2017-07-25 12:35:23 -07:00
test_siphash.c
siphash: implement HalfSipHash1-3 for hash tables
2017-01-09 13:58:57 -05:00
test_sort.c
Revert "lib/test_sort.c: make it explicitly non-modular"
2017-05-08 17:15:10 -07:00
test_static_key_base.c
test_static_keys.c
test_sysctl.c
test_sysctl: test against int proc_dointvec() array support
2017-07-12 16:26:00 -07:00
test_user_copy.c
lib: remove check for AVR32 arch in test_user_copy
2017-05-01 09:36:30 +02:00
test_uuid.c
uuid: fix incorrect uuid_equal conversion in test_uuid_test
2017-07-21 09:38:30 +02:00
textsearch.c
timerqueue.c
timerqueue: Use rb_entry_safe() instead of open-coding it
2017-01-20 08:03:42 +01:00
ts_bm.c
ts_fsm.c
ts_kmp.c
ubsan.c
ubsan.h
ucs2_string.c
usercopy.c
copy_{from,to}_user(): move kasan checks and might_fault() out-of-line
2017-06-29 22:21:20 -04:00
uuid.c
uuid: hoist uuid_is_null() helper from libnvdimm
2017-06-05 16:59:05 +02:00
vsprintf.c
DeviceTree for 4.13:
2017-07-07 10:37:54 -07:00
win_minmax.c
lib/win_minmax: windowed min or max estimator
2016-09-21 00:22:59 -04:00