Hi, Looking through the locking in sta_info I noticed it was completely broken especially wrt STA flag updates. However, most other things are fine iff the drivers only use EITHER ieee80211_rx_irqsafe and ieee80211_tx_status_irqsafe OR __ieee80211_rx and ieee80211_tx_status. Also, in the latter case, drivers have to make sure that only one of each of those calls is active at the same time, even on an SMP system. The only drivers that currently use the non-irqsafe versions are ath5k and iwlwifi, where iwlwifi even mixes between the two groups. ath5k seems fine, it defers both to tasklets so only one call can be done at a time. With iwlwifi, however, there is a possibility that it invokes ieee80211_tx_status() on one CPU while mac80211's tasklet is processing another TX status that was submitted with ieee80211_tx_status_irqsafe(). Tomas, I think you mentioned that the TX status processing can't actually ever call the non-irqsafe version, can we remove that call to be sure? :) Alternatively, short of imposing these requirements, we can add new locking in mac80211. I don't think that would be good though. johannes
Attachment:
signature.asc
Description: This is a digitally signed message part