summaryrefslogtreecommitdiff
path: root/sys/src/9/mtx
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-11-30 14:56:00 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2015-11-30 14:56:00 +0100
commit7f3659e78f83a59badebeae6414b9b3cd89d7a58 (patch)
treef7d3b4c1efbc4e8ecc14ee6201563db3152012a2 /sys/src/9/mtx
parent254031cf7020f1b185c6d0af89c653a271e0ed01 (diff)
kernel: cleanup exit()/shutdown()/reboot() code
introduce cpushutdown() function that does the common operation of initiating shutdown, returning once all cpu's got the message and are about to shutdown. this avoids duplicated code which isnt really machine specific. automatic reboot on panic only when *debug= is not set and the machine is a cpu server or has no display, otherwise just hang.
Diffstat (limited to 'sys/src/9/mtx')
-rw-r--r--sys/src/9/mtx/dat.h1
-rw-r--r--sys/src/9/mtx/main.c34
2 files changed, 2 insertions, 33 deletions
diff --git a/sys/src/9/mtx/dat.h b/sys/src/9/mtx/dat.h
index 294bca8c5..4e3c7414d 100644
--- a/sys/src/9/mtx/dat.h
+++ b/sys/src/9/mtx/dat.h
@@ -183,7 +183,6 @@ struct
Lock;
short machs;
short exiting;
- short ispanic;
}active;
/*
diff --git a/sys/src/9/mtx/main.c b/sys/src/9/mtx/main.c
index 491580101..f3c5a1568 100644
--- a/sys/src/9/mtx/main.c
+++ b/sys/src/9/mtx/main.c
@@ -211,42 +211,12 @@ userinit(void)
void
reboot(void*, void*, ulong)
{
- exit(0);
}
void
-exit(int ispanic)
+exit(int)
{
- int ms, once;
-
- lock(&active);
- if(ispanic)
- active.ispanic = ispanic;
- else if(m->machno == 0 && (active.machs & (1<<m->machno)) == 0)
- active.ispanic = 0;
- once = active.machs & (1<<m->machno);
- active.machs &= ~(1<<m->machno);
- active.exiting = 1;
- unlock(&active);
-
- if(once)
- print("cpu%d: exiting\n", m->machno);
- spllo();
- for(ms = 5*1000; ms > 0; ms -= TK2MS(2)){
- delay(TK2MS(2));
- if(active.machs == 0 && consactive() == 0)
- break;
- }
-
- if(active.ispanic && m->machno == 0){
- if(cpuserver)
- delay(10000);
- else if(conf.monitor)
- for(;;);
- }
- else
- delay(1000);
-
+ cpushutdown();
watchreset();
}