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