Lines Matching defs:hfi

211 static hook_event_int_t *hook_event_find(hook_family_int_t *hfi, char *event);
212 static void hook_event_free(hook_event_int_t *hei, hook_family_int_t *hfi);
215 static void hook_family_free(hook_family_int_t *hfi, hook_stack_t *hks);
230 static void hook_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei,
641 hook_family_int_t *hfi;
678 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
679 if (hfi->hfi_condemned || hfi->hfi_shutdown)
682 hfi->hfi_family.hf_name);
707 hook_family_int_t *hfi;
738 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
740 hfi->hfi_family.hf_name);
799 hook_run(hook_family_int_t *hfi, hook_event_token_t token, hook_data_t info)
816 CVW_ENTER_READ(&hfi->hfi_lock);
837 CVW_EXIT_READ(&hfi->hfi_lock);
868 hook_family_int_t *hfi, *new;
888 hfi = hook_family_find(hf->hf_name, hks);
889 if (hfi != NULL) {
935 * Parameters: hfi(I) - internal family pointer
942 hook_family_remove(hook_family_int_t *hfi)
947 ASSERT(hfi != NULL);
948 hks = hfi->hfi_stack;
950 CVW_ENTER_WRITE(&hfi->hfi_lock);
951 notifydone = hfi->hfi_shutdown;
952 hfi->hfi_shutdown = B_TRUE;
953 CVW_EXIT_WRITE(&hfi->hfi_lock);
970 if (!SLIST_EMPTY(&hfi->hfi_head) || !TAILQ_EMPTY(&hfi->hfi_nhead)) {
971 hfi->hfi_condemned = B_TRUE;
973 VERIFY(hook_wait_destroy(&hfi->hfi_waiter) == 0);
978 hfi->hfi_condemned = B_FALSE;
983 hook_stack_notify_run(hks, hfi->hfi_family.hf_name,
992 if (!hfi->hfi_condemned)
993 hook_family_free(hfi, hks);
1002 * Parameters: hfi(I) - internal family pointer
1007 hook_family_free(hook_family_int_t *hfi, hook_stack_t *hks)
1017 ASSERT(hfi != NULL);
1022 SLIST_REMOVE(&hks->hks_familylist, hfi, hook_family_int,
1029 if (hfi->hfi_family.hf_name != NULL) {
1030 kmem_free(hfi->hfi_family.hf_name,
1031 strlen(hfi->hfi_family.hf_name) + 1);
1035 kmem_free(hfi, sizeof (*hfi));
1046 * Parameters: hfi(I) - internal family pointer
1054 hook_family_shutdown(hook_family_int_t *hfi)
1059 ASSERT(hfi != NULL);
1060 hks = hfi->hfi_stack;
1062 CVW_ENTER_WRITE(&hfi->hfi_lock);
1063 notifydone = hfi->hfi_shutdown;
1064 hfi->hfi_shutdown = B_TRUE;
1065 CVW_EXIT_WRITE(&hfi->hfi_lock);
1081 hook_stack_notify_run(hks, hfi->hfi_family.hf_name,
1133 hook_family_int_t *hfi = NULL;
1137 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
1138 if (strcmp(hfi->hfi_family.hf_name, family) == 0)
1141 return (hfi);
1147 * Parameters: hfi(I) - hook family
1163 hook_family_notify_register(hook_family_int_t *hfi,
1171 ASSERT(hfi != NULL);
1173 hks = hfi->hfi_stack;
1177 if ((hfi->hfi_stack->hks_shutdown != 0) ||
1178 hfi->hfi_condemned || hfi->hfi_shutdown) {
1183 CVW_ENTER_WRITE(&hfi->hfi_lock);
1184 canrun = (hook_wait_setflag(&hfi->hfi_waiter, FWF_ADD_WAIT_MASK,
1186 error = hook_notify_register(&hfi->hfi_nhead, callback, arg);
1187 CVW_EXIT_WRITE(&hfi->hfi_lock);
1192 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1194 hfi->hfi_family.hf_name, NULL,
1200 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_ADD_ACTIVE);
1208 * Parameters: hfi(I) - hook family
1229 hook_family_notify_unregister(hook_family_int_t *hfi,
1240 CVW_ENTER_WRITE(&hfi->hfi_lock);
1242 (void) hook_wait_setflag(&hfi->hfi_waiter, FWF_DEL_WAIT_MASK,
1245 error = hook_notify_unregister(&hfi->hfi_nhead, callback, &arg);
1247 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_DEL_ACTIVE);
1253 if ((error == 0) && hfi->hfi_condemned &&
1254 SLIST_EMPTY(&hfi->hfi_head) && TAILQ_EMPTY(&hfi->hfi_nhead)) {
1261 canrun = (hook_wait_setflag(&hfi->hfi_waiter, FWF_ADD_WAIT_MASK,
1265 CVW_EXIT_WRITE(&hfi->hfi_lock);
1268 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1270 hfi->hfi_family.hf_name, NULL,
1274 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_ADD_ACTIVE);
1276 hook_family_free(hfi, hfi->hfi_stack);
1285 * Parameters: hfi(I) - internal family pointer
1294 hook_event_add(hook_family_int_t *hfi, hook_event_t *he)
1299 ASSERT(hfi != NULL);
1307 hks = hfi->hfi_stack;
1310 hks = hfi->hfi_stack;
1325 CVW_ENTER_WRITE(&hfi->hfi_lock);
1327 if (hfi->hfi_condemned || hfi->hfi_shutdown) {
1328 CVW_EXIT_WRITE(&hfi->hfi_lock);
1335 if (hook_wait_setflag(&hfi->hfi_waiter, FWF_ADD_WAIT_MASK,
1337 CVW_EXIT_WRITE(&hfi->hfi_lock);
1344 hook_event_init_kstats(hfi, new);
1348 SLIST_INSERT_HEAD(&hfi->hfi_head, new, hei_entry);
1350 CVW_EXIT_WRITE(&hfi->hfi_lock);
1352 hook_notify_run(&hfi->hfi_nhead,
1353 hfi->hfi_family.hf_name, NULL, he->he_name, HN_REGISTER);
1355 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_ADD_ACTIVE);
1363 * Parameters: hfi(I) - pointer to the family that owns this event.
1373 hook_event_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei)
1382 hks = hfi->hfi_stack;
1383 hei->hei_kstatp = kstat_create_netstack(hfi->hfi_family.hf_name, 0,
1402 * Parameters: hfi(I) - internal family pointer
1414 hook_event_remove(hook_family_int_t *hfi, hook_event_t *he)
1420 ASSERT(hfi != NULL);
1423 CVW_ENTER_WRITE(&hfi->hfi_lock);
1430 if (hook_wait_setflag(&hfi->hfi_waiter, FWF_DEL_WAIT_MASK,
1432 CVW_EXIT_WRITE(&hfi->hfi_lock);
1436 hei = hook_event_find(hfi, he->he_name);
1438 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_DEL_ACTIVE);
1439 CVW_EXIT_WRITE(&hfi->hfi_lock);
1471 if (hfi->hfi_condemned && SLIST_EMPTY(&hfi->hfi_head) &&
1472 TAILQ_EMPTY(&hfi->hfi_nhead))
1476 CVW_EXIT_WRITE(&hfi->hfi_lock);
1479 hook_notify_run(&hfi->hfi_nhead,
1480 hfi->hfi_family.hf_name, NULL, he->he_name, HN_UNREGISTER);
1482 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_DEL_ACTIVE);
1485 hook_event_free(hei, hfi);
1487 hook_family_free(hfi, hfi->hfi_stack);
1496 * Parameters: hfi(I) - internal family pointer
1503 hook_event_shutdown(hook_family_int_t *hfi, hook_event_t *he)
1508 ASSERT(hfi != NULL);
1511 CVW_ENTER_WRITE(&hfi->hfi_lock);
1518 if (hook_wait_setflag(&hfi->hfi_waiter, FWF_DEL_WAIT_MASK,
1520 CVW_EXIT_WRITE(&hfi->hfi_lock);
1524 hei = hook_event_find(hfi, he->he_name);
1526 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_DEL_ACTIVE);
1527 CVW_EXIT_WRITE(&hfi->hfi_lock);
1536 CVW_EXIT_WRITE(&hfi->hfi_lock);
1539 hook_notify_run(&hfi->hfi_nhead,
1540 hfi->hfi_family.hf_name, NULL, he->he_name, HN_UNREGISTER);
1542 hook_wait_unsetflag(&hfi->hfi_waiter, FWF_DEL_ACTIVE);
1555 hook_event_free(hook_event_int_t *hei, hook_family_int_t *hfi)
1561 if (hfi != NULL) {
1562 CVW_ENTER_WRITE(&hfi->hfi_lock);
1566 SLIST_REMOVE(&hfi->hfi_head, hei, hook_event_int, hei_entry);
1567 if (hfi->hfi_condemned && SLIST_EMPTY(&hfi->hfi_head) &&
1568 TAILQ_EMPTY(&hfi->hfi_nhead)) {
1573 CVW_EXIT_WRITE(&hfi->hfi_lock);
1577 ASSERT(hfi != NULL);
1580 hfi->hfi_stack->hks_netstackid);
1588 hook_family_free(hfi, hfi->hfi_stack);
1602 hook_family_int_t *hfi;
1608 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
1609 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1649 * Parameters: hfi(I) - internal family pointer
1653 * A lock on hfi->hfi_lock must be held when called.
1656 hook_event_find(hook_family_int_t *hfi, char *event)
1660 ASSERT(hfi != NULL);
1663 SLIST_FOREACH(hei, &hfi->hfi_head, hei_entry) {
1674 * Parameters: hfi(I) - hook family
1684 hook_event_notify_register(hook_family_int_t *hfi, char *event,
1694 hks = hfi->hfi_stack;
1701 CVW_ENTER_READ(&hfi->hfi_lock);
1703 if (hfi->hfi_condemned || hfi->hfi_shutdown) {
1704 CVW_EXIT_READ(&hfi->hfi_lock);
1709 hei = hook_event_find(hfi, event);
1711 CVW_EXIT_READ(&hfi->hfi_lock);
1717 CVW_EXIT_READ(&hfi->hfi_lock);
1728 CVW_EXIT_READ(&hfi->hfi_lock);
1734 hfi->hfi_family.hf_name, hei->hei_event->he_name,
1748 * Parameters: hfi(I) - hook family
1756 hook_event_notify_unregister(hook_family_int_t *hfi, char *event,
1768 CVW_ENTER_READ(&hfi->hfi_lock);
1770 hei = hook_event_find(hfi, event);
1772 CVW_EXIT_READ(&hfi->hfi_lock);
1806 CVW_EXIT_READ(&hfi->hfi_lock);
1811 hfi->hfi_family.hf_name, hei->hei_event->he_name,
1820 * It is safe to pass in hfi here, without a lock, because
1824 hook_event_free(hei, hfi);
1834 * hfi(I) - hook stack pointer to execute callbacks for
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,
1852 * Parameters: hfi(I) - internal family pointer
1859 hook_register(hook_family_int_t *hfi, char *event, hook_t *h)
1865 ASSERT(hfi != NULL);
1869 if (hfi->hfi_stack->hks_shutdown)
1882 CVW_ENTER_WRITE(&hfi->hfi_lock);
1884 hei = hook_event_find(hfi, event);
1886 CVW_EXIT_WRITE(&hfi->hfi_lock);
1887 hook_int_free(new, hfi->hfi_stack->hks_netstackid);
1913 CVW_EXIT_WRITE(&hfi->hfi_lock);
1914 hook_int_free(new, hfi->hfi_stack->hks_netstackid);
1924 hook_init_kstats(hfi, hei, new);
1928 CVW_EXIT_WRITE(&hfi->hfi_lock);
1936 hook_event_notify_run(hei, hfi, event, h->h_name, HN_REGISTER);
2144 * Parameters: hfi(I) - internal family pointer
2151 hook_unregister(hook_family_int_t *hfi, char *event, hook_t *h)
2157 ASSERT(hfi != NULL);
2160 CVW_ENTER_WRITE(&hfi->hfi_lock);
2162 hei = hook_event_find(hfi, event);
2164 CVW_EXIT_WRITE(&hfi->hfi_lock);
2174 CVW_EXIT_WRITE(&hfi->hfi_lock);
2181 CVW_EXIT_WRITE(&hfi->hfi_lock);
2202 CVW_EXIT_WRITE(&hfi->hfi_lock);
2208 hook_event_notify_run(hei, hfi, event, h->h_name, HN_UNREGISTER);
2211 hook_int_free(hi, hfi->hfi_stack->hks_netstackid);
2214 hook_event_free(hei, hfi);
2316 * Parameters: hfi(I) - pointer to the family that owns the event.
2327 hook_init_kstats(hook_family_int_t *hfi, hook_event_int_t *hei, hook_int_t *hi)
2342 kslen = strlen(hfi->hfi_family.hf_name) +
2347 hfi->hfi_family.hf_name, hei->hei_event->he_name);
2349 hks = hfi->hfi_stack;