сре, 13. мај 2020. у 10:48 Huacai Chen <chenhc@xxxxxxxxxx> је написао/ла: > > This patch enable KVM support for Loongson-3 by selecting HAVE_KVM, but > only enable KVM/VZ on Loongson-3A R4+ (because VZ of early processors > are incomplete). Besides, Loongson-3 support SMP guests, so we clear the > linked load bit of LLAddr in kvm_vz_vcpu_load() if the guest has more > than one VCPUs. > > Signed-off-by: Huacai Chen <chenhc@xxxxxxxxxx> > Co-developed-by: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx> > --- Reviewed-by: Aleksandar Markovic <aleksandar.qemu.devel@xxxxxxxxx> > arch/mips/Kconfig | 1 + > arch/mips/kernel/cpu-probe.c | 1 + > arch/mips/kvm/vz.c | 2 +- > 3 files changed, 3 insertions(+), 1 deletion(-) > > diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig > index ce1aacc..3a15f2b 100644 > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > @@ -1405,6 +1405,7 @@ config CPU_LOONGSON64 > select MIPS_L1_CACHE_SHIFT_6 > select GPIOLIB > select SWIOTLB > + select HAVE_KVM > help > The Loongson GSx64(GS264/GS464/GS464E/GS464V) series of processor > cores implements the MIPS64R2 instruction set with many extensions, > diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c > index 319c250..415fbd2 100644 > --- a/arch/mips/kernel/cpu-probe.c > +++ b/arch/mips/kernel/cpu-probe.c > @@ -2008,6 +2008,7 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu) > c->writecombine = _CACHE_UNCACHED_ACCELERATED; > c->ases |= (MIPS_ASE_LOONGSON_MMI | MIPS_ASE_LOONGSON_CAM | > MIPS_ASE_LOONGSON_EXT | MIPS_ASE_LOONGSON_EXT2); > + c->ases &= ~MIPS_ASE_VZ; /* VZ of Loongson-3A2000/3000 is incomplete */ > break; > case PRID_IMP_LOONGSON_64G: > c->cputype = CPU_LOONGSON64; > diff --git a/arch/mips/kvm/vz.c b/arch/mips/kvm/vz.c > index 73701c3..dc753d0 100644 > --- a/arch/mips/kvm/vz.c > +++ b/arch/mips/kvm/vz.c > @@ -2697,7 +2697,7 @@ static int kvm_vz_vcpu_load(struct kvm_vcpu *vcpu, int cpu) > * prevents a SC on the next VCPU from succeeding by matching a LL on > * the previous VCPU. > */ > - if (cpu_guest_has_rw_llb) > + if (vcpu->kvm->created_vcpus > 1) > write_gc0_lladdr(0); > > return 0; > -- > 2.7.0 >