mac80211: allow configure_filter callback to sleep
Over time, a whole bunch of drivers have come up with their own scheme to delay the configure_filter operation to a workqueue. To be able to simplify things, allow configure_filter to sleep, and add a new prepare_multicast callback that drivers that need the multicast address list implement. This new callback must be atomic, but most drivers either don't care or just calculate a hash which can be done atomically and then uploaded to the hardware non-atomically. A cursory look suggests that at76c50x-usb, ar9170, mwl8k (which is actually very broken now), rt2x00, wl1251, wl1271 and zd1211 should make use of this new capability. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
このコミットが含まれているのは:
@@ -1997,15 +1997,14 @@ static void at76_bss_info_changed(struct ieee80211_hw *hw,
|
||||
/* must be atomic */
|
||||
static void at76_configure_filter(struct ieee80211_hw *hw,
|
||||
unsigned int changed_flags,
|
||||
unsigned int *total_flags, int mc_count,
|
||||
struct dev_addr_list *mc_list)
|
||||
unsigned int *total_flags, u64 multicast)
|
||||
{
|
||||
struct at76_priv *priv = hw->priv;
|
||||
int flags;
|
||||
|
||||
at76_dbg(DBG_MAC80211, "%s(): changed_flags=0x%08x "
|
||||
"total_flags=0x%08x mc_count=%d",
|
||||
__func__, changed_flags, *total_flags, mc_count);
|
||||
"total_flags=0x%08x",
|
||||
__func__, changed_flags, *total_flags);
|
||||
|
||||
flags = changed_flags & AT76_SUPPORTED_FILTERS;
|
||||
*total_flags = AT76_SUPPORTED_FILTERS;
|
||||
|
新しいイシューから参照
ユーザーをブロックする