LoongArch: KVM: Implement kvm hardware enable, disable interface
Implement kvm hardware enable, disable interface, setting the guest config register to enable virtualization features when called the interface. Reviewed-by: Bibo Mao <maobibo@loongson.cn> Tested-by: Huacai Chen <chenhuacai@loongson.cn> Signed-off-by: Tianrui Zhao <zhaotianrui@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
2bd6ac6872
commit
0d0df3c99d
1 changed files with 62 additions and 0 deletions
|
@ -249,6 +249,68 @@ void kvm_check_vpid(struct kvm_vcpu *vcpu)
|
|||
change_csr_gstat(vpid_mask << CSR_GSTAT_GID_SHIFT, vpid);
|
||||
}
|
||||
|
||||
void kvm_init_vmcs(struct kvm *kvm)
|
||||
{
|
||||
kvm->arch.vmcs = vmcs;
|
||||
}
|
||||
|
||||
long kvm_arch_dev_ioctl(struct file *filp,
|
||||
unsigned int ioctl, unsigned long arg)
|
||||
{
|
||||
return -ENOIOCTLCMD;
|
||||
}
|
||||
|
||||
int kvm_arch_hardware_enable(void)
|
||||
{
|
||||
unsigned long env, gcfg = 0;
|
||||
|
||||
env = read_csr_gcfg();
|
||||
|
||||
/* First init gcfg, gstat, gintc, gtlbc. All guest use the same config */
|
||||
write_csr_gcfg(0);
|
||||
write_csr_gstat(0);
|
||||
write_csr_gintc(0);
|
||||
clear_csr_gtlbc(CSR_GTLBC_USETGID | CSR_GTLBC_TOTI);
|
||||
|
||||
/*
|
||||
* Enable virtualization features granting guest direct control of
|
||||
* certain features:
|
||||
* GCI=2: Trap on init or unimplement cache instruction.
|
||||
* TORU=0: Trap on Root Unimplement.
|
||||
* CACTRL=1: Root control cache.
|
||||
* TOP=0: Trap on Previlege.
|
||||
* TOE=0: Trap on Exception.
|
||||
* TIT=0: Trap on Timer.
|
||||
*/
|
||||
if (env & CSR_GCFG_GCIP_ALL)
|
||||
gcfg |= CSR_GCFG_GCI_SECURE;
|
||||
if (env & CSR_GCFG_MATC_ROOT)
|
||||
gcfg |= CSR_GCFG_MATC_ROOT;
|
||||
|
||||
gcfg |= CSR_GCFG_TIT;
|
||||
write_csr_gcfg(gcfg);
|
||||
|
||||
kvm_flush_tlb_all();
|
||||
|
||||
/* Enable using TGID */
|
||||
set_csr_gtlbc(CSR_GTLBC_USETGID);
|
||||
kvm_debug("GCFG:%lx GSTAT:%lx GINTC:%lx GTLBC:%lx",
|
||||
read_csr_gcfg(), read_csr_gstat(), read_csr_gintc(), read_csr_gtlbc());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void kvm_arch_hardware_disable(void)
|
||||
{
|
||||
write_csr_gcfg(0);
|
||||
write_csr_gstat(0);
|
||||
write_csr_gintc(0);
|
||||
clear_csr_gtlbc(CSR_GTLBC_USETGID | CSR_GTLBC_TOTI);
|
||||
|
||||
/* Flush any remaining guest TLB entries */
|
||||
kvm_flush_tlb_all();
|
||||
}
|
||||
|
||||
static int kvm_loongarch_env_init(void)
|
||||
{
|
||||
int cpu, order;
|
||||
|
|
Loading…
Add table
Reference in a new issue