linux-mips.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] KVM: MIPS: Change KVM_ENTRYHI_ASID to cpu_asid_mask(&current_cpu_data)
@ 2020-01-10  9:08 Xing Li
  2020-01-10  9:08 ` [PATCH 2/3] KVM: MIPS: Fixup VPN2_MASK definition over 32bits virtual address Xing Li
  2020-01-10  9:08 ` [PATCH 3/3] KVM: MIPS: Support kvm modules autoprobed when startup system Xing Li
  0 siblings, 2 replies; 4+ messages in thread
From: Xing Li @ 2020-01-10  9:08 UTC (permalink / raw)
  To: Ralf Baechle, Paul Burton; +Cc: linux-mips, linux-kernel

The code in decode_config4 of arch/mips/kernel/cpu-probe.c

        asid_mask = MIPS_ENTRYHI_ASID;
        if (config4 & MIPS_CONF4_AE)
                asid_mask |= MIPS_ENTRYHI_ASIDX;
        set_cpu_asid_mask(c, asid_mask);

set asid_mask to cpuinfo->asid_mask

So KVM_ENTRYHI_ASID should change to cpu_asid_mask(&current_cpu_data)
for support 10bits ASID_MASK

Signed-off-by: Xing Li <lixing@loongson.cn>
---
 arch/mips/include/asm/kvm_host.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
index 41204a4..6be70d5 100644
--- a/arch/mips/include/asm/kvm_host.h
+++ b/arch/mips/include/asm/kvm_host.h
@@ -275,7 +275,7 @@ enum emulation_result {
 #define MIPS3_PG_FRAME		0x3fffffc0
 
 #define VPN2_MASK		0xffffe000
-#define KVM_ENTRYHI_ASID	MIPS_ENTRYHI_ASID
+#define KVM_ENTRYHI_ASID	cpu_asid_mask(&current_cpu_data)
 #define TLB_IS_GLOBAL(x)	((x).tlb_lo[0] & (x).tlb_lo[1] & ENTRYLO_G)
 #define TLB_VPN2(x)		((x).tlb_hi & VPN2_MASK)
 #define TLB_ASID(x)		((x).tlb_hi & KVM_ENTRYHI_ASID)
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/3] KVM: MIPS: Fixup VPN2_MASK definition over 32bits virtual address
  2020-01-10  9:08 [PATCH 1/3] KVM: MIPS: Change KVM_ENTRYHI_ASID to cpu_asid_mask(&current_cpu_data) Xing Li
@ 2020-01-10  9:08 ` Xing Li
  2020-01-13  1:47   ` Jiaxun Yang
  2020-01-10  9:08 ` [PATCH 3/3] KVM: MIPS: Support kvm modules autoprobed when startup system Xing Li
  1 sibling, 1 reply; 4+ messages in thread
From: Xing Li @ 2020-01-10  9:08 UTC (permalink / raw)
  To: Ralf Baechle, Paul Burton; +Cc: linux-mips, linux-kernel

If the cpu support more than 32bits vmbits, VPN2_MASK set to fixed
0xffffe000 will lead to wrong entryhi for _kvm_mips_host_tlb_inv

Signed-off-by: Xing Li <lixing@loongson.cn>
---
 arch/mips/include/asm/kvm_host.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/mips/include/asm/kvm_host.h b/arch/mips/include/asm/kvm_host.h
index 6be70d5..ce9546c 100644
--- a/arch/mips/include/asm/kvm_host.h
+++ b/arch/mips/include/asm/kvm_host.h
@@ -274,7 +274,12 @@ enum emulation_result {
 #define MIPS3_PG_SHIFT		6
 #define MIPS3_PG_FRAME		0x3fffffc0
 
+#if defined(CONFIG_64BIT)
+#define VPN2_MASK		(((1UL << cpu_vmbits) - 1) &	\
+						   0x3fffffffffffe000UL)
+#else
 #define VPN2_MASK		0xffffe000
+#endif
 #define KVM_ENTRYHI_ASID	cpu_asid_mask(&current_cpu_data)
 #define TLB_IS_GLOBAL(x)	((x).tlb_lo[0] & (x).tlb_lo[1] & ENTRYLO_G)
 #define TLB_VPN2(x)		((x).tlb_hi & VPN2_MASK)
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] KVM: MIPS: Support kvm modules autoprobed when startup system
  2020-01-10  9:08 [PATCH 1/3] KVM: MIPS: Change KVM_ENTRYHI_ASID to cpu_asid_mask(&current_cpu_data) Xing Li
  2020-01-10  9:08 ` [PATCH 2/3] KVM: MIPS: Fixup VPN2_MASK definition over 32bits virtual address Xing Li
@ 2020-01-10  9:08 ` Xing Li
  1 sibling, 0 replies; 4+ messages in thread
From: Xing Li @ 2020-01-10  9:08 UTC (permalink / raw)
  To: Ralf Baechle, Paul Burton; +Cc: linux-mips, linux-kernel

Currently, the module_init of kvm_mips_init cannot force the kvm
modules insmod when startup system.

Add new feature CPU_MIPS_VZ in elf_hwcap to support KVM auto probe
when hardware virtualization supported.

Signed-off-by: Xing Li <lixing@loongson.cn>
---
 arch/mips/include/uapi/asm/hwcap.h | 1 +
 arch/mips/kernel/cpu-probe.c       | 4 +++-
 arch/mips/kvm/mips.c               | 3 ++-
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/mips/include/uapi/asm/hwcap.h b/arch/mips/include/uapi/asm/hwcap.h
index 1ade1da..9e66509 100644
--- a/arch/mips/include/uapi/asm/hwcap.h
+++ b/arch/mips/include/uapi/asm/hwcap.h
@@ -17,5 +17,6 @@
 #define HWCAP_LOONGSON_MMI  (1 << 11)
 #define HWCAP_LOONGSON_EXT  (1 << 12)
 #define HWCAP_LOONGSON_EXT2 (1 << 13)
+#define HWCAP_MIPS_VZ       (1 << 14)
 
 #endif /* _UAPI_ASM_HWCAP_H */
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index c543326..b305269 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -2242,8 +2242,10 @@ void cpu_probe(void)
 	if (cpu_has_loongson_ext2)
 		elf_hwcap |= HWCAP_LOONGSON_EXT2;
 
-	if (cpu_has_vz)
+	if (cpu_has_vz) {
 		cpu_probe_vz(c);
+		elf_hwcap |= HWCAP_MIPS_VZ;
+	}
 
 	cpu_probe_vmbits(c);
 
diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
index 1109924..1da5df3 100644
--- a/arch/mips/kvm/mips.c
+++ b/arch/mips/kvm/mips.c
@@ -19,6 +19,7 @@
 #include <linux/sched/signal.h>
 #include <linux/fs.h>
 #include <linux/memblock.h>
+#include <linux/cpufeature.h>
 
 #include <asm/fpu.h>
 #include <asm/page.h>
@@ -1742,7 +1743,7 @@ static void __exit kvm_mips_exit(void)
 	unregister_die_notifier(&kvm_mips_csr_die_notifier);
 }
 
-module_init(kvm_mips_init);
+module_cpu_feature_match(MIPS_VZ, kvm_mips_init);
 module_exit(kvm_mips_exit);
 
 EXPORT_TRACEPOINT_SYMBOL(kvm_exit);
-- 
2.1.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/3] KVM: MIPS: Fixup VPN2_MASK definition over 32bits virtual address
  2020-01-10  9:08 ` [PATCH 2/3] KVM: MIPS: Fixup VPN2_MASK definition over 32bits virtual address Xing Li
@ 2020-01-13  1:47   ` Jiaxun Yang
  0 siblings, 0 replies; 4+ messages in thread
From: Jiaxun Yang @ 2020-01-13  1:47 UTC (permalink / raw)
  To: Xing Li, Ralf Baechle, Paul Burton; +Cc: linux-mips, linux-kernel



于 2020年1月10日 GMT+08:00 下午5:08:39, Xing Li <lixing@loongson.cn> 写到:
>If the cpu support more than 32bits vmbits, VPN2_MASK set to fixed
>0xffffe000 will lead to wrong entryhi for _kvm_mips_host_tlb_inv
>
>Signed-off-by: Xing Li <lixing@loongson.cn>
>---
> arch/mips/include/asm/kvm_host.h | 5 +++++
> 1 file changed, 5 insertions(+)
>
>diff --git a/arch/mips/include/asm/kvm_host.h
>b/arch/mips/include/asm/kvm_host.h
>index 6be70d5..ce9546c 100644
>--- a/arch/mips/include/asm/kvm_host.h
>+++ b/arch/mips/include/asm/kvm_host.h
>@@ -274,7 +274,12 @@ enum emulation_result {
> #define MIPS3_PG_SHIFT		6
> #define MIPS3_PG_FRAME		0x3fffffc0
> 
>+#if defined(CONFIG_64BIT)
>+#define VPN2_MASK		(((1UL << cpu_vmbits) - 1) &	\
>+						   0x3fffffffffffe000UL)
>+#else
> #define VPN2_MASK		0xffffe000

Hi Lixing,
It could be more reasonable to do like:

#define VPN2_MASK GENMASK(vm_bits, 13)

So we can avoid ugly ifdef.

Thanks


>+#endif
> #define KVM_ENTRYHI_ASID	cpu_asid_mask(&current_cpu_data)
> #define TLB_IS_GLOBAL(x)	((x).tlb_lo[0] & (x).tlb_lo[1] & ENTRYLO_G)
> #define TLB_VPN2(x)		((x).tlb_hi & VPN2_MASK)

-- 
Jiaxun Yang

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-01-13  1:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-10  9:08 [PATCH 1/3] KVM: MIPS: Change KVM_ENTRYHI_ASID to cpu_asid_mask(&current_cpu_data) Xing Li
2020-01-10  9:08 ` [PATCH 2/3] KVM: MIPS: Fixup VPN2_MASK definition over 32bits virtual address Xing Li
2020-01-13  1:47   ` Jiaxun Yang
2020-01-10  9:08 ` [PATCH 3/3] KVM: MIPS: Support kvm modules autoprobed when startup system Xing Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).