a review of the second edition multiprocessor fs kernels shows that launchinit was used to launch additional processors. (on intel these are called application processors, or APs.) use the old structure rather than inventing a new one that has no advantages. Reference: /n/atom/patch/applied2013/fslaunchamd64 Date: Wed Sep 4 18:43:24 CES 2013 Signed-off-by: quanstro@quanstro.net --- /sys/src/fs/ivey/ivey.c Wed Sep 4 18:42:13 2013 +++ /sys/src/fs/ivey/ivey.c Wed Sep 4 18:42:13 2013 @@ -65,12 +65,6 @@ { int i; - /* - * mutiprocessing. ta-da! - */ - sys->epoch = rdtsc(); - active.thunderbirdsarego = 1; - settime(rtctime()); boottime = time(); --- /sys/src/fs/amd64/arch.c Wed Sep 4 18:42:14 2013 +++ /sys/src/fs/amd64/arch.c Wed Sep 4 18:42:15 2013 @@ -474,6 +474,17 @@ void launchinit(void) { + /* + * mutiprocessing. ta-da! + */ + sys->epoch = rdtsc(); + active.thunderbirdsarego = 1; +} + +void +launchhalt(void) +{ + lapicinitaps(); } void --- /sys/src/fs/pc/pc.c Wed Sep 4 18:42:16 2013 +++ /sys/src/fs/pc/pc.c Wed Sep 4 18:42:17 2013 @@ -500,6 +500,11 @@ } void +launchhalt(void) +{ +} + +void lights(int, int) { } --- /sys/src/fs/port/portfns.h Wed Sep 4 18:42:18 2013 +++ /sys/src/fs/port/portfns.h Wed Sep 4 18:42:18 2013 @@ -1,3 +1,5 @@ +void bufprint(int); + void accessdir(Iobuf*, Dentry*, int, int); void addfree(Device*, Off, Superb*); void arpstart(void); @@ -48,7 +50,6 @@ void dotrace(int); void consinit(void); void consreset(void); -void consstart(int); int consgetc(void); void consputs(char*, int); void consserve(void); @@ -142,6 +143,7 @@ Devsize jukesize(Device*); void kbdchar(int); void lights(int, int); +void launchhalt(void); void launchinit(void); void localconfinit(void); int leadgroup(int, int); --- /sys/src/fs/amd64/apic.h Wed Sep 4 18:42:19 2013 +++ /sys/src/fs/amd64/apic.h Wed Sep 4 18:42:20 2013 @@ -87,6 +87,7 @@ void lapicdump(void); int lapiceoi(int); void lapicinit(int, uintmem, int); +void lapicinitaps(void); void lapicipi(int); int lapicisr(int); Apic* lapiclookup(uint); --- /sys/src/fs/amd64/lapic.c Wed Sep 4 18:42:21 2013 +++ /sys/src/fs/amd64/lapic.c Wed Sep 4 18:42:21 2013 @@ -401,6 +401,16 @@ } void +lapicinitaps(void) +{ + lapicrput(Ichi, 0); + lapicrput(Iclo, DSallexc|TMlevel|Lassert|MTir); + microdelay(200); + lapicrput(Iclo, DSallexc|TMlevel|MTir); + delay(10); +} + +void lapicipi(int lapicno) { lapicrput(Ichi, lapicno<<24);