Browse Source

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: Kevin 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: Ralf Baechle <ralf@linux-mips.org>
Kevin D. Kissell 15 năm trước cách đây
mục cha
commit
5df9d11be4
1 tập tin đã thay đổi với 2 bổ sung1 xóa
  1. 2 1
      arch/mips/kernel/cevt-smtc.c

+ 2 - 1
arch/mips/kernel/cevt-smtc.c

@@ -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