Index: xen-unstable.hg/xen/arch/ia64/linux-xen/smpboot.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/smpboot.c	2007-12-08 11:28:36.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/smpboot.c	2007-12-08 11:56:35.000000000 +0900
@@ -441,6 +441,18 @@ start_secondary (void *unused)
 	cpu_init();
 	smp_callin();
 
+    {
+        unsigned long rr6, rr7;
+        printk("Twiddle rr for cpu %d\n", smp_processor_id());
+        rr6 = ia64_get_rr(6UL << 61);
+        rr7 = ia64_get_rr(7UL << 61);
+        ia64_set_rr(6UL << 61, 0x739);
+        ia64_set_rr(7UL << 61, 0x739);
+        ia64_set_rr(6UL << 61, rr6);
+        ia64_set_rr(7UL << 61, rr7);
+        ia64_srlz_d();
+    }
+
 #ifdef XEN
 	startup_cpu_idle_loop();
 #else
Index: xen-unstable.hg/xen/arch/ia64/xen/xensetup.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/xen/xensetup.c	2007-12-08 11:18:39.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/xen/xensetup.c	2007-12-08 11:51:50.000000000 +0900
@@ -237,7 +237,19 @@ static void noinline init_done(void)
     init_xenheap_pages(__pa(__init_begin), __pa(__init_end));
     printk("Freed %ldkB init memory.\n",
            (long)(__init_end-__init_begin)>>10);
-    
+
+    {
+        unsigned long rr6, rr7;
+        printk("Twiddle rr for cpu %d\n", smp_processor_id());
+        rr6 = ia64_get_rr(6UL << 61);
+        rr7 = ia64_get_rr(7UL << 61);
+        ia64_set_rr(6UL << 61, 0x739);
+        ia64_set_rr(7UL << 61, 0x739);
+        ia64_set_rr(6UL << 61, rr6);
+        ia64_set_rr(7UL << 61, rr7);
+        ia64_srlz_d();
+    }
+
     startup_cpu_idle_loop();
 }
 
