KVM: Updates
cover KVM: Updates
A cleanup and two AMD SVM fixes (the STAR MSR on 32-bit hosts, and the floating point unit state on all AMD hosts).
Signature · 8 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
PATCH 1/3 KVM: Disallow the kvm-amd module on intel hardware, and vice versa
They're not on speaking terms.
drivers/kvm/svm.c +2 -3
@@ -377,6 +377,7 @@ static __init int svm_hardware_setup(voivoid *msrpm_va;int r; +kvm_emulator_want_group7_invlpg (); iopm_pages =alloc_pages (GFP_KERNEL ,IOPM_ALLOC_ORDER );
@@ -1628,9 +1629,7 @@ static struct kvm_arch_ops svm_arch_opsstatic int __init svm_init (void ) { -kvm_emulator_want_group7_invlpg (); -kvm_init_arch (&svm_arch_ops,THIS_MODULE ); -return 0 ; +return kvm_init_arch (&svm_arch_ops,THIS_MODULE ); } static void __exit svm_exit(void)
drivers/kvm/vmx.c +1 -2
@@ -2000,8 +2000,7 @@ static struct kvm_arch_ops vmx_arch_opsstatic int __init vmx_init (void ) { -kvm_init_arch (&vmx_arch_ops,THIS_MODULE ); -return 0 ; +return kvm_init_arch (&vmx_arch_ops,THIS_MODULE ); } static void __exit vmx_exit(void)
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
Re: [PATCH 1/3] KVM: Disallow the kvm-amd module on intel hardware, and vice versa
Quoted 3 lines · Avi Kivity
They're not on speaking terms.
Please disregard - this patch was already sent. Slippery fingers.
Signature · 8 lines
error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
PATCH 1/3 KVM: add valid_vcpu() helper
In reply to Avi KivityFrom: James Morris <jmorris-gx6/[email protected]>
Consolidate the logic for checking whether a vcpu index is valid. Also, use likely(), as a valid value should be the overwhelmingly common case.
drivers/kvm/kvm_main.c +14 -9
@@ -113,6 +113,11 @@ unsigned long segment_base(u16 selector) }EXPORT_SYMBOL_GPL (segment_base); +static inline int valid_vcpu (int n) +{ +return likely (n >=0 && n <KVM_MAX_VCPUS ); +} + int kvm_read_guest(struct kvm_vcpu *vcpu, gva_t addr, unsigned long size,
@@ -494,7 +499,7 @@ static int kvm_dev_ioctl_create_vcpu(strstruct kvm_vcpu *vcpu; r = -EINVAL ; -if (n <0 || n >=KVM_MAX_VCPUS ) +if (!valid_vcpu (n)) goto out; vcpu = &kvm->vcpus[n];
@@ -1179,7 +1184,7 @@ static int kvm_dev_ioctl_run(struct kvmstruct kvm_vcpu *vcpu;int r; -if (kvm_run->vcpu <0 || kvm_run->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (kvm_run->vcpu))return -EINVAL ; vcpu =vcpu_load (kvm, kvm_run->vcpu);
@@ -1208,7 +1213,7 @@ static int kvm_dev_ioctl_get_regs(struct {struct kvm_vcpu *vcpu; -if (regs->vcpu <0 || regs->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (regs->vcpu))return -EINVAL ; vcpu =vcpu_load (kvm, regs->vcpu);
@@ -1254,7 +1259,7 @@ static int kvm_dev_ioctl_set_regs(struct {struct kvm_vcpu *vcpu; -if (regs->vcpu <0 || regs->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (regs->vcpu))return -EINVAL ; vcpu =vcpu_load (kvm, regs->vcpu);
@@ -1301,7 +1306,7 @@ static int kvm_dev_ioctl_get_sregs(strucstruct kvm_vcpu *vcpu;struct descriptor_table dt; -if (sregs->vcpu <0 || sregs->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (sregs->vcpu))return -EINVAL ; vcpu =vcpu_load (kvm, sregs->vcpu);if (!vcpu)
@@ -1353,7 +1358,7 @@ static int kvm_dev_ioctl_set_sregs(strucint i;struct descriptor_table dt; -if (sregs->vcpu <0 || sregs->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (sregs->vcpu))return -EINVAL ; vcpu =vcpu_load (kvm, sregs->vcpu);if (!vcpu)
@@ -1444,7 +1449,7 @@ static int __msr_io(struct kvm *kvm, strstruct kvm_vcpu *vcpu;int i; -if (msrs->vcpu <0 || msrs->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (msrs->vcpu))return -EINVAL ; vcpu =vcpu_load (kvm, msrs->vcpu);
@@ -1537,7 +1542,7 @@ static int kvm_dev_ioctl_interrupt(struc {struct kvm_vcpu *vcpu; -if (irq->vcpu <0 || irq->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (irq->vcpu))return -EINVAL ;if (irq->irq <0 || irq->irq >=256 )return -EINVAL ;
@@ -1559,7 +1564,7 @@ static int kvm_dev_ioctl_debug_guest(strstruct kvm_vcpu *vcpu;int r; -if (dbg->vcpu <0 || dbg->vcpu >=KVM_MAX_VCPUS ) +if (!valid_vcpu (dbg->vcpu))return -EINVAL ; vcpu =vcpu_load (kvm, dbg->vcpu);if (!vcpu)
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
PATCH 2/3 KVM: AMD SVM: handle MSR_STAR in 32-bit mode
In reply to Avi KivityThis is necessary for linux guests.
drivers/kvm/svm.c +5 -5
@@ -402,11 +402,11 @@ static __init int svm_hardware_setup(voiset_msr_interception (msrpm_va,MSR_GS_BASE ,1 ,1 );set_msr_interception (msrpm_va,MSR_FS_BASE ,1 ,1 );set_msr_interception (msrpm_va,MSR_KERNEL_GS_BASE ,1 ,1 ); -set_msr_interception (msrpm_va,MSR_STAR ,1 ,1 );set_msr_interception (msrpm_va,MSR_LSTAR ,1 ,1 );set_msr_interception (msrpm_va,MSR_CSTAR ,1 ,1 );set_msr_interception (msrpm_va,MSR_SYSCALL_MASK ,1 ,1 );#endif +set_msr_interception (msrpm_va,MSR_K6_STAR ,1 ,1 );set_msr_interception (msrpm_va,MSR_IA32_SYSENTER_CS ,1 ,1 );set_msr_interception (msrpm_va,MSR_IA32_SYSENTER_ESP ,1 ,1 );set_msr_interception (msrpm_va,MSR_IA32_SYSENTER_EIP ,1 ,1 );
@@ -1098,10 +1098,10 @@ static int svm_get_msr(struct kvm_vcpu *case MSR_IA32_APICBASE : *data = vcpu->apic_base;break ; -#ifdef CONFIG_X86_64 -case MSR_STAR : +case MSR_K6_STAR : *data = vcpu->svm->vmcb->save.star;break ; +#ifdef CONFIG_X86_64 case MSR_LSTAR : *data = vcpu->svm->vmcb->save.lstar;break ;
@@ -1173,10 +1173,10 @@ static int svm_set_msr(struct kvm_vcpu *case MSR_IA32_APICBASE : vcpu->apic_base = data;break ; -#ifdef CONFIG_X86_64_ -case MSR_STAR : +case MSR_K6_STAR : vcpu->svm->vmcb->save.star = data;break ; +#ifdef CONFIG_X86_64_ case MSR_LSTAR : vcpu->svm->vmcb->save.lstar = data;break ;
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
PATCH 3/3 KVM: AMD SVM: Save and restore the floating point unit state
In reply to Avi KivityFixes sf bug 1614113 (segfaults in nbench).
drivers/kvm/svm.c +9 -0
@@ -575,6 +575,8 @@ static int svm_create_vcpu(struct kvm_vcmemset (vcpu->svm->db_regs,0 ,sizeof (vcpu->svm->db_regs));init_vmcb (vcpu->svm->vmcb); +fx_init (vcpu); +return 0 ; out2:
@@ -1387,6 +1389,10 @@ again:save_db_regs (vcpu->svm->host_db_regs);load_db_regs (vcpu->svm->db_regs); } + +fx_save (vcpu->host_fx_image); +fx_restore (vcpu->guest_fx_image); + asm volatile (#ifdef CONFIG_X86_64 "push %%rbx; push %%rcx; push %%rdx;"
@@ -1496,6 +1502,9 @@ again:#endif : "cc", "memory" ); +fx_save (vcpu->guest_fx_image); +fx_restore (vcpu->host_fx_image); +if ((vcpu->svm->vmcb->save.dr7 &0xff ))load_db_regs (vcpu->svm->host_db_regs);
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV