[x86] KVM: remove isr_ack logic from PIC (Closes: #612105)
svn path=/dists/sid/linux-2.6/; revision=17123
This commit is contained in:
parent
b075265258
commit
e39613cd72
|
@ -17,6 +17,7 @@ linux-2.6 (2.6.38-2) UNRELEASED; urgency=low
|
||||||
http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.38.1
|
http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.38.1
|
||||||
* radeon: Add some sanity checks to obj info record parsing, thanks
|
* radeon: Add some sanity checks to obj info record parsing, thanks
|
||||||
to John Lindgren (Closes: #618847)
|
to John Lindgren (Closes: #618847)
|
||||||
|
* [x86] KVM: remove isr_ack logic from PIC (Closes: #612105)
|
||||||
|
|
||||||
[ Jurij Smakov ]
|
[ Jurij Smakov ]
|
||||||
* Bump CONFIG_NR_CPUS on sparc to 256 to accomodate T2+ machines
|
* Bump CONFIG_NR_CPUS on sparc to 256 to accomodate T2+ machines
|
||||||
|
|
|
@ -0,0 +1,120 @@
|
||||||
|
From: Gleb Natapov <gleb@redhat.com>
|
||||||
|
Date: Wed, 9 Feb 2011 12:09:46 +0200
|
||||||
|
Subject: [PATCH] KVM: remove isr_ack logic from PIC
|
||||||
|
|
||||||
|
commit 7049467b5383432e178cc4124e53aebd83638916 upstream.
|
||||||
|
|
||||||
|
isr_ack logic was added by e48258009d to avoid unnecessary IPIs. Back
|
||||||
|
then it made sense, but now the code checks that vcpu is ready to accept
|
||||||
|
interrupt before sending IPI, so this logic is no longer needed. The
|
||||||
|
patch removes it.
|
||||||
|
|
||||||
|
Fixes a regression with Debian/Hurd.
|
||||||
|
|
||||||
|
Signed-off-by: Gleb Natapov <gleb@redhat.com>
|
||||||
|
Reported-and-tested-by: Jonathan Nieder <jrnieder@gmail.com>
|
||||||
|
Signed-off-by: Avi Kivity <avi@redhat.com>
|
||||||
|
---
|
||||||
|
arch/x86/kvm/i8259.c | 25 ++-----------------------
|
||||||
|
arch/x86/kvm/x86.c | 4 ----
|
||||||
|
2 files changed, 2 insertions(+), 27 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
|
||||||
|
index 3cece05..19fe855 100644
|
||||||
|
--- a/arch/x86/kvm/i8259.c
|
||||||
|
+++ b/arch/x86/kvm/i8259.c
|
||||||
|
@@ -62,9 +62,6 @@ static void pic_unlock(struct kvm_pic *s)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
- found = s->kvm->bsp_vcpu;
|
||||||
|
-
|
||||||
|
- if (!found)
|
||||||
|
return;
|
||||||
|
|
||||||
|
kvm_make_request(KVM_REQ_EVENT, found);
|
||||||
|
@@ -75,7 +72,6 @@ static void pic_unlock(struct kvm_pic *s)
|
||||||
|
static void pic_clear_isr(struct kvm_kpic_state *s, int irq)
|
||||||
|
{
|
||||||
|
s->isr &= ~(1 << irq);
|
||||||
|
- s->isr_ack |= (1 << irq);
|
||||||
|
if (s != &s->pics_state->pics[0])
|
||||||
|
irq += 8;
|
||||||
|
/*
|
||||||
|
@@ -89,16 +85,6 @@ static void pic_clear_isr(struct kvm_kpic_state *s, int irq)
|
||||||
|
pic_lock(s->pics_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
-void kvm_pic_clear_isr_ack(struct kvm *kvm)
|
||||||
|
-{
|
||||||
|
- struct kvm_pic *s = pic_irqchip(kvm);
|
||||||
|
-
|
||||||
|
- pic_lock(s);
|
||||||
|
- s->pics[0].isr_ack = 0xff;
|
||||||
|
- s->pics[1].isr_ack = 0xff;
|
||||||
|
- pic_unlock(s);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* set irq level. If an edge is detected, then the IRR is set to 1
|
||||||
|
*/
|
||||||
|
@@ -281,7 +267,6 @@ void kvm_pic_reset(struct kvm_kpic_state *s)
|
||||||
|
s->irr = 0;
|
||||||
|
s->imr = 0;
|
||||||
|
s->isr = 0;
|
||||||
|
- s->isr_ack = 0xff;
|
||||||
|
s->priority_add = 0;
|
||||||
|
s->irq_base = 0;
|
||||||
|
s->read_reg_select = 0;
|
||||||
|
@@ -545,15 +530,11 @@ static int picdev_read(struct kvm_io_device *this,
|
||||||
|
*/
|
||||||
|
static void pic_irq_request(struct kvm *kvm, int level)
|
||||||
|
{
|
||||||
|
- struct kvm_vcpu *vcpu = kvm->bsp_vcpu;
|
||||||
|
struct kvm_pic *s = pic_irqchip(kvm);
|
||||||
|
- int irq = pic_get_irq(&s->pics[0]);
|
||||||
|
|
||||||
|
- s->output = level;
|
||||||
|
- if (vcpu && level && (s->pics[0].isr_ack & (1 << irq))) {
|
||||||
|
- s->pics[0].isr_ack &= ~(1 << irq);
|
||||||
|
+ if (!s->output)
|
||||||
|
s->wakeup_needed = true;
|
||||||
|
- }
|
||||||
|
+ s->output = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct kvm_io_device_ops picdev_ops = {
|
||||||
|
@@ -575,8 +556,6 @@ struct kvm_pic *kvm_create_pic(struct kvm *kvm)
|
||||||
|
s->pics[1].elcr_mask = 0xde;
|
||||||
|
s->pics[0].pics_state = s;
|
||||||
|
s->pics[1].pics_state = s;
|
||||||
|
- s->pics[0].isr_ack = 0xff;
|
||||||
|
- s->pics[1].isr_ack = 0xff;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize PIO device
|
||||||
|
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
|
||||||
|
index d9855b8..9000829 100644
|
||||||
|
--- a/arch/x86/kvm/x86.c
|
||||||
|
+++ b/arch/x86/kvm/x86.c
|
||||||
|
@@ -2669,8 +2669,6 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
|
||||||
|
vcpu->arch.interrupt.pending = events->interrupt.injected;
|
||||||
|
vcpu->arch.interrupt.nr = events->interrupt.nr;
|
||||||
|
vcpu->arch.interrupt.soft = events->interrupt.soft;
|
||||||
|
- if (vcpu->arch.interrupt.pending && irqchip_in_kernel(vcpu->kvm))
|
||||||
|
- kvm_pic_clear_isr_ack(vcpu->kvm);
|
||||||
|
if (events->flags & KVM_VCPUEVENT_VALID_SHADOW)
|
||||||
|
kvm_x86_ops->set_interrupt_shadow(vcpu,
|
||||||
|
events->interrupt.shadow);
|
||||||
|
@@ -5621,8 +5619,6 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
|
||||||
|
if (pending_vec < max_bits) {
|
||||||
|
kvm_queue_interrupt(vcpu, pending_vec, false);
|
||||||
|
pr_debug("Set back pending irq %d\n", pending_vec);
|
||||||
|
- if (irqchip_in_kernel(vcpu->kvm))
|
||||||
|
- kvm_pic_clear_isr_ack(vcpu->kvm);
|
||||||
|
}
|
||||||
|
|
||||||
|
kvm_set_segment(vcpu, &sregs->cs, VCPU_SREG_CS);
|
||||||
|
--
|
||||||
|
1.7.4.1
|
||||||
|
|
|
@ -3,3 +3,4 @@
|
||||||
- bugfix/x86/Correct-a-typo-in-xen_do_hypervisor_callback-label.patch
|
- bugfix/x86/Correct-a-typo-in-xen_do_hypervisor_callback-label.patch
|
||||||
+ bugfix/all/stable/2.6.38.1.patch
|
+ bugfix/all/stable/2.6.38.1.patch
|
||||||
+ bugfix/all/radeon-add-sanity-checks-to-obj-info-record-parsing.patch
|
+ bugfix/all/radeon-add-sanity-checks-to-obj-info-record-parsing.patch
|
||||||
|
+ bugfix/x86/KVM-remove-isr_ack-logic-from-PIC.patch
|
||||||
|
|
Loading…
Reference in New Issue