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-ia64-devel

[Xen-ia64-devel] [RFC][Patch] fix boot xen-ia64 on some ia64 platforms

To: "xen-ia64-devel@xxxxxxxxxxxxxxxxxxx" <xen-ia64-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-ia64-devel] [RFC][Patch] fix boot xen-ia64 on some ia64 platforms
From: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx>
Date: Tue, 21 Apr 2009 10:27:02 +0900
Delivery-date: Mon, 20 Apr 2009 18:27:46 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-ia64-devel-request@lists.xensource.com?subject=help>
List-id: Discussion of the ia64 port of Xen <xen-ia64-devel.lists.xensource.com>
List-post: <mailto:xen-ia64-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-ia64-devel>, <mailto:xen-ia64-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Thunderbird 2.0.0.21 (X11/20090320)
Hi,

The following changeset broke booting xen-ia64 on some kinds of ia64 boxes.
http://xenbits.xensource.com/ext/ia64/xen-unstable.hg/rev/3fd8f9b34941

The tasklet_schedule call raise_softirq().
Because raise_softirq() use per_cpu, if we access per_cpu before cpu_init()
the behavior would be unexpected.

I make the following patch for this investigation.
It can boot xen-ia64 on the ia64 boxes.
I'm not sure why Tiger4 can boot the latest xen-ia64.
I didn't find a good-looking solution, what do you think about it?

diff -r 8c806c66a597 xen/arch/ia64/linux-xen/setup.c
--- a/xen/arch/ia64/linux-xen/setup.c   Tue Apr 14 14:04:58 2009 +0900
+++ b/xen/arch/ia64/linux-xen/setup.c   Tue Apr 21 12:03:44 2009 +0900
@@ -67,6 +67,7 @@
 #include <xen/kexec.h>
 #endif

+int enable_dom0_con_tasklet=0;
 #if defined(CONFIG_SMP) && (IA64_CPU_SIZE > PAGE_SIZE)
 # error "struct cpuinfo_ia64 too big!"
 #endif
@@ -592,6 +593,9 @@ late_setup_arch (char **cmdline_p)
 #endif

        cpu_init();     /* initialize the bootstrap CPU */
+
+       enable_dom0_con_tasklet=1;
+       printk("AAA: enable_dom0_con_tasklet\n");

 #ifdef CONFIG_ACPI_BOOT
        acpi_boot_init();
diff -r 8c806c66a597 xen/drivers/char/console.c
--- a/xen/drivers/char/console.c        Tue Apr 14 14:04:58 2009 +0900
+++ b/xen/drivers/char/console.c        Tue Apr 21 12:03:44 2009 +0900
@@ -117,6 +117,8 @@ custom_param("loglvl", parse_loglvl);
 custom_param("loglvl", parse_loglvl);
 custom_param("guest_loglvl", parse_guest_loglvl);

+extern int enable_dom0_con_tasklet;
+
 static atomic_t print_everything = ATOMIC_INIT(0);

 #define ___parse_loglvl(s, ps, lvlstr, lvlnum)          \
@@ -354,7 +356,10 @@ static long guest_console_write(XEN_GUES
         {
             for ( kptr = kbuf; *kptr != '\0'; kptr++ )
                 putchar_console_ring(*kptr);
-            tasklet_schedule(&notify_dom0_con_ring_tasklet);
+              if (enable_dom0_con_tasklet )
+                tasklet_schedule(&notify_dom0_con_ring_tasklet);
+              else
+                send_guest_global_virq(dom0, VIRQ_CON_RING);
         }

         spin_unlock_irq(&console_lock);
@@ -435,7 +440,10 @@ static void __putstr(const char *str)
     {
         while ( (c = *str++) != '\0' )
             putchar_console_ring(c);
-        tasklet_schedule(&notify_dom0_con_ring_tasklet);
+        if (enable_dom0_con_tasklet )
+            tasklet_schedule(&notify_dom0_con_ring_tasklet);
+       else
+            send_guest_global_virq(dom0, VIRQ_CON_RING);
     }
 }


Best Regards,

Akio Takebe

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