Lines Matching defs:dpr

122 periodic_handler_symbol(ddi_periodic_impl_t *dpr)
126 return (kobj_getsymname((uintptr_t)dpr->dpr_handler, &off));
136 ddi_periodic_impl_t *dpr = arg;
137 mutex_enter(&dpr->dpr_lock);
142 VERIFY((dpr->dpr_flags & (DPF_DISPATCHED | DPF_EXECUTING)) ==
144 VERIFY(dpr->dpr_thread == NULL);
146 if (!(dpr->dpr_flags & DPF_CANCELLED)) {
147 int level = dpr->dpr_level;
148 uint64_t count = dpr->dpr_fire_count;
153 dpr->dpr_flags |= DPF_EXECUTING;
154 dpr->dpr_thread = curthread;
155 mutex_exit(&dpr->dpr_lock);
160 DTRACE_PROBE4(ddi__periodic__execute, void *, dpr->dpr_handler,
161 void *, dpr->dpr_arg, int, level, uint64_t, count);
162 (*dpr->dpr_handler)(dpr->dpr_arg);
163 DTRACE_PROBE4(ddi__periodic__done, void *, dpr->dpr_handler,
164 void *, dpr->dpr_arg, int, level, uint64_t, count);
166 mutex_enter(&dpr->dpr_lock);
167 dpr->dpr_thread = NULL;
168 dpr->dpr_fire_count++;
175 dpr->dpr_flags &= ~(DPF_DISPATCHED | DPF_EXECUTING);
176 cv_broadcast(&dpr->dpr_cv);
177 mutex_exit(&dpr->dpr_lock);
183 ddi_periodic_impl_t *dpr;
191 while ((dpr = list_remove_head(&periodic_softint_queue[level - 1])) !=
197 periodic_execute(dpr);
251 ddi_periodic_impl_t *dpr;
258 while ((dpr = list_head(&periodics)) != NULL) {
261 (unsigned long)dpr->dpr_id, periodic_handler_symbol(dpr));
268 i_untimeout((timeout_t)(uintptr_t)dpr->dpr_id);
296 ddi_periodic_impl_t *dpr = arg;
298 mutex_enter(&dpr->dpr_lock);
303 if (dpr->dpr_flags & (DPF_CANCELLED | DPF_DISPATCHED)) {
304 mutex_exit(&dpr->dpr_lock);
307 VERIFY(!(dpr->dpr_flags & DPF_EXECUTING));
312 dpr->dpr_flags |= DPF_DISPATCHED;
313 mutex_exit(&dpr->dpr_lock);
315 if (dpr->dpr_level == PERI_IPL_0) {
320 dpr, 0, &dpr->dpr_taskq_ent);
327 list_insert_tail(&periodic_softint_queue[dpr->dpr_level - 1],
328 dpr);
335 sir_on(dpr->dpr_level);
340 periodic_destroy(ddi_periodic_impl_t *dpr)
342 if (dpr == NULL)
349 VERIFY(dpr->dpr_flags == DPF_CANCELLED);
350 VERIFY(dpr->dpr_thread == NULL);
352 id_free(periodic_id_space, dpr->dpr_id);
353 cv_destroy(&dpr->dpr_cv);
354 mutex_destroy(&dpr->dpr_lock);
355 kmem_cache_free(periodic_cache, dpr);
361 ddi_periodic_impl_t *dpr;
363 dpr = kmem_cache_alloc(periodic_cache, KM_SLEEP);
364 bzero(dpr, sizeof (*dpr));
365 dpr->dpr_id = id_alloc(periodic_id_space);
366 mutex_init(&dpr->dpr_lock, NULL, MUTEX_ADAPTIVE, NULL);
367 cv_init(&dpr->dpr_cv, NULL, CV_DEFAULT, NULL);
369 return (dpr);
384 ddi_periodic_impl_t *dpr;
392 dpr = periodic_create();
393 dpr->dpr_level = level;
394 dpr->dpr_handler = func;
395 dpr->dpr_arg = arg;
406 "It rounds up to %lld\n", periodic_handler_symbol(dpr),
415 dpr->dpr_interval = roundup(interval, ddi_periodic_resolution);
421 cyh.cyh_arg = dpr;
425 cyt.cyt_interval = dpr->dpr_interval;
428 dpr->dpr_cyclic_id = cyclic_add(&cyh, &cyt);
436 list_insert_tail(&periodics, dpr);
439 return ((timeout_t)(uintptr_t)dpr->dpr_id);
453 ddi_periodic_impl_t *dpr;
461 for (dpr = list_head(&periodics); dpr != NULL; dpr =
462 list_next(&periodics, dpr)) {
463 if (dpr->dpr_id == (id_t)(uintptr_t)id) {
464 list_remove(&periodics, dpr);
473 if (dpr == NULL)
476 mutex_enter(&dpr->dpr_lock);
480 VERIFY(!(dpr->dpr_flags & DPF_CANCELLED));
485 if (dpr->dpr_thread == curthread) {
487 (unsigned long)dpr->dpr_id);
492 dpr->dpr_flags |= DPF_CANCELLED;
493 mutex_exit(&dpr->dpr_lock);
502 cyclic_remove(dpr->dpr_cyclic_id);
508 mutex_enter(&dpr->dpr_lock);
509 while (dpr->dpr_flags & (DPF_DISPATCHED | DPF_EXECUTING)) {
510 cv_wait(&dpr->dpr_cv, &dpr->dpr_lock);
512 mutex_exit(&dpr->dpr_lock);
514 periodic_destroy(dpr);