From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752258AbdJKOEv (ORCPT ); Wed, 11 Oct 2017 10:04:51 -0400 Received: from 20pmail.ess.barracuda.com ([64.235.154.233]:46469 "EHLO 20pmail.ess.barracuda.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751691AbdJKOEu (ORCPT ); Wed, 11 Oct 2017 10:04:50 -0400 From: Matt Redfearn To: Thomas Gleixner , Daniel Lezcano CC: , Matt Redfearn , Subject: [PATCH 2/3] clocksource/mips-gic-timer: Ensure IRQs disabled for read-update-write Date: Wed, 11 Oct 2017 15:01:13 +0100 Message-ID: <1507730474-8577-2-git-send-email-matt.redfearn@mips.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1507730474-8577-1-git-send-email-matt.redfearn@mips.com> References: <1507730474-8577-1-git-send-email-matt.redfearn@mips.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.150.130.83] X-BESS-ID: 1507730617-321459-28167-997-6 X-BESS-VER: 2017.12-r1709122024 X-BESS-Apparent-Source-IP: 12.201.5.28 X-BESS-Outbound-Spam-Score: 0.00 X-BESS-Outbound-Spam-Report: Code version 3.2, rules version 3.2.2.185890 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------- 0.00 BSF_BESS_OUTBOUND META: BESS Outbound X-BESS-Outbound-Spam-Status: SCORE=0.00 using account:ESS59374 scores of KILL_LEVEL=7.0 tests=BSF_BESS_OUTBOUND X-BESS-BRTS-Status: 1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The sequence of reading the current count, adding an offset and writing back to the compare register is timing critical. Commit e07127a077c7 ("clocksource: mips-gic-timer: Use new GIC accessor functions") added a local_irq_save / local_irq_restore to protect the mapping of another VPs registers through the VP redirect region, but given the timing critical nature of this code it just feels right to protect the whole read-update-write section, so move the local_irq_save before the current count is read. Signed-off-by: Matt Redfearn --- drivers/clocksource/mips-gic-timer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/clocksource/mips-gic-timer.c b/drivers/clocksource/mips-gic-timer.c index 6c94a74682a2..dadac9f3e9c4 100644 --- a/drivers/clocksource/mips-gic-timer.c +++ b/drivers/clocksource/mips-gic-timer.c @@ -43,9 +43,9 @@ static int gic_next_event(unsigned long delta, struct clock_event_device *evt) u64 cnt; int res; + local_irq_save(flags); cnt = gic_read_count(); cnt += (u64)delta; - local_irq_save(flags); write_gic_vl_other(mips_cm_vp_id(cpumask_first(evt->cpumask))); write_gic_vo_compare(cnt); local_irq_restore(flags); -- 2.7.4