[PATCH v3 00/12] MMU related improvements for KVM RISC-V

Anup Patel posted 12 patches 3 months, 3 weeks ago
arch/riscv/include/asm/kvm_aia.h    |   2 +-
arch/riscv/include/asm/kvm_gstage.h |  72 ++++
arch/riscv/include/asm/kvm_host.h   | 103 +-----
arch/riscv/include/asm/kvm_mmu.h    |  21 ++
arch/riscv/include/asm/kvm_tlb.h    |  84 +++++
arch/riscv/include/asm/kvm_vmid.h   |  27 ++
arch/riscv/kvm/Makefile             |   1 +
arch/riscv/kvm/aia_device.c         |   6 +-
arch/riscv/kvm/aia_imsic.c          |  12 +-
arch/riscv/kvm/gstage.c             | 338 +++++++++++++++++++
arch/riscv/kvm/main.c               |   3 +-
arch/riscv/kvm/mmu.c                | 499 ++++++----------------------
arch/riscv/kvm/tlb.c                | 110 +++---
arch/riscv/kvm/vcpu.c               |  26 +-
arch/riscv/kvm/vcpu_exit.c          |  20 +-
arch/riscv/kvm/vcpu_sbi_replace.c   |  17 +-
arch/riscv/kvm/vcpu_sbi_v01.c       |  25 +-
arch/riscv/kvm/vm.c                 |   7 +-
arch/riscv/kvm/vmid.c               |  25 ++
19 files changed, 795 insertions(+), 603 deletions(-)
create mode 100644 arch/riscv/include/asm/kvm_gstage.h
create mode 100644 arch/riscv/include/asm/kvm_mmu.h
create mode 100644 arch/riscv/include/asm/kvm_tlb.h
create mode 100644 arch/riscv/include/asm/kvm_vmid.h
create mode 100644 arch/riscv/kvm/gstage.c
[PATCH v3 00/12] MMU related improvements for KVM RISC-V
Posted by Anup Patel 3 months, 3 weeks ago
This series primarily has various MMU improvements for KVM RISC-V
and it also serves as a preparatory series for the upcoming nested
virtualization support.

PATCH1 to PATCH4: Few cosmetic improvements
PATCH5 to PATCH7: TLB maintenance and SBI NACL related improvements
PATCH8 to PATCH12: MMU related preparatory work for nested virtualization

These patches can also be found in the riscv_kvm_mmu_imp_v3 branch
at: https://github.com/avpatel/linux.git

Changes since v2:
 - Rebased upon Linux-6.16-rc2 and latest riscv_kvm_queue branch
 - Added Reviewed-by tags to appropriate patches

Changes since v1:
 - Rebased upon Linux-6.16-rc1
 - Dropped PATCH1 and PATCH2 of v1 series since these are queued
   as fixes for Linux-6.16
 - Addressed Atish's comment on PATCH1 in this series
 - Added new PATCH7 in this series

Anup Patel (12):
  RISC-V: KVM: Check kvm_riscv_vcpu_alloc_vector_context() return value
  RISC-V: KVM: Drop the return value of kvm_riscv_vcpu_aia_init()
  RISC-V: KVM: Rename and move kvm_riscv_local_tlb_sanitize()
  RISC-V: KVM: Replace KVM_REQ_HFENCE_GVMA_VMID_ALL with
    KVM_REQ_TLB_FLUSH
  RISC-V: KVM: Don't flush TLB when PTE is unchanged
  RISC-V: KVM: Implement kvm_arch_flush_remote_tlbs_range()
  RISC-V: KVM: Use ncsr_xyz() in kvm_riscv_vcpu_trap_redirect()
  RISC-V: KVM: Factor-out MMU related declarations into separate headers
  RISC-V: KVM: Introduce struct kvm_gstage_mapping
  RISC-V: KVM: Add vmid field to struct kvm_riscv_hfence
  RISC-V: KVM: Factor-out g-stage page table management
  RISC-V: KVM: Pass VMID as parameter to kvm_riscv_hfence_xyz() APIs

 arch/riscv/include/asm/kvm_aia.h    |   2 +-
 arch/riscv/include/asm/kvm_gstage.h |  72 ++++
 arch/riscv/include/asm/kvm_host.h   | 103 +-----
 arch/riscv/include/asm/kvm_mmu.h    |  21 ++
 arch/riscv/include/asm/kvm_tlb.h    |  84 +++++
 arch/riscv/include/asm/kvm_vmid.h   |  27 ++
 arch/riscv/kvm/Makefile             |   1 +
 arch/riscv/kvm/aia_device.c         |   6 +-
 arch/riscv/kvm/aia_imsic.c          |  12 +-
 arch/riscv/kvm/gstage.c             | 338 +++++++++++++++++++
 arch/riscv/kvm/main.c               |   3 +-
 arch/riscv/kvm/mmu.c                | 499 ++++++----------------------
 arch/riscv/kvm/tlb.c                | 110 +++---
 arch/riscv/kvm/vcpu.c               |  26 +-
 arch/riscv/kvm/vcpu_exit.c          |  20 +-
 arch/riscv/kvm/vcpu_sbi_replace.c   |  17 +-
 arch/riscv/kvm/vcpu_sbi_v01.c       |  25 +-
 arch/riscv/kvm/vm.c                 |   7 +-
 arch/riscv/kvm/vmid.c               |  25 ++
 19 files changed, 795 insertions(+), 603 deletions(-)
 create mode 100644 arch/riscv/include/asm/kvm_gstage.h
 create mode 100644 arch/riscv/include/asm/kvm_mmu.h
 create mode 100644 arch/riscv/include/asm/kvm_tlb.h
 create mode 100644 arch/riscv/include/asm/kvm_vmid.h
 create mode 100644 arch/riscv/kvm/gstage.c

-- 
2.43.0
Re: [PATCH v3 00/12] MMU related improvements for KVM RISC-V
Posted by Atish Patra 3 months, 2 weeks ago
On 6/18/25 4:35 AM, Anup Patel wrote:
> This series primarily has various MMU improvements for KVM RISC-V
> and it also serves as a preparatory series for the upcoming nested
> virtualization support.
>
> PATCH1 to PATCH4: Few cosmetic improvements
> PATCH5 to PATCH7: TLB maintenance and SBI NACL related improvements
> PATCH8 to PATCH12: MMU related preparatory work for nested virtualization

For the entire series:

Tested-by: Atish Patra <atishp@rivosinc.com>

> These patches can also be found in the riscv_kvm_mmu_imp_v3 branch
> at: https://github.com/avpatel/linux.git
>
> Changes since v2:
>   - Rebased upon Linux-6.16-rc2 and latest riscv_kvm_queue branch
>   - Added Reviewed-by tags to appropriate patches
>
> Changes since v1:
>   - Rebased upon Linux-6.16-rc1
>   - Dropped PATCH1 and PATCH2 of v1 series since these are queued
>     as fixes for Linux-6.16
>   - Addressed Atish's comment on PATCH1 in this series
>   - Added new PATCH7 in this series
>
> Anup Patel (12):
>    RISC-V: KVM: Check kvm_riscv_vcpu_alloc_vector_context() return value
>    RISC-V: KVM: Drop the return value of kvm_riscv_vcpu_aia_init()
>    RISC-V: KVM: Rename and move kvm_riscv_local_tlb_sanitize()
>    RISC-V: KVM: Replace KVM_REQ_HFENCE_GVMA_VMID_ALL with
>      KVM_REQ_TLB_FLUSH
>    RISC-V: KVM: Don't flush TLB when PTE is unchanged
>    RISC-V: KVM: Implement kvm_arch_flush_remote_tlbs_range()
>    RISC-V: KVM: Use ncsr_xyz() in kvm_riscv_vcpu_trap_redirect()
>    RISC-V: KVM: Factor-out MMU related declarations into separate headers
>    RISC-V: KVM: Introduce struct kvm_gstage_mapping
>    RISC-V: KVM: Add vmid field to struct kvm_riscv_hfence
>    RISC-V: KVM: Factor-out g-stage page table management
>    RISC-V: KVM: Pass VMID as parameter to kvm_riscv_hfence_xyz() APIs
>
>   arch/riscv/include/asm/kvm_aia.h    |   2 +-
>   arch/riscv/include/asm/kvm_gstage.h |  72 ++++
>   arch/riscv/include/asm/kvm_host.h   | 103 +-----
>   arch/riscv/include/asm/kvm_mmu.h    |  21 ++
>   arch/riscv/include/asm/kvm_tlb.h    |  84 +++++
>   arch/riscv/include/asm/kvm_vmid.h   |  27 ++
>   arch/riscv/kvm/Makefile             |   1 +
>   arch/riscv/kvm/aia_device.c         |   6 +-
>   arch/riscv/kvm/aia_imsic.c          |  12 +-
>   arch/riscv/kvm/gstage.c             | 338 +++++++++++++++++++
>   arch/riscv/kvm/main.c               |   3 +-
>   arch/riscv/kvm/mmu.c                | 499 ++++++----------------------
>   arch/riscv/kvm/tlb.c                | 110 +++---
>   arch/riscv/kvm/vcpu.c               |  26 +-
>   arch/riscv/kvm/vcpu_exit.c          |  20 +-
>   arch/riscv/kvm/vcpu_sbi_replace.c   |  17 +-
>   arch/riscv/kvm/vcpu_sbi_v01.c       |  25 +-
>   arch/riscv/kvm/vm.c                 |   7 +-
>   arch/riscv/kvm/vmid.c               |  25 ++
>   19 files changed, 795 insertions(+), 603 deletions(-)
>   create mode 100644 arch/riscv/include/asm/kvm_gstage.h
>   create mode 100644 arch/riscv/include/asm/kvm_mmu.h
>   create mode 100644 arch/riscv/include/asm/kvm_tlb.h
>   create mode 100644 arch/riscv/include/asm/kvm_vmid.h
>   create mode 100644 arch/riscv/kvm/gstage.c
>
Re: [PATCH v3 00/12] MMU related improvements for KVM RISC-V
Posted by Anup Patel 3 months, 2 weeks ago
On Wed, Jun 18, 2025 at 5:05 PM Anup Patel <apatel@ventanamicro.com> wrote:
>
> This series primarily has various MMU improvements for KVM RISC-V
> and it also serves as a preparatory series for the upcoming nested
> virtualization support.
>
> PATCH1 to PATCH4: Few cosmetic improvements
> PATCH5 to PATCH7: TLB maintenance and SBI NACL related improvements
> PATCH8 to PATCH12: MMU related preparatory work for nested virtualization
>
> These patches can also be found in the riscv_kvm_mmu_imp_v3 branch
> at: https://github.com/avpatel/linux.git
>
> Changes since v2:
>  - Rebased upon Linux-6.16-rc2 and latest riscv_kvm_queue branch
>  - Added Reviewed-by tags to appropriate patches
>
> Changes since v1:
>  - Rebased upon Linux-6.16-rc1
>  - Dropped PATCH1 and PATCH2 of v1 series since these are queued
>    as fixes for Linux-6.16
>  - Addressed Atish's comment on PATCH1 in this series
>  - Added new PATCH7 in this series
>
> Anup Patel (12):
>   RISC-V: KVM: Check kvm_riscv_vcpu_alloc_vector_context() return value
>   RISC-V: KVM: Drop the return value of kvm_riscv_vcpu_aia_init()
>   RISC-V: KVM: Rename and move kvm_riscv_local_tlb_sanitize()
>   RISC-V: KVM: Replace KVM_REQ_HFENCE_GVMA_VMID_ALL with
>     KVM_REQ_TLB_FLUSH
>   RISC-V: KVM: Don't flush TLB when PTE is unchanged
>   RISC-V: KVM: Implement kvm_arch_flush_remote_tlbs_range()
>   RISC-V: KVM: Use ncsr_xyz() in kvm_riscv_vcpu_trap_redirect()
>   RISC-V: KVM: Factor-out MMU related declarations into separate headers
>   RISC-V: KVM: Introduce struct kvm_gstage_mapping
>   RISC-V: KVM: Add vmid field to struct kvm_riscv_hfence
>   RISC-V: KVM: Factor-out g-stage page table management
>   RISC-V: KVM: Pass VMID as parameter to kvm_riscv_hfence_xyz() APIs

Queued this series for Linux-6.17

Thanks,
Anup

>
>  arch/riscv/include/asm/kvm_aia.h    |   2 +-
>  arch/riscv/include/asm/kvm_gstage.h |  72 ++++
>  arch/riscv/include/asm/kvm_host.h   | 103 +-----
>  arch/riscv/include/asm/kvm_mmu.h    |  21 ++
>  arch/riscv/include/asm/kvm_tlb.h    |  84 +++++
>  arch/riscv/include/asm/kvm_vmid.h   |  27 ++
>  arch/riscv/kvm/Makefile             |   1 +
>  arch/riscv/kvm/aia_device.c         |   6 +-
>  arch/riscv/kvm/aia_imsic.c          |  12 +-
>  arch/riscv/kvm/gstage.c             | 338 +++++++++++++++++++
>  arch/riscv/kvm/main.c               |   3 +-
>  arch/riscv/kvm/mmu.c                | 499 ++++++----------------------
>  arch/riscv/kvm/tlb.c                | 110 +++---
>  arch/riscv/kvm/vcpu.c               |  26 +-
>  arch/riscv/kvm/vcpu_exit.c          |  20 +-
>  arch/riscv/kvm/vcpu_sbi_replace.c   |  17 +-
>  arch/riscv/kvm/vcpu_sbi_v01.c       |  25 +-
>  arch/riscv/kvm/vm.c                 |   7 +-
>  arch/riscv/kvm/vmid.c               |  25 ++
>  19 files changed, 795 insertions(+), 603 deletions(-)
>  create mode 100644 arch/riscv/include/asm/kvm_gstage.h
>  create mode 100644 arch/riscv/include/asm/kvm_mmu.h
>  create mode 100644 arch/riscv/include/asm/kvm_tlb.h
>  create mode 100644 arch/riscv/include/asm/kvm_vmid.h
>  create mode 100644 arch/riscv/kvm/gstage.c
>
> --
> 2.43.0
>