Search Linux Wireless

Re: [PATCH 04/13] mac80211: disable tasklets on close

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 23 Apr 2007 14:48:13 -0400, Michael Wu wrote:
> This prevents all tasklets from running when the device is down.
> 
> [...]
> --- a/net/mac80211/ieee80211.c
> +++ b/net/mac80211/ieee80211.c
> @@ -2276,7 +2276,6 @@ static int ieee80211_master_open(struct net_device *dev)
>  	list_for_each_entry(sdata, &local->sub_if_list, list) {
>  		if (sdata->dev != dev && netif_running(sdata->dev)) {
>  			res = 0;
> -			tasklet_enable(&local->tx_pending_tasklet);
>  			break;
>  		}
>  	}
> @@ -2289,7 +2288,6 @@ static int ieee80211_master_stop(struct net_device *dev)
>  	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
>  	struct ieee80211_sub_if_data *sdata;
>  
> -	tasklet_disable(&local->tx_pending_tasklet);
>  	read_lock(&local->sub_if_lock);
>  	list_for_each_entry(sdata, &local->sub_if_list, list) {
>  		if (sdata->dev != dev && netif_running(sdata->dev)) {
> @@ -2401,6 +2399,8 @@ static int ieee80211_open(struct net_device *dev)
>  
>  	if (local->open_count == 0) {
>  		res = 0;
> +		tasklet_enable(&local->tx_pending_tasklet);
> +		tasklet_enable(&local->tasklet);
>  		if (local->ops->open)
>  			res = local->ops->open(local_to_hw(local));
>  		if (res == 0) {
> @@ -2475,6 +2475,8 @@ static int ieee80211_stop(struct net_device *dev)
>  			dev_close(local->apdev);
>  		if (local->ops->stop)
>  			local->ops->stop(local_to_hw(local));
> +		tasklet_disable(&local->tx_pending_tasklet);
> +		tasklet_disable(&local->tasklet);


This seems suspicious to me. Will it really work when somebody take the
master interface down by hand while some other interface is still
active?

Thanks,

 Jiri

>  	}
>  	if (local->ops->remove_interface) {
>  		struct ieee80211_if_init_conf conf;
> @@ -4713,6 +4715,8 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
>  	tasklet_init(&local->tasklet,
>  		     ieee80211_tasklet_handler,
>  		     (unsigned long) local);
> +	tasklet_disable(&local->tasklet);
> +
>  	skb_queue_head_init(&local->skb_queue);
>  	skb_queue_head_init(&local->skb_queue_unreliable);
>  
> 


-- 
Jiri Benc
SUSE Labs
-
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

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux