android_kernel_motorola_sm6375/lib
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Marco Elver 423c5febd4
FROMGIT: kfence: await for allocation using wait_event
Patch series "kfence: optimize timer scheduling", v2.

We have observed that mostly-idle systems with KFENCE enabled wake up
otherwise idle CPUs, preventing such to enter a lower power state.
Debugging revealed that KFENCE spends too much active time in
toggle_allocation_gate().

While the first version of KFENCE was using all the right bits to be
scheduling optimal, and thus power efficient, by simply using wait_event()
+ wake_up(), that code was unfortunately removed.

As KFENCE was exposed to various different configs and tests, the
scheduling optimal code slowly disappeared.  First because of hung task
warnings, and finally because of deadlocks when an allocation is made by
timer code with debug objects enabled.  Clearly, the "fixes" were not too
friendly for devices that want to be power efficient.

Therefore, let's try a little harder to fix the hung task and deadlock
problems that we have with wait_event() + wake_up(), while remaining as
scheduling friendly and power efficient as possible.

Crucially, we need to defer the wake_up() to an irq_work, avoiding any
potential for deadlock.

The result with this series is that on the devices where we observed a
power regression, power usage returns back to baseline levels.

This patch (of 3):

On mostly-idle systems, we have observed that toggle_allocation_gate() is
a cause of frequent wake-ups, preventing an otherwise idle CPU to go into
a lower power state.

A late change in KFENCE's development, due to a potential deadlock [1],
required changing the scheduling-friendly wait_event_timeout() and
wake_up() to an open-coded wait-loop using schedule_timeout().  [1]
https://lkml.kernel.org/r/000000000000c0645805b7f982e4@google.com

To avoid unnecessary wake-ups, switch to using wait_event_timeout().

Unfortunately, we still cannot use a version with direct wake_up() in
__kfence_alloc() due to the same potential for deadlock as in [1].
Instead, add a level of indirection via an irq_work that is scheduled if
we determine that the kfence_timer requires a wake_up().

Link: https://lkml.kernel.org/r/20210421105132.3965998-1-elver@google.com
Link: https://lkml.kernel.org/r/20210421105132.3965998-2-elver@google.com
Fixes: 0ce20dd84089 ("mm: add Kernel Electric-Fence infrastructure")
Signed-off-by: Marco Elver <elver@google.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Jann Horn <jannh@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Hillf Danton <hdanton@sina.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>

Bug: 172317151
Bug: 185280916
Test: power team confirmed there's no regression
(cherry picked from commit 0ac66fbbadde5547db190e9d87ff2e77d245f9a2
 https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git akpm)
Signed-off-by: Alexander Potapenko <glider@google.com>
Change-Id: Idba39683f0b76eb3f70df1113e43d94845fab5bf
2026-05-07 17:24:08 +03:00
..
842 lib: 842: Improve error handling in sw842_compress() 2025-04-10 14:29:40 +02:00
crypto UPSTREAM: crypto: poly1305 - fix poly1305_core_setkey() declaration 2025-09-24 12:16:39 +02:00
dim linux/dim: Do nothing if no time delta between samples 2023-05-30 12:44:01 +01:00
fonts lib/fonts: fix undefined behavior in bit shift for get_default_font 2023-01-18 11:40:54 +01:00
livepatch
lz4 lz4: fix kernel decompression speed 2024-04-16 03:34:44 +03:00
lzo
math bitmap: introduce generic optimized bitmap_size() 2024-09-04 13:14:50 +02:00
mpi crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui() 2023-09-23 11:00:03 +02:00
raid6 lib/raid6/test/Makefile: Use $(pound) instead of \# for Make 4.3 2022-04-15 14:18:23 +02:00
reed_solomon
vdso This is the 5.4.226 stable release 2022-12-08 16:50:20 +00:00
xz xz: cleanup CRC32 edits from 2018 2024-11-08 16:20:30 +01:00
zlib_deflate
zlib_inflate
zstd
.gitignore
argv_split.c
ashldi3.c
ashrdi3.c
asn1_decoder.c
assoc_array.c assoc_array: Fix BUG_ON during garbage collect 2022-06-06 08:33:50 +02:00
atomic64.c
atomic64_test.c
audit.c
bcd.c
bch.c
bitmap.c
bitrev.c
bsearch.c
btree.c
bucket_locks.c
bug.c bug: Remove redundant condition check in report_bug 2021-05-14 09:44:27 +02:00
build_OID_registry
bust_spinlocks.c
check_signature.c
checksum.c
clz_ctz.c lib/clz_ctz.c: Fix __clzdi2() and __ctzdi2() for 32-bit kernels 2023-08-30 16:27:25 +02:00
clz_tab.c
cmdline.c
cmpdi2.c
compat_audit.c
cpu_rmap.c lib: cpu_rmap: Fix potential use-after-free in irq_cpu_rmap_release() 2023-06-14 10:59:56 +02:00
cpumask.c
crc-ccitt.c
crc-itu-t.c
crc-t10dif.c
crc4.c
crc7.c
crc8.c
crc16.c
crc32.c lib/crc32.c: fix trivial typo in preprocessor condition 2020-10-29 09:57:52 +01:00
crc32defs.h
crc32test.c lib/crc32test: remove extra local_irq_disable/enable 2020-11-10 12:37:27 +01:00
crc64.c
ctype.c
debug_info.c
debug_locks.c
debugobjects.c debugobjects: Fix conditions in fill_pool() 2024-11-08 16:20:34 +01:00
dec_and_lock.c
decompress.c
decompress_bunzip2.c decompress_bunzip2: fix rare decompression failure 2024-08-19 05:33:38 +02:00
decompress_inflate.c
decompress_unlz4.c lib/decompress_unlz4.c: correctly handle zero-padding around initrds. 2021-07-20 16:10:46 +02:00
decompress_unlzma.c
decompress_unlzo.c
decompress_unxz.c lib/xz: Avoid overlapping memcpy() with invalid input with in-place decompression 2021-11-17 09:48:31 +01:00
devres.c Revert "ANDROID: Revert: Merge 5.4.60 into android11-5.4" 2020-08-23 13:12:51 +02:00
digsig.c
dump_stack.c
dynamic_debug.c This is the 5.4.276 stable release 2024-05-17 15:29:56 +00:00
dynamic_queue_limits.c dql: Fix dql->limit value when reset. 2025-06-04 14:32:30 +02:00
earlycpio.c
error-inject.c
errseq.c
extable.c
fault-inject.c
fdt.c
fdt_empty_tree.c
fdt_ro.c
fdt_rw.c
fdt_strerror.c
fdt_sw.c
fdt_wip.c
find_bit.c
find_bit_benchmark.c
flex_proportions.c
gen_crc32table.c
gen_crc64table.c
genalloc.c lib/genalloc: fix device leak in of_gen_pool_get() 2025-10-29 13:59:53 +01:00
generic-radix-tree.c lib/generic-radix-tree.c: Fix rare race in __genradix_ptr_alloc() 2024-09-12 11:03:55 +02:00
glob.c
globtest.c
hexdump.c ANDROID: GKI: update the abi .xml file 2022-05-12 18:25:29 +02:00
hweight.c
idr.c ida: Fix crash in ida_free when the bitmap is empty 2024-01-25 14:34:21 -08:00
inflate.c
interval_tree.c
interval_tree_test.c
iomap.c
iomap_copy.c
iommu-helper.c
ioremap.c
iov_iter.c mm/highmem: Lift memcpy_[to|from]_page to core 2023-01-18 11:41:55 +01:00
irq_poll.c
irq_regs.c
is_single_threaded.c
kasprintf.c
Kconfig Merge tag 'ASB-2022-11-01_11-5.4' of https://android.googlesource.com/kernel/common into android13-5.4-lahaina 2022-11-09 19:53:28 +02:00
Kconfig.debug BACKPORT: mm: add Kernel Electric-Fence infrastructure 2026-05-07 17:24:01 +03:00
Kconfig.kasan
Kconfig.kfence FROMGIT: kfence: await for allocation using wait_event 2026-05-07 17:24:08 +03:00
Kconfig.kgdb
Kconfig.ubsan
kfifo.c
klist.c
kobject.c kobject: Fix slab-out-of-bounds in fill_kobj_path() 2023-11-08 11:23:38 +01:00
kobject_uevent.c kobject_uevent: Fix OOB access within zap_modalias_env() 2024-08-19 05:33:38 +02:00
kstrtox.c lib: vsprintf: Fix handling of number field widths in vsscanf 2021-07-14 16:53:16 +02:00
kstrtox.h lib: vsprintf: Fix handling of number field widths in vsscanf 2021-07-14 16:53:16 +02:00
libcrc32c.c
list_debug.c lib/list_debug.c: Detect uninitialized lists 2022-08-25 11:18:36 +02:00
list_sort.c
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-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
lockref.c lockref: stop doing cpu_relax in the cmpxchg loop 2023-02-06 07:52:42 +01:00
logic_pio.c PCI: Fix pci_register_io_range() memory leak 2021-03-17 17:03:44 +01:00
lru_cache.c
lshrdi3.c
Makefile UPSTREAM: crypto: chacha - move existing library code into lib/crypto 2025-09-24 12:16:29 +02:00
memcat_p.c
memory-notifier-error-inject.c
memweight.c
muldi3.c
net_utils.c
netdev-notifier-error-inject.c
nlattr.c netlink: prevent potential spectre v1 gadgets 2023-02-06 07:52:45 +01:00
nmi_backtrace.c
nodemask.c nodemask: Fix return values to be unsigned 2022-06-14 18:12:02 +02:00
notifier-error-inject.c lib/notifier-error-inject: fix error when writing -errno to debugfs file 2023-01-18 11:40:55 +01:00
notifier-error-inject.h
objagg.c mlxsw: spectrum_acl_erp: Fix object nesting warning 2024-08-19 05:33:28 +02:00
of-reconfig-notifier-error-inject.c
oid_registry.c
once.c ANDROID: fix up 131287ff83 ("once: add DO_ONCE_SLOW() for sleepable contexts") 2022-10-30 11:07:55 +01:00
packing.c
parman.c
parser.c
pci_iomap.c
percpu-refcount.c
percpu_counter.c
percpu_test.c
plist.c
pm-notifier-error-inject.c
radix-tree.c radix tree: remove unused variable 2023-08-30 16:27:26 +02:00
random32.c random: replace custom notifier chain with standard one 2022-06-22 14:11:13 +02:00
ratelimit.c ratelimit: Fix data-races in ___ratelimit(). 2022-09-05 10:27:42 +02:00
rbtree.c
rbtree_test.c
refcount.c ANDROID: restore some removed refcount functions 2022-07-30 15:19:41 +02:00
rhashtable.c
sbitmap.c
scatterlist.c sgl_alloc_order: fix memory leak 2020-11-05 11:43:22 +01:00
seq_buf.c seq_buf: Fix overflow in seq_buf_putmem_hex() 2021-07-19 08:53:16 +02:00
sg_pool.c
sg_split.c lib: scatterlist: fix sg_split_phys to preserve original scatterlist offsets 2025-05-02 07:39:15 +02:00
sha1.c BACKPORT: crypto: lib/sha1 - rename "sha" to "sha1" 2025-12-23 13:36:17 -08:00
show_mem.c
siphash.c siphash: use one source of truth for siphash permutations 2022-06-22 14:11:16 +02:00
smp_processor_id.c
sort.c
stackdepot.c Merge tag 'ASB-2024-07-05_11-5.4' of https://android.googlesource.com/kernel/common into android13-5.4-lahaina 2024-08-05 21:38:21 +03:00
stmp_device.c
string.c lib/string.c: implement stpcpy 2020-10-01 13:18:23 +02:00
string_helpers.c lib: string_helpers: silence snprintf() output truncation warning 2024-12-14 19:44:39 +01:00
strncpy_from_user.c UPSTREAM: lib/strncpy_from_user.c: Mask out bytes after NUL terminator. 2026-02-01 20:44:43 -08:00
strnlen_user.c
syscall.c lib/syscall: fix syscall registers retrieval on 32-bit platforms 2020-12-11 13:23:32 +01:00
test-kstrtox.c
test-string_helpers.c
test_bitfield.c
test_bitmap.c UPSTREAM: lib: use KSTM_MODULE_GLOBALS macro in kselftest drivers 2026-05-07 17:24:06 +03:00
test_blackhole_dev.c net: blackhole_dev: fix build warning for ethh set but not used 2024-03-26 18:22:15 -04:00
test_bpf.c UPSTREAM: bpf/tests: Use migrate disable instead of preempt disable 2025-12-23 13:35:58 -08:00
test_debug_virtual.c
test_firmware.c test_firmware: return ENOMEM instead of ENOSPC on failed memory allocation 2023-08-11 11:54:00 +02:00
test_hash.c
test_hexdump.c
test_ida.c ida: Fix crash in ida_free when the bitmap is empty 2024-01-25 14:34:21 -08:00
test_kasan.c
test_kmod.c lib/test: use after free in register_test_dev_kmod() 2022-04-15 14:18:21 +02:00
test_list_sort.c
test_memcat_p.c
test_meminit.c lib/test_meminit: fix off-by-one error in test_pages() 2023-10-25 11:53:17 +02:00
test_module.c
test_objagg.c lib: test_objagg: Set error message in check_expect_hints_stats() 2025-07-17 18:24:56 +02:00
test_overflow.c overflow: Implement size_t saturating arithmetic helpers 2024-09-04 13:14:51 +02:00
test_parman.c
test_printf.c UPSTREAM: lib/vsprintf: no_hash_pointers prints all addresses as unhashed 2026-05-07 17:24:06 +03:00
test_rhashtable.c
test_siphash.c
test_sort.c
test_stackinit.c This is the 5.4.148 stable release 2021-09-25 14:41:58 +02:00
test_static_key_base.c
test_static_keys.c
test_string.c
test_strscpy.c
test_sysctl.c
test_ubsan.c
test_user_copy.c
test_uuid.c
test_vmalloc.c
test_xarray.c XArray: Fix xas_create_range() when multi-order entry present 2022-04-15 14:18:28 +02:00
textsearch.c
timerqueue.c
ts_bm.c lib/ts_bm: reset initial match offset for every block of text 2023-07-27 08:37:12 +02:00
ts_fsm.c
ts_kmp.c
ubsan.c
ubsan.h
ucmpdi2.c
ucs2_string.c
usercopy.c uaccess: Add speculation barrier to copy_from_user() 2023-02-25 11:53:26 +01:00
uuid.c
vsprintf.c UPSTREAM: lib/vsprintf: no_hash_pointers prints all addresses as unhashed 2026-05-07 17:24:06 +03:00
win_minmax.c
xarray.c XArray: Update the LRU list in xas_split() 2022-04-15 14:18:28 +02:00
xxhash.c