From 802d50bc4e220b9bf404ac1ee36720023986d98e Mon Sep 17 00:00:00 2001 From: Simon Wilkinson Date: Mon, 25 Oct 2010 09:52:10 +0100 Subject: [PATCH] rx: Refactor transmit queue wakeup Refactor all of the places where we wake up the transmit queue into a common helper function. Change-Id: I1a2ca2bf1e6268dcaf90961a8a88bd4165519503 Reviewed-on: http://gerrit.openafs.org/3136 Reviewed-by: Jeffrey Altman Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- src/rx/rx.c | 56 ++++++++++++++++++----------------------------------- 1 file changed, 19 insertions(+), 37 deletions(-) diff --git a/src/rx/rx.c b/src/rx/rx.c index 27c1fda3b..28a7df1c6 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -1204,6 +1204,21 @@ rxi_WaitforTQBusy(struct rx_call *call) { } #endif +static void +rxi_WakeUpTransmitQueue(struct rx_call *call) +{ + if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) { + dpf(("call %"AFS_PTR_FMT" has %d waiters and flags %d\n", + call, call->tqWaiters, call->flags)); +#ifdef RX_ENABLE_LOCKS + osirx_AssertMine(&call->lock, "rxi_Start start"); + CV_BROADCAST(&call->cv_tq); +#else /* RX_ENABLE_LOCKS */ + osi_rxWakeup(&call->tq); +#endif /* RX_ENABLE_LOCKS */ + } +} + /* Start a new rx remote procedure call, on the specified connection. * If wait is set to 1, wait for a free call channel; otherwise return * 0. Maxtime gives the maximum number of seconds this call may take, @@ -4734,13 +4749,7 @@ rxi_ClearTransmitQueue(struct rx_call *call, int force) call->tqc -= #endif /* RXDEBUG_PACKET */ rxi_FreePackets(0, &call->tq); - if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) { -#ifdef RX_ENABLE_LOCKS - CV_BROADCAST(&call->cv_tq); -#else /* RX_ENABLE_LOCKS */ - osi_rxWakeup(&call->tq); -#endif /* RX_ENABLE_LOCKS */ - } + rxi_WakeUpTransmitQueue(call); #ifdef AFS_GLOBAL_RXLOCK_KERNEL call->flags &= ~RX_CALL_TQ_CLEARME; } @@ -5824,16 +5833,7 @@ rxi_Start(struct rxevent *event, */ if (call->flags & RX_CALL_FAST_RECOVER_WAIT) { call->flags &= ~RX_CALL_TQ_BUSY; - if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) { - dpf(("call %"AFS_PTR_FMT" has %d waiters and flags %d\n", - call, call->tqWaiters, call->flags)); -#ifdef RX_ENABLE_LOCKS - osirx_AssertMine(&call->lock, "rxi_Start start"); - CV_BROADCAST(&call->cv_tq); -#else /* RX_ENABLE_LOCKS */ - osi_rxWakeup(&call->tq); -#endif /* RX_ENABLE_LOCKS */ - } + rxi_WakeUpTransmitQueue(call); return; } if (call->error) { @@ -5844,16 +5844,7 @@ rxi_Start(struct rxevent *event, if (rx_stats_active) rx_atomic_inc(&rx_tq_debug.rxi_start_aborted); call->flags &= ~RX_CALL_TQ_BUSY; - if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) { - dpf(("call error %d while xmit %p has %d waiters and flags %d\n", - call->error, call, call->tqWaiters, call->flags)); -#ifdef RX_ENABLE_LOCKS - osirx_AssertMine(&call->lock, "rxi_Start middle"); - CV_BROADCAST(&call->cv_tq); -#else /* RX_ENABLE_LOCKS */ - osi_rxWakeup(&call->tq); -#endif /* RX_ENABLE_LOCKS */ - } + rxi_WakeUpTransmitQueue(call); rxi_CallError(call, call->error); return; } @@ -5942,16 +5933,7 @@ rxi_Start(struct rxevent *event, * protected by the global lock. */ call->flags &= ~RX_CALL_TQ_BUSY; - if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) { - dpf(("call %"AFS_PTR_FMT" has %d waiters and flags %d\n", - call, call->tqWaiters, call->flags)); -#ifdef RX_ENABLE_LOCKS - osirx_AssertMine(&call->lock, "rxi_Start end"); - CV_BROADCAST(&call->cv_tq); -#else /* RX_ENABLE_LOCKS */ - osi_rxWakeup(&call->tq); -#endif /* RX_ENABLE_LOCKS */ - } + rxi_WakeUpTransmitQueue(call); } else { call->flags |= RX_CALL_NEED_START; } -- 2.39.5