Update the xen/next-2.6.37 and xen-pcifront-fixes patches
This commit is contained in:
parent
c43c10888a
commit
4ec8ad3e2b
|
@ -704,11 +704,11 @@ Patch12303: dmar-disable-when-ricoh-multifunction.patch
|
|||
# Xen patches
|
||||
# git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git branches
|
||||
Patch20000: xen.next-2.6.37.patch
|
||||
Patch20001: xen.upstream.core.patch
|
||||
#Patch20001: xen.upstream.core.patch
|
||||
# git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen.git branches
|
||||
Patch20005: xen.pcifront.fixes.patch
|
||||
# git://xenbits.xen.org/people/sstabellini/linux-pvhvm branches
|
||||
Patch20010: xen.pvhvm.fixes.patch
|
||||
#Patch20010: xen.pvhvm.fixes.patch
|
||||
|
||||
%endif
|
||||
|
||||
|
@ -1301,7 +1301,7 @@ ApplyPatch dmar-disable-when-ricoh-multifunction.patch
|
|||
# Xen patches
|
||||
ApplyPatch xen.next-2.6.37.patch
|
||||
#ApplyPatch xen.upstream.core.patch
|
||||
#ApplyPatch xen.pcifront.fixes.patch
|
||||
ApplyPatch xen.pcifront.fixes.patch
|
||||
#ApplyPatch xen.pvhvm.fixes.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
@ -1916,6 +1916,9 @@ fi
|
|||
# || ||
|
||||
|
||||
%changelog
|
||||
* Tue Nov 16 2010 Michael Young <m.a.young@durham.ac.uk>
|
||||
- Update the xen/next-2.6.37 and xen-pcifront-fixes patches
|
||||
|
||||
* Mon Nov 15 2010 Kyle McMartin <kyle@redhat.com> 2.6.37-0.1.rc2.git0
|
||||
- Linux 2.6.37-rc2
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,193 +1,116 @@
|
|||
From 1688c3d6000b1183bcb604c8c85f742a579990e5 Mon Sep 17 00:00:00 2001
|
||||
From 723ee043b152e4ed7d901fb791a513bc60bb9a9c Mon Sep 17 00:00:00 2001
|
||||
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Date: Sun, 31 Oct 2010 17:04:09 -0400
|
||||
Subject: [PATCH 1/5] MAINTAINERS: Update mailing list name for Xen pieces.
|
||||
Date: Tue, 16 Nov 2010 12:09:59 -0500
|
||||
Subject: [PATCH] xen: set IO permission early (before early_cpu_init())
|
||||
|
||||
While the 'xen-devel@lists.xen.org' is more apt, it is not yet
|
||||
ready. Revert the name back to the old lists.xensource.com for
|
||||
right now.
|
||||
This patch is based off "xen dom0: Set up basic IO permissions for dom0."
|
||||
by Juan Quintela <quintela@redhat.com>.
|
||||
|
||||
On AMD machines when we boot the kernel as Domain 0 we get this nasty:
|
||||
|
||||
mapping kernel into physical memory
|
||||
Xen: setup ISA identity maps
|
||||
about to get started...
|
||||
(XEN) traps.c:475:d0 Unhandled general protection fault fault/trap [#13] on VCPU 0 [ec=0000]
|
||||
(XEN) domain_crash_sync called from entry.S
|
||||
(XEN) Domain 0 (vcpu#0) crashed on cpu#0:
|
||||
(XEN) ----[ Xen-4.1-101116 x86_64 debug=y Not tainted ]----
|
||||
(XEN) CPU: 0
|
||||
(XEN) RIP: e033:[<ffffffff8130271b>]
|
||||
(XEN) RFLAGS: 0000000000000282 EM: 1 CONTEXT: pv guest
|
||||
(XEN) rax: 000000008000c068 rbx: ffffffff8186c680 rcx: 0000000000000068
|
||||
(XEN) rdx: 0000000000000cf8 rsi: 000000000000c000 rdi: 0000000000000000
|
||||
(XEN) rbp: ffffffff81801e98 rsp: ffffffff81801e50 r8: ffffffff81801eac
|
||||
(XEN) r9: ffffffff81801ea8 r10: ffffffff81801eb4 r11: 00000000ffffffff
|
||||
(XEN) r12: ffffffff8186c694 r13: ffffffff81801f90 r14: ffffffffffffffff
|
||||
(XEN) r15: 0000000000000000 cr0: 000000008005003b cr4: 00000000000006f0
|
||||
(XEN) cr3: 0000000221803000 cr2: 0000000000000000
|
||||
(XEN) ds: 0000 es: 0000 fs: 0000 gs: 0000 ss: e02b cs: e033
|
||||
(XEN) Guest stack trace from rsp=ffffffff81801e50:
|
||||
|
||||
RIP points to read_pci_config() function.
|
||||
|
||||
The issue is that we don't set IO permissions for the Linux kernel early enough.
|
||||
|
||||
The call sequence used to be:
|
||||
|
||||
xen_start_kernel()
|
||||
x86_init.oem.arch_setup = xen_setup_arch;
|
||||
setup_arch:
|
||||
- early_cpu_init
|
||||
- early_init_amd
|
||||
- read_pci_config
|
||||
- x86_init.oem.arch_setup [ xen_arch_setup ]
|
||||
- set IO permissions.
|
||||
|
||||
We need to set the IO permissions earlier on, which this patch does.
|
||||
|
||||
Acked-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
MAINTAINERS | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
arch/x86/xen/enlighten.c | 12 +++++++++++-
|
||||
arch/x86/xen/setup.c | 8 --------
|
||||
2 files changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index 0094224..acf13f2 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -6613,7 +6613,7 @@ F: drivers/xen/*swiotlb*
|
||||
XEN HYPERVISOR INTERFACE
|
||||
M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
-L: xen-devel@lists.xen.org
|
||||
+L: xen-devel@lists.xensource.com
|
||||
L: virtualization@lists.osdl.org
|
||||
S: Supported
|
||||
F: arch/x86/xen/
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
|
||||
From 07cf2a64c2ad3408a0e12aa4cd6040b30c09381d Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Slaby <jslaby@suse.cz>
|
||||
Date: Sat, 6 Nov 2010 10:06:49 +0100
|
||||
Subject: [PATCH 2/5] xen: fix memory leak in Xen PCI MSI/MSI-X allocator.
|
||||
|
||||
Stanse found that xen_setup_msi_irqs leaks memory when
|
||||
xen_allocate_pirq fails. Free the memory in that fail path.
|
||||
|
||||
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Cc: xen-devel@lists.xensource.com
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: Ingo Molnar <mingo@redhat.com>
|
||||
Cc: "H. Peter Anvin" <hpa@zytor.com>
|
||||
Cc: x86@kernel.org
|
||||
---
|
||||
arch/x86/pci/xen.c | 8 +++++---
|
||||
1 files changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/pci/xen.c b/arch/x86/pci/xen.c
|
||||
index 117f5b8..d7b5109 100644
|
||||
--- a/arch/x86/pci/xen.c
|
||||
+++ b/arch/x86/pci/xen.c
|
||||
@@ -147,8 +147,10 @@ static int xen_setup_msi_irqs(struct pci_dev *dev, int nvec, int type)
|
||||
irq = xen_allocate_pirq(v[i], 0, /* not sharable */
|
||||
(type == PCI_CAP_ID_MSIX) ?
|
||||
"pcifront-msi-x" : "pcifront-msi");
|
||||
- if (irq < 0)
|
||||
- return -1;
|
||||
+ if (irq < 0) {
|
||||
+ ret = -1;
|
||||
+ goto free;
|
||||
+ }
|
||||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||||
index 235c0f4..759b762 100644
|
||||
--- a/arch/x86/xen/enlighten.c
|
||||
+++ b/arch/x86/xen/enlighten.c
|
||||
@@ -1090,6 +1090,8 @@ static void __init xen_setup_stackprotector(void)
|
||||
/* First C function to be called on Xen boot */
|
||||
asmlinkage void __init xen_start_kernel(void)
|
||||
{
|
||||
+ struct physdev_set_iopl set_iopl;
|
||||
+ int rc;
|
||||
pgd_t *pgd;
|
||||
|
||||
ret = set_irq_msi(irq, msidesc);
|
||||
if (ret)
|
||||
@@ -164,7 +166,7 @@ error:
|
||||
if (ret == -ENODEV)
|
||||
dev_err(&dev->dev, "Xen PCI frontend has not registered" \
|
||||
" MSI/MSI-X support!\n");
|
||||
if (!xen_start_info)
|
||||
@@ -1202,10 +1204,18 @@ asmlinkage void __init xen_start_kernel(void)
|
||||
#else
|
||||
pv_info.kernel_rpl = 0;
|
||||
#endif
|
||||
-
|
||||
+free:
|
||||
kfree(v);
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
|
||||
From c8ac3902fb7a98c45ed54d98ad6f1c8168f47021 Mon Sep 17 00:00:00 2001
|
||||
From: Jesper Juhl <jj@chaosbits.net>
|
||||
Date: Sat, 30 Oct 2010 14:51:30 +0200
|
||||
Subject: [PATCH 3/5] xen-pcifront: Remove duplicate inclusion of headers.
|
||||
|
||||
In drivers/pci/xen-pcifront.c the xen/xenbus.h header is included twice -
|
||||
once is enough.
|
||||
|
||||
Signed-off-by: Jesper Juhl <jj@chaosbits.net>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
drivers/pci/xen-pcifront.c | 1 -
|
||||
1 files changed, 0 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
|
||||
index a87c498..0579273 100644
|
||||
--- a/drivers/pci/xen-pcifront.c
|
||||
+++ b/drivers/pci/xen-pcifront.c
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/msi.h>
|
||||
-#include <xen/xenbus.h>
|
||||
#include <xen/interface/io/pciif.h>
|
||||
#include <asm/xen/pci.h>
|
||||
#include <linux/interrupt.h>
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
|
||||
From 2a63dd7275b2278bd7e9203f74b9aa4f07e82a7a Mon Sep 17 00:00:00 2001
|
||||
From: Jiri Slaby <jslaby@suse.cz>
|
||||
Date: Thu, 4 Nov 2010 15:31:30 +0100
|
||||
Subject: [PATCH 4/5] xen-pcifront: fix PCI reference leak
|
||||
|
||||
Stanse found that when pdev is found and has no driver a reference is
|
||||
leaked in pcifront_common_process. So add pci_dev_put there. For the
|
||||
pdev == NULL case, pci_dev_put(NULL) is fine.
|
||||
|
||||
[v2: Updated to not dereference pcidev->dev per Milton's observation]
|
||||
|
||||
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Cc: Milton Miller <miltonm@bga.com>
|
||||
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
|
||||
---
|
||||
drivers/pci/xen-pcifront.c | 5 +++--
|
||||
1 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/pci/xen-pcifront.c b/drivers/pci/xen-pcifront.c
|
||||
index 0579273..3a5a6fc 100644
|
||||
--- a/drivers/pci/xen-pcifront.c
|
||||
+++ b/drivers/pci/xen-pcifront.c
|
||||
@@ -575,8 +575,9 @@ static pci_ers_result_t pcifront_common_process(int cmd,
|
||||
/* set the limit of our address space */
|
||||
xen_reserve_top();
|
||||
|
||||
pcidev = pci_get_bus_and_slot(bus, devfn);
|
||||
if (!pcidev || !pcidev->driver) {
|
||||
- dev_err(&pcidev->dev,
|
||||
- "device or driver is NULL\n");
|
||||
+ dev_err(&pdev->xdev->dev, "device or AER driver is NULL\n");
|
||||
+ if (pcidev)
|
||||
+ pci_dev_put(pcidev);
|
||||
return result;
|
||||
}
|
||||
pdrv = pcidev->driver;
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
|
||||
From b74831e6437c0cbbd310dc587579390a146dc7a0 Mon Sep 17 00:00:00 2001
|
||||
From: Joe Perches <joe@perches.com>
|
||||
Date: Wed, 10 Nov 2010 09:47:51 -0800
|
||||
Subject: [PATCH 5/5] MAINTAINERS: Mark XEN lists as moderated
|
||||
|
||||
Signed-off-by: Joe Perches <joe@perches.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
MAINTAINERS | 6 +++---
|
||||
1 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/MAINTAINERS b/MAINTAINERS
|
||||
index acf13f2..6a16f21 100644
|
||||
--- a/MAINTAINERS
|
||||
+++ b/MAINTAINERS
|
||||
@@ -6598,14 +6598,14 @@ F: drivers/platform/x86
|
||||
|
||||
XEN PCI SUBSYSTEM
|
||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
-L: xen-devel@lists.xensource.com
|
||||
+L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
||||
S: Supported
|
||||
F: arch/x86/pci/*xen*
|
||||
F: drivers/pci/*xen*
|
||||
|
||||
XEN SWIOTLB SUBSYSTEM
|
||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
-L: xen-devel@lists.xensource.com
|
||||
+L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
||||
S: Supported
|
||||
F: arch/x86/xen/*swiotlb*
|
||||
F: drivers/xen/*swiotlb*
|
||||
@@ -6613,7 +6613,7 @@ F: drivers/xen/*swiotlb*
|
||||
XEN HYPERVISOR INTERFACE
|
||||
M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
-L: xen-devel@lists.xensource.com
|
||||
+L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
||||
L: virtualization@lists.osdl.org
|
||||
S: Supported
|
||||
F: arch/x86/xen/
|
||||
+ /* We used to do this in xen_arch_setup, but that is too late on AMD
|
||||
+ * were early_cpu_init (run before ->arch_setup()) calls early_amd_init
|
||||
+ * which pokes 0xcf8 port.
|
||||
+ */
|
||||
+ set_iopl.iopl = 1;
|
||||
+ rc = HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
|
||||
+ if (rc != 0)
|
||||
+ xen_raw_printk("physdev_op failed %d\n", rc);
|
||||
+
|
||||
#ifdef CONFIG_X86_32
|
||||
/* set up basic CPUID stuff */
|
||||
cpu_detect(&new_cpu_data);
|
||||
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
|
||||
index 769c4b0..4abb1c3 100644
|
||||
--- a/arch/x86/xen/setup.c
|
||||
+++ b/arch/x86/xen/setup.c
|
||||
@@ -337,9 +337,6 @@ void __cpuinit xen_enable_syscall(void)
|
||||
|
||||
void __init xen_arch_setup(void)
|
||||
{
|
||||
- struct physdev_set_iopl set_iopl;
|
||||
- int rc;
|
||||
-
|
||||
xen_panic_handler_init();
|
||||
|
||||
HYPERVISOR_vm_assist(VMASST_CMD_enable, VMASST_TYPE_4gb_segments);
|
||||
@@ -356,11 +353,6 @@ void __init xen_arch_setup(void)
|
||||
xen_enable_sysenter();
|
||||
xen_enable_syscall();
|
||||
|
||||
- set_iopl.iopl = 1;
|
||||
- rc = HYPERVISOR_physdev_op(PHYSDEVOP_set_iopl, &set_iopl);
|
||||
- if (rc != 0)
|
||||
- printk(KERN_INFO "physdev_op failed %d\n", rc);
|
||||
-
|
||||
#ifdef CONFIG_ACPI
|
||||
if (!(xen_start_info->flags & SIF_INITDOMAIN)) {
|
||||
printk(KERN_INFO "ACPI in unprivileged domain disabled\n");
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
xen: set vma flag VM_PFNMAP in the privcmd mmap file_op
|
||||
|
||||
Set VM_PFNMAP in the privcmd mmap file_op, rather than later in
|
||||
xen_remap_domain_mfn_range when it is too late because
|
||||
vma_wants_writenotify has already been called and vm_page_prot has
|
||||
already been modified.
|
||||
|
||||
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
|
||||
|
||||
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
|
||||
index c237b81..f61b75d 100644
|
||||
--- a/arch/x86/xen/mmu.c
|
||||
+++ b/arch/x86/xen/mmu.c
|
||||
@@ -2627,7 +2627,8 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
|
||||
|
||||
prot = __pgprot(pgprot_val(prot) | _PAGE_IOMAP);
|
||||
|
||||
- vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
|
||||
+ BUG_ON(!((vma->vm_flags & (VM_PFNMAP | VM_RESERVED | VM_IO)) ==
|
||||
+ (VM_PFNMAP | VM_RESERVED | VM_IO)));
|
||||
|
||||
rmd.mfn = mfn;
|
||||
rmd.prot = prot;
|
||||
diff --git a/drivers/xen/xenfs/privcmd.c b/drivers/xen/xenfs/privcmd.c
|
||||
index f80be7f..48f7b0f 100644
|
||||
--- a/drivers/xen/xenfs/privcmd.c
|
||||
+++ b/drivers/xen/xenfs/privcmd.c
|
||||
@@ -384,8 +384,9 @@ static int privcmd_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
if (xen_feature(XENFEAT_auto_translated_physmap))
|
||||
return -ENOSYS;
|
||||
|
||||
- /* DONTCOPY is essential for Xen as copy_page_range is broken. */
|
||||
- vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY;
|
||||
+ /* DONTCOPY is essential for Xen because copy_page_range doesn't know
|
||||
+ * how to recreate these mappings */
|
||||
+ vma->vm_flags |= VM_RESERVED | VM_IO | VM_DONTCOPY | VM_PFNMAP;
|
||||
vma->vm_ops = &privcmd_vm_ops;
|
||||
vma->vm_private_data = NULL;
|
||||
|
|
@ -1,227 +0,0 @@
|
|||
From a2d771c036eb8c040683089ca04c36dfb93a0e60 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Campbell <ian.campbell@citrix.com>
|
||||
Date: Fri, 29 Oct 2010 16:56:19 +0100
|
||||
Subject: [PATCH 1/3] xen: correct size of level2_kernel_pgt
|
||||
|
||||
sizeof(pmd_t *) is 4 bytes on 32-bit PAE leading to an allocation of
|
||||
only 2048 bytes. The correct size is sizeof(pmd_t) giving us a full
|
||||
page allocation.
|
||||
|
||||
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
---
|
||||
arch/x86/xen/mmu.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
|
||||
index c237b81..21ed8d7 100644
|
||||
--- a/arch/x86/xen/mmu.c
|
||||
+++ b/arch/x86/xen/mmu.c
|
||||
@@ -2126,7 +2126,7 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
|
||||
{
|
||||
pmd_t *kernel_pmd;
|
||||
|
||||
- level2_kernel_pgt = extend_brk(sizeof(pmd_t *) * PTRS_PER_PMD, PAGE_SIZE);
|
||||
+ level2_kernel_pgt = extend_brk(sizeof(pmd_t) * PTRS_PER_PMD, PAGE_SIZE);
|
||||
|
||||
max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->pt_base) +
|
||||
xen_start_info->nr_pt_frames * PAGE_SIZE +
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
|
||||
From 3ddc2436edee4ff5ef91bd83491901b60ffa11d3 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Campbell <ian.campbell@citrix.com>
|
||||
Date: Thu, 28 Oct 2010 11:32:29 -0700
|
||||
Subject: [PATCH 2/3] xen: do not release any memory under 1M in domain 0
|
||||
|
||||
We already deliberately setup a 1-1 P2M for the region up to 1M in
|
||||
order to allow code which assumes this region is already mapped to
|
||||
work without having to convert everything to ioremap.
|
||||
|
||||
Domain 0 should not return any apparently unused memory regions
|
||||
(reserved or otherwise) in this region to Xen since the e820 may not
|
||||
accurately reflect what the BIOS has stashed in this region.
|
||||
|
||||
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
---
|
||||
arch/x86/xen/setup.c | 16 +++++++++++-----
|
||||
1 files changed, 11 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
|
||||
index b1dbdaa..b978a8a 100644
|
||||
--- a/arch/x86/xen/setup.c
|
||||
+++ b/arch/x86/xen/setup.c
|
||||
@@ -118,14 +118,18 @@ static unsigned long __init xen_return_unused_memory(unsigned long max_pfn,
|
||||
const struct e820map *e820)
|
||||
{
|
||||
phys_addr_t max_addr = PFN_PHYS(max_pfn);
|
||||
- phys_addr_t last_end = 0;
|
||||
+ phys_addr_t last_end = ISA_END_ADDRESS;
|
||||
unsigned long released = 0;
|
||||
int i;
|
||||
|
||||
+ /* Free any unused memory above the low 1Mbyte. */
|
||||
for (i = 0; i < e820->nr_map && last_end < max_addr; i++) {
|
||||
phys_addr_t end = e820->map[i].addr;
|
||||
end = min(max_addr, end);
|
||||
|
||||
+ if (last_end >= end)
|
||||
+ continue;
|
||||
+
|
||||
released += xen_release_chunk(last_end, end);
|
||||
last_end = e820->map[i].addr + e820->map[i].size;
|
||||
}
|
||||
@@ -164,6 +168,7 @@ char * __init xen_memory_setup(void)
|
||||
XENMEM_memory_map;
|
||||
rc = HYPERVISOR_memory_op(op, &memmap);
|
||||
if (rc == -ENOSYS) {
|
||||
+ BUG_ON(xen_initial_domain());
|
||||
memmap.nr_entries = 1;
|
||||
map[0].addr = 0ULL;
|
||||
map[0].size = mem_end;
|
||||
@@ -201,12 +206,13 @@ char * __init xen_memory_setup(void)
|
||||
}
|
||||
|
||||
/*
|
||||
- * Even though this is normal, usable memory under Xen, reserve
|
||||
- * ISA memory anyway because too many things think they can poke
|
||||
+ * In domU, the ISA region is normal, usable memory, but we
|
||||
+ * reserve ISA memory anyway because too many things poke
|
||||
* about in there.
|
||||
*
|
||||
- * In a dom0 kernel, this region is identity mapped with the
|
||||
- * hardware ISA area, so it really is out of bounds.
|
||||
+ * In Dom0, the host E820 information can leave gaps in the
|
||||
+ * ISA range, which would cause us to release those pages. To
|
||||
+ * avoid this, we unconditionally reserve them here.
|
||||
*/
|
||||
e820_add_region(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS,
|
||||
E820_RESERVED);
|
||||
--
|
||||
1.7.3.2
|
||||
|
||||
|
||||
From c7fba07a8bb53724bc22577a7a920705f1b522e5 Mon Sep 17 00:00:00 2001
|
||||
From: Ian Campbell <ian.campbell@citrix.com>
|
||||
Date: Mon, 1 Nov 2010 16:30:09 +0000
|
||||
Subject: [PATCH 3/3] xen: events: do not unmask event channels on resume
|
||||
|
||||
The IRQ core code will take care of disabling and reenabling
|
||||
interrupts over suspend resume automatically, therefore we do not need
|
||||
to do this in the Xen event channel code.
|
||||
|
||||
The only exception is those event channels marked IRQF_NO_SUSPEND
|
||||
which the IRQ core ignores. We must unmask these ourselves, taking
|
||||
care to obey the current IRQ_DISABLED status. Failure check for
|
||||
IRQ_DISABLED leads to enabling polled only event channels, such as
|
||||
that associated with the pv spinlocks, which must never be enabled:
|
||||
|
||||
[ 21.970432] ------------[ cut here ]------------
|
||||
[ 21.970432] kernel BUG at arch/x86/xen/spinlock.c:343!
|
||||
[ 21.970432] invalid opcode: 0000 [#1] SMP
|
||||
[ 21.970432] last sysfs file: /sys/devices/virtual/net/lo/operstate
|
||||
[ 21.970432] Modules linked in:
|
||||
[ 21.970432]
|
||||
[ 21.970432] Pid: 0, comm: swapper Not tainted (2.6.32.24-x86_32p-xen-01034-g787c727 #34)
|
||||
[ 21.970432] EIP: 0061:[<c102e209>] EFLAGS: 00010046 CPU: 3
|
||||
[ 21.970432] EIP is at dummy_handler+0x3/0x7
|
||||
[ 21.970432] EAX: 0000021c EBX: dfc16880 ECX: 0000001a EDX: 00000000
|
||||
[ 21.970432] ESI: dfc02c00 EDI: 00000001 EBP: dfc47e10 ESP: dfc47e10
|
||||
[ 21.970432] DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0069
|
||||
[ 21.970432] Process swapper (pid: 0, ti=dfc46000 task=dfc39440 task.ti=dfc46000)
|
||||
[ 21.970432] Stack:
|
||||
[ 21.970432] dfc47e30 c10a39f0 0000021c 00000000 00000000 dfc16880 0000021c 00000001
|
||||
[ 21.970432] <0> dfc47e40 c10a4f08 0000021c 00000000 dfc47e78 c12240a7 c1839284 c1839284
|
||||
[ 21.970432] <0> 00000200 00000000 00000000 f5720000 c1f3d028 c1f3d02c 00000180 dfc47e90
|
||||
[ 21.970432] Call Trace:
|
||||
[ 21.970432] [<c10a39f0>] ? handle_IRQ_event+0x5f/0x122
|
||||
[ 21.970432] [<c10a4f08>] ? handle_percpu_irq+0x2f/0x55
|
||||
[ 21.970432] [<c12240a7>] ? __xen_evtchn_do_upcall+0xdb/0x15f
|
||||
[ 21.970432] [<c122481e>] ? xen_evtchn_do_upcall+0x20/0x30
|
||||
[ 21.970432] [<c1030d47>] ? xen_do_upcall+0x7/0xc
|
||||
[ 21.970432] [<c102007b>] ? apic_reg_read+0xd3/0x22d
|
||||
[ 21.970432] [<c1002227>] ? hypercall_page+0x227/0x1005
|
||||
[ 21.970432] [<c102d30b>] ? xen_force_evtchn_callback+0xf/0x14
|
||||
[ 21.970432] [<c102da7c>] ? check_events+0x8/0xc
|
||||
[ 21.970432] [<c102da3b>] ? xen_irq_enable_direct_end+0x0/0x1
|
||||
[ 21.970432] [<c105e485>] ? finish_task_switch+0x62/0xba
|
||||
[ 21.970432] [<c14e3f84>] ? schedule+0x808/0x89d
|
||||
[ 21.970432] [<c1084dc5>] ? hrtimer_start_expires+0x1a/0x22
|
||||
[ 21.970432] [<c1085154>] ? tick_nohz_restart_sched_tick+0x15a/0x162
|
||||
[ 21.970432] [<c102f43a>] ? cpu_idle+0x6d/0x6f
|
||||
[ 21.970432] [<c14db29e>] ? cpu_bringup_and_idle+0xd/0xf
|
||||
[ 21.970432] Code: 5d 0f 95 c0 0f b6 c0 c3 55 66 83 78 02 00 89 e5 5d 0f 95 \
|
||||
c0 0f b6 c0 c3 55 b2 01 86 10 31 c0 84 d2 89 e5 0f 94 c0 5d c3 55 89 e5 <0f> 0b \
|
||||
eb fe 55 80 3d 4c ce 84 c1 00 89 e5 57 56 89 c6 53 74 15
|
||||
[ 21.970432] EIP: [<c102e209>] dummy_handler+0x3/0x7 SS:ESP 0069:dfc47e10
|
||||
[ 21.970432] ---[ end trace c0b71f7e12cf3011 ]---
|
||||
|
||||
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
---
|
||||
drivers/xen/events.c | 25 ++++++++++++++++++-------
|
||||
1 files changed, 18 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
|
||||
index 97612f5..321a0c8 100644
|
||||
--- a/drivers/xen/events.c
|
||||
+++ b/drivers/xen/events.c
|
||||
@@ -1299,9 +1299,6 @@ static void restore_cpu_virqs(unsigned int cpu)
|
||||
evtchn_to_irq[evtchn] = irq;
|
||||
irq_info[irq] = mk_virq_info(evtchn, virq);
|
||||
bind_evtchn_to_cpu(evtchn, cpu);
|
||||
-
|
||||
- /* Ready for use. */
|
||||
- unmask_evtchn(evtchn);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1327,10 +1324,6 @@ static void restore_cpu_ipis(unsigned int cpu)
|
||||
evtchn_to_irq[evtchn] = irq;
|
||||
irq_info[irq] = mk_ipi_info(evtchn, ipi);
|
||||
bind_evtchn_to_cpu(evtchn, cpu);
|
||||
-
|
||||
- /* Ready for use. */
|
||||
- unmask_evtchn(evtchn);
|
||||
-
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1390,6 +1383,7 @@ void xen_poll_irq(int irq)
|
||||
void xen_irq_resume(void)
|
||||
{
|
||||
unsigned int cpu, irq, evtchn;
|
||||
+ struct irq_desc *desc;
|
||||
|
||||
init_evtchn_cpu_bindings();
|
||||
|
||||
@@ -1408,6 +1402,23 @@ void xen_irq_resume(void)
|
||||
restore_cpu_virqs(cpu);
|
||||
restore_cpu_ipis(cpu);
|
||||
}
|
||||
+
|
||||
+ /*
|
||||
+ * Unmask any IRQF_NO_SUSPEND IRQs which are enabled. These
|
||||
+ * are not handled by the IRQ core.
|
||||
+ */
|
||||
+ for_each_irq_desc(irq, desc) {
|
||||
+ if (!desc->action || !(desc->action->flags & IRQF_NO_SUSPEND))
|
||||
+ continue;
|
||||
+ if (desc->status & IRQ_DISABLED)
|
||||
+ continue;
|
||||
+
|
||||
+ evtchn = evtchn_from_irq(irq);
|
||||
+ if (evtchn == -1)
|
||||
+ continue;
|
||||
+
|
||||
+ unmask_evtchn(evtchn);
|
||||
+ }
|
||||
}
|
||||
|
||||
static struct irq_chip xen_dynamic_chip __read_mostly = {
|
||||
--
|
||||
1.7.3.2
|
||||
|
Loading…
Reference in New Issue