History

RISC-V: KVM: Add VM capability to allow userspace get GPA bits

The number of GPA bits supported for a RISC-V Guest/VM is based on the MMU mode used by the G-stage translation. The KVM RISC-V will detect and use the best possible MMU mode for the G-stage in kvm_arch_init(). We add a generic VM capability KVM_CAP_VM_GPA_BITS which can be used by the KVM userspace to get the number of GPA (guest physical address) bits supported for a Guest/VM.

Anup Patel committed 4 years ago

Commit a457fd51 parent ef8949a4 files · +10 −0Browse files

Unified · Split

4 files
  1. arch/riscv/include/asm/kvm_host.h +1 −0
  2. arch/riscv/kvm/mmu.c +5 −0
  3. arch/riscv/kvm/vm.c +3 −0
  4. include/uapi/linux/kvm.h +1 −0
arch/riscv/include/asm/kvm_host.h+1−0
@@ -218,6 +218,7 @@ void kvm_riscv_stage2_free_pgd(struct kvm *kvm); · 217 unmodified lines
218void kvm_riscv_stage2_update_hgatp(struct kvm_vcpu *vcpu);218void kvm_riscv_stage2_update_hgatp(struct kvm_vcpu *vcpu);
219void kvm_riscv_stage2_mode_detect(void);219void kvm_riscv_stage2_mode_detect(void);
220unsigned long kvm_riscv_stage2_mode(void);220unsigned long kvm_riscv_stage2_mode(void);
221int kvm_riscv_stage2_gpa_bits(void);
221 222
222void kvm_riscv_stage2_vmid_detect(void);223void kvm_riscv_stage2_vmid_detect(void);
223unsigned long kvm_riscv_stage2_vmid_bits(void);224unsigned long kvm_riscv_stage2_vmid_bits(void);
arch/riscv/kvm/mmu.c+5−0
@@ -769,3 +769,8 @@ unsigned long kvm_riscv_stage2_mode(void) · 768 unmodified lines
769{769{
770 return stage2_mode >> HGATP_MODE_SHIFT;770 return stage2_mode >> HGATP_MODE_SHIFT;
771}771}
772
773int kvm_riscv_stage2_gpa_bits(void)
774{
775 return stage2_gpa_bits;
776}
arch/riscv/kvm/vm.c+3−0
@@ -74,6 +74,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) · 73 unmodified lines
74 case KVM_CAP_NR_MEMSLOTS:74 case KVM_CAP_NR_MEMSLOTS:
75 r = KVM_USER_MEM_SLOTS;75 r = KVM_USER_MEM_SLOTS;
76 break;76 break;
77 case KVM_CAP_VM_GPA_BITS:
78 r = kvm_riscv_stage2_gpa_bits();
79 break;
77 default:80 default:
78 r = 0;81 r = 0;
79 break;82 break;
include/uapi/linux/kvm.h+1−0
@@ -1131,6 +1131,7 @@ struct kvm_ppc_resize_hpt { · 1130 unmodified lines
1131#define KVM_CAP_EXIT_ON_EMULATION_FAILURE 2041131#define KVM_CAP_EXIT_ON_EMULATION_FAILURE 204
1132#define KVM_CAP_ARM_MTE 2051132#define KVM_CAP_ARM_MTE 205
1133#define KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM 2061133#define KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM 206
1134#define KVM_CAP_VM_GPA_BITS 207
1134 1135
1135#ifdef KVM_CAP_IRQ_ROUTING1136#ifdef KVM_CAP_IRQ_ROUTING
1136 1137