From a0d059066f529608769f5e77cc7df07be505787d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 23 Jun 2014 15:16:24 -0400 Subject: [PATCH] 3.10-stable patches added patches: mips-kvm-allocate-at-least-16kb-for-exception-handlers.patch --- ...at-least-16kb-for-exception-handlers.patch | 50 +++++++++++++++++++ queue-3.10/series | 1 + 2 files changed, 51 insertions(+) create mode 100644 queue-3.10/mips-kvm-allocate-at-least-16kb-for-exception-handlers.patch diff --git a/queue-3.10/mips-kvm-allocate-at-least-16kb-for-exception-handlers.patch b/queue-3.10/mips-kvm-allocate-at-least-16kb-for-exception-handlers.patch new file mode 100644 index 00000000000..786e620ac48 --- /dev/null +++ b/queue-3.10/mips-kvm-allocate-at-least-16kb-for-exception-handlers.patch @@ -0,0 +1,50 @@ +From 7006e2dfda9adfa40251093604db76d7e44263b3 Mon Sep 17 00:00:00 2001 +From: James Hogan +Date: Thu, 29 May 2014 10:16:23 +0100 +Subject: MIPS: KVM: Allocate at least 16KB for exception handlers + +From: James Hogan + +commit 7006e2dfda9adfa40251093604db76d7e44263b3 upstream. + +Each MIPS KVM guest has its own copy of the KVM exception vector. This +contains the TLB refill exception handler at offset 0x000, the general +exception handler at offset 0x180, and interrupt exception handlers at +offset 0x200 in case Cause_IV=1. A common handler is copied to offset +0x2000 and offset 0x3000 is used for temporarily storing k1 during entry +from guest. + +However the amount of memory allocated for this purpose is calculated as +0x200 rounded up to the next page boundary, which is insufficient if 4KB +pages are in use. This can lead to the common handler at offset 0x2000 +being overwritten and infinitely recursive exceptions on the next exit +from the guest. + +Increase the minimum size from 0x200 to 0x4000 to cover the full use of +the page. + +Signed-off-by: James Hogan +Cc: Paolo Bonzini +Cc: Gleb Natapov +Cc: kvm@vger.kernel.org +Cc: Ralf Baechle +Cc: linux-mips@linux-mips.org +Cc: Sanjay Lal +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman + +--- + arch/mips/kvm/kvm_mips.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/mips/kvm/kvm_mips.c ++++ b/arch/mips/kvm/kvm_mips.c +@@ -299,7 +299,7 @@ struct kvm_vcpu *kvm_arch_vcpu_create(st + if (cpu_has_veic || cpu_has_vint) { + size = 0x200 + VECTORSPACING * 64; + } else { +- size = 0x200; ++ size = 0x4000; + } + + /* Save Linux EBASE */ diff --git a/queue-3.10/series b/queue-3.10/series index 2107a7b4ba1..c0417aa1404 100644 --- a/queue-3.10/series +++ b/queue-3.10/series @@ -26,3 +26,4 @@ net-mlx4_core-pass-pci_device_id.driver_data-to-__mlx4_init_one-during-reset.pat net-mlx4_core-preserve-pci_dev_data-after-__mlx4_remove_one.patch kvm-lapic-sync-highest-isr-to-hardware-apic-on-eoi.patch arm-at91-fix-at91_sysirq_mask_rtc-for-sam9x5-socs.patch +mips-kvm-allocate-at-least-16kb-for-exception-handlers.patch -- 2.47.3