Thread (31 messages) 31 messages, 7 authors, 2017-03-22

[PATCH V11 10/10] arm/arm64: KVM: add guest SEA support

From: james.morse@arm.com (James Morse)
Date: 2017-03-06 10:35:18
Also in: kvm, kvmarm, linux-acpi, linux-efi, lkml

Hi Tyler,

On 28/02/17 19:43, Baicar, Tyler wrote:
On 2/24/2017 3:42 AM, James Morse wrote:
quoted
On 21/02/17 21:22, Tyler Baicar wrote:
quoted
Currently external aborts are unsupported by the guest abort
handling. Add handling for SEAs so that the host kernel reports
SEAs which occur in the guest kernel.
quoted
quoted
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index b2d57fc..403277b 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -602,6 +602,24 @@ static const char *fault_name(unsigned int esr)
  }

  /*
+ * Handle Synchronous External Aborts that occur in a guest kernel.
+ */
+int handle_guest_sea(unsigned long addr, unsigned int esr)
+{
+    if(IS_ENABLED(HAVE_ACPI_APEI_SEA)) {
+        nmi_enter();
+        ghes_notify_sea();
+        nmi_exit();
quoted
This nmi stuff was needed for synchronous aborts that may have interrupted
APEI's interrupts-masked code. We want to avoid trying to take the same set of
locks, hence taking the in_nmi() path through APEI. Here we know we interrupted
a guest, so there is no risk that we have interrupted APEI on the host.
ghes_notify_sea() can safely take the normal path.
Makes sense, I can remove the nmi_* calls here.
Just occurs to me: if we do this we need to add the rcu_read_lock() in
ghes_notify_sea() as its not protected by the rcu/nmi weirdness.


Thanks,

James
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help