From 648e13791289125f4447184856d1b211f32d5daf Mon Sep 17 00:00:00 2001 From: Matthias Maennich Date: Wed, 4 Oct 2023 08:56:10 +0000 Subject: [PATCH 1/7] Android Common Kernel: Initial commit Initial empty commit for AOSP's kernel/common project. Signed-off-by: Matthias Maennich -- GitLab From f6b99539f84bb4c327e041fcd12d78544ef09bf5 Mon Sep 17 00:00:00 2001 From: Krishna Kurapati Date: Sat, 20 Apr 2024 10:18:55 +0530 Subject: [PATCH 2/7] UPSTREAM: usb: dwc3: core: Skip setting event buffers for host only controllers On some SoC's like SA8295P where the tertiary controller is host-only capable, GEVTADDRHI/LO, GEVTSIZ, GEVTCOUNT registers are not accessible. Trying to access them leads to a crash. For DRD/Peripheral supported controllers, event buffer setup is done again in gadget_pullup. Skip setup or cleanup of event buffers if controller is host-only capable. Suggested-by: Johan Hovold Signed-off-by: Krishna Kurapati Acked-by: Thinh Nguyen Reviewed-by: Johan Hovold Reviewed-by: Bjorn Andersson Tested-by: Johan Hovold Link: https://lore.kernel.org/r/20240420044901.884098-4-quic_kriskura@quicinc.com Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 89d7f962994604a3e3d480832788d06179abefc5 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master) Bug: 233985973 Change-Id: I66bccca575b3524b8e446f38b154d2434335a65d Signed-off-by: Krishna Kurapati --- drivers/usb/dwc3/core.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 1d0a81a3f6feb..bd6a302b657fa 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -485,6 +485,13 @@ static void dwc3_free_event_buffers(struct dwc3 *dwc) static int dwc3_alloc_event_buffers(struct dwc3 *dwc, unsigned int length) { struct dwc3_event_buffer *evt; + unsigned int hw_mode; + + hw_mode = DWC3_GHWPARAMS0_MODE(dwc->hwparams.hwparams0); + if (hw_mode == DWC3_GHWPARAMS0_MODE_HOST) { + dwc->ev_buf = NULL; + return 0; + } evt = dwc3_alloc_one_event_buffer(dwc, length); if (IS_ERR(evt)) { @@ -506,6 +513,9 @@ int dwc3_event_buffers_setup(struct dwc3 *dwc) { struct dwc3_event_buffer *evt; + if (!dwc->ev_buf) + return 0; + evt = dwc->ev_buf; evt->lpos = 0; dwc3_writel(dwc->regs, DWC3_GEVNTADRLO(0), @@ -523,6 +533,9 @@ void dwc3_event_buffers_cleanup(struct dwc3 *dwc) { struct dwc3_event_buffer *evt; + if (!dwc->ev_buf) + return; + evt = dwc->ev_buf; evt->lpos = 0; -- GitLab From 7fc37949627381ac4d7ebdd5fc26dd689786a6e9 Mon Sep 17 00:00:00 2001 From: zhujingpeng Date: Thu, 4 Jul 2024 22:08:43 +0800 Subject: [PATCH 3/7] ANDROID: GKI: Add initialization for rwsem's oem_data and vendor_data. Add initialization for rwsem's oem_data and vendor_data. The __init_rwsem() already contains a hook, but this function may be called before the rwsem_init hook is registered, causing some rwsem's oem_data to be uninitialized and causing unpredictable errors Bug: 351133539 Change-Id: I7bbb83894d200102bc7d84e91678f164529097a0 Signed-off-by: zhujingpeng (cherry picked from commit aaca6b10f1a352dec4596548396f590500f2001b) --- kernel/locking/rwsem.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c index 15ebac9c85fb7..d2d3e3d651190 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -348,6 +348,8 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name, #ifdef CONFIG_RWSEM_SPIN_ON_OWNER osq_lock_init(&sem->osq); #endif + android_init_vendor_data(sem, 1); + android_init_oem_data(sem, 1); trace_android_vh_rwsem_init(sem); } EXPORT_SYMBOL(__init_rwsem); -- GitLab From 74be75dd1061fb9f7bb18123652d6f986a433233 Mon Sep 17 00:00:00 2001 From: Charan Teja Kalla Date: Mon, 1 Jul 2024 17:10:18 +0530 Subject: [PATCH 4/7] ANDROID: mm: madvise: vendor hook to tune page flags Users can proactively reclaim the pages of an app once it is in background using the system calls, like madvise. But it may be possible that such pages turn out to be the workingset page in the conventional LRU which while swapping can result into accounting of PSI events. Although this PSI events is an indication that wrong pages are being madvised, one can also argue that he is aware of what he is doing using madvise. For such clients, add the vendor hook to tune page flags, such as clearing the Workingset during swapout so that PSI might not get accounyted during swapin. Bug: 350429581 Change-Id: I675c57f63a918c5a23df8273006426d0e611c5c5 Signed-off-by: Charan Teja Kalla --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/madvise.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 9abc0d1f53a3e..383b0404742a5 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -101,6 +101,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_waiter_prio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rt_mutex_steal); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_cold_or_pageout_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_opt_spin_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_opt_spin_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_can_spin_on_owner); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 4b0da560a4f07..6603dafabfd36 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -240,6 +240,9 @@ DECLARE_HOOK(android_vh_uprobes_replace_page, DECLARE_HOOK(android_vh_shmem_swapin_folio, TP_PROTO(struct folio *folio), TP_ARGS(folio)); +DECLARE_HOOK(android_vh_madvise_cold_or_pageout_page, + TP_PROTO(bool pageout, struct page *page), + TP_ARGS(pageout, page)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/madvise.c b/mm/madvise.c index d084cea48ffe0..e445135ed4c19 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -413,6 +413,7 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, tlb_remove_pmd_tlb_entry(tlb, pmd, addr); } + trace_android_vh_madvise_cold_or_pageout_page(pageout, page); ClearPageReferenced(page); test_and_clear_page_young(page); if (pageout) { @@ -519,6 +520,7 @@ regular_page: * As a side effect, it makes confuse idle-page tracking * because they will miss recent referenced history. */ + trace_android_vh_madvise_cold_or_pageout_page(pageout, page); ClearPageReferenced(page); test_and_clear_page_young(page); if (pageout) { -- GitLab From 56526cf940766bda65e6c3505092e6ba2598ad44 Mon Sep 17 00:00:00 2001 From: Charan Teja Kalla Date: Mon, 1 Jul 2024 17:40:21 +0530 Subject: [PATCH 5/7] ANDROID: mm: swap: export and whitelist get_shadow_from_swap_cache The shadow entry in the swapcache contains information about a page that got swapped out during the reclaim which is then used at the time of refault to determine if a page is going to be a workingset or not. Once the page is swapped out, vendors can implement some algorithms on the swap area to determine if that page can be further pushed down to slower devices, Eg: say from costly and faster disk to slower disk. But if a page that is actively used is pushed to slower disk, the swapin is going to consume time which can show up in PSI events. The side effect of increased PSI events is, an example, increased kills by LMKD. Alternatively, vendors can rely on the information stored in the swapcache and determine if that particular page in the swap can be further pushed down to slower devices. Bug: 350429581 Change-Id: Ibeee10d40cc917229fe3b0fd9a6ef34ad27033e1 Signed-off-by: Charan Teja Kalla --- mm/swap_state.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/swap_state.c b/mm/swap_state.c index 3e7db8ea40f33..df44400df83ff 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -80,6 +80,7 @@ void *get_shadow_from_swap_cache(swp_entry_t entry) return page; return NULL; } +EXPORT_SYMBOL_GPL(get_shadow_from_swap_cache); /* * add_to_swap_cache resembles filemap_add_folio on swapper_space, -- GitLab From 9e55f416954438d1c63194e8dc8a7ec6101ac012 Mon Sep 17 00:00:00 2001 From: Charan Teja Kalla Date: Tue, 2 Jul 2024 19:08:39 +0530 Subject: [PATCH 6/7] ANDROID: abi_gki_aarch64_qcom: whitelist some mm symbols Whitelist the below symbols: android_vh_madvise_cold_or_pageout_page get_shadow_from_swap_cache Compiler o/p: INFO: 2 function symbol(s) added 'int __traceiter_android_vh_madvise_cold_or_pageout_page(void*, bool, struct page*)' 'void* get_shadow_from_swap_cache(swp_entry_t)' 1 variable symbol(s) added 'struct tracepoint __tracepoint_android_vh_madvise_cold_or_pageout_page' . Bug: 350429581 Change-Id: I3f51722c9fcdc666534b4b13c62a2f7f71387242 Signed-off-by: Charan Teja Kalla --- android/abi_gki_aarch64.stg | 42 ++++++++++++++++++++++++++++++++++++ android/abi_gki_aarch64_qcom | 3 +++ 2 files changed, 45 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 0805b69306f01..4c5ad5163610c 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -308592,6 +308592,11 @@ function { parameter_id: 0xf435685e parameter_id: 0xf435685e } +function { + id: 0x5f533b5a + return_type_id: 0x18bd6530 + parameter_id: 0x27162aac +} function { id: 0x5f535d88 return_type_id: 0x391f15ea @@ -322167,6 +322172,13 @@ function { parameter_id: 0x34d3469d parameter_id: 0x6720d32f } +function { + id: 0x9a1be7cb + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x6d7f5ff6 + parameter_id: 0x06835e9c +} function { id: 0x9a1c05a3 return_type_id: 0x6720d32f @@ -345276,6 +345288,15 @@ elf_symbol { type_id: 0x9b222516 full_name: "__traceiter_android_vh_look_around_migrate_folio" } +elf_symbol { + id: 0xd224e035 + name: "__traceiter_android_vh_madvise_cold_or_pageout_page" + is_defined: true + symbol_type: FUNCTION + crc: 0x00919f06 + type_id: 0x9a1be7cb + full_name: "__traceiter_android_vh_madvise_cold_or_pageout_page" +} elf_symbol { id: 0xfb6a92a8 name: "__traceiter_android_vh_madvise_cold_pageout_skip" @@ -349758,6 +349779,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_look_around_migrate_folio" } +elf_symbol { + id: 0x35fe8b1b + name: "__tracepoint_android_vh_madvise_cold_or_pageout_page" + is_defined: true + symbol_type: OBJECT + crc: 0xdd1591ff + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_madvise_cold_or_pageout_page" +} elf_symbol { id: 0xcb34ca12 name: "__tracepoint_android_vh_madvise_cold_pageout_skip" @@ -372027,6 +372057,15 @@ elf_symbol { type_id: 0x976222f8 full_name: "get_sg_io_hdr" } +elf_symbol { + id: 0x84798b2b + name: "get_shadow_from_swap_cache" + is_defined: true + symbol_type: FUNCTION + crc: 0x74682152 + type_id: 0x5f533b5a + full_name: "get_shadow_from_swap_cache" +} elf_symbol { id: 0x75d8e345 name: "get_slabinfo" @@ -412031,6 +412070,7 @@ interface { symbol_id: 0x0992491b symbol_id: 0xe19d2bf8 symbol_id: 0x993f42ff + symbol_id: 0xd224e035 symbol_id: 0xfb6a92a8 symbol_id: 0xa94ef105 symbol_id: 0x0e1f9e23 @@ -412529,6 +412569,7 @@ interface { symbol_id: 0x8bd577fd symbol_id: 0xda2d53f2 symbol_id: 0x50a5a949 + symbol_id: 0x35fe8b1b symbol_id: 0xcb34ca12 symbol_id: 0x2f768c2b symbol_id: 0xc34a5545 @@ -415002,6 +415043,7 @@ interface { symbol_id: 0x3266d1f2 symbol_id: 0x7aac3cd4 symbol_id: 0x3a06dd48 + symbol_id: 0x84798b2b symbol_id: 0x75d8e345 symbol_id: 0xfa5debf3 symbol_id: 0x450ea7a4 diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index bec840c8b61de..75a2935d180bd 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -1259,6 +1259,7 @@ get_random_u32 __get_random_u32_below get_sg_io_hdr + get_shadow_from_swap_cache get_slabinfo get_state_synchronize_rcu get_state_synchronize_srcu @@ -3449,6 +3450,7 @@ __traceiter_android_vh_ipi_stop __traceiter_android_vh_jiffies_update __traceiter_android_vh_kswapd_per_node + __traceiter_android_vh_madvise_cold_or_pageout_page __traceiter_android_vh_mpam_set __traceiter_android_vh_post_image_save __traceiter_android_vh_printk_hotplug @@ -3600,6 +3602,7 @@ __tracepoint_android_vh_ipi_stop __tracepoint_android_vh_jiffies_update __tracepoint_android_vh_kswapd_per_node + __tracepoint_android_vh_madvise_cold_or_pageout_page __tracepoint_android_vh_mpam_set __tracepoint_android_vh_post_image_save __tracepoint_android_vh_printk_hotplug -- GitLab From 96d66062d0767aeafb690ce014ec91785820d62b Mon Sep 17 00:00:00 2001 From: zhujingpeng Date: Wed, 10 Jul 2024 11:22:28 +0800 Subject: [PATCH 7/7] ANDROID: GKI: Add initialization for mutex oem_data. Although __mutex_init() already contains a hook, but this function may be called before the mutex_init hook is registered, causing mutex's oem_data to be uninitialized and causing unpredictable errors. Bug: 352181884 Change-Id: I04378d6668fb4e7b93c11d930ac46aae484fc835 Signed-off-by: zhujingpeng --- kernel/locking/mutex.c | 1 + 1 file changed, 1 insertion(+) diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index 525648da693f8..b363b5b3ed2ae 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -54,6 +54,7 @@ __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key) #ifdef CONFIG_MUTEX_SPIN_ON_OWNER osq_lock_init(&lock->osq); #endif + android_init_oem_data(lock, 1); trace_android_vh_mutex_init(lock); debug_mutex_init(lock, name, key); -- GitLab