Print this page
OS-7184 prototype
*** 1392,1405 ****
*/
ASSERT(IAM_WRITER_ILL(ill));
while (ill->ill_capab_pending_cnt != 0 &&
(ill->ill_state_flags & ILL_CONDEMNED) == 0) {
! mutex_enter(&ill->ill_dlpi_capab_lock);
ipsq_exit(ill->ill_phyint->phyint_ipsq);
! cv_wait(&ill->ill_dlpi_capab_cv, &ill->ill_dlpi_capab_lock);
! mutex_exit(&ill->ill_dlpi_capab_lock);
/*
* If ipsq_enter() fails, someone set ILL_CONDEMNED
* while we dropped the squeue. Indicate such to the caller.
*/
if (!ipsq_enter(ill, B_FALSE, CUR_OP))
--- 1392,1406 ----
*/
ASSERT(IAM_WRITER_ILL(ill));
while (ill->ill_capab_pending_cnt != 0 &&
(ill->ill_state_flags & ILL_CONDEMNED) == 0) {
! /* This may enable blocked callers of ill_capability_done(). */
ipsq_exit(ill->ill_phyint->phyint_ipsq);
! /* Pause a bit (1msec) before we re-enter the squeue. */
! delay(drv_usectohz(1000000));
!
/*
* If ipsq_enter() fails, someone set ILL_CONDEMNED
* while we dropped the squeue. Indicate such to the caller.
*/
if (!ipsq_enter(ill, B_FALSE, CUR_OP))
*** 3511,3523 ****
ill->ill_reachable_time = ND_REACHABLE_TIME;
ill->ill_xmit_count = ND_MAX_MULTICAST_SOLICIT;
ill->ill_max_buf = ND_MAX_Q;
ill->ill_refcnt = 0;
- cv_init(&ill->ill_dlpi_capab_cv, NULL, CV_DEFAULT, NULL);
- mutex_init(&ill->ill_dlpi_capab_lock, NULL, MUTEX_DEFAULT, NULL);
-
return (0);
}
/*
* ill_init is called by ip_open when a device control stream is opened.
--- 3512,3521 ----
*** 12933,12953 ****
void
ill_capability_done(ill_t *ill)
{
ASSERT(ill->ill_capab_pending_cnt != 0);
ill_dlpi_done(ill, DL_CAPABILITY_REQ);
ill->ill_capab_pending_cnt--;
if (ill->ill_capab_pending_cnt == 0 &&
ill->ill_dlpi_capab_state == IDCS_OK)
ill_capability_reset_alloc(ill);
-
- mutex_enter(&ill->ill_dlpi_capab_lock);
- cv_broadcast(&ill->ill_dlpi_capab_cv);
- mutex_exit(&ill->ill_dlpi_capab_lock);
}
/*
* Send all deferred DLPI messages without waiting for their ACKs.
*/
--- 12931,12948 ----
void
ill_capability_done(ill_t *ill)
{
ASSERT(ill->ill_capab_pending_cnt != 0);
+ ASSERT(IAM_WRITER_ILL(ill));
ill_dlpi_done(ill, DL_CAPABILITY_REQ);
ill->ill_capab_pending_cnt--;
if (ill->ill_capab_pending_cnt == 0 &&
ill->ill_dlpi_capab_state == IDCS_OK)
ill_capability_reset_alloc(ill);
}
/*
* Send all deferred DLPI messages without waiting for their ACKs.
*/