]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Merge tag 'kvm-riscv-6.20-1' of https://github.com/kvm-riscv/linux into HEAD
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 9 Feb 2026 18:05:42 +0000 (19:05 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 11 Feb 2026 17:45:00 +0000 (12:45 -0500)
KVM/riscv changes for 6.20

- Fixes for issues discoverd by KVM API fuzzing in
  kvm_riscv_aia_imsic_has_attr(), kvm_riscv_aia_imsic_rw_attr(),
  and kvm_riscv_vcpu_aia_imsic_update()
- Allow Zalasr, Zilsd and Zclsd extensions for Guest/VM
- Add riscv vm satp modes in KVM selftests
- Transparent huge page support for G-stage
- Adjust the number of available guest irq files based on
  MMIO register sizes in DeviceTree or ACPI

1  2 
tools/testing/selftests/kvm/include/kvm_util.h
tools/testing/selftests/kvm/lib/kvm_util.c
tools/testing/selftests/kvm/lib/riscv/processor.c

index a37d17984ac53ceab0f3ae092974a34a9df3ba4c,174490e6cd10abcfc9947b515ef32aa1d369d1c8..1959bf556e88eaabe958804ec6f388785d9782bb
@@@ -333,11 -351,26 +351,26 @@@ struct kvm_vm *____vm_create(struct vm_
  #endif
                break;
        case VM_MODE_P47V64_4K:
 -              vm->pgtable_levels = 5;
 +              vm->mmu.pgtable_levels = 5;
                break;
        case VM_MODE_P44V64_4K:
 -              vm->pgtable_levels = 5;
 +              vm->mmu.pgtable_levels = 5;
                break;
 -              vm->pgtable_levels = 5;
+       case VM_MODE_P56V57_4K:
+       case VM_MODE_P50V57_4K:
+       case VM_MODE_P41V57_4K:
 -              vm->pgtable_levels = 4;
++              vm->mmu.pgtable_levels = 5;
+               break;
+       case VM_MODE_P56V48_4K:
+       case VM_MODE_P50V48_4K:
+       case VM_MODE_P41V48_4K:
 -              vm->pgtable_levels = 3;
++              vm->mmu.pgtable_levels = 4;
+               break;
+       case VM_MODE_P56V39_4K:
+       case VM_MODE_P50V39_4K:
+       case VM_MODE_P41V39_4K:
++              vm->mmu.pgtable_levels = 3;
+               break;
        default:
                TEST_FAIL("Unknown guest mode: 0x%x", vm->mode);
        }
index 7663bbabcf1a3628e8de7c19d68e1444c42b08e9,003693576225e2df414567ef944b5b0150843385..51dd455ff52c6b515ca5490d49ee1f0e286a6b2b
@@@ -207,8 -225,14 +221,14 @@@ void riscv_vcpu_mmu_setup(struct kvm_vc
                TEST_FAIL("Unknown guest mode, mode: 0x%x", vm->mode);
        }
  
 -      satp = (vm->pgd >> PGTBL_PAGE_SIZE_SHIFT) & SATP_PPN;
+       max_satp_mode = vcpu_get_reg(vcpu, RISCV_CONFIG_REG(satp_mode));
+       if ((satp_mode >> SATP_MODE_SHIFT) > max_satp_mode)
+               TEST_FAIL("Unable to set satp mode 0x%lx, max mode 0x%lx\n",
+                         satp_mode >> SATP_MODE_SHIFT, max_satp_mode);
-       satp |= SATP_MODE_48;
 +      satp = (vm->mmu.pgd >> PGTBL_PAGE_SIZE_SHIFT) & SATP_PPN;
+       satp |= satp_mode;
  
        vcpu_set_reg(vcpu, RISCV_GENERAL_CSR_REG(satp), satp);
  }