oplmsu_cmn_func.c revision 07d06da50d310a325b457d6330165aebab1e0064
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER START
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The contents of this file are subject to the terms of the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Common Development and Distribution License (the "License").
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You may not use this file except in compliance with the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * See the License for the specific language governing permissions
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * and limitations under the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * When distributing Covered Code, include this CDDL HEADER in each
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * If applicable, add the following below this CDDL HEADER, with the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * fields enclosed by brackets "[]" replaced with your own identifying
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * information: Portions Copyright [yyyy] [name of copyright owner]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER END
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * All Rights Reserved, Copyright (c) FUJITSU LIMITED 2006
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Link upper_path_table structure
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Unlink upper_path_table structure
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Link lower_path_table structure
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Unlink lower_path_table structure
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Link msgb structure of high priority
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A [It depends on caller]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A [It depends on caller]
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_link_high_primsg(mblk_t **first, mblk_t **last, mblk_t *add_msg)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Check whether lower path is usable by lower path info table address
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if ((lpath->hndl_uqueue != NULL) || (lpath->hndl_mp != NULL)) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Search upath_t by path number
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Send M_IOCACK(or M_IOCNAK) message to stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl } else { /* Good */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Delete all upath_t
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Set queue and ioctl to lpath_t
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_set_ioctl_path(lpath_t *lpath, queue_t *hndl_queue, mblk_t *mp)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if ((lpath->hndl_uqueue == NULL) && (lpath->hndl_mp == NULL) &&
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Clear queue and ioctl to lpath_t
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Get instanse status from status of upath_t
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Search path of "online:standby" status
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Search path of "offline:stop" status, and minimum path number
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Get the total number of serial paths
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Put XOFF/ XON message on write queue
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* Send M_START */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* Send M_DATA(XOFF, XON) */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Put XOFF message on write queue for all standby paths
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Set M_FLUSH message
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : A [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Set status informations of upath_t
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_cmn_set_upath_sts(upath_t *upath, int sts, int prev_sts,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Allocate a message block
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_cmn_allocmb(queue_t *q, mblk_t *mp, mblk_t **nmp, size_t size,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Copy a message
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_cmn_copymb(queue_t *q, mblk_t *mp, mblk_t **nmp, mblk_t *cmp,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * bufcall request
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_cmn_bufcall(queue_t *q, mblk_t *mp, size_t size, int rw_flag)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl lpath->rbuf_id = bufcall(size, BPRI_LO, oplmsu_cmn_bufcb,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Previous sequence for active path change
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_cmn_prechg(queue_t *q, mblk_t *mp, int rw_flag, mblk_t **term_mp,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_cmn_copymb(q, mp, term_mp, oplmsu_uinst->tcsets_p,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_cmn_copymb(q, mp, term_mp, oplmsu_uinst->tiocmset_p,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_cmn_copymb(q, mp, term_mp, oplmsu_uinst->tiocspps_p,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Pick up termios to re-set
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_stop_prechg(mblk_t **term_mp, int *term_ioctl, int *term_stat)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if ((*term_mp = copymsg(oplmsu_uinst->tcsets_p)) == NULL) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if ((*term_mp = copymsg(oplmsu_uinst->tiocmset_p)) == NULL) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if ((*term_mp = copymsg(oplmsu_uinst->tiocspps_p)) == NULL) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if ((*term_mp = copymsg(oplmsu_uinst->tiocswinsz_p)) == NULL) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Previous sequence for active path change termio
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_cmn_prechg_termio(queue_t *q, mblk_t *mp, int rw_flag, int prev_flag,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_cmn_copymb(q, mp, term_mp, oplmsu_uinst->tiocmset_p,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_cmn_copymb(q, mp, term_mp, oplmsu_uinst->tiocspps_p,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Pull up messages
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Wake up flow control
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * bufcall() and timeout() callback entry for read/write stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * bufcall() or timeout() callback post handling for write stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : M
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * COMMON FUNCTIONS FOR WRITE STREAM
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Check control node and driver privilege
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl cmn_err(CE_WARN, "oplmsu: chk-node: ctrl node type = %d", node);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* Check super-user by oplmsu.conf */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Flush handle for write side stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Through message handle for write side stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_wcmn_through_hndl(queue_t *q, mblk_t *mp, int pri_flag, krw_t rw)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl "Active path doesn't exist");
25cf1a301a396c38e8adf52c15f537b80d2483f7jl "Inappropriate message for this node");
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Get high priority message from buffer for upper write stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl return (mp);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * putbq() function for normal priority message of write stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_wcmn_norm_putbq(queue_t *uwq, mblk_t *mp, queue_t *dq)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Restart queuing for high priority message of write stream when flow control
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER or RW_WRITER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* Handle high priority message */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl if (oplmsu_wcmn_through_hndl(q, mp, MSU_HIGH, rw) == FAILURE) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * COMMON FUNCTIONS FOR READ STREAM
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Flush handle for read side stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires lock ( M: mandatory P: prohibited A: allowed
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* Remove only data messages from read queue */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Through message handle for read side stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : M [RW_READER]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : A
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jloplmsu_rcmn_through_hndl(queue_t *q, mblk_t *mp, int pri_flag)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl (mp->b_datap->db_type == M_IOCNAK)) || (act_flag == ACTIVE_RES))) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Place a normal priority message at the head of
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * read queue
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Restart queuing for high priority message of read stream
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * when flow control failed
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl for (;;) { /* Handle high priority message */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Online trace
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* Trace current counter */
07d06da50d310a325b457d6330165aebab1e0064Surya Prakki (void) drv_getparm(LBOLT, (void *)&oplmsu_ltrc_ccnt);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl switch (op) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl oplmsu_ltrc_cur->pathno = ((lpath_t *)q->q_ptr)->path_no;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Display message log to console
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Requires Lock (( M: Mandatory, P: Prohibited, A: Allowed ))
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->u_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->l_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * -. uinst_t->c_lock : P
25cf1a301a396c38e8adf52c15f537b80d2483f7jl cmn_err(CE_NOTE, "!db_type = 0x%02x", tmp_mp->b_datap->db_type);
07d06da50d310a325b457d6330165aebab1e0064Surya Prakki (void) sprintf(pathname, "/devices%s:%c", wrkbuf,