MIPS: sync-r4k: do slave counter synchronization with disabled HW interrupts
authorSergey Korolev <s.korolev@ndmsystems.com>
Wed, 22 Jan 2020 12:39:08 +0000 (15:39 +0300)
committerPaul Burton <paulburton@kernel.org>
Wed, 22 Jan 2020 18:16:18 +0000 (10:16 -0800)
synchronise_count_slave() called with an enabled in mips_clockevent_init()
timer interrupt which may decrease synchronization precision.

Signed-off-by: Sergey Korolev <s.korolev@ndmsystems.com>
Signed-off-by: Paul Burton <paulburton@kernel.org>
Cc: linux-mips@vger.kernel.org
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: James Hogan <jhogan@kernel.org>
Cc: linux-kernel@vger.kernel.org
arch/mips/kernel/sync-r4k.c

index f2973ce..abdd7aa 100644 (file)
@@ -90,6 +90,9 @@ void synchronise_count_master(int cpu)
 void synchronise_count_slave(int cpu)
 {
        int i;
+       unsigned long flags;
+
+       local_irq_save(flags);
 
        /*
         * Not every cpu is online at the time this gets called,
@@ -113,5 +116,7 @@ void synchronise_count_slave(int cpu)
        }
        /* Arrange for an interrupt in a short while */
        write_c0_compare(read_c0_count() + COUNTON);
+
+       local_irq_restore(flags);
 }
 #undef NR_LOOPS