Lines Matching refs:hei

212 static void hook_event_free(hook_event_int_t *hei, hook_family_int_t *hfi);
216 static hook_int_t *hook_find(hook_event_int_t *hei, hook_t *h);
230 static void hook_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei,
801 hook_event_int_t *hei;
807 hei = (hook_event_int_t *)token;
818 TAILQ_FOREACH(hi, &hei->hei_head, hi_entry) {
835 hei->hei_kstats.events.value.ui64++;
1166 hook_event_int_t *hei;
1192 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1195 hei->hei_event->he_name);
1232 hook_event_int_t *hei;
1268 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1271 hei->hei_event->he_name);
1296 hook_event_int_t *hei, *new;
1318 hei = hook_event_checkdup(he, hks);
1319 if (hei != NULL) {
1364 * hei(I) - pointer to the hook event that needs some kstats.
1373 hook_event_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei)
1383 hei->hei_kstatp = kstat_create_netstack(hfi->hfi_family.hf_name, 0,
1384 hei->hei_event->he_name, "hook_event", KSTAT_TYPE_NAMED,
1385 sizeof (hei->hei_kstats) / sizeof (kstat_named_t),
1388 bcopy((char *)&template, &hei->hei_kstats, sizeof (template));
1390 if (hei->hei_kstatp != NULL) {
1391 hei->hei_kstatp->ks_data = (void *)&hei->hei_kstats;
1392 hei->hei_kstatp->ks_private =
1395 kstat_install(hei->hei_kstatp);
1417 hook_event_int_t *hei;
1436 hei = hook_event_find(hfi, he->he_name);
1437 if (hei == NULL) {
1445 CVW_ENTER_WRITE(&hei->hei_lock);
1450 notifydone = hei->hei_shutdown;
1451 hei->hei_shutdown = B_TRUE;
1457 if (!TAILQ_EMPTY(&hei->hei_head) || !TAILQ_EMPTY(&hei->hei_nhead)) {
1458 hei->hei_condemned = B_TRUE;
1459 CVW_EXIT_WRITE(&hei->hei_lock);
1467 VERIFY(hook_wait_destroy(&hei->hei_waiter) == 0);
1469 CVW_EXIT_WRITE(&hei->hei_lock);
1484 if (!hei->hei_condemned) {
1485 hook_event_free(hei, hfi);
1505 hook_event_int_t *hei;
1524 hei = hook_event_find(hfi, he->he_name);
1525 if (hei == NULL) {
1531 CVW_ENTER_WRITE(&hei->hei_lock);
1532 notifydone = hei->hei_shutdown;
1533 hei->hei_shutdown = B_TRUE;
1534 CVW_EXIT_WRITE(&hei->hei_lock);
1550 * Parameters: hei(I) - internal event pointer
1555 hook_event_free(hook_event_int_t *hei, hook_family_int_t *hfi)
1559 ASSERT(hei != NULL);
1566 SLIST_REMOVE(&hfi->hfi_head, hei, hook_event_int, hei_entry);
1576 if (hei->hei_kstatp != NULL) {
1579 kstat_delete_netstack(hei->hei_kstatp,
1581 hei->hei_kstatp = NULL;
1585 kmem_free(hei, sizeof (*hei));
1603 hook_event_int_t *hei;
1609 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1610 if (hei->hei_event == he) {
1612 return (hei);
1658 hook_event_int_t *hei = NULL;
1663 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1664 if ((strcmp(hei->hei_event->he_name, event) == 0) &&
1665 ((hei->hei_waiter.fw_flags & FWF_UNSAFE) == 0))
1668 return (hei);
1687 hook_event_int_t *hei;
1709 hei = hook_event_find(hfi, event);
1710 if (hei == NULL) {
1716 if (hei->hei_condemned || hei->hei_shutdown) {
1722 CVW_ENTER_WRITE(&hei->hei_lock);
1723 canrun = (hook_wait_setflag(&hei->hei_waiter, FWF_ADD_WAIT_MASK,
1725 error = hook_notify_register(&hei->hei_nhead, callback, arg);
1726 CVW_EXIT_WRITE(&hei->hei_lock);
1732 TAILQ_FOREACH(h, &hei->hei_head, hi_entry) {
1734 hfi->hfi_family.hf_name, hei->hei_event->he_name,
1740 hook_wait_unsetflag(&hei->hei_waiter, FWF_ADD_ACTIVE);
1759 hook_event_int_t *hei;
1770 hei = hook_event_find(hfi, event);
1771 if (hei == NULL) {
1776 CVW_ENTER_WRITE(&hei->hei_lock);
1778 (void) hook_wait_setflag(&hei->hei_waiter, FWF_DEL_WAIT_MASK,
1781 error = hook_notify_unregister(&hei->hei_nhead, callback, &arg);
1783 hook_wait_unsetflag(&hei->hei_waiter, FWF_DEL_ACTIVE);
1793 if ((error == 0) && hei->hei_condemned &&
1794 TAILQ_EMPTY(&hei->hei_head) && TAILQ_EMPTY(&hei->hei_nhead)) {
1801 canrun = (hook_wait_setflag(&hei->hei_waiter, FWF_ADD_WAIT_MASK,
1805 CVW_EXIT_WRITE(&hei->hei_lock);
1809 TAILQ_FOREACH(h, &hei->hei_head, hi_entry) {
1811 hfi->hfi_family.hf_name, hei->hei_event->he_name,
1815 hook_wait_unsetflag(&hei->hei_waiter, FWF_ADD_ACTIVE);
1821 * our structure (hei) is still on one of its lists and thus
1824 hook_event_free(hei, hfi);
1841 hook_event_notify_run(hook_event_int_t *hei, hook_family_int_t *hfi,
1845 hook_notify_run(&hei->hei_nhead, hfi->hfi_family.hf_name,
1861 hook_event_int_t *hei;
1884 hei = hook_event_find(hfi, event);
1885 if (hei == NULL) {
1891 CVW_ENTER_WRITE(&hei->hei_lock);
1897 if (hei->hei_shutdown) {
1902 hi = hook_find(hei, h);
1908 if (hook_wait_setflag(&hei->hei_waiter, FWF_ADD_WAIT_MASK,
1912 CVW_EXIT_WRITE(&hei->hei_lock);
1919 error = hook_insert(&hei->hei_head, new);
1921 hei->hei_event->he_interested = B_TRUE;
1922 hei->hei_kstats.hooks_added.value.ui64++;
1924 hook_init_kstats(hfi, hei, new);
1927 CVW_EXIT_WRITE(&hei->hei_lock);
1936 hook_event_notify_run(hei, hfi, event, h->h_name, HN_REGISTER);
1938 hook_wait_unsetflag(&hei->hei_waiter, FWF_ADD_ACTIVE);
2153 hook_event_int_t *hei;
2162 hei = hook_event_find(hfi, event);
2163 if (hei == NULL) {
2169 CVW_ENTER_WRITE(&hei->hei_lock);
2171 hi = hook_find(hei, h);
2173 CVW_EXIT_WRITE(&hei->hei_lock);
2178 if (hook_wait_setflag(&hei->hei_waiter, FWF_DEL_WAIT_MASK,
2180 CVW_EXIT_WRITE(&hei->hei_lock);
2186 TAILQ_REMOVE(&hei->hei_head, hi, hi_entry);
2189 if (TAILQ_EMPTY(&hei->hei_head)) {
2190 hei->hei_event->he_interested = B_FALSE;
2196 if (hei->hei_condemned && TAILQ_EMPTY(&hei->hei_nhead))
2199 hei->hei_kstats.hooks_removed.value.ui64++;
2201 CVW_EXIT_WRITE(&hei->hei_lock);
2208 hook_event_notify_run(hei, hfi, event, h->h_name, HN_UNREGISTER);
2209 hook_wait_unsetflag(&hei->hei_waiter, FWF_DEL_ACTIVE);
2214 hook_event_free(hei, hfi);
2222 * Parameters: hei(I) - internal event pointer
2244 * Parameters: hei(I) - internal event pointer
2252 hook_find(hook_event_int_t *hei, hook_t *h)
2255 ASSERT(hei != NULL);
2258 return (hook_find_byname(&hei->hei_head, h->h_name));
2317 * hei(I) - pointer to the event that owns this hook
2327 hook_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei, hook_int_t *hi)
2343 strlen(hei->hei_event->he_name) + 2;
2347 hfi->hfi_family.hf_name, hei->hei_event->he_name);
2386 TAILQ_FOREACH(h, &hei->hei_head, hi_entry) {