Commit a7dc19b8652c862d5b7c4d2339bd3c428bd29c4a
Committed by
Thomas Gleixner
1 parent
6dbe51c251
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
clockevents: Don't allow dummy broadcast timers
Currently tick_check_broadcast_device doesn't reject clock_event_devices with CLOCK_EVT_FEAT_DUMMY, and may select them in preference to real hardware if they have a higher rating value. In this situation, the dummy timer is responsible for broadcasting to itself, and the core clockevents code may attempt to call non-existent callbacks for programming the dummy, eventually leading to a panic. This patch makes tick_check_broadcast_device always reject dummy timers, preventing this problem. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Cc: linux-arm-kernel@lists.infradead.org Cc: Jon Medhurst (Tixy) <tixy@linaro.org> Cc: stable@vger.kernel.org Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Showing 1 changed file with 2 additions and 1 deletions Side-by-side Diff
kernel/time/tick-broadcast.c
... | ... | @@ -67,7 +67,8 @@ |
67 | 67 | */ |
68 | 68 | int tick_check_broadcast_device(struct clock_event_device *dev) |
69 | 69 | { |
70 | - if ((tick_broadcast_device.evtdev && | |
70 | + if ((dev->features & CLOCK_EVT_FEAT_DUMMY) || | |
71 | + (tick_broadcast_device.evtdev && | |
71 | 72 | tick_broadcast_device.evtdev->rating >= dev->rating) || |
72 | 73 | (dev->features & CLOCK_EVT_FEAT_C3STOP)) |
73 | 74 | return 0; |