Update to 2.6.38-rc, test a crash-on-boot patch
This commit is contained in:
parent
890c8ce6ae
commit
09bc1b50b1
|
@ -1977,6 +1977,12 @@ fi
|
|||
# ||----w |
|
||||
# || ||
|
||||
%changelog
|
||||
* Mon Jan 24 2011 Michael Young <m.a.young@durham.ac.uk>
|
||||
- update to 2.6.38-rc
|
||||
- Strip out upstream or conflicting patches from xen.next-2.6.37.patch
|
||||
and xen.pcifront.fixes.patch
|
||||
- Add a test patch to fix a crash on boot to xen.pcifront.fixes.patch
|
||||
|
||||
* Sat Jan 22 2011 Kyle McMartin <kmcmartin@redhat.com> 2.6.38-0.rc2.git0.1
|
||||
- Linux 2.6.38-rc2
|
||||
- linux-2.6-serial-460800.patch, drivers/serial => drivers/tty/serial
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,63 +1,3 @@
|
|||
From d1b758ebc2a82d738092cb42e742470f9d0ea53e Mon Sep 17 00:00:00 2001
|
||||
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Date: Thu, 9 Dec 2010 14:53:29 -0500
|
||||
Subject: [PATCH 1/6] xen/irq: Cleanup the find_unbound_irq
|
||||
|
||||
The "find_unbound_irq" is a bit unusual - it allocates
|
||||
virtual IRQ (event channels) in reverse order. This means
|
||||
starting at the "top" of the available IRQs (nr_irqs) down
|
||||
to the GSI/MSI IRQs (nr_irqs_gsi). Lets document this and
|
||||
also make the variables easier to understand.
|
||||
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
drivers/xen/events.c | 18 ++++++++++++------
|
||||
1 files changed, 12 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
|
||||
index 31af0ac..4d4a23d 100644
|
||||
--- a/drivers/xen/events.c
|
||||
+++ b/drivers/xen/events.c
|
||||
@@ -405,15 +405,21 @@ static int find_unbound_irq(void)
|
||||
{
|
||||
struct irq_data *data;
|
||||
int irq, res;
|
||||
- int start = get_nr_hw_irqs();
|
||||
+ int bottom = get_nr_hw_irqs();
|
||||
+ int top = nr_irqs-1;
|
||||
|
||||
- if (start == nr_irqs)
|
||||
+ if (bottom == nr_irqs)
|
||||
goto no_irqs;
|
||||
|
||||
- /* nr_irqs is a magic value. Must not use it.*/
|
||||
- for (irq = nr_irqs-1; irq > start; irq--) {
|
||||
+ /* This loop starts from the top of IRQ space and goes down.
|
||||
+ * We need this b/c if we have a PCI device in a Xen PV guest
|
||||
+ * we do not have an IO-APIC (though the backend might have them)
|
||||
+ * mapped in. To not have a collision of physical IRQs with the Xen
|
||||
+ * event channels start at the top of the IRQ space for virtual IRQs.
|
||||
+ */
|
||||
+ for (irq = top; irq > bottom; irq--) {
|
||||
data = irq_get_irq_data(irq);
|
||||
- /* only 0->15 have init'd desc; handle irq > 16 */
|
||||
+ /* only 15->0 have init'd desc; handle irq > 16 */
|
||||
if (!data)
|
||||
break;
|
||||
if (data->chip == &no_irq_chip)
|
||||
@@ -424,7 +430,7 @@ static int find_unbound_irq(void)
|
||||
return irq;
|
||||
}
|
||||
|
||||
- if (irq == start)
|
||||
+ if (irq == bottom)
|
||||
goto no_irqs;
|
||||
|
||||
res = irq_alloc_desc_at(irq, -1);
|
||||
--
|
||||
1.7.3.4
|
||||
|
||||
|
||||
From 25c95c6ab7b9e257a60ac3eac73fa1acb120c692 Mon Sep 17 00:00:00 2001
|
||||
From: Kenji Wakamiya <wkenji@jp.fujitsu.com>
|
||||
Date: Tue, 14 Dec 2010 14:31:36 +0900
|
||||
|
@ -95,409 +35,6 @@ index db8c4c4..e32b9c0 100644
|
|||
1.7.3.4
|
||||
|
||||
|
||||
From b225ec7d9bd6009b9885b7359b86fe6f46f4ae4c Mon Sep 17 00:00:00 2001
|
||||
From: Joe Jin <joe.jin@oracle.com>
|
||||
Date: Fri, 7 Jan 2011 18:17:17 +0800
|
||||
Subject: [PATCH 4/6] xen/fb: fix xenfb suspend/resume race.
|
||||
|
||||
When migrating guests over a long period we hit this:
|
||||
|
||||
<1>BUG: unable to handle kernel paging request at 0000000b819fdb98
|
||||
<1>IP: [<ffffffff812a588f>] notify_remote_via_irq+0x13/0x34
|
||||
<4>PGD 94b10067 PUD 0
|
||||
<0>Oops: 0000 [#1] SMP
|
||||
.. snip..
|
||||
Call Trace:
|
||||
[<ffffffff812712c9>] xenfb_send_event+0x5c/0x5e
|
||||
[<ffffffff8100ea5f>] ? xen_restore_fl_direct_end+0x0/0x1
|
||||
[<ffffffff81438d80>] ? _spin_unlock_irqrestore+0x16/0x18
|
||||
[<ffffffff812714ee>] xenfb_refresh+0x1b1/0x1d7
|
||||
[<ffffffff81270568>] ? sys_imageblit+0x1ac/0x458
|
||||
[<ffffffff81271786>] xenfb_imageblit+0x2f/0x34
|
||||
[<ffffffff8126a3e5>] soft_cursor+0x1b5/0x1c8
|
||||
[<ffffffff8126a137>] bit_cursor+0x4b6/0x4d7
|
||||
[<ffffffff8100ea5f>] ? xen_restore_fl_direct_end+0x0/0x1
|
||||
[<ffffffff81438d80>] ? _spin_unlock_irqrestore+0x16/0x18
|
||||
[<ffffffff81269c81>] ? bit_cursor+0x0/0x4d7
|
||||
[<ffffffff812656b7>] fb_flashcursor+0xff/0x111
|
||||
[<ffffffff812655b8>] ? fb_flashcursor+0x0/0x111
|
||||
[<ffffffff81071812>] worker_thread+0x14d/0x1ed
|
||||
[<ffffffff81075a8c>] ? autoremove_wake_function+0x0/0x3d
|
||||
[<ffffffff81438d80>] ? _spin_unlock_irqrestore+0x16/0x18
|
||||
[<ffffffff810716c5>] ? worker_thread+0x0/0x1ed
|
||||
[<ffffffff810756e3>] kthread+0x6e/0x76
|
||||
[<ffffffff81012dea>] child_rip+0xa/0x20
|
||||
[<ffffffff81011fd1>] ? int_ret_from_sys_call+0x7/0x1b
|
||||
[<ffffffff8101275d>] ? retint_restore_args+0x5/0x6
|
||||
[<ffffffff81012de0>] ? child_rip+0x0/0x20
|
||||
Code: 6b ff 0c 8b 87 a4 db 9f 81 66 85 c0 74 08 0f b7 f8 e8 3b ff ff ff c9
|
||||
c3 55 48 89 e5 48 83 ec 10 0f 1f 44 00 00 89 ff 48 6b ff 0c <8b> 87 a4 db 9f
|
||||
81 66 85 c0 74 14 48 8d 75 f0 0f b7 c0 bf 04 00
|
||||
RIP [<ffffffff812a588f>] notify_remote_via_irq+0x13/0x34
|
||||
RSP <ffff8800e7bf7bd0>
|
||||
CR2: 0000000b819fdb98
|
||||
---[ end trace 098b4b74827595d0 ]---
|
||||
|
||||
The root cause of the panic is the race between the resume and reconnect to the backend.
|
||||
|
||||
Clearing the 'update_wanted' flag of xenfb before disconnecting from the
|
||||
backend fixes this issue.
|
||||
|
||||
Signed-off-by: Joe Jin <joe.jin@oracle.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Tested-by: Gurudas Pai <gurudas.pai@oracle.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||
Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
drivers/video/xen-fbfront.c | 2 ++
|
||||
1 files changed, 2 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c
|
||||
index 428d273..f92313d 100644
|
||||
--- a/drivers/video/xen-fbfront.c
|
||||
+++ b/drivers/video/xen-fbfront.c
|
||||
@@ -617,6 +617,8 @@ static int xenfb_connect_backend(struct xenbus_device *dev,
|
||||
|
||||
static void xenfb_disconnect_backend(struct xenfb_info *info)
|
||||
{
|
||||
+ /* Prevent xenfb refresh */
|
||||
+ info->update_wanted = 0;
|
||||
if (info->irq >= 0)
|
||||
unbind_from_irqhandler(info->irq, info);
|
||||
info->irq = -1;
|
||||
--
|
||||
1.7.3.4
|
||||
|
||||
|
||||
From c837d281ea3bcba81f7cef24bc6d6037be121f02 Mon Sep 17 00:00:00 2001
|
||||
From: Joe Jin <joe.jin@oracle.com>
|
||||
Date: Fri, 7 Jan 2011 18:20:54 +0800
|
||||
Subject: [PATCH 5/6] xen/fb: fix potential memory leak
|
||||
|
||||
This patch fixes a potential memory leak when xenfb connect to
|
||||
the backend fails.
|
||||
|
||||
Thanks for Ian's review and comments.
|
||||
|
||||
[v2: reworded the commit message a bit]
|
||||
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Signed-off-by: Joe Jin <joe.jin@oracle.com>
|
||||
Tested-by: Gurudas Pai <gurudas.pai@oracle.com>
|
||||
Acked-by: Ian Campbell <ian.campbell@citrix.com>
|
||||
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||
Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
drivers/video/xen-fbfront.c | 17 +++++++++--------
|
||||
1 files changed, 9 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/xen-fbfront.c b/drivers/video/xen-fbfront.c
|
||||
index f92313d..95bbd0a 100644
|
||||
--- a/drivers/video/xen-fbfront.c
|
||||
+++ b/drivers/video/xen-fbfront.c
|
||||
@@ -562,26 +562,24 @@ static void xenfb_init_shared_page(struct xenfb_info *info,
|
||||
static int xenfb_connect_backend(struct xenbus_device *dev,
|
||||
struct xenfb_info *info)
|
||||
{
|
||||
- int ret, evtchn;
|
||||
+ int ret, evtchn, irq;
|
||||
struct xenbus_transaction xbt;
|
||||
|
||||
ret = xenbus_alloc_evtchn(dev, &evtchn);
|
||||
if (ret)
|
||||
return ret;
|
||||
- ret = bind_evtchn_to_irqhandler(evtchn, xenfb_event_handler,
|
||||
+ irq = bind_evtchn_to_irqhandler(evtchn, xenfb_event_handler,
|
||||
0, dev->devicetype, info);
|
||||
- if (ret < 0) {
|
||||
+ if (irq < 0) {
|
||||
xenbus_free_evtchn(dev, evtchn);
|
||||
xenbus_dev_fatal(dev, ret, "bind_evtchn_to_irqhandler");
|
||||
- return ret;
|
||||
+ return irq;
|
||||
}
|
||||
- info->irq = ret;
|
||||
-
|
||||
again:
|
||||
ret = xenbus_transaction_start(&xbt);
|
||||
if (ret) {
|
||||
xenbus_dev_fatal(dev, ret, "starting transaction");
|
||||
- return ret;
|
||||
+ goto unbind_irq;
|
||||
}
|
||||
ret = xenbus_printf(xbt, dev->nodename, "page-ref", "%lu",
|
||||
virt_to_mfn(info->page));
|
||||
@@ -603,15 +601,18 @@ static int xenfb_connect_backend(struct xenbus_device *dev,
|
||||
if (ret == -EAGAIN)
|
||||
goto again;
|
||||
xenbus_dev_fatal(dev, ret, "completing transaction");
|
||||
- return ret;
|
||||
+ goto unbind_irq;
|
||||
}
|
||||
|
||||
xenbus_switch_state(dev, XenbusStateInitialised);
|
||||
+ info->irq = irq;
|
||||
return 0;
|
||||
|
||||
error_xenbus:
|
||||
xenbus_transaction_end(xbt, 1);
|
||||
xenbus_dev_fatal(dev, ret, "writing xenstore");
|
||||
+ unbind_irq:
|
||||
+ unbind_from_irqhandler(irq, info);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.3.4
|
||||
|
||||
|
||||
From 58b70037b6eab3520bd875d352afbefdb3949dd8 Mon Sep 17 00:00:00 2001
|
||||
From: Joe Jin <joe.jin@oracle.com>
|
||||
Date: Fri, 7 Jan 2011 14:50:12 +0800
|
||||
Subject: [PATCH 6/6] xen/event: validate irq before get evtchn by irq
|
||||
|
||||
When retrieving the event channel number from irq, the irq
|
||||
number may not be valid under some conditions.
|
||||
|
||||
So far that can be when we suspend/resume and irq ends with -1.
|
||||
Validate and return sanitized irq and provide diagnostics information.
|
||||
|
||||
[v2: reworded the commit message]
|
||||
Signed-off-by: Joe Jin <joe.jin@oracle.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Tested-by: Gurudas Pai <gurudas.pai@oracle.com>
|
||||
Cc: Ian Campbell <ian.campbell@citrix.com>
|
||||
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||
Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
drivers/xen/events.c | 3 +++
|
||||
1 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/xen/events.c b/drivers/xen/events.c
|
||||
index 4d4a23d..25ffe12 100644
|
||||
--- a/drivers/xen/events.c
|
||||
+++ b/drivers/xen/events.c
|
||||
@@ -170,6 +170,9 @@ static struct irq_info *info_for_irq(unsigned irq)
|
||||
|
||||
static unsigned int evtchn_from_irq(unsigned irq)
|
||||
{
|
||||
+ if (WARN(irq < 0 || irq >= nr_irqs, "Invalid irq %d!\n", irq))
|
||||
+ return 0;
|
||||
+
|
||||
return info_for_irq(irq)->evtchn;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.3.4
|
||||
|
||||
From 2904ed8dd5a748c52caf4d8b09d3d9834b5932fa Mon Sep 17 00:00:00 2001
|
||||
From: Sheng Yang <sheng@linux.intel.com>
|
||||
Date: Tue, 21 Dec 2010 14:18:48 +0800
|
||||
Subject: [PATCH 1/2] apic: Move hypervisor detection of x2apic to hypervisor.h
|
||||
|
||||
Then we can reuse it for Xen later.
|
||||
|
||||
Acked-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
Acked-by: Avi Kivity <avi@redhat.com>
|
||||
Acked-by: Ingo Molnar <mingo@elte.hu>
|
||||
Signed-off-by: Sheng Yang <sheng@linux.intel.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
arch/x86/include/asm/hypervisor.h | 9 +++++++++
|
||||
arch/x86/kernel/apic/apic.c | 5 +++--
|
||||
2 files changed, 12 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h
|
||||
index ff2546c..0c6f7af 100644
|
||||
--- a/arch/x86/include/asm/hypervisor.h
|
||||
+++ b/arch/x86/include/asm/hypervisor.h
|
||||
@@ -20,6 +20,8 @@
|
||||
#ifndef _ASM_X86_HYPERVISOR_H
|
||||
#define _ASM_X86_HYPERVISOR_H
|
||||
|
||||
+#include <asm/kvm_para.h>
|
||||
+
|
||||
extern void init_hypervisor(struct cpuinfo_x86 *c);
|
||||
extern void init_hypervisor_platform(void);
|
||||
|
||||
@@ -47,4 +49,11 @@ extern const struct hypervisor_x86 x86_hyper_vmware;
|
||||
extern const struct hypervisor_x86 x86_hyper_ms_hyperv;
|
||||
extern const struct hypervisor_x86 x86_hyper_xen_hvm;
|
||||
|
||||
+static inline bool hypervisor_x2apic_available(void)
|
||||
+{
|
||||
+ if (kvm_para_available())
|
||||
+ return true;
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
#endif
|
||||
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
|
||||
index 3f838d5..8408f2d 100644
|
||||
--- a/arch/x86/kernel/apic/apic.c
|
||||
+++ b/arch/x86/kernel/apic/apic.c
|
||||
@@ -50,8 +50,8 @@
|
||||
#include <asm/mtrr.h>
|
||||
#include <asm/smp.h>
|
||||
#include <asm/mce.h>
|
||||
-#include <asm/kvm_para.h>
|
||||
#include <asm/tsc.h>
|
||||
+#include <asm/hypervisor.h>
|
||||
|
||||
unsigned int num_processors;
|
||||
|
||||
@@ -1476,7 +1476,8 @@ void __init enable_IR_x2apic(void)
|
||||
/* IR is required if there is APIC ID > 255 even when running
|
||||
* under KVM
|
||||
*/
|
||||
- if (max_physical_apicid > 255 || !kvm_para_available())
|
||||
+ if (max_physical_apicid > 255 ||
|
||||
+ !hypervisor_x2apic_available())
|
||||
goto nox2apic;
|
||||
/*
|
||||
* without IR all CPUs can be addressed by IOAPIC/MSI
|
||||
--
|
||||
1.7.3.4
|
||||
|
||||
|
||||
From d9b8ca8474fd4fdd43ba6d97a4fee8b49b978067 Mon Sep 17 00:00:00 2001
|
||||
From: Sheng Yang <sheng@linux.intel.com>
|
||||
Date: Tue, 21 Dec 2010 14:18:49 +0800
|
||||
Subject: [PATCH 2/2] xen: HVM X2APIC support
|
||||
|
||||
This patch is similiar to Gleb Natapov's patch for KVM, which enable the
|
||||
hypervisor to emulate x2apic feature for the guest. By this way, the emulation
|
||||
of lapic would be simpler with x2apic interface(MSR), and faster.
|
||||
|
||||
[v2: Re-organized 'xen_hvm_need_lapic' per Ian Campbell suggestion]
|
||||
|
||||
Acked-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
Signed-off-by: Sheng Yang <sheng@linux.intel.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
arch/x86/include/asm/hypervisor.h | 3 ++
|
||||
arch/x86/include/asm/xen/hypervisor.h | 35 +++++++++++++++++++++++++++++++++
|
||||
arch/x86/xen/enlighten.c | 31 +++++++++++-----------------
|
||||
3 files changed, 50 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h
|
||||
index 0c6f7af..7a15153 100644
|
||||
--- a/arch/x86/include/asm/hypervisor.h
|
||||
+++ b/arch/x86/include/asm/hypervisor.h
|
||||
@@ -21,6 +21,7 @@
|
||||
#define _ASM_X86_HYPERVISOR_H
|
||||
|
||||
#include <asm/kvm_para.h>
|
||||
+#include <asm/xen/hypervisor.h>
|
||||
|
||||
extern void init_hypervisor(struct cpuinfo_x86 *c);
|
||||
extern void init_hypervisor_platform(void);
|
||||
@@ -53,6 +54,8 @@ static inline bool hypervisor_x2apic_available(void)
|
||||
{
|
||||
if (kvm_para_available())
|
||||
return true;
|
||||
+ if (xen_x2apic_para_available())
|
||||
+ return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
diff --git a/arch/x86/include/asm/xen/hypervisor.h b/arch/x86/include/asm/xen/hypervisor.h
|
||||
index 396ff4c..66d0fff 100644
|
||||
--- a/arch/x86/include/asm/xen/hypervisor.h
|
||||
+++ b/arch/x86/include/asm/xen/hypervisor.h
|
||||
@@ -37,4 +37,39 @@
|
||||
extern struct shared_info *HYPERVISOR_shared_info;
|
||||
extern struct start_info *xen_start_info;
|
||||
|
||||
+#include <asm/processor.h>
|
||||
+
|
||||
+static inline uint32_t xen_cpuid_base(void)
|
||||
+{
|
||||
+ uint32_t base, eax, ebx, ecx, edx;
|
||||
+ char signature[13];
|
||||
+
|
||||
+ for (base = 0x40000000; base < 0x40010000; base += 0x100) {
|
||||
+ cpuid(base, &eax, &ebx, &ecx, &edx);
|
||||
+ *(uint32_t *)(signature + 0) = ebx;
|
||||
+ *(uint32_t *)(signature + 4) = ecx;
|
||||
+ *(uint32_t *)(signature + 8) = edx;
|
||||
+ signature[12] = 0;
|
||||
+
|
||||
+ if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2))
|
||||
+ return base;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_XEN
|
||||
+extern bool xen_hvm_need_lapic(void);
|
||||
+
|
||||
+static inline bool xen_x2apic_para_available(void)
|
||||
+{
|
||||
+ return xen_hvm_need_lapic();
|
||||
+}
|
||||
+#else
|
||||
+static inline bool xen_x2apic_para_available(void)
|
||||
+{
|
||||
+ return (xen_cpuid_base() != 0);
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
#endif /* _ASM_X86_XEN_HYPERVISOR_H */
|
||||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||||
index 44dcad4..5b8986f 100644
|
||||
--- a/arch/x86/xen/enlighten.c
|
||||
+++ b/arch/x86/xen/enlighten.c
|
||||
@@ -1256,25 +1256,6 @@ asmlinkage void __init xen_start_kernel(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
-static uint32_t xen_cpuid_base(void)
|
||||
-{
|
||||
- uint32_t base, eax, ebx, ecx, edx;
|
||||
- char signature[13];
|
||||
-
|
||||
- for (base = 0x40000000; base < 0x40010000; base += 0x100) {
|
||||
- cpuid(base, &eax, &ebx, &ecx, &edx);
|
||||
- *(uint32_t *)(signature + 0) = ebx;
|
||||
- *(uint32_t *)(signature + 4) = ecx;
|
||||
- *(uint32_t *)(signature + 8) = edx;
|
||||
- signature[12] = 0;
|
||||
-
|
||||
- if (!strcmp("XenVMMXenVMM", signature) && ((eax - base) >= 2))
|
||||
- return base;
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int init_hvm_pv_info(int *major, int *minor)
|
||||
{
|
||||
uint32_t eax, ebx, ecx, edx, pages, msr, base;
|
||||
@@ -1384,6 +1365,18 @@ static bool __init xen_hvm_platform(void)
|
||||
return true;
|
||||
}
|
||||
|
||||
+bool xen_hvm_need_lapic(void)
|
||||
+{
|
||||
+ if (xen_pv_domain())
|
||||
+ return false;
|
||||
+ if (!xen_hvm_domain())
|
||||
+ return false;
|
||||
+ if (xen_feature(XENFEAT_hvm_pirqs) && xen_have_vector_callback)
|
||||
+ return false;
|
||||
+ return true;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(xen_hvm_need_lapic);
|
||||
+
|
||||
const __refconst struct hypervisor_x86 x86_hyper_xen_hvm = {
|
||||
.name = "Xen HVM",
|
||||
.detect = xen_hvm_platform,
|
||||
--
|
||||
1.7.3.4
|
||||
|
||||
From 105aad363797212fbd2a4c887b723407c5851175 Mon Sep 17 00:00:00 2001
|
||||
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Date: Thu, 9 Dec 2010 15:01:11 -0500
|
||||
|
@ -1135,3 +672,17 @@ index edc140a..bbdd982 100644
|
|||
--
|
||||
1.7.3.4
|
||||
|
||||
--- a/arch/x86/xen/setup.c 2011-01-05 00:50:19.000000000 +0000
|
||||
+++ b/arch/x86/xen/setup.c 2011-01-24 20:29:23.000000000 +0000
|
||||
@@ -179,7 +179,10 @@
|
||||
e820.nr_map = 0;
|
||||
xen_extra_mem_start = mem_end;
|
||||
for (i = 0; i < memmap.nr_entries; i++) {
|
||||
- unsigned long long end = map[i].addr + map[i].size;
|
||||
+ unsigned long long end;
|
||||
+ if (map[i].type == E820_RAM)
|
||||
+ map[i].size &= ~(PAGE_SIZE-1);
|
||||
+ end = map[i].addr + map[i].size;
|
||||
|
||||
if (map[i].type == E820_RAM && end > mem_end) {
|
||||
/* RAM off the end - may be partially included */
|
||||
|
|
Loading…
Reference in New Issue