xref: /linux/arch/riscv/include/asm/kvm_vmid.h (revision 22c55fb9eb92395d999b8404d73e58540d11bdd8)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2025 Ventana Micro Systems Inc.
4  */
5 
6 #ifndef __RISCV_KVM_VMID_H_
7 #define __RISCV_KVM_VMID_H_
8 
9 #include <linux/kvm_types.h>
10 
11 struct kvm_vmid {
12 	/*
13 	 * Writes to vmid_version and vmid happen with vmid_lock held
14 	 * whereas reads happen without any lock held.
15 	 */
16 	unsigned long vmid_version;
17 	unsigned long vmid;
18 };
19 
20 void __init kvm_riscv_gstage_vmid_detect(void);
21 unsigned long kvm_riscv_gstage_vmid_bits(void);
22 int kvm_riscv_gstage_vmid_init(struct kvm *kvm);
23 bool kvm_riscv_gstage_vmid_ver_changed(struct kvm_vmid *vmid);
24 void kvm_riscv_gstage_vmid_update(struct kvm_vcpu *vcpu);
25 void kvm_riscv_gstage_vmid_sanitize(struct kvm_vcpu *vcpu);
26 
27 #endif
28