[IA64] reset_system
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 15 Jun 2006 15:51:58 +0000 (09:51 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 15 Jun 2006 15:51:58 +0000 (09:51 -0600)
Cleanup: EFI_RESET_SYSTEM now always calls domain_shutdown.
machine_restart and machine_halt calls efi reset_system to do their job.

Signed-off-by: Tristan Gingold <tristan.gingold@bull.net>
xen/arch/ia64/linux-xen/head.S
xen/arch/ia64/linux-xen/smpboot.c
xen/arch/ia64/xen/domain.c
xen/arch/ia64/xen/fw_emul.c
xen/arch/ia64/xen/regionreg.c
xen/arch/ia64/xen/xenmisc.c
xen/include/asm-ia64/config.h

index fbdbf47befdb89efcbc9d37bee46cc699f6f3ee7..22145109da59838e4f2327913739f7a7d3b0b60e 100644 (file)
@@ -1010,6 +1010,7 @@ GLOBAL_ENTRY(ia64_delay_loop)
        br.ret.sptk.many rp
 END(ia64_delay_loop)
 
+#ifndef XEN
 /*
  * Return a CPU-local timestamp in nano-seconds.  This timestamp is
  * NOT synchronized across CPUs its return value must never be
@@ -1062,6 +1063,7 @@ GLOBAL_ENTRY(start_kernel_thread)
        br.call.sptk.many rp = sys_exit;;
 1:     br.sptk.few 1b                          // not reached
 END(start_kernel_thread)
+#endif /* XEN */
 
 #ifdef CONFIG_IA64_BRL_EMU
 
index 11e1b1bbc3e65fa91a371156beff5e4fc3479220..ac96fb8cc9cfe8b5cdd05554dafbdcac6f1bc6c6 100644 (file)
@@ -64,7 +64,6 @@
 #ifdef XEN
 #include <xen/domain.h>
 #include <asm/hw_irq.h>
-int ht_per_core = 1;
 #ifndef CONFIG_SMP
 cpumask_t cpu_online_map = CPU_MASK_CPU0;
 EXPORT_SYMBOL(cpu_online_map);
index 98db0f96453ddc1c944bed90c142912db0e3e005..939b27e5e3f142ecc9865549cb2c977880438e68 100644 (file)
@@ -891,22 +891,19 @@ int construct_dom0(struct domain *d,
 
 void machine_restart(char * __unused)
 {
-       if (running_on_sim) dummy();
-       printf("machine_restart called: spinning....\n");
+       if (running_on_sim)
+               printf ("machine_restart called.  spinning...\n");
+       else
+               (*efi.reset_system)(EFI_RESET_WARM,0,0,NULL);
        while(1);
 }
 
 void machine_halt(void)
 {
-       if (running_on_sim) dummy();
-       printf("machine_halt called: spinning....\n");
-       while(1);
-}
-
-void dummy_called(char *function)
-{
-       if (running_on_sim) asm("break 0;;");
-       printf("dummy called in %s: spinning....\n", function);
+       if (running_on_sim)
+               printf ("machine_halt called.  spinning...\n");
+       else
+               (*efi.reset_system)(EFI_RESET_SHUTDOWN,0,0,NULL);
        while(1);
 }
 
index 484375d08917642e5e1aa81bf50bddcc3d1a586f..0f9289fa59eb3a18b69dc450939c14d7d7c70eb9 100644 (file)
@@ -475,13 +475,21 @@ efi_emulator (struct pt_regs *regs, IA64FAULT *fault)
 
        switch (regs->r2) {
            case FW_HYPERCALL_EFI_RESET_SYSTEM:
-               printf("efi.reset_system called ");
-               if (current->domain == dom0) {
-                       printf("(by dom0)\n ");
-                       (*efi.reset_system)(EFI_RESET_WARM,0,0,NULL);
-               } else {
-                       printf("\n");
-                       domain_shutdown (current->domain, SHUTDOWN_reboot);
+               {
+                   u8 reason;
+                   unsigned long val = vcpu_get_gr(v,32);
+                   switch (val)
+                   {
+                   case EFI_RESET_SHUTDOWN:
+                           reason = SHUTDOWN_poweroff;
+                           break;
+                   case EFI_RESET_COLD:
+                   case EFI_RESET_WARM:
+                   default:
+                           reason = SHUTDOWN_reboot;
+                           break;
+                   }
+                   domain_shutdown (current->domain, reason);
                }
                status = EFI_UNSUPPORTED;
                break;
index 278cf19b023719229dac1b5b502e9b05b015f4f9..58c89201fbe6739ca886025239703802bfe42294 100644 (file)
@@ -287,7 +287,7 @@ void init_all_rr(struct vcpu *v)
        //rrv.rrval = v->domain->arch.metaphysical_rr0;
        rrv.ps = PAGE_SHIFT;
        rrv.ve = 1;
-if (!v->vcpu_info) { printf("Stopping in init_all_rr\n"); dummy(); }
+if (!v->vcpu_info) { panic("Stopping in init_all_rr\n"); }
        VCPU(v,rrs[0]) = -1;
        VCPU(v,rrs[1]) = rrv.rrval;
        VCPU(v,rrs[2]) = rrv.rrval;
index 29f8d11e5f534bd37cd7dc9c965be8bdccacb78a..ca40c7b2fe08819d90d3a7878053f32722db11c8 100644 (file)
@@ -94,18 +94,6 @@ void console_print(char *msg)
        printk("console_print called, how did start_kernel return???\n");
 }
 
-void kernel_thread_helper(void)
-{
-       printk("kernel_thread_helper not implemented\n");
-       dummy();
-}
-
-void sys_exit(void)
-{
-       printk("sys_exit not implemented\n");
-       dummy();
-}
-
 ////////////////////////////////////
 // called from unaligned.c
 ////////////////////////////////////
index 5e197f884918f08a67fd7a6fdbba1b0573ad3520..51b05e600bc939acfe51f5a7f6f8a7d1ac39e1a2 100644 (file)
@@ -235,12 +235,6 @@ struct screen_info { };
 #define seq_printf(a,b...) printf(b)
 //#define CONFIG_BLK_DEV_INITRD // needed to reserve memory for domain0
 
-void dummy_called(char *function);
-#define dummy()        dummy_called((char *) __FUNCTION__)
-
-// these declarations got moved at some point, find a better place for them
-extern int ht_per_core;
-
 #ifdef CONFIG_XEN_IA64_DOM0_VP
 #define CONFIG_SHADOW  1
 #endif