Lines Matching refs:dhp

626 dt_idhash_populate(dt_idhash_t *dhp)
628 const dt_ident_t *idp = dhp->dh_tmpl;
630 dhp->dh_tmpl = NULL; /* clear dh_tmpl first to avoid recursion */
631 dt_dprintf("populating %s idhash from %p\n", dhp->dh_name, (void *)idp);
634 if (dt_idhash_insert(dhp, idp->di_name,
646 dt_idhash_t *dhp;
654 if ((dhp = malloc(size)) == NULL)
657 bzero(dhp, size);
658 dhp->dh_name = name;
659 dhp->dh_tmpl = tmpl;
660 dhp->dh_nextid = min;
661 dhp->dh_minid = min;
662 dhp->dh_maxid = max;
663 dhp->dh_hashsz = _dtrace_strbuckets;
665 return (dhp);
678 dt_idhash_destroy(dt_idhash_t *dhp)
683 for (i = 0; i < dhp->dh_hashsz; i++) {
684 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
690 for (i = 0; i < dhp->dh_hashsz; i++) {
691 for (idp = dhp->dh_hash[i]; idp != NULL; idp = next) {
698 free(dhp);
702 dt_idhash_update(dt_idhash_t *dhp)
704 uint_t nextid = dhp->dh_minid;
708 for (i = 0; i < dhp->dh_hashsz; i++) {
709 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next) {
721 dhp->dh_nextid = nextid;
725 dt_idhash_lookup(dt_idhash_t *dhp, const char *name)
728 ulong_t h = dt_strtab_hash(name, &len) % dhp->dh_hashsz;
731 if (dhp->dh_tmpl != NULL)
732 dt_idhash_populate(dhp); /* fill hash w/ initial population */
734 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
743 dt_idhash_nextid(dt_idhash_t *dhp, uint_t *p)
745 if (dhp->dh_nextid >= dhp->dh_maxid)
748 *p = dhp->dh_nextid++;
753 dt_idhash_size(const dt_idhash_t *dhp)
755 return (dhp->dh_nelems);
759 dt_idhash_name(const dt_idhash_t *dhp)
761 return (dhp->dh_name);
765 dt_idhash_insert(dt_idhash_t *dhp, const char *name, ushort_t kind,
772 if (dhp->dh_tmpl != NULL)
773 dt_idhash_populate(dhp); /* fill hash w/ initial population */
781 h = dt_strtab_hash(name, NULL) % dhp->dh_hashsz;
782 idp->di_next = dhp->dh_hash[h];
784 dhp->dh_hash[h] = idp;
785 dhp->dh_nelems++;
787 if (dhp->dh_defer != NULL)
788 dhp->dh_defer(dhp, idp);
794 dt_idhash_xinsert(dt_idhash_t *dhp, dt_ident_t *idp)
798 if (dhp->dh_tmpl != NULL)
799 dt_idhash_populate(dhp); /* fill hash w/ initial population */
801 h = dt_strtab_hash(idp->di_name, NULL) % dhp->dh_hashsz;
802 idp->di_next = dhp->dh_hash[h];
805 dhp->dh_hash[h] = idp;
806 dhp->dh_nelems++;
808 if (dhp->dh_defer != NULL)
809 dhp->dh_defer(dhp, idp);
813 dt_idhash_delete(dt_idhash_t *dhp, dt_ident_t *key)
816 ulong_t h = dt_strtab_hash(key->di_name, &len) % dhp->dh_hashsz;
817 dt_ident_t **pp = &dhp->dh_hash[h];
820 for (idp = dhp->dh_hash[h]; idp != NULL; idp = idp->di_next) {
830 assert(dhp->dh_nelems != 0);
831 dhp->dh_nelems--;
850 dt_idhash_iter(dt_idhash_t *dhp, dt_idhash_f *func, void *data)
857 if (dhp->dh_tmpl != NULL)
858 dt_idhash_populate(dhp); /* fill hash w/ initial population */
860 n = dhp->dh_nelems;
863 for (i = 0, j = 0; i < dhp->dh_hashsz; i++) {
864 for (idp = dhp->dh_hash[i]; idp != NULL; idp = idp->di_next)
868 qsort(ids, dhp->dh_nelems, sizeof (dt_ident_t *), dt_idhash_comp);
871 if ((rv = func(dhp, ids[i], data)) != 0)
881 dt_idhash_t *dhp;
884 for (dhp = dt_list_prev(&sp->dids_list);
885 dhp != NULL; dhp = dt_list_prev(dhp)) {
886 if ((idp = dt_idhash_lookup(dhp, name)) != NULL)
894 dt_idstack_push(dt_idstack_t *sp, dt_idhash_t *dhp)
896 dt_list_append(&sp->dids_list, dhp);
900 dt_idstack_pop(dt_idstack_t *sp, dt_idhash_t *dhp)
902 assert(dt_list_prev(&sp->dids_list) == dhp);
903 dt_list_delete(&sp->dids_list, dhp);