On 2011-08-30 6:54 PM, Rajkumar Manoharan wrote:
On Tue, Aug 30, 2011 at 05:52:02PM +0200, Felix Fietkau wrote:
On 2011-08-30 4:20 PM, Rajkumar Manoharan wrote:
>On Tue, Aug 30, 2011 at 10:30:45AM +0200, Felix Fietkau wrote:
>> This makes it much easier to add further rework to avoid race conditions
>> between reset and other work items.
>> Move other functions to make ath_reset static.
>>
>> Signed-off-by: Felix Fietkau<nbd@xxxxxxxxxxx>
>> ---
>> diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c
>> index 49b93c2..2b2a975 100644
>> --- a/drivers/net/wireless/ath/ath9k/xmit.c
>> +++ b/drivers/net/wireless/ath/ath9k/xmit.c
>> @@ -581,8 +581,10 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
>>
>> rcu_read_unlock();
>>
>> - if (needreset)
>> - ath_reset(sc, false);
>> + if (needreset) {
>> + sc->sc_flags |= SC_OP_HW_RESET;
>> + ieee80211_queue_work(sc->hw,&sc->hw_reset_work);
>> + }
>> }
>>
>Still ath_txq_schedule can be scheduled. Return a error code from
>ath_tx_complete_aggr to abort tx process intead of SC_OP_HW_RESET.
>That looks much more generic and simple.
I added this to make sure that there won't be any subsequent
attempts at processing the tx queue until the reset (e.g. if there
was a tx status IRQ in the mean time).
If so, it would be safer not to re-enable interrupts at the end of ath9k_tasklet
if SC_OP_HW_RESET is set.
I think tx is the primary issue here, so I only added the check to the
tx processing functions.
- Felix
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html