Thread (19 messages) 19 messages, 5 authors, 2017-06-26
STALE3278d

[PATCH v3 2/3] arm64: kvm: inject SError with virtual syndrome

From: james.morse@arm.com (James Morse)
Date: 2017-05-12 17:24:30
Also in: kvm, kvmarm, qemu-arm, qemu-devel

Hi gengdongjiu,

On 05/05/17 14:19, gengdongjiu wrote:
On 2017/5/2 23:37, James Morse wrote:
quoted
... I think you expect an SError to arrive at EL2 and have its ESR recorded in
vcpu->arch.fault.vsesr_el2. Some time later KVM decides to inject an SError into
the guest, and this ESR is reused...

We shouldn't do this. Qemu/kvmtool may want to inject a virtual-SError that
never started as a physical-SError. Qemu/kvmtool may choose to notify the guest
of RAS events via another mechanism, or not at all.

KVM should not give the guest an ESR value of its choice. For SError the ESR
describes whether the error is corrected, correctable or fatal. Qemu/kvmtool
must choose this.
Below is my previous solution:
For the SError, CPU will firstly trap to EL3 firmware and records the syndrome to ESR_EL3.
Before jumping to El2 hypervisors, it will copy the esr_el3 to esr_el2.
(Copying the ESR value won't always be the right thing to do.)

so in order to pass this syndrome to vsesr_el2, using the esr_el2 value to assign it.
If Qemu/kvmtool chooses the ESR value and ESR only describes whether the error is corrected/correctable/fatal,
whether the information is not enough for the guest?
So the API should specify which of these three severities to use? I think this
is too specific. The API should be useful for anything the VSE/VSESR hardware
can do.

VSESR_EL2 is described in the RAS spec: 4.4.12 [0], its a 64 bit register. I
think we should let Qemu/kvmtool specify any 64bit value here, but KVM should
reject values that try to set bits described as RES0.

This would let Qemu/kvmtool specify any SError ISS, either setting ESR_ELx.IDS
and some virtual-machine specific value, or encoding any severity in AET and
choosing the DFSC/EA bits appropriately.

quoted
quoted
I think we need an API that allows Qemu/kvmtool to inject SError into a guest,
but that isn't quite what you have here.
KVM provides APIs to inject the SError, Qemu/kvmtool call the API though IOCTL, may be OK?
(just the one API call), yes.


Thanks,

James

[0]
https://static.docs.arm.com/ddi0587/a/RAS%20Extension-release%20candidate_march_29.pdf
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help