Roman Gushchin
d1191db271
UPSTREAM: bpf: rework memlock-based memory accounting for maps
...
In order to unify the existing memlock charging code with the
memcg-based memory accounting, which will be added later, let's
rework the current scheme.
Currently the following design is used:
1) .alloc() callback optionally checks if the allocation will likely
succeed using bpf_map_precharge_memlock()
2) .alloc() performs actual allocations
3) .alloc() callback calculates map cost and sets map.memory.pages
4) map_create() calls bpf_map_init_memlock() which sets map.memory.user
and performs actual charging; in case of failure the map is
destroyed
<map is in use>
1) bpf_map_free_deferred() calls bpf_map_release_memlock(), which
performs uncharge and releases the user
2) .map_free() callback releases the memory
The scheme can be simplified and made more robust:
1) .alloc() calculates map cost and calls bpf_map_charge_init()
2) bpf_map_charge_init() sets map.memory.user and performs actual
charge
3) .alloc() performs actual allocations
<map is in use>
1) .map_free() callback releases the memory
2) bpf_map_charge_finish() performs uncharge and releases the user
The new scheme also allows to reuse bpf_map_charge_init()/finish()
functions for memcg-based accounting. Because charges are performed
before actual allocations and uncharges after freeing the memory,
no bogus memory pressure can be created.
In cases when the map structure is not available (e.g. it's not
created yet, or is already destroyed), on-stack bpf_map_memory
structure is used. The charge can be transferred with the
bpf_map_charge_move() function.
Change-Id: I299bfa9d3e74f366861b6de3bf17951a1374824b
Signed-off-by: Roman Gushchin <guro@fb.com>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Sorayukii <sorayukii69@gmail.com>
2026-05-15 17:57:45 +07:00
..
bpf
UPSTREAM: bpf: rework memlock-based memory accounting for maps
2026-05-15 17:57:45 +07:00
cgroup
BACKPORT: bpf: decouple the lifetime of cgroup_bpf from cgroup itself
2026-05-15 17:57:44 +07:00
configs
debug
UPSTREAM: kdb: use correct pointer when 'btc' calls 'btt'
2022-02-21 16:30:05 +01:00
events
UPSTREAM: perf/core: add perf_get_event() to return perf_event given a struct file
2026-05-15 17:56:32 +07:00
gcov
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-20
2023-01-19 15:42:12 +01:00
irq
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-07-18 14:05:31 +03:00
livepatch
locking
UPSTREAM: locking/lockdep: Add new check to lock_downgrade()
2026-05-15 17:57:11 +07:00
power
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
printk
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-06-12 01:39:01 +03:00
rcu
rcu: Fix self-wakeups for grace-period kthread
2026-05-15 17:49:36 +07:00
sched
UPSTREAM: bpf: check that BPF programs run with preemption disabled
2026-05-15 17:57:32 +07:00
time
BACKPORT: rcu: Ports some of RCU's taken from k4.14
2026-05-15 17:49:30 +07:00
trace
BACKPORT: bpf: add writable context for raw tracepoints
2026-05-15 17:57:41 +07:00
.gitignore
BACKPORT: Provide in-kernel headers to make extending kernel easier
2019-07-03 14:30:53 -04:00
acct.c
acct: fix potential integer overflow in encode_comp_t()
2023-01-07 12:07:31 +01:00
async.c
audit.c
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-18.1-caf-sdm845
2021-04-26 01:27:02 +03:00
audit.h
audit: fix a net reference leak in audit_list_rules_send()
2021-04-07 12:05:41 +02:00
audit_fsnotify.c
audit_tree.c
audit_watch.c
audit: CONFIG_CHANGE don't log internal bookkeeping as an event
2020-10-01 20:40:07 +02:00
auditfilter.c
audit: fix a net reference leak in audit_list_rules_send()
2021-04-07 12:05:41 +02:00
auditsc.c
Merge android-4.9.204(72e8598) into msm-4.9
2020-01-06 18:13:26 +08:00
backtracetest.c
bounds.c
capability.c
cfi.c
compat.c
configs.c
context_tracking.c
cpu.c
rcu: Migrate callbacks earlier in the CPU-offline timeline
2026-05-15 17:49:31 +07:00
cpu_pm.c
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into HEAD
2020-06-30 02:33:58 +03:00
crash_dump.c
cred.c
memcg: account security cred as well to kmemcg
2020-01-12 11:24:13 +01:00
delayacct.c
dma.c
exec_domain.c
exit.c
cgroup: Call cgroup_release() before __exit_signal()
2026-05-15 17:50:40 +07:00
extable.c
BACKPORT: bpf: make jited programs visible in traces
2026-05-15 17:54:30 +07:00
fork.c
BACKPORT: cgroup: cgroup v2 freezer
2026-05-15 17:50:46 +07:00
freezer.c
futex.c
mm, futex: fix shared futex pgoff on shmem huge page
2021-07-11 12:46:40 +02:00
gen_kheaders.sh
BACKPORT: kheaders: Do not regenerate archive if config is not changed
2019-07-03 14:31:16 -04:00
groups.c
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
hung_task.c
Merge android-4.9.170 ( 1ef64da) into msm-4.9
2019-05-30 14:15:13 +08:00
irq_work.c
jump_label.c
jump_label: Disable jump labels in __exit code
2021-06-06 18:42:18 +03:00
kallsyms.c
BACKPORT: symbol lookup: introduce dereference_symbol_descriptor()
2026-05-15 17:57:02 +07:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
BACKPORT: bpf: introduce bpf_spin_lock
2026-05-15 17:57:29 +07:00
Kconfig.preempt
kcov.c
kexec.c
kexec_core.c
treewide: Backport new vmalloc for large performance benefits
2026-05-15 17:48:25 +07:00
kexec_file.c
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-07-18 14:05:31 +03:00
kexec_internal.h
kheaders.c
BACKPORT: kheaders: Move from proc to sysfs
2019-07-03 14:31:02 -04:00
kmod.c
BACKPORT: kmod: split out umh code into its own file
2026-05-15 17:56:31 +07:00
kprobes.c
UPSTREAM: kprobes: Show blacklist addresses as same as kallsyms does
2026-05-15 17:57:02 +07:00
ksysfs.c
kthread.c
Merge branch 'android-4.9-q' of https://android.googlesource.com/kernel/common into lineage-18.1-caf-sdm845
2021-07-22 02:11:11 +03:00
latencytop.c
Makefile
BACKPORT: kmod: split out umh code into its own file
2026-05-15 17:56:31 +07:00
membarrier.c
memremap.c
module-internal.h
module.c
BACKPORT: bpf: support raw tracepoints in modules
2026-05-15 17:57:25 +07:00
module_signing.c
notifier.c
x86/mm: split vmalloc_sync_all()
2020-04-02 17:20:26 +02:00
nsproxy.c
padata.c
padata: purge get_cpu and reorder_via_wq from padata_do_serial
2020-05-27 16:41:53 +02:00
panic.c
BACKPORT: locking/refcount: Create unchecked atomic_t implementation
2026-05-15 17:54:59 +07:00
params.c
pid.c
UPSTREAM: locking/atomic, kref: Add KREF_INIT()
2021-01-05 16:00:48 +00:00
pid_namespace.c
memcg: enable accounting for pids in nested pid namespaces
2021-09-22 11:43:08 +02:00
profile.c
profiling: fix shift-out-of-bounds bugs
2021-09-26 13:36:18 +02:00
ptrace.c
ptrace: Reimplement PTRACE_KILL by always sending SIGKILL
2022-06-14 16:52:28 +02:00
range.c
reboot.c
reboot: fix overflow parsing reboot cpu number
2020-11-18 18:26:32 +01:00
relay.c
kernel/relay.c: fix memleak on destroy relay channel
2020-08-26 10:29:03 +02:00
resource.c
seccomp.c
BACKPORT: bpf: drop unnecessary context cast from BPF_PROG_RUN
2026-05-15 17:54:14 +07:00
signal.c
BACKPORT: cgroup: freezer: call cgroup_enter_frozen() with preemption disabled in ptrace_stop()
2026-05-15 17:50:47 +07:00
smp.c
Merge remote-tracking branch 'common/android-4.9-q' into android12-4.9-sdm845
2022-06-12 01:39:01 +03:00
smpboot.c
smpboot.h
softirq.c
stacktrace.c
stop_machine.c
sys.c
syscall: Fake uname to 4.19.325 for bpfloader/netd
2026-05-15 17:57:09 +07:00
sys_ni.c
BACKPORT: signal: support CLONE_PIDFD with pidfd_send_signal
2019-09-03 13:44:59 -07:00
sysctl.c
BACKPORT: bpf: enable program stats
2026-05-15 17:57:32 +07:00
sysctl_binary.c
task_work.c
taskstats.c
taskstats: fix data-race
2020-01-12 11:24:12 +01:00
test_kprobes.c
torture.c
tracepoint.c
BACKPORT: tracepoint: Add tracepoint_probe_register_may_exist() for BPF tracing
2026-05-15 17:57:41 +07:00
tsacct.c
taskstats: Cleanup the use of task->exit_code
2022-02-23 11:56:40 +01:00
ucount.c
uid16.c
umh.c
BACKPORT: umh: introduce fork_usermode_blob() helper
2026-05-15 17:56:31 +07:00
up.c
user-return-notifier.c
user.c
user_namespace.c
utsname.c
utsname_sysctl.c
watchdog.c
watchdog_hld.c
workqueue.c
rcu: Create RCU-specific workqueues with rescuers
2026-05-15 17:49:31 +07:00
workqueue_internal.h