From: James Morse <james.morse at arm.com>
To: devel@acpica.org
Subject: Re: [Devel] [PATCH v9 6/7] arm64: kvm: Set Virtual SError Exception Syndrome for guest
Date: Tue, 23 Jan 2018 19:07:50 +0000 [thread overview]
Message-ID: <5A678806.8030108@arm.com> (raw)
In-Reply-To: 1515254577-6460-7-git-send-email-gengdongjiu@huawei.com
[-- Attachment #1: Type: text/plain, Size: 3942 bytes --]
Hi Dongjiu Geng,
On 06/01/18 16:02, Dongjiu Geng wrote:
> RAS Extension add a VSESR_EL2 register which can provide
> the syndrome value reported to software on taking a virtual
> SError interrupt exception. This patch supports to specify
> this Syndrome.
>
> In the RAS Extensions we can not set all-zero syndrome value
> for SError, which means 'RAS error: Uncategorized' instead of
> 'no valid ISS'. So set it to IMPLEMENTATION DEFINED syndrome
> by default.
>
> We also need to support userspace to specify a valid syndrome
> value, Because in some case, the recovery is driven by userspace.
> This patch can support that userspace specify it.
>
> In the guest/host world switch, restore this value to VSESR_EL2
> only when HCR_EL2.VSE is set. This value no need to be saved
> because it is stale vale when guest exit.
A version of this patch has been queued by Catalin.
Now that the cpufeature bits are queued, I think this can be split up into two
separate series for v4.16-rc1, one to tackle NOTIFY_SEI and the associated
plumbing. The second for the KVM 'make SError pending' API.
> Signed-off-by: Dongjiu Geng <gengdongjiu(a)huawei.com>
> [Set an impdef ESR for Virtual-SError]
> Signed-off-by: James Morse <james.morse(a)arm.com>
I didn't sign-off this patch. If you pick some bits from another version and
want to credit someone else you can 'CC:' them or just mention it in the
commit-message.
> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> index 47b967d..3b035cc 100644
> --- a/arch/arm64/include/asm/sysreg.h
> +++ b/arch/arm64/include/asm/sysreg.h
> @@ -86,6 +86,9 @@
> #define REG_PSTATE_PAN_IMM sys_reg(0, 0, 4, 0, 4)
> #define REG_PSTATE_UAO_IMM sys_reg(0, 0, 4, 0, 3)
>
> +/* virtual SError exception syndrome register */
> +#define REG_VSESR_EL2 sys_reg(3, 4, 5, 2, 3)
Irrelevant-Nit: sys-regs usually have a 'SYS_' prefix, and are in instruction
encoding order lower down the file.
(These PSTATE PAN things are a bit odd as they were used to generate and
instruction before the fancy {read,write}_sysreg() helpers were added).
> #define SET_PSTATE_PAN(x) __emit_inst(0xd5000000 | REG_PSTATE_PAN_IMM | \
> (!!x)<<8 | 0x1f)
> #define SET_PSTATE_UAO(x) __emit_inst(0xd5000000 | REG_PSTATE_UAO_IMM | \
> diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
> index 738ae90..ffad42b 100644
> --- a/arch/arm64/kvm/guest.c
> +++ b/arch/arm64/kvm/guest.c
> @@ -279,7 +279,16 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
>
> int kvm_arm_set_sei_esr(struct kvm_vcpu *vcpu, u32 *syndrome)
Bits of this are spread between patches 5 and 6. If you put them in the other
order this wouldn't happen.
(but after a rebase most of this patch should disappear)
> {
> - return -EINVAL;
> + u64 reg = *syndrome;
> +
> + /* inject virtual system Error or asynchronous abort */
> + kvm_inject_vabt(vcpu);
So this writes an impdef ESR, because its the existing code-path in KVM.
> + if (reg)
> + /* set vsesr_el2[24:0] with value that user space specified */
> + kvm_vcpu_set_vsesr(vcpu, reg & ESR_ELx_ISS_MASK);
And then you overwrite it. Which is a bit odd as there is a helper to do both in
one go:
> +
> + return 0;
> }
> int __attribute_const__ kvm_target_cpu(void)
> diff --git a/arch/arm64/kvm/inject_fault.c b/arch/arm64/kvm/inject_fault.c
> index 3556715..fb94b5e 100644
> --- a/arch/arm64/kvm/inject_fault.c
> +++ b/arch/arm64/kvm/inject_fault.c
> @@ -246,14 +246,25 @@ void kvm_inject_undefined(struct kvm_vcpu *vcpu)
> inject_undef64(vcpu);
> }
>
> +static void pend_guest_serror(struct kvm_vcpu *vcpu, u64 esr)
> +{
> + kvm_vcpu_set_vsesr(vcpu, esr);
> + vcpu_set_hcr(vcpu, vcpu_get_hcr(vcpu) | HCR_VSE);
> +}
How come you don't use this in kvm_arm_set_sei_esr()?
Thanks,
James
WARNING: multiple messages have this Message-ID (diff)
From: James Morse <james.morse@arm.com>
To: Dongjiu Geng <gengdongjiu@huawei.com>
Cc: christoffer.dall@linaro.org, marc.zyngier@arm.com,
linux@armlinux.org.uk, catalin.marinas@arm.com,
rjw@rjwysocki.net, bp@alien8.de, robert.moore@intel.com,
lv.zheng@intel.com, corbet@lwn.net, will.deacon@arm.com,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
kvmarm@lists.cs.columbia.edu, linux-acpi@vger.kernel.org,
devel@acpica.org, huangshaoyu@huawei.com
Subject: Re: [PATCH v9 6/7] arm64: kvm: Set Virtual SError Exception Syndrome for guest
Date: Tue, 23 Jan 2018 19:07:50 +0000 [thread overview]
Message-ID: <5A678806.8030108@arm.com> (raw)
In-Reply-To: <1515254577-6460-7-git-send-email-gengdongjiu@huawei.com>
Hi Dongjiu Geng,
On 06/01/18 16:02, Dongjiu Geng wrote:
> RAS Extension add a VSESR_EL2 register which can provide
> the syndrome value reported to software on taking a virtual
> SError interrupt exception. This patch supports to specify
> this Syndrome.
>
> In the RAS Extensions we can not set all-zero syndrome value
> for SError, which means 'RAS error: Uncategorized' instead of
> 'no valid ISS'. So set it to IMPLEMENTATION DEFINED syndrome
> by default.
>
> We also need to support userspace to specify a valid syndrome
> value, Because in some case, the recovery is driven by userspace.
> This patch can support that userspace specify it.
>
> In the guest/host world switch, restore this value to VSESR_EL2
> only when HCR_EL2.VSE is set. This value no need to be saved
> because it is stale vale when guest exit.
A version of this patch has been queued by Catalin.
Now that the cpufeature bits are queued, I think this can be split up into two
separate series for v4.16-rc1, one to tackle NOTIFY_SEI and the associated
plumbing. The second for the KVM 'make SError pending' API.
> Signed-off-by: Dongjiu Geng <gengdongjiu@huawei.com>
> [Set an impdef ESR for Virtual-SError]
> Signed-off-by: James Morse <james.morse@arm.com>
I didn't sign-off this patch. If you pick some bits from another version and
want to credit someone else you can 'CC:' them or just mention it in the
commit-message.
> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> index 47b967d..3b035cc 100644
> --- a/arch/arm64/include/asm/sysreg.h
> +++ b/arch/arm64/include/asm/sysreg.h
> @@ -86,6 +86,9 @@
> #define REG_PSTATE_PAN_IMM sys_reg(0, 0, 4, 0, 4)
> #define REG_PSTATE_UAO_IMM sys_reg(0, 0, 4, 0, 3)
>
> +/* virtual SError exception syndrome register */
> +#define REG_VSESR_EL2 sys_reg(3, 4, 5, 2, 3)
Irrelevant-Nit: sys-regs usually have a 'SYS_' prefix, and are in instruction
encoding order lower down the file.
(These PSTATE PAN things are a bit odd as they were used to generate and
instruction before the fancy {read,write}_sysreg() helpers were added).
> #define SET_PSTATE_PAN(x) __emit_inst(0xd5000000 | REG_PSTATE_PAN_IMM | \
> (!!x)<<8 | 0x1f)
> #define SET_PSTATE_UAO(x) __emit_inst(0xd5000000 | REG_PSTATE_UAO_IMM | \
> diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
> index 738ae90..ffad42b 100644
> --- a/arch/arm64/kvm/guest.c
> +++ b/arch/arm64/kvm/guest.c
> @@ -279,7 +279,16 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
>
> int kvm_arm_set_sei_esr(struct kvm_vcpu *vcpu, u32 *syndrome)
Bits of this are spread between patches 5 and 6. If you put them in the other
order this wouldn't happen.
(but after a rebase most of this patch should disappear)
> {
> - return -EINVAL;
> + u64 reg = *syndrome;
> +
> + /* inject virtual system Error or asynchronous abort */
> + kvm_inject_vabt(vcpu);
So this writes an impdef ESR, because its the existing code-path in KVM.
> + if (reg)
> + /* set vsesr_el2[24:0] with value that user space specified */
> + kvm_vcpu_set_vsesr(vcpu, reg & ESR_ELx_ISS_MASK);
And then you overwrite it. Which is a bit odd as there is a helper to do both in
one go:
> +
> + return 0;
> }
> int __attribute_const__ kvm_target_cpu(void)
> diff --git a/arch/arm64/kvm/inject_fault.c b/arch/arm64/kvm/inject_fault.c
> index 3556715..fb94b5e 100644
> --- a/arch/arm64/kvm/inject_fault.c
> +++ b/arch/arm64/kvm/inject_fault.c
> @@ -246,14 +246,25 @@ void kvm_inject_undefined(struct kvm_vcpu *vcpu)
> inject_undef64(vcpu);
> }
>
> +static void pend_guest_serror(struct kvm_vcpu *vcpu, u64 esr)
> +{
> + kvm_vcpu_set_vsesr(vcpu, esr);
> + vcpu_set_hcr(vcpu, vcpu_get_hcr(vcpu) | HCR_VSE);
> +}
How come you don't use this in kvm_arm_set_sei_esr()?
Thanks,
James
WARNING: multiple messages have this Message-ID (diff)
From: james.morse@arm.com (James Morse)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v9 6/7] arm64: kvm: Set Virtual SError Exception Syndrome for guest
Date: Tue, 23 Jan 2018 19:07:50 +0000 [thread overview]
Message-ID: <5A678806.8030108@arm.com> (raw)
In-Reply-To: <1515254577-6460-7-git-send-email-gengdongjiu@huawei.com>
Hi Dongjiu Geng,
On 06/01/18 16:02, Dongjiu Geng wrote:
> RAS Extension add a VSESR_EL2 register which can provide
> the syndrome value reported to software on taking a virtual
> SError interrupt exception. This patch supports to specify
> this Syndrome.
>
> In the RAS Extensions we can not set all-zero syndrome value
> for SError, which means 'RAS error: Uncategorized' instead of
> 'no valid ISS'. So set it to IMPLEMENTATION DEFINED syndrome
> by default.
>
> We also need to support userspace to specify a valid syndrome
> value, Because in some case, the recovery is driven by userspace.
> This patch can support that userspace specify it.
>
> In the guest/host world switch, restore this value to VSESR_EL2
> only when HCR_EL2.VSE is set. This value no need to be saved
> because it is stale vale when guest exit.
A version of this patch has been queued by Catalin.
Now that the cpufeature bits are queued, I think this can be split up into two
separate series for v4.16-rc1, one to tackle NOTIFY_SEI and the associated
plumbing. The second for the KVM 'make SError pending' API.
> Signed-off-by: Dongjiu Geng <gengdongjiu@huawei.com>
> [Set an impdef ESR for Virtual-SError]
> Signed-off-by: James Morse <james.morse@arm.com>
I didn't sign-off this patch. If you pick some bits from another version and
want to credit someone else you can 'CC:' them or just mention it in the
commit-message.
> diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
> index 47b967d..3b035cc 100644
> --- a/arch/arm64/include/asm/sysreg.h
> +++ b/arch/arm64/include/asm/sysreg.h
> @@ -86,6 +86,9 @@
> #define REG_PSTATE_PAN_IMM sys_reg(0, 0, 4, 0, 4)
> #define REG_PSTATE_UAO_IMM sys_reg(0, 0, 4, 0, 3)
>
> +/* virtual SError exception syndrome register */
> +#define REG_VSESR_EL2 sys_reg(3, 4, 5, 2, 3)
Irrelevant-Nit: sys-regs usually have a 'SYS_' prefix, and are in instruction
encoding order lower down the file.
(These PSTATE PAN things are a bit odd as they were used to generate and
instruction before the fancy {read,write}_sysreg() helpers were added).
> #define SET_PSTATE_PAN(x) __emit_inst(0xd5000000 | REG_PSTATE_PAN_IMM | \
> (!!x)<<8 | 0x1f)
> #define SET_PSTATE_UAO(x) __emit_inst(0xd5000000 | REG_PSTATE_UAO_IMM | \
> diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
> index 738ae90..ffad42b 100644
> --- a/arch/arm64/kvm/guest.c
> +++ b/arch/arm64/kvm/guest.c
> @@ -279,7 +279,16 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
>
> int kvm_arm_set_sei_esr(struct kvm_vcpu *vcpu, u32 *syndrome)
Bits of this are spread between patches 5 and 6. If you put them in the other
order this wouldn't happen.
(but after a rebase most of this patch should disappear)
> {
> - return -EINVAL;
> + u64 reg = *syndrome;
> +
> + /* inject virtual system Error or asynchronous abort */
> + kvm_inject_vabt(vcpu);
So this writes an impdef ESR, because its the existing code-path in KVM.
> + if (reg)
> + /* set vsesr_el2[24:0] with value that user space specified */
> + kvm_vcpu_set_vsesr(vcpu, reg & ESR_ELx_ISS_MASK);
And then you overwrite it. Which is a bit odd as there is a helper to do both in
one go:
> +
> + return 0;
> }
> int __attribute_const__ kvm_target_cpu(void)
> diff --git a/arch/arm64/kvm/inject_fault.c b/arch/arm64/kvm/inject_fault.c
> index 3556715..fb94b5e 100644
> --- a/arch/arm64/kvm/inject_fault.c
> +++ b/arch/arm64/kvm/inject_fault.c
> @@ -246,14 +246,25 @@ void kvm_inject_undefined(struct kvm_vcpu *vcpu)
> inject_undef64(vcpu);
> }
>
> +static void pend_guest_serror(struct kvm_vcpu *vcpu, u64 esr)
> +{
> + kvm_vcpu_set_vsesr(vcpu, esr);
> + vcpu_set_hcr(vcpu, vcpu_get_hcr(vcpu) | HCR_VSE);
> +}
How come you don't use this in kvm_arm_set_sei_esr()?
Thanks,
James
next reply other threads:[~2018-01-23 19:07 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-23 19:07 James Morse [this message]
2018-01-23 19:07 ` [PATCH v9 6/7] arm64: kvm: Set Virtual SError Exception Syndrome for guest James Morse
2018-01-23 19:07 ` James Morse
-- strict thread matches above, loose matches on Subject: below --
2018-01-30 19:39 [Devel] [PATCH v9 3/7] acpi: apei: Add SEI notification type support for ARMv8 James Morse
2018-01-30 19:39 ` James Morse
2018-01-30 19:39 ` James Morse
2018-01-25 8:21 [Devel] [PATCH v9 6/7] arm64: kvm: Set Virtual SError Exception Syndrome for guest gengdongjiu
2018-01-25 8:21 ` gengdongjiu
2018-01-25 8:21 ` gengdongjiu
2018-01-25 8:21 ` gengdongjiu
2018-01-23 19:06 [Devel] [PATCH v9 5/7] arm64: kvm: Introduce KVM_ARM_SET_SERROR_ESR ioctl James Morse
2018-01-23 19:06 ` James Morse
2018-01-23 19:06 ` James Morse
2018-01-23 10:07 [Devel] [PATCH v9 3/7] acpi: apei: Add SEI notification type support for ARMv8 gengdongjiu
2018-01-23 10:07 ` gengdongjiu
2018-01-23 10:07 ` gengdongjiu
2018-01-23 10:07 ` gengdongjiu
2018-01-23 9:23 [Devel] " gengdongjiu
2018-01-23 9:23 ` gengdongjiu
2018-01-23 9:23 ` gengdongjiu
2018-01-23 9:23 ` gengdongjiu
2018-01-22 19:39 [Devel] " James Morse
2018-01-22 19:39 ` James Morse
2018-01-22 19:39 ` James Morse
2018-01-22 19:39 ` James Morse
2018-01-06 16:02 [Devel] [PATCH v9 7/7] arm64: kvm: handle guest SError Interrupt by categorization Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 [Devel] [PATCH v9 6/7] arm64: kvm: Set Virtual SError Exception Syndrome for guest Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 [Devel] [PATCH v9 5/7] arm64: kvm: Introduce KVM_ARM_SET_SERROR_ESR ioctl Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 [Devel] [PATCH v9 4/7] KVM: arm64: Trap RAS error registers and set HCR_EL2's TERR & TEA Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 [Devel] [PATCH v9 3/7] acpi: apei: Add SEI notification type support for ARMv8 Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 [Devel] [PATCH v9 2/7] KVM: arm64: Save ESR_EL2 on guest SError Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 [Devel] [PATCH v9 1/7] arm64: cpufeature: Detect CPU RAS Extentions Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 [Devel] [PATCH v9 0/7] Handle guest RAS Error in KVM and kernel Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
2018-01-06 16:02 ` Dongjiu Geng
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=5A678806.8030108@arm.com \
--to=devel@acpica.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 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.