From 3d1b582966dc4f9d2c10142ee63cfa30ab04e0e4 Mon Sep 17 00:00:00 2001 From: Stefano Garzarella Date: Mon, 25 Sep 2023 12:30:57 +0200 Subject: [PATCH 01/46] UPSTREAM: vringh: don't use vringh_kiov_advance() in vringh_iov_xfer() commit 7aed44babc7f97e82b38e9a68515e699692cc100 upstream. In the while loop of vringh_iov_xfer(), `partlen` could be 0 if one of the `iov` has 0 lenght. In this case, we should skip the iov and go to the next one. But calling vringh_kiov_advance() with 0 lenght does not cause the advancement, since it returns immediately if asked to advance by 0 bytes. Let's restore the code that was there before commit b8c06ad4d67d ("vringh: implement vringh_kiov_advance()"), avoiding using vringh_kiov_advance(). Bug: 302200656 Fixes: b8c06ad4d67d ("vringh: implement vringh_kiov_advance()") Cc: stable@vger.kernel.org Reported-by: Jason Wang Signed-off-by: Stefano Garzarella Acked-by: Jason Wang Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 3a72decd6b49ff11a894aabd4d9b3025f046fe61) Signed-off-by: Lee Jones Change-Id: I5ed14650aca07e0f8d52023cf148bd63e87d04c9 --- drivers/vhost/vringh.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/vhost/vringh.c b/drivers/vhost/vringh.c index 33eb941fcf15..10bfc5f1c50d 100644 --- a/drivers/vhost/vringh.c +++ b/drivers/vhost/vringh.c @@ -123,8 +123,18 @@ static inline ssize_t vringh_iov_xfer(struct vringh *vrh, done += partlen; len -= partlen; ptr += partlen; + iov->consumed += partlen; + iov->iov[iov->i].iov_len -= partlen; + iov->iov[iov->i].iov_base += partlen; - vringh_kiov_advance(iov, partlen); + if (!iov->iov[iov->i].iov_len) { + /* Fix up old iov element then increment. */ + iov->iov[iov->i].iov_len = iov->consumed; + iov->iov[iov->i].iov_base -= iov->consumed; + + iov->consumed = 0; + iov->i++; + } } return done; } From e329419f70cbadedd8d5ff2f59638a949e8c46ac Mon Sep 17 00:00:00 2001 From: "T.J. Mercier" Date: Mon, 14 Aug 2023 15:16:36 +0000 Subject: [PATCH 02/46] UPSTREAM: mm: multi-gen LRU: don't spin during memcg release When a memcg is in the process of being released mem_cgroup_tryget will fail because its reference count has already reached 0. This can happen during reclaim if the memcg has already been offlined, and we reclaim all remaining pages attributed to the offlined memcg. shrink_many attempts to skip the empty memcg in this case, and continue reclaiming from the remaining memcgs in the old generation. If there is only one memcg remaining, or if all remaining memcgs are in the process of being released then shrink_many will spin until all memcgs have finished being released. The release occurs through a workqueue, so it can take a while before kswapd is able to make any further progress. This fix results in reductions in kswapd activity and direct reclaim in a test where 28 apps (working set size > total memory) are repeatedly launched in a random sequence: A B delta ratio(%) allocstall_movable 5962 3539 -2423 -40.64 allocstall_normal 2661 2417 -244 -9.17 kswapd_high_wmark_hit_quickly 53152 7594 -45558 -85.71 pageoutrun 57365 11750 -45615 -79.52 Bug: 254441685 Link: https://lkml.kernel.org/r/20230814151636.1639123-1-tjmercier@google.com Fixes: e4dde56cd208 ("mm: multi-gen LRU: per-node lru_gen_folio lists") Signed-off-by: T.J. Mercier Acked-by: Yu Zhao Cc: Signed-off-by: Andrew Morton (cherry picked from commit 6867c7a3320669cbe44b905a3eb35db725c6d470) Signed-off-by: Lee Jones Change-Id: I37a874d87cf5f2f8fad742f175bc6f603134e660 --- mm/vmscan.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index 8c78b7d83ea5..51c8e8e677d3 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -4804,16 +4804,17 @@ void lru_gen_release_memcg(struct mem_cgroup *memcg) spin_lock_irq(&pgdat->memcg_lru.lock); - VM_WARN_ON_ONCE(hlist_nulls_unhashed(&lruvec->lrugen.list)); + if (hlist_nulls_unhashed(&lruvec->lrugen.list)) + goto unlock; gen = lruvec->lrugen.gen; - hlist_nulls_del_rcu(&lruvec->lrugen.list); + hlist_nulls_del_init_rcu(&lruvec->lrugen.list); pgdat->memcg_lru.nr_memcgs[gen]--; if (!pgdat->memcg_lru.nr_memcgs[gen] && gen == get_memcg_gen(pgdat->memcg_lru.seq)) WRITE_ONCE(pgdat->memcg_lru.seq, pgdat->memcg_lru.seq + 1); - +unlock: spin_unlock_irq(&pgdat->memcg_lru.lock); } } @@ -5433,8 +5434,10 @@ restart: rcu_read_lock(); hlist_nulls_for_each_entry_rcu(lrugen, pos, &pgdat->memcg_lru.fifo[gen][bin], list) { - if (op) + if (op) { lru_gen_rotate_memcg(lruvec, op); + op = 0; + } mem_cgroup_put(memcg); @@ -5442,7 +5445,7 @@ restart: memcg = lruvec_memcg(lruvec); if (!mem_cgroup_tryget(memcg)) { - op = 0; + lru_gen_release_memcg(memcg); memcg = NULL; continue; } From 9d38c0bc652e76456c017ee8af5daeaac63ca581 Mon Sep 17 00:00:00 2001 From: RD Babiera Date: Mon, 14 Aug 2023 17:02:26 +0000 Subject: [PATCH 03/46] BACKPORT: usb: typec: altmodes/displayport: Signal hpd when configuring pin assignment When connecting to some DisplayPort partners, the initial status update after entering DisplayPort Alt Mode notifies that the DFP_D/UFP_D is not in the connected state. This leads to sending a configure message that keeps the device in USB mode. The port partner then sets DFP_D/UFP_D to the connected state and HPD to high in the same Attention message. Currently, the HPD signal is dropped in order to handle configuration. This patch saves changes to the HPD signal when the device chooses to configure during dp_altmode_status_update, and invokes sysfs_notify if necessary for HPD after configuring. Fixes: 0e3bb7d6894d ("usb: typec: Add driver for DisplayPort alternate mode") Cc: stable@vger.kernel.org Signed-off-by: RD Babiera Acked-by: Heikki Krogerus Link: https://lore.kernel.org/all/20230726020903.1409072-1-rdbabiera@google.com/ Signed-off-by: Greg Kroah-Hartman Bug: 288137625 (cherry picked from commit 5a5ccd61cfd76156cb3e0373c300c509d05448ce) [rd: resolved minor conflict in displayport.c] Signed-off-by: RD Babiera (cherry picked from https://android-review.googlesource.com/q/commit:056a17677de932cccda77faf3f1c53a5b59c8cf5) Merged-In: I26ef49949aa0681ea6b88d8c95f5ddd54fe84664 Change-Id: I26ef49949aa0681ea6b88d8c95f5ddd54fe84664 --- drivers/usb/typec/altmodes/displayport.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/altmodes/displayport.c b/drivers/usb/typec/altmodes/displayport.c index 6dd86f2a679d..9d6f2eeaaa93 100644 --- a/drivers/usb/typec/altmodes/displayport.c +++ b/drivers/usb/typec/altmodes/displayport.c @@ -60,6 +60,7 @@ struct dp_altmode { enum dp_state state; bool hpd; + bool pending_hpd; struct mutex lock; /* device lock */ struct work_struct work; @@ -144,8 +145,13 @@ static int dp_altmode_status_update(struct dp_altmode *dp) dp->state = DP_STATE_EXIT; } else if (!(con & DP_CONF_CURRENTLY(dp->data.conf))) { ret = dp_altmode_configure(dp, con); - if (!ret) + if (!ret) { dp->state = DP_STATE_CONFIGURE; + if (dp->hpd != hpd) { + dp->hpd = hpd; + dp->pending_hpd = true; + } + } } else { if (dp->hpd != hpd) { drm_connector_oob_hotplug_event(dp->connector_fwnode); @@ -161,6 +167,15 @@ static int dp_altmode_configured(struct dp_altmode *dp) { sysfs_notify(&dp->alt->dev.kobj, "displayport", "configuration"); sysfs_notify(&dp->alt->dev.kobj, "displayport", "pin_assignment"); + /* + * If the DFP_D/UFP_D sends a change in HPD when first notifying the + * DisplayPort driver that it is connected, then we wait until + * configuration is complete to signal HPD. + */ + if (dp->pending_hpd) { + sysfs_notify(&dp->alt->dev.kobj, "displayport", "hpd"); + dp->pending_hpd = false; + } return dp_altmode_notify(dp); } From 4bbeaddf9a63bf847511e5bfd790fc2893819d00 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Tue, 31 Oct 2023 09:36:34 +0000 Subject: [PATCH 04/46] Revert "ANDROID: KVM: arm64: Don't allocate from handle_host_mem_abort" This reverts commit 5d0225cdf0a0e151577eecca07aceae1bf291a9b. Reason for revert: b/306244914 Change-Id: Iaf2bda1b0844cfce134c78598af0fca083f32947 Signed-off-by: Will Deacon --- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 29 +-------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c index 7dcfe1bf5c69..86cd64130328 100644 --- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c +++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c @@ -79,35 +79,10 @@ static void hyp_unlock_component(void) hyp_spin_unlock(&pkvm_pgd_lock); } -static void assert_host_can_alloc(void) -{ - /* We can always get back to the host from guest context */ - if (read_sysreg(vttbr_el2) != kvm_get_vttbr(&host_mmu.arch.mmu)) - return; - - /* - * An error code must be returned to EL1 to handle memory allocation - * failures cleanly. That's doable for explicit calls into higher - * ELs, but not so much for other EL2 entry reasons such as mem aborts. - * Thankfully we don't need memory allocation in these cases by - * construction, so let's enforce the invariant. - */ - switch (ESR_ELx_EC(read_sysreg(esr_el2))) { - case ESR_ELx_EC_HVC64: - case ESR_ELx_EC_SMC64: - break; - default: - WARN_ON(1); - } -} - static void *host_s2_zalloc_pages_exact(size_t size) { - void *addr; + void *addr = hyp_alloc_pages(&host_s2_pool, get_order(size)); - assert_host_can_alloc(); - - addr = hyp_alloc_pages(&host_s2_pool, get_order(size)); hyp_split_page(hyp_virt_to_page(addr)); /* @@ -122,8 +97,6 @@ static void *host_s2_zalloc_pages_exact(size_t size) static void *host_s2_zalloc_page(void *pool) { - assert_host_can_alloc(); - return hyp_alloc_pages(pool, 0); } From ff5fa0b7bda7c24c0b61b12b0cce33f1ef685d17 Mon Sep 17 00:00:00 2001 From: Chun-Hung Wu Date: Fri, 6 Oct 2023 15:05:42 +0800 Subject: [PATCH 05/46] FROMLIST: ufs: core: Expand MCQ queue slot to DeviceQueueDepth + 1 Allow UFSHCI 4.0 controllers to fully utilize MCQ queue slots. Bug: 307782690 Link: https://lore.kernel.org/all/20231101082402.20856-1-naomi.chu@mediatek.com/T/ Change-Id: Ib78db763ae5ff875c337774354de86e67f5017b8 Signed-off-by: Alice Chao Signed-off-by: Naomi Chu Signed-off-by: Chun-Hung Wu --- drivers/ufs/core/ufs-mcq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c index 64bad535f79f..bfcbe3f13d27 100644 --- a/drivers/ufs/core/ufs-mcq.c +++ b/drivers/ufs/core/ufs-mcq.c @@ -446,7 +446,7 @@ int ufshcd_mcq_init(struct ufs_hba *hba) for (i = 0; i < hba->nr_hw_queues; i++) { hwq = &hba->uhq[i]; - hwq->max_entries = hba->nutrs; + hwq->max_entries = hba->nutrs + 1; spin_lock_init(&hwq->sq_lock); spin_lock_init(&hwq->cq_lock); mutex_init(&hwq->sq_mutex); From 7350783e675a1fde810d0d0f3ddd10700c549a83 Mon Sep 17 00:00:00 2001 From: zhanghui Date: Thu, 1 Jun 2023 20:46:14 +0800 Subject: [PATCH 06/46] UPSTREAM: scsi: ufs: core: Fix ufshcd_inc_sq_tail() function bug When qdepth is not power of 2, not every bit of the mask is 1, so in sq_tail_slot some bits will be cleared unexpectedly. Bug: 307782690 Change-Id: I7acb5f08f6af87cb5057464827658197047d8641 (cherry picked from commit e01d05bbf6348ccd9f5a057280310d78ea9e7b52) Signed-off-by: zhanghui Link: https://lore.kernel.org/r/20230601124613.1446-1-zhanghui31@xiaomi.com Reviewed-by: Bart Van Assche Reviewed-by: Stanley Chu Signed-off-by: Martin K. Petersen --- drivers/ufs/core/ufshcd-priv.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/ufs/core/ufshcd-priv.h b/drivers/ufs/core/ufshcd-priv.h index 83cf0a47ec14..d02bd0128df5 100644 --- a/drivers/ufs/core/ufshcd-priv.h +++ b/drivers/ufs/core/ufshcd-priv.h @@ -370,10 +370,11 @@ static inline bool ufs_is_valid_unit_desc_lun(struct ufs_dev_info *dev_info, u8 static inline void ufshcd_inc_sq_tail(struct ufs_hw_queue *q) { - u32 mask = q->max_entries - 1; u32 val; - q->sq_tail_slot = (q->sq_tail_slot + 1) & mask; + q->sq_tail_slot++; + if (q->sq_tail_slot == q->max_entries) + q->sq_tail_slot = 0; val = q->sq_tail_slot * sizeof(struct utp_transfer_req_desc); writel(val, q->mcq_sq_tail); } From 2799026a2823e505ff230756c87ede4e68f37de1 Mon Sep 17 00:00:00 2001 From: "Bao D. Nguyen" Date: Tue, 15 Aug 2023 18:38:29 -0700 Subject: [PATCH 07/46] UPSTREAM: scsi: ufs: mcq: Fix the search/wrap around logic The search and wrap around logic in the ufshcd_mcq_sqe_search() function does not work correctly when the hwq's queue depth is not a power of two number. Correct it so that any queue depth with a positive integer value within the supported range would work. Bug: 307782690 Change-Id: I4350ac71da051db24923a587db435be2f7b7eebb (cherry picked from commit d0c89af3130eb4ff962266bb7597690a696f1cbc) Signed-off-by: "Bao D. Nguyen" Link: https://lore.kernel.org/r/ff49c15be205135ed3ec186f3086694c02867dbd.1692149603.git.quic_nguyenb@quicinc.com Reviewed-by: Bart Van Assche Fixes: 8d7290348992 ("scsi: ufs: mcq: Add supporting functions for MCQ abort") Signed-off-by: Martin K. Petersen --- drivers/ufs/core/ufs-mcq.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c index bfcbe3f13d27..a20cba43d217 100644 --- a/drivers/ufs/core/ufs-mcq.c +++ b/drivers/ufs/core/ufs-mcq.c @@ -593,7 +593,6 @@ static bool ufshcd_mcq_sqe_search(struct ufs_hba *hba, { struct ufshcd_lrb *lrbp = &hba->lrb[task_tag]; struct utp_transfer_req_desc *utrd; - u32 mask = hwq->max_entries - 1; __le64 cmd_desc_base_addr; bool ret = false; u64 addr, match; @@ -621,7 +620,10 @@ static bool ufshcd_mcq_sqe_search(struct ufs_hba *hba, ret = true; goto out; } - sq_head_slot = (sq_head_slot + 1) & mask; + + sq_head_slot++; + if (sq_head_slot == hwq->max_entries) + sq_head_slot = 0; } out: From f8d3b450e9beb7962d2ca9ebe66444eb9aa7ef13 Mon Sep 17 00:00:00 2001 From: Chun-Hung Wu Date: Wed, 1 Nov 2023 22:30:10 +0800 Subject: [PATCH 08/46] ANDROID: Update symbol list for mtk 3 function symbol(s) added 'void add_wait_queue_priority(struct wait_queue_head*, struct wait_queue_entry*)' 'int get_user_pages_fast_only(unsigned long, int, unsigned int, struct page**)' 'long get_user_pages_unlocked(unsigned long, unsigned long, struct page**, unsigned int)' Bug: 308742956 Change-Id: I4147320c5efa1c8dcc1949b753587a3705675e7a Signed-off-by: Chun-Hung Wu --- android/abi_gki_aarch64.stg | 38 +++++++++++++++++++++++++++++++++++++ android/abi_gki_aarch64_mtk | 3 +++ 2 files changed, 41 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 0bf47df4b1b3..dd103fabe5a2 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -325886,6 +325886,14 @@ function { parameter_id: 0x36d078a0 parameter_id: 0xf435685e } +function { + id: 0xab336d04 + return_type_id: 0xfc0e1dbd + parameter_id: 0x33756485 + parameter_id: 0x33756485 + parameter_id: 0x0b30ee00 + parameter_id: 0x4585663f +} function { id: 0xab344d2b return_type_id: 0x31b5a66f @@ -341904,6 +341912,15 @@ elf_symbol { type_id: 0x154da6ed full_name: "add_wait_queue_exclusive" } +elf_symbol { + id: 0x717596ae + name: "add_wait_queue_priority" + is_defined: true + symbol_type: FUNCTION + crc: 0x005f18a6 + type_id: 0x154da6ed + full_name: "add_wait_queue_priority" +} elf_symbol { id: 0xf9bb4624 name: "addrconf_add_linklocal" @@ -359941,6 +359958,15 @@ elf_symbol { type_id: 0x90d074d8 full_name: "get_user_pages_fast" } +elf_symbol { + id: 0x6a8a4883 + name: "get_user_pages_fast_only" + is_defined: true + symbol_type: FUNCTION + crc: 0xce7bb883 + type_id: 0x90d074d8 + full_name: "get_user_pages_fast_only" +} elf_symbol { id: 0x4909936e name: "get_user_pages_remote" @@ -359950,6 +359976,15 @@ elf_symbol { type_id: 0xa12d9647 full_name: "get_user_pages_remote" } +elf_symbol { + id: 0x474c6d6a + name: "get_user_pages_unlocked" + is_defined: true + symbol_type: FUNCTION + crc: 0x25491db2 + type_id: 0xab336d04 + full_name: "get_user_pages_unlocked" +} elf_symbol { id: 0xce04fca2 name: "get_vaddr_frames" @@ -397365,6 +397400,7 @@ interface { symbol_id: 0xdee25d92 symbol_id: 0xe251c99f symbol_id: 0xac3dec68 + symbol_id: 0x717596ae symbol_id: 0xf9bb4624 symbol_id: 0x60b70858 symbol_id: 0x7f488498 @@ -399368,7 +399404,9 @@ interface { symbol_id: 0x0ac85cf7 symbol_id: 0x853a2529 symbol_id: 0x236d47d9 + symbol_id: 0x6a8a4883 symbol_id: 0x4909936e + symbol_id: 0x474c6d6a symbol_id: 0xce04fca2 symbol_id: 0x4ba4e06f symbol_id: 0xbac82e84 diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index 2dcdd2f1f94c..73dd66c144a2 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -7,6 +7,7 @@ add_uevent_var add_wait_queue add_wait_queue_exclusive + add_wait_queue_priority adjust_managed_page_count aes_encrypt aes_expandkey @@ -1012,7 +1013,9 @@ get_user_ifreq get_user_pages get_user_pages_fast + get_user_pages_fast_only get_user_pages_remote + get_user_pages_unlocked get_vaddr_frames get_zeroed_page gfn_to_pfn_memslot From 977770ec2702151f21b3bdec1e404645105c10d8 Mon Sep 17 00:00:00 2001 From: Keita Aihara Date: Fri, 29 Sep 2023 10:57:49 +0900 Subject: [PATCH 09/46] ANDROID: mmc: Add vendor hooks for sdcard failure diagnostics For sdcard failure diagnostics, add vendor hooks to monitor the sdcard bus speed mode change and the sdcard reset failure in the request recovery handling. Bug: 303549480 Change-Id: Id40337ffb09a31199335cdb8a273d76618415649 Signed-off-by: Keita Aihara --- drivers/android/vendor_hooks.c | 2 ++ drivers/mmc/core/block.c | 3 +++ drivers/mmc/core/sd.c | 4 ++++ include/trace/hooks/mmc.h | 9 +++++++++ 4 files changed, 18 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 289b292d7958..da1b7379dce2 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -351,3 +351,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_resume_begin); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_resume_end); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_early_resume_begin); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_get_folio); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_blk_mq_rw_recovery); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sd_update_bus_speed_mode); diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 498333b769fd..50dbfd0838dd 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -49,6 +49,8 @@ #include +#include + #include "queue.h" #include "block.h" #include "core.h" @@ -1870,6 +1872,7 @@ static void mmc_blk_mq_rw_recovery(struct mmc_queue *mq, struct request *req) err && mmc_blk_reset(md, card->host, type)) { pr_err("%s: recovery failed!\n", req->q->disk->disk_name); mqrq->retries = MMC_NO_RETRIES; + trace_android_vh_mmc_blk_mq_rw_recovery(card); return; } diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c index 246ce027ae0a..1ded32b60beb 100644 --- a/drivers/mmc/core/sd.c +++ b/drivers/mmc/core/sd.c @@ -21,6 +21,8 @@ #include #include +#include + #include "core.h" #include "card.h" #include "host.h" @@ -481,6 +483,8 @@ static void sd_update_bus_speed_mode(struct mmc_card *card) SD_MODE_UHS_SDR12)) { card->sd_bus_speed = UHS_SDR12_BUS_SPEED; } + + trace_android_vh_sd_update_bus_speed_mode(card); } static int sd_set_bus_speed_mode(struct mmc_card *card, u8 *status) diff --git a/include/trace/hooks/mmc.h b/include/trace/hooks/mmc.h index 3654c2a928ee..a5b6279b1934 100644 --- a/include/trace/hooks/mmc.h +++ b/include/trace/hooks/mmc.h @@ -7,11 +7,20 @@ #define _TRACE_HOOK_MMC_H #include struct mmc_host; +struct mmc_card; /* * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +DECLARE_HOOK(android_vh_mmc_blk_mq_rw_recovery, + TP_PROTO(struct mmc_card *card), + TP_ARGS(card)); + +DECLARE_HOOK(android_vh_sd_update_bus_speed_mode, + TP_PROTO(struct mmc_card *card), + TP_ARGS(card)); + DECLARE_RESTRICTED_HOOK(android_rvh_mmc_suspend, TP_PROTO(struct mmc_host *host), TP_ARGS(host), 1); From 131de563f6277046086249d812efa8cce7efb7ef Mon Sep 17 00:00:00 2001 From: Keita Aihara Date: Fri, 6 Oct 2023 17:47:19 +0900 Subject: [PATCH 10/46] ANDROID: ABI: Update sony symbol list and stg 2 function symbol(s) added 'int __traceiter_android_vh_mmc_blk_mq_rw_recovery(void*, struct mmc_card*)' 'int __traceiter_android_vh_sd_update_bus_speed_mode(void*, struct mmc_card*)' 2 variable symbol(s) added 'struct tracepoint __tracepoint_android_vh_mmc_blk_mq_rw_recovery' 'struct tracepoint __tracepoint_android_vh_sd_update_bus_speed_mode' Bug: 303549480 Change-Id: I753ab0d7b4c2742eab63f56712e13260ee0e5e0e Signed-off-by: Keita Aihara --- BUILD.bazel | 1 + android/abi_gki_aarch64.stg | 46 ++++++++++++++++++++++++++++++++++++ android/abi_gki_aarch64_sony | 8 +++++++ 3 files changed, 55 insertions(+) create mode 100644 android/abi_gki_aarch64_sony diff --git a/BUILD.bazel b/BUILD.bazel index 1035027d3f17..6f4d747cdc94 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -112,6 +112,7 @@ filegroup( "android/abi_gki_aarch64_pixel", "android/abi_gki_aarch64_qcom", "android/abi_gki_aarch64_rockchip", + "android/abi_gki_aarch64_sony", "android/abi_gki_aarch64_tuxera", "android/abi_gki_aarch64_unisoc", "android/abi_gki_aarch64_virtual_device", diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index dd103fabe5a2..d3dacd27aa2c 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -317504,6 +317504,12 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x02a8d0c9 } +function { + id: 0x9ba62ef4 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x026525e9 +} function { id: 0x9ba6ac88 return_type_id: 0x6720d32f @@ -335675,6 +335681,15 @@ elf_symbol { type_id: 0x9b8b2a3f full_name: "__traceiter_android_vh_mmap_region" } +elf_symbol { + id: 0x0c9da1aa + name: "__traceiter_android_vh_mmc_blk_mq_rw_recovery" + is_defined: true + symbol_type: FUNCTION + crc: 0x9a666675 + type_id: 0x9ba62ef4 + full_name: "__traceiter_android_vh_mmc_blk_mq_rw_recovery" +} elf_symbol { id: 0x5612c9d1 name: "__traceiter_android_vh_mmput" @@ -336170,6 +336185,15 @@ elf_symbol { type_id: 0x9b17b01e full_name: "__traceiter_android_vh_scheduler_tick" } +elf_symbol { + id: 0xe4ec133d + name: "__traceiter_android_vh_sd_update_bus_speed_mode" + is_defined: true + symbol_type: FUNCTION + crc: 0xd12257ab + type_id: 0x9ba62ef4 + full_name: "__traceiter_android_vh_sd_update_bus_speed_mode" +} elf_symbol { id: 0xaa3f6a65 name: "__traceiter_android_vh_set_wake_flags" @@ -339482,6 +339506,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mmap_region" } +elf_symbol { + id: 0x1daf6454 + name: "__tracepoint_android_vh_mmc_blk_mq_rw_recovery" + is_defined: true + symbol_type: OBJECT + crc: 0xc7751460 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mmc_blk_mq_rw_recovery" +} elf_symbol { id: 0x41c8d09b name: "__tracepoint_android_vh_mmput" @@ -339977,6 +340010,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_scheduler_tick" } +elf_symbol { + id: 0xcfab6e83 + name: "__tracepoint_android_vh_sd_update_bus_speed_mode" + is_defined: true + symbol_type: OBJECT + crc: 0x6a78e6b4 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_sd_update_bus_speed_mode" +} elf_symbol { id: 0xd7ceb15f name: "__tracepoint_android_vh_set_wake_flags" @@ -396707,6 +396749,7 @@ interface { symbol_id: 0x22de652b symbol_id: 0xf928bf8a symbol_id: 0xe44dacb1 + symbol_id: 0x0c9da1aa symbol_id: 0x5612c9d1 symbol_id: 0xa77effd1 symbol_id: 0xb7624cbd @@ -396762,6 +396805,7 @@ interface { symbol_id: 0xb5ed74f6 symbol_id: 0xedb34a44 symbol_id: 0xb841c45e + symbol_id: 0xe4ec133d symbol_id: 0xaa3f6a65 symbol_id: 0xa2fe718f symbol_id: 0xe828d15b @@ -397130,6 +397174,7 @@ interface { symbol_id: 0xa3d5f70d symbol_id: 0x72c79d80 symbol_id: 0xb6da564f + symbol_id: 0x1daf6454 symbol_id: 0x41c8d09b symbol_id: 0xe2ad11db symbol_id: 0xcac93aff @@ -397185,6 +397230,7 @@ interface { symbol_id: 0x931fa088 symbol_id: 0xaaf6a826 symbol_id: 0xff2bccb8 + symbol_id: 0xcfab6e83 symbol_id: 0xd7ceb15f symbol_id: 0x923147c1 symbol_id: 0x5b6bc3a9 diff --git a/android/abi_gki_aarch64_sony b/android/abi_gki_aarch64_sony new file mode 100644 index 000000000000..378e681cd184 --- /dev/null +++ b/android/abi_gki_aarch64_sony @@ -0,0 +1,8 @@ +[abi_symbol_list] +#required for failure diagnostics + __traceiter_block_rq_complete + __tracepoint_block_rq_complete + __traceiter_android_vh_mmc_blk_mq_rw_recovery + __tracepoint_android_vh_mmc_blk_mq_rw_recovery + __traceiter_android_vh_sd_update_bus_speed_mode + __tracepoint_android_vh_sd_update_bus_speed_mode From af888bd2a127e8074c41584e14e9cbf5e01676d2 Mon Sep 17 00:00:00 2001 From: Subash Abhinov Kasiviswanathan Date: Wed, 1 Nov 2023 10:58:22 -0700 Subject: [PATCH 11/46] ANDROID: abi_gki_aarch64_qcom: Add __netif_rx Add the symbol __netif_rx which is needed by rmnet modules. Symbols added: __netif_rx Bug: 308756580 Change-Id: I26dfad610739a18764c9ac6dbd6edb798ba295b6 Signed-off-by: Subash Abhinov Kasiviswanathan --- android/abi_gki_aarch64.stg | 10 ++++++++++ android/abi_gki_aarch64_qcom | 1 + 2 files changed, 11 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index d3dacd27aa2c..d4ae97783973 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -332378,6 +332378,15 @@ elf_symbol { type_id: 0x16983453 full_name: "__netif_napi_del" } +elf_symbol { + id: 0xe6b5218e + name: "__netif_rx" + is_defined: true + symbol_type: FUNCTION + crc: 0xfe0edf2f + type_id: 0x9cd33969 + full_name: "__netif_rx" +} elf_symbol { id: 0x6337b091 name: "__netif_set_xps_queue" @@ -396382,6 +396391,7 @@ interface { symbol_id: 0x9d90da6e symbol_id: 0x6793e03f symbol_id: 0x17112d4d + symbol_id: 0xe6b5218e symbol_id: 0x6337b091 symbol_id: 0x4fc5d8fb symbol_id: 0x45dc2e90 diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index a49fbc5c7e3c..b958ead78318 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -2038,6 +2038,7 @@ __netif_napi_del netif_receive_skb netif_receive_skb_list + __netif_rx netif_rx netif_schedule_queue netif_set_real_num_rx_queues From 7bec8a8180669a95c44a767fa76f2a3dd3c46220 Mon Sep 17 00:00:00 2001 From: Zhipeng Wang Date: Wed, 25 Oct 2023 16:33:46 +0900 Subject: [PATCH 12/46] ANDROID: ABI: Update symbol list for imx 1 function symbol(s) added 'int devm_regulator_get_enable_optional(struct device*, const char*)' Bug: 307653069 Change-Id: I1e26da9575327170e50deedd95df605ef9d65714 Signed-off-by: Zhipeng Wang --- android/abi_gki_aarch64.stg | 10 ++++++++++ android/abi_gki_aarch64_imx | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index d4ae97783973..142b560622f4 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -351393,6 +351393,15 @@ elf_symbol { type_id: 0x8556217d full_name: "devm_regulator_get" } +elf_symbol { + id: 0x502d0b80 + name: "devm_regulator_get_enable_optional" + is_defined: true + symbol_type: FUNCTION + crc: 0x85886f4b + type_id: 0x9dee9fa0 + full_name: "devm_regulator_get_enable_optional" +} elf_symbol { id: 0x3c0cefc0 name: "devm_regulator_get_exclusive" @@ -398505,6 +398514,7 @@ interface { symbol_id: 0x09b1d689 symbol_id: 0x7c6f39ac symbol_id: 0xadafc9a7 + symbol_id: 0x502d0b80 symbol_id: 0x3c0cefc0 symbol_id: 0x7775cca4 symbol_id: 0xed639cd9 diff --git a/android/abi_gki_aarch64_imx b/android/abi_gki_aarch64_imx index 53edd1d3b5d7..c3797c477a4c 100644 --- a/android/abi_gki_aarch64_imx +++ b/android/abi_gki_aarch64_imx @@ -365,6 +365,7 @@ devm_nvmem_device_get devm_nvmem_register devm_of_clk_add_hw_provider + devm_of_iomap devm_of_phy_get __devm_of_phy_provider_register devm_of_platform_populate @@ -391,6 +392,7 @@ __devm_regmap_init_spi devm_regulator_bulk_get devm_regulator_get + devm_regulator_get_enable_optional devm_regulator_get_exclusive devm_regulator_get_optional devm_regulator_register @@ -1410,6 +1412,7 @@ of_iomap of_irq_find_parent of_irq_get + of_irq_get_byname of_machine_is_compatible of_match_device of_match_node @@ -1719,6 +1722,7 @@ regmap_get_device __regmap_init_mmio_clk regmap_irq_get_virq + regmap_raw_read regmap_raw_write regmap_read regmap_register_patch From fef66e854447f877dfd51fbb1da7b78fef69581e Mon Sep 17 00:00:00 2001 From: Kyle Zeng Date: Tue, 5 Sep 2023 15:04:09 -0700 Subject: [PATCH 13/46] UPSTREAM: netfilter: ipset: add the missing IP_SET_HASH_WITH_NET0 macro for ip_set_hash_netportnet.c commit 050d91c03b28ca479df13dfb02bcd2c60dd6a878 upstream. The missing IP_SET_HASH_WITH_NET0 macro in ip_set_hash_netportnet can lead to the use of wrong `CIDR_POS(c)` for calculating array offsets, which can lead to integer underflow. As a result, it leads to slab out-of-bound access. This patch adds back the IP_SET_HASH_WITH_NET0 macro to ip_set_hash_netportnet to address the issue. Bug: 302199939 Fixes: 886503f34d63 ("netfilter: ipset: actually allow allowable CIDR 0 in hash:net,port,net") Suggested-by: Jozsef Kadlecsik Signed-off-by: Kyle Zeng Acked-by: Jozsef Kadlecsik Signed-off-by: Florian Westphal Signed-off-by: Greg Kroah-Hartman (cherry picked from commit a9e6142e5f8f6ac7d1bca45c1b2b13b084ea9e14) Signed-off-by: Lee Jones Change-Id: I11cc1650e7df9d54041164b6bdb01f3a0de46de4 --- net/netfilter/ipset/ip_set_hash_netportnet.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/netfilter/ipset/ip_set_hash_netportnet.c b/net/netfilter/ipset/ip_set_hash_netportnet.c index 005a7ce87217..bf4f91b78e1d 100644 --- a/net/netfilter/ipset/ip_set_hash_netportnet.c +++ b/net/netfilter/ipset/ip_set_hash_netportnet.c @@ -36,6 +36,7 @@ MODULE_ALIAS("ip_set_hash:net,port,net"); #define IP_SET_HASH_WITH_PROTO #define IP_SET_HASH_WITH_NETS #define IPSET_NET_COUNT 2 +#define IP_SET_HASH_WITH_NET0 /* IPv4 variant */ From 71f3b61ee413ca5b91b05eee379ac5a242dcfd15 Mon Sep 17 00:00:00 2001 From: liwei Date: Wed, 25 Oct 2023 09:45:04 +0800 Subject: [PATCH 14/46] ANDROID: vendor_hooks: add hooks for adjust kvmalloc_node alloc_flags since we can't control all kvmalloc_node callsite's gfp_flags, we add a vendor hook in kvmalloc_node to tune the reclaim behavior for some really high-order allocation Bug: 300857012 Change-Id: I5f0c4c2921d204289911704e3a205f6a1dc50d04 Signed-off-by: liwei --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/util.c | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index da1b7379dce2..a7d07619a094 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -255,6 +255,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_mutex_list_add); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_adjust_alloc_flags); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_adjust_kvmalloc_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_looper_state_registered); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_thread_read); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_free_proc); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index ab479064007c..9221cf9e8ca3 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -168,6 +168,9 @@ struct oom_control; DECLARE_HOOK(android_vh_mm_alloc_pages_may_oom_exit, TP_PROTO(struct oom_control *oc, unsigned long did_some_progress), TP_ARGS(oc, did_some_progress)); +DECLARE_HOOK(android_vh_adjust_kvmalloc_flags, + TP_PROTO(unsigned int order, gfp_t *alloc_flags), + TP_ARGS(order, alloc_flags)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/util.c b/mm/util.c index 4afa7ddffb7e..29c9470aeeef 100644 --- a/mm/util.c +++ b/mm/util.c @@ -25,7 +25,7 @@ #include #include - +#include #include "internal.h" #include "swap.h" @@ -582,6 +582,7 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node) /* nofail semantic is implemented by the vmalloc fallback */ kmalloc_flags &= ~__GFP_NOFAIL; } + trace_android_vh_adjust_kvmalloc_flags(get_order(size), &kmalloc_flags); ret = kmalloc_node(size, kmalloc_flags, node); From ad9947dc8d4b931adb2db34afb84e772af0767e9 Mon Sep 17 00:00:00 2001 From: liwei1234 Date: Thu, 2 Nov 2023 08:40:43 +0800 Subject: [PATCH 15/46] ANDROID: GKI: Update oplus symbol list 1 function symbol(s) added 'int __traceiter_android_vh_adjust_kvmalloc_flags(void*, unsigned int, gfp_t*)' 1 variable symbol(s) added 'struct tracepoint __tracepoint_android_vh_adjust_kvmalloc_flags' Bug: 300857012 Change-Id: Ifdcdd36ff47a0e0e3ecaa33b158d5b83ccb912a2 Signed-off-by: liwei --- android/abi_gki_aarch64.stg | 20 ++++++++++++++++++++ android/abi_gki_aarch64_oplus | 2 ++ 2 files changed, 22 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 142b560622f4..d266fe351690 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -334556,6 +334556,15 @@ elf_symbol { type_id: 0x9ab41198 full_name: "__traceiter_android_vh_adjust_alloc_flags" } +elf_symbol { + id: 0xc9756e19 + name: "__traceiter_android_vh_adjust_kvmalloc_flags" + is_defined: true + symbol_type: FUNCTION + crc: 0xda390245 + type_id: 0x9ab41198 + full_name: "__traceiter_android_vh_adjust_kvmalloc_flags" +} elf_symbol { id: 0xd0b4a794 name: "__traceiter_android_vh_alloc_oem_binder_struct" @@ -338381,6 +338390,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_adjust_alloc_flags" } +elf_symbol { + id: 0xf3cd7eeb + name: "__tracepoint_android_vh_adjust_kvmalloc_flags" + is_defined: true + symbol_type: OBJECT + crc: 0x7a4f5bf1 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_adjust_kvmalloc_flags" +} elf_symbol { id: 0xd7f9868e name: "__tracepoint_android_vh_alloc_oem_binder_struct" @@ -396642,6 +396660,7 @@ interface { symbol_id: 0xa3af7947 symbol_id: 0x86527a4e symbol_id: 0xf71b3e6c + symbol_id: 0xc9756e19 symbol_id: 0xd0b4a794 symbol_id: 0x33f9278c symbol_id: 0x2e343246 @@ -397067,6 +397086,7 @@ interface { symbol_id: 0x4f980315 symbol_id: 0xe1489e0c symbol_id: 0x8f23a62a + symbol_id: 0xf3cd7eeb symbol_id: 0xd7f9868e symbol_id: 0x37776872 symbol_id: 0xfc735654 diff --git a/android/abi_gki_aarch64_oplus b/android/abi_gki_aarch64_oplus index 5558b80cb237..152c07468993 100644 --- a/android/abi_gki_aarch64_oplus +++ b/android/abi_gki_aarch64_oplus @@ -161,6 +161,7 @@ __traceiter_android_vh_rwsem_opt_spin_start __traceiter_android_vh_rwsem_wake_finish __traceiter_android_vh_adjust_alloc_flags + __traceiter_android_vh_adjust_kvmalloc_flags __traceiter_android_vh_sched_stat_runtime_rt __traceiter_android_vh_shrink_node_memcgs __traceiter_android_vh_sync_txn_recvd @@ -250,6 +251,7 @@ __tracepoint_android_vh_rwsem_opt_spin_start __tracepoint_android_vh_rwsem_wake_finish __tracepoint_android_vh_adjust_alloc_flags + __tracepoint_android_vh_adjust_kvmalloc_flags __tracepoint_android_vh_sched_stat_runtime_rt __tracepoint_android_vh_shrink_node_memcgs __tracepoint_android_vh_sync_txn_recvd From a8206e30234f2b3df0d2f8cfbead86f66024aefd Mon Sep 17 00:00:00 2001 From: Oven Date: Fri, 30 Jun 2023 10:57:12 +0800 Subject: [PATCH 16/46] ANDROID: vendor_hooks: Add hooks to avoid key threads stalled in memory allocations We add these hooks to avoid key threads blocked in memory allocation path. -android_vh_free_unref_page_bypass ----We create a memory pool for the key threads. This hook determines whether a page should be free to the pool or to buddy freelist. It works with a existing hook `android_vh_alloc_pages_reclaim_bypass`, which takes pages out of the pool. -android_vh_kvmalloc_node_use_vmalloc ----For key threads, we perfer not to run into direct reclaim. So we clear __GFP_DIRECT_RECLAIM flag. For threads which are not that important, we perfer use vmalloc. -android_vh_should_alloc_pages_retry ----Before key threads run into direct reclaim, we want to retry with a lower watermark. -android_vh_unreserve_highatomic_bypass ----We want to keep more highatomic pages when unreserve them to avoid highatomic allocation failures. -android_vh_rmqueue_bulk_bypass ----We found sometimes when key threads run into rmqueue_bulk, it took several milliseconds spinning at zone->lock or filling per-cpu pages. We use this hook to take pages from the mempool mentioned above, rather than grab zone->lock and fill a batch of pages to per-cpu. Bug: 288216516 Change-Id: I1656032d6819ca627723341987b6094775bc345f Signed-off-by: Oven --- drivers/android/vendor_hooks.c | 5 +++++ include/trace/hooks/mm.h | 18 ++++++++++++++++++ mm/page_alloc.c | 26 ++++++++++++++++++++++++++ mm/util.c | 8 +++++++- 4 files changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index a7d07619a094..9a8d317b83f2 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -171,6 +171,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_balance_anon_file_reclaim); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_show_max_freq); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dm_bufio_shrink_scan_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cleanup_old_buffers_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_unref_page_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kvmalloc_node_use_vmalloc); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_alloc_pages_retry); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_unreserve_highatomic_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_bulk_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_insert); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_delete); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_replace); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 9221cf9e8ca3..8af085c167d5 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -123,6 +123,24 @@ DECLARE_HOOK(android_vh_mm_compaction_begin, DECLARE_HOOK(android_vh_mm_compaction_end, TP_PROTO(struct compact_control *cc, long vendor_ret), TP_ARGS(cc, vendor_ret)); +DECLARE_HOOK(android_vh_free_unref_page_bypass, + TP_PROTO(struct page *page, int order, int migratetype, bool *bypass), + TP_ARGS(page, order, migratetype, bypass)); +DECLARE_HOOK(android_vh_kvmalloc_node_use_vmalloc, + TP_PROTO(size_t size, gfp_t *kmalloc_flags, bool *use_vmalloc), + TP_ARGS(size, kmalloc_flags, use_vmalloc)); +DECLARE_HOOK(android_vh_should_alloc_pages_retry, + TP_PROTO(gfp_t gfp_mask, int order, int *alloc_flags, + int migratetype, struct zone *preferred_zone, struct page **page, bool *should_alloc_retry), + TP_ARGS(gfp_mask, order, alloc_flags, + migratetype, preferred_zone, page, should_alloc_retry)); +DECLARE_HOOK(android_vh_unreserve_highatomic_bypass, + TP_PROTO(bool force, struct zone *zone, bool *skip_unreserve_highatomic), + TP_ARGS(force, zone, skip_unreserve_highatomic)); +DECLARE_HOOK(android_vh_rmqueue_bulk_bypass, + TP_PROTO(unsigned int order, struct per_cpu_pages *pcp, int migratetype, + struct list_head *list), + TP_ARGS(order, pcp, migratetype, list)); struct mem_cgroup; DECLARE_HOOK(android_vh_mem_cgroup_alloc, TP_PROTO(struct mem_cgroup *memcg), diff --git a/mm/page_alloc.c b/mm/page_alloc.c index b246d214ce31..ed6c52045448 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1747,11 +1747,15 @@ static void __free_pages_ok(struct page *page, unsigned int order, int migratetype; unsigned long pfn = page_to_pfn(page); struct zone *zone = page_zone(page); + bool skip_free_unref_page = false; if (!free_pages_prepare(page, order, true, fpi_flags)) return; migratetype = get_pfnblock_migratetype(page, pfn); + trace_android_vh_free_unref_page_bypass(page, order, migratetype, &skip_free_unref_page); + if (skip_free_unref_page) + return; spin_lock_irqsave(&zone->lock, flags); if (unlikely(has_isolate_pageblock(zone) || @@ -2980,6 +2984,7 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac, struct page *page; int order; bool ret; + bool skip_unreserve_highatomic = false; for_each_zone_zonelist_nodemask(zone, z, zonelist, ac->highest_zoneidx, ac->nodemask) { @@ -2991,6 +2996,11 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac, pageblock_nr_pages) continue; + trace_android_vh_unreserve_highatomic_bypass(force, zone, + &skip_unreserve_highatomic); + if (skip_unreserve_highatomic) + continue; + spin_lock_irqsave(&zone->lock, flags); for (order = 0; order < MAX_ORDER; order++) { struct free_area *area = &(zone->free_area[order]); @@ -3247,6 +3257,10 @@ static struct list_head *get_populated_pcp_list(struct zone *zone, int batch = READ_ONCE(pcp->batch); int alloced; + trace_android_vh_rmqueue_bulk_bypass(order, pcp, migratetype, list); + if (!list_empty(list)) + return list; + /* * Scale batch relative to order if batch implies * free pages can be stored on the PCP. Batch can @@ -3578,10 +3592,16 @@ void free_unref_page(struct page *page, unsigned int order) struct zone *zone; unsigned long pfn = page_to_pfn(page); int migratetype; + bool skip_free_unref_page = false; if (!free_unref_page_prepare(page, pfn, order)) return; + migratetype = get_pcppage_migratetype(page); + trace_android_vh_free_unref_page_bypass(page, order, migratetype, &skip_free_unref_page); + if (skip_free_unref_page) + return; + /* * We only track unmovable, reclaimable, movable, and CMA on pcp lists. * Place ISOLATE pages on the isolated list because they are being @@ -5140,6 +5160,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, unsigned int zonelist_iter_cookie; int reserve_flags; unsigned long alloc_start = jiffies; + bool should_alloc_retry = false; /* * We also sanity check to catch abuse of atomic reserves being used by * callers that are not in atomic context. @@ -5292,6 +5313,11 @@ retry: if (page) goto got_pg; + trace_android_vh_should_alloc_pages_retry(gfp_mask, order, &alloc_flags, + ac->migratetype, ac->preferred_zoneref->zone, &page, &should_alloc_retry); + if (should_alloc_retry) + goto retry; + /* Try direct reclaim and then allocating */ page = __alloc_pages_direct_reclaim(gfp_mask, order, alloc_flags, ac, &did_some_progress); diff --git a/mm/util.c b/mm/util.c index 29c9470aeeef..c96c359196eb 100644 --- a/mm/util.c +++ b/mm/util.c @@ -29,8 +29,9 @@ #include "internal.h" #include "swap.h" -#ifndef __GENSYMS__ +#ifndef __GENKSYMS__ #include +#include #endif /** @@ -565,7 +566,11 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node) { gfp_t kmalloc_flags = flags; void *ret; + bool use_vmalloc = false; + trace_android_vh_kvmalloc_node_use_vmalloc(size, &kmalloc_flags, &use_vmalloc); + if (use_vmalloc) + goto use_vmalloc_node; /* * We want to attempt a large physically contiguous block first because * it is less likely to fragment multiple larger blocks and therefore @@ -609,6 +614,7 @@ void *kvmalloc_node(size_t size, gfp_t flags, int node) * about the resulting pointer, and cannot play * protection games. */ +use_vmalloc_node: return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END, flags, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP, node, __builtin_return_address(0)); From 0c859c21803fa3ec1afc2f2e9eae3486ea36beda Mon Sep 17 00:00:00 2001 From: liang zhang Date: Thu, 21 Apr 2022 09:43:37 +0000 Subject: [PATCH 17/46] ANDROID: add for tuning readahead size MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tune ReadAhead size for better memory usage and performance. accordding to Read-Ahead Efficiency on Mobile Devices: Observation, Characterization, and Optimization form IEEE Bug: 229839032 Change-Id: I91656bde5e616e181fd7557554d55e7ce1858136 Signed-off-by: liang zhang Signed-off-by: Oven --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/readahead.c | 2 ++ 3 files changed, 6 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 9a8d317b83f2..05bdf75a8710 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -176,6 +176,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kvmalloc_node_use_vmalloc); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_alloc_pages_retry); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_unreserve_highatomic_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_bulk_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ra_tuning_max_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_insert); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_delete); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_replace); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 8af085c167d5..7e2d7769cfc7 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -141,6 +141,9 @@ DECLARE_HOOK(android_vh_rmqueue_bulk_bypass, TP_PROTO(unsigned int order, struct per_cpu_pages *pcp, int migratetype, struct list_head *list), TP_ARGS(order, pcp, migratetype, list)); +DECLARE_HOOK(android_vh_ra_tuning_max_page, + TP_PROTO(struct readahead_control *ractl, unsigned long *max_page), + TP_ARGS(ractl, max_page)); struct mem_cgroup; DECLARE_HOOK(android_vh_mem_cgroup_alloc, TP_PROTO(struct mem_cgroup *memcg), diff --git a/mm/readahead.c b/mm/readahead.c index 844e8134ba96..a8620cac2d83 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -591,6 +591,8 @@ static void ondemand_readahead(struct readahead_control *ractl, if (req_size > max_pages && bdi->io_pages > max_pages) max_pages = min(req_size, bdi->io_pages); + trace_android_vh_ra_tuning_max_page(ractl, &max_pages); + /* * start of file */ From 019393a917c9ecfbcf53809bd40ffbd663802767 Mon Sep 17 00:00:00 2001 From: Oven Date: Fri, 16 Jun 2023 20:51:14 +0800 Subject: [PATCH 18/46] ANDROID: vendor_hook: Add hook to tune readaround size In some situations, we want to decrease readaround size for better performance. So we add this hook. Bug: 288216516 Change-Id: If2f5f75976c99ff1f82ce29d370f9216926055ab Signed-off-by: Oven --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 4 ++++ mm/filemap.c | 2 ++ 3 files changed, 7 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 05bdf75a8710..870d351de53d 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -177,6 +177,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_alloc_pages_retry); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_unreserve_highatomic_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_bulk_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ra_tuning_max_page); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_mmap_readaround); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_insert); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_delete); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_selinux_avc_node_replace); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 7e2d7769cfc7..00f50548a20f 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -144,6 +144,10 @@ DECLARE_HOOK(android_vh_rmqueue_bulk_bypass, DECLARE_HOOK(android_vh_ra_tuning_max_page, TP_PROTO(struct readahead_control *ractl, unsigned long *max_page), TP_ARGS(ractl, max_page)); +DECLARE_HOOK(android_vh_tune_mmap_readaround, + TP_PROTO(unsigned int ra_pages, pgoff_t pgoff, + pgoff_t *start, unsigned int *size, unsigned int *async_size), + TP_ARGS(ra_pages, pgoff, start, size, async_size)); struct mem_cgroup; DECLARE_HOOK(android_vh_mem_cgroup_alloc, TP_PROTO(struct mem_cgroup *memcg), diff --git a/mm/filemap.c b/mm/filemap.c index c445deb4d32c..63a846a1c1a3 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -3058,6 +3058,8 @@ static struct file *do_sync_mmap_readahead(struct vm_fault *vmf) ra->start = max_t(long, 0, vmf->pgoff - ra->ra_pages / 2); ra->size = ra->ra_pages; ra->async_size = ra->ra_pages / 4; + trace_android_vh_tune_mmap_readaround(ra->ra_pages, vmf->pgoff, + &ra->start, &ra->size, &ra->async_size); ractl._index = ra->start; page_cache_ra_order(&ractl, ra, 0); return fpin; From 0920d4de75e0a93eabba1cf2eadc4f3a3005c088 Mon Sep 17 00:00:00 2001 From: Oven Date: Wed, 25 Oct 2023 17:18:32 +0800 Subject: [PATCH 19/46] ANDROID: GKI: Update symbols to symbol list 7 function symbol(s) added 'int __traceiter_android_vh_free_unref_page_bypass(void*, struct page*, int, int, bool*)' 'int __traceiter_android_vh_kvmalloc_node_use_vmalloc(void*, size_t, gfp_t*, bool*)' 'int __traceiter_android_vh_ra_tuning_max_page(void*, struct readahead_control*, unsigned long*)' 'int __traceiter_android_vh_rmqueue_bulk_bypass(void*, unsigned int, struct per_cpu_pages*, int, struct list_head*)' 'int __traceiter_android_vh_should_alloc_pages_retry(void*, gfp_t, int, int*, int, struct zone*, struct page**, bool*)' 'int __traceiter_android_vh_tune_mmap_readaround(void*, unsigned int, unsigned long, unsigned long*, unsigned int*, unsigned int*)' 'int __traceiter_android_vh_unreserve_highatomic_bypass(void*, bool, struct zone*, bool*)' 7 variable symbol(s) added 'struct tracepoint __tracepoint_android_vh_free_unref_page_bypass' 'struct tracepoint __tracepoint_android_vh_kvmalloc_node_use_vmalloc' 'struct tracepoint __tracepoint_android_vh_ra_tuning_max_page' 'struct tracepoint __tracepoint_android_vh_rmqueue_bulk_bypass' 'struct tracepoint __tracepoint_android_vh_should_alloc_pages_retry' 'struct tracepoint __tracepoint_android_vh_tune_mmap_readaround' 'struct tracepoint __tracepoint_android_vh_unreserve_highatomic_bypass' Bug: 288216516 Change-Id: I85abefd786a0c7aadfe730f5c3485117e38d0a86 Signed-off-by: Oven --- android/abi_gki_aarch64.stg | 203 ++++++++++++++++++++++++++++++++++ android/abi_gki_aarch64_oplus | 16 +++ 2 files changed, 219 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index d266fe351690..2f9869975274 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -312131,6 +312131,18 @@ function { parameter_id: 0x6720d32f parameter_id: 0x11cfee5a } +function { + id: 0x9870bdab + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0xf1a6dfed + parameter_id: 0x6720d32f + parameter_id: 0x13580d6c + parameter_id: 0x6720d32f + parameter_id: 0x0a63398f + parameter_id: 0x0b30ee00 + parameter_id: 0x11cfee5a +} function { id: 0x98716c4f return_type_id: 0x6720d32f @@ -312141,6 +312153,14 @@ function { parameter_id: 0x6720d32f parameter_id: 0x0b30ee00 } +function { + id: 0x9872969e + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0xf435685e + parameter_id: 0x36f98e5c + parameter_id: 0x11cfee5a +} function { id: 0x98731419 return_type_id: 0x6720d32f @@ -314049,6 +314069,14 @@ function { parameter_id: 0x92233392 parameter_id: 0x2e0f9112 } +function { + id: 0x9a1898ed + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x6d7f5ff6 + parameter_id: 0x0a63398f + parameter_id: 0x11cfee5a +} function { id: 0x9a1a471c return_type_id: 0x6720d32f @@ -314957,6 +314985,16 @@ function { parameter_id: 0x391f15ea parameter_id: 0xf435685e } +function { + id: 0x9ab56d04 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x4585663f + parameter_id: 0x33756485 + parameter_id: 0x064d6086 + parameter_id: 0x1bf16028 + parameter_id: 0x1bf16028 +} function { id: 0x9ab63fbc return_type_id: 0x6720d32f @@ -315020,6 +315058,15 @@ function { parameter_id: 0x18bd6530 parameter_id: 0xf435685e } +function { + id: 0x9abcf489 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x4585663f + parameter_id: 0x1321a5b2 + parameter_id: 0x6720d32f + parameter_id: 0x3e6239e1 +} function { id: 0x9abe486f return_type_id: 0x6720d32f @@ -315830,6 +315877,13 @@ function { parameter_id: 0x1d841d76 parameter_id: 0x0a134144 } +function { + id: 0x9b3343fb + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x275ab027 + parameter_id: 0x064d6086 +} function { id: 0x9b33517a return_type_id: 0x6720d32f @@ -317663,6 +317717,15 @@ function { parameter_id: 0x19466519 parameter_id: 0x6720d32f } +function { + id: 0x9bade7dd + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x06835e9c + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x11cfee5a +} function { id: 0x9bae28ba return_type_id: 0x6720d32f @@ -335258,6 +335321,15 @@ elf_symbol { type_id: 0x9bdbdcc4 full_name: "__traceiter_android_vh_free_task" } +elf_symbol { + id: 0x812c6920 + name: "__traceiter_android_vh_free_unref_page_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0x0795105e + type_id: 0x9bade7dd + full_name: "__traceiter_android_vh_free_unref_page_bypass" +} elf_symbol { id: 0xe3ce1f52 name: "__traceiter_android_vh_free_user" @@ -335528,6 +335600,15 @@ elf_symbol { type_id: 0x9a36ff29 full_name: "__traceiter_android_vh_kswapd_per_node" } +elf_symbol { + id: 0x0992491b + name: "__traceiter_android_vh_kvmalloc_node_use_vmalloc" + is_defined: true + symbol_type: FUNCTION + crc: 0x3844ae56 + type_id: 0x9872969e + full_name: "__traceiter_android_vh_kvmalloc_node_use_vmalloc" +} elf_symbol { id: 0xe19d2bf8 name: "__traceiter_android_vh_look_around" @@ -335906,6 +335987,15 @@ elf_symbol { type_id: 0x9b49a977 full_name: "__traceiter_android_vh_ptype_head" } +elf_symbol { + id: 0x3a545b61 + name: "__traceiter_android_vh_ra_tuning_max_page" + is_defined: true + symbol_type: FUNCTION + crc: 0x1b994310 + type_id: 0x9b3343fb + full_name: "__traceiter_android_vh_ra_tuning_max_page" +} elf_symbol { id: 0x7d069e91 name: "__traceiter_android_vh_record_mutex_lock_starttime" @@ -335978,6 +336068,15 @@ elf_symbol { type_id: 0x9b858538 full_name: "__traceiter_android_vh_rmqueue" } +elf_symbol { + id: 0xd6100bd9 + name: "__traceiter_android_vh_rmqueue_bulk_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0x0e1493ac + type_id: 0x9abcf489 + full_name: "__traceiter_android_vh_rmqueue_bulk_bypass" +} elf_symbol { id: 0x8d62858f name: "__traceiter_android_vh_rmqueue_smallest_bypass" @@ -336230,6 +336329,15 @@ elf_symbol { type_id: 0x9bc302e5 full_name: "__traceiter_android_vh_setscheduler_uclamp" } +elf_symbol { + id: 0x53263f73 + name: "__traceiter_android_vh_should_alloc_pages_retry" + is_defined: true + symbol_type: FUNCTION + crc: 0xf9298a33 + type_id: 0x9870bdab + full_name: "__traceiter_android_vh_should_alloc_pages_retry" +} elf_symbol { id: 0xe828d15b name: "__traceiter_android_vh_should_continue_reclaim" @@ -336437,6 +336545,15 @@ elf_symbol { type_id: 0x9b2837bd full_name: "__traceiter_android_vh_try_to_unmap_one" } +elf_symbol { + id: 0xc0482ac3 + name: "__traceiter_android_vh_tune_mmap_readaround" + is_defined: true + symbol_type: FUNCTION + crc: 0x05c25963 + type_id: 0x9ab56d04 + full_name: "__traceiter_android_vh_tune_mmap_readaround" +} elf_symbol { id: 0x39155e73 name: "__traceiter_android_vh_tune_scan_type" @@ -336617,6 +336734,15 @@ elf_symbol { type_id: 0x9bb5c5c3 full_name: "__traceiter_android_vh_ufs_use_mcq_hooks" } +elf_symbol { + id: 0x46e1dbde + name: "__traceiter_android_vh_unreserve_highatomic_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0x3aa2f698 + type_id: 0x9a1898ed + full_name: "__traceiter_android_vh_unreserve_highatomic_bypass" +} elf_symbol { id: 0x6a8145ff name: "__traceiter_android_vh_update_topology_flags_workfn" @@ -339092,6 +339218,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_free_task" } +elf_symbol { + id: 0x4ce6de1a + name: "__tracepoint_android_vh_free_unref_page_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0xf31d0b7d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_free_unref_page_bypass" +} elf_symbol { id: 0x4d4fd1cc name: "__tracepoint_android_vh_free_user" @@ -339362,6 +339497,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_kswapd_per_node" } +elf_symbol { + id: 0x8bd577fd + name: "__tracepoint_android_vh_kvmalloc_node_use_vmalloc" + is_defined: true + symbol_type: OBJECT + crc: 0x60c70f5b + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_kvmalloc_node_use_vmalloc" +} elf_symbol { id: 0xda2d53f2 name: "__tracepoint_android_vh_look_around" @@ -339740,6 +339884,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_ptype_head" } +elf_symbol { + id: 0x811d5fab + name: "__tracepoint_android_vh_ra_tuning_max_page" + is_defined: true + symbol_type: OBJECT + crc: 0x9744e016 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_ra_tuning_max_page" +} elf_symbol { id: 0x761f292f name: "__tracepoint_android_vh_record_mutex_lock_starttime" @@ -339812,6 +339965,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_rmqueue" } +elf_symbol { + id: 0xfebada43 + name: "__tracepoint_android_vh_rmqueue_bulk_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0x1cdf278d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_rmqueue_bulk_bypass" +} elf_symbol { id: 0x04365139 name: "__tracepoint_android_vh_rmqueue_smallest_bypass" @@ -340064,6 +340226,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_setscheduler_uclamp" } +elf_symbol { + id: 0xd860c719 + name: "__tracepoint_android_vh_should_alloc_pages_retry" + is_defined: true + symbol_type: OBJECT + crc: 0xf3041380 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_should_alloc_pages_retry" +} elf_symbol { id: 0x5b6bc3a9 name: "__tracepoint_android_vh_should_continue_reclaim" @@ -340271,6 +340442,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_try_to_unmap_one" } +elf_symbol { + id: 0x0f6579e9 + name: "__tracepoint_android_vh_tune_mmap_readaround" + is_defined: true + symbol_type: OBJECT + crc: 0xc42ea17f + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_tune_mmap_readaround" +} elf_symbol { id: 0x49b955bd name: "__tracepoint_android_vh_tune_scan_type" @@ -340451,6 +340631,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_ufs_use_mcq_hooks" } +elf_symbol { + id: 0xd309f564 + name: "__tracepoint_android_vh_unreserve_highatomic_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0xe53f0aff + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_unreserve_highatomic_bypass" +} elf_symbol { id: 0xc09d36c9 name: "__tracepoint_android_vh_update_topology_flags_workfn" @@ -396738,6 +396927,7 @@ interface { symbol_id: 0x9e91661b symbol_id: 0xc189c2a7 symbol_id: 0x5ecff02f + symbol_id: 0x812c6920 symbol_id: 0xe3ce1f52 symbol_id: 0x4d354aab symbol_id: 0x3272ce60 @@ -396768,6 +396958,7 @@ interface { symbol_id: 0xf83fbd26 symbol_id: 0xe261e8cc symbol_id: 0x18fde973 + symbol_id: 0x0992491b symbol_id: 0xe19d2bf8 symbol_id: 0x993f42ff symbol_id: 0xfb6a92a8 @@ -396810,6 +397001,7 @@ interface { symbol_id: 0x574e7b58 symbol_id: 0xf2c39651 symbol_id: 0x93303c51 + symbol_id: 0x3a545b61 symbol_id: 0x7d069e91 symbol_id: 0x0fa39b81 symbol_id: 0x1a91ec8c @@ -396818,6 +397010,7 @@ interface { symbol_id: 0xe2d75052 symbol_id: 0xf10ce16f symbol_id: 0xa8cef421 + symbol_id: 0xd6100bd9 symbol_id: 0x8d62858f symbol_id: 0xcef5d79f symbol_id: 0x91384eff @@ -396846,6 +397039,7 @@ interface { symbol_id: 0xe4ec133d symbol_id: 0xaa3f6a65 symbol_id: 0xa2fe718f + symbol_id: 0x53263f73 symbol_id: 0xe828d15b symbol_id: 0x4d31a413 symbol_id: 0xe7f6f975 @@ -396869,6 +397063,7 @@ interface { symbol_id: 0x2bc25325 symbol_id: 0x0119fc41 symbol_id: 0xd9f43028 + symbol_id: 0xc0482ac3 symbol_id: 0x39155e73 symbol_id: 0x3947ecb4 symbol_id: 0x8a773cc3 @@ -396889,6 +397084,7 @@ interface { symbol_id: 0x810f6abf symbol_id: 0xcc8dcd0c symbol_id: 0xcb4d15f3 + symbol_id: 0x46e1dbde symbol_id: 0x6a8145ff symbol_id: 0x08824ed3 symbol_id: 0xcbec9d66 @@ -397164,6 +397360,7 @@ interface { symbol_id: 0x901d0e89 symbol_id: 0x04a824b5 symbol_id: 0xe6918e09 + symbol_id: 0x4ce6de1a symbol_id: 0x4d4fd1cc symbol_id: 0x888dea6d symbol_id: 0xace80c56 @@ -397194,6 +397391,7 @@ interface { symbol_id: 0xafbca760 symbol_id: 0xa48390ca symbol_id: 0x586a06d1 + symbol_id: 0x8bd577fd symbol_id: 0xda2d53f2 symbol_id: 0x50a5a949 symbol_id: 0xcb34ca12 @@ -397236,6 +397434,7 @@ interface { symbol_id: 0x61f8c8ae symbol_id: 0x0e92ee53 symbol_id: 0xb0c197a3 + symbol_id: 0x811d5fab symbol_id: 0x761f292f symbol_id: 0xef7ad117 symbol_id: 0x158c4cfa @@ -397244,6 +397443,7 @@ interface { symbol_id: 0x13b2fb38 symbol_id: 0xd6904c6d symbol_id: 0xcad24ea3 + symbol_id: 0xfebada43 symbol_id: 0x04365139 symbol_id: 0xd94bc301 symbol_id: 0x3fc5ffc9 @@ -397272,6 +397472,7 @@ interface { symbol_id: 0xcfab6e83 symbol_id: 0xd7ceb15f symbol_id: 0x923147c1 + symbol_id: 0xd860c719 symbol_id: 0x5b6bc3a9 symbol_id: 0x823654f5 symbol_id: 0x42ad45a3 @@ -397295,6 +397496,7 @@ interface { symbol_id: 0xd9d2bcff symbol_id: 0x09ba106b symbol_id: 0xf9580976 + symbol_id: 0x0f6579e9 symbol_id: 0x49b955bd symbol_id: 0xfe6b6962 symbol_id: 0x18e67da1 @@ -397315,6 +397517,7 @@ interface { symbol_id: 0xb7ba0c6d symbol_id: 0xaf7a4dba symbol_id: 0x743ea36d + symbol_id: 0xd309f564 symbol_id: 0xc09d36c9 symbol_id: 0xe100c3ad symbol_id: 0x55476a7c diff --git a/android/abi_gki_aarch64_oplus b/android/abi_gki_aarch64_oplus index 152c07468993..23996025f107 100644 --- a/android/abi_gki_aarch64_oplus +++ b/android/abi_gki_aarch64_oplus @@ -185,6 +185,14 @@ __traceiter_task_rename __traceiter_android_vh_test_clear_look_around_ref __traceiter_android_vh_tune_swappiness + __traceiter_android_vh_alloc_pages_reclaim_bypass + __traceiter_android_vh_free_unref_page_bypass + __traceiter_android_vh_kvmalloc_node_use_vmalloc + __traceiter_android_vh_should_alloc_pages_retry + __traceiter_android_vh_unreserve_highatomic_bypass + __traceiter_android_vh_rmqueue_bulk_bypass + __traceiter_android_vh_tune_mmap_readaround + __traceiter_android_vh_ra_tuning_max_page __traceiter_android_vh_alloc_oem_binder_struct __traceiter_android_vh_binder_transaction_received __traceiter_android_vh_free_oem_binder_struct @@ -258,6 +266,14 @@ __tracepoint_android_vh_task_blocks_on_rtmutex __tracepoint_android_vh_test_clear_look_around_ref __tracepoint_android_vh_tune_swappiness + __tracepoint_android_vh_alloc_pages_reclaim_bypass + __tracepoint_android_vh_free_unref_page_bypass + __tracepoint_android_vh_kvmalloc_node_use_vmalloc + __tracepoint_android_vh_should_alloc_pages_retry + __tracepoint_android_vh_unreserve_highatomic_bypass + __tracepoint_android_vh_rmqueue_bulk_bypass + __tracepoint_android_vh_tune_mmap_readaround + __tracepoint_android_vh_ra_tuning_max_page __tracepoint_block_bio_queue __tracepoint_block_getrq __tracepoint_block_rq_complete From 230d34da33c54e2c3dec0bfb18cb945e6db02941 Mon Sep 17 00:00:00 2001 From: Neil Armstrong Date: Mon, 21 Aug 2023 14:11:21 +0200 Subject: [PATCH 20/46] UPSTREAM: scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW major version > 5 The qunipro_g4_sel clear is also needed for new platforms with major version > 5. Fix the version check to take this into account. Bug: 254441685 Fixes: 9c02aa24bf40 ("scsi: ufs: ufs-qcom: Clear qunipro_g4_sel for HW version major 5") Acked-by: Manivannan Sadhasivam Reviewed-by: Nitin Rawat Signed-off-by: Neil Armstrong Link: https://lore.kernel.org/r/20230821-topic-sm8x50-upstream-ufs-major-5-plus-v2-1-f42a4b712e58@linaro.org Reviewed-by: "Bao D. Nguyen" Signed-off-by: Martin K. Petersen (cherry picked from commit c422fbd5cb58c9a078172ae1e9750971b738a197) Signed-off-by: Lee Jones Change-Id: I1c67c49441d710b6e762d73ff87077febdee8f25 --- drivers/ufs/host/ufs-qcom.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/ufs/host/ufs-qcom.c b/drivers/ufs/host/ufs-qcom.c index 76c56166459a..a87fb1e7e9d4 100644 --- a/drivers/ufs/host/ufs-qcom.c +++ b/drivers/ufs/host/ufs-qcom.c @@ -225,7 +225,7 @@ static void ufs_qcom_select_unipro_mode(struct ufs_qcom_host *host) ufs_qcom_cap_qunipro(host) ? QUNIPRO_SEL : 0, REG_UFS_CFG1); - if (host->hw_ver.major == 0x05) + if (host->hw_ver.major >= 0x05) ufshcd_rmwl(host->hba, QUNIPRO_G4_SEL, 0, REG_UFS_CFG0); /* make sure above configuration is applied before we return */ From 43a07d84dad8dbf1ed7dd13caaa5232d526ad951 Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Mon, 6 Nov 2023 18:12:08 +0000 Subject: [PATCH 21/46] Revert "proc: allow pid_revalidate() during LOOKUP_RCU" This reverts commit da4d6b9cf80ae5b0083f640133b85b68b53b6497. Appears to cause stale dcache entries for inodes in /proc/$pid filesystem resulting in ESRCH failures on access to files under /proc/self Bug: 305682813 Bug: 306055483 Signed-off-by: Todd Kjos Change-Id: I004338c043d7e777fdfef343e45ccb20ff4d503b --- fs/proc/base.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/fs/proc/base.c b/fs/proc/base.c index 6d549f98d8c9..8f5abdc5832a 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2022,21 +2022,19 @@ static int pid_revalidate(struct dentry *dentry, unsigned int flags) { struct inode *inode; struct task_struct *task; - int ret = 0; - rcu_read_lock(); - inode = d_inode_rcu(dentry); - if (!inode) - goto out; - task = pid_task(proc_pid(inode), PIDTYPE_PID); + if (flags & LOOKUP_RCU) + return -ECHILD; + + inode = d_inode(dentry); + task = get_proc_task(inode); if (task) { pid_update_inode(task, inode); - ret = 1; + put_task_struct(task); + return 1; } -out: - rcu_read_unlock(); - return ret; + return 0; } static inline bool proc_inode_is_dead(struct inode *inode) From 5683c2b460cc01f3628cb8d8669b59eaa3215390 Mon Sep 17 00:00:00 2001 From: Browse Zhang Date: Thu, 19 Oct 2023 17:51:15 +0800 Subject: [PATCH 22/46] ANDROID: vendor_hooks: Add hook for mmc queue Add a mmc hook to support customizing mmc queue by vendor host requirements Bug: 306334321 Change-Id: I737485c3fc0438ef221cd3ffe81a66f7e3b66500 Signed-off-by: Qilin Tan Signed-off-by: Browse Zhang --- drivers/android/vendor_hooks.c | 1 + drivers/mmc/core/block.c | 2 ++ include/trace/hooks/mmc.h | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 870d351de53d..f34fa39c84e6 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -297,6 +297,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_continue_reclaim); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_file_is_tiny_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_mmc_resume); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_mmc_suspend); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_update_mmc_queue); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_signal); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_modify_thermal_request_freq); diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 50dbfd0838dd..4e87a71001ff 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -46,6 +46,7 @@ #include #include #include +#include #include @@ -2993,6 +2994,7 @@ static int mmc_blk_probe(struct mmc_card *card) ret = PTR_ERR(md); goto out_free; } + trace_android_vh_mmc_update_mmc_queue(card, &md->queue); ret = mmc_blk_alloc_parts(card, md); if (ret) diff --git a/include/trace/hooks/mmc.h b/include/trace/hooks/mmc.h index a5b6279b1934..d24319cdfee3 100644 --- a/include/trace/hooks/mmc.h +++ b/include/trace/hooks/mmc.h @@ -8,6 +8,7 @@ #include struct mmc_host; struct mmc_card; +struct mmc_queue; /* * Following tracepoints are not exported in tracefs and provide a @@ -29,6 +30,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_mmc_resume, TP_PROTO(struct mmc_host *host, bool *resume_success), TP_ARGS(host, resume_success), 1); +DECLARE_HOOK(android_vh_mmc_update_mmc_queue, + TP_PROTO(struct mmc_card *card, struct mmc_queue *mq), + TP_ARGS(card, mq)); + #endif /* _TRACE_HOOK_MMC_H */ /* This part must be outside protection */ #include From beea09533dd2c5a336f612aaa3af6660bc7371bc Mon Sep 17 00:00:00 2001 From: Browse Zhang Date: Fri, 3 Nov 2023 17:41:28 +0800 Subject: [PATCH 23/46] ANDROID: ABI: Update symbol list for MediatTek Add android_vh_mmc_update_mmc_queue to MTK symbol list 1 function symbol(s) added 'int __traceiter_android_vh_mmc_update_mmc_queue(void*, struct mmc_card*, struct mmc_queue*)' 1 variable symbol(s) added 'struct tracepoint __tracepoint_android_vh_mmc_update_mmc_queue' Bug: 306334321 Change-Id: I4bf1ab86b273eaa4910f76d7deb7d8ddf5ded5cb Signed-off-by: Qilin Tan Signed-off-by: Browse Zhang --- android/abi_gki_aarch64.stg | 27 +++++++++++++++++++++++++++ android/abi_gki_aarch64_mtk | 2 ++ 2 files changed, 29 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 2f9869975274..b10bcc121da7 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -317552,6 +317552,13 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x33756485 } +function { + id: 0x9ba4eebd + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x026525e9 + parameter_id: 0x0b012462 +} function { id: 0x9ba51920 return_type_id: 0x6720d32f @@ -335789,6 +335796,15 @@ elf_symbol { type_id: 0x9ba62ef4 full_name: "__traceiter_android_vh_mmc_blk_mq_rw_recovery" } +elf_symbol { + id: 0xc168df93 + name: "__traceiter_android_vh_mmc_update_mmc_queue" + is_defined: true + symbol_type: FUNCTION + crc: 0x9999acd8 + type_id: 0x9ba4eebd + full_name: "__traceiter_android_vh_mmc_update_mmc_queue" +} elf_symbol { id: 0x5612c9d1 name: "__traceiter_android_vh_mmput" @@ -339686,6 +339702,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mmc_blk_mq_rw_recovery" } +elf_symbol { + id: 0x3c1c2029 + name: "__tracepoint_android_vh_mmc_update_mmc_queue" + is_defined: true + symbol_type: OBJECT + crc: 0x5bfb09a0 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mmc_update_mmc_queue" +} elf_symbol { id: 0x41c8d09b name: "__tracepoint_android_vh_mmput" @@ -396979,6 +397004,7 @@ interface { symbol_id: 0xf928bf8a symbol_id: 0xe44dacb1 symbol_id: 0x0c9da1aa + symbol_id: 0xc168df93 symbol_id: 0x5612c9d1 symbol_id: 0xa77effd1 symbol_id: 0xb7624cbd @@ -397412,6 +397438,7 @@ interface { symbol_id: 0x72c79d80 symbol_id: 0xb6da564f symbol_id: 0x1daf6454 + symbol_id: 0x3c1c2029 symbol_id: 0x41c8d09b symbol_id: 0xe2ad11db symbol_id: 0xcac93aff diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index 73dd66c144a2..a97afed681e8 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -2656,6 +2656,7 @@ __traceiter_android_vh_iommu_iovad_alloc_iova __traceiter_android_vh_iommu_iovad_free_iova __traceiter_android_vh_is_fpsimd_save + __traceiter_android_vh_mmc_update_mmc_queue __traceiter_android_vh_mm_alloc_pages_direct_reclaim_enter __traceiter_android_vh_mm_alloc_pages_direct_reclaim_exit __traceiter_android_vh_mm_alloc_pages_may_oom_exit @@ -2757,6 +2758,7 @@ __tracepoint_android_vh_iommu_iovad_alloc_iova __tracepoint_android_vh_iommu_iovad_free_iova __tracepoint_android_vh_is_fpsimd_save + __tracepoint_android_vh_mmc_update_mmc_queue __tracepoint_android_vh_mm_alloc_pages_direct_reclaim_enter __tracepoint_android_vh_mm_alloc_pages_direct_reclaim_exit __tracepoint_android_vh_mm_alloc_pages_may_oom_exit From 9d6ac9dc6ac8f786d299507125d8858873912103 Mon Sep 17 00:00:00 2001 From: Bean Huo Date: Wed, 9 Aug 2023 20:18:46 +0200 Subject: [PATCH 24/46] UPSTREAM: scsi: ufs: core: Add advanced RPMB support where UFSHCI 4.0 does not support EHS length in UTRD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to UFSHCI 4.0 specification: 5.2 Host Controller Capabilities Registers 5.2.1 Offset 00h: CAP – Controller Capabilities: "EHS Length in UTRD Supported (EHSLUTRDS): Indicates whether the host controller supports EHS Length field in UTRD. 0 – Host controller takes EHS length from CMD UPIU, and SW driver use EHS Length field in CMD UPIU. 1 – HW controller takes EHS length from UTRD, and SW driver use EHS Length field in UTRD. NOTE Recommend Host controllers move to taking EHS length from UTRD, and in UFS-5, it will be mandatory." So, when UFSHCI 4.0 doesn't support EHS Length field in UTRD, we could use EHS Length field in CMD UPIU. Remove the limitation that advanced RPMB only works when EHS length is supported in UTRD. Bug: 254441685 Fixes: 6ff265fc5ef6 ("scsi: ufs: core: bsg: Add advanced RPMB support in ufs_bsg") Co-developed-by: "jonghwi.rha" Signed-off-by: "jonghwi.rha" Signed-off-by: Bean Huo Link: https://lore.kernel.org/r/20230809181847.102123-2-beanhuo@iokpp.de Reviewed-by: Bart Van Assche Signed-off-by: Martin K. Petersen (cherry picked from commit c91e585cfb3dd7d076e9ba0967908fc504d32def) Signed-off-by: Lee Jones Change-Id: I10ec989b7d02bed7d828d756fd11078cf73ff371 --- drivers/ufs/core/ufs_bsg.c | 3 +-- drivers/ufs/core/ufshcd.c | 10 +++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/ufs/core/ufs_bsg.c b/drivers/ufs/core/ufs_bsg.c index 0d38e7fa34cc..97f4d86f8d90 100644 --- a/drivers/ufs/core/ufs_bsg.c +++ b/drivers/ufs/core/ufs_bsg.c @@ -76,8 +76,7 @@ static int ufs_bsg_exec_advanced_rpmb_req(struct ufs_hba *hba, struct bsg_job *j int ret; int data_len; - if (hba->ufs_version < ufshci_version(4, 0) || !hba->dev_info.b_advanced_rpmb_en || - !(hba->capabilities & MASK_EHSLUTRD_SUPPORTED)) + if (hba->ufs_version < ufshci_version(4, 0) || !hba->dev_info.b_advanced_rpmb_en) return -EINVAL; if (rpmb_request->ehs_req.length != 2 || rpmb_request->ehs_req.ehs_type != 1) diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 7e615bf7d2aa..5e62600d74a5 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -7384,7 +7384,15 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r /* Advanced RPMB starts from UFS 4.0, so its command type is UTP_CMD_TYPE_UFS_STORAGE */ lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; - ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, dir, 2); + /* + * According to UFSHCI 4.0 specification page 24, if EHSLUTRDS is 0, host controller takes + * EHS length from CMD UPIU, and SW driver use EHS Length field in CMD UPIU. if it is 1, + * HW controller takes EHS length from UTRD. + */ + if (hba->capabilities & MASK_EHSLUTRD_SUPPORTED) + ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, dir, 2); + else + ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, dir, 0); /* update the task tag and LUN in the request upiu */ req_upiu->header.dword_0 |= cpu_to_be32(upiu_flags << 16 | UFS_UPIU_RPMB_WLUN << 8 | tag); From abcd4c51e741a13aeb0bad9618ece4ba3cb62b1e Mon Sep 17 00:00:00 2001 From: Badhri Jagan Sridharan Date: Wed, 1 Nov 2023 01:28:45 +0000 Subject: [PATCH 25/46] FROMLIST: usb: typec: tcpm: Fix sink caps op current check TCPM checks for sink caps operational current even when PD is disabled. This incorrectly sets tcpm_set_charge() when PD is disabled. Check for sink caps only when PD is enabled. [ 97.572342] Start toggling [ 97.578949] CC1: 0 -> 0, CC2: 0 -> 0 [state TOGGLING, polarity 0, disconnected] [ 99.571648] CC1: 0 -> 0, CC2: 0 -> 4 [state TOGGLING, polarity 0, connected] [ 99.571658] state change TOGGLING -> SNK_ATTACH_WAIT [rev3 NONE_AMS] [ 99.571673] pending state change SNK_ATTACH_WAIT -> SNK_DEBOUNCED @ 170 ms [rev3 NONE_AMS] [ 99.741778] state change SNK_ATTACH_WAIT -> SNK_DEBOUNCED [delayed 170 ms] [ 99.789283] CC1: 0 -> 0, CC2: 4 -> 5 [state SNK_DEBOUNCED, polarity 0, connected] [ 99.789306] state change SNK_DEBOUNCED -> SNK_DEBOUNCED [rev3 NONE_AMS] [ 99.903584] VBUS on [ 99.903591] state change SNK_DEBOUNCED -> SNK_ATTACHED [rev3 NONE_AMS] [ 99.903600] polarity 1 [ 99.910155] enable vbus discharge ret:0 [ 99.910160] Requesting mux state 1, usb-role 2, orientation 2 [ 99.946791] state change SNK_ATTACHED -> SNK_STARTUP [rev3 NONE_AMS] [ 99.946798] state change SNK_STARTUP -> SNK_DISCOVERY [rev3 NONE_AMS] [ 99.946800] Setting voltage/current limit 5000 mV 500 mA [ 99.946803] vbus=0 charge:=1 [ 100.027139] state change SNK_DISCOVERY -> SNK_READY [rev3 NONE_AMS] [ 100.027145] Setting voltage/current limit 5000 mV 3000 mA [ 100.466830] VBUS on Bug: 307718635 Bug: 304820253 Link: https://lore.kernel.org/all/20231101012845.2701348-1-badhri@google.com/ Cc: stable@vger.kernel.org Fixes: 803b1c8a0cea ("usb: typec: tcpm: not sink vbus if operational current is 0mA") Change-Id: Id780b77a37b4c9d6cde286ae089ac41852633800 Signed-off-by: Badhri Jagan Sridharan Reviewed-by: Guenter Roeck Acked-by: Heikki Krogerus Tested-by: Will McVicker Signed-off-by: Will McVicker --- drivers/usb/typec/tcpm/tcpm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 27475f13343b..f9f528c64f0f 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -4289,7 +4289,8 @@ static void run_state_machine(struct tcpm_port *port) current_lim = PD_P_SNK_STDBY_MW / 5; tcpm_set_current_limit(port, current_lim, 5000); /* Not sink vbus if operational current is 0mA */ - tcpm_set_charge(port, !!pdo_max_current(port->snk_pdo[0])); + tcpm_set_charge(port, !port->pd_supported || + pdo_max_current(port->snk_pdo[0])); if (!port->pd_supported) tcpm_set_state(port, SNK_READY, 0); From 48c6c901fe0e68e176029738d829e0d01eabb0b2 Mon Sep 17 00:00:00 2001 From: Lyon Wang Date: Mon, 30 Oct 2023 19:22:31 +0800 Subject: [PATCH 26/46] ANDROID: fs/passthrough: Fix compatibility with R/O file system Look at the passthrough file and check to see if its mount is read-only. Bug: 297482438 Signed-off-by: Lyon Wang Change-Id: I0f483c6bcb1effe395eee07b6d721f343840d115 (cherry picked from commit dbeed231965e1a01bf0d70ea5439fbfacc7c4aae) --- fs/fuse/passthrough.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/fuse/passthrough.c b/fs/fuse/passthrough.c index c0ae3069c6c8..2449558bac18 100644 --- a/fs/fuse/passthrough.c +++ b/fs/fuse/passthrough.c @@ -214,7 +214,8 @@ int fuse_passthrough_open(struct fuse_dev *fud, u32 lower_fd) } if (!passthrough_filp->f_op->read_iter || - !passthrough_filp->f_op->write_iter) { + !((passthrough_filp->f_path.mnt->mnt_flags | MNT_READONLY) || + passthrough_filp->f_op->write_iter)) { pr_err("FUSE: passthrough file misses file operations.\n"); res = -EBADF; goto err_free_file; From 69b689971ac64f412d7dfbbbcc6cd7a09e221c10 Mon Sep 17 00:00:00 2001 From: Ziyi Cui Date: Mon, 29 Aug 2022 23:09:23 +0000 Subject: [PATCH 27/46] ANDROID: softirq: Add EXPORT_SYMBOL_GPL for softirq and tasklet The purpose of these symbols is for getting irq/softirq latency. Currently we only have symbols for irq_handler_entry and irq_handler_exit. We would use these latency for further monitoring and debugging. The related tracepoints were defined in trace/events/irq.h. We would use these tracepoints in vendor kernel module. Bug: 227809911 Signed-off-by: Ziyi Cui Change-Id: Idf4ccdede5232689b2752283539aee54a5f67866 --- kernel/softirq.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/softirq.c b/kernel/softirq.c index a63d8b8bfe60..8c4436f0504f 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -35,6 +35,10 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(irq_handler_entry); EXPORT_TRACEPOINT_SYMBOL_GPL(irq_handler_exit); +EXPORT_TRACEPOINT_SYMBOL_GPL(softirq_entry); +EXPORT_TRACEPOINT_SYMBOL_GPL(softirq_exit); +EXPORT_TRACEPOINT_SYMBOL_GPL(tasklet_entry); +EXPORT_TRACEPOINT_SYMBOL_GPL(tasklet_exit); /* - No shared variables, all the data are CPU local. From 7a33209b363558764ba4276d723f47a6e6453994 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Mon, 13 Nov 2023 06:45:03 +0000 Subject: [PATCH 28/46] ANDROID: Update the ABI symbol list Adding the following symbols: - __traceiter_softirq_entry - __traceiter_softirq_exit - __tracepoint_softirq_entry - __tracepoint_softirq_exit Bug: 297343949 Change-Id: Ie0e3a8b891c1a3fbb764d18f54d0117e2162efc3 Signed-off-by: Rick Yiu --- android/abi_gki_aarch64.stg | 40 +++++++++++++++++++++++++++++++++++ android/abi_gki_aarch64_pixel | 4 ++++ 2 files changed, 44 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index b10bcc121da7..c408480e7359 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -337308,6 +337308,24 @@ elf_symbol { type_id: 0x9bdbdcc4 full_name: "__traceiter_sched_waking" } +elf_symbol { + id: 0x62a42e92 + name: "__traceiter_softirq_entry" + is_defined: true + symbol_type: FUNCTION + crc: 0x263c5561 + type_id: 0x9ab9affb + full_name: "__traceiter_softirq_entry" +} +elf_symbol { + id: 0xa7ccbbf5 + name: "__traceiter_softirq_exit" + is_defined: true + symbol_type: FUNCTION + crc: 0x1b06a32a + type_id: 0x9ab9affb + full_name: "__traceiter_softirq_exit" +} elf_symbol { id: 0x863777a0 name: "__traceiter_suspend_resume" @@ -341214,6 +341232,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_sched_waking" } +elf_symbol { + id: 0x9a65f074 + name: "__tracepoint_softirq_entry" + is_defined: true + symbol_type: OBJECT + crc: 0x12c92cec + type_id: 0x18ccbd2c + full_name: "__tracepoint_softirq_entry" +} +elf_symbol { + id: 0x158cc323 + name: "__tracepoint_softirq_exit" + is_defined: true + symbol_type: OBJECT + crc: 0x54cebae9 + type_id: 0x18ccbd2c + full_name: "__tracepoint_softirq_exit" +} elf_symbol { id: 0x5b327cd6 name: "__tracepoint_suspend_resume" @@ -397172,6 +397208,8 @@ interface { symbol_id: 0xf574f9d9 symbol_id: 0x8fa66546 symbol_id: 0x20097074 + symbol_id: 0x62a42e92 + symbol_id: 0xa7ccbbf5 symbol_id: 0x863777a0 symbol_id: 0xcac5a7d5 symbol_id: 0x2dc83a86 @@ -397606,6 +397644,8 @@ interface { symbol_id: 0xf586b3bb symbol_id: 0x97e630b0 symbol_id: 0xa70e8cd2 + symbol_id: 0x9a65f074 + symbol_id: 0x158cc323 symbol_id: 0x5b327cd6 symbol_id: 0xe91cdbb3 symbol_id: 0x4f1ffabc diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index 2da29f765672..3f3c1f7c46b1 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -2252,6 +2252,8 @@ __traceiter_sched_util_est_cfs_tp __traceiter_sched_util_est_se_tp __traceiter_sched_wakeup + __traceiter_softirq_entry + __traceiter_softirq_exit __traceiter_suspend_resume __traceiter_workqueue_execute_end __traceiter_workqueue_execute_start @@ -2356,6 +2358,8 @@ __tracepoint_sched_util_est_cfs_tp __tracepoint_sched_util_est_se_tp __tracepoint_sched_wakeup + __tracepoint_softirq_entry + __tracepoint_softirq_exit __tracepoint_suspend_resume __tracepoint_workqueue_execute_end __tracepoint_workqueue_execute_start From a59b32866cd44cf6c544b491c23720728552bc59 Mon Sep 17 00:00:00 2001 From: Krishna Kurapati Date: Wed, 27 Sep 2023 13:00:27 +0530 Subject: [PATCH 29/46] UPSTREAM: usb: gadget: udc: Handle gadget_connect failure during bind operation In the event gadget_connect call (which invokes pullup) fails, propagate the error to udc bind operation which in turn sends the error to configfs. The userspace can then retry enumeration if it chooses to. Signed-off-by: Krishna Kurapati Reviewed-by: Alan Stern Link: https://lore.kernel.org/r/20230927073027.27952-1-quic_kriskura@quicinc.com Signed-off-by: Greg Kroah-Hartman (cherry picked from commit 0ea39e030a80be2b1b5f98d6b330a8b97dcf3342 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/ master) Bug: 309886715 Change-Id: I454616a38e3eba1c358da0056057b585416af68c Signed-off-by: Krishna Kurapati --- drivers/usb/gadget/udc/core.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c index 316e9cc3987b..96ee3cb90269 100644 --- a/drivers/usb/gadget/udc/core.c +++ b/drivers/usb/gadget/udc/core.c @@ -1098,12 +1098,12 @@ EXPORT_SYMBOL_GPL(usb_gadget_set_state); /* ------------------------------------------------------------------------- */ /* Acquire connect_lock before calling this function. */ -static void usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock) +static int usb_udc_connect_control_locked(struct usb_udc *udc) __must_hold(&udc->connect_lock) { if (udc->vbus) - usb_gadget_connect_locked(udc->gadget); + return usb_gadget_connect_locked(udc->gadget); else - usb_gadget_disconnect_locked(udc->gadget); + return usb_gadget_disconnect_locked(udc->gadget); } static void vbus_event_work(struct work_struct *work) @@ -1577,12 +1577,23 @@ static int gadget_bind_driver(struct device *dev) } usb_gadget_enable_async_callbacks(udc); udc->allow_connect = true; - usb_udc_connect_control_locked(udc); + ret = usb_udc_connect_control_locked(udc); + if (ret) + goto err_connect_control; + mutex_unlock(&udc->connect_lock); kobject_uevent(&udc->dev.kobj, KOBJ_CHANGE); return 0; + err_connect_control: + udc->allow_connect = false; + usb_gadget_disable_async_callbacks(udc); + if (gadget->irq) + synchronize_irq(gadget->irq); + usb_gadget_udc_stop_locked(udc); + mutex_unlock(&udc->connect_lock); + err_start: driver->unbind(udc->gadget); From 6e881bf0341859e40dc04203f3597769e1de53ac Mon Sep 17 00:00:00 2001 From: Haonan Wang Date: Tue, 26 Sep 2023 19:40:57 +0800 Subject: [PATCH 30/46] ANDROID: vendor_hooks: mm: add hook to count the number pages allocated for each slab We want to add an interface that can detect the number of pages allocated by the slab, and if exceeds a threshold, trigger a panic or other actions. Bug: 302090264 Change-Id: I8fcae6a97046806376b95b66085dd5b852c2d1e8 Signed-off-by: Haonan Wang --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/mm.h | 3 +++ mm/slub.c | 3 +++ 3 files changed, 7 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index f34fa39c84e6..71a349221f3f 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -362,3 +362,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_early_resume_begin); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_get_folio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmc_blk_mq_rw_recovery); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sd_update_bus_speed_mode); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_slab_folio_alloced); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 00f50548a20f..6b9353695660 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -196,6 +196,9 @@ DECLARE_HOOK(android_vh_mm_alloc_pages_may_oom_exit, DECLARE_HOOK(android_vh_adjust_kvmalloc_flags, TP_PROTO(unsigned int order, gfp_t *alloc_flags), TP_ARGS(order, alloc_flags)); +DECLARE_HOOK(android_vh_slab_folio_alloced, + TP_PROTO(unsigned int order, gfp_t flags), + TP_ARGS(order, flags)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/mm/slub.c b/mm/slub.c index 3c9d4e333963..32c73002a5c5 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -43,6 +43,7 @@ #include #include +#include #include "internal.h" @@ -1823,6 +1824,8 @@ static inline struct slab *alloc_slab_page(gfp_t flags, int node, if (page_is_pfmemalloc(folio_page(folio, 0))) slab_set_pfmemalloc(slab); + trace_android_vh_slab_folio_alloced(order, flags); + return slab; } From c47043d65f0a1063f6c651e558aeb80621046eb2 Mon Sep 17 00:00:00 2001 From: Haonan Wang Date: Thu, 9 Nov 2023 17:00:47 +0800 Subject: [PATCH 31/46] ANDROID: update symbol for unisoc vendor_hooks Add slab_folio_alloced 1 function symbol(s) added 'int __traceiter_android_vh_slab_folio_alloced(void*, unsigned int, gfp_t)' 1 variable symbol(s) added 'struct tracepoint __tracepoint_android_vh_slab_folio_alloced' Bug: 302090264 Change-Id: I65c1e0e01b4140f39fae673a1b4a08e1a0d2d0c1 Signed-off-by: Haonan Wang --- android/abi_gki_aarch64.stg | 27 +++++++++++++++++++++++++++ android/abi_gki_aarch64_unisoc | 2 ++ 2 files changed, 29 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index c408480e7359..ddd4bc3bf4a6 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -314759,6 +314759,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x1c1627b0 } +function { + id: 0x9a85c64c + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x4585663f + parameter_id: 0xf1a6dfed +} function { id: 0x9a871ca2 return_type_id: 0x6720d32f @@ -336444,6 +336451,15 @@ elf_symbol { type_id: 0x9be885da full_name: "__traceiter_android_vh_skip_swap_map_write" } +elf_symbol { + id: 0x0562cb47 + name: "__traceiter_android_vh_slab_folio_alloced" + is_defined: true + symbol_type: FUNCTION + crc: 0x7735df78 + type_id: 0x9a85c64c + full_name: "__traceiter_android_vh_slab_folio_alloced" +} elf_symbol { id: 0x08f4cbb0 name: "__traceiter_android_vh_smaps_pte_entry" @@ -340368,6 +340384,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_skip_swap_map_write" } +elf_symbol { + id: 0x4a999b29 + name: "__tracepoint_android_vh_slab_folio_alloced" + is_defined: true + symbol_type: OBJECT + crc: 0x9ccb5403 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_slab_folio_alloced" +} elf_symbol { id: 0x547e3912 name: "__tracepoint_android_vh_smaps_pte_entry" @@ -397112,6 +397137,7 @@ interface { symbol_id: 0x69c3749b symbol_id: 0x3d0fc76c symbol_id: 0x8f7ad177 + symbol_id: 0x0562cb47 symbol_id: 0x08f4cbb0 symbol_id: 0x58e7556b symbol_id: 0x2ecf85e9 @@ -397548,6 +397574,7 @@ interface { symbol_id: 0xc8a7ac69 symbol_id: 0x5ef059ce symbol_id: 0x3204c8e5 + symbol_id: 0x4a999b29 symbol_id: 0x547e3912 symbol_id: 0x39e68fed symbol_id: 0xefb9e5a3 diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc index af9b8e60d708..5fd0eff13ff8 100644 --- a/android/abi_gki_aarch64_unisoc +++ b/android/abi_gki_aarch64_unisoc @@ -719,6 +719,7 @@ __traceiter_android_vh_modify_thermal_target_freq __traceiter_android_vh_regmap_update __traceiter_android_vh_scheduler_tick + __traceiter_android_vh_slab_folio_alloced __traceiter_android_vh_thermal_power_cap __traceiter_android_vh_thermal_register __traceiter_android_vh_thermal_unregister @@ -798,6 +799,7 @@ __tracepoint_android_vh_modify_thermal_target_freq __tracepoint_android_vh_regmap_update __tracepoint_android_vh_scheduler_tick + __tracepoint_android_vh_slab_folio_alloced __tracepoint_android_vh_thermal_power_cap __tracepoint_android_vh_thermal_register __tracepoint_android_vh_thermal_unregister From ec3c9a1702386494c404a861467eb9cf9b10e9b5 Mon Sep 17 00:00:00 2001 From: Chungkai Mei Date: Tue, 14 Nov 2023 09:45:28 +0000 Subject: [PATCH 32/46] ANDROID: sched: Add vendor hook for util_fits_cpu vendor may have the need to implement their own util_fits_cpu function Bug: 261704404 Change-Id: I0318f6cadd5c45a37f1acafdded479b25e520e6b Signed-off-by: Chungkai Mei --- include/trace/hooks/sched.h | 5 +++++ kernel/sched/fair.c | 7 ++++++- kernel/sched/vendor_hooks.c | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 462552ec537e..29396d044885 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -198,6 +198,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_update_misfit_status, TP_PROTO(struct task_struct *p, struct rq *rq, bool *need_update), TP_ARGS(p, rq, need_update), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_util_fits_cpu, + TP_PROTO(unsigned long util, unsigned long uclamp_min, unsigned long uclamp_max, + int cpu, bool *fits, bool *done), + TP_ARGS(util, uclamp_min, uclamp_max, cpu, fits, done), 1); + DECLARE_RESTRICTED_HOOK(android_rvh_sched_fork_init, TP_PROTO(struct task_struct *p), TP_ARGS(p), 1); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 63141c469f51..3e20caeda5e6 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4459,7 +4459,12 @@ static inline int util_fits_cpu(unsigned long util, { unsigned long capacity_orig, capacity_orig_thermal; unsigned long capacity = capacity_of(cpu); - bool fits, uclamp_max_fits; + bool fits, uclamp_max_fits, done = false; + + trace_android_rvh_util_fits_cpu(util, uclamp_min, uclamp_max, cpu, &fits, &done); + + if (done) + return fits; /* * Check if the real util fits without any uclamp boost/cap applied. diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index a4c6f277c0f6..af7b4c5ba399 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -69,6 +69,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_cpu_dying); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_account_irq); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_place_entity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_build_perf_domains); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_util_fits_cpu); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_cpu_capacity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_misfit_status); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rto_next_cpu); From fb91717581d1666b21768d842e77895f94cde08f Mon Sep 17 00:00:00 2001 From: Chungkai Mei Date: Tue, 14 Nov 2023 10:32:19 +0000 Subject: [PATCH 33/46] ANDROID: Update the ABI symbol list Adding the following symbols: - __traceiter_android_rvh_util_fits_cpu - __tracepoint_android_rvh_util_fits_cpu Bug: 261704404 Change-Id: I3f3f42796c02b8403156d24faf3d3e4c45b7a1dc Signed-off-by: Chungkai Mei --- android/abi_gki_aarch64.stg | 31 +++++++++++++++++++++++++++++++ android/abi_gki_aarch64_pixel | 2 ++ 2 files changed, 33 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index ddd4bc3bf4a6..877cd59eb643 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -316773,6 +316773,17 @@ function { parameter_id: 0x295c7202 parameter_id: 0x35f7f02e } +function { + id: 0x9b6e66f6 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x33756485 + parameter_id: 0x33756485 + parameter_id: 0x33756485 + parameter_id: 0x6720d32f + parameter_id: 0x11cfee5a + parameter_id: 0x11cfee5a +} function { id: 0x9b6e7eec return_type_id: 0x6720d32f @@ -334597,6 +334608,15 @@ elf_symbol { type_id: 0x9b922d94 full_name: "__traceiter_android_rvh_util_est_update" } +elf_symbol { + id: 0x88b6e481 + name: "__traceiter_android_rvh_util_fits_cpu" + is_defined: true + symbol_type: FUNCTION + crc: 0x8695f145 + type_id: 0x9b6e66f6 + full_name: "__traceiter_android_rvh_util_fits_cpu" +} elf_symbol { id: 0xebcd0234 name: "__traceiter_android_rvh_wake_up_new_task" @@ -338530,6 +338550,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_util_est_update" } +elf_symbol { + id: 0xabb656f7 + name: "__tracepoint_android_rvh_util_fits_cpu" + is_defined: true + symbol_type: OBJECT + crc: 0xaa223322 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_util_fits_cpu" +} elf_symbol { id: 0xdcf22716 name: "__tracepoint_android_rvh_wake_up_new_task" @@ -396931,6 +396960,7 @@ interface { symbol_id: 0xfaa2e0a4 symbol_id: 0xc1ba0eb6 symbol_id: 0x13c17b96 + symbol_id: 0x88b6e481 symbol_id: 0xebcd0234 symbol_id: 0xa3af7947 symbol_id: 0x86527a4e @@ -397368,6 +397398,7 @@ interface { symbol_id: 0xaa2da792 symbol_id: 0x0e614ab0 symbol_id: 0xa68c0f10 + symbol_id: 0xabb656f7 symbol_id: 0xdcf22716 symbol_id: 0x4f980315 symbol_id: 0xe1489e0c diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index 3f3c1f7c46b1..cfa79ec5b51a 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -2188,6 +2188,7 @@ __traceiter_android_rvh_update_load_avg __traceiter_android_rvh_update_misfit_status __traceiter_android_rvh_update_rt_rq_load_avg + __traceiter_android_rvh_util_fits_cpu __traceiter_android_vh_arch_set_freq_scale __traceiter_android_vh_audio_usb_offload_connect __traceiter_android_vh_binder_restore_priority @@ -2292,6 +2293,7 @@ __tracepoint_android_rvh_update_load_avg __tracepoint_android_rvh_update_misfit_status __tracepoint_android_rvh_update_rt_rq_load_avg + __tracepoint_android_rvh_util_fits_cpu __tracepoint_android_vh_arch_set_freq_scale __tracepoint_android_vh_audio_usb_offload_connect __tracepoint_android_vh_binder_restore_priority From ca06bb1e93f577fbf2968bf0194f1ff975f5f777 Mon Sep 17 00:00:00 2001 From: Hang Wei Date: Tue, 14 Nov 2023 17:52:44 +0800 Subject: [PATCH 34/46] ANDROID: GKI: add allowed list for Exynosauto SoC This patch adds GKI symbol list for Exynosauto SoC. We need to add below 3 function symbols and it required by VLX driver. 3 function symbol(s) added 'struct work_struct* current_work()' 'int sigprocmask(int, sigset_t*, sigset_t*)' 'struct thermal_zone_device* thermal_of_zone_register(struct device_node*, int, void*, const struct thermal_zone_device_ops*)' Bug: 310831391 Change-Id: Ibc0405f9e72eb1cc11095eab715130f4ec1ec0ee Signed-off-by: Hang Wei --- android/abi_gki_aarch64.stg | 54 +++ android/abi_gki_aarch64_exynosauto | 650 ++++++++++++++++------------- 2 files changed, 417 insertions(+), 287 deletions(-) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 877cd59eb643..2ba9573b9fd9 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -2678,6 +2678,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0258f96e } +pointer_reference { + id: 0x0a126667 + kind: POINTER + pointee_type_id: 0x02097f03 +} pointer_reference { id: 0x0a134144 kind: POINTER @@ -302465,6 +302470,10 @@ function { id: 0x7e8c435e return_type_id: 0x24e24923 } +function { + id: 0x7e9e1bfa + return_type_id: 0x0d5f1839 +} function { id: 0x7eb670a7 return_type_id: 0x097315c2 @@ -302801,6 +302810,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x6720d32f } +function { + id: 0x84621ae4 + return_type_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x0a126667 + parameter_id: 0x0a126667 +} function { id: 0x84710953 return_type_id: 0x6720d32f @@ -328754,6 +328770,14 @@ function { parameter_id: 0x4585663f parameter_id: 0x6720d32f } +function { + id: 0xf1d30ddc + return_type_id: 0x26e55184 + parameter_id: 0x347303b4 + parameter_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x351da44b +} function { id: 0xf1d7e113 return_type_id: 0x6d7f5ff6 @@ -348313,6 +348337,15 @@ elf_symbol { type_id: 0x9d80e32f full_name: "current_umask" } +elf_symbol { + id: 0xedff0bea + name: "current_work" + is_defined: true + symbol_type: FUNCTION + crc: 0xd75ee543 + type_id: 0x7e9e1bfa + full_name: "current_work" +} elf_symbol { id: 0x171eca8a name: "d_add" @@ -382463,6 +382496,15 @@ elf_symbol { type_id: 0x1dcd0419 full_name: "si_swapinfo" } +elf_symbol { + id: 0x3878f32b + name: "sigprocmask" + is_defined: true + symbol_type: FUNCTION + crc: 0x6a5fa363 + type_id: 0x84621ae4 + full_name: "sigprocmask" +} elf_symbol { id: 0xfc18945f name: "simple_attr_open" @@ -387398,6 +387440,15 @@ elf_symbol { type_id: 0x4552a7f2 full_name: "thermal_of_cooling_device_register" } +elf_symbol { + id: 0xab314de1 + name: "thermal_of_zone_register" + is_defined: true + symbol_type: FUNCTION + crc: 0x21c89698 + type_id: 0xf1d30ddc + full_name: "thermal_of_zone_register" +} elf_symbol { id: 0x4da66281 name: "thermal_of_zone_unregister" @@ -398484,6 +398535,7 @@ interface { symbol_id: 0x823aeba5 symbol_id: 0xde96cb2f symbol_id: 0x4c090f07 + symbol_id: 0xedff0bea symbol_id: 0x171eca8a symbol_id: 0x82537a82 symbol_id: 0x79187969 @@ -402276,6 +402328,7 @@ interface { symbol_id: 0xaba9754d symbol_id: 0x6a9fad39 symbol_id: 0x99c66454 + symbol_id: 0x3878f32b symbol_id: 0xfc18945f symbol_id: 0xcbc81720 symbol_id: 0xda8bd5f1 @@ -402825,6 +402878,7 @@ interface { symbol_id: 0xf4017fdd symbol_id: 0x2d1f2cdd symbol_id: 0xdfc3c1f5 + symbol_id: 0xab314de1 symbol_id: 0x4da66281 symbol_id: 0x8c0c76a2 symbol_id: 0x91df6de8 diff --git a/android/abi_gki_aarch64_exynosauto b/android/abi_gki_aarch64_exynosauto index 2854f95356e9..018959e96b2b 100644 --- a/android/abi_gki_aarch64_exynosauto +++ b/android/abi_gki_aarch64_exynosauto @@ -1,5 +1,6 @@ [abi_symbol_list] # commonly used symbols + add_wait_queue __alloc_pages __alloc_percpu alloc_workqueue @@ -17,6 +18,7 @@ __bitmap_weight blocking_notifier_call_chain blocking_notifier_chain_register + blocking_notifier_chain_unregister bpf_trace_run1 bpf_trace_run2 bpf_trace_run3 @@ -42,6 +44,7 @@ clk_register_fixed_rate clk_set_rate clk_unprepare + clk_unregister cma_alloc cma_release complete @@ -55,11 +58,13 @@ cpu_pm_register_notifier __cpu_possible_mask crc32_le + current_work debugfs_create_dir debugfs_create_file debugfs_create_u32 debugfs_remove default_llseek + default_wake_function delayed_work_timer_fn del_timer del_timer_sync @@ -89,6 +94,8 @@ devm_clk_get devm_free_irq devm_gen_pool_create + devm_gpiod_get + devm_gpiod_get_optional devm_gpio_request_one devm_i2c_new_dummy_device devm_ioremap @@ -99,13 +106,20 @@ devm_kmemdup devm_kstrdup devm_mfd_add_devices + devm_mipi_dsi_attach + devm_mipi_dsi_device_register_full + __devm_of_phy_provider_register + devm_phy_create + devm_phy_get devm_pinctrl_get devm_platform_ioremap_resource devm_platform_ioremap_resource_byname __devm_regmap_init_i2c + devm_regulator_bulk_get devm_regulator_register devm_request_threaded_irq __devm_reset_control_get + devm_rtc_device_register devm_snd_soc_register_card devm_snd_soc_register_component devm_thermal_of_zone_register @@ -116,14 +130,19 @@ _dev_warn disable_irq disable_irq_nosync + display_timings_release dma_alloc_attrs dma_buf_attach + dma_buf_begin_cpu_access dma_buf_detach + dma_buf_end_cpu_access dma_buf_export dma_buf_get dma_buf_map_attachment dma_buf_put dma_buf_unmap_attachment + dma_buf_vmap + dma_buf_vunmap dma_fence_add_callback dma_fence_context_alloc dma_fence_init @@ -151,33 +170,98 @@ dma_unmap_page_attrs dma_unmap_resource dma_unmap_sg_attrs + down_interruptible down_write + drm_add_edid_modes + drm_atomic_helper_bridge_destroy_state + drm_atomic_helper_bridge_duplicate_state + drm_atomic_helper_bridge_reset + drm_atomic_helper_connector_destroy_state + drm_atomic_helper_connector_duplicate_state + drm_atomic_helper_connector_reset + drm_bridge_add + drm_bridge_remove + drm_compat_ioctl + drm_connector_attach_encoder + drm_connector_cleanup + drm_connector_init + drm_connector_list_iter_begin + drm_connector_list_iter_end + drm_connector_list_iter_next + drm_connector_register drm_connector_unregister + drm_connector_update_edid_property + drm_crtc_add_crc_entry + drm_crtc_cleanup + __drm_crtc_commit_free + drm_crtc_send_vblank_event + drm_crtc_vblank_count + drm_crtc_vblank_off + drm_crtc_vblank_on + drm_crtc_vblank_put ___drm_dbg + drm_debugfs_create_files + drm_detect_hdmi_monitor __drm_dev_dbg drm_dev_printk + drm_dev_put + drm_dev_register + drm_dev_unregister + drm_display_mode_from_videomode + drm_do_get_edid + drm_encoder_cleanup + drm_encoder_init __drm_err + drm_framebuffer_cleanup + drm_framebuffer_init + drm_gem_handle_create + drm_gem_mmap drm_gem_object_free drm_gem_object_lookup + drm_gem_object_release + drm_gem_prime_fd_to_handle + drm_gem_prime_handle_to_fd + drm_gem_private_object_init drm_get_edid + drm_helper_connector_dpms + drm_helper_hpd_irq_event + drm_helper_mode_fill_fb_struct + drm_helper_probe_single_connector_modes + drm_ioctl + drm_kms_helper_hotplug_event + drm_kms_helper_poll_fini + drm_kms_helper_poll_init + drmm_mode_config_init + drm_mode_config_cleanup + drm_mode_copy + drm_mode_create + drm_mode_duplicate + drm_mode_object_put + drm_mode_probed_add drm_modeset_lock drm_modeset_unlock + drm_mode_vrefresh + drm_object_attach_property + drm_open + drm_poll + drm_prime_gem_destroy drm_printf + drm_property_create_range + drm_read + drm_release + drm_vblank_init dump_stack - dw_pcie_ep_init dw_pcie_host_init dw_pcie_own_conf_map_bus dw_pcie_read - dw_pcie_read_dbi dw_pcie_setup_rc dw_pcie_write - dw_pcie_write_dbi enable_irq fd_install _find_first_bit - _find_first_zero_bit _find_next_bit finish_wait + flush_delayed_work flush_work __flush_workqueue fortify_panic @@ -185,6 +269,7 @@ free_irq __free_pages fwnode_handle_put + gcd generic_file_llseek generic_handle_irq gen_pool_add_owner @@ -200,6 +285,7 @@ gpiod_direction_output_raw gpiod_get_raw_value gpiod_set_raw_value + gpiod_set_value_cansleep gpio_request_one gpio_to_desc handle_edge_irq @@ -216,15 +302,14 @@ i2c_unregister_device ida_alloc_range ida_free + __init_rwsem __init_swait_queue_head init_timer_key init_wait_entry __init_waitqueue_head iomem_resource iommu_get_domain_for_dev - iommu_map iommu_register_device_fault_handler - iommu_unmap iommu_unregister_device_fault_handler ioremap_prot iounmap @@ -251,6 +336,8 @@ jiffies jiffies_to_msecs kasan_flag_enabled + kasprintf + kernel_kobj kfree kimage_voffset __kmalloc @@ -262,12 +349,17 @@ kmem_cache_destroy kmem_cache_free kmemdup + kobject_create_and_add + kobject_init_and_add + kobject_put krealloc kstrdup + kstrtobool kstrtoint kstrtoll kstrtouint kstrtoull + kthread_complete_and_exit kthread_create_on_node kthread_park kthread_parkme @@ -287,14 +379,26 @@ log_read_mmio log_write_mmio loops_per_jiffy + mdiobus_alloc_size + mdiobus_free + mdiobus_get_phy mdiobus_read + mdiobus_unregister mdiobus_write memcpy memdup_user mem_section memset memstart_addr + mipi_dsi_attach + mipi_dsi_detach + mipi_dsi_device_register_full + mipi_dsi_device_unregister + mipi_dsi_driver_register_full + mipi_dsi_driver_unregister + misc_deregister misc_register + mod_delayed_work_on mod_timer module_layout __msecs_to_jiffies @@ -308,6 +412,8 @@ netdev_err netdev_info netdev_warn + netif_carrier_off + nonseekable_open noop_llseek nr_cpu_ids ns_to_timespec64 @@ -315,24 +421,32 @@ of_address_to_resource of_alias_get_id of_clk_add_provider + of_clk_del_provider of_clk_get of_clk_src_onecell_get + of_count_phandle_with_args of_device_get_match_data of_device_is_available of_device_is_compatible of_find_compatible_node of_find_device_by_node of_find_matching_node_and_match + of_find_mipi_dsi_host_by_node of_find_node_by_name + of_find_node_opts_by_path of_find_property of_get_child_by_name + of_get_display_timings of_get_named_gpio_flags of_get_next_child of_get_property of_get_regulator_init_data + of_graph_get_remote_node + of_graph_parse_endpoint of_iomap of_match_device of_match_node + __of_mdiobus_register of_n_addr_cells of_n_size_cells __of_parse_phandle_with_args @@ -356,45 +470,37 @@ param_ops_int param_ops_string param_ops_uint - pci_alloc_irq_vectors_affinity - pci_clear_master - pci_disable_device - pci_disable_msi pcie_get_mps - pci_enable_device - pci_epc_mem_alloc_addr - pci_epc_mem_free_addr - pci_epc_set_bar - pci_epc_unmap_addr pcie_set_mps pci_find_bus pci_generic_config_read pci_generic_config_write pci_get_device - pci_ioremap_wc_bar pci_load_saved_state pci_msi_create_irq_domain pci_msi_mask_irq pci_msi_unmask_irq - pci_num_vf - __pci_register_driver - pci_request_regions pci_rescan_bus pci_restore_state pci_save_state - pci_set_master pci_store_saved_state - pci_unregister_driver __per_cpu_offset perf_trace_buf_alloc perf_trace_run_bpf_submit + phy_attached_info phy_init_eee phylink_create phylink_generic_validate + phy_power_off + phy_power_on pinctrl_lookup_state pinctrl_select_state + platform_device_register_full + platform_device_unregister + __platform_driver_probe __platform_driver_register platform_driver_unregister + platform_find_device_by_driver platform_get_irq platform_get_irq_byname platform_get_irq_byname_optional @@ -418,6 +524,7 @@ prepare_to_wait_event print_hex_dump _printk + proc_create_data put_device __put_task_struct put_unused_fd @@ -427,9 +534,11 @@ _raw_read_lock_irqsave _raw_read_unlock_irqrestore _raw_spin_lock + _raw_spin_lock_irq _raw_spin_lock_irqsave _raw_spin_trylock _raw_spin_unlock + _raw_spin_unlock_irq _raw_spin_unlock_irqrestore _raw_write_lock_irqsave _raw_write_unlock_irqrestore @@ -437,19 +546,26 @@ rdev_get_drvdata rdev_get_id refcount_warn_saturate + regcache_mark_dirty + regcache_sync __register_chrdev register_console register_pm_notifier + register_restart_handler register_syscore_ops regmap_read regmap_update_bits_base regmap_write + regulator_bulk_disable + regulator_bulk_enable regulator_disable regulator_enable regulator_list_voltage_linear regulator_map_voltage_linear release_firmware __release_region + remove_proc_entry + remove_wait_queue request_firmware __request_region request_threaded_irq @@ -461,6 +577,7 @@ scnprintf seq_lseek seq_printf + seq_putc seq_puts seq_read sg_alloc_table @@ -473,6 +590,7 @@ simple_attr_write simple_open simple_read_from_buffer + simple_strtoul simple_write_to_buffer single_open single_release @@ -484,6 +602,7 @@ snd_soc_dai_set_fmt snd_soc_dai_set_tdm_slot snd_soc_dai_set_tristate + snd_soc_dapm_add_routes snd_soc_dapm_get_enum_double snd_soc_dapm_put_enum_double snd_soc_get_volsw @@ -501,6 +620,7 @@ sscanf __stack_chk_fail strcasecmp + strchr strcmp strcpy strlcat @@ -532,6 +652,7 @@ ttm_bo_mmap_obj __udelay __unregister_chrdev + up up_write __usecs_to_jiffies usleep_range_state @@ -550,10 +671,12 @@ video_device_alloc video_device_release video_ioctl2 + videomode_from_timings __video_register_device video_unregister_device vmalloc vmap + vsnprintf vunmap wait_for_completion wait_for_completion_interruptible_timeout @@ -564,10 +687,25 @@ ww_mutex_lock ww_mutex_unlock +# required by adv7511.ko + cec_allocate_adapter + cec_delete_adapter + cec_received_msg_ts + cec_register_adapter + cec_s_phys_addr + cec_s_phys_addr_from_edid + cec_transmit_attempt_done_ts + cec_transmit_done_ts + cec_unregister_adapter + drm_bridge_hpd_notify + hdmi_avi_infoframe_init + hdmi_avi_infoframe_pack + i2c_new_ancillary_device + regmap_bulk_write + regmap_register_patch + # required by cmupmucal.ko debugfs_create_x32 - kernel_kobj - kobject_create_and_add of_find_node_by_type # required by dmatest.ko @@ -598,9 +736,6 @@ __drm_atomic_helper_private_obj_duplicate_state drm_atomic_private_obj_fini drm_atomic_private_obj_init - drm_connector_register - drm_crtc_add_crc_entry - __drm_crtc_commit_free drm_crtc_commit_wait drm_crtc_wait_one_vblank __drm_debug @@ -608,8 +743,6 @@ drm_display_mode_from_cea_vic drm_edid_duplicate drm_edid_get_monitor_name - drm_kms_helper_hotplug_event - drm_mode_object_put drm_modeset_lock_single_interruptible drm_object_property_set_value __drm_printfn_debug @@ -637,10 +770,8 @@ kmsg_dump_rewind kstat nr_irqs - of_count_phandle_with_args proc_create register_die_notifier - register_restart_handler return_address rtc_time64_to_tm sys_tz @@ -690,23 +821,18 @@ tty_std_termios tty_unregister_driver unregister_console - vsnprintf vzalloc # required by dwc3-exynosauto-usb.ko device_create_managed_software_node - devm_phy_get devm_regulator_get phy_exit phy_init - phy_power_off - phy_power_on platform_device_add platform_device_add_resources platform_device_alloc platform_device_del platform_device_put - platform_device_unregister __pm_relax pm_runtime_allow __pm_stay_awake @@ -744,12 +870,7 @@ sysfs_create_file_ns system_state -# required by exynos-adv-tracer-s2d.ko - simple_strtoul - # required by exynos-chipid_v2.ko - kasprintf - of_find_node_opts_by_path soc_device_register subsys_system_register @@ -778,15 +899,115 @@ pm_genpd_add_subdomain pm_genpd_init +# required by exynos9drm.ko + bus_find_device + component_add + component_bind_all + component_del + component_master_add_with_match + component_master_del + component_unbind_all + console_trylock + console_unlock + debugfs_lookup + device_rename + dma_buf_mmap + drm_atomic_bridge_chain_enable + drm_atomic_bridge_chain_pre_enable + drm_atomic_helper_check + drm_atomic_helper_cleanup_planes + drm_atomic_helper_commit + drm_atomic_helper_commit_modeset_disables + drm_atomic_helper_commit_planes + __drm_atomic_helper_connector_destroy_state + __drm_atomic_helper_connector_duplicate_state + drm_atomic_helper_crtc_destroy_state + drm_atomic_helper_crtc_duplicate_state + drm_atomic_helper_crtc_reset + drm_atomic_helper_disable_plane + drm_atomic_helper_disable_planes_on_crtc + drm_atomic_helper_fake_vblank + drm_atomic_helper_page_flip + __drm_atomic_helper_plane_destroy_state + __drm_atomic_helper_plane_duplicate_state + __drm_atomic_helper_plane_reset + drm_atomic_helper_set_config + drm_atomic_helper_shutdown + drm_atomic_helper_update_plane + drm_atomic_helper_wait_for_vblanks + drm_bridge_attach + drm_crtc_arm_vblank_event + drm_crtc_handle_vblank + drm_crtc_init_with_planes + drm_crtc_vblank_get + drm_crtc_vblank_waitqueue + drm_dev_alloc + drm_display_mode_to_videomode + drm_flip_work_cleanup + drm_flip_work_commit + drm_flip_work_init + drm_flip_work_queue + drm_format_info + drm_gem_create_mmap_offset + drm_gem_vm_close + drm_gem_vm_open + drm_get_connector_status_name + drm_get_format_info + drm_mode_config_helper_resume + drm_mode_config_helper_suspend + drm_mode_config_reset + drm_mode_object_get + drm_of_component_match_add + drm_of_crtc_port_mask + drm_of_find_possible_crtcs + drm_panel_disable + drm_panel_enable + drm_panel_get_modes + drm_panel_prepare + drm_panel_unprepare + drm_plane_cleanup + drm_plane_create_alpha_property + drm_plane_create_blend_mode_property + drm_plane_create_zpos_immutable_property + drm_plane_create_zpos_property + __drm_printfn_info + drm_property_create + drm_property_create_blob + drm_rotation_simplify + drm_state_dump + drm_universal_plane_init + drm_writeback_connector_init + drm_writeback_queue_job + drm_writeback_signal_completion + gpiod_to_irq + kstrtou8 + mipi_dsi_host_register + mipi_dsi_host_unregister + of_drm_find_bridge + of_drm_find_panel + of_find_i2c_device_by_node + of_graph_get_endpoint_by_regs + of_graph_get_next_endpoint + of_graph_get_port_by_id + of_graph_get_remote_port + of_graph_get_remote_port_parent + of_phandle_iterator_init + of_phandle_iterator_next + param_ops_long + platform_bus_type + seq_hex_dump + seq_release + strnstr + synchronize_irq + vmalloc_to_page + # required by exynos_mfc.ko clk_get clk_put - dma_buf_begin_cpu_access - dma_buf_end_cpu_access - dma_buf_vmap - dma_buf_vunmap hex_dump_to_buffer + iommu_map iommu_map_sg + iommu_unmap __sw_hweight64 _totalram_pages vb2_dqbuf @@ -800,7 +1021,6 @@ vb2_streamon # required by exynos_pm_qos.ko - blocking_notifier_chain_unregister kstrtoint_from_user # required by exynos_tty.ko @@ -831,7 +1051,6 @@ of_thermal_get_ntrips # required by gpu-sched.ko - mod_delayed_work_on sched_set_fifo_low __xa_alloc xa_destroy @@ -876,12 +1095,19 @@ # required by i2c-exynosauto.ko cpu_bit_bitmap +# required by lontium-lt9611.ko + drm_hdmi_avi_infoframe_from_display_mode + regmap_multi_reg_write + regulator_set_load + +# required by panel-samsung-dummy.ko + drm_panel_add + drm_panel_init + drm_panel_remove + # required by panic-fingerprint.ko stack_trace_save -# required by pcie-exynos-dw-ep.ko - pci_epc_map_addr - # required by pcs_xpcs.ko mdiobus_modify_changed phylink_mii_c22_pcs_decode_state @@ -889,8 +1115,6 @@ # required by phy-exynosauto-usbdrd-super.ko __clk_is_enabled - __devm_of_phy_provider_register - devm_phy_create gpio_request # required by pinctrl-samsung-core.ko @@ -961,7 +1185,6 @@ phy_write_paged # required by rtc-s2vps02.ko - devm_rtc_device_register pm_wakeup_ws_event rtc_update_irq rtc_valid_tm @@ -970,6 +1193,9 @@ __devm_irq_alloc_descs handle_nested_irq +# required by samsung-bridge-dummy.ko + drm_atomic_helper_bridge_propagate_bus_fmt + # required by samsung-iommu-group-v9.ko iommu_group_alloc iommu_group_set_name @@ -996,7 +1222,6 @@ dma_sync_sg_for_cpu is_dma_buf_file iterate_fd - misc_deregister remap_pfn_range __sg_page_iter_next __sg_page_iter_start @@ -1063,8 +1288,12 @@ bpf_trace_run5 bpf_trace_run9 capable + devfreq_recommended_opp __devm_drm_dev_alloc devm_iounmap + dev_pm_opp_get_voltage + dev_pm_opp_put + dev_pm_qos_update_request dma_buf_dynamic_attach dma_buf_move_notify dma_buf_pin @@ -1089,41 +1318,17 @@ down_read_killable down_read_trylock drain_workqueue - drm_add_edid_modes - drm_compat_ioctl drm_connector_attach_dp_subconnector_property - drm_connector_attach_encoder - drm_connector_cleanup - drm_connector_init drm_connector_init_with_ddc - drm_connector_list_iter_begin - drm_connector_list_iter_end - drm_connector_list_iter_next - drm_connector_update_edid_property - drm_crtc_cleanup drm_crtc_helper_set_config drm_crtc_helper_set_mode drm_crtc_init - drm_crtc_send_vblank_event - drm_crtc_vblank_count drm_crtc_vblank_helper_get_vblank_timestamp - drm_crtc_vblank_off - drm_crtc_vblank_on - drm_crtc_vblank_put drm_cvt_mode - drm_debugfs_create_files - drm_detect_hdmi_monitor drm_dev_enter drm_dev_exit - drm_dev_put - drm_dev_register - drm_dev_unregister drm_edid_header_is_valid drm_edid_is_valid - drm_encoder_cleanup - drm_encoder_init - drm_framebuffer_cleanup - drm_framebuffer_init drm_framebuffer_unregister_private drm_gem_dmabuf_mmap drm_gem_dmabuf_release @@ -1131,54 +1336,29 @@ drm_gem_dmabuf_vunmap drm_gem_fb_create_handle drm_gem_fb_destroy - drm_gem_handle_create - drm_gem_mmap - drm_gem_object_release drm_gem_prime_export - drm_gem_prime_fd_to_handle - drm_gem_prime_handle_to_fd drm_gem_prime_mmap - drm_gem_private_object_init drm_handle_vblank - drm_helper_connector_dpms drm_helper_disable_unused_functions drm_helper_force_disable_all - drm_helper_hpd_irq_event - drm_helper_mode_fill_fb_struct - drm_helper_probe_single_connector_modes - drm_ioctl drm_is_current_master drm_kms_helper_is_poll_worker drm_kms_helper_poll_disable drm_kms_helper_poll_enable - drm_kms_helper_poll_fini - drm_kms_helper_poll_init drm_mm_init drm_mm_insert_node_in_range - drmm_mode_config_init drm_mm_print drm_mm_remove_node drm_mm_takedown - drm_mode_config_cleanup drm_mode_create_scaling_mode_property drm_mode_crtc_set_gamma_size - drm_mode_duplicate - drm_mode_probed_add drm_mode_set_crtcinfo drm_mode_set_name - drm_mode_vrefresh - drm_object_attach_property - drm_open - drm_poll - drm_prime_gem_destroy drm_prime_pages_to_sg drm_prime_sg_to_dma_addr_array __drm_printfn_seq_file drm_property_create_enum - drm_property_create_range __drm_puts_seq_file - drm_read - drm_release drm_syncobj_add_point drm_syncobj_create drm_syncobj_find @@ -1187,11 +1367,10 @@ drm_syncobj_get_fd drm_syncobj_get_handle drm_syncobj_replace_fence - drm_vblank_init __fdget - flush_delayed_work + _find_first_zero_bit __folio_put - gcd + get_random_u32 __get_task_comm handle_simple_irq i2c_bit_add_bus @@ -1204,8 +1383,8 @@ idr_get_next idr_remove idr_replace - __init_rwsem iommu_iova_to_phys + jiffies64_to_msecs jiffies_to_usecs ktime_get_ts64 __memcpy_fromio @@ -1218,8 +1397,11 @@ __page_pinner_put_page param_ops_charp param_ops_hexint + pci_alloc_irq_vectors_affinity pci_assign_unassigned_bus_resources pci_bus_resource_n + pci_bus_type + pci_clear_master pcie_bandwidth_available pcie_get_speed_cap pci_enable_atomic_ops_to_root @@ -1234,6 +1416,7 @@ pci_read_config_word pci_release_resource pci_resize_resource + pci_set_master pci_unmap_rom pci_write_config_dword pci_write_config_word @@ -1251,12 +1434,10 @@ rb_next_postorder __rcu_read_lock __rcu_read_unlock - seq_putc seq_write set_normalized_timespec64 sg_alloc_table_from_pages_segment si_meminfo - strchr sysfs_create_files sysfs_remove_files __traceiter_gpu_mem_total @@ -1309,6 +1490,17 @@ ww_mutex_lock_interruptible ww_mutex_trylock +# required by snd-soc-hdmi-codec.ko + hdmi_audio_infoframe_init + snd_ctl_add + snd_ctl_new1 + snd_pcm_add_chmap_ctls + snd_pcm_create_iec958_consumer_default + snd_pcm_fill_iec958_consumer + snd_pcm_fill_iec958_consumer_hw_params + snd_pcm_hw_constraint_eld + snd_soc_jack_report + # required by snd-soc-samsung-abox-core.ko __devm_regmap_init __devm_regmap_init_mmio_clk @@ -1328,7 +1520,6 @@ snd_pcm_period_elapsed snd_soc_add_component_controls snd_soc_component_init_regmap - snd_soc_dapm_add_routes snd_soc_dapm_kcontrol_widget snd_soc_dapm_mux_update_power snd_soc_dapm_new_control @@ -1339,14 +1530,7 @@ __tasklet_hi_schedule # required by snd-soc-tas6424.ko - devm_gpiod_get_optional - devm_regulator_bulk_get - gpiod_set_value_cansleep regcache_cache_only - regcache_mark_dirty - regcache_sync - regulator_bulk_disable - regulator_bulk_enable # required by snd-soc-tlv320adcx140.ko device_property_read_u8_array @@ -1367,8 +1551,6 @@ # required by spidev.ko device_property_match_string driver_unregister - _raw_spin_lock_irq - _raw_spin_unlock_irq __spi_register_driver spi_setup spi_sync @@ -1413,10 +1595,6 @@ fwnode_get_phy_node get_device_system_crosststamp __local_bh_enable_ip - mdiobus_alloc_size - mdiobus_free - mdiobus_get_phy - mdiobus_unregister mdio_device_create mdio_device_free __napi_alloc_skb @@ -1430,7 +1608,6 @@ netdev_pick_tx netdev_rss_key_fill netdev_update_features - netif_carrier_off netif_carrier_on netif_device_attach netif_device_detach @@ -1441,13 +1618,11 @@ netif_set_real_num_tx_queues netif_tx_wake_queue net_ratelimit - __of_mdiobus_register page_pool_alloc_pages page_pool_create page_pool_destroy page_pool_put_defragged_page page_pool_release_page - phy_attached_info phylink_connect_phy phylink_destroy phylink_disconnect_phy @@ -1525,7 +1700,6 @@ # required by sxgmac.ko alloc_chrdev_region cdev_add - devm_gpiod_get gpiod_direction_output gpiod_set_value @@ -1545,166 +1719,68 @@ ufshcd_system_resume ufshcd_system_suspend +# required by vbufq-fe-module.ko + kstrndup + +# required by vdriver-lib-module.ko + kobject_get + kset_create_and_add + +# required by vi2c-fe-module.ko + down + +# required by vlx-clk-ctrl-common-module.ko + vscnprintf + +# required by vlx-hyp-module.ko + irq_create_of_mapping + irq_dispose_mapping + irq_find_matching_fwspec + of_irq_find_parent + pfn_is_map_memory + pm_power_off + proc_mkdir + +# required by vlx-last-kmsg-module.ko + proc_set_size + +# required by vlx-prop-module.ko + kobject_uevent + kset_unregister + sysfs_create_bin_file + sysfs_remove_bin_file + +# required by vlx-vipc-module.ko + sigprocmask + +# required by vthermal-fe-module.ko + thermal_of_zone_register + thermal_of_zone_unregister + +# required by vvideo2-fe-module.ko + dma_buf_fd + __task_pid_nr_ns + vprintk + +# required by vwatchdog-module.ko + watchdog_register_device + watchdog_unregister_device + # preserved by --additions-only - add_wait_queue - bus_find_device - cec_allocate_adapter - cec_delete_adapter - cec_received_msg_ts - cec_register_adapter - cec_s_phys_addr - cec_s_phys_addr_from_edid - cec_transmit_attempt_done_ts - cec_transmit_done_ts - cec_unregister_adapter - component_add - component_bind_all - component_del - component_master_add_with_match - component_master_del - component_unbind_all console_suspend_enabled - console_trylock - console_unlock - debugfs_lookup - device_rename - devm_mipi_dsi_attach - devm_mipi_dsi_device_register_full - display_timings_release - dma_buf_mmap - drm_atomic_bridge_chain_enable - drm_atomic_bridge_chain_pre_enable - drm_atomic_helper_bridge_destroy_state - drm_atomic_helper_bridge_duplicate_state - drm_atomic_helper_bridge_propagate_bus_fmt - drm_atomic_helper_bridge_reset - drm_atomic_helper_check - drm_atomic_helper_cleanup_planes - drm_atomic_helper_commit - drm_atomic_helper_commit_modeset_disables - drm_atomic_helper_commit_planes - __drm_atomic_helper_connector_destroy_state - drm_atomic_helper_connector_destroy_state - __drm_atomic_helper_connector_duplicate_state - drm_atomic_helper_connector_duplicate_state - drm_atomic_helper_connector_reset - drm_atomic_helper_crtc_destroy_state - drm_atomic_helper_crtc_duplicate_state - drm_atomic_helper_crtc_reset - drm_atomic_helper_disable_plane - drm_atomic_helper_disable_planes_on_crtc - drm_atomic_helper_fake_vblank - drm_atomic_helper_page_flip - __drm_atomic_helper_plane_destroy_state - __drm_atomic_helper_plane_duplicate_state - __drm_atomic_helper_plane_reset - drm_atomic_helper_set_config - drm_atomic_helper_shutdown - drm_atomic_helper_update_plane - drm_atomic_helper_wait_for_vblanks - drm_bridge_add - drm_bridge_attach - drm_bridge_hpd_notify - drm_bridge_remove - drm_crtc_arm_vblank_event - drm_crtc_handle_vblank - drm_crtc_init_with_planes - drm_crtc_vblank_get - drm_crtc_vblank_waitqueue - drm_dev_alloc - drm_display_mode_from_videomode - drm_display_mode_to_videomode - drm_do_get_edid - drm_flip_work_cleanup - drm_flip_work_commit - drm_flip_work_init - drm_flip_work_queue - drm_format_info - drm_gem_create_mmap_offset - drm_gem_vm_close - drm_gem_vm_open - drm_get_connector_status_name - drm_get_format_info - drm_hdmi_avi_infoframe_from_display_mode - drm_mode_config_helper_resume - drm_mode_config_helper_suspend - drm_mode_config_reset - drm_mode_copy - drm_mode_create - drm_mode_object_get - drm_of_component_match_add - drm_of_crtc_port_mask - drm_of_find_possible_crtcs - drm_panel_add - drm_panel_disable - drm_panel_enable - drm_panel_get_modes - drm_panel_init - drm_panel_prepare - drm_panel_remove - drm_panel_unprepare - drm_plane_cleanup - drm_plane_create_alpha_property - drm_plane_create_blend_mode_property - drm_plane_create_zpos_immutable_property - drm_plane_create_zpos_property - __drm_printfn_info - drm_property_create - drm_property_create_blob - drm_rotation_simplify - drm_state_dump - drm_universal_plane_init - drm_writeback_connector_init - drm_writeback_queue_job - drm_writeback_signal_completion - gpiod_to_irq - hdmi_audio_infoframe_init - hdmi_avi_infoframe_init - hdmi_avi_infoframe_pack - i2c_new_ancillary_device - kstrtobool - kstrtou8 - mipi_dsi_attach - mipi_dsi_detach - mipi_dsi_device_register_full - mipi_dsi_device_unregister - mipi_dsi_driver_register_full - mipi_dsi_driver_unregister - mipi_dsi_host_register - mipi_dsi_host_unregister - of_drm_find_bridge - of_drm_find_panel - of_find_i2c_device_by_node - of_find_mipi_dsi_host_by_node - of_get_display_timings - of_graph_get_endpoint_by_regs - of_graph_get_next_endpoint - of_graph_get_port_by_id - of_graph_get_remote_node - of_graph_get_remote_port - of_graph_get_remote_port_parent - of_graph_parse_endpoint - of_phandle_iterator_init - of_phandle_iterator_next - param_ops_long - platform_bus_type - platform_device_register_full - platform_find_device_by_driver - regmap_bulk_write - regmap_multi_reg_write - regmap_register_patch - regulator_set_load - seq_hex_dump - seq_release - snd_ctl_add - snd_ctl_new1 - snd_pcm_add_chmap_ctls - snd_pcm_create_iec958_consumer_default - snd_pcm_fill_iec958_consumer - snd_pcm_fill_iec958_consumer_hw_params - snd_pcm_hw_constraint_eld - snd_soc_jack_report - strnstr - synchronize_irq - videomode_from_timings - vmalloc_to_page + dw_pcie_ep_init + dw_pcie_read_dbi + dw_pcie_write_dbi + pci_disable_device + pci_disable_msi + pci_enable_device + pci_epc_map_addr + pci_epc_mem_alloc_addr + pci_epc_mem_free_addr + pci_epc_set_bar + pci_epc_unmap_addr + pci_ioremap_wc_bar + pci_num_vf + __pci_register_driver + pci_request_regions + pci_unregister_driver From 22e9166465d11f4cd248b6716bf4f7845cb77c2f Mon Sep 17 00:00:00 2001 From: Harshdeep Dhatt Date: Fri, 10 Nov 2023 23:37:42 -0700 Subject: [PATCH 35/46] ANDROID: abi_gki_aarch64_qcom: Update symbol list The adreno graphics driver requires these two symbols to enhance debugging. Symbols added: trace_array_get_by_name trace_array_set_clr_event Bug: 310950241 Change-Id: I232237983b19cbf9d0874913a11fdc2d6f5261cc Signed-off-by: Harshdeep Dhatt --- android/abi_gki_aarch64.stg | 33 +++++++++++++++++++++++++++++++++ android/abi_gki_aarch64_qcom | 2 ++ 2 files changed, 35 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 2ba9573b9fd9..3f43a1bb4c8e 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -297150,6 +297150,11 @@ function { parameter_id: 0xc9082b19 parameter_id: 0x3545954a } +function { + id: 0x1f3d2f88 + return_type_id: 0x07f2af49 + parameter_id: 0x3e10b518 +} function { id: 0x1f3dbc29 return_type_id: 0x48b5725f @@ -320089,6 +320094,14 @@ function { return_type_id: 0x3e10b518 parameter_id: 0x3b38b19b } +function { + id: 0x9c8a3bf9 + return_type_id: 0x6720d32f + parameter_id: 0x07f2af49 + parameter_id: 0x3e10b518 + parameter_id: 0x3e10b518 + parameter_id: 0x6d7f5ff6 +} function { id: 0x9c8a5e38 return_type_id: 0x6720d32f @@ -387764,6 +387777,15 @@ elf_symbol { type_id: 0x1459aedb full_name: "touchscreen_report_pos" } +elf_symbol { + id: 0xe2481840 + name: "trace_array_get_by_name" + is_defined: true + symbol_type: FUNCTION + crc: 0x0bb6f3ef + type_id: 0x1f3d2f88 + full_name: "trace_array_get_by_name" +} elf_symbol { id: 0x86b2ecdf name: "trace_array_put" @@ -387773,6 +387795,15 @@ elf_symbol { type_id: 0x1164fa41 full_name: "trace_array_put" } +elf_symbol { + id: 0xa274099f + name: "trace_array_set_clr_event" + is_defined: true + symbol_type: FUNCTION + crc: 0x52d140b6 + type_id: 0x9c8a3bf9 + full_name: "trace_array_set_clr_event" +} elf_symbol { id: 0x00fb9c6d name: "trace_clock_local" @@ -402914,7 +402945,9 @@ interface { symbol_id: 0xf7dfdad1 symbol_id: 0x47d78ddb symbol_id: 0x961122f4 + symbol_id: 0xe2481840 symbol_id: 0x86b2ecdf + symbol_id: 0xa274099f symbol_id: 0x00fb9c6d symbol_id: 0x0e209244 symbol_id: 0xe8ad61b2 diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index b958ead78318..a02230f1881d 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -3293,7 +3293,9 @@ topology_update_thermal_pressure _totalram_pages _trace_android_vh_record_pcpu_rwsem_starttime + trace_array_get_by_name trace_array_put + trace_array_set_clr_event __trace_bprintk trace_clock_local trace_event_buffer_commit From 825c17428a476d8be25d9caa6671c08da464267c Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 10 Nov 2023 09:22:41 +0000 Subject: [PATCH 36/46] ANDROID: KVM: arm64: Fix error path in pkvm_mem_abort() On one error path, pin_user_pages has succeeded and should be undone. Bug: 310131277 Change-Id: I92fe0c54bb5b8005f848491f5e9be1090b61fbd1 Signed-off-by: Keir Fraser --- arch/arm64/kvm/mmu.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 807e66c05709..0f3817fc7ecc 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -1388,7 +1388,7 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, * prevent try_to_unmap() from succeeding. */ ret = -EIO; - goto dec_account; + goto unpin; } write_lock(&kvm->mmu_lock); @@ -1397,7 +1397,7 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, if (ret) { if (ret == -EAGAIN) ret = 0; - goto unpin; + goto unlock; } ppage->page = page; @@ -1407,8 +1407,9 @@ static int pkvm_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, return 0; -unpin: +unlock: write_unlock(&kvm->mmu_lock); +unpin: unpin_user_pages(&page, 1); dec_account: account_locked_vm(mm, 1, false); From 8431e524d6c0df3bbf68f89bbce88306f7f36764 Mon Sep 17 00:00:00 2001 From: Andy Shevchenko Date: Fri, 1 Sep 2023 01:25:55 +0300 Subject: [PATCH 37/46] UPSTREAM: serial: 8250_port: Check IRQ data before use In case the leaf driver wants to use IRQ polling (irq = 0) and IIR register shows that an interrupt happened in the 8250 hardware the IRQ data can be NULL. In such a case we need to skip the wake event as we came to this path from the timer interrupt and quite likely system is already awake. Without this fix we have got an Oops: serial8250: ttyS0 at I/O 0x3f8 (irq = 0, base_baud = 115200) is a 16550A ... BUG: kernel NULL pointer dereference, address: 0000000000000010 RIP: 0010:serial8250_handle_irq+0x7c/0x240 Call Trace: ? serial8250_handle_irq+0x7c/0x240 ? __pfx_serial8250_timeout+0x10/0x10 Fixes: 0ba9e3a13c6a ("serial: 8250: Add missing wakeup event reporting") Cc: stable Signed-off-by: Andy Shevchenko Reviewed-by: Florian Fainelli Link: https://lore.kernel.org/r/20230831222555.614426-1-andriy.shevchenko@linux.intel.com Signed-off-by: Greg Kroah-Hartman Bug: 311265203 Change-Id: I36cdceb31da5a000f336a96347e99119df308064 (cherry picked from commit cce7fc8b29961b64fadb1ce398dc5ff32a79643b) Signed-off-by: Yuan-Jen Cheng --- drivers/tty/serial/8250/8250_port.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index b8e8a96c3eb6..54250aff22b0 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -1953,7 +1953,10 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) skip_rx = true; if (status & (UART_LSR_DR | UART_LSR_BI) && !skip_rx) { - if (irqd_is_wakeup_set(irq_get_irq_data(port->irq))) + struct irq_data *d; + + d = irq_get_irq_data(port->irq); + if (d && irqd_is_wakeup_set(d)) pm_wakeup_event(tport->tty->dev, 0); if (!up->dma || handle_rx_dma(up, iir)) status = serial8250_rx_chars(up, status); From b496cc3115440c46f376c759f29d3397f54da070 Mon Sep 17 00:00:00 2001 From: liujing40 Date: Wed, 25 Oct 2023 15:26:27 +0800 Subject: [PATCH 38/46] ANDROID: fuse-bpf: Add NULL pointer check in fuse_release_in If open request sent to classic fuse, backing_file is null. In fuse_release_initialize, fput will trigger a crash. Bug: 297831741 Change-Id: I2d54d99d62b54c39a6dc9064f8f62488433aff6f Signed-off-by: liujing40 --- fs/fuse/backing.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/fuse/backing.c b/fs/fuse/backing.c index 303a78a63cd2..e16457c75944 100644 --- a/fs/fuse/backing.c +++ b/fs/fuse/backing.c @@ -300,7 +300,9 @@ int fuse_release_initialize(struct fuse_bpf_args *fa, struct fuse_release_in *fr struct inode *inode, struct fuse_file *ff) { /* Always put backing file whatever bpf/userspace says */ - fput(ff->backing_file); + if (ff->backing_file) { + fput(ff->backing_file); + } *fri = (struct fuse_release_in) { .fh = ff->fh, From 1b639e97b8fc9a60089ded544e103753a0a542a2 Mon Sep 17 00:00:00 2001 From: Seiya Wang Date: Fri, 17 Nov 2023 11:53:04 +0800 Subject: [PATCH 39/46] ANDROID: GKI: Update symbol list for mtk Add following symbols bitmap_alloc cpufreq_cpu_get_raw cpufreq_get_driver_data cpufreq_update_policy cpufreq_update_util_data devm_clk_get_optional_enabled devm_gpiod_get_array devm_pwmchip_add dev_pm_opp_adjust_voltage dev_pm_opp_disable dev_pm_opp_enable dev_set_threaded dma_vmap_noncontiguous drm_connector_set_panel_orientation drm_panel_of_backlight _find_first_and_bit gpiod_set_array_value_cansleep hid_debug hid_driver_reset_resume hid_driver_suspend i2c_smbus_read_byte irq_find_matching_fwspec memdup_user_nul mipi_dsi_dcs_enter_sleep_mode mipi_dsi_dcs_set_display_off mmc_pwrseq_register mmc_pwrseq_unregister of_drm_get_panel_orientation pm_suspend_target_state return_address serial8250_do_pm snd_vendor_set_ops _trace_android_vh_record_pcpu_rwsem_time_early __traceiter_android_rvh_cpufreq_transition __traceiter_android_rvh_post_init_entity_util_avg __traceiter_android_vh_binder_trans __traceiter_android_vh_check_uninterrupt_tasks __traceiter_android_vh_dump_throttled_rt_tasks __traceiter_android_vh_setscheduler_uclamp __tracepoint_android_rvh_cpufreq_transition __tracepoint_android_rvh_post_init_entity_util_avg __tracepoint_android_vh_binder_trans __tracepoint_android_vh_check_uninterrupt_tasks __tracepoint_android_vh_dump_throttled_rt_tasks __tracepoint_android_vh_setscheduler_uclamp ufshcd_mcq_poll_cqe_lock ufshcd_mcq_write_cqis unpin_user_pages_dirty_lock Bug: 311514694 Signed-off-by: Seiya Wang Change-Id: Ibda780725c05cbd5fccf2716f107ba6fa308a1cb --- android/abi_gki_aarch64.stg | 10 ++++++++ android/abi_gki_aarch64_mtk | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 3f43a1bb4c8e..ec672a81b884 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -381896,6 +381896,15 @@ elf_symbol { type_id: 0x1e70c9ff full_name: "serdev_device_write_flush" } +elf_symbol { + id: 0x98b882af + name: "serial8250_do_pm" + is_defined: true + symbol_type: FUNCTION + crc: 0x15a6f758 + type_id: 0x11b2c04d + full_name: "serial8250_do_pm" +} elf_symbol { id: 0x2bb7ad6a name: "serial8250_do_set_termios" @@ -402291,6 +402300,7 @@ interface { symbol_id: 0x3c71822d symbol_id: 0x6e10178a symbol_id: 0x5d6a93ff + symbol_id: 0x98b882af symbol_id: 0x2bb7ad6a symbol_id: 0x4bb58367 symbol_id: 0x63762e51 diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index a97afed681e8..ad1f5f4cac16 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -63,6 +63,7 @@ bio_init bio_put bio_start_io_acct + bitmap_alloc __bitmap_and __bitmap_andnot __bitmap_clear @@ -221,6 +222,7 @@ cpu_bit_bitmap cpufreq_add_update_util_hook cpufreq_cpu_get + cpufreq_cpu_get_raw cpufreq_cpu_put cpufreq_disable_fast_switch cpufreq_driver_fast_switch @@ -229,6 +231,7 @@ cpufreq_enable_fast_switch cpufreq_generic_attr cpufreq_generic_frequency_table_verify + cpufreq_get_driver_data cpufreq_get_policy cpufreq_policy_transition_delay_us cpufreq_quick_get @@ -240,6 +243,8 @@ cpufreq_unregister_driver cpufreq_unregister_governor cpufreq_update_limits + cpufreq_update_policy + cpufreq_update_util_data cpu_hotplug_disable cpu_hotplug_enable __cpuhp_remove_state @@ -458,6 +463,7 @@ devm_clk_bulk_get_optional devm_clk_get devm_clk_get_optional + devm_clk_get_optional_enabled devm_clk_put devm_clk_register dev_mc_sync @@ -473,6 +479,7 @@ devm_fwnode_pwm_get devm_gpiochip_add_data_with_key devm_gpiod_get + devm_gpiod_get_array devm_gpiod_get_index devm_gpiod_get_optional devm_gpiod_put @@ -517,6 +524,7 @@ devm_platform_ioremap_resource_byname devm_power_supply_get_by_phandle devm_power_supply_register + devm_pwmchip_add devm_rc_allocate_device devm_rc_register_device devm_regmap_add_irq_chip @@ -555,7 +563,10 @@ dev_pm_genpd_add_notifier dev_pm_genpd_set_performance_state dev_pm_opp_add + dev_pm_opp_adjust_voltage dev_pm_opp_clear_config + dev_pm_opp_disable + dev_pm_opp_enable dev_pm_opp_find_freq_ceil dev_pm_opp_find_freq_exact dev_pm_opp_find_freq_floor @@ -587,6 +598,7 @@ dev_set_mtu dev_set_name dev_set_promiscuity + dev_set_threaded dev_uc_add dev_uc_del dev_uc_sync @@ -672,6 +684,7 @@ dma_unmap_page_attrs dma_unmap_resource dma_unmap_sg_attrs + dma_vmap_noncontiguous do_trace_netlink_extack double_rq_lock do_wait_intr_irq @@ -745,6 +758,7 @@ drm_connector_cleanup drm_connector_init drm_connector_register + drm_connector_set_panel_orientation drm_connector_unregister drm_connector_update_edid_property drm_crtc_add_crc_entry @@ -833,6 +847,7 @@ drm_panel_enable drm_panel_get_modes drm_panel_init + drm_panel_of_backlight drm_panel_prepare drm_panel_remove drm_panel_unprepare @@ -895,6 +910,7 @@ file_path filp_close filp_open_block + _find_first_and_bit _find_first_bit _find_first_zero_bit find_get_pid @@ -1037,6 +1053,7 @@ gpiod_get_raw_value gpiod_get_value gpiod_get_value_cansleep + gpiod_set_array_value_cansleep gpiod_set_debounce gpiod_set_raw_value gpiod_set_value @@ -1062,7 +1079,10 @@ hex_to_bin hid_add_device hid_allocate_device + hid_debug hid_destroy_device + hid_driver_reset_resume + hid_driver_suspend hid_ignore hid_input_report hid_parse_report @@ -1088,6 +1108,7 @@ i2c_put_adapter i2c_put_dma_safe_msg_buf i2c_register_driver + i2c_smbus_read_byte i2c_smbus_read_byte_data i2c_smbus_read_i2c_block_data i2c_smbus_read_word_data @@ -1239,6 +1260,7 @@ irq_domain_simple_ops irq_domain_xlate_onetwocell irq_domain_xlate_twocell + irq_find_matching_fwspec irq_get_irqchip_state irq_get_irq_data irq_modify_status @@ -1455,6 +1477,7 @@ __memcpy_fromio __memcpy_toio memdup_user + memdup_user_nul memmove memory_read_from_buffer memparse @@ -1469,7 +1492,9 @@ migrate_swap __migrate_task mipi_dsi_attach + mipi_dsi_dcs_enter_sleep_mode mipi_dsi_dcs_read + mipi_dsi_dcs_set_display_off mipi_dsi_dcs_write mipi_dsi_dcs_write_buffer mipi_dsi_detach @@ -1500,6 +1525,8 @@ mmc_hw_reset mmc_of_parse mmc_put_card + mmc_pwrseq_register + mmc_pwrseq_unregister mmc_regulator_get_supply mmc_regulator_set_ocr mmc_regulator_set_vqmmc @@ -1646,6 +1673,7 @@ of_dma_xlate_by_chan_id of_drm_find_bridge of_drm_find_panel + of_drm_get_panel_orientation of_find_backlight_by_node of_find_compatible_node of_find_device_by_node @@ -1910,6 +1938,7 @@ __pm_stay_awake pm_stay_awake pm_suspend_default_s2idle + pm_suspend_target_state pm_system_wakeup pm_wakeup_dev_event pm_wakeup_ws_event @@ -2120,6 +2149,7 @@ reset_control_deassert reset_controller_register reset_control_reset + return_address rhashtable_destroy rhashtable_free_and_destroy rhashtable_init @@ -2253,6 +2283,7 @@ serdev_device_wait_until_sent serdev_device_write_buf serdev_device_write_flush + serial8250_do_pm serial8250_do_set_termios serial8250_do_shutdown serial8250_do_startup @@ -2400,6 +2431,7 @@ snd_soc_rtdcom_lookup snd_soc_set_runtime_hwparams snd_soc_unregister_component + snd_vendor_set_ops snprintf soc_device_register soc_device_unregister @@ -2574,6 +2606,7 @@ topology_update_thermal_pressure _totalram_pages _trace_android_vh_record_pcpu_rwsem_starttime + _trace_android_vh_record_pcpu_rwsem_time_early __trace_bprintk trace_event_buffer_commit trace_event_buffer_reserve @@ -2589,6 +2622,7 @@ __traceiter_android_rvh_commit_creds __traceiter_android_rvh_cpu_cgroup_attach __traceiter_android_rvh_cpu_cgroup_online + __traceiter_android_rvh_cpufreq_transition __traceiter_android_rvh_cpu_overutilized __traceiter_android_rvh_dequeue_task __traceiter_android_rvh_dequeue_task_fair @@ -2606,6 +2640,7 @@ __traceiter_android_rvh_is_cpu_allowed __traceiter_android_rvh_new_task_stats __traceiter_android_rvh_override_creds + __traceiter_android_rvh_post_init_entity_util_avg __traceiter_android_rvh_prepare_prio_fork __traceiter_android_rvh_replace_next_task_fair __traceiter_android_rvh_revert_creds @@ -2642,17 +2677,20 @@ __traceiter_android_vh_audio_usb_offload_connect __traceiter_android_vh_binder_restore_priority __traceiter_android_vh_binder_set_priority + __traceiter_android_vh_binder_trans __traceiter_android_vh_binder_transaction_init __traceiter_android_vh_cgroup_attach __traceiter_android_vh_cgroup_set_task __traceiter_android_vh_check_bpf_syscall __traceiter_android_vh_check_file_open __traceiter_android_vh_check_mmap_file + __traceiter_android_vh_check_uninterrupt_tasks __traceiter_android_vh_compaction_exit __traceiter_android_vh_compaction_try_to_compact_pages_exit __traceiter_android_vh_cpufreq_fast_switch __traceiter_android_vh_cpu_idle_enter __traceiter_android_vh_cpu_idle_exit + __traceiter_android_vh_dump_throttled_rt_tasks __traceiter_android_vh_iommu_iovad_alloc_iova __traceiter_android_vh_iommu_iovad_free_iova __traceiter_android_vh_is_fpsimd_save @@ -2665,6 +2703,7 @@ __traceiter_android_vh_rwsem_write_finished __traceiter_android_vh_sched_pelt_multiplier __traceiter_android_vh_scheduler_tick + __traceiter_android_vh_setscheduler_uclamp __traceiter_android_vh_set_wake_flags __traceiter_android_vh_show_resume_epoch_val __traceiter_android_vh_show_suspend_epoch_val @@ -2691,6 +2730,7 @@ __tracepoint_android_rvh_commit_creds __tracepoint_android_rvh_cpu_cgroup_attach __tracepoint_android_rvh_cpu_cgroup_online + __tracepoint_android_rvh_cpufreq_transition __tracepoint_android_rvh_cpu_overutilized __tracepoint_android_rvh_dequeue_task __tracepoint_android_rvh_dequeue_task_fair @@ -2708,6 +2748,7 @@ __tracepoint_android_rvh_is_cpu_allowed __tracepoint_android_rvh_new_task_stats __tracepoint_android_rvh_override_creds + __tracepoint_android_rvh_post_init_entity_util_avg __tracepoint_android_rvh_prepare_prio_fork __tracepoint_android_rvh_replace_next_task_fair __tracepoint_android_rvh_revert_creds @@ -2744,17 +2785,20 @@ __tracepoint_android_vh_audio_usb_offload_connect __tracepoint_android_vh_binder_restore_priority __tracepoint_android_vh_binder_set_priority + __tracepoint_android_vh_binder_trans __tracepoint_android_vh_binder_transaction_init __tracepoint_android_vh_cgroup_attach __tracepoint_android_vh_cgroup_set_task __tracepoint_android_vh_check_bpf_syscall __tracepoint_android_vh_check_file_open __tracepoint_android_vh_check_mmap_file + __tracepoint_android_vh_check_uninterrupt_tasks __tracepoint_android_vh_compaction_exit __tracepoint_android_vh_compaction_try_to_compact_pages_exit __tracepoint_android_vh_cpufreq_fast_switch __tracepoint_android_vh_cpu_idle_enter __tracepoint_android_vh_cpu_idle_exit + __tracepoint_android_vh_dump_throttled_rt_tasks __tracepoint_android_vh_iommu_iovad_alloc_iova __tracepoint_android_vh_iommu_iovad_free_iova __tracepoint_android_vh_is_fpsimd_save @@ -2767,6 +2811,7 @@ __tracepoint_android_vh_rwsem_write_finished __tracepoint_android_vh_sched_pelt_multiplier __tracepoint_android_vh_scheduler_tick + __tracepoint_android_vh_setscheduler_uclamp __tracepoint_android_vh_set_wake_flags __tracepoint_android_vh_show_resume_epoch_val __tracepoint_android_vh_show_suspend_epoch_val @@ -2891,7 +2936,9 @@ ufshcd_make_hba_operational ufshcd_mcq_config_mac ufshcd_mcq_make_queues_operational + ufshcd_mcq_poll_cqe_lock ufshcd_mcq_read_cqis + ufshcd_mcq_write_cqis ufshcd_pltfrm_init ufshcd_query_attr ufshcd_query_descriptor_retry @@ -2912,6 +2959,7 @@ unmap_mapping_range unpin_user_page unpin_user_pages + unpin_user_pages_dirty_lock unregister_blkdev __unregister_chrdev unregister_chrdev_region From daa7a3d95d3992597ffc11035782e1a44264ad4a Mon Sep 17 00:00:00 2001 From: Vincent Donnefort Date: Mon, 6 Nov 2023 14:03:24 +0000 Subject: [PATCH 40/46] ANDROID: KVM: arm64: mount procfs for pKVM module loading modprobe needs /proc/cmdline to pass module arguments to the module loader. Sadly, so early in the boot, nothing mounts that FS. Bug: 301483379 Change-Id: Iaab3000e3b7f908fc81f7f36adf2f73c7d3129a4 Signed-off-by: Vincent Donnefort --- arch/arm64/kvm/pkvm.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/pkvm.c b/arch/arm64/kvm/pkvm.c index 1cff760b8f23..10b899483d43 100644 --- a/arch/arm64/kvm/pkvm.c +++ b/arch/arm64/kvm/pkvm.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -21,6 +22,9 @@ #include #include +#include +#include + #include "hyp_constants.h" DEFINE_STATIC_KEY_FALSE(kvm_protected_mode_initialized); @@ -682,7 +686,11 @@ int __init pkvm_load_early_modules(void) { char *token, *buf = early_pkvm_modules; char *module_path = CONFIG_PKVM_MODULE_PATH; - int err; + int err = init_mount("proc", "/proc", "proc", + MS_SILENT | MS_NOEXEC | MS_NOSUID, NULL); + + if (err) + return err; while (true) { token = strsep(&buf, ","); From b3ccd8f0926ecb72b4c96e05a8dd5af6eeff578f Mon Sep 17 00:00:00 2001 From: Vinayak Yadawad Date: Fri, 22 Sep 2023 14:55:51 +0530 Subject: [PATCH 41/46] BACKPORT: wifi: cfg80211: OWE DH IE handling offload Introduce new feature flags for OWE offload that driver can advertise to indicate kernel/application space to avoid DH IE handling. When this flag is advertised, the driver/device will take care of DH IE inclusion and processing of peer DH IE to generate PMK. Signed-off-by: Vinayak Yadawad Link: https://lore.kernel.org/r/f891cce4b52c939dfc6b71bb2f73e560e8cad287.1695374530.git.vinayak.yadawad@broadcom.com Signed-off-by: Johannes Berg Bug: 301410304 (cherry picked from commit 5482c0a28b2634e7a7d8ddaca7feac183e74b528) [chenpaul: use reserved fields instead of adding new one] Signed-off-by: Paul Chen Change-Id: I8322e53b74d995471411967aba846a2b712e5d85 --- include/uapi/linux/nl80211.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 8fc5fc92adde..f3af16ce1f64 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -334,6 +334,15 @@ * use %NL80211_CMD_START_AP or similar functions. */ +/** + * DOC: OWE DH IE handling offload + * + * By setting @NL80211_EXT_FEATURE_OWE_OFFLOAD flag, drivers can indicate + * kernel/application space to avoid DH IE handling. When this flag is + * advertised, the driver/device will take care of DH IE inclusion and + * processing of peer DH IE to generate PMK. + */ + /** * enum nl80211_commands - supported nl80211 commands * @@ -6434,6 +6443,12 @@ enum nl80211_feature_flags { * in authentication and deauthentication frames sent to unassociated peer * using @NL80211_CMD_FRAME. * + * @NL80211_EXT_FEATURE_OWE_OFFLOAD: Driver/Device wants to do OWE DH IE + * handling in station mode. + * + * @NL80211_EXT_FEATURE_OWE_OFFLOAD_AP: Driver/Device wants to do OWE DH IE + * handling in AP mode. + * * @NUM_NL80211_EXT_FEATURES: number of extended features. * @MAX_NL80211_EXT_FEATURES: highest extended feature index. */ @@ -6505,8 +6520,8 @@ enum nl80211_ext_feature_index { NL80211_EXT_FEATURE_PUNCT, NL80211_EXT_FEATURE_SECURE_NAN, NL80211_EXT_FEATURE_AUTH_AND_DEAUTH_RANDOM_TA, - NL80211_EXT_FEATURE_ANDROID_KABI_RESERVED_1, - NL80211_EXT_FEATURE_ANDROID_KABI_RESERVED_2, + NL80211_EXT_FEATURE_OWE_OFFLOAD, + NL80211_EXT_FEATURE_OWE_OFFLOAD_AP, NL80211_EXT_FEATURE_ANDROID_KABI_RESERVED_3, NL80211_EXT_FEATURE_ANDROID_KABI_RESERVED_4, NL80211_EXT_FEATURE_ANDROID_KABI_RESERVED_5, From 8f46c34931781e92d02eca56f64304e30a66dca5 Mon Sep 17 00:00:00 2001 From: Vinayak Yadawad Date: Tue, 26 Sep 2023 16:02:22 +0530 Subject: [PATCH 42/46] BACKPORT: wifi: cfg80211: Allow AP/P2PGO to indicate port authorization to peer STA/P2PClient In 4way handshake offload, cfg80211_port_authorized enables driver to indicate successful 4way handshake to cfg80211 layer. Currently this path of port authorization is restricted to interface type NL80211_IFTYPE_STATION and NL80211_IFTYPE_P2P_CLIENT. This patch extends the support for NL80211_IFTYPE_AP and NL80211_IFTYPE_P2P_GO interfaces to authorize peer STA/P2P_CLIENT, whenever authentication is offloaded on the AP/P2P_GO interface. Signed-off-by: Vinayak Yadawad Link: https://lore.kernel.org/r/dee3b0a2b4f617e932c90bff4504a89389273632.1695721435.git.vinayak.yadawad@broadcom.com Signed-off-by: Johannes Berg Bug: 301410304 (cherry picked from commit e4e7e3af73694380f0d9a742d13b80598a3393e9) [chenpaul: adjust the format by checkpatch] Signed-off-by: Paul Chen Change-Id: Id9704d7b412396f45e888895e42ba161ecb0ab56 --- include/net/cfg80211.h | 8 ++++++-- net/wireless/core.h | 4 ++-- net/wireless/nl80211.c | 4 ++-- net/wireless/nl80211.h | 5 ++++- net/wireless/sme.c | 25 +++++++++++++++---------- net/wireless/util.c | 2 +- 6 files changed, 30 insertions(+), 18 deletions(-) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 006bc4e510af..8232909606b5 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -7782,7 +7782,8 @@ void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info, * cfg80211_port_authorized - notify cfg80211 of successful security association * * @dev: network device - * @bssid: the BSSID of the AP + * @peer_addr: BSSID of the AP/P2P GO in case of STA/GC or STA/GC MAC address + * in case of AP/P2P GO * @td_bitmap: transition disable policy * @td_bitmap_len: Length of transition disable policy * @gfp: allocation flags @@ -7793,8 +7794,11 @@ void cfg80211_roamed(struct net_device *dev, struct cfg80211_roam_info *info, * should be preceded with a call to cfg80211_connect_result(), * cfg80211_connect_done(), cfg80211_connect_bss() or cfg80211_roamed() to * indicate the 802.11 association. + * This function can also be called by AP/P2P GO driver that supports + * authentication offload. In this case the peer_mac passed is that of + * associated STA/GC. */ -void cfg80211_port_authorized(struct net_device *dev, const u8 *bssid, +void cfg80211_port_authorized(struct net_device *dev, const u8 *peer_addr, const u8* td_bitmap, u8 td_bitmap_len, gfp_t gfp); /** diff --git a/net/wireless/core.h b/net/wireless/core.h index af85d8909935..2622541c6bf7 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h @@ -270,7 +270,7 @@ struct cfg80211_event { struct ieee80211_channel *channel; } ij; struct { - u8 bssid[ETH_ALEN]; + u8 peer_addr[ETH_ALEN]; const u8 *td_bitmap; u8 td_bitmap_len; } pa; @@ -411,7 +411,7 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev, bool wextev); void __cfg80211_roamed(struct wireless_dev *wdev, struct cfg80211_roam_info *info); -void __cfg80211_port_authorized(struct wireless_dev *wdev, const u8 *bssid, +void __cfg80211_port_authorized(struct wireless_dev *wdev, const u8 *peer_addr, const u8 *td_bitmap, u8 td_bitmap_len); int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev); diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 1fcc9c904850..41733fa11a81 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -18019,7 +18019,7 @@ void nl80211_send_roamed(struct cfg80211_registered_device *rdev, } void nl80211_send_port_authorized(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, + struct net_device *netdev, const u8 *peer_addr, const u8 *td_bitmap, u8 td_bitmap_len) { struct sk_buff *msg; @@ -18037,7 +18037,7 @@ void nl80211_send_port_authorized(struct cfg80211_registered_device *rdev, if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) || - nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid)) + nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, peer_addr)) goto nla_put_failure; if ((td_bitmap_len > 0) && td_bitmap) diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h index 0278d817bb02..e1faa5a26a52 100644 --- a/net/wireless/nl80211.h +++ b/net/wireless/nl80211.h @@ -82,8 +82,11 @@ void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, void nl80211_send_roamed(struct cfg80211_registered_device *rdev, struct net_device *netdev, struct cfg80211_roam_info *info, gfp_t gfp); +/* For STA/GC, indicate port authorized with AP/GO bssid. + * For GO/AP, use peer GC/STA mac_addr. + */ void nl80211_send_port_authorized(struct cfg80211_registered_device *rdev, - struct net_device *netdev, const u8 *bssid, + struct net_device *netdev, const u8 *peer_addr, const u8 *td_bitmap, u8 td_bitmap_len); void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, struct net_device *netdev, u16 reason, diff --git a/net/wireless/sme.c b/net/wireless/sme.c index ce1ac01705f9..902e68fdc450 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c @@ -1280,24 +1280,29 @@ out: } EXPORT_SYMBOL(cfg80211_roamed); -void __cfg80211_port_authorized(struct wireless_dev *wdev, const u8 *bssid, - const u8 *td_bitmap, u8 td_bitmap_len) +void __cfg80211_port_authorized(struct wireless_dev *wdev, const u8 *peer_addr, + const u8 *td_bitmap, u8 td_bitmap_len) { ASSERT_WDEV_LOCK(wdev); if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && - wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) + wdev->iftype != NL80211_IFTYPE_P2P_CLIENT && + wdev->iftype != NL80211_IFTYPE_AP && + wdev->iftype != NL80211_IFTYPE_P2P_GO)) return; - if (WARN_ON(!wdev->connected) || - WARN_ON(!ether_addr_equal(wdev->u.client.connected_addr, bssid))) - return; + if (wdev->iftype == NL80211_IFTYPE_STATION || + wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) { + if (WARN_ON(!wdev->connected) || + WARN_ON(!ether_addr_equal(wdev->u.client.connected_addr, peer_addr))) + return; + } nl80211_send_port_authorized(wiphy_to_rdev(wdev->wiphy), wdev->netdev, - bssid, td_bitmap, td_bitmap_len); + peer_addr, td_bitmap, td_bitmap_len); } -void cfg80211_port_authorized(struct net_device *dev, const u8 *bssid, +void cfg80211_port_authorized(struct net_device *dev, const u8 *peer_addr, const u8 *td_bitmap, u8 td_bitmap_len, gfp_t gfp) { struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -1305,7 +1310,7 @@ void cfg80211_port_authorized(struct net_device *dev, const u8 *bssid, struct cfg80211_event *ev; unsigned long flags; - if (WARN_ON(!bssid)) + if (WARN_ON(!peer_addr)) return; ev = kzalloc(sizeof(*ev) + td_bitmap_len, gfp); @@ -1313,7 +1318,7 @@ void cfg80211_port_authorized(struct net_device *dev, const u8 *bssid, return; ev->type = EVENT_PORT_AUTHORIZED; - memcpy(ev->pa.bssid, bssid, ETH_ALEN); + memcpy(ev->pa.peer_addr, peer_addr, ETH_ALEN); ev->pa.td_bitmap = ((u8 *)ev) + sizeof(*ev); ev->pa.td_bitmap_len = td_bitmap_len; memcpy((void *)ev->pa.td_bitmap, td_bitmap, td_bitmap_len); diff --git a/net/wireless/util.c b/net/wireless/util.c index 8f403f9fe816..3e39b2e7ba8b 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c @@ -990,7 +990,7 @@ void cfg80211_process_wdev_events(struct wireless_dev *wdev) __cfg80211_leave(wiphy_to_rdev(wdev->wiphy), wdev); break; case EVENT_PORT_AUTHORIZED: - __cfg80211_port_authorized(wdev, ev->pa.bssid, + __cfg80211_port_authorized(wdev, ev->pa.peer_addr, ev->pa.td_bitmap, ev->pa.td_bitmap_len); break; From 94ddfc9ce42f93041d76dfa452a2e635b8734c9a Mon Sep 17 00:00:00 2001 From: Peter Wang Date: Thu, 16 Nov 2023 17:12:28 +0800 Subject: [PATCH 43/46] FROMLIST: ufs: core: clear cmd if abort success in mcq mode In mcq mode, if cmd is pending in device and abort success, response will not return from device. So we need clear this cmd right now, else command timeout happen and next time use same tag will have warning. WARN_ON(lrbp->cmd). Below is error log: <3>[ 2277.447611][T21376] ufshcd-mtk 112b0000.ufshci: ufshcd_try_to_abort_task: cmd pending in the device. tag = 7 <3>[ 2277.476954][T21376] ufshcd-mtk 112b0000.ufshci: Aborting tag 7 / CDB 0x2a succeeded <6>[ 2307.551263][T30974] ufshcd-mtk 112b0000.ufshci: ufshcd_abort: Device abort task at tag 7 <4>[ 2307.623264][ T327] WARNING: CPU: 5 PID: 327 at source/drivers/ufs/core/ufshcd.c:3021 ufshcd_queuecommand+0x66c/0xe34 Bug: 311330965 Link: https://lore.kernel.org/all/20231115131024.15829-1-peter.wang@mediatek.com/ [Peter: Resolved minor conflict in drivers/ufs/core/ufshcd.c ] Change-Id: I8e5ed6774a68faa4a663cc602dac56faf5e3317c Signed-off-by: Peter Wang --- drivers/ufs/core/ufshcd.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 5e62600d74a5..c25c0a598a30 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -6484,6 +6484,8 @@ static bool ufshcd_abort_all(struct ufs_hba *hba) if (is_mcq_enabled(hba)) { struct ufshcd_lrb *lrbp; int tag; + struct ufs_hw_queue *hwq; + unsigned long flags; for (tag = 0; tag < hba->nutrs; tag++) { lrbp = &hba->lrb[tag]; @@ -6497,6 +6499,11 @@ static bool ufshcd_abort_all(struct ufs_hba *hba) needs_reset = true; goto out; } + hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(lrbp->cmd)); + spin_lock_irqsave(&hwq->cq_lock, flags); + if (ufshcd_cmd_inflight(lrbp->cmd)) + ufshcd_release_scsi_cmd(hba, lrbp); + spin_unlock_irqrestore(&hwq->cq_lock, flags); } } else { /* Clear pending transfer requests */ From 5c8e593916ad29763e34d609b6a8c7fe9293368f Mon Sep 17 00:00:00 2001 From: Claire Chang Date: Wed, 22 Nov 2023 13:53:07 +0800 Subject: [PATCH 44/46] ANDROID: Update the ABI symbol list Adding the following symbols: - anon_inode_getfile Bug: 312619042 Change-Id: I48be67c5fcaf441ad74793ab7e02b39ca284d528 Signed-off-by: Claire Chang --- android/abi_gki_aarch64_pixel | 1 + 1 file changed, 1 insertion(+) diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index cfa79ec5b51a..9909f57ce909 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -26,6 +26,7 @@ amba_driver_unregister android_rvh_probe_register anon_inode_getfd + anon_inode_getfile arc4_crypt arc4_setkey __arch_clear_user From 95307ec5c864e39b7e1ad26eff3e98b06850b4d3 Mon Sep 17 00:00:00 2001 From: Robin Murphy Date: Wed, 15 Nov 2023 18:25:44 +0000 Subject: [PATCH 45/46] FROMLIST: iommu: Avoid more races around device probe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It turns out there are more subtle races beyond just the main part of __iommu_probe_device() itself running in parallel - the dev_iommu_free() on the way out of an unsuccessful probe can still manage to trip up concurrent accesses to a device's fwspec. Thus, extend the scope of iommu_probe_device_lock() to also serialise fwspec creation and initial retrieval. Reported-by: Zhenhua Huang Link: https://lore.kernel.org/linux-iommu/e2e20e1c-6450-4ac5-9804-b0000acdf7de@quicinc.com/ Fixes: 01657bc14a39 ("iommu: Avoid races around device probe") Signed-off-by: Robin Murphy Bug: 308940593 Link: https://lore.kernel.org/all/16f433658661d7cadfea51e7c65da95826112a2b.1700071477.git.robin.murphy@arm.com/ Change-Id: I461df05b03644cb93bc93599cb9f5464bf893923 Signed-off-by: André Draszik --- drivers/acpi/scan.c | 7 ++++++- drivers/iommu/iommu.c | 16 +++++++++------- drivers/iommu/of_iommu.c | 12 +++++++++--- include/linux/iommu.h | 1 + 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index dbfa58e799e2..609d263b230a 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -1563,17 +1563,22 @@ static const struct iommu_ops *acpi_iommu_configure_id(struct device *dev, int err; const struct iommu_ops *ops; + /* Serialise to make dev->iommu stable under our potential fwspec */ + mutex_lock(&iommu_probe_device_lock); /* * If we already translated the fwspec there is nothing left to do, * return the iommu_ops. */ ops = acpi_iommu_fwspec_ops(dev); - if (ops) + if (ops) { + mutex_unlock(&iommu_probe_device_lock); return ops; + } err = iort_iommu_configure_id(dev, id_in); if (err && err != -EPROBE_DEFER) err = viot_iommu_configure(dev); + mutex_unlock(&iommu_probe_device_lock); /* * If we have reason to believe the IOMMU driver missed the initial diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 2f789f12c38c..0d3fce6596af 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -308,12 +308,13 @@ static u32 dev_iommu_get_max_pasids(struct device *dev) return min_t(u32, max_pasids, dev->iommu->iommu_dev->max_pasids); } +DEFINE_MUTEX(iommu_probe_device_lock); + static int __iommu_probe_device(struct device *dev, struct list_head *group_list) { const struct iommu_ops *ops = dev->bus->iommu_ops; struct iommu_device *iommu_dev; struct iommu_group *group; - static DEFINE_MUTEX(iommu_probe_device_lock); int ret; if (!ops) @@ -325,10 +326,10 @@ static int __iommu_probe_device(struct device *dev, struct list_head *group_list * probably be able to use device_lock() here to minimise the scope, * but for now enforcing a simple global ordering is fine. */ - mutex_lock(&iommu_probe_device_lock); + lockdep_assert_held(&iommu_probe_device_lock); if (!dev_iommu_get(dev)) { ret = -ENOMEM; - goto err_unlock; + goto err_out; } if (!try_module_get(ops->owner)) { @@ -357,7 +358,6 @@ static int __iommu_probe_device(struct device *dev, struct list_head *group_list mutex_unlock(&group->mutex); iommu_group_put(group); - mutex_unlock(&iommu_probe_device_lock); iommu_device_link(iommu_dev, dev); return 0; @@ -372,9 +372,7 @@ out_module_put: err_free: dev_iommu_free(dev); -err_unlock: - mutex_unlock(&iommu_probe_device_lock); - +err_out: return ret; } @@ -384,7 +382,9 @@ int iommu_probe_device(struct device *dev) struct iommu_group *group; int ret; + mutex_lock(&iommu_probe_device_lock); ret = __iommu_probe_device(dev, NULL); + mutex_unlock(&iommu_probe_device_lock); if (ret) goto err_out; @@ -1716,7 +1716,9 @@ static int probe_iommu_group(struct device *dev, void *data) return 0; } + mutex_lock(&iommu_probe_device_lock); ret = __iommu_probe_device(dev, group_list); + mutex_unlock(&iommu_probe_device_lock); if (ret == -ENODEV) ret = 0; diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c index da271c5596fb..47bf96fc0c45 100644 --- a/drivers/iommu/of_iommu.c +++ b/drivers/iommu/of_iommu.c @@ -113,16 +113,20 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, const u32 *id) { const struct iommu_ops *ops = NULL; - struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev); + struct iommu_fwspec *fwspec; int err = NO_IOMMU; if (!master_np) return NULL; + /* Serialise to make dev->iommu stable under our potential fwspec */ + mutex_lock(&iommu_probe_device_lock); + fwspec = dev_iommu_fwspec_get(dev); if (fwspec) { - if (fwspec->ops) + if (fwspec->ops) { + mutex_unlock(&iommu_probe_device_lock); return fwspec->ops; - + } /* In the deferred case, start again from scratch */ iommu_fwspec_free(dev); } @@ -156,6 +160,8 @@ const struct iommu_ops *of_iommu_configure(struct device *dev, fwspec = dev_iommu_fwspec_get(dev); ops = fwspec->ops; } + mutex_unlock(&iommu_probe_device_lock); + /* * If we have reason to believe the IOMMU driver missed the initial * probe for dev, replay it to get things in order. diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 9ff1310db24b..eec008e89c32 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -689,6 +689,7 @@ static inline void dev_iommu_priv_set(struct device *dev, void *priv) dev->iommu->priv = priv; } +extern struct mutex iommu_probe_device_lock; int iommu_probe_device(struct device *dev); void iommu_release_device(struct device *dev); From d2c0f4c4502aedbe88b32fbddf7632c79d55d33c Mon Sep 17 00:00:00 2001 From: Mukesh Ojha Date: Tue, 7 Nov 2023 16:33:46 +0530 Subject: [PATCH 46/46] FROMLIST: devcoredump: Send uevent once devcd is ready dev_coredumpm() creates a devcoredump device and adds it to the core kernel framework which eventually end up sending uevent to the user space and later creates a symbolic link to the failed device. An application running in userspace may be interested in this symbolic link to get the name of the failed device. In a issue scenario, once uevent sent to the user space it start reading '/sys/class/devcoredump/devcdX/failing_device' to get the actual name of the device which might not been created and it is in its path of creation. To fix this, suppress sending uevent till the failing device symbolic link gets created and send uevent once symbolic link is created successfully. Bug: 311580372 Link: https://lore.kernel.org/lkml/1700232572-25823-1-git-send-email-quic_mojha@quicinc.com Change-Id: Iee739e29492056df9d664ef2294a7e0cdcc4458e Fixes: 833c95456a70 ("device coredump: add new device coredump class") Signed-off-by: Mukesh Ojha Cc: stable@vger.kernel.org Signed-off-by: Naman Jain --- drivers/base/devcoredump.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c index 1c06781f7114..f3bd9f104bd1 100644 --- a/drivers/base/devcoredump.c +++ b/drivers/base/devcoredump.c @@ -363,6 +363,7 @@ void dev_coredumpm(struct device *dev, struct module *owner, devcd->devcd_dev.class = &devcd_class; mutex_lock(&devcd->mutex); + dev_set_uevent_suppress(&devcd->devcd_dev, true); if (device_add(&devcd->devcd_dev)) goto put_device; @@ -377,6 +378,8 @@ void dev_coredumpm(struct device *dev, struct module *owner, "devcoredump")) dev_warn(dev, "devcoredump create_link failed\n"); + dev_set_uevent_suppress(&devcd->devcd_dev, false); + kobject_uevent(&devcd->devcd_dev.kobj, KOBJ_ADD); INIT_DELAYED_WORK(&devcd->del_wk, devcd_del); schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT); mutex_unlock(&devcd->mutex);