Hi Zenghui, Thanks for having a go at the backport. On Tue, 01 Jun 2021 12:12:37 +0100, Zenghui Yu <yuzenghui@xxxxxxxxxx> wrote: > > From: Marc Zyngier <maz@xxxxxxxxxx> > > commit 26778aaa134a9aefdf5dbaad904054d7be9d656d upstream. > > KVM currently updates PC (and the corresponding exception state) > using a two phase approach: first by setting a set of flags, > then by converting these flags into a state update when the vcpu > is about to enter the guest. > > However, this creates a disconnect with userspace if the vcpu thread > returns there with any exception/PC flag set. In this case, the exposed > context is wrong, as userspace doesn't have access to these flags > (they aren't architectural). It also means that these flags are > preserved across a reset, which isn't expected. > > To solve this problem, force an explicit synchronisation of the > exception state on vcpu exit to userspace. As an optimisation > for nVHE systems, only perform this when there is something pending. > > Reported-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > Reviewed-by: Alexandru Elisei <alexandru.elisei@xxxxxxx> > Reviewed-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > Tested-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx # 5.11 > [yuz: stable-5.12.y backport: add __KVM_HOST_SMCCC_FUNC___kvm_adjust_pc > macro manually and keep it consistent with mainline] I'd rather you allocated a new number here, irrespective of what mainline has (rational below). > Signed-off-by: Zenghui Yu <yuzenghui@xxxxxxxxxx> > --- > arch/arm64/include/asm/kvm_asm.h | 1 + > arch/arm64/kvm/arm.c | 11 +++++++++++ > arch/arm64/kvm/hyp/exception.c | 4 ++-- > arch/arm64/kvm/hyp/nvhe/hyp-main.c | 8 ++++++++ > 4 files changed, 22 insertions(+), 2 deletions(-) > > diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h > index a8578d650bb6..d7f769bb6c9c 100644 > --- a/arch/arm64/include/asm/kvm_asm.h > +++ b/arch/arm64/include/asm/kvm_asm.h > @@ -57,6 +57,7 @@ > #define __KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2 12 > #define __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs 13 > #define __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs 14 > +#define __KVM_HOST_SMCCC_FUNC___kvm_adjust_pc 21 This is going to generate a larger than necessary host_hcall array in hyp/nvhe/hyp-main.c, which we're trying to keep tightly packed for obvious reasons. With this nit fixed: Reviewed-by: Marc Zyngier <maz@xxxxxxxxxx> Thanks, M. -- Without deviation from the norm, progress is not possible.