{"push_id":1905705785,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"9c34fb0ca9f65cc685e17e58e2def7562fba4732","before":"35c545937cfef98e5d5f2b3e4094e62700269a1c","commits":[{"sha":"9c34fb0ca9f65cc685e17e58e2def7562fba4732","author":{"name":"Veena Sambasivan","email":"f3dea2712a9835ef757537fe50b353b17bceb98a@codeaurora.org"},"message":"perf: arm64: fix RCU usage on pmu resume from low-power\n\nCommit ( perf: arm64: implement CPU_PM notifier)\nadded code in the arm perf infrastructure that allows the kernel to\nsave/restore perf counters whenever the CPU enters a low-power\nstate. The kernel saves/restores the counters for each active event\nthrough the armpmu_{stop/start} ARM pmu API, so that the low-power state\nenter/exit cycle is emulated through pmu start/stop operations for each\nevent in use.\n\nHowever, calling armpmu_start() for each active event on power up\nexecutes code that requires RCU locking (perf_event_update_userpage())\nto be functional, so, given that the core may call the CPU_PM notifiers\nwhile running the idle thread in an quiescent RCU state this is not\nallowed as detected through the following splat when kernel is run with\nCONFIG_PROVE_LOCKING enabled:\n\n[   49.293286]\n[   49.294761] ===============================\n[   49.298895] [ INFO: suspicious RCU usage. ]\n[   49.303031] 4.6.0-rc3+ #421 Not tainted\n[   49.306821] -------------------------------\n[   49.310956] include/linux/rcupdate.h:872 rcu_read_lock() used\nillegally while idle!\n[   49.318530]\n[   49.318530] other info that might help us debug this:\n[   49.318530]\n[   49.326451]\n[   49.326451] RCU used illegally from idle CPU!\n[   49.326451] rcu_scheduler_active = 1, debug_locks = 0\n[   49.337209] RCU used illegally from extended quiescent state!\n[   49.342892] 2 locks held by swapper/2/0:\n[   49.346768]  #0:  (cpu_pm_notifier_lock){......}, at:\n[<ffffff8008163c28>] cpu_pm_exit+0x18/0x80\n[   49.355492]  #1:  (rcu_read_lock){......}, at: [<ffffff800816dc38>]\nperf_event_update_userpage+0x0/0x260\n\nThis patch wraps the armpmu_start() call (that indirectly calls\nperf_event_update_userpage()) on CPU_PM notifier power state exit (or\nfailed entry) within the RCU_NONIDLE() macro so that the RCU subsystem\nis made aware the calling cpu is not idle from an RCU perspective for\nthe armpmu_start() call duration, therefore fixing the issue.\n\n(cherry-picked from angler kernel)\nBug: 30839193\n\nChange-Id: I931833bc800d072eea17cf0ac5cd39a33af719c3","distinct":true,"url":"https://api.github.com/repos/mawrick26/S7E-N4/commits/9c34fb0ca9f65cc685e17e58e2def7562fba4732"}]}
{"actor":{"display_login":"mawrick26"}}