Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ kernel/signal.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
--- a/kernel/signal.c
+++ b/kernel/signal.c
-@@ -2454,11 +2454,9 @@ do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long s
+@@ -2414,11 +2414,9 @@ do_sigaltstack (const stack_t __user *us
stack_t oss;
int error;
if (uss) {
void __user *ss_sp;
-@@ -2501,13 +2499,16 @@ do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long s
+@@ -2461,13 +2459,16 @@ do_sigaltstack (const stack_t __user *us
current->sas_ss_size = ss_size;
}
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ net/ipv4/ip_output.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
-@@ -813,6 +813,8 @@ int ip_append_data(struct sock *sk,
+@@ -814,6 +814,8 @@ int ip_append_data(struct sock *sk,
inet->cork.addr = ipc->addr;
}
rt = *rtp;
+++ /dev/null
-From mtosatti@redhat.com Thu Sep 3 14:27:33 2009
-From: Marcelo Tosatti <mtosatti@redhat.com>
-Date: Tue, 1 Sep 2009 12:15:15 -0300
-Subject: KVM: Avoid redelivery of edge interrupt before next edge
-To: stable@kernel.org
-Cc: avi@redhat.com, Gleb Natapov <gleb@redhat.com>
-Message-ID: <1251818115-22157-7-git-send-email-mtosatti@redhat.com>
-
-
-From: Gleb Natapov <gleb@redhat.com>
-
-(cherry picked from commit b4a2f5e723e4f7df46731106faf9e2405673c073)
-
-The check for an edge is broken in current ioapic code. ioapic->irr is
-cleared on each edge interrupt by ioapic_service() and this makes
-old_irr != ioapic->irr condition in kvm_ioapic_set_irq() to be always
-true. The patch fixes the code to properly recognise edge.
-
-Some HW emulation calls set_irq() without level change. If each such
-call is propagated to an OS it may confuse a device driver. This is the
-case with keyboard device emulation and Windows XP x64 installer on SMP VM.
-Each keystroke produce two interrupts (down/up) one interrupt is
-submitted to CPU0 and another to CPU1. This confuses Windows somehow
-and it ignores keystrokes.
-
-Signed-off-by: Gleb Natapov <gleb@redhat.com>
-Signed-off-by: Avi Kivity <avi@redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
----
- virt/kvm/ioapic.c | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
---- a/virt/kvm/ioapic.c
-+++ b/virt/kvm/ioapic.c
-@@ -95,8 +95,6 @@ static int ioapic_service(struct kvm_ioa
- if (injected && pent->fields.trig_mode == IOAPIC_LEVEL_TRIG)
- pent->fields.remote_irr = 1;
- }
-- if (!pent->fields.trig_mode)
-- ioapic->irr &= ~(1 << idx);
-
- return injected;
- }
-@@ -136,7 +134,8 @@ static void ioapic_write_indirect(struct
- mask_after = ioapic->redirtbl[index].fields.mask;
- if (mask_before != mask_after)
- kvm_fire_mask_notifiers(ioapic->kvm, index, mask_after);
-- if (ioapic->irr & (1 << index))
-+ if (ioapic->redirtbl[index].fields.trig_mode == IOAPIC_LEVEL_TRIG
-+ && ioapic->irr & (1 << index))
- ioapic_service(ioapic, index);
- break;
- }
-@@ -293,9 +292,10 @@ int kvm_ioapic_set_irq(struct kvm_ioapic
- if (!level)
- ioapic->irr &= ~mask;
- else {
-+ int edge = (entry.fields.trig_mode == IOAPIC_EDGE_TRIG);
- ioapic->irr |= mask;
-- if ((!entry.fields.trig_mode && old_irr != ioapic->irr)
-- || !entry.fields.remote_irr)
-+ if ((edge && old_irr != ioapic->irr) ||
-+ (!edge && !entry.fields.remote_irr))
- ret = ioapic_service(ioapic, irq);
- }
- }