public inbox for kvmarm@lists.cs.columbia.edu
 help / color / mirror / Atom feed
From: gengdongjiu <gengdongjiu@huawei.com>
To: James Morse <james.morse@arm.com>, Achin.Gupta@arm.com
Cc: peter.maydell@linaro.org, christoffer.dall@linaro.org,
	marc.zyngier@arm.com, rkrcmar@redhat.com, linux@armlinux.org.uk,
	catalin.marinas@arm.com, will.deacon@arm.com, lenb@kernel.org,
	robert.moore@intel.com, lv.zheng@intel.com, mark.rutland@arm.com,
	xiexiuqi@huawei.com, cov@codeaurora.org, david.daney@cavium.com,
	suzuki.poulose@arm.com, stefan@hello-penguin.com,
	Dave.Martin@arm.com, kristina.martsenko@arm.com,
	wangkefeng.wang@huawei.com, tbaicar@codeaurora.org,
	ard.biesheuvel@linaro.org, mingo@kernel.org, bp@suse.de,
	shiju.jose@huawei.com, zjzhang@codeaurora.org,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
	devel@a
Subject: Re: [PATCH v6 6/7] KVM: arm64: allow get exception information from userspace
Date: Thu, 21 Sep 2017 15:55:25 +0800	[thread overview]
Message-ID: <92f2fecc-9833-15e4-30cc-b4dd5ba93cb7@huawei.com> (raw)
In-Reply-To: <59BA7D72.4090403@arm.com>

Hi James

On 2017/9/14 21:00, James Morse wrote:
> Hi gengdongjiu,

> user-space can choose whether to use SEA or SEI, it doesn't have to choose the
> same notification type that firmware used, which in turn doesn't have to be the
> same as that used by the CPU to notify firmware.
> 
> The choice only matters because these notifications hang on an existing pieces
> of the Arm-architecture, so the notification can only add to the architecturally
> defined meaning. (i.e. You can only send an SEA for something that can already
> be described as a synchronous external abort).
> 
> Once we get to user-space, for memory_failure() notifications, (which so far is
> all we are talking about here), the only thing that could matter is whether the
> guest hit a PG_hwpoison page as a stage2 fault. These can be described as
> Synchronous-External-Abort.
> 
> The Synchronous-External-Abort/SError-Interrupt distinction matters for the CPU
> because it can't always make an error synchronous. For memory_failure()
> notifications to a KVM guest we really can do this, and we already have this
> behaviour for free. An example:
> 
> A guest touches some hardware:poisoned memory, for whatever reason the CPU can't
> put the world back together to make this a synchronous exception, so it reports
> it to firmware as an SError-interrupt.
> Linux gets an APEI notification and memory_failure() causes the affected page to
> be unmapped from the guest's stage2, and SIGBUS_MCEERR_AO sent to user-space.
> 
> Qemu/kvmtool can now notify the guest with an IRQ or POLLed notification. AO->
> action optional, probably asynchronous.
> 
> But in our example it wasn't really asynchronous, that was just a property of
> the original CPU->firmware notification. What happens? The guest vcpu is re-run,
> it re-runs the same instructions (this was a contained error so KVM's ELR points
> at/before the instruction that steps in the problem). This time KVM takes a
> stage2 fault, which the mm code will refuse to fixup because the relevant page
> was marked as PG_hwpoision by memory_failure(). KVM signals Qemu/kvmtool with
> SIGBUS_MCEERR_AR. Now Qemu/kvmtool can notify the guest using SEA.

CC Achin

I have some personal opinion, if you think it is not right, hope you can point out.

Synchronous External Abort and SError Interrupt are hardware exception(hardware concept), which is independent of software notification,
in armv8 without RAS, the two concepts already exist. In the APEI spec, in order to better describe the two exceptions, so use SEA and SEI notification to stand for them.

SEA notification stands for Synchronous External Abort, so may be it is not only a notification, it also stands for a hardware error type.
SEI notification stands for SError Interrupt, so may be it is not only a notification, it also stands for a hardware error type.

In the OS, it has different handling flow to the two exception(two notification):
when the guest OS running, if the hardware generates a Synchronous External Abort, we told the guest OS this error is SError Interrupt instead of Synchronous External Abort.
guest OS uses SEI notification handling flow to deal with it, I am not sure whether it will have problem, because the true hardware exception is Synchronous External Abort,
but software treats it as SError interrupt to handle.

In the mainline code, it does not have SEI notification support, the reason I think it is because of the error address record by firmware is not accurate(SError Interrupt is asynchronous exception).
so if treat a hardware Synchronous External Abort as SError interrupt(SEI). The default OS behavior for SEI is PANIC, that is to say, when hardware triggers a Synchronous External Abort(SEA), if guest
treat it as SError interrupt(SEI), the OS will be panic. in fact, it can be recoverable instead of Panic.

I ever added a patch to support the SEI notification, but not sure whether it is can be accepted by open source, until now, not receive response.

  parent reply	other threads:[~2017-09-21  7:55 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-28 10:38 [PATCH v6 0/7] Add RAS virtualization support for SEA/SEI notification type in KVM Dongjiu Geng
2017-08-28 10:38 ` [PATCH v6 1/7] arm64: cpufeature: Detect CPU RAS Extentions Dongjiu Geng
2017-08-31 17:44   ` James Morse
2017-09-04 11:20     ` gengdongjiu
2017-08-28 10:38 ` [PATCH v6 2/7] KVM: arm64: Save ESR_EL2 on guest SError Dongjiu Geng
2017-08-28 10:38 ` [PATCH v6 3/7] acpi: apei: remove the unused code Dongjiu Geng
2017-08-31 17:50   ` James Morse
2017-09-04 11:43     ` gengdongjiu
2017-09-08 18:17       ` James Morse
2017-09-11 12:04         ` gengdongjiu
2017-09-14 12:35           ` James Morse
2017-09-14 12:51             ` gengdongjiu
2017-08-28 10:38 ` [PATCH v6 4/7] arm64: kvm: support user space to query RAS extension feature Dongjiu Geng
2017-08-31 18:04   ` James Morse
2017-09-05  7:18     ` gengdongjiu
2017-09-07 16:31       ` James Morse
2017-09-08 14:34         ` 答复: " gengdongjiu
2017-09-08 15:03           ` Peter Maydell
2017-09-14 12:34             ` James Morse
2017-09-08 17:36         ` gengdongjiu
2017-09-14 12:38           ` James Morse
2017-08-28 10:38 ` [PATCH v6 5/7] arm64: kvm: route synchronous external abort exceptions to el2 Dongjiu Geng
2017-09-07 16:31   ` James Morse
2017-09-13  8:12     ` gengdongjiu
2017-09-14 11:12     ` gengdongjiu
2017-09-14 12:36       ` James Morse
2017-10-16 11:44       ` James Morse
2017-10-16 13:44         ` gengdongjiu
2017-08-28 10:38 ` [PATCH v6 6/7] KVM: arm64: allow get exception information from userspace Dongjiu Geng
2017-09-07 16:30   ` James Morse
2017-09-13  7:32     ` gengdongjiu
2017-09-14 13:00       ` James Morse
2017-09-18 13:36         ` gengdongjiu
2017-09-22 16:39           ` James Morse
2017-09-25 15:13             ` 答复: " gengdongjiu
2017-10-06 16:46               ` James Morse
2017-10-19  5:48                 ` gengdongjiu
2017-09-21  7:55         ` gengdongjiu [this message]
2017-09-22 16:51           ` James Morse
2017-09-27 11:07             ` gengdongjiu
2017-09-27 15:37               ` gengdongjiu
2017-10-06 17:31               ` James Morse
2017-10-19  7:49                 ` gengdongjiu
2017-08-28 10:38 ` [PATCH v6 7/7] arm64: kvm: handle SEI notification and pass the virtual syndrome Dongjiu Geng
2017-08-31 17:43 ` [PATCH v6 0/7] Add RAS virtualization support for SEA/SEI notification type in KVM James Morse
2017-09-04 11:10   ` gengdongjiu
2017-09-07 16:32     ` James Morse
2017-09-06 11:19 ` Peter Maydell
2017-09-06 11:29   ` gengdongjiu
     [not found] <0184EA26B2509940AA629AE1405DD7F2016BA9E4@DGGEMA503-MBX.china.huawei.com>
2017-10-20 15:33 ` [PATCH v6 6/7] KVM: arm64: allow get exception information from userspace gengdongjiu
2017-10-25 17:42   ` James Morse
2017-10-27  7:21     ` gengdongjiu
2017-11-03 18:36       ` James Morse
  -- strict thread matches above, loose matches on Subject: below --
2017-10-20 15:36 gengdongjiu

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=92f2fecc-9833-15e4-30cc-b4dd5ba93cb7@huawei.com \
    --to=gengdongjiu@huawei.com \
    --cc=Achin.Gupta@arm.com \
    --cc=Dave.Martin@arm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=bp@suse.de \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=cov@codeaurora.org \
    --cc=david.daney@cavium.com \
    --cc=devel@a \
    --cc=james.morse@arm.com \
    --cc=kristina.martsenko@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=lv.zheng@intel.com \
    --cc=marc.zyngier@arm.com \
    --cc=mark.rutland@arm.com \
    --cc=mingo@kernel.org \
    --cc=peter.maydell@linaro.org \
    --cc=rkrcmar@redhat.com \
    --cc=robert.moore@intel.com \
    --cc=shiju.jose@huawei.com \
    --cc=stefan@hello-penguin.com \
    --cc=suzuki.poulose@arm.com \
    --cc=tbaicar@codeaurora.org \
    --cc=wangkefeng.wang@huawei.com \
    --cc=will.deacon@arm.com \
    --cc=xiexiuqi@huawei.com \
    --cc=zjzhang@codeaurora.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox