All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Thierry <julien.thierry@arm.com>
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 <julien.thierry@arm.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	linux-efi@vger.kernel.org
Subject: [PATCH v9 11/26] efi: Let architectures decide the flags that should be saved/restored
Date: Mon, 21 Jan 2019 15:33:30 +0000	[thread overview]
Message-ID: <1548084825-8803-12-git-send-email-julien.thierry@arm.com> (raw)
In-Reply-To: <1548084825-8803-1-git-send-email-julien.thierry@arm.com>

Currently, irqflags are saved before calling runtime services and
checked for mismatch on return.

Provide a pair of overridable macros to save and restore (if needed) the
state that need to be preserved on return from a runtime service.
This allows to check for flags that are not necesarly related to
irqflags.

Signed-off-by: Julien Thierry <julien.thierry@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: linux-efi@vger.kernel.org
---
 drivers/firmware/efi/runtime-wrappers.c | 17 +++++++++++++++--
 include/linux/efi.h                     |  5 +++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c
index 8903b9c..2f4b68b 100644
--- a/drivers/firmware/efi/runtime-wrappers.c
+++ b/drivers/firmware/efi/runtime-wrappers.c
@@ -89,11 +89,24 @@
 	efi_rts_work.status;						\
 })
 
+#ifndef arch_efi_save_flags
+#define arch_efi_save_flags(state_flags)	local_save_flags(state_flags)
+#define arch_efi_restore_flags(state_flags)	local_irq_restore(state_flags)
+#endif
+
+inline unsigned long efi_call_virt_save_flags(void)
+{
+	unsigned long flags;
+
+	arch_efi_save_flags(flags);
+	return flags;
+}
+
 void efi_call_virt_check_flags(unsigned long flags, const char *call)
 {
 	unsigned long cur_flags, mismatch;
 
-	local_save_flags(cur_flags);
+	cur_flags = efi_call_virt_save_flags();
 
 	mismatch = flags ^ cur_flags;
 	if (!WARN_ON_ONCE(mismatch & ARCH_EFI_IRQ_FLAGS_MASK))
@@ -102,7 +115,7 @@ void efi_call_virt_check_flags(unsigned long flags, const char *call)
 	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_NOW_UNRELIABLE);
 	pr_err_ratelimited(FW_BUG "IRQ flags corrupted (0x%08lx=>0x%08lx) by EFI %s\n",
 			   flags, cur_flags, call);
-	local_irq_restore(flags);
+	arch_efi_restore_flags(flags);
 }
 
 /*
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 45ff763..bd80b7e 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -1607,6 +1607,7 @@ efi_status_t efi_setup_gop(efi_system_table_t *sys_table_arg,
 
 bool efi_runtime_disabled(void);
 extern void efi_call_virt_check_flags(unsigned long flags, const char *call);
+extern unsigned long efi_call_virt_save_flags(void);
 
 enum efi_secureboot_mode {
 	efi_secureboot_mode_unset,
@@ -1652,7 +1653,7 @@ enum efi_secureboot_mode {
 									\
 	arch_efi_call_virt_setup();					\
 									\
-	local_save_flags(__flags);					\
+	__flags = efi_call_virt_save_flags();				\
 	__s = arch_efi_call_virt(p, f, args);				\
 	efi_call_virt_check_flags(__flags, __stringify(f));		\
 									\
@@ -1667,7 +1668,7 @@ enum efi_secureboot_mode {
 									\
 	arch_efi_call_virt_setup();					\
 									\
-	local_save_flags(__flags);					\
+	__flags = efi_call_virt_save_flags();				\
 	arch_efi_call_virt(p, f, args);					\
 	efi_call_virt_check_flags(__flags, __stringify(f));		\
 									\
-- 
1.9.1


WARNING: multiple messages have this Message-ID (diff)
From: Julien Thierry <julien.thierry@arm.com>
To: linux-arm-kernel@lists.infradead.org
Cc: mark.rutland@arm.com, daniel.thompson@linaro.org,
	linux-efi@vger.kernel.org,
	Julien Thierry <julien.thierry@arm.com>,
	marc.zyngier@arm.com, catalin.marinas@arm.com,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	will.deacon@arm.com, linux-kernel@vger.kernel.org,
	christoffer.dall@arm.com, james.morse@arm.com,
	joel@joelfernandes.org
Subject: [PATCH v9 11/26] efi: Let architectures decide the flags that should be saved/restored
Date: Mon, 21 Jan 2019 15:33:30 +0000	[thread overview]
Message-ID: <1548084825-8803-12-git-send-email-julien.thierry@arm.com> (raw)
In-Reply-To: <1548084825-8803-1-git-send-email-julien.thierry@arm.com>

Currently, irqflags are saved before calling runtime services and
checked for mismatch on return.

Provide a pair of overridable macros to save and restore (if needed) the
state that need to be preserved on return from a runtime service.
This allows to check for flags that are not necesarly related to
irqflags.

Signed-off-by: Julien Thierry <julien.thierry@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: linux-efi@vger.kernel.org
---
 drivers/firmware/efi/runtime-wrappers.c | 17 +++++++++++++++--
 include/linux/efi.h                     |  5 +++--
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c
index 8903b9c..2f4b68b 100644
--- a/drivers/firmware/efi/runtime-wrappers.c
+++ b/drivers/firmware/efi/runtime-wrappers.c
@@ -89,11 +89,24 @@
 	efi_rts_work.status;						\
 })
 
+#ifndef arch_efi_save_flags
+#define arch_efi_save_flags(state_flags)	local_save_flags(state_flags)
+#define arch_efi_restore_flags(state_flags)	local_irq_restore(state_flags)
+#endif
+
+inline unsigned long efi_call_virt_save_flags(void)
+{
+	unsigned long flags;
+
+	arch_efi_save_flags(flags);
+	return flags;
+}
+
 void efi_call_virt_check_flags(unsigned long flags, const char *call)
 {
 	unsigned long cur_flags, mismatch;
 
-	local_save_flags(cur_flags);
+	cur_flags = efi_call_virt_save_flags();
 
 	mismatch = flags ^ cur_flags;
 	if (!WARN_ON_ONCE(mismatch & ARCH_EFI_IRQ_FLAGS_MASK))
@@ -102,7 +115,7 @@ void efi_call_virt_check_flags(unsigned long flags, const char *call)
 	add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_NOW_UNRELIABLE);
 	pr_err_ratelimited(FW_BUG "IRQ flags corrupted (0x%08lx=>0x%08lx) by EFI %s\n",
 			   flags, cur_flags, call);
-	local_irq_restore(flags);
+	arch_efi_restore_flags(flags);
 }
 
 /*
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 45ff763..bd80b7e 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -1607,6 +1607,7 @@ efi_status_t efi_setup_gop(efi_system_table_t *sys_table_arg,
 
 bool efi_runtime_disabled(void);
 extern void efi_call_virt_check_flags(unsigned long flags, const char *call);
+extern unsigned long efi_call_virt_save_flags(void);
 
 enum efi_secureboot_mode {
 	efi_secureboot_mode_unset,
@@ -1652,7 +1653,7 @@ enum efi_secureboot_mode {
 									\
 	arch_efi_call_virt_setup();					\
 									\
-	local_save_flags(__flags);					\
+	__flags = efi_call_virt_save_flags();				\
 	__s = arch_efi_call_virt(p, f, args);				\
 	efi_call_virt_check_flags(__flags, __stringify(f));		\
 									\
@@ -1667,7 +1668,7 @@ enum efi_secureboot_mode {
 									\
 	arch_efi_call_virt_setup();					\
 									\
-	local_save_flags(__flags);					\
+	__flags = efi_call_virt_save_flags();				\
 	arch_efi_call_virt(p, f, args);					\
 	efi_call_virt_check_flags(__flags, __stringify(f));		\
 									\
-- 
1.9.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-01-21 15:34 UTC|newest]

Thread overview: 166+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-21 15:33 [PATCH v9 00/26] arm64: provide pseudo NMI with GICv3 Julien Thierry
2019-01-21 15:33 ` Julien Thierry
2019-01-21 15:33 ` [PATCH v9 01/26] arm64: Fix HCR.TGE status for NMI contexts Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-23 22:57   ` Sasha Levin
2019-01-23 22:57     ` Sasha Levin
2019-01-28 11:48   ` James Morse
2019-01-28 11:48     ` James Morse
2019-01-28 15:42     ` Julien Thierry
2019-01-28 15:42       ` Julien Thierry
2019-01-31  8:19       ` Christoffer Dall
2019-01-31  8:19         ` Christoffer Dall
2019-01-31  8:56         ` Julien Thierry
2019-01-31  8:56           ` Julien Thierry
2019-01-31  9:27           ` Christoffer Dall
2019-01-31  9:27             ` Christoffer Dall
2019-01-31  9:40             ` Julien Thierry
2019-01-31  9:40               ` Julien Thierry
2019-01-31  9:48               ` Christoffer Dall
2019-01-31  9:48                 ` Christoffer Dall
2019-01-31  9:53               ` Marc Zyngier
2019-01-31  9:53                 ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 02/26] arm64: Remove unused daif related functions/macros Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:21   ` Marc Zyngier
2019-01-28  9:21     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 03/26] arm64: cpufeature: Set SYSREG_GIC_CPUIF as a boot system feature Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:22   ` Marc Zyngier
2019-01-28  9:22     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 04/26] arm64: cpufeature: Add cpufeature for IRQ priority masking Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:24   ` Marc Zyngier
2019-01-28  9:24     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 05/26] arm/arm64: gic-v3: Add PMR and RPR accessors Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:25   ` Marc Zyngier
2019-01-28  9:25     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 06/26] irqchip/gic-v3: Switch to PMR masking before calling IRQ handler Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:30   ` Marc Zyngier
2019-01-28  9:30     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 07/26] arm64: ptrace: Provide definitions for PMR values Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:37   ` Marc Zyngier
2019-01-28  9:37     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 08/26] arm64: Make PMR part of task context Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:42   ` Marc Zyngier
2019-01-28  9:42     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 09/26] arm64: Unmask PMR before going idle Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-22 15:23   ` Catalin Marinas
2019-01-22 15:23     ` Catalin Marinas
2019-01-22 20:18   ` Ard Biesheuvel
2019-01-22 20:18     ` Ard Biesheuvel
2019-01-23  8:56     ` Julien Thierry
2019-01-23  8:56       ` Julien Thierry
2019-01-23  9:38       ` Ard Biesheuvel
2019-01-23  9:38         ` Ard Biesheuvel
2019-01-28  9:44   ` Marc Zyngier
2019-01-28  9:44     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 10/26] arm64: kvm: Unmask PMR before entering guest Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28  9:58   ` Marc Zyngier
2019-01-28  9:58     ` Marc Zyngier
2019-01-28  9:58     ` Marc Zyngier
2019-01-30 12:07   ` Christoffer Dall
2019-01-30 12:07     ` Christoffer Dall
2019-01-30 14:58     ` Julien Thierry
2019-01-30 14:58       ` Julien Thierry
2019-01-21 15:33 ` Julien Thierry [this message]
2019-01-21 15:33   ` [PATCH v9 11/26] efi: Let architectures decide the flags that should be saved/restored Julien Thierry
2019-01-21 15:42   ` Ard Biesheuvel
2019-01-21 15:42     ` Ard Biesheuvel
2019-01-23  9:04     ` Julien Thierry
2019-01-23  9:04       ` Julien Thierry
2019-01-28 10:00   ` Marc Zyngier
2019-01-28 10:00     ` Marc Zyngier
2019-01-28 10:00     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 12/26] arm64: irqflags: Use ICC_PMR_EL1 for interrupt masking Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-21 15:45   ` Ard Biesheuvel
2019-01-21 15:45     ` Ard Biesheuvel
2019-01-21 18:05     ` Julien Thierry
2019-01-21 18:05       ` Julien Thierry
2019-01-22 15:21   ` Catalin Marinas
2019-01-22 15:21     ` Catalin Marinas
2019-01-23 10:44     ` Julien Thierry
2019-01-23 10:44       ` Julien Thierry
2019-01-30 11:52       ` Julien Thierry
2019-01-30 11:52         ` Julien Thierry
2019-01-21 15:33 ` [PATCH v9 13/26] arm64: daifflags: Include PMR in daifflags restore operations Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 10:37   ` Marc Zyngier
2019-01-28 10:37     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 14/26] arm64: alternative: Allow alternative status checking per cpufeature Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 11:00   ` Marc Zyngier
2019-01-28 11:00     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 15/26] arm64: alternative: Apply alternatives early in boot process Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 11:17   ` Marc Zyngier
2019-01-28 11:17     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 16/26] irqchip/gic-v3: Factor group0 detection into functions Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 11:19   ` Marc Zyngier
2019-01-28 11:19     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 17/26] arm64: Switch to PMR masking when starting CPUs Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 11:21   ` Marc Zyngier
2019-01-28 11:21     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 18/26] arm64: gic-v3: Implement arch support for priority masking Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 11:23   ` Marc Zyngier
2019-01-28 11:23     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 19/26] irqchip/gic-v3: Detect if GIC can support pseudo-NMIs Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 11:39   ` Marc Zyngier
2019-01-28 11:39     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 20/26] irqchip/gic-v3: Handle pseudo-NMIs Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 11:59   ` Marc Zyngier
2019-01-28 11:59     ` Marc Zyngier
2019-01-29 11:33     ` Julien Thierry
2019-01-29 11:33       ` Julien Thierry
2019-01-29 12:31       ` Marc Zyngier
2019-01-29 12:31         ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 21/26] irqchip/gic: Add functions to access irq priorities Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 12:04   ` Marc Zyngier
2019-01-28 12:04     ` Marc Zyngier
2019-01-29 11:36     ` Julien Thierry
2019-01-29 11:36       ` Julien Thierry
2019-01-21 15:33 ` [PATCH v9 22/26] irqchip/gic-v3: Allow interrupts to be set as pseudo-NMI Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-26 10:19   ` liwei (GF)
2019-01-26 10:19     ` liwei (GF)
2019-01-26 10:41     ` Marc Zyngier
2019-01-26 10:41       ` Marc Zyngier
2019-01-28  8:57     ` Julien Thierry
2019-01-28  8:57       ` Julien Thierry
2019-01-28 13:59       ` liwei (GF)
2019-01-28 13:59         ` liwei (GF)
2019-01-28 14:49         ` Julien Thierry
2019-01-28 14:49           ` Julien Thierry
2019-01-28 12:08   ` Marc Zyngier
2019-01-28 12:08     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 23/26] arm64: Handle serror in NMI context Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 12:26   ` Marc Zyngier
2019-01-28 12:26     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 24/26] arm64: Skip preemption when exiting an NMI Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 12:34   ` Marc Zyngier
2019-01-28 12:34     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 25/26] arm64: Skip irqflags tracing for NMI in IRQs disabled context Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 12:40   ` Marc Zyngier
2019-01-28 12:40     ` Marc Zyngier
2019-01-21 15:33 ` [PATCH v9 26/26] arm64: Enable the support of pseudo-NMIs Julien Thierry
2019-01-21 15:33   ` Julien Thierry
2019-01-28 12:47   ` Marc Zyngier
2019-01-28 12:47     ` Marc Zyngier
2019-01-30 13:46     ` Julien Thierry
2019-01-30 13:46       ` Julien Thierry

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1548084825-8803-12-git-send-email-julien.thierry@arm.com \
    --to=julien.thierry@arm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@arm.com \
    --cc=daniel.thompson@linaro.org \
    --cc=james.morse@arm.com \
    --cc=joel@joelfernandes.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=will.deacon@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.