/* * exit kernel either on a panic or user request */ void exit(int code) { shutdown(code); splhi(); archreboot(); }
/* * exit kernel either on a panic or user request */ void exit(int) { cpushutdown(); splfhi(); archreboot(); }
/* * exit kernel either on a panic or user request */ void exit(int code) { shutdown(code); splhi(); if (m->machno == 0) archreboot(); else { intrcpushutdown(); stopcpu(m->machno); for (;;) idlehands(); } }
/* * the new kernel is already loaded at address `code' * of size `size' and entry point `entry'. */ void reboot(void *entry, void *code, ulong size) { void (*f)(ulong, ulong, ulong); iprint("starting reboot..."); writeconf(); shutdown(0); /* * should be the only processor running now */ print("shutting down...\n"); delay(200); /* turn off buffered serial console */ serialoq = nil; /* shutdown devices */ chandevshutdown(); /* call off the dog */ clockshutdown(); splhi(); /* setup reboot trampoline function */ f = (void*)REBOOTADDR; memmove(f, rebootcode, sizeof(rebootcode)); cacheuwbinv(); l2cacheuwb(); print("rebooting..."); iprint("entry %#lux code %#lux size %ld\n", PADDR(entry), PADDR(code), size); delay(100); /* wait for uart to quiesce */ /* off we go - never to return */ cacheuwbinv(); l2cacheuwb(); (*f)(PADDR(entry), PADDR(code), size); iprint("loaded kernel returned!\n"); delay(1000); archreboot(); }
void exit(int ispanic) { up = 0; spllo(); print("cpu %d exiting\n", m->machno); /* Shutdown running devices */ chandevshutdown(); delay(1000); splhi(); if(ispanic) for(;;); archreboot(); }
void exit(int ispanic) { shutdown(ispanic); archreboot(); }