diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-13 11:42:32 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-13 11:42:32 -0400 |
| commit | e7654c1e49b8fd79baa8616f601c620013a027c1 (patch) | |
| tree | da8e870c89229624654129fb27b4e53d50fda0e1 | |
| parent | 91f68c89d8f35fe98ea04159b9a3b42d0149478f (diff) | |
| parent | 37e41afa97307a3e54b200a5c9179ada1632a844 (diff) | |
Merge git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull a couple of KVM fixes from Avi Kivity:
"One is an adjustment for an irq layer change that affected device
assignment, the other a one-liner ppc fix."
* git://git.kernel.org/pub/scm/virt/kvm/kvm:
powerpc/kvm: Fix "PR" KVM implementation of H_CEDE
KVM: Fix device assignment threaded irq handler
| -rw-r--r-- | arch/powerpc/kvm/book3s_pr_papr.c | 1 | ||||
| -rw-r--r-- | virt/kvm/assigned-dev.c | 15 |
2 files changed, 14 insertions, 2 deletions
diff --git a/arch/powerpc/kvm/book3s_pr_papr.c b/arch/powerpc/kvm/book3s_pr_papr.c index 3ff9013d6e79..ee02b30878ed 100644 --- a/arch/powerpc/kvm/book3s_pr_papr.c +++ b/arch/powerpc/kvm/book3s_pr_papr.c | |||
| @@ -241,6 +241,7 @@ int kvmppc_h_pr(struct kvm_vcpu *vcpu, unsigned long cmd) | |||
| 241 | case H_PUT_TCE: | 241 | case H_PUT_TCE: |
| 242 | return kvmppc_h_pr_put_tce(vcpu); | 242 | return kvmppc_h_pr_put_tce(vcpu); |
| 243 | case H_CEDE: | 243 | case H_CEDE: |
| 244 | vcpu->arch.shared->msr |= MSR_EE; | ||
| 244 | kvm_vcpu_block(vcpu); | 245 | kvm_vcpu_block(vcpu); |
| 245 | clear_bit(KVM_REQ_UNHALT, &vcpu->requests); | 246 | clear_bit(KVM_REQ_UNHALT, &vcpu->requests); |
| 246 | vcpu->stat.halt_wakeup++; | 247 | vcpu->stat.halt_wakeup++; |
diff --git a/virt/kvm/assigned-dev.c b/virt/kvm/assigned-dev.c index b1e091ae2f37..23a41a9f8db9 100644 --- a/virt/kvm/assigned-dev.c +++ b/virt/kvm/assigned-dev.c | |||
| @@ -334,6 +334,11 @@ static int assigned_device_enable_host_intx(struct kvm *kvm, | |||
| 334 | } | 334 | } |
| 335 | 335 | ||
| 336 | #ifdef __KVM_HAVE_MSI | 336 | #ifdef __KVM_HAVE_MSI |
| 337 | static irqreturn_t kvm_assigned_dev_msi(int irq, void *dev_id) | ||
| 338 | { | ||
| 339 | return IRQ_WAKE_THREAD; | ||
| 340 | } | ||
| 341 | |||
| 337 | static int assigned_device_enable_host_msi(struct kvm *kvm, | 342 | static int assigned_device_enable_host_msi(struct kvm *kvm, |
| 338 | struct kvm_assigned_dev_kernel *dev) | 343 | struct kvm_assigned_dev_kernel *dev) |
| 339 | { | 344 | { |
| @@ -346,7 +351,7 @@ static int assigned_device_enable_host_msi(struct kvm *kvm, | |||
| 346 | } | 351 | } |
| 347 | 352 | ||
| 348 | dev->host_irq = dev->dev->irq; | 353 | dev->host_irq = dev->dev->irq; |
| 349 | if (request_threaded_irq(dev->host_irq, NULL, | 354 | if (request_threaded_irq(dev->host_irq, kvm_assigned_dev_msi, |
| 350 | kvm_assigned_dev_thread_msi, 0, | 355 | kvm_assigned_dev_thread_msi, 0, |
| 351 | dev->irq_name, dev)) { | 356 | dev->irq_name, dev)) { |
| 352 | pci_disable_msi(dev->dev); | 357 | pci_disable_msi(dev->dev); |
| @@ -358,6 +363,11 @@ static int assigned_device_enable_host_msi(struct kvm *kvm, | |||
| 358 | #endif | 363 | #endif |
| 359 | 364 | ||
| 360 | #ifdef __KVM_HAVE_MSIX | 365 | #ifdef __KVM_HAVE_MSIX |
| 366 | static irqreturn_t kvm_assigned_dev_msix(int irq, void *dev_id) | ||
| 367 | { | ||
| 368 | return IRQ_WAKE_THREAD; | ||
| 369 | } | ||
| 370 | |||
| 361 | static int assigned_device_enable_host_msix(struct kvm *kvm, | 371 | static int assigned_device_enable_host_msix(struct kvm *kvm, |
| 362 | struct kvm_assigned_dev_kernel *dev) | 372 | struct kvm_assigned_dev_kernel *dev) |
| 363 | { | 373 | { |
| @@ -374,7 +384,8 @@ static int assigned_device_enable_host_msix(struct kvm *kvm, | |||
| 374 | 384 | ||
| 375 | for (i = 0; i < dev->entries_nr; i++) { | 385 | for (i = 0; i < dev->entries_nr; i++) { |
| 376 | r = request_threaded_irq(dev->host_msix_entries[i].vector, | 386 | r = request_threaded_irq(dev->host_msix_entries[i].vector, |
| 377 | NULL, kvm_assigned_dev_thread_msix, | 387 | kvm_assigned_dev_msix, |
| 388 | kvm_assigned_dev_thread_msix, | ||
| 378 | 0, dev->irq_name, dev); | 389 | 0, dev->irq_name, dev); |
| 379 | if (r) | 390 | if (r) |
| 380 | goto err; | 391 | goto err; |
