tag | 9193b65cfbe1d5f8427904678fa050497962a451 | |
---|---|---|
tagger | Howard Chen <howardsoc@google.com> | Fri Apr 14 12:04:21 2023 +0800 |
object | ae16e9c4dc548396d1de62e1bea1e132cdbf7f35 |
android13-5.15 February 2023 release 4 Artifacts: https://ci.android.com/builds/submitted/9935970/kernel_aarch64/latest
commit | ae16e9c4dc548396d1de62e1bea1e132cdbf7f35 | [log] [tgz] |
---|---|---|
author | Victor Hassan <victor@allwinnertech.com> | Wed Apr 12 11:35:14 2023 +0800 |
committer | Yu Liu <liuyu@allwinnertech.com> | Thu Apr 13 09:47:19 2023 +0000 |
tree | bb2e0a69bbcde3841ab9933ab76b6d276f439d02 | |
parent | fe86c885b0db51c8c67a44b5c17650377a2055e8 [diff] |
FROMLIST: [PATCH v2] tick/broadcast: Do not set oneshot_mask except was_periodic was true If a broadcast timer is registered after the system switched to oneshot mode, a hang_task err could occur like that: INFO: task kworker/u15:0:7 blocked for more than 120 seconds. Tainted: G E 5.15.41-android13-8-00002-xxx #1 "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. task:kworker/u16:0 state:D stack: 9808 pid: 7 ppid: 2 flags:0x00000008 Workqueue: events_unbound deferred_probe_work_func.cfi_jt Call trace: __switch_to+0y240/0x490 __schedule+0x620/0xafc schedule+0x110/0x204 schedule_hrtimeout_range_clock+0x9c/0x118 usleep_range_state+0x150/0x1ac _regulator_do_enable+0x528/0x878 set_machine_constraints+0x6a0/0xf2c regulator_register+0x3ac/0x7ac devm_regulator_register+0xbc/0x120 pmu_ext_regulator_probe+0xb0/0x1b4 [pmu_ext_regulator] platform_probe+0x70/0x194 really_probe+0x320/0x68c __driver_probe_device+0x204/0x260 driver_probe_device+0x48/0x1e0 When the new broadcast timer was registered after the system switched to oneshot mode, the broadcast timer was not used as periodic. If the oneshot mask was set incorrectly, all cores which did not enter cpu_idle state can't enter cpu_idle normally, causing the hrtimer mechanism to break. Like: * CPU 1 stop its tick, next event is in one hour. It calls tick_broadcast_enter() and goes to sleep. * CPU 1 gets an interrupt that enqueues a new timer expiring in the next jiffy (note it's not yet actually programmed in the tick device) * CPU 1 call tick_broadcast_exit(). * CPU 0 registers new broadcast device and sets CPU 1 in tick_broadcast_oneshot_mask * CPU 0 runs the broadcast callback, sees that the next timer for CPU 1 is in one hour (because the recently enqueued timer for CPU 1 hasn't been programmed yet), so it programs the broadcast to that 1 hour deadline. * CPU 1 runs tick_nohz_idle_stop_tick() which eventually writes and program dev->next_event to next jiffy * CPU 1 runs into cpuidle_enter_state(), and tick_broadcast_enter() is ignored because the CPU is already in tick_broadcast_oneshot_mask, so the dev->next_event change isn't propagated to broadcast. * CPU 1 goes to sleep for 1 hour. This patch fixes the issue by moving the update action about oneshot mask to a more strict conditions. The tick_broadcast_setup_oneshot would be called in two typical condition, and they all will work. 1. tick_handle_periodic -> tick_broadcast_setup_oneshot The origin broadcast was periodic, so it can set the oneshot_mask bits for those waiting for periodic broadcast and program the broadcast timer to fire. 2. tick_install_broadcast_device -> tick_broadcast_setup_oneshot The origin broadcast was oneshot, so the cores which enter the cpu_idle already used the oneshot_mask bits. It is unnecessary to update the oneshot_mask. Fixes: 9c336c9935cf ("tick/broadcast: Allow late registered device to enter oneshot mode") Reviewed-by: Frederic Weisbecker <frederic@kernel.org> Signed-off-by: Victor Hassan <victor@allwinnertech.com> Bug: 274731061 Bug: 278033842 Link: https://lore.kernel.org/lkml/20230412003425.11323-1-victor@allwinnertech.com/t/ Change-Id: Ie5f27007a701ea483285ba5751ce6251ad8f5da6 Signed-off-by: liuyu <liuyu@allwinnertech.com> (cherry picked from commit ec96f224148a6e6a4e8d462d99e1ac37d7394cea)
BEST: Make all of your changes to upstream Linux. If appropriate, backport to the stable releases. These patches will be merged automatically in the corresponding common kernels. If the patch is already in upstream Linux, post a backport of the patch that conforms to the patch requirements below.
EXPORT_SYMBOL_GPL()
require an in-tree modular driver that uses the symbol -- so include the new driver or changes to an existing driver in the same patchset as the export.LESS GOOD: Develop your patches out-of-tree (from an upstream Linux point-of-view). Unless these are fixing an Android-specific bug, these are very unlikely to be accepted unless they have been coordinated with kernel-team@android.com. If you want to proceed, post a patch that conforms to the patch requirements below.
scripts/checkpatch.pl
UPSTREAM:
, BACKPORT:
, FROMGIT:
, FROMLIST:
, or ANDROID:
.Change-Id:
tag (see https://gerrit-review.googlesource.com/Documentation/user-changeid.html)Bug:
tag.Signed-off-by:
tag by the author and the submitterAdditional requirements are listed below based on patch type
UPSTREAM:
, BACKPORT:
UPSTREAM:
.(cherry picked from commit ...)
lineimportant patch from upstream This is the detailed description of the important patch Signed-off-by: Fred Jones <fred.jones@foo.org>
- then Joe Smith would upload the patch for the common kernel as
UPSTREAM: important patch from upstream This is the detailed description of the important patch Signed-off-by: Fred Jones <fred.jones@foo.org> Bug: 135791357 Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01 (cherry picked from commit c31e73121f4c1ec41143423ac6ce3ce6dafdcec1) Signed-off-by: Joe Smith <joe.smith@foo.org>
BACKPORT:
instead of UPSTREAM:
.UPSTREAM:
(cherry picked from commit ...)
lineBACKPORT: important patch from upstream This is the detailed description of the important patch Signed-off-by: Fred Jones <fred.jones@foo.org> Bug: 135791357 Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01 (cherry picked from commit c31e73121f4c1ec41143423ac6ce3ce6dafdcec1) [joe: Resolved minor conflict in drivers/foo/bar.c ] Signed-off-by: Joe Smith <joe.smith@foo.org>
FROMGIT:
, FROMLIST:
,FROMGIT:
(cherry picked from commit <sha1> <repo> <branch>)
. This must be a stable maintainer branch (not rebased, so don't use linux-next
for example).BACKPORT: FROMGIT:
important patch from upstream This is the detailed description of the important patch Signed-off-by: Fred Jones <fred.jones@foo.org>
- then Joe Smith would upload the patch for the common kernel as
FROMGIT: important patch from upstream This is the detailed description of the important patch Signed-off-by: Fred Jones <fred.jones@foo.org> Bug: 135791357 (cherry picked from commit 878a2fd9de10b03d11d2f622250285c7e63deace https://git.kernel.org/pub/scm/linux/kernel/git/foo/bar.git test-branch) Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01 Signed-off-by: Joe Smith <joe.smith@foo.org>
FROMLIST:
Link:
tag with a link to the submittal on lore.kernel.orgBug:
tag with the Android bug (required for patches not accepted into a maintainer tree)BACKPORT: FROMLIST:
FROMLIST: important patch from upstream This is the detailed description of the important patch Signed-off-by: Fred Jones <fred.jones@foo.org> Bug: 135791357 Link: https://lore.kernel.org/lkml/20190619171517.GA17557@someone.com/ Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01 Signed-off-by: Joe Smith <joe.smith@foo.org>
ANDROID:
ANDROID:
Fixes:
tag that cites the patch with the bugANDROID: fix android-specific bug in foobar.c This is the detailed description of the important fix Fixes: 1234abcd2468 ("foobar: add cool feature") Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01 Signed-off-by: Joe Smith <joe.smith@foo.org>
ANDROID:
Bug:
tag with the Android bug (required for android-specific features)