diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-06 14:16:23 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-06 14:16:23 -0400 |
| commit | 1b40a895df6c7d5a80e71f65674060b03d84bbef (patch) | |
| tree | cf79bd75779139d4fe5b247f909eb8974f1d9117 | |
| parent | 97f8571e663c808ad2d01a396627235167291556 (diff) | |
| parent | 35baff256d8fe1eec0b8988fcb5cde80df7bfa1a (diff) | |
Merge branch 'kvm-updates-2.6.26' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm
* 'kvm-updates-2.6.26' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm:
KVM: IOAPIC: Fix level-triggered irq injection hang
x86: KVM guest: Add memory clobber to hypercalls
| -rw-r--r-- | include/asm-x86/kvm_para.h | 15 | ||||
| -rw-r--r-- | virt/kvm/ioapic.c | 2 |
2 files changed, 11 insertions, 6 deletions
diff --git a/include/asm-x86/kvm_para.h b/include/asm-x86/kvm_para.h index bfd9900742bf..76f392146daa 100644 --- a/include/asm-x86/kvm_para.h +++ b/include/asm-x86/kvm_para.h | |||
| @@ -71,7 +71,8 @@ static inline long kvm_hypercall0(unsigned int nr) | |||
| 71 | long ret; | 71 | long ret; |
| 72 | asm volatile(KVM_HYPERCALL | 72 | asm volatile(KVM_HYPERCALL |
| 73 | : "=a"(ret) | 73 | : "=a"(ret) |
| 74 | : "a"(nr)); | 74 | : "a"(nr) |
| 75 | : "memory"); | ||
| 75 | return ret; | 76 | return ret; |
| 76 | } | 77 | } |
| 77 | 78 | ||
| @@ -80,7 +81,8 @@ static inline long kvm_hypercall1(unsigned int nr, unsigned long p1) | |||
| 80 | long ret; | 81 | long ret; |
| 81 | asm volatile(KVM_HYPERCALL | 82 | asm volatile(KVM_HYPERCALL |
| 82 | : "=a"(ret) | 83 | : "=a"(ret) |
| 83 | : "a"(nr), "b"(p1)); | 84 | : "a"(nr), "b"(p1) |
| 85 | : "memory"); | ||
| 84 | return ret; | 86 | return ret; |
| 85 | } | 87 | } |
| 86 | 88 | ||
| @@ -90,7 +92,8 @@ static inline long kvm_hypercall2(unsigned int nr, unsigned long p1, | |||
| 90 | long ret; | 92 | long ret; |
| 91 | asm volatile(KVM_HYPERCALL | 93 | asm volatile(KVM_HYPERCALL |
| 92 | : "=a"(ret) | 94 | : "=a"(ret) |
| 93 | : "a"(nr), "b"(p1), "c"(p2)); | 95 | : "a"(nr), "b"(p1), "c"(p2) |
| 96 | : "memory"); | ||
| 94 | return ret; | 97 | return ret; |
| 95 | } | 98 | } |
| 96 | 99 | ||
| @@ -100,7 +103,8 @@ static inline long kvm_hypercall3(unsigned int nr, unsigned long p1, | |||
| 100 | long ret; | 103 | long ret; |
| 101 | asm volatile(KVM_HYPERCALL | 104 | asm volatile(KVM_HYPERCALL |
| 102 | : "=a"(ret) | 105 | : "=a"(ret) |
| 103 | : "a"(nr), "b"(p1), "c"(p2), "d"(p3)); | 106 | : "a"(nr), "b"(p1), "c"(p2), "d"(p3) |
| 107 | : "memory"); | ||
| 104 | return ret; | 108 | return ret; |
| 105 | } | 109 | } |
| 106 | 110 | ||
| @@ -111,7 +115,8 @@ static inline long kvm_hypercall4(unsigned int nr, unsigned long p1, | |||
| 111 | long ret; | 115 | long ret; |
| 112 | asm volatile(KVM_HYPERCALL | 116 | asm volatile(KVM_HYPERCALL |
| 113 | : "=a"(ret) | 117 | : "=a"(ret) |
| 114 | : "a"(nr), "b"(p1), "c"(p2), "d"(p3), "S"(p4)); | 118 | : "a"(nr), "b"(p1), "c"(p2), "d"(p3), "S"(p4) |
| 119 | : "memory"); | ||
| 115 | return ret; | 120 | return ret; |
| 116 | } | 121 | } |
| 117 | 122 | ||
diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c index 1dcf9f3d1107..44589088941f 100644 --- a/virt/kvm/ioapic.c +++ b/virt/kvm/ioapic.c | |||
| @@ -278,7 +278,7 @@ static void __kvm_ioapic_update_eoi(struct kvm_ioapic *ioapic, int gsi) | |||
| 278 | 278 | ||
| 279 | ent->fields.remote_irr = 0; | 279 | ent->fields.remote_irr = 0; |
| 280 | if (!ent->fields.mask && (ioapic->irr & (1 << gsi))) | 280 | if (!ent->fields.mask && (ioapic->irr & (1 << gsi))) |
| 281 | ioapic_deliver(ioapic, gsi); | 281 | ioapic_service(ioapic, gsi); |
| 282 | } | 282 | } |
| 283 | 283 | ||
| 284 | void kvm_ioapic_update_eoi(struct kvm *kvm, int vector) | 284 | void kvm_ioapic_update_eoi(struct kvm *kvm, int vector) |
