KSTAT_CREATE(9F)        Kernel Functions for Drivers        KSTAT_CREATE(9F)
NAME
       kstat_create - create and initialize a new kstat
SYNOPSIS
       #include <sys/types.h>
       #include <sys/kstat.h>       
kstat_t *kstat_create(
const char *ks_module, 
int ks_instance,            
const char *ks_name, 
const char *ks_class, 
uchar_t ks_type,            
ulong_t ks_ndata, 
uchar_t ks_flag);
INTERFACE LEVEL
       illumos DDI specific (illumos DDI)
PARAMETERS
       ks_module                      The name of the provider's module (such as "
sd",
                      "
esp", ...). The "
core" kernel uses the name "unix".       
ks_instance                      The provider's instance number, as from                      
ddi_get_instance(9F). Modules which do not have a
                      meaningful instance number should use 
0.       
ks_name                      A pointer to a string that uniquely identifies this
                      structure. Only 
KSTAT_STRLEN - 1 characters are
                      significant.       
ks_class                      The general class that this kstat belongs to. The
                      following classes are currently in use: 
disk, 
tape,                      
net, 
controller, 
vm, 
kvm, 
hat, 
streams, 
kstat, and                      
misc.       
ks_type                      The type of 
kstat to allocate. Valid types are:                      
KSTAT_TYPE_RAW                                          Raw data; allows more than one
                                          data record per 
kstat.                      
KSTAT_TYPE_NAMED                                          Name=value pairs; allows more than
                                          one data record per 
kstat.                      
KSTAT_TYPE_INTR                                          Interrupt; only one data record
                                          per 
kstat.                      
KSTAT_TYPE_IO                                          I/O; only one data record per                                          
kstat.                      
KSTAT_TYPE_TIMER                                          Event timer statistics; allows
                                          more than one data record per                                          
kstat.       
ks_ndata                      The number of type-specific data records to allocate.       
ks_flag                      A bit-field of various flags for this 
kstat. 
ks_flag                      is some combination of:                      
KSTAT_FLAG_VIRTUAL                                               Tells 
kstat_create() not to
                                               allocate memory for the 
kstat                                               data section; instead, the
                                               driver will set the 
ks_data                                               field to point to the data it
                                               wishes to export. This
                                               provides a convenient way to
                                               export existing data
                                               structures.                      
KSTAT_FLAG_WRITABLE                                               Makes the 
kstat data section
                                               writable by root.                      
KSTAT_FLAG_PERSISTENT                                               Indicates that this 
kstat is
                                               to be persistent over time.
                                               For persistent 
kstats,                                               
kstat_delete(9F) simply marks
                                               the 
kstat as dormant; a
                                               subsequent 
kstat_create()                                               reactivates the kstat. This
                                               feature is provided so that
                                               statistics are not lost
                                               across driver close/open
                                               (such as raw disk 
I/O on a
                                               disk with no mounted
                                               partitions.) Note: Persistent                                               
kstats cannot be virtual,
                                               since 
ks_data points to
                                               garbage as soon as the driver
                                               goes away.
DESCRIPTION
       kstat_create() is used in conjunction with 
kstat_install(9F) to
       allocate and initialize a 
kstat(9S) structure. The method is
       generally as follows:       
kstat_create() allocates and performs necessary system initialization
       of a 
kstat(9S) structure. 
kstat_create() allocates memory for the
       entire 
kstat (header plus data), initializes all header fields,
       initializes the data section to all zeroes, assigns a unique kstat 
ID       (
KID), and puts the kstat onto the system's 
kstat chain. The returned
       kstat is marked invalid because the provider (caller) has not yet had
       a chance to initialize the data section.
       After a successful call to 
kstat_create() the driver must perform any
       necessary initialization of the data section (such as setting the
       name fields in a 
kstat of type 
KSTAT_TYPE_NAMED). Virtual 
kstats must
       have the 
ks_data field set at this time. The provider may also set
       the 
ks_update, 
ks_private, and 
ks_lock fields if necessary.
       Once the 
kstat is completely initialized, 
kstat_install(9F) is used
       to make the 
kstat accessible to the outside world.
RETURN VALUES
       If successful, 
kstat_create() returns a pointer to the allocated       
kstat. 
NULL is returned upon failure.
CONTEXT
       kstat_create() can be called from user or kernel context.
EXAMPLES
       Example 1: Allocating and Initializing a kstat Structure
         pkstat_t   *ksp;
            ksp = kstat_create(module, instance, name, class, type, ndata, flags);
            if (ksp) {
               /* ... provider initialization, if necessary */
               kstat_install(ksp);
            }
SEE ALSO
       kstat(3KSTAT), 
ddi_get_instance(9F), 
kstat_delete(9F),       
kstat_install(9F), 
kstat_named_init(9F), 
kstat(9S), 
kstat_named(9S)       Writing Device Drivers                              September 7, 2015             KSTAT_CREATE(9F)