Lines Matching refs:ss
47 i_ddi_soft_state *ss = (i_ddi_soft_state *)state; in ddi_get_soft_state() local
50 ASSERT((ss != NULL) && (item >= 0)); in ddi_get_soft_state()
52 mutex_enter(&ss->lock); in ddi_get_soft_state()
54 if (item < ss->n_items && ss->array != NULL) in ddi_get_soft_state()
55 ret = ss->array[item]; in ddi_get_soft_state()
57 mutex_exit(&ss->lock); in ddi_get_soft_state()
66 i_ddi_soft_state *ss; in ddi_soft_state_init() local
71 ss = kmem_zalloc(sizeof (*ss), KM_SLEEP); in ddi_soft_state_init()
72 mutex_init(&ss->lock, NULL, MUTEX_DRIVER, NULL); in ddi_soft_state_init()
73 ss->size = size; in ddi_soft_state_init()
76 ss->n_items = MIN_N_ITEMS; in ddi_soft_state_init()
78 ss->n_items = n_items; in ddi_soft_state_init()
81 ASSERT(ss->n_items >= n_items); in ddi_soft_state_init()
83 ss->array = kmem_zalloc(ss->n_items * sizeof (void *), KM_SLEEP); in ddi_soft_state_init()
85 *state_p = ss; in ddi_soft_state_init()
99 i_ddi_soft_state *ss = (i_ddi_soft_state *)state; in ddi_soft_state_zalloc() local
106 mutex_enter(&ss->lock); in ddi_soft_state_zalloc()
107 if (ss->size == 0) { in ddi_soft_state_zalloc()
108 mutex_exit(&ss->lock); in ddi_soft_state_zalloc()
114 array = ss->array; /* NULL if ss->n_items == 0 */ in ddi_soft_state_zalloc()
115 ASSERT(ss->n_items != 0 && array != NULL); in ddi_soft_state_zalloc()
120 if (item < ss->n_items && array[item] != NULL) { in ddi_soft_state_zalloc()
121 mutex_exit(&ss->lock); in ddi_soft_state_zalloc()
128 new_element = kmem_zalloc(ss->size, KM_SLEEP); in ddi_soft_state_zalloc()
133 if (item >= ss->n_items) { in ddi_soft_state_zalloc()
154 new_n_items = ss->n_items; in ddi_soft_state_zalloc()
165 bcopy(array, new_array, ss->n_items * sizeof (void *)); in ddi_soft_state_zalloc()
171 kmem_free(ss->array, ss->n_items * sizeof (void *)); in ddi_soft_state_zalloc()
173 ss->array = (array = new_array); in ddi_soft_state_zalloc()
174 ss->n_items = new_n_items; in ddi_soft_state_zalloc()
177 ASSERT(array != NULL && item < ss->n_items && array[item] == NULL); in ddi_soft_state_zalloc()
181 mutex_exit(&ss->lock); in ddi_soft_state_zalloc()
188 i_ddi_soft_state *ss = (i_ddi_soft_state *)state; in ddi_soft_state_free() local
193 if (ss == NULL) { in ddi_soft_state_free()
201 mutex_enter(&ss->lock); in ddi_soft_state_free()
203 if ((array = ss->array) == NULL || ss->size == 0) { in ddi_soft_state_free()
206 } else if (item < 0 || item >= ss->n_items) { in ddi_soft_state_free()
208 msg, item, (ulong_t)ss->n_items - 1, "fake"); in ddi_soft_state_free()
214 mutex_exit(&ss->lock); in ddi_soft_state_free()
217 kmem_free(element, ss->size); in ddi_soft_state_free()
236 i_ddi_soft_state *ss; in ddi_soft_state_fini() local
241 (ss = (i_ddi_soft_state *)(*state_p)) == NULL) { in ddi_soft_state_fini()
247 if (ss->size == 0) { in ddi_soft_state_fini()
253 if (ss->n_items > 0) { in ddi_soft_state_fini()
254 for (item = 0; item < ss->n_items; item++) in ddi_soft_state_fini()
255 ddi_soft_state_free(ss, item); in ddi_soft_state_fini()
256 kmem_free(ss->array, ss->n_items * sizeof (void *)); in ddi_soft_state_fini()
259 mutex_destroy(&ss->lock); in ddi_soft_state_fini()
260 kmem_free(ss, sizeof (*ss)); in ddi_soft_state_fini()