Lines Matching defs:cyclic_softint

126  *      cyclic_softint()     <-- CY_LOCK/LOW_LEVEL soft interrupt entry point
317 * cyclic subsystem's soft interrupt handler, cyclic_softint(), we repeatedly
324 * level, cyclic_softint() must be able to quickly determine which cyclics
333 * cypc_prodndx. The consumer (cyclic_softint() running at either
341 * cyclic_softint() only consumes a cyclic after it has decremented the
381 * cyclic_expire() executing at CY_HIGH_LEVEL and cyclic_softint() executing
382 * at one of CY_LOCK_LEVEL or CY_LOW_LEVEL), forcing cyclic_softint() to raise
391 * and cyclic_softint() code paths to be lock-free.
395 * cyclic_softint(), their actions on the producer/consumer buffer appear
399 * For cyclic_softint(), however, lock-free execution requires more delicacy.
400 * When cyclic_softint() discovers a cyclic in the producer/consumer buffer,
404 * If the compare&swap operation succeeds, cyclic_softint() behaves
408 * cyclic_softint() increments the cypc_consndx and checks for more
412 * to be done on the cyclic; cyclic_softint() calls the cyclic handler
415 * If the compare&swap operation fails, cyclic_softint() knows that
418 * operation, below). cyclic_softint() thus reloads cy_pend, and re-attempts
424 * most once. This leads to a critical constraint on cyclic_softint(),
426 * cy_pend to zero, cyclic_softint() must _not_ re-examine the consumed
427 * cyclic. In part to obey this constraint, cyclic_softint() calls the
457 * interrupted cyclic_softint() in the middle of consumption. To resize the
460 * and a soft buffer (the buffer from which cyclic_softint() is consuming).
467 * then posts a CY_LOCK_LEVEL soft interrupt, landing in cyclic_softint().
469 * As under normal operation, cyclic_softint() will consume cyclics from
471 * cyclic_softint() will see that the hard buffer has changed. At that time,
472 * cyclic_softint() will change its soft buffer to point to the hard buffer,
475 * After the new buffer is drained, cyclic_softint() will determine if both
477 * cyclic_softint() will post on the semaphore cyp_modify_wait. If not, a
482 * sema_p() in cyclic_expand() and the sema_v() in cyclic_softint()). This
489 * step addresses the problem of a cyclic_softint() attempting to decrement
491 * cyclic_softint() has already called the handler by the time cy_pend is
495 * cyclic_softint() attempts to compare&swap on the cy_pend count, it will
496 * fail and recognize that the count has been zeroed. cyclic_softint() will
503 * allow optimization for the cyclic_fire()/cyclic_expire()/cyclic_softint()
525 * The cy_pend count is decremented in cyclic_softint() after the cyclic
530 * until cyclic_softint() has finished calling the cyclic handler. To let
531 * cyclic_softint() know that this cyclic has been removed, we zero the
532 * cy_pend count. This will cause cyclic_softint()'s compare&swap to fail.
533 * When cyclic_softint() sees the zero cy_pend count, it knows that it's been
1049 * to account for the handler call in cyclic_softint().
1068 * cyclic_softint(cpu_t *cpu, cyc_level_t level)
1072 * cyclic_softint() is the cyclic subsystem's CY_LOCK_LEVEL and CY_LOW_LEVEL
1077 * The first argument to cyclic_softint() is the CPU on which the interrupt
1078 * is executing; backends must call into cyclic_softint() on the specified
1082 * cyclic_softint() will call the handlers for cyclics pending at the
1083 * specified level. cyclic_softint() will not return until all pending
1086 * may therefore prolong cyclic_softint().
1088 * cyclic_softint() never disables interrupts, and, if neither a
1090 * lock-free. This assures that in the common case, cyclic_softint()
1092 * cyclic_add() or cyclic_remove() is pending, cyclic_softint() may grab
1095 * While cyclic_softint() is designed for bounded latency, it is obviously
1097 * arbitrarily, callers of cyclic_softint() should not rely upon
1100 * cyclic_softint() may be called spuriously without ill effect.
1109 * CY_LOCK_LEVEL or CY_LOW_LEVEL. The level passed to cyclic_softint()
1116 cyclic_softint(cpu_t *c, cyc_level_t level)