From 8b9682001f08385179bfb88252e39d540fc5df83 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Thu, 22 May 2025 15:48:26 +0900 Subject: [PATCH 1/6] Allow rust bpfloader to load gpuMem.bpf Test: TH Bug: 410982483 Change-Id: Ie801f58d8cb338bb99af2010c8a693c13c16579d --- loader/bpfloader.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs index e19ebf8..3c1618b 100644 --- a/loader/bpfloader.rs +++ b/loader/bpfloader.rs @@ -16,7 +16,7 @@ //! BPF loader for system and vendor applications -use android_ids::{AID_MEDIA_RW, AID_ROOT, AID_SYSTEM}; +use android_ids::{AID_GRAPHICS, AID_MEDIA_RW, AID_ROOT, AID_SYSTEM}; use android_logger::AndroidLogger; use anyhow::{anyhow, ensure}; use libbpf_rs::{ @@ -198,6 +198,7 @@ const PERM_GWO: mode_t = S_IRUSR | S_IWUSR | S_IWGRP; const PERM_UGR: mode_t = S_IRUSR | S_IRGRP; const GID_SYSTEM: u32 = AID_SYSTEM; +const GID_GRAPHICS: u32 = AID_GRAPHICS; const GID_MEDIA_RW: u32 = AID_MEDIA_RW; const FILE_ARR: &[BpfFileDesc] = &[ @@ -239,6 +240,15 @@ const FILE_ARR: &[BpfFileDesc] = &[ maps: &[], progs: &[ProgDesc::new(GID_MEDIA_RW, "fuse_media")], }, + BpfFileDesc { + filename: "gpuMem.bpf", + dir: "/etc/bpf/", + prefix: "", + critical: false, + skip_on_user: false, + maps: &[MapDesc::new(GID_MEDIA_RW, PERM_GRO, "gpu_mem_total_map")], + progs: &[ProgDesc::new(GID_GRAPHICS, "tracepoint_gpu_mem_gpu_mem_total")], + }, ]; // TODO: Remove this code when fuse-bpf is upstreamed From 3023601201541f3f805896be35cdfb9daca740a5 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Thu, 22 May 2025 15:53:28 +0900 Subject: [PATCH 2/6] Allow rust bpfloader to load gpuWork.bpf Test: TH Bug: 410982483 Change-Id: I2d2f4d0995eb8533751c91465afcdc71619375cd --- loader/bpfloader.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs index 3c1618b..9881b3f 100644 --- a/loader/bpfloader.rs +++ b/loader/bpfloader.rs @@ -249,6 +249,18 @@ const FILE_ARR: &[BpfFileDesc] = &[ maps: &[MapDesc::new(GID_MEDIA_RW, PERM_GRO, "gpu_mem_total_map")], progs: &[ProgDesc::new(GID_GRAPHICS, "tracepoint_gpu_mem_gpu_mem_total")], }, + BpfFileDesc { + filename: "gpuWork.bpf", + dir: "/etc/bpf/", + prefix: "", + critical: false, + skip_on_user: false, + maps: &[ + MapDesc::new(GID_GRAPHICS, PERM_GRW, "gpu_work_map"), + MapDesc::new(GID_GRAPHICS, PERM_GRW, "gpu_work_global_data"), + ], + progs: &[ProgDesc::new(GID_GRAPHICS, "tracepoint_power_gpu_work_period")], + }, ]; // TODO: Remove this code when fuse-bpf is upstreamed From d8506e9151bd1a7a6e54d6d4508532dd0bbfd759 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Thu, 22 May 2025 16:07:01 +0900 Subject: [PATCH 3/6] Allow rust bpfloader to load bpfMemEvents.bpf Test: TH Bug: 410982483 Change-Id: I156024bf130c1a808d657b9b501b64d2ae0d607b --- loader/bpfloader.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs index 9881b3f..c34d0ac 100644 --- a/loader/bpfloader.rs +++ b/loader/bpfloader.rs @@ -49,6 +49,8 @@ const fn kver(a: u32, b: u32, c: u32) -> u32 { const KVER_NONE: u32 = kver(0, 0, 0); const KVER_INF: u32 = 0xFFFFFFFF; +const KVER_5_10: u32 = kver(5, 10, 0); +const KVER_6_1: u32 = kver(6, 1, 0); enum KernelLevel { // Commented out unused due to rust complaining... @@ -160,6 +162,10 @@ impl MapDesc { pub const fn new(group: u32, perms: mode_t, name: &'static str) -> Self { MapDesc { name, perms, owner: AID_ROOT, group, min_kver: KVER_NONE, max_kver: KVER_INF } } + + pub const fn new_kver(group: u32, perms: mode_t, min_kver: u32, name: &'static str) -> Self { + MapDesc { name, perms, owner: AID_ROOT, group, min_kver, max_kver: KVER_INF } + } } struct ProgDesc { @@ -175,6 +181,10 @@ impl ProgDesc { pub const fn new(group: u32, name: &'static str) -> Self { ProgDesc { name, owner: AID_ROOT, group, min_kver: KVER_NONE, max_kver: KVER_INF } } + + pub const fn new_kver(group: u32, min_kver: u32, name: &'static str) -> Self { + ProgDesc { name, owner: AID_ROOT, group, min_kver, max_kver: KVER_INF } + } } struct BpfFileDesc { @@ -261,6 +271,50 @@ const FILE_ARR: &[BpfFileDesc] = &[ ], progs: &[ProgDesc::new(GID_GRAPHICS, "tracepoint_power_gpu_work_period")], }, + BpfFileDesc { + filename: "bpfMemEvents.bpf", + dir: "/etc/bpf/memevents/", + prefix: "memevents/", + critical: false, + skip_on_user: false, + maps: &[ + MapDesc::new_kver(GID_SYSTEM, PERM_GRW, KVER_5_10, "ams_rb"), + MapDesc::new_kver(GID_SYSTEM, PERM_GRW, KVER_5_10, "lmkd_rb"), + ], + progs: &[ + ProgDesc::new_kver(GID_SYSTEM, KVER_5_10, "tracepoint_oom_mark_victim_ams"), + ProgDesc::new_kver( + GID_SYSTEM, + KVER_5_10, + "tracepoint_vmscan_mm_vmscan_direct_reclaim_begin_lmkd", + ), + ProgDesc::new_kver( + GID_SYSTEM, + KVER_5_10, + "tracepoint_vmscan_mm_vmscan_direct_reclaim_end_lmkd", + ), + ProgDesc::new_kver( + GID_SYSTEM, + KVER_5_10, + "tracepoint_vmscan_mm_vmscan_kswapd_wake_lmkd", + ), + ProgDesc::new_kver( + GID_SYSTEM, + KVER_5_10, + "tracepoint_vmscan_mm_vmscan_kswapd_sleep_lmkd", + ), + ProgDesc::new_kver( + GID_SYSTEM, + KVER_6_1, + "tracepoint_android_vendor_lmk_android_trigger_vendor_lmk_kill_lmkd", + ), + ProgDesc::new_kver( + GID_SYSTEM, + KVER_6_1, + "tracepoint_kmem_mm_calculate_totalreserve_pages_lmkd", + ), + ], + }, ]; // TODO: Remove this code when fuse-bpf is upstreamed From f088c4a66e61c114308003998dd00392fdf35cb5 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Thu, 22 May 2025 16:13:11 +0900 Subject: [PATCH 4/6] Allow rust bpfloader to load bpfMemEventsTest.bpf Test: TH Bug: 410982483 Change-Id: I076aed2206e47c9432628d4383edf9e64159ee67 --- loader/bpfloader.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs index c34d0ac..40c155a 100644 --- a/loader/bpfloader.rs +++ b/loader/bpfloader.rs @@ -207,6 +207,7 @@ const PERM_GRO: mode_t = S_IRUSR | S_IWUSR | S_IRGRP; const PERM_GWO: mode_t = S_IRUSR | S_IWUSR | S_IWGRP; const PERM_UGR: mode_t = S_IRUSR | S_IRGRP; +const GID_ROOT: u32 = AID_ROOT; const GID_SYSTEM: u32 = AID_SYSTEM; const GID_GRAPHICS: u32 = AID_GRAPHICS; const GID_MEDIA_RW: u32 = AID_MEDIA_RW; @@ -315,6 +316,24 @@ const FILE_ARR: &[BpfFileDesc] = &[ ), ], }, + BpfFileDesc { + filename: "bpfMemEventsTest.bpf", + dir: "/etc/bpf/memevents/", + prefix: "memevents/", + critical: false, + skip_on_user: false, + maps: &[MapDesc::new_kver(GID_SYSTEM, PERM_GRW, KVER_5_10, "rb")], + progs: &[ + ProgDesc::new_kver(GID_SYSTEM, KVER_5_10, "tracepoint_oom_mark_victim"), + ProgDesc::new_kver(GID_ROOT, KVER_5_10, "skfilter_oom_kill"), + ProgDesc::new_kver(GID_ROOT, KVER_5_10, "skfilter_direct_reclaim_begin"), + ProgDesc::new_kver(GID_ROOT, KVER_5_10, "skfilter_direct_reclaim_end"), + ProgDesc::new_kver(GID_ROOT, KVER_5_10, "skfilter_kswapd_wake"), + ProgDesc::new_kver(GID_ROOT, KVER_5_10, "skfilter_kswapd_sleep"), + ProgDesc::new_kver(GID_SYSTEM, KVER_6_1, "skfilter_android_trigger_vendor_lmk_kill"), + ProgDesc::new_kver(GID_ROOT, KVER_6_1, "skfilter_calculate_totalreserve_pages"), + ], + }, ]; // TODO: Remove this code when fuse-bpf is upstreamed From 256af2c8569cbad0d5d1783d468638df29f19395 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Thu, 22 May 2025 16:21:07 +0900 Subject: [PATCH 5/6] Allow rust bpfloader to load bpfRingbufProg.bpf Test: TH Bug: 410982483 Change-Id: Ic1301be9a49935f4845d09d70d6b80d215dce5fa --- loader/bpfloader.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs index 40c155a..ebf2e89 100644 --- a/loader/bpfloader.rs +++ b/loader/bpfloader.rs @@ -334,6 +334,15 @@ const FILE_ARR: &[BpfFileDesc] = &[ ProgDesc::new_kver(GID_ROOT, KVER_6_1, "skfilter_calculate_totalreserve_pages"), ], }, + BpfFileDesc { + filename: "bpfRingbufProg.bpf", + dir: "/etc/bpf/", + prefix: "", + critical: true, + skip_on_user: true, + maps: &[MapDesc::new_kver(GID_ROOT, PERM_GRW, KVER_5_10, "test_ringbuf")], + progs: &[ProgDesc::new_kver(GID_ROOT, KVER_5_10, "skfilter_ringbuf_test")], + }, ]; // TODO: Remove this code when fuse-bpf is upstreamed From f89e35a9248f42ae2fbbad47a42a8c305e6c1061 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Thu, 22 May 2025 16:25:48 +0900 Subject: [PATCH 6/6] Allow rust bpfloader to load filterPowerSupplyEvents.bpf Test: TH Bug: 410982483 Change-Id: I471532a80ea872191f1ae880d3c5de2937d289ba --- loader/bpfloader.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs index ebf2e89..da414a7 100644 --- a/loader/bpfloader.rs +++ b/loader/bpfloader.rs @@ -343,6 +343,15 @@ const FILE_ARR: &[BpfFileDesc] = &[ maps: &[MapDesc::new_kver(GID_ROOT, PERM_GRW, KVER_5_10, "test_ringbuf")], progs: &[ProgDesc::new_kver(GID_ROOT, KVER_5_10, "skfilter_ringbuf_test")], }, + BpfFileDesc { + filename: "filterPowerSupplyEvents.bpf", + dir: "vendor/etc/bpf/", + prefix: "vendor/", + critical: true, + skip_on_user: false, + maps: &[], + progs: &[ProgDesc::new_kver(GID_SYSTEM, KVER_5_10, "skfilter_power_supply")], + }, ]; // TODO: Remove this code when fuse-bpf is upstreamed