Go to main content

man pages section 9: DDI and DKI Kernel Functions

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

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

Solaris DDI specific (Solaris 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 the ddi_get_instance() function. Modules which do not have a meaningful instance number should use 0. For more information, see the ddi_get_instance(9F) man page.

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_NAMED

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

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() function 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 processes with the {PRIV_SYS_CONFIG} privilege.

KSTAT_FLAG_PERSISTENT

Indicates that this kstat is to be persistent over time. For persistent kstats, the kstat_delete() function simply marks the kstat as dormant, a subsequent kstat_create() function 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. For more information, see the kstat_delete(9F) man page.

Description

The kstat_create() function is used in conjunction with the kstat_install() function to allocate and initialize a kstat(9S) structure. For more information, see the kstat_install(9F) man page. The method of allocation is generally as follows:

The kstat_create() function allocates and performs necessary system initialization of a kstat(9S) structure. The kstat_create() function 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 the 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, the kstat_install() function is used to make the kstat accessible to the outside world. For more information, see the kstat_install(9F) man page.

Return Values

If successful, the kstat_create() function returns a pointer to the allocated kstat. NULL is returned upon failure.

Context

The kstat_create() function 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);
}

Attributes

See attributes(7) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Interface Stability
Obsolete

See Also

kstat(3KSTAT), privileges(7), ddi_get_instance(9F), kstat_delete(9F), kstat_install(9F), kstat_named_init(9F), kstat(9S), kstat_named(9S), kstat2_create(9F), kstat2_delete(9F), kstat2_install(9F)

Writing Device Drivers in Oracle Solaris 11.4

Notes

The use of the kstat_create() function is deprecated. The function may be removed in a future release of Oracle Solaris. Use the kstat2_create() function instead. For more information, refer to the kstat2_create(9F) man page.