Lines Matching refs:hei

213 static void hook_event_free(hook_event_int_t *hei, hook_family_int_t *hfi);
217 static hook_int_t *hook_find(hook_event_int_t *hei, hook_t *h);
231 static void hook_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei,
817 hook_event_int_t *hei; in hook_run() local
823 hei = (hook_event_int_t *)token; in hook_run()
834 TAILQ_FOREACH(hi, &hei->hei_head, hi_entry) { in hook_run()
851 hei->hei_kstats.events.value.ui64++; in hook_run()
1182 hook_event_int_t *hei; in hook_family_notify_register() local
1208 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) { in hook_family_notify_register()
1211 hei->hei_event->he_name); in hook_family_notify_register()
1248 hook_event_int_t *hei; in hook_family_notify_unregister() local
1284 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) { in hook_family_notify_unregister()
1287 hei->hei_event->he_name); in hook_family_notify_unregister()
1312 hook_event_int_t *hei, *new; in hook_event_add() local
1334 hei = hook_event_checkdup(he, hks); in hook_event_add()
1335 if (hei != NULL) { in hook_event_add()
1389 hook_event_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei) in hook_event_init_kstats() argument
1399 hei->hei_kstatp = kstat_create_netstack(hfi->hfi_family.hf_name, 0, in hook_event_init_kstats()
1400 hei->hei_event->he_name, "hook_event", KSTAT_TYPE_NAMED, in hook_event_init_kstats()
1401 sizeof (hei->hei_kstats) / sizeof (kstat_named_t), in hook_event_init_kstats()
1404 bcopy((char *)&template, &hei->hei_kstats, sizeof (template)); in hook_event_init_kstats()
1406 if (hei->hei_kstatp != NULL) { in hook_event_init_kstats()
1407 hei->hei_kstatp->ks_data = (void *)&hei->hei_kstats; in hook_event_init_kstats()
1408 hei->hei_kstatp->ks_private = in hook_event_init_kstats()
1411 kstat_install(hei->hei_kstatp); in hook_event_init_kstats()
1433 hook_event_int_t *hei; in hook_event_remove() local
1452 hei = hook_event_find(hfi, he->he_name); in hook_event_remove()
1453 if (hei == NULL) { in hook_event_remove()
1461 CVW_ENTER_WRITE(&hei->hei_lock); in hook_event_remove()
1466 notifydone = hei->hei_shutdown; in hook_event_remove()
1467 hei->hei_shutdown = B_TRUE; in hook_event_remove()
1473 if (!TAILQ_EMPTY(&hei->hei_head) || !TAILQ_EMPTY(&hei->hei_nhead)) { in hook_event_remove()
1474 hei->hei_condemned = B_TRUE; in hook_event_remove()
1475 CVW_EXIT_WRITE(&hei->hei_lock); in hook_event_remove()
1483 VERIFY(hook_wait_destroy(&hei->hei_waiter) == 0); in hook_event_remove()
1485 CVW_EXIT_WRITE(&hei->hei_lock); in hook_event_remove()
1500 if (!hei->hei_condemned) { in hook_event_remove()
1501 hook_event_free(hei, hfi); in hook_event_remove()
1521 hook_event_int_t *hei; in hook_event_shutdown() local
1540 hei = hook_event_find(hfi, he->he_name); in hook_event_shutdown()
1541 if (hei == NULL) { in hook_event_shutdown()
1547 CVW_ENTER_WRITE(&hei->hei_lock); in hook_event_shutdown()
1548 notifydone = hei->hei_shutdown; in hook_event_shutdown()
1549 hei->hei_shutdown = B_TRUE; in hook_event_shutdown()
1550 CVW_EXIT_WRITE(&hei->hei_lock); in hook_event_shutdown()
1571 hook_event_free(hook_event_int_t *hei, hook_family_int_t *hfi) in hook_event_free() argument
1575 ASSERT(hei != NULL); in hook_event_free()
1582 SLIST_REMOVE(&hfi->hfi_head, hei, hook_event_int, hei_entry); in hook_event_free()
1592 if (hei->hei_kstatp != NULL) { in hook_event_free()
1595 kstat_delete_netstack(hei->hei_kstatp, in hook_event_free()
1597 hei->hei_kstatp = NULL; in hook_event_free()
1601 kmem_free(hei, sizeof (*hei)); in hook_event_free()
1619 hook_event_int_t *hei; in hook_event_checkdup() local
1625 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) { in hook_event_checkdup()
1626 if (hei->hei_event == he) { in hook_event_checkdup()
1628 return (hei); in hook_event_checkdup()
1674 hook_event_int_t *hei = NULL; in hook_event_find() local
1679 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) { in hook_event_find()
1680 if ((strcmp(hei->hei_event->he_name, event) == 0) && in hook_event_find()
1681 ((hei->hei_waiter.fw_flags & FWF_UNSAFE) == 0)) in hook_event_find()
1684 return (hei); in hook_event_find()
1703 hook_event_int_t *hei; in hook_event_notify_register() local
1725 hei = hook_event_find(hfi, event); in hook_event_notify_register()
1726 if (hei == NULL) { in hook_event_notify_register()
1732 if (hei->hei_condemned || hei->hei_shutdown) { in hook_event_notify_register()
1738 CVW_ENTER_WRITE(&hei->hei_lock); in hook_event_notify_register()
1739 canrun = (hook_wait_setflag(&hei->hei_waiter, FWF_ADD_WAIT_MASK, in hook_event_notify_register()
1741 error = hook_notify_register(&hei->hei_nhead, callback, arg); in hook_event_notify_register()
1742 CVW_EXIT_WRITE(&hei->hei_lock); in hook_event_notify_register()
1748 TAILQ_FOREACH(h, &hei->hei_head, hi_entry) { in hook_event_notify_register()
1750 hfi->hfi_family.hf_name, hei->hei_event->he_name, in hook_event_notify_register()
1756 hook_wait_unsetflag(&hei->hei_waiter, FWF_ADD_ACTIVE); in hook_event_notify_register()
1775 hook_event_int_t *hei; in hook_event_notify_unregister() local
1786 hei = hook_event_find(hfi, event); in hook_event_notify_unregister()
1787 if (hei == NULL) { in hook_event_notify_unregister()
1792 CVW_ENTER_WRITE(&hei->hei_lock); in hook_event_notify_unregister()
1794 (void) hook_wait_setflag(&hei->hei_waiter, FWF_DEL_WAIT_MASK, in hook_event_notify_unregister()
1797 error = hook_notify_unregister(&hei->hei_nhead, callback, &arg); in hook_event_notify_unregister()
1799 hook_wait_unsetflag(&hei->hei_waiter, FWF_DEL_ACTIVE); in hook_event_notify_unregister()
1809 if ((error == 0) && hei->hei_condemned && in hook_event_notify_unregister()
1810 TAILQ_EMPTY(&hei->hei_head) && TAILQ_EMPTY(&hei->hei_nhead)) { in hook_event_notify_unregister()
1817 canrun = (hook_wait_setflag(&hei->hei_waiter, FWF_ADD_WAIT_MASK, in hook_event_notify_unregister()
1821 CVW_EXIT_WRITE(&hei->hei_lock); in hook_event_notify_unregister()
1825 TAILQ_FOREACH(h, &hei->hei_head, hi_entry) { in hook_event_notify_unregister()
1827 hfi->hfi_family.hf_name, hei->hei_event->he_name, in hook_event_notify_unregister()
1831 hook_wait_unsetflag(&hei->hei_waiter, FWF_ADD_ACTIVE); in hook_event_notify_unregister()
1840 hook_event_free(hei, hfi); in hook_event_notify_unregister()
1857 hook_event_notify_run(hook_event_int_t *hei, hook_family_int_t *hfi, in hook_event_notify_run() argument
1861 hook_notify_run(&hei->hei_nhead, hfi->hfi_family.hf_name, in hook_event_notify_run()
1877 hook_event_int_t *hei; in hook_register() local
1900 hei = hook_event_find(hfi, event); in hook_register()
1901 if (hei == NULL) { in hook_register()
1907 CVW_ENTER_WRITE(&hei->hei_lock); in hook_register()
1913 if (hei->hei_shutdown) { in hook_register()
1918 hi = hook_find(hei, h); in hook_register()
1924 if (hook_wait_setflag(&hei->hei_waiter, FWF_ADD_WAIT_MASK, in hook_register()
1928 CVW_EXIT_WRITE(&hei->hei_lock); in hook_register()
1935 error = hook_insert(&hei->hei_head, new); in hook_register()
1937 hei->hei_event->he_interested = B_TRUE; in hook_register()
1938 hei->hei_kstats.hooks_added.value.ui64++; in hook_register()
1940 hook_init_kstats(hfi, hei, new); in hook_register()
1943 CVW_EXIT_WRITE(&hei->hei_lock); in hook_register()
1952 hook_event_notify_run(hei, hfi, event, h->h_name, HN_REGISTER); in hook_register()
1954 hook_wait_unsetflag(&hei->hei_waiter, FWF_ADD_ACTIVE); in hook_register()
2169 hook_event_int_t *hei; in hook_unregister() local
2178 hei = hook_event_find(hfi, event); in hook_unregister()
2179 if (hei == NULL) { in hook_unregister()
2185 CVW_ENTER_WRITE(&hei->hei_lock); in hook_unregister()
2187 hi = hook_find(hei, h); in hook_unregister()
2189 CVW_EXIT_WRITE(&hei->hei_lock); in hook_unregister()
2194 if (hook_wait_setflag(&hei->hei_waiter, FWF_DEL_WAIT_MASK, in hook_unregister()
2196 CVW_EXIT_WRITE(&hei->hei_lock); in hook_unregister()
2202 TAILQ_REMOVE(&hei->hei_head, hi, hi_entry); in hook_unregister()
2205 if (TAILQ_EMPTY(&hei->hei_head)) { in hook_unregister()
2206 hei->hei_event->he_interested = B_FALSE; in hook_unregister()
2212 if (hei->hei_condemned && TAILQ_EMPTY(&hei->hei_nhead)) in hook_unregister()
2215 hei->hei_kstats.hooks_removed.value.ui64++; in hook_unregister()
2217 CVW_EXIT_WRITE(&hei->hei_lock); in hook_unregister()
2224 hook_event_notify_run(hei, hfi, event, h->h_name, HN_UNREGISTER); in hook_unregister()
2225 hook_wait_unsetflag(&hei->hei_waiter, FWF_DEL_ACTIVE); in hook_unregister()
2230 hook_event_free(hei, hfi); in hook_unregister()
2268 hook_find(hook_event_int_t *hei, hook_t *h) in hook_find() argument
2271 ASSERT(hei != NULL); in hook_find()
2274 return (hook_find_byname(&hei->hei_head, h->h_name)); in hook_find()
2343 hook_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei, hook_int_t *hi) in hook_init_kstats() argument
2359 strlen(hei->hei_event->he_name) + 2; in hook_init_kstats()
2363 hfi->hfi_family.hf_name, hei->hei_event->he_name); in hook_init_kstats()
2402 TAILQ_FOREACH(h, &hei->hei_head, hi_entry) { in hook_init_kstats()