Lines Matching refs:ids

37 	fmd_idspace_t *ids = fmd_alloc(sizeof (fmd_idspace_t), FMD_SLEEP);  in fmd_idspace_create()  local
56 (void) strlcpy(ids->ids_name, name, sizeof (ids->ids_name)); in fmd_idspace_create()
57 (void) pthread_mutex_init(&ids->ids_lock, NULL); in fmd_idspace_create()
58 (void) pthread_cond_init(&ids->ids_cv, NULL); in fmd_idspace_create()
60 ids->ids_hash = fmd_zalloc(sizeof (void *) * hashlen, FMD_SLEEP); in fmd_idspace_create()
61 ids->ids_hashlen = hashlen; in fmd_idspace_create()
62 ids->ids_refs = 0; in fmd_idspace_create()
63 ids->ids_nextid = min - 1; in fmd_idspace_create()
64 ids->ids_minid = min; in fmd_idspace_create()
65 ids->ids_maxid = max; in fmd_idspace_create()
66 ids->ids_count = 0; in fmd_idspace_create()
68 return (ids); in fmd_idspace_create()
72 fmd_idspace_destroy(fmd_idspace_t *ids) in fmd_idspace_destroy() argument
77 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_destroy()
79 while (ids->ids_refs != 0) in fmd_idspace_destroy()
80 (void) pthread_cond_wait(&ids->ids_cv, &ids->ids_lock); in fmd_idspace_destroy()
82 for (i = 0; i < ids->ids_hashlen; i++) { in fmd_idspace_destroy()
83 for (ide = ids->ids_hash[i]; ide != NULL; ide = nde) { in fmd_idspace_destroy()
89 fmd_free(ids->ids_hash, sizeof (void *) * ids->ids_hashlen); in fmd_idspace_destroy()
90 fmd_free(ids, sizeof (fmd_idspace_t)); in fmd_idspace_destroy()
94 fmd_idspace_apply(fmd_idspace_t *ids, in fmd_idspace_apply() argument
101 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_apply()
102 count = ids->ids_count; in fmd_idspace_apply()
105 for (i = 0; i < ids->ids_hashlen; i++) { in fmd_idspace_apply()
106 for (ide = ids->ids_hash[i]; ide != NULL; ide = ide->ide_next) in fmd_idspace_apply()
111 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_apply()
114 func(ids, ida[i], arg); in fmd_idspace_apply()
120 fmd_idspace_lookup(fmd_idspace_t *ids, id_t id) in fmd_idspace_lookup() argument
124 ASSERT(MUTEX_HELD(&ids->ids_lock)); in fmd_idspace_lookup()
125 ide = ids->ids_hash[id & (ids->ids_hashlen - 1)]; in fmd_idspace_lookup()
136 fmd_idspace_getspecific(fmd_idspace_t *ids, id_t id) in fmd_idspace_getspecific() argument
141 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_getspecific()
142 ide = fmd_idspace_lookup(ids, id); in fmd_idspace_getspecific()
144 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_getspecific()
150 fmd_idspace_setspecific(fmd_idspace_t *ids, id_t id, void *data) in fmd_idspace_setspecific() argument
154 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_setspecific()
156 while (ids->ids_refs != 0) in fmd_idspace_setspecific()
157 (void) pthread_cond_wait(&ids->ids_cv, &ids->ids_lock); in fmd_idspace_setspecific()
159 if ((ide = fmd_idspace_lookup(ids, id)) == NULL) { in fmd_idspace_setspecific()
161 (void *)ids, ids->ids_name, id); in fmd_idspace_setspecific()
165 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_setspecific()
169 fmd_idspace_contains(fmd_idspace_t *ids, id_t id) in fmd_idspace_contains() argument
173 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_contains()
174 ide = fmd_idspace_lookup(ids, id); in fmd_idspace_contains()
175 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_contains()
181 fmd_idspace_valid(fmd_idspace_t *ids, id_t id) in fmd_idspace_valid() argument
183 return (id >= ids->ids_minid && id <= ids->ids_maxid); in fmd_idspace_valid()
187 fmd_idspace_xalloc_locked(fmd_idspace_t *ids, id_t id, void *data) in fmd_idspace_xalloc_locked() argument
192 if (id < ids->ids_minid || id > ids->ids_maxid) { in fmd_idspace_xalloc_locked()
194 id, ids->ids_minid, ids->ids_maxid, in fmd_idspace_xalloc_locked()
195 (void *)ids, ids->ids_name); in fmd_idspace_xalloc_locked()
198 if (fmd_idspace_lookup(ids, id) != NULL) in fmd_idspace_xalloc_locked()
202 h = id & (ids->ids_hashlen - 1); in fmd_idspace_xalloc_locked()
204 ide->ide_next = ids->ids_hash[h]; in fmd_idspace_xalloc_locked()
208 ids->ids_hash[h] = ide; in fmd_idspace_xalloc_locked()
209 ids->ids_count++; in fmd_idspace_xalloc_locked()
215 fmd_idspace_xalloc(fmd_idspace_t *ids, id_t id, void *data) in fmd_idspace_xalloc() argument
217 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_xalloc()
218 id = fmd_idspace_xalloc_locked(ids, id, data); in fmd_idspace_xalloc()
219 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_xalloc()
224 fmd_idspace_alloc_locked(fmd_idspace_t *ids, void *data) in fmd_idspace_alloc_locked() argument
228 ASSERT(MUTEX_HELD(&ids->ids_lock)); in fmd_idspace_alloc_locked()
230 if (ids->ids_count == ids->ids_maxid - ids->ids_minid + 1) in fmd_idspace_alloc_locked()
234 if (++ids->ids_nextid > ids->ids_maxid) in fmd_idspace_alloc_locked()
235 ids->ids_nextid = ids->ids_minid; in fmd_idspace_alloc_locked()
236 id = ids->ids_nextid; in fmd_idspace_alloc_locked()
237 } while (fmd_idspace_xalloc_locked(ids, id, data) != id); in fmd_idspace_alloc_locked()
243 fmd_idspace_alloc(fmd_idspace_t *ids, void *data) in fmd_idspace_alloc() argument
247 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_alloc()
248 id = fmd_idspace_alloc_locked(ids, data); in fmd_idspace_alloc()
249 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_alloc()
260 fmd_idspace_alloc_min(fmd_idspace_t *ids, void *data) in fmd_idspace_alloc_min() argument
264 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_alloc_min()
265 ids->ids_nextid = ids->ids_minid - 1; in fmd_idspace_alloc_min()
266 id = fmd_idspace_alloc_locked(ids, data); in fmd_idspace_alloc_min()
267 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_alloc_min()
273 fmd_idspace_free(fmd_idspace_t *ids, id_t id) in fmd_idspace_free() argument
278 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_free()
279 pp = &ids->ids_hash[id & (ids->ids_hashlen - 1)]; in fmd_idspace_free()
289 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_free()
297 ASSERT(ids->ids_count != 0); in fmd_idspace_free()
298 ids->ids_count--; in fmd_idspace_free()
300 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_free()
313 fmd_idspace_hold(fmd_idspace_t *ids, id_t id) in fmd_idspace_hold() argument
318 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_hold()
320 if ((ide = fmd_idspace_lookup(ids, id)) != NULL) { in fmd_idspace_hold()
321 ids->ids_refs++; in fmd_idspace_hold()
322 ASSERT(ids->ids_refs != 0); in fmd_idspace_hold()
327 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_hold()
332 fmd_idspace_rele(fmd_idspace_t *ids, id_t id) in fmd_idspace_rele() argument
334 (void) pthread_mutex_lock(&ids->ids_lock); in fmd_idspace_rele()
336 ASSERT(fmd_idspace_lookup(ids, id) != NULL); in fmd_idspace_rele()
337 ASSERT(ids->ids_refs != 0); in fmd_idspace_rele()
338 ids->ids_refs--; in fmd_idspace_rele()
340 (void) pthread_cond_broadcast(&ids->ids_cv); in fmd_idspace_rele()
341 (void) pthread_mutex_unlock(&ids->ids_lock); in fmd_idspace_rele()