Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ kstat_create(9F) — SunOS 5.4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

kstat(3K)

kstat_delete(9F)

kstat_install(9F)

kstat_named_init(9F)

kstat(9S)

kstat_named(9S)

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(char ∗module, int instance, char ∗name, char ∗class , uchar_t type,

ulong_t ndata, uchar_t ks_flag);

INTERFACE LEVEL

Solaris DDI specific (Solaris DDI)

ARGUMENTS

module The name of the provider’s module (such as "sd", "esp", ...).  The "core" kernel (/kernel/unix) uses the name "unix". 

instance The provider’s instance number, as from ddi_get_instance(9F).  Modules which don’t have a meaningful instance number should use 0. 

name A pointer to a string that uniquely identifies this structure. Only KSTAT_STRLEN - 1 characters are significant. 

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. 

type The type of kstat to allocate. Valid types are:

KSTAT_TYPE_NAMED
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

ndata The number of type-specific data records to allocate. 

flag A bit-field of various flags for this kstat.  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’s 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_t∗ksp;
ksp = kstat_create(module, instance, name, class, type, ndata, flags);
if (ksp) {
/∗ ... provider initialization, if necessary ∗/
kstat_install(ksp);
}

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 on failure. 

CONTEXT

kstat_create() can be called from user or kernel context. 

SEE ALSO

kstat(3K), kstat_delete(9F), kstat_install(9F), kstat_named_init(9F), kstat(9S), kstat_named(9S)

Writing Device Drivers

SunOS 5.4  —  Last change: 4 Apr 1994

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026