1. 16 Dec, 2013 4 commits
    • Johannes Berg's avatar
      mac80211: move 4-addr sta pointer clearing before synchronize_rcu() · a710c816
      Johannes Berg authored
      The pointer should be cleared before synchronize_rcu() so that the
      consequently dead station won't be found by any lookups in the TX
      or RX paths.
      
      Also check that the station is actually the one being removed, the
      check is not needed because each 4-addr VLAN can only have a single
      station and non-4-addr VLANs always have a NULL pointer there, but
      the code is clearer this way (and we avoid the memory write.)
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      a710c816
    • Johannes Berg's avatar
      iwlwifi: mvm: use pre-RCU-sync sta removal operation · 1ddbbb0c
      Johannes Berg authored
      iwlmvm relies on the current mac80211 behaviour of allowing
      station pointers to be valid for an RCU grace period after
      returning from the sta_state() callback. To optimise these
      cases, this behaviour is going away, so make the driver use
      the new sta_pre_rcu_remove() method to clear the pointer in
      the fw_id_to_mac_id[] array.
      
      Since this may happen while the station is still present in
      the firmware, don't set the pointer to NULL but to -ENOENT
      to mark this particular case. In client mode, the station
      is kept even longer (until marking the MAC as unassociated)
      so the drain flow must take this new behavior into account.
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      1ddbbb0c
    • Johannes Berg's avatar
      mac80211: add pre-RCU-sync sta removal driver operation · 6a9d1b91
      Johannes Berg authored
      Currently, mac80211 allows drivers to keep RCU-protected station
      references that are cleared when the station is removed from the
      driver and consequently needs to synchronize twice, once before
      removing the station from the driver (so it can guarantee that
      the station is no longer used in TX towards the driver) and once
      after the station is removed from the driver.
      
      Add a new pre-RCU-synchronisation station removal operation to
      the API to allow drivers to clear/invalidate their RCU-protected
      station pointers before the RCU synchronisation.
      
      This will allow removing the second synchronisation by changing
      the driver API so that the driver may no longer assume a valid
      RCU-protected pointer after sta_remove/sta_state returns.
      
      The alternative to this would be to synchronize_rcu() in all the
      drivers that currently rely on this behaviour (only iwlmvm) but
      that would defeat the purpose.
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      6a9d1b91
    • Johannes Berg's avatar
  2. 11 Dec, 2013 11 commits
  3. 10 Dec, 2013 1 commit
  4. 09 Dec, 2013 24 commits