Commit 5df9d11b authored by Kevin D. Kissell's avatar Kevin D. Kissell Committed by Ralf Baechle

MIPS: SMTC: Fix lockup in smtc_distribute_timer

1. At the end of smtc_distribute_timer, nextstamp is valid and has already
   passed so we goto repeat.
2. Nothing updates nextstamp (only updated if the timeout is in the future
   And we just decided it is in the past)
3. At the end nextstamp still has the same value so it is still valid and
   in the past.
4. This repeats until read_c0_count has a value which causes nextstamp to
   be in the future.

Reported and initial patch and testing  by Mikael Starvik
<mikael.starvik@axis.com>.
Signed-off-by: default avatarKevin D. Kissell <kevink@paralogos.com>
Cc: Mikael Starvik <mikael.starvik@axis.com>
Cc: linux-mips@linux-mips.org
Cc: Jesper Nilsson <Jesper.Nilsson@axis.com>
Patchwork: http://patchwork.linux-mips.org/patch/621/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 1b12a9c8
...@@ -173,11 +173,12 @@ void smtc_distribute_timer(int vpe) ...@@ -173,11 +173,12 @@ void smtc_distribute_timer(int vpe)
unsigned int mtflags; unsigned int mtflags;
int cpu; int cpu;
struct clock_event_device *cd; struct clock_event_device *cd;
unsigned long nextstamp = 0L; unsigned long nextstamp;
unsigned long reference; unsigned long reference;
repeat: repeat:
nextstamp = 0L;
for_each_online_cpu(cpu) { for_each_online_cpu(cpu) {
/* /*
* Find virtual CPUs within the current VPE who have * Find virtual CPUs within the current VPE who have
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment