Kernel Functions for Drivers ddiperiodicdelete(9F)
NAME
ddiperiodicdelete - cancel nanosecond periodic timeout
requests
SYNOPSIS
#include
#include
void ddiperiodicdelete(ddiperiodict req)
INTERFACE LEVEL
Solaris DI specific (Solaris DI)
PARAMETERS
req ddiperiodict opaque value returned by
ddiperiodicadd(9F).
DESCRIPTION
The ddiperiodicdelete() function cancels the
ddiperiodicadd(9F) request that was previously issued.
As with untimeout(9F), calling ddiperiodicdelete() against
a periodic timeout request which is either running on
another CPU, or has already been canceled causes no prob-
lems. Unlike untimeout(9F), there are no restrictions on the
lock which might be held across the call to
ddiperiodicdelete().
CONTEXT
The ddiperiodicdelete() function may be called from user
or kernel context.
EXAMPLES
Example 1 Cancelling a timeout request
In the following example, the device driver cancels the
timeout request by calling ddiperiodicdelete() against the
request that was previously issued.
/*
* Stop the periodic timer
*/
static void
stopperiodictimer(struct mystate *statep)
{
ddiperiodicdelete(statep->periodicid);
mutexdestory(&statep->lock);
SunOS 5.11 Last change: 2 Oct 2007 1
Kernel Functions for Drivers ddiperiodicdelete(9F)
}
static void
startperiodictimer(struct mystate *statep)
{
hrtimet interval = CHECKINTERVAL;
mutexinit(&statep->lock, NUL, MUTEXDRIVER,
(void *)DIPL0);
/*
* Register mycallback which is invoked periodically
* in CHECKINTERVAL in kernel context.
*/
statep->periodicid = ddiperiodicadd(myperiodicfunc,
statep, interval, DIPL0);
}
static void
myperiodicfunc(void *arg)
{
/*
* This handler is invoked periodically.
*/
struct mystate *statep = (struct mystate *)arg;
mutexenter(&statep->lock);
if (loadunbalanced(statep)) {
balancetasks(statep);
}
mutexexit(&statep->lock);
}
SEE ALSO
cvtimedwait(9F), ddiintrgetpri(9F),
ddiperiodicadd(9F), delay(9F), drvusectohz(9F),
qtimeout(9F), quntimeout(9F), timeout(9F), untimeout(9F)
SunOS 5.11 Last change: 2 Oct 2007 2
|