[PATCH V10 05/10] acpi: apei: handle SEA notification type for ARMv8
From: Baicar, Tyler <hidden>
Date: 2017-02-21 16:53:13
Also in:
kvm, kvmarm, linux-acpi, linux-efi, lkml
Hello Ard, On 2/16/2017 11:32 AM, Ard Biesheuvel wrote:
On 15 February 2017 at 19:51, Tyler Baicar [off-list ref] wrote:quoted
ARM APEI extension proposal added SEA (Synchronous External Abort) notification type for ARMv8. Add a new GHES error source handling function for SEA. If an error source's notification type is SEA, then this function can be registered into the SEA exception handler. That way GHES will parse and report SEA exceptions when they occur. An SEA can interrupt code that had interrupts masked and is treated as an NMI. To aid this the page of address space for mapping APEI buffers while in_nmi() is always reserved, and ghes_ioremap_pfn_nmi() is changed to use the helper methods to find the prot_t to map with in the same way as ghes_ioremap_pfn_irq(). Signed-off-by: Tyler Baicar <redacted> Signed-off-by: Jonathan (Zhixiong) Zhang <redacted> Signed-off-by: Naveen Kaje <redacted> --- arch/arm64/Kconfig | 2 ++ arch/arm64/mm/fault.c | 13 ++++++++ drivers/acpi/apei/Kconfig | 14 +++++++++ drivers/acpi/apei/ghes.c | 77 +++++++++++++++++++++++++++++++++++++++++++---- include/acpi/ghes.h | 7 +++++ 5 files changed, 107 insertions(+), 6 deletions(-)diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 1117421..8557556 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig@@ -498,6 +500,17 @@ static int do_sea(unsigned long addr, unsigned int esr, struct pt_regs *regs) pr_err("Synchronous External Abort: %s (0x%08x) at 0x%016lx\n", fault_name(esr), esr, addr); + /* + * Synchronous aborts may interrupt code which had interrupts masked. + * Before calling out into the wider kernel tell the interested + * subsystems. + */ + if(IS_ENABLED(HAVE_ACPI_APEI_SEA)) {Missing space after 'if'
I'll add that in.
quoted
+ nmi_enter(); + ghes_notify_sea(); + nmi_exit(); + } + info.si_signo = SIGBUS; info.si_errno = 0; info.si_code = 0;diff --git a/drivers/acpi/apei/Kconfig b/drivers/acpi/apei/Kconfig index b0140c8..ef7f7bd 100644 --- a/drivers/acpi/apei/Kconfig +++ b/drivers/acpi/apei/Kconfig@@ -4,6 +4,20 @@ config HAVE_ACPI_APEI config HAVE_ACPI_APEI_NMI bool +config HAVE_ACPI_APEI_SEAHAVE_xxx Kconfig options are typically non user selectable, so I suggest to drop the HAVE_ prefix here. Also, you should probably make it 'default y' rather than select it elsewhere; this will still honour the dependency on ARM64 && ACPI_APEI_GHES
Okay, I will drop the HAVE_ and add in the default y Thanks, Tyler -- Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc. Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.