aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/kvm/kvm_main.c21
-rw-r--r--drivers/kvm/paging_tmpl.h3
-rw-r--r--drivers/kvm/svm.c10
-rw-r--r--drivers/kvm/vmx.c4
4 files changed, 15 insertions, 23 deletions
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index 0a96c2c7e191..13a99cac3679 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -126,10 +126,8 @@ static inline int valid_vcpu(int n)
126 return likely(n >= 0 && n < KVM_MAX_VCPUS); 126 return likely(n >= 0 && n < KVM_MAX_VCPUS);
127} 127}
128 128
129int kvm_read_guest(struct kvm_vcpu *vcpu, 129int kvm_read_guest(struct kvm_vcpu *vcpu, gva_t addr, unsigned long size,
130 gva_t addr, 130 void *dest)
131 unsigned long size,
132 void *dest)
133{ 131{
134 unsigned char *host_buf = dest; 132 unsigned char *host_buf = dest;
135 unsigned long req_size = size; 133 unsigned long req_size = size;
@@ -161,10 +159,8 @@ int kvm_read_guest(struct kvm_vcpu *vcpu,
161} 159}
162EXPORT_SYMBOL_GPL(kvm_read_guest); 160EXPORT_SYMBOL_GPL(kvm_read_guest);
163 161
164int kvm_write_guest(struct kvm_vcpu *vcpu, 162int kvm_write_guest(struct kvm_vcpu *vcpu, gva_t addr, unsigned long size,
165 gva_t addr, 163 void *data)
166 unsigned long size,
167 void *data)
168{ 164{
169 unsigned char *host_buf = data; 165 unsigned char *host_buf = data;
170 unsigned long req_size = size; 166 unsigned long req_size = size;
@@ -457,7 +453,7 @@ EXPORT_SYMBOL_GPL(set_cr4);
457void set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3) 453void set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
458{ 454{
459 if (is_long_mode(vcpu)) { 455 if (is_long_mode(vcpu)) {
460 if ( cr3 & CR3_L_MODE_RESEVED_BITS) { 456 if (cr3 & CR3_L_MODE_RESEVED_BITS) {
461 printk(KERN_DEBUG "set_cr3: #GP, reserved bits\n"); 457 printk(KERN_DEBUG "set_cr3: #GP, reserved bits\n");
462 inject_gp(vcpu); 458 inject_gp(vcpu);
463 return; 459 return;
@@ -774,7 +770,6 @@ static int kvm_dev_ioctl_get_dirty_log(struct kvm *kvm,
774 if (copy_to_user(log->dirty_bitmap, memslot->dirty_bitmap, n)) 770 if (copy_to_user(log->dirty_bitmap, memslot->dirty_bitmap, n))
775 goto out; 771 goto out;
776 772
777
778 if (any) { 773 if (any) {
779 cleared = 0; 774 cleared = 0;
780 for (i = 0; i < KVM_MAX_VCPUS; ++i) { 775 for (i = 0; i < KVM_MAX_VCPUS; ++i) {
@@ -903,8 +898,9 @@ static int emulator_read_emulated(unsigned long addr,
903 return X86EMUL_CONTINUE; 898 return X86EMUL_CONTINUE;
904 else { 899 else {
905 gpa_t gpa = vcpu->mmu.gva_to_gpa(vcpu, addr); 900 gpa_t gpa = vcpu->mmu.gva_to_gpa(vcpu, addr);
901
906 if (gpa == UNMAPPED_GVA) 902 if (gpa == UNMAPPED_GVA)
907 return vcpu_printf(vcpu, "not present\n"), X86EMUL_PROPAGATE_FAULT; 903 return X86EMUL_PROPAGATE_FAULT;
908 vcpu->mmio_needed = 1; 904 vcpu->mmio_needed = 1;
909 vcpu->mmio_phys_addr = gpa; 905 vcpu->mmio_phys_addr = gpa;
910 vcpu->mmio_size = bytes; 906 vcpu->mmio_size = bytes;
@@ -1801,12 +1797,11 @@ static long kvm_dev_ioctl(struct file *filp,
1801 case KVM_GET_API_VERSION: 1797 case KVM_GET_API_VERSION:
1802 r = KVM_API_VERSION; 1798 r = KVM_API_VERSION;
1803 break; 1799 break;
1804 case KVM_CREATE_VCPU: { 1800 case KVM_CREATE_VCPU:
1805 r = kvm_dev_ioctl_create_vcpu(kvm, arg); 1801 r = kvm_dev_ioctl_create_vcpu(kvm, arg);
1806 if (r) 1802 if (r)
1807 goto out; 1803 goto out;
1808 break; 1804 break;
1809 }
1810 case KVM_RUN: { 1805 case KVM_RUN: {
1811 struct kvm_run kvm_run; 1806 struct kvm_run kvm_run;
1812 1807
diff --git a/drivers/kvm/paging_tmpl.h b/drivers/kvm/paging_tmpl.h
index 6507ccb1ea2a..f3bcee904651 100644
--- a/drivers/kvm/paging_tmpl.h
+++ b/drivers/kvm/paging_tmpl.h
@@ -441,9 +441,8 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr,
441 /* 441 /*
442 * mmio: emulate if accessible, otherwise its a guest fault. 442 * mmio: emulate if accessible, otherwise its a guest fault.
443 */ 443 */
444 if (is_io_pte(*shadow_pte)) { 444 if (is_io_pte(*shadow_pte))
445 return 1; 445 return 1;
446 }
447 446
448 ++kvm_stat.pf_fixed; 447 ++kvm_stat.pf_fixed;
449 kvm_mmu_audit(vcpu, "post page fault (fixed)"); 448 kvm_mmu_audit(vcpu, "post page fault (fixed)");
diff --git a/drivers/kvm/svm.c b/drivers/kvm/svm.c
index 83da4ea150a3..31836444bc62 100644
--- a/drivers/kvm/svm.c
+++ b/drivers/kvm/svm.c
@@ -1042,22 +1042,22 @@ static int io_interception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1042 1042
1043 addr_mask = io_adress(vcpu, _in, &kvm_run->io.address); 1043 addr_mask = io_adress(vcpu, _in, &kvm_run->io.address);
1044 if (!addr_mask) { 1044 if (!addr_mask) {
1045 printk(KERN_DEBUG "%s: get io address failed\n", __FUNCTION__); 1045 printk(KERN_DEBUG "%s: get io address failed\n",
1046 __FUNCTION__);
1046 return 1; 1047 return 1;
1047 } 1048 }
1048 1049
1049 if (kvm_run->io.rep) { 1050 if (kvm_run->io.rep) {
1050 kvm_run->io.count = vcpu->regs[VCPU_REGS_RCX] & addr_mask; 1051 kvm_run->io.count
1052 = vcpu->regs[VCPU_REGS_RCX] & addr_mask;
1051 kvm_run->io.string_down = (vcpu->svm->vmcb->save.rflags 1053 kvm_run->io.string_down = (vcpu->svm->vmcb->save.rflags
1052 & X86_EFLAGS_DF) != 0; 1054 & X86_EFLAGS_DF) != 0;
1053 } 1055 }
1054 } else { 1056 } else
1055 kvm_run->io.value = vcpu->svm->vmcb->save.rax; 1057 kvm_run->io.value = vcpu->svm->vmcb->save.rax;
1056 }
1057 return 0; 1058 return 0;
1058} 1059}
1059 1060
1060
1061static int nop_on_interception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) 1061static int nop_on_interception(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1062{ 1062{
1063 return 1; 1063 return 1;
diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
index fd4e91734388..ff3bfc5c390a 100644
--- a/drivers/kvm/vmx.c
+++ b/drivers/kvm/vmx.c
@@ -27,7 +27,6 @@
27 27
28#include "segment_descriptor.h" 28#include "segment_descriptor.h"
29 29
30
31MODULE_AUTHOR("Qumranet"); 30MODULE_AUTHOR("Qumranet");
32MODULE_LICENSE("GPL"); 31MODULE_LICENSE("GPL");
33 32
@@ -418,10 +417,9 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data)
418 case MSR_IA32_SYSENTER_ESP: 417 case MSR_IA32_SYSENTER_ESP:
419 vmcs_write32(GUEST_SYSENTER_ESP, data); 418 vmcs_write32(GUEST_SYSENTER_ESP, data);
420 break; 419 break;
421 case MSR_IA32_TIME_STAMP_COUNTER: { 420 case MSR_IA32_TIME_STAMP_COUNTER:
422 guest_write_tsc(data); 421 guest_write_tsc(data);
423 break; 422 break;
424 }
425 default: 423 default:
426 msr = find_msr_entry(vcpu, msr_index); 424 msr = find_msr_entry(vcpu, msr_index);
427 if (msr) { 425 if (msr) {