On Sunday 29 April 2007 02:33:45 Jiri Benc wrote: > @@ -631,7 +632,8 @@ struct ieee80211_ops { > * we need to combine the multicast lists and flags for multiple > * virtual interfaces), they cannot assign set_multicast_list. > * The parameters here replace dev->flags and dev->mc_count, > - * dev->mc_list is replaced by calling ieee80211_get_mc_list_item. */ > + * dev->mc_list is replaced by calling ieee80211_get_mc_list_item. > + * Must be atomic. */ > void (*set_multicast_list)(struct ieee80211_hw *hw, > unsigned short flags, int mc_count); Why is that required to be atomic, actually? > /* Set encryption key. IEEE 802.11 module calls this function to set > @@ -647,7 +650,8 @@ struct ieee80211_ops { > * station hwaddr for individual keys. aid of the station is given > * to help low-level driver in selecting which key->hw_key_idx to use > * for this key. TX control data will use the hw_key_idx selected by > - * the low-level driver. */ > + * the low-level driver. > + * Must be atomic. */ > int (*set_key)(struct ieee80211_hw *hw, set_key_cmd cmd, > u8 *addr, struct ieee80211_key_conf *key, int aid); I think USB drivers and bcm43xx violate that. We can't easily workaround it without doing the operation async. -- Greetings Michael. - 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