Lines Matching refs:vmplp
54 vio_mblk_pool_t *vmplp; in vio_create_mblks() local
65 vmplp = kmem_zalloc(sizeof (*vmplp), KM_SLEEP); in vio_create_mblks()
66 vmplp->quelen = num_mblks; in vio_create_mblks()
67 vmplp->quemask = num_mblks - 1; /* expects quelen is power-of-2 */ in vio_create_mblks()
68 vmplp->mblk_size = mblk_size; in vio_create_mblks()
70 mutex_init(&vmplp->hlock, NULL, MUTEX_DRIVER, in vio_create_mblks()
72 mutex_init(&vmplp->tlock, NULL, MUTEX_DRIVER, in vio_create_mblks()
75 vmplp->basep = kmem_zalloc(num_mblks * sizeof (vio_mblk_t), KM_SLEEP); in vio_create_mblks()
77 vmplp->datap = kmem_zalloc(num_mblks * mblk_size, KM_SLEEP); in vio_create_mblks()
79 vmplp->datap = mblk_datap; in vio_create_mblks()
80 vmplp->flag |= VMPL_FLAG_CLIENT_DATA; in vio_create_mblks()
82 vmplp->nextp = NULL; in vio_create_mblks()
85 vmplp->quep = kmem_zalloc(vmplp->quelen * in vio_create_mblks()
87 vmplp->head = 0; in vio_create_mblks()
88 vmplp->tail = 0; in vio_create_mblks()
90 for (i = 0, datap = vmplp->datap; i < num_mblks; i++) { in vio_create_mblks()
92 vmp = &(vmplp->basep[i]); in vio_create_mblks()
93 vmp->vmplp = vmplp; in vio_create_mblks()
102 vmplp->tail = vmplp->head; in vio_create_mblks()
108 rv = vio_destroy_mblks(vmplp); in vio_create_mblks()
119 vmplp->quep[vmplp->tail] = vmp; in vio_create_mblks()
120 vmplp->tail = (vmplp->tail + 1) & vmplp->quemask; in vio_create_mblks()
125 *poolp = vmplp; in vio_create_mblks()
140 vio_destroy_mblks(vio_mblk_pool_t *vmplp) in vio_destroy_mblks() argument
148 if (vmplp == NULL) in vio_destroy_mblks()
156 if (vmplp->head == vmplp->tail) { in vio_destroy_mblks()
164 if (vmplp->head != vmplp->tail) { in vio_destroy_mblks()
168 num_mblks = vmplp->quelen; in vio_destroy_mblks()
177 vmplp->flag |= VMPL_FLAG_DESTROYING; in vio_destroy_mblks()
179 vmp = &(vmplp->basep[i]); in vio_destroy_mblks()
190 vmplp->flag &= ~(VMPL_FLAG_DESTROYING); in vio_destroy_mblks()
192 kmem_free(vmplp->basep, num_mblks * sizeof (vio_mblk_t)); in vio_destroy_mblks()
193 if ((vmplp->flag & VMPL_FLAG_CLIENT_DATA) == 0) { in vio_destroy_mblks()
194 kmem_free(vmplp->datap, num_mblks * vmplp->mblk_size); in vio_destroy_mblks()
196 kmem_free(vmplp->quep, num_mblks * sizeof (vio_mblk_t *)); in vio_destroy_mblks()
198 mutex_destroy(&vmplp->hlock); in vio_destroy_mblks()
199 mutex_destroy(&vmplp->tlock); in vio_destroy_mblks()
201 kmem_free(vmplp, sizeof (*vmplp)); in vio_destroy_mblks()
211 vio_allocb(vio_mblk_pool_t *vmplp) in vio_allocb() argument
216 mutex_enter(&vmplp->hlock); in vio_allocb()
217 head = (vmplp->head + 1) & vmplp->quemask; in vio_allocb()
218 if (head != vmplp->tail) { in vio_allocb()
220 vmp = vmplp->quep[vmplp->head]; in vio_allocb()
221 vmplp->head = head; in vio_allocb()
225 mutex_exit(&vmplp->hlock); in vio_allocb()
238 vio_mblk_pool_t *vmplp = vmp->vmplp; in vio_freeb() local
240 if (vmplp->flag & VMPL_FLAG_DESTROYING) { in vio_freeb()
251 vmp->mp = desballoc(vmp->datap, vmplp->mblk_size, in vio_freeb()
255 mutex_enter(&vmplp->tlock); in vio_freeb()
256 vmplp->quep[vmplp->tail] = vmp; in vio_freeb()
257 vmplp->tail = (vmplp->tail + 1) & vmplp->quemask; in vio_freeb()
258 mutex_exit(&vmplp->tlock); in vio_freeb()
271 vio_clobber_pool(vio_mblk_pool_t *vmplp) in vio_clobber_pool() argument
273 uint64_t num_mblks = vmplp->quelen; in vio_clobber_pool()
277 mutex_enter(&vmplp->hlock); in vio_clobber_pool()
278 mutex_enter(&vmplp->tlock); in vio_clobber_pool()
280 vmp = &(vmplp->basep[i]); in vio_clobber_pool()
284 ASSERT(vmplp->tail != vmplp->head); in vio_clobber_pool()
285 vmplp->quep[vmplp->tail] = vmp; in vio_clobber_pool()
286 vmplp->tail = (vmplp->tail + 1) & vmplp->quemask; in vio_clobber_pool()
289 mutex_exit(&vmplp->tlock); in vio_clobber_pool()
290 mutex_exit(&vmplp->hlock); in vio_clobber_pool()