diff options
-rw-r--r-- | usr/src/man/man1m/dispadmin.1m | 10 | ||||
-rw-r--r-- | usr/src/man/man4/fx_dptbl.4 | 22 | ||||
-rw-r--r-- | usr/src/man/man4/rt_dptbl.4 | 17 | ||||
-rw-r--r-- | usr/src/man/man4/ts_dptbl.4 | 19 | ||||
-rw-r--r-- | usr/src/uts/common/conf/param.c | 13 | ||||
-rw-r--r-- | usr/src/uts/common/io/usb/usba/hubdi.c | 137 | ||||
-rw-r--r-- | usr/src/uts/common/os/softint.c | 46 | ||||
-rw-r--r-- | usr/src/uts/sun/sys/ser_async.h | 10 |
8 files changed, 121 insertions, 153 deletions
diff --git a/usr/src/man/man1m/dispadmin.1m b/usr/src/man/man1m/dispadmin.1m index 91f260bc01..0f7af2d255 100644 --- a/usr/src/man/man1m/dispadmin.1m +++ b/usr/src/man/man1m/dispadmin.1m @@ -127,11 +127,11 @@ Moreover, the values must describe a table that is the same size (has same number of priority levels) as the table being overwritten. Super-user privileges are required in order to use the \fB-s\fR option. .sp -Specify time quantum values for scheduling classes in system clock ticks, and -not in constant-time units. Time quantum values are based on the value of the -kernel's \fBhz\fR variable. If kernel variable \fBhires_tick\fR is set to -\fB1\fR to get higher resolution clock behavior, the actual time quanta will be -reduced by the order of \fB10\fR. +Time quantum values for scheduling classes are specified in system clock ticks +rather than constant-time units. These values are based on the value of the +kernel's \fBhz\fR variable. By default, the system operates at 1000 Hz and +thus with a quantum of 1 millisecond. If the kernel tunable \fBhires_tick\fR +is set to 0, this drops to 100 Hz for a larger quantum of 10 milliseconds. .sp The \fB-g\fR and \fB-s\fR options are mutually exclusive: you may not retrieve the table at the same time you are overwriting it. diff --git a/usr/src/man/man4/fx_dptbl.4 b/usr/src/man/man4/fx_dptbl.4 index 4373e7705c..ce2ad1bc3f 100644 --- a/usr/src/man/man4/fx_dptbl.4 +++ b/usr/src/man/man4/fx_dptbl.4 @@ -7,14 +7,11 @@ .SH NAME fx_dptbl \- fixed priority dispatcher parameter table .SH SYNOPSIS -.LP .nf \fBfx_dptbl\fR .fi .SH DESCRIPTION -.sp -.LP The process scheduler or dispatcher is the portion of the kernel that controls allocation of the CPU to processes. The scheduler supports the notion of scheduling classes, where each class defines a scheduling policy used to @@ -67,9 +64,11 @@ processes at a particular level, as the time quantum of a fixed priority process can be changed by the user with the \fBpriocntl\fR(1) command or the \fBpriocntl\fR(2) system call. .sp -In the high resolution clock mode (\fBhires_tick\fR set to \fB1\fR), the value -of \fBhz\fR is set to \fB1000\fR. Increase quantums to maintain the same -absolute time quantums. +In the default high resolution clock mode (\fBhires_tick\fR set to \fB1\fR), +the value of \fBhz\fR is set to \fB1000\fR. If this value is overridden to +\fB0\fR then \fBhz\fR will instead be \fB100\fR; the number of ticks per +quantum must then be decreased to maintain the same length of quantum in +absolute time. .sp An administrator can affect the behavior of the fixed priority portion of the scheduler by reconfiguring the \fBfx_dptbl\fR. There are two methods available @@ -78,8 +77,6 @@ for doing this: reconfigure with a loadable module at boot-time or by using .RE .SS "fx_dptbl Loadable Module" -.sp -.LP The \fBfx_dptbl\fR can be reconfigured with a loadable module that contains a new fixed priority dispatch table. The module containing the dispatch table is separate from the \fBFX\fR loadable module, which contains the rest of the @@ -88,8 +85,6 @@ number of fixed priority priority levels or the set of global scheduling priorities used by the fixed priority class. The relevant procedure and source code is described in Replacing the fx_dptbl Loadable Module below. .SS "dispadmin Configuration File" -.sp -.LP The \fBfx_quantum\fR values in the \fBfx_dptbl\fR can be examined and modified on a running system using the \fBdispadmin\fR(1M) command. Invoking \fBdispadmin\fR for the fixed-priority class allows the administrator to @@ -141,8 +136,6 @@ positive integer specifying the desired time quantum in the resolution given by See Examples for an example of an excerpt of a \fBdispadmin\fR configuration file. .SS "Replacing the fx_dptbl Loadable Module" -.sp -.LP To change the size of the fixed priority dispatch table, you must build the loadable module that contains the dispatch table information. Save the existing module before using the following procedure. @@ -202,7 +195,6 @@ Reboot the system to use the new dispatch table. Exercise great care in using the preceding method to replace the dispatch table. A mistake can result in panics, thus making the system unusable. .SH EXAMPLES -.LP \fBExample 1 \fRConfiguration File Excerpt .sp .LP @@ -395,15 +387,11 @@ fx_getmaxumdpri() .sp .SH SEE ALSO -.sp -.LP \fBpriocntl\fR(1), \fBdispadmin\fR(1M), \fBpriocntl\fR(2), \fBsystem\fR(4) .sp .LP \fISystem Administration Guide, Volume 1, System Interface Guide\fR .SH NOTES -.sp -.LP In order to improve performance under heavy system load, both the \fBnfsd\fR daemon and the \fBlockd\fR daemon utilize the maximum priority in the \fBFX\fR class. Unusual \fBfx_dptbl\fR configurations may have significant negative diff --git a/usr/src/man/man4/rt_dptbl.4 b/usr/src/man/man4/rt_dptbl.4 index b24b3d72f4..bace4ec80b 100644 --- a/usr/src/man/man4/rt_dptbl.4 +++ b/usr/src/man/man4/rt_dptbl.4 @@ -7,8 +7,6 @@ .SH NAME rt_dptbl \- real-time dispatcher parameter table .SH DESCRIPTION -.sp -.LP The process scheduler (or dispatcher) is the portion of the kernel that controls allocation of the \fBCPU\fR to processes. The scheduler supports the notion of scheduling classes where each class defines a scheduling policy, used @@ -59,9 +57,11 @@ processes at a particular level as the time quantum of a real-time process can be changed by the user with the \fBpriocntl\fR command or the \fBpriocntl\fR system call. .sp -In the high resolution clock mode (\fBhires_tick\fR set to \fB1\fR), the value -of \fBhz\fR is set to \fB1000\fR. Increase quantums to maintain the same -absolute time quantums. +In the default high resolution clock mode (\fBhires_tick\fR set to \fB1\fR), +the value of \fBhz\fR is set to \fB1000\fR. If this value is overridden to +\fB0\fR then \fBhz\fR will instead be \fB100\fR; the number of ticks per +quantum must then be decreased to maintain the same length of quantum in +absolute time. .RE .sp @@ -71,8 +71,6 @@ scheduler by reconfiguring the \fBrt_dptbl\fR. There are two methods available for doing this: reconfigure with a loadable module at boot-time or by using \fBdispadmin\fR(1M) at run-time. .SS "rt_dptbl Loadable Module" -.sp -.LP The \fBrt_dptbl\fR can be reconfigured with a loadable module which contains a new real time dispatch table. The module containing the dispatch table is separate from the RT loadable module which contains the rest of the real time @@ -81,8 +79,6 @@ time priority levels or the set of global scheduling priorities used by the real time class. The relevant procedure and source code is described in the Examples section. .SS "dispadmin Configuration File" -.sp -.LP The \fBrt_quantum\fR values in the \fBrt_dptbl\fR can be examined and modified on a running system using the \fBdispadmin\fR(1M) command. Invoking \fBdispadmin\fR for the real-time class allows the administrator to retrieve @@ -120,7 +116,6 @@ level. Each \fBrt_quantum\fR entry must be either a positive integer specifying the desired time quantum (in the resolution given by \fIres\fR), or the value -2 indicating an infinite time quantum for that level. .SH EXAMPLES -.LP \fBExample 1 \fRA Sample \fBdispadmin\fR Configuration File .sp .LP @@ -341,8 +336,6 @@ rtdpent_t config_rt_dptbl[] = { .in -2 .SH SEE ALSO -.sp -.LP \fBpriocntl\fR(1), \fBdispadmin\fR(1M), \fBpriocntl\fR(2), \fBsystem\fR(4) .sp .LP diff --git a/usr/src/man/man4/ts_dptbl.4 b/usr/src/man/man4/ts_dptbl.4 index f6e7db3482..9dbcc11d15 100644 --- a/usr/src/man/man4/ts_dptbl.4 +++ b/usr/src/man/man4/ts_dptbl.4 @@ -7,8 +7,6 @@ .SH NAME ts_dptbl \- time-sharing dispatcher parameter table .SH DESCRIPTION -.sp -.LP The process scheduler (or dispatcher) is the portion of the kernel that controls allocation of the \fBCPU\fR to processes. The scheduler supports the notion of scheduling classes where each class defines a scheduling policy, used @@ -65,9 +63,11 @@ only member of the \fBts_dptbl\fR which cannot be changed with The length of the time quantum allocated to processes at this level in ticks (\fBhz\fR). .sp -In the high resolution clock mode (\fBhires_tick\fR set to \fB1\fR), the value -of \fBhz\fR is set to \fB1000\fR. Increase quantums to maintain the same -absolute time quantums. +In the default high resolution clock mode (\fBhires_tick\fR set to \fB1\fR), +the value of \fBhz\fR is set to \fB1000\fR. If this value is overridden to +\fB0\fR then \fBhz\fR will instead be \fB100\fR; the number of ticks per +quantum must then be decreased to maintain the same length of quantum in +absolute time. .RE .sp @@ -129,8 +129,6 @@ scheduling classes. There are two methods available for doing this: reconfigure with a loadable module at boot-time or by using \fBdispadmin\fR(1M) at run-time. .SS "ts_dptbl Loadable Module" -.sp -.LP The \fBts_dptbl\fR can be reconfigured with a loadable module which contains a new time sharing dispatch table. The module containing the dispatch table is separate from the TS loadable module which contains the rest of the @@ -140,8 +138,6 @@ scheduling priorities used by the time-sharing and inter-active classes. The relevant procedure and source code is described in the \fBREPLACING THE TS_DPTBL LOADABLE MODULE\fR section. .SS "dispadmin Configuration File" -.sp -.LP With the exception of \fBts_globpri\fR all of the members of the \fBts_dptbl\fR can be examined and modified on a running system using the \fBdispadmin\fR(1M) command. Invoking \fBdispadmin\fR for the time-sharing or inter-active class @@ -177,7 +173,6 @@ parameters for time-sharing level 0, the second line specifies the parameters for time-sharing level 1, etc. There must be exactly one line for each configured time-sharing priority level. .SH EXAMPLES -.LP \fBExample 1 \fRA Sample From a Configuration File .sp .LP @@ -435,8 +430,6 @@ ts_getmaxumdpri() .in -2 .SH SEE ALSO -.sp -.LP \fBpriocntl\fR(1), \fBdispadmin\fR(1M), \fBpriocntl\fR(2), \fBsystem\fR(4) .sp .LP @@ -445,8 +438,6 @@ ts_getmaxumdpri() .LP \fIProgramming Interfaces Guide\fR .SH NOTES -.sp -.LP \fBdispadmin\fR does some limited sanity checking on the values supplied in the configuration file. The sanity checking is intended to ensure that the new \fBts_dptbl\fR values do not cause the system to panic. The sanity checking diff --git a/usr/src/uts/common/conf/param.c b/usr/src/uts/common/conf/param.c index 64227a3998..045a3872fc 100644 --- a/usr/src/uts/common/conf/param.c +++ b/usr/src/uts/common/conf/param.c @@ -115,7 +115,7 @@ const unsigned int _diskrpm = (unsigned int)DISKRPM; const unsigned long _pgthresh = (unsigned long)PGTHRESH; const unsigned int _maxslp = (unsigned int)MAXSLP; const unsigned long _maxhandspreadpages = (unsigned long)MAXHANDSPREADPAGES; -const int _ncpu = (int)NCPU; +const int _ncpu = (int)NCPU; const int _ncpu_log2 = (int)NCPU_LOG2; const int _ncpu_p2 = (int)NCPU_P2; const unsigned long _defaultstksz = (unsigned long)DEFAULTSTKSZ; @@ -130,9 +130,12 @@ const unsigned int _nbpg = (unsigned int)MMU_PAGESIZE; */ /* - * Default hz is 100, but if we set hires_tick we get higher resolution - * clock behavior (currently defined to be 1000 hz). Higher values seem - * to work, but are not supported. + * hz is 100, but we set hires_tick to get higher resolution clock behavior + * (currently defined to be 1000 hz). Higher values seem to work, but are not + * supported. + * + * This is configured via hires_tick to allow users to explicitly customize it + * to 0 should the need arise. * * If we do decide to play with higher values, remember that hz should * satisfy the following constraints to avoid integer round-off problems: @@ -159,7 +162,7 @@ const unsigned int _nbpg = (unsigned int)MMU_PAGESIZE; int hz = HZ_DEFAULT; int hires_hz = HIRES_HZ_DEFAULT; -int hires_tick = 0; +int hires_tick = 1; int cpu_decay_factor = 10; /* this is no longer tied to clock */ int max_hres_adj; /* maximum adjustment of hrtime per tick */ int tick_per_msec; /* clock ticks per millisecond (zero if hz < 1000) */ diff --git a/usr/src/uts/common/io/usb/usba/hubdi.c b/usr/src/uts/common/io/usb/usba/hubdi.c index 99d75edce3..5207a51490 100644 --- a/usr/src/uts/common/io/usb/usba/hubdi.c +++ b/usr/src/uts/common/io/usb/usba/hubdi.c @@ -55,48 +55,45 @@ extern boolean_t consconfig_console_is_ready(void); /* * Prototypes for static functions */ -static int usba_hubdi_bus_ctl( - dev_info_t *dip, - dev_info_t *rdip, - ddi_ctl_enum_t op, - void *arg, - void *result); - -static int usba_hubdi_map_fault( - dev_info_t *dip, - dev_info_t *rdip, - struct hat *hat, - struct seg *seg, - caddr_t addr, - struct devpage *dp, - pfn_t pfn, - uint_t prot, - uint_t lock); +static int usba_hubdi_bus_ctl(dev_info_t *dip, + dev_info_t *rdip, + ddi_ctl_enum_t op, + void *arg, + void *result); + +static int usba_hubdi_map_fault(dev_info_t *dip, + dev_info_t *rdip, + struct hat *hat, + struct seg *seg, + caddr_t addr, + struct devpage *dp, + pfn_t pfn, + uint_t prot, + uint_t lock); static int hubd_busop_get_eventcookie(dev_info_t *dip, - dev_info_t *rdip, - char *eventname, - ddi_eventcookie_t *cookie); + dev_info_t *rdip, + char *eventname, + ddi_eventcookie_t *cookie); static int hubd_busop_add_eventcall(dev_info_t *dip, - dev_info_t *rdip, - ddi_eventcookie_t cookie, - void (*callback)(dev_info_t *dip, - ddi_eventcookie_t cookie, void *arg, - void *bus_impldata), - void *arg, ddi_callback_id_t *cb_id); + dev_info_t *rdip, + ddi_eventcookie_t cookie, + void (*callback)(dev_info_t *dip, ddi_eventcookie_t cookie, void *arg, + void *bus_impldata), + void *arg, ddi_callback_id_t *cb_id); static int hubd_busop_remove_eventcall(dev_info_t *dip, - ddi_callback_id_t cb_id); + ddi_callback_id_t cb_id); static int hubd_bus_config(dev_info_t *dip, - uint_t flag, - ddi_bus_config_op_t op, - void *arg, - dev_info_t **child); + uint_t flag, + ddi_bus_config_op_t op, + void *arg, + dev_info_t **child); static int hubd_bus_unconfig(dev_info_t *dip, - uint_t flag, - ddi_bus_config_op_t op, - void *arg); + uint_t flag, + ddi_bus_config_op_t op, + void *arg); static int hubd_bus_power(dev_info_t *dip, void *impl_arg, - pm_bus_power_op_t op, void *arg, void *result); + pm_bus_power_op_t op, void *arg, void *result); static usb_port_t hubd_get_port_num(hubd_t *, struct devctl_iocdata *); static dev_info_t *hubd_get_child_dip(hubd_t *, usb_port_t); @@ -251,14 +248,14 @@ usba_hubdi_unregister(dev_info_t *dip) /*ARGSUSED*/ static int usba_hubdi_map_fault(dev_info_t *dip, - dev_info_t *rdip, - struct hat *hat, - struct seg *seg, - caddr_t addr, - struct devpage *dp, - pfn_t pfn, - uint_t prot, - uint_t lock) + dev_info_t *rdip, + struct hat *hat, + struct seg *seg, + caddr_t addr, + struct devpage *dp, + pfn_t pfn, + uint_t prot, + uint_t lock) { return (DDI_FAILURE); } @@ -269,9 +266,9 @@ usba_hubdi_map_fault(dev_info_t *dip, */ int usba_hubdi_bind_root_hub(dev_info_t *dip, - uchar_t *root_hub_config_descriptor, - size_t config_length, - usb_dev_descr_t *root_hub_device_descriptor) + uchar_t *root_hub_config_descriptor, + size_t config_length, + usb_dev_descr_t *root_hub_device_descriptor) { usba_device_t *usba_device; usba_hcdi_t *hcdi = usba_hcdi_get_hcdi(dip); @@ -1145,10 +1142,10 @@ hubd_post_power(hubd_t *hubd, usb_port_t port, pm_bp_child_pwrchg_t *bpc, */ static int usba_hubdi_bus_ctl(dev_info_t *dip, - dev_info_t *rdip, - ddi_ctl_enum_t op, - void *arg, - void *result) + dev_info_t *rdip, + ddi_ctl_enum_t op, + void *arg, + void *result) { usba_device_t *hub_usba_device = usba_get_usba_device(rdip); dev_info_t *root_hub_dip = hub_usba_device->usb_root_hub_dip; @@ -1294,7 +1291,7 @@ usba_hubdi_bus_ctl(dev_info_t *dip, /* * hubd_config_one: - * enumerate one child according to 'port' + * enumerate one child according to 'port' */ static boolean_t @@ -2625,8 +2622,7 @@ hubd_restore_device_state(dev_info_t *dip, hubd_t *hubd) /* * wait at least 3 frames before accessing devices - * (note that delay's minimal time is one clock tick which - * is 10ms unless hires_tick has been changed) + * (note that delay's minimal time is one clock tick). */ mutex_exit(HUBD_MUTEX(hubd)); delay(drv_usectohz(10000)); @@ -3331,8 +3327,8 @@ hubd_set_hub_depth(hubd_t *hubd) int rval; usb_cr_t completion_reason; usb_cb_flags_t cb_flags; - usba_device_t *ud; - uint16_t depth; + usba_device_t *ud; + uint16_t depth; /* * We only need to set the hub depth devices for hubs that are at least @@ -6044,7 +6040,7 @@ hubd_ready_device(hubd_t *hubd, dev_info_t *child_dip, usba_device_t *child_ud, child_ud->usb_active_cfg_ndx = config_index; child_ud->usb_cfg = child_ud->usb_cfg_array[config_index]; child_ud->usb_cfg_length = config_descriptor.wTotalLength; - child_ud->usb_cfg_value = config_descriptor.bConfigurationValue; + child_ud->usb_cfg_value = config_descriptor.bConfigurationValue; child_ud->usb_n_ifs = config_descriptor.bNumInterfaces; child_ud->usb_dip = child_dip; @@ -6089,11 +6085,11 @@ hubd_ready_device(hubd_t *hubd, dev_info_t *child_dip, usba_device_t *child_ud, */ static int hubd_create_child(dev_info_t *dip, - hubd_t *hubd, - usba_device_t *hubd_ud, - usb_port_status_t port_status, - usb_port_t port, - int iteration) + hubd_t *hubd, + usba_device_t *hubd_ud, + usb_port_status_t port_status, + usb_port_t port, + int iteration) { dev_info_t *child_dip = NULL; usb_dev_descr_t usb_dev_descr; @@ -6869,9 +6865,9 @@ hubd_free_usba_device(hubd_t *hubd, usba_device_t *usba_device) */ static int hubd_busop_get_eventcookie(dev_info_t *dip, - dev_info_t *rdip, - char *eventname, - ddi_eventcookie_t *cookie) + dev_info_t *rdip, + char *eventname, + ddi_eventcookie_t *cookie) { hubd_t *hubd = (hubd_t *)hubd_get_soft_state(dip); @@ -6891,12 +6887,11 @@ hubd_busop_get_eventcookie(dev_info_t *dip, static int hubd_busop_add_eventcall(dev_info_t *dip, - dev_info_t *rdip, - ddi_eventcookie_t cookie, - void (*callback)(dev_info_t *dip, - ddi_eventcookie_t cookie, void *arg, - void *bus_impldata), - void *arg, ddi_callback_id_t *cb_id) + dev_info_t *rdip, + ddi_eventcookie_t cookie, + void (*callback)(dev_info_t *dip, ddi_eventcookie_t cookie, void *arg, + void *bus_impldata), + void *arg, ddi_callback_id_t *cb_id) { hubd_t *hubd = (hubd_t *)hubd_get_soft_state(dip); usb_port_t port = hubd_child_dip2port(hubd, rdip); @@ -7671,7 +7666,7 @@ usba_hubdi_open(dev_info_t *dip, dev_t *devp, int flags, int otyp, /* ARGSUSED */ int usba_hubdi_close(dev_info_t *dip, dev_t dev, int flag, int otyp, - cred_t *credp) + cred_t *credp) { hubd_t *hubd; diff --git a/usr/src/uts/common/os/softint.c b/usr/src/uts/common/os/softint.c index ecdb038c79..8801340cf9 100644 --- a/usr/src/uts/common/os/softint.c +++ b/usr/src/uts/common/os/softint.c @@ -58,29 +58,29 @@ * * Starting state is IDLE. * - * softint() + * softint() * * * (c) - * ____________________________________________________ - * | ^ ^ - * v (a) | (b) | - * IDLE--------------------->PEND--------------------->DRAIN - * ^ | | - * | | | - * | | | - * | | | - * | | | - * | d d - * | | | - * | v v - * | PEND DRAIN - * | (e) & & - * |<-----------------------STEAL STEAL - * ^ | - * | | - * | (e) v - * |_________________________<__________________________| + * ____________________________________________________ + * | ^ ^ + * v (a) | (b) | + * IDLE--------------------->PEND--------------------->DRAIN + * ^ | | + * | | | + * | | | + * | | | + * | | | + * | d d + * | | | + * | v v + * | PEND DRAIN + * | (e) & & + * |<-----------------------STEAL STEAL + * ^ | + * | | + * | (e) v + * |_________________________<__________________________| * * * @@ -146,9 +146,9 @@ uint_t softcall_pokemax = 10; /* * This ensures that softcall entries don't get stuck for long. It's expressed - * in 10 milliseconds as 1 unit. When hires_tick is set or other clock frequency - * is used, softcall_init() ensures that it's still expressed as 1 = 10 milli - * seconds. + * in 10 milliseconds as 1 unit. Regardless of the value of hires_tick or + * clock frequency, softcall_init() ensures that it's still expressed as 1 = + * 10 milliseconds. */ unsigned int softcall_delay = 1; diff --git a/usr/src/uts/sun/sys/ser_async.h b/usr/src/uts/sun/sys/ser_async.h index 8e8a573829..0f89bce4c5 100644 --- a/usr/src/uts/sun/sys/ser_async.h +++ b/usr/src/uts/sun/sys/ser_async.h @@ -27,8 +27,6 @@ #ifndef _SYS_SER_ASYNC_H #define _SYS_SER_ASYNC_H -#pragma ident "%Z%%M% %I% %E% SMI" - /* * Initial port setup parameters for async lines */ @@ -57,9 +55,9 @@ extern "C" { #define ZFIFOSZ 3 /* - * this macro needs a constant Hertz, but we can now have a hires_tick. + * This macro needs a constant 100 Hz, but hires_tick or hz may change that. * ztdelay in zs_async.c converts to a true delay based on hz so we - * can use 100 for Hertz here. + * can use 100 Hz here. */ #define ZDELAY(n) ZSDelayConst(100, ZFIFOSZ, NBBY, n) @@ -166,9 +164,9 @@ struct asyncline { * and the second byte is the actual data. The ring buffer * needs to be defined as ushort_t to accomodate this. */ - ushort_t za_ring[RINGSIZE]; + ushort_t za_ring[RINGSIZE]; timeout_id_t za_kick_rcv_id; - int za_kick_rcv_count; + int za_kick_rcv_count; timeout_id_t za_zsa_restart_id; bufcall_id_t za_bufcid; mblk_t *za_rstandby[ZSA_MAX_RSTANDBY]; |