3223 fcip_sendup(fptr, msg_elem->fcipsu_mp,
3224 msg_elem->fcipsu_func);
3225 }
3226
3227 #if !defined(FCIP_ESBALLOC)
3228 /*
3229 * for allocb'ed mblk - decrement upstream count here
3230 */
3231 mutex_enter(&fptr->fcip_mutex);
3232 ASSERT(fptr->fcip_ub_upstream > 0);
3233 fptr->fcip_ub_upstream--;
3234 mutex_exit(&fptr->fcip_mutex);
3235 #endif /* FCIP_ESBALLOC */
3236
3237 kmem_cache_free(fptr->fcip_sendup_cache, (void *)msg_elem);
3238 mutex_enter(&fptr->fcip_sendup_mutex);
3239 fptr->fcip_sendup_cnt--;
3240 }
3241
3242
3243 #ifndef __lock_lint
3244 CALLB_CPR_EXIT(&fptr->fcip_cpr_info);
3245 #else
3246 mutex_exit(&fptr->fcip_sendup_mutex);
3247 #endif /* __lock_lint */
3248
3249 /* Wake up fcip detach thread by the end */
3250 cv_signal(&fptr->fcip_sendup_cv);
3251
3252 thread_exit();
3253 }
3254
3255 #ifdef FCIP_ESBALLOC
3256
3257 /*
3258 * called from the stream head when it is done using an unsolicited buffer.
3259 * We release this buffer then to the FCA for reuse.
3260 */
3261 static void
3262 fcip_ubfree(char *arg)
3263 {
3264 struct fcip_esballoc_arg *fesb_argp = (struct fcip_esballoc_arg *)arg;
3265 fc_unsol_buf_t *ubuf;
3266 frtn_t *frtnp;
3267 fcip_port_info_t *fport;
|
3223 fcip_sendup(fptr, msg_elem->fcipsu_mp,
3224 msg_elem->fcipsu_func);
3225 }
3226
3227 #if !defined(FCIP_ESBALLOC)
3228 /*
3229 * for allocb'ed mblk - decrement upstream count here
3230 */
3231 mutex_enter(&fptr->fcip_mutex);
3232 ASSERT(fptr->fcip_ub_upstream > 0);
3233 fptr->fcip_ub_upstream--;
3234 mutex_exit(&fptr->fcip_mutex);
3235 #endif /* FCIP_ESBALLOC */
3236
3237 kmem_cache_free(fptr->fcip_sendup_cache, (void *)msg_elem);
3238 mutex_enter(&fptr->fcip_sendup_mutex);
3239 fptr->fcip_sendup_cnt--;
3240 }
3241
3242
3243 CALLB_CPR_EXIT(&fptr->fcip_cpr_info);
3244
3245 /* Wake up fcip detach thread by the end */
3246 cv_signal(&fptr->fcip_sendup_cv);
3247
3248 thread_exit();
3249 }
3250
3251 #ifdef FCIP_ESBALLOC
3252
3253 /*
3254 * called from the stream head when it is done using an unsolicited buffer.
3255 * We release this buffer then to the FCA for reuse.
3256 */
3257 static void
3258 fcip_ubfree(char *arg)
3259 {
3260 struct fcip_esballoc_arg *fesb_argp = (struct fcip_esballoc_arg *)arg;
3261 fc_unsol_buf_t *ubuf;
3262 frtn_t *frtnp;
3263 fcip_port_info_t *fport;
|