From 82ed62a7944219fd0cd9ed8d3b48a12dec649b32 Mon Sep 17 00:00:00 2001 From: KATO Takenori Date: Mon, 22 Sep 1997 12:20:42 +0000 Subject: [PATCH] Synchronize with sys/i386/i386/machdep.c and trap.c reivisions 1.265 and 1.111, respectively. --- sys/pc98/i386/machdep.c | 32 +++++++++++++++++++++++++++----- sys/pc98/i386/trap.c | 4 +++- sys/pc98/pc98/machdep.c | 32 +++++++++++++++++++++++++++----- 3 files changed, 57 insertions(+), 11 deletions(-) diff --git a/sys/pc98/i386/machdep.c b/sys/pc98/i386/machdep.c index 113c711a9cb..63ea4ea2d63 100644 --- a/sys/pc98/i386/machdep.c +++ b/sys/pc98/i386/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.55 1997/09/03 12:41:15 kato Exp $ + * $Id: machdep.c,v 1.56 1997/09/05 10:14:36 kato Exp $ */ #include "apm.h" @@ -248,6 +248,15 @@ cpu_startup(dummy) */ setup_netisrs(&netisr_set); + /* + * Calculate callout wheel size + */ + for (callwheelsize = 1, callwheelbits = 0; + callwheelsize < ncallout; + callwheelsize <<= 1, ++callwheelbits) + ; + callwheelmask = callwheelsize - 1; + /* * Allocate space for system data structures. * The first available kernel virtual address is in "v". @@ -272,6 +281,7 @@ again: #define valloclim(name, type, num, lim) \ (name) = (type *)v; v = (caddr_t)((lim) = ((name)+(num))) valloc(callout, struct callout, ncallout); + valloc(callwheel, struct callout_tailq, callwheelsize); #ifdef SYSVSHM valloc(shmsegs, struct shmid_ds, shminfo.shmmni); #endif @@ -369,9 +379,14 @@ again: /* * Initialize callouts */ - callfree = callout; - for (i = 1; i < ncallout; i++) - callout[i-1].c_next = &callout[i]; + SLIST_INIT(&callfree); + for (i = 0; i < ncallout; i++) { + SLIST_INSERT_HEAD(&callfree, &callout[i], c_links.sle); + } + + for (i = 0; i < callwheelsize; i++) { + TAILQ_INIT(&callwheel[i]); + } #if defined(USERCONFIG) #if defined(USERCONFIG_BOOT) @@ -851,12 +866,15 @@ struct region_descriptor r_gdt, r_idt; extern struct i386tss common_tss; /* One tss per cpu */ #ifdef VM86 extern struct segment_descriptor common_tssd; +extern int private_tss; +extern u_int my_tr; #endif /* VM86 */ #else struct i386tss common_tss; #ifdef VM86 struct segment_descriptor common_tssd; -u_int private_tss = 0; /* flag indicating private tss */ +u_int private_tss; /* flag indicating private tss */ +u_int my_tr; /* which task register setting */ #endif /* VM86 */ #endif @@ -1504,6 +1522,10 @@ init386(first) common_tss.tss_ioopt = (sizeof common_tss) << 16; gsel_tss = GSEL(GPROC0_SEL, SEL_KPL); ltr(gsel_tss); +#ifdef VM86 + private_tss = 0; + my_tr = GPROC0_SEL; +#endif dblfault_tss.tss_esp = dblfault_tss.tss_esp0 = dblfault_tss.tss_esp1 = dblfault_tss.tss_esp2 = (int) &dblfault_stack[sizeof(dblfault_stack)]; diff --git a/sys/pc98/i386/trap.c b/sys/pc98/i386/trap.c index 202bed8893b..713b55e04cb 100644 --- a/sys/pc98/i386/trap.c +++ b/sys/pc98/i386/trap.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.34 1997/08/29 08:15:57 kato Exp $ + * $Id: trap.c,v 1.35 1997/09/06 01:19:10 kato Exp $ */ /* @@ -830,6 +830,8 @@ trap_fatal(frame) printf("tty "); if ((cpl & bio_imask) == bio_imask) printf("bio "); + if ((cpl & cam_imask) == cam_imask) + printf("cam "); if (cpl == 0) printf("none"); #ifdef SMP diff --git a/sys/pc98/pc98/machdep.c b/sys/pc98/pc98/machdep.c index 113c711a9cb..63ea4ea2d63 100644 --- a/sys/pc98/pc98/machdep.c +++ b/sys/pc98/pc98/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.55 1997/09/03 12:41:15 kato Exp $ + * $Id: machdep.c,v 1.56 1997/09/05 10:14:36 kato Exp $ */ #include "apm.h" @@ -248,6 +248,15 @@ cpu_startup(dummy) */ setup_netisrs(&netisr_set); + /* + * Calculate callout wheel size + */ + for (callwheelsize = 1, callwheelbits = 0; + callwheelsize < ncallout; + callwheelsize <<= 1, ++callwheelbits) + ; + callwheelmask = callwheelsize - 1; + /* * Allocate space for system data structures. * The first available kernel virtual address is in "v". @@ -272,6 +281,7 @@ again: #define valloclim(name, type, num, lim) \ (name) = (type *)v; v = (caddr_t)((lim) = ((name)+(num))) valloc(callout, struct callout, ncallout); + valloc(callwheel, struct callout_tailq, callwheelsize); #ifdef SYSVSHM valloc(shmsegs, struct shmid_ds, shminfo.shmmni); #endif @@ -369,9 +379,14 @@ again: /* * Initialize callouts */ - callfree = callout; - for (i = 1; i < ncallout; i++) - callout[i-1].c_next = &callout[i]; + SLIST_INIT(&callfree); + for (i = 0; i < ncallout; i++) { + SLIST_INSERT_HEAD(&callfree, &callout[i], c_links.sle); + } + + for (i = 0; i < callwheelsize; i++) { + TAILQ_INIT(&callwheel[i]); + } #if defined(USERCONFIG) #if defined(USERCONFIG_BOOT) @@ -851,12 +866,15 @@ struct region_descriptor r_gdt, r_idt; extern struct i386tss common_tss; /* One tss per cpu */ #ifdef VM86 extern struct segment_descriptor common_tssd; +extern int private_tss; +extern u_int my_tr; #endif /* VM86 */ #else struct i386tss common_tss; #ifdef VM86 struct segment_descriptor common_tssd; -u_int private_tss = 0; /* flag indicating private tss */ +u_int private_tss; /* flag indicating private tss */ +u_int my_tr; /* which task register setting */ #endif /* VM86 */ #endif @@ -1504,6 +1522,10 @@ init386(first) common_tss.tss_ioopt = (sizeof common_tss) << 16; gsel_tss = GSEL(GPROC0_SEL, SEL_KPL); ltr(gsel_tss); +#ifdef VM86 + private_tss = 0; + my_tr = GPROC0_SEL; +#endif dblfault_tss.tss_esp = dblfault_tss.tss_esp0 = dblfault_tss.tss_esp1 = dblfault_tss.tss_esp2 = (int) &dblfault_stack[sizeof(dblfault_stack)];