Lines Matching refs:cyclic_softint
130 * cyclic_softint() <-- CY_LOCK/LOW_LEVEL soft interrupt entry point
321 * cyclic subsystem's soft interrupt handler, cyclic_softint(), we repeatedly
328 * level, cyclic_softint() must be able to quickly determine which cyclics
337 * cypc_prodndx. The consumer (cyclic_softint() running at either
345 * cyclic_softint() only consumes a cyclic after it has decremented the
385 * cyclic_expire() executing at CY_HIGH_LEVEL and cyclic_softint() executing
386 * at one of CY_LOCK_LEVEL or CY_LOW_LEVEL), forcing cyclic_softint() to raise
395 * and cyclic_softint() code paths to be lock-free.
399 * cyclic_softint(), their actions on the producer/consumer buffer appear
403 * For cyclic_softint(), however, lock-free execution requires more delicacy.
404 * When cyclic_softint() discovers a cyclic in the producer/consumer buffer,
408 * If the compare&swap operation succeeds, cyclic_softint() behaves
412 * cyclic_softint() increments the cypc_consndx and checks for more
416 * to be done on the cyclic; cyclic_softint() calls the cyclic handler
419 * If the compare&swap operation fails, cyclic_softint() knows that
422 * operation, below). cyclic_softint() thus reloads cy_pend, and re-attempts
428 * most once. This leads to a critical constraint on cyclic_softint(),
430 * cy_pend to zero, cyclic_softint() must _not_ re-examine the consumed
431 * cyclic. In part to obey this constraint, cyclic_softint() calls the
461 * interrupted cyclic_softint() in the middle of consumption. To resize the
464 * and a soft buffer (the buffer from which cyclic_softint() is consuming).
471 * then posts a CY_LOCK_LEVEL soft interrupt, landing in cyclic_softint().
473 * As under normal operation, cyclic_softint() will consume cyclics from
475 * cyclic_softint() will see that the hard buffer has changed. At that time,
476 * cyclic_softint() will change its soft buffer to point to the hard buffer,
479 * After the new buffer is drained, cyclic_softint() will determine if both
481 * cyclic_softint() will post on the semaphore cyp_modify_wait. If not, a
486 * sema_p() in cyclic_expand() and the sema_v() in cyclic_softint()). This
493 * step addresses the problem of a cyclic_softint() attempting to decrement
495 * cyclic_softint() has already called the handler by the time cy_pend is
499 * cyclic_softint() attempts to compare&swap on the cy_pend count, it will
500 * fail and recognize that the count has been zeroed. cyclic_softint() will
507 * allow optimization for the cyclic_fire()/cyclic_expire()/cyclic_softint()
529 * The cy_pend count is decremented in cyclic_softint() after the cyclic
534 * until cyclic_softint() has finished calling the cyclic handler. To let
535 * cyclic_softint() know that this cyclic has been removed, we zero the
536 * cy_pend count. This will cause cyclic_softint()'s compare&swap to fail.
537 * When cyclic_softint() sees the zero cy_pend count, it knows that it's been
1054 * to account for the handler call in cyclic_softint().
1073 * cyclic_softint(cpu_t *cpu, cyc_level_t level)
1077 * cyclic_softint() is the cyclic subsystem's CY_LOCK_LEVEL and CY_LOW_LEVEL
1082 * The first argument to cyclic_softint() is the CPU on which the interrupt
1083 * is executing; backends must call into cyclic_softint() on the specified
1087 * cyclic_softint() will call the handlers for cyclics pending at the
1088 * specified level. cyclic_softint() will not return until all pending
1091 * may therefore prolong cyclic_softint().
1093 * cyclic_softint() never disables interrupts, and, if neither a
1095 * lock-free. This assures that in the common case, cyclic_softint()
1097 * cyclic_add() or cyclic_remove() is pending, cyclic_softint() may grab
1100 * While cyclic_softint() is designed for bounded latency, it is obviously
1102 * arbitrarily, callers of cyclic_softint() should not rely upon
1105 * cyclic_softint() may be called spuriously without ill effect.
1114 * CY_LOCK_LEVEL or CY_LOW_LEVEL. The level passed to cyclic_softint()
1121 cyclic_softint(cpu_t *c, cyc_level_t level)