]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.3-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 9 May 2012 16:03:02 +0000 (09:03 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 9 May 2012 16:03:02 +0000 (09:03 -0700)
added patches:
xen-pci-don-t-use-pci-bios-service-for-configuration-space-accesses.patch
xen-pte-fix-crashes-when-trying-to-see-non-existent-pgd-pmd-pud-ptes.patch

queue-3.3/series
queue-3.3/xen-pci-don-t-use-pci-bios-service-for-configuration-space-accesses.patch [new file with mode: 0644]
queue-3.3/xen-pte-fix-crashes-when-trying-to-see-non-existent-pgd-pmd-pud-ptes.patch [new file with mode: 0644]

index 362093b06ef0aee7cf64bf21e877c6b97f222f29..1deaefad6aeb03b08fd7a08bc0fb65d0f6c7a746 100644 (file)
@@ -1,3 +1,5 @@
 drm-i915-enable-dip-before-writing-data-on-gen4.patch
 smsc95xx-mark-link-down-on-startup-and-let-phy-interrupt.patch
 e1000-fix-vlan-processing-regression.patch
+xen-pte-fix-crashes-when-trying-to-see-non-existent-pgd-pmd-pud-ptes.patch
+xen-pci-don-t-use-pci-bios-service-for-configuration-space-accesses.patch
diff --git a/queue-3.3/xen-pci-don-t-use-pci-bios-service-for-configuration-space-accesses.patch b/queue-3.3/xen-pci-don-t-use-pci-bios-service-for-configuration-space-accesses.patch
new file mode 100644 (file)
index 0000000..5ce12f8
--- /dev/null
@@ -0,0 +1,49 @@
+From 76a8df7b49168509df02461f83fab117a4a86e08 Mon Sep 17 00:00:00 2001
+From: David Vrabel <david.vrabel@citrix.com>
+Date: Fri, 4 May 2012 14:29:46 +0100
+Subject: xen/pci: don't use PCI BIOS service for configuration space accesses
+
+From: David Vrabel <david.vrabel@citrix.com>
+
+commit 76a8df7b49168509df02461f83fab117a4a86e08 upstream.
+
+The accessing PCI configuration space with the PCI BIOS32 service does
+not work in PV guests.
+
+On systems without MMCONFIG or where the BIOS hasn't marked the
+MMCONFIG region as reserved in the e820 map, the BIOS service is
+probed (even though direct access is preferred) and this hangs.
+
+Acked-by: Jan Beulich <jbeulich@suse.com>
+Signed-off-by: David Vrabel <david.vrabel@citrix.com>
+[v1: Fixed compile error when CONFIG_PCI is not set]
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/xen/enlighten.c |    7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+--- a/arch/x86/xen/enlighten.c
++++ b/arch/x86/xen/enlighten.c
+@@ -62,6 +62,7 @@
+ #include <asm/reboot.h>
+ #include <asm/stackprotector.h>
+ #include <asm/hypervisor.h>
++#include <asm/pci_x86.h>
+ #include "xen-ops.h"
+ #include "mmu.h"
+@@ -1274,8 +1275,10 @@ asmlinkage void __init xen_start_kernel(
+               /* Make sure ACS will be enabled */
+               pci_request_acs();
+       }
+-              
+-
++#ifdef CONFIG_PCI
++      /* PCI BIOS service won't work from a PV guest. */
++      pci_probe &= ~PCI_PROBE_BIOS;
++#endif
+       xen_raw_console_write("about to get started...\n");
+       xen_setup_runstate_info(0);
diff --git a/queue-3.3/xen-pte-fix-crashes-when-trying-to-see-non-existent-pgd-pmd-pud-ptes.patch b/queue-3.3/xen-pte-fix-crashes-when-trying-to-see-non-existent-pgd-pmd-pud-ptes.patch
new file mode 100644 (file)
index 0000000..b6b6bcf
--- /dev/null
@@ -0,0 +1,60 @@
+From b7e5ffe5d83fa40d702976d77452004abbe35791 Mon Sep 17 00:00:00 2001
+From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Date: Thu, 3 May 2012 16:14:14 -0400
+Subject: xen/pte: Fix crashes when trying to see non-existent PGD/PMD/PUD/PTEs
+
+From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+
+commit b7e5ffe5d83fa40d702976d77452004abbe35791 upstream.
+
+If I try to do "cat /sys/kernel/debug/kernel_page_tables"
+I end up with:
+
+BUG: unable to handle kernel paging request at ffffc7fffffff000
+IP: [<ffffffff8106aa51>] ptdump_show+0x221/0x480
+PGD 0
+Oops: 0000 [#1] SMP
+CPU 0
+.. snip..
+RAX: 0000000000000000 RBX: ffffc00000000fff RCX: 0000000000000000
+RDX: 0000800000000000 RSI: 0000000000000000 RDI: ffffc7fffffff000
+
+which is due to the fact we are trying to access a PFN that is not
+accessible to us. The reason (at least in this case) was that
+PGD[256] is set to __HYPERVISOR_VIRT_START which was setup (by the
+hypervisor) to point to a read-only linear map of the MFN->PFN array.
+During our parsing we would get the MFN (a valid one), try to look
+it up in the MFN->PFN tree and find it invalid and return ~0 as PFN.
+Then pte_mfn_to_pfn would happilly feed that in, attach the flags
+and return it back to the caller. 'ptdump_show' bitshifts it and
+gets and invalid value that it tries to dereference.
+
+Instead of doing all of that, we detect the ~0 case and just
+return !_PAGE_PRESENT.
+
+This bug has been in existence .. at least until 2.6.37 (yikes!)
+
+Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/xen/mmu.c |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/arch/x86/xen/mmu.c
++++ b/arch/x86/xen/mmu.c
+@@ -353,8 +353,13 @@ static pteval_t pte_mfn_to_pfn(pteval_t
+ {
+       if (val & _PAGE_PRESENT) {
+               unsigned long mfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
++              unsigned long pfn = mfn_to_pfn(mfn);
++
+               pteval_t flags = val & PTE_FLAGS_MASK;
+-              val = ((pteval_t)mfn_to_pfn(mfn) << PAGE_SHIFT) | flags;
++              if (unlikely(pfn == ~0))
++                      val = flags & ~_PAGE_PRESENT;
++              else
++                      val = ((pteval_t)pfn << PAGE_SHIFT) | flags;
+       }
+       return val;