Kernel Functions for Drivers ddi_periodic_delete(9F)
NAME
ddi_periodic_delete - cancel nanosecond periodic timeout
requestsSYNOPSIS
#include
#include
void ddi_periodic_delete(ddi_periodic_t req);
INTERFACE LEVEL
Solaris DDI specific (Solaris DDI)PARAMETERS
req ddi_periodic_t opaque value returned by
ddi_periodic_add(9F)
DESCRIPTION
The ddi_periodic_delete() function cancels the
ddi_periodic_add(9F) request that was previously issued.
As with untimeout(9F), calling ddi_periodic_delete() against
a periodic timeout request which is either running onanother 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 toddi_periodic_delete().
CONTEXT
The ddi_periodic_delete() function may be called from user
or kernel context.EXAMPLES
Example 1 Cancelling a timeout request In the following example, the device driver cancels thetimeout request by calling ddi_periodic_delete() against the
request that was previously issued. /* * Stop the periodic timer */ static voidstop_periodic_timer(struct my_state *statep)
{ddi_periodic_delete(statep->periodic_id);
delay(1); /* wait for one tick */SunOS 5.11 Last change: 6 May 2009 1
Kernel Functions for Drivers ddi_periodic_delete(9F)
mutex_destory(&statep->lock);
} static voidstart_periodic_timer(struct my_state *statep)
{hrtime_t interval = CHECK_INTERVAL;
mutex_init(&statep->lock, NULL, MUTEX_DRIVER,
(void *)DDI_IPL_0);
/** Register my_callback which is invoked periodically
* in CHECK_INTERVAL in kernel context.
*/statep->periodic_id = ddi_periodic_add(my_periodic_func,
statep, interval, DDI_IPL_0);
} static voidmy_periodic_func(void *arg)
{ /* * This handler is invoked periodically. */struct my_state *statep = (struct my_state *)arg;
mutex_enter(&statep->lock);
if (load_unbalanced(statep)) {
balance_tasks(statep);
}mutex_exit(&statep->lock);
}SEE ALSO
cv_timedwait(9F), ddi_intr_get_pri(9F),
ddi_periodic_add(9F), delay(9F), drv_usectohz(9F),
qtimeout(9F), quntimeout(9F), timeout(9F), untimeout(9F) NOTES There might be a race between a callback invocation andddi_periodic_delete(). A device driver should take a respon-
sibility for this avoidance if needed by using the kernel synchronization such as a mutex lock or calling delay(9F) as in the example above.SunOS 5.11 Last change: 6 May 2009 2