Lines Matching defs:hks
209 hook_stack_t *hks);
214 static hook_family_int_t *hook_family_find(char *family, hook_stack_t *hks);
215 static void hook_family_free(hook_family_int_t *hfi, hook_stack_t *hks);
238 static void hook_stack_notify_run(hook_stack_t *hks, char *name,
240 static void hook_stack_remove(hook_stack_t *hks);
491 hook_stack_t *hks;
497 hks = (hook_stack_t *)kmem_zalloc(sizeof (*hks), KM_SLEEP);
498 hks->hks_netstack = ns;
499 hks->hks_netstackid = stackid;
501 CVW_INIT(&hks->hks_lock);
502 TAILQ_INIT(&hks->hks_nhead);
503 SLIST_INIT(&hks->hks_familylist);
505 hook_wait_init(&hks->hks_waiter, &hks->hks_lock);
508 SLIST_INSERT_HEAD(&hook_stacks, hks, hks_entry);
511 return (hks);
534 hook_stack_t *hks = (hook_stack_t *)arg;
541 hks->hks_shutdown = 1;
562 hook_stack_t *hks = (hook_stack_t *)arg;
565 hks->hks_shutdown = 2;
566 hook_stack_remove(hks);
573 * Parameters: hks(I) - pointer to an instance of a hook_stack_t
581 hook_stack_remove(hook_stack_t *hks)
589 if (!SLIST_EMPTY(&hks->hks_familylist) ||
590 !TAILQ_EMPTY(&hks->hks_nhead))
593 SLIST_REMOVE(&hook_stacks, hks, hook_stack, hks_entry);
595 VERIFY(hook_wait_destroy(&hks->hks_waiter) == 0);
596 CVW_DESTROY(&hks->hks_lock);
597 kmem_free(hks, sizeof (*hks));
612 hook_stack_t *hks;
614 SLIST_FOREACH(hks, &hook_stacks, hks_entry) {
615 if (hks->hks_netstackid == stackid)
619 return (hks);
642 hook_stack_t *hks;
651 hks = hook_stack_get(stackid);
652 if (hks != NULL) {
653 if (hks->hks_shutdown != 0) {
656 CVW_ENTER_WRITE(&hks->hks_lock);
657 canrun = (hook_wait_setflag(&hks->hks_waiter,
660 error = hook_notify_register(&hks->hks_nhead,
662 CVW_EXIT_WRITE(&hks->hks_lock);
676 hks->hks_netstackid);
678 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
687 hook_wait_unsetflag(&hks->hks_waiter, FWF_ADD_ACTIVE);
708 hook_stack_t *hks;
715 hks = hook_stack_get(stackid);
716 if (hks != NULL) {
717 CVW_ENTER_WRITE(&hks->hks_lock);
718 canrun = (hook_wait_setflag(&hks->hks_waiter, FWF_ADD_WAIT_MASK,
721 error = hook_notify_unregister(&hks->hks_nhead, callback, &arg);
722 CVW_EXIT_WRITE(&hks->hks_lock);
736 hks->hks_netstackid);
738 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
743 hook_wait_unsetflag(&hks->hks_waiter, FWF_ADD_ACTIVE);
747 hks = hook_stack_get(stackid);
748 if ((error == 0) && (hks->hks_shutdown == 2))
749 hook_stack_remove(hks);
759 * Parameters: hks(I) - hook stack pointer to execute callbacks for
773 hook_stack_notify_run(hook_stack_t *hks, char *name,
778 ASSERT(hks != NULL);
781 (void) snprintf(buffer, sizeof (buffer), "%u", hks->hks_netstackid);
783 hook_notify_run(&hks->hks_nhead, buffer, NULL, name, cmd);
851 * hks(I) - pointer to an instance of a hook_stack_t
866 hook_family_add(hook_family_t *hf, hook_stack_t *hks, void **store)
878 CVW_ENTER_WRITE(&hks->hks_lock);
880 if (hks->hks_shutdown != 0) {
881 CVW_EXIT_WRITE(&hks->hks_lock);
888 hfi = hook_family_find(hf->hf_name, hks);
890 CVW_EXIT_WRITE(&hks->hks_lock);
901 if (hook_wait_setflag(&hks->hks_waiter, FWF_ADD_WAIT_MASK,
903 CVW_EXIT_WRITE(&hks->hks_lock);
915 new->hfi_stack = hks;
920 SLIST_INSERT_HEAD(&hks->hks_familylist, new, hfi_entry);
922 CVW_EXIT_WRITE(&hks->hks_lock);
925 hook_stack_notify_run(hks, hf->hf_name, HN_REGISTER);
927 hook_wait_unsetflag(&hks->hks_waiter, FWF_ADD_ACTIVE);
944 hook_stack_t *hks;
948 hks = hfi->hfi_stack;
955 CVW_ENTER_WRITE(&hks->hks_lock);
957 if (hook_wait_setflag(&hks->hks_waiter, FWF_DEL_WAIT_MASK,
962 CVW_EXIT_WRITE(&hks->hks_lock);
980 CVW_EXIT_WRITE(&hks->hks_lock);
983 hook_stack_notify_run(hks, hfi->hfi_family.hf_name,
986 hook_wait_unsetflag(&hks->hks_waiter, FWF_DEL_ACTIVE);
993 hook_family_free(hfi, hks);
1007 hook_family_free(hook_family_int_t *hfi, hook_stack_t *hks)
1011 * This lock gives us possession of the hks pointer after the
1019 if (hks != NULL) {
1020 CVW_ENTER_WRITE(&hks->hks_lock);
1022 SLIST_REMOVE(&hks->hks_familylist, hfi, hook_family_int,
1025 CVW_EXIT_WRITE(&hks->hks_lock);
1037 if (hks->hks_shutdown == 2)
1038 hook_stack_remove(hks);
1056 hook_stack_t *hks;
1060 hks = hfi->hfi_stack;
1067 CVW_ENTER_WRITE(&hks->hks_lock);
1069 if (hook_wait_setflag(&hks->hks_waiter, FWF_DEL_WAIT_MASK,
1074 CVW_EXIT_WRITE(&hks->hks_lock);
1078 CVW_EXIT_WRITE(&hks->hks_lock);
1081 hook_stack_notify_run(hks, hfi->hfi_family.hf_name,
1084 hook_wait_unsetflag(&hks->hks_waiter, FWF_DEL_ACTIVE);
1131 hook_family_find(char *family, hook_stack_t *hks)
1137 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
1167 hook_stack_t *hks;
1173 hks = hfi->hfi_stack;
1175 CVW_ENTER_READ(&hks->hks_lock);
1179 CVW_EXIT_READ(&hks->hks_lock);
1189 CVW_EXIT_READ(&hks->hks_lock);
1297 hook_stack_t *hks;
1307 hks = hfi->hfi_stack;
1308 CVW_ENTER_READ(&hks->hks_lock);
1310 hks = hfi->hfi_stack;
1311 if (hks->hks_shutdown != 0) {
1312 CVW_EXIT_READ(&hks->hks_lock);
1318 hei = hook_event_checkdup(he, hks);
1320 CVW_EXIT_READ(&hks->hks_lock);
1329 CVW_EXIT_READ(&hks->hks_lock);
1333 CVW_EXIT_READ(&hks->hks_lock);
1380 hook_stack_t *hks;
1382 hks = hfi->hfi_stack;
1386 KSTAT_FLAG_VIRTUAL, hks->hks_netstackid);
1393 (void *)(uintptr_t)hks->hks_netstackid;
1600 hook_event_checkdup(hook_event_t *he, hook_stack_t *hks)
1607 CVW_ENTER_READ(&hks->hks_lock);
1608 SLIST_FOREACH(hfi, &hks->hks_familylist, hfi_entry) {
1611 CVW_EXIT_READ(&hks->hks_lock);
1616 CVW_EXIT_READ(&hks->hks_lock);
1688 hook_stack_t *hks;
1694 hks = hfi->hfi_stack;
1695 CVW_ENTER_READ(&hks->hks_lock);
1696 if (hks->hks_shutdown != 0) {
1697 CVW_EXIT_READ(&hks->hks_lock);
1705 CVW_EXIT_READ(&hks->hks_lock);
1712 CVW_EXIT_READ(&hks->hks_lock);
1718 CVW_EXIT_READ(&hks->hks_lock);
1729 CVW_EXIT_READ(&hks->hks_lock);
2337 hook_stack_t *hks;
2349 hks = hfi->hfi_stack;
2353 KSTAT_FLAG_VIRTUAL, hks->hks_netstackid);
2378 (void *)(uintptr_t)hks->hks_netstackid;