WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] Fix vcpu hotplug

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] Fix vcpu hotplug
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 04 Jun 2007 03:14:43 -0700
Delivery-date: Mon, 04 Jun 2007 03:14:25 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1178224706 21600
# Node ID 63263d715d4309e7bccdd43d0f9c5c49be8c52ac
# Parent  f8aede89c7065a5376a544c0b9bd49d4b22ac954
[IA64] Fix vcpu hotplug

When domain is saved and restored, the following message is printed out.
bind_ipi_to_irqhandler()/bind_virq_to_irqhandler() should be called
in process context.  Move the call from cpu_init() to __cpu_init() like x86.

BUG: sleeping function called from invalid context at /src1/yamahata/hg/xen/ia64
/my150/compile/test-0/xen-ia64-unstable.hg/linux-2.6.18-xen/mm/slab.c:2901
in_atomic():0, irqs_disabled():1

Call Trace:
 [<a00000010001b190>] show_stack+0x50/0xa0
                                sp=e0000000004ff8b0 bsp=e0000000004f9358
 [<a00000010001b210>] dump_stack+0x30/0x60
                                sp=e0000000004ffa80 bsp=e0000000004f9340
 [<a000000100070f40>] __might_sleep+0x2c0/0x2e0
                                sp=e0000000004ffa80 bsp=e0000000004f9318
 [<a00000010012c230>] __kmalloc+0xb0/0x320
                                sp=e0000000004ffa90 bsp=e0000000004f92e0
 [<a0000001001a98d0>] proc_create+0x110/0x1c0
                                sp=e0000000004ffa90 bsp=e0000000004f9298
 [<a0000001001a9ca0>] proc_mkdir_mode+0x40/0xe0
                                sp=e0000000004ffaa0 bsp=e0000000004f9268
 [<a0000001001a9d70>] proc_mkdir+0x30/0x60
                                sp=e0000000004ffab0 bsp=e0000000004f9240
 [<a0000001000e97e0>] register_handler_proc+0x1a0/0x1e0
                                sp=e0000000004ffab0 bsp=e0000000004f91f0
 [<a0000001000e6420>] setup_irq+0x440/0x4e0
                                sp=e0000000004ffb30 bsp=e0000000004f9198
 [<a0000001000e68c0>] request_irq+0x140/0x1a0
                                sp=e0000000004ffb30 bsp=e0000000004f9150
 [<a0000001003e7a20>] bind_ipi_to_irqhandler+0x260/0x2c0
                                sp=e0000000004ffb30 bsp=e0000000004f90e8
 [<a000000100019780>] xen_register_percpu_irq+0x2c0/0x880
                                sp=e0000000004ffb40 bsp=e0000000004f9098
 [<a00000010001a1f0>] xen_smp_intr_init+0x170/0x1c0
                                sp=e0000000004ffb40 bsp=e0000000004f9070
 [<a00000010003d350>] cpu_init+0x1090/0x10e0
                                sp=e0000000004ffb50 bsp=e0000000004f8fe0
 [<a0000001000607a0>] start_secondary+0xc0/0x520
                                sp=e0000000004ffe30 bsp=e0000000004f8f90
 [<a0000001000105f0>] __end_ivt_text+0x6d0/0x700
                                sp=e0000000004ffe30 bsp=e0000000004f8f90

Signed-off-by: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c |   37 ++++++++++++++++-------
 1 files changed, 27 insertions(+), 10 deletions(-)

diff -r f8aede89c706 -r 63263d715d43 
linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c
--- a/linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c  Thu May 03 14:27:26 
2007 -0600
+++ b/linux-2.6-xen-sparse/arch/ia64/kernel/irq_ia64.c  Thu May 03 14:38:26 
2007 -0600
@@ -319,9 +319,9 @@ static struct irqaction resched_irqactio
  * required.
  */
 static void
-xen_register_percpu_irq (unsigned int vec, struct irqaction *action, int save)
-{
-       unsigned int cpu = smp_processor_id();
+xen_register_percpu_irq(unsigned int cpu, unsigned int vec,
+                        struct irqaction *action, int save)
+{
        irq_desc_t *desc;
        int irq = 0;
 
@@ -423,7 +423,8 @@ xen_bind_early_percpu_irq (void)
         * BSP will face with such step shortly
         */
        for (i = 0; i < late_irq_cnt; i++)
-               xen_register_percpu_irq(saved_percpu_irqs[i].irq,
+               xen_register_percpu_irq(smp_processor_id(),
+                                       saved_percpu_irqs[i].irq,
                                        saved_percpu_irqs[i].action, 0);
 }
 
@@ -479,11 +480,21 @@ static struct notifier_block unbind_evtc
 #endif
 
 DECLARE_PER_CPU(int, ipi_to_irq[NR_IPIS]);
+void xen_smp_intr_init_early(unsigned int cpu)
+{
+#ifdef CONFIG_SMP
+       unsigned int i;
+
+       for (i = 0; i < saved_irq_cnt; i++)
+               xen_register_percpu_irq(cpu, saved_percpu_irqs[i].irq,
+                                       saved_percpu_irqs[i].action, 0);
+#endif
+}
+
 void xen_smp_intr_init(void)
 {
 #ifdef CONFIG_SMP
        unsigned int cpu = smp_processor_id();
-       unsigned int i = 0;
        struct callback_register event = {
                .type = CALLBACKTYPE_event,
                .address = (unsigned long)&xen_event_callback,
@@ -500,12 +511,9 @@ void xen_smp_intr_init(void)
 
        /* This should be piggyback when setup vcpu guest context */
        BUG_ON(HYPERVISOR_callback_op(CALLBACKOP_register, &event));
-
-       for (i = 0; i < saved_irq_cnt; i++)
-               xen_register_percpu_irq(saved_percpu_irqs[i].irq,
-                                       saved_percpu_irqs[i].action, 0);
 #endif /* CONFIG_SMP */
 }
+
 #endif /* CONFIG_XEN */
 
 void
@@ -516,7 +524,8 @@ register_percpu_irq (ia64_vector vec, st
 
 #ifdef CONFIG_XEN
        if (is_running_on_xen())
-               return xen_register_percpu_irq(vec, action, 1);
+               return xen_register_percpu_irq(smp_processor_id(), 
+                                              vec, action, 1);
 #endif
 
        for (irq = 0; irq < NR_IRQS; ++irq)
@@ -572,6 +581,14 @@ ia64_send_ipi (int cpu, int vector, int 
                /* TODO: we need to call vcpu_up here */
                if (unlikely(vector == ap_wakeup_vector)) {
                        extern void xen_send_ipi (int cpu, int vec);
+
+                       /* XXX
+                        * This should be in __cpu_up(cpu) in ia64 smpboot.c
+                        * like x86. But don't want to modify it,
+                        * keep it untouched.
+                        */
+                       xen_smp_intr_init_early(cpu);
+
                        xen_send_ipi (cpu, vector);
                        //vcpu_prepare_and_up(cpu);
                        return;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] Fix vcpu hotplug, Xen patchbot-unstable <=