Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp7227426imu; Thu, 31 Jan 2019 07:02:52 -0800 (PST) X-Google-Smtp-Source: ALg8bN5ln/+EH/CVhOFwyt6ZVPBf1Xyg2efQ+MeeiYZwJlNe+wRtIed/oWX5Vi2wFkoR1zNcT+fN X-Received: by 2002:a17:902:8607:: with SMTP id f7mr34251768plo.123.1548946972829; Thu, 31 Jan 2019 07:02:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548946972; cv=none; d=google.com; s=arc-20160816; b=Bg+WaMfCfuLMKYoviLU8XJNfwh1MZftO7GjbbIL1AOvZJm14ZkEpATzT2v7tGaUpPF fPvXn/FiRYJ1Tksv0C5cpoS+7v+HMpqkG7Cz2jveopO1XQCE8gHYwlwJnfJlTCYg+URC frJeCZkzgGNG24KK6mzxNDO5CEJP5Tyv21poRQdQWxyCMdGPriHDGvP+yWkJbcAe5gVw ENiLU5vGS8eCHDwId2qPJJqnaAg9N8JcBHKweeuvFMyeUp4XXuHyjhFIqeVQScnybenG ghRYRSbVsqWzMF/1OlN1+h0buHG/kl4KoGhNkq0Dk0cZGbYLCwoDSSVh8MTQd9eE6ih9 nO7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=lwCT6AJySXy1/0+AeTL0z3O2pPPJwDO3cbM5kqHzsOg=; b=SZ5y+mvzoO8oQ45KeXFgt4twXjDo0b40IkmX6P06IRBlr/b9IGCByFBkdFSLlpNq8A +4ZOa8OLWsMFrVI+ZDy+syDIk8VYr31uHpmOH1SU+VY00de1tocEu2xFFLp9VeTTMuPk PIKb/JFYWVWtnOCekLgV4ZAa2qwPYL+LfCGSZqkSnqSCmqWFinYJq+gXP3IWJNOOGYyK hRE50wszkjNNuwIMfC4LU6etxV57Wzi5ZUv+72j5Kr06mOvMaDIAk7QNGGZASOX93wcu MBu6TGyBTUmmLdvFs/gJXtzr+P2pdGYqOLa3nzq7rG6UNA3KpL5fm9CIyHK6HlMYSR8Q oaHA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a90si2166720plc.314.2019.01.31.07.02.36; Thu, 31 Jan 2019 07:02:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387501AbfAaPAL (ORCPT + 99 others); Thu, 31 Jan 2019 10:00:11 -0500 Received: from foss.arm.com ([217.140.101.70]:45760 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731754AbfAaPAL (ORCPT ); Thu, 31 Jan 2019 10:00:11 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C66E91684; Thu, 31 Jan 2019 07:00:10 -0800 (PST) Received: from e112298-lin.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.72.51.249]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id CDE0A3F59C; Thu, 31 Jan 2019 07:00:08 -0800 (PST) From: Julien Thierry To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, daniel.thompson@linaro.org, joel@joelfernandes.org, marc.zyngier@arm.com, christoffer.dall@arm.com, james.morse@arm.com, catalin.marinas@arm.com, will.deacon@arm.com, mark.rutland@arm.com, Julien Thierry Subject: [PATCH v10 23/25] arm64: Skip preemption when exiting an NMI Date: Thu, 31 Jan 2019 14:59:01 +0000 Message-Id: <1548946743-38979-24-git-send-email-julien.thierry@arm.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1548946743-38979-1-git-send-email-julien.thierry@arm.com> References: <1548946743-38979-1-git-send-email-julien.thierry@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Handling of an NMI should not set any TIF flags. For NMIs received from EL0 the current exit path is safe to use. However, an NMI received at EL1 could have interrupted some task context that has set the TIF_NEED_RESCHED flag. Preempting a task should not happen as a result of an NMI. Skip preemption after handling an NMI from EL1. Signed-off-by: Julien Thierry Acked-by: Marc Zyngier Cc: Catalin Marinas Cc: Will Deacon Cc: Marc Zyngier --- arch/arm64/kernel/entry.S | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S index 35a47f6..acf1250 100644 --- a/arch/arm64/kernel/entry.S +++ b/arch/arm64/kernel/entry.S @@ -624,7 +624,15 @@ el1_irq: #ifdef CONFIG_PREEMPT ldr x24, [tsk, #TSK_TI_PREEMPT] // get preempt count - cbnz x24, 1f // preempt count != 0 +alternative_if ARM64_HAS_IRQ_PRIO_MASKING + /* + * DA_F were cleared at start of handling. If anything is set in DAIF, + * we come back from an NMI, so skip preemption + */ + mrs x0, daif + orr x24, x24, x0 +alternative_else_nop_endif + cbnz x24, 1f // preempt count != 0 || NMI return path bl el1_preempt 1: #endif -- 1.9.1