diff options
author | David S. Miller <davem@davemloft.net> | 2008-07-22 21:32:47 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-22 21:32:47 -0400 |
commit | 521c4d96e0840ecce25b956e00f416ed499ef2ba (patch) | |
tree | eef5a83ca23b4e9a43d1c37a83830617313fe074 | |
parent | 4255589293b78c4dab324323e12857876b154863 (diff) |
ipw2200: Call netif_*_queue() interfaces properly.
netif_carrier_{on,off}() handles starting and stopping packet
flow into the driver. So there is no reason to invoke netif_stop_queue()
and netif_wake_queue() in response to link status events.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/wireless/ipw2200.c | 33 |
1 files changed, 2 insertions, 31 deletions
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index 6e704608947c..1acfbcd3703c 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
@@ -4972,8 +4972,7 @@ static int ipw_queue_tx_reclaim(struct ipw_priv *priv, | |||
4972 | } | 4972 | } |
4973 | done: | 4973 | done: |
4974 | if ((ipw_tx_queue_space(q) > q->low_mark) && | 4974 | if ((ipw_tx_queue_space(q) > q->low_mark) && |
4975 | (qindex >= 0) && | 4975 | (qindex >= 0)) |
4976 | (priv->status & STATUS_ASSOCIATED) && netif_running(priv->net_dev)) | ||
4977 | netif_wake_queue(priv->net_dev); | 4976 | netif_wake_queue(priv->net_dev); |
4978 | used = q->first_empty - q->last_used; | 4977 | used = q->first_empty - q->last_used; |
4979 | if (used < 0) | 4978 | if (used < 0) |
@@ -10154,14 +10153,8 @@ static void init_sys_config(struct ipw_sys_config *sys_config) | |||
10154 | 10153 | ||
10155 | static int ipw_net_open(struct net_device *dev) | 10154 | static int ipw_net_open(struct net_device *dev) |
10156 | { | 10155 | { |
10157 | struct ipw_priv *priv = ieee80211_priv(dev); | ||
10158 | IPW_DEBUG_INFO("dev->open\n"); | 10156 | IPW_DEBUG_INFO("dev->open\n"); |
10159 | /* we should be verifying the device is ready to be opened */ | 10157 | netif_start_queue(dev); |
10160 | mutex_lock(&priv->mutex); | ||
10161 | if (!(priv->status & STATUS_RF_KILL_MASK) && | ||
10162 | (priv->status & STATUS_ASSOCIATED)) | ||
10163 | netif_start_queue(dev); | ||
10164 | mutex_unlock(&priv->mutex); | ||
10165 | return 0; | 10158 | return 0; |
10166 | } | 10159 | } |
10167 | 10160 | ||
@@ -10481,13 +10474,6 @@ static int ipw_net_hard_start_xmit(struct ieee80211_txb *txb, | |||
10481 | IPW_DEBUG_TX("dev->xmit(%d bytes)\n", txb->payload_size); | 10474 | IPW_DEBUG_TX("dev->xmit(%d bytes)\n", txb->payload_size); |
10482 | spin_lock_irqsave(&priv->lock, flags); | 10475 | spin_lock_irqsave(&priv->lock, flags); |
10483 | 10476 | ||
10484 | if (!(priv->status & STATUS_ASSOCIATED)) { | ||
10485 | IPW_DEBUG_INFO("Tx attempt while not associated.\n"); | ||
10486 | priv->ieee->stats.tx_carrier_errors++; | ||
10487 | netif_stop_queue(dev); | ||
10488 | goto fail_unlock; | ||
10489 | } | ||
10490 | |||
10491 | #ifdef CONFIG_IPW2200_PROMISCUOUS | 10477 | #ifdef CONFIG_IPW2200_PROMISCUOUS |
10492 | if (rtap_iface && netif_running(priv->prom_net_dev)) | 10478 | if (rtap_iface && netif_running(priv->prom_net_dev)) |
10493 | ipw_handle_promiscuous_tx(priv, txb); | 10479 | ipw_handle_promiscuous_tx(priv, txb); |
@@ -10499,10 +10485,6 @@ static int ipw_net_hard_start_xmit(struct ieee80211_txb *txb, | |||
10499 | spin_unlock_irqrestore(&priv->lock, flags); | 10485 | spin_unlock_irqrestore(&priv->lock, flags); |
10500 | 10486 | ||
10501 | return ret; | 10487 | return ret; |
10502 | |||
10503 | fail_unlock: | ||
10504 | spin_unlock_irqrestore(&priv->lock, flags); | ||
10505 | return 1; | ||
10506 | } | 10488 | } |
10507 | 10489 | ||
10508 | static struct net_device_stats *ipw_net_get_stats(struct net_device *dev) | 10490 | static struct net_device_stats *ipw_net_get_stats(struct net_device *dev) |
@@ -10703,13 +10685,6 @@ static void ipw_link_up(struct ipw_priv *priv) | |||
10703 | priv->last_packet_time = 0; | 10685 | priv->last_packet_time = 0; |
10704 | 10686 | ||
10705 | netif_carrier_on(priv->net_dev); | 10687 | netif_carrier_on(priv->net_dev); |
10706 | if (netif_queue_stopped(priv->net_dev)) { | ||
10707 | IPW_DEBUG_NOTIF("waking queue\n"); | ||
10708 | netif_wake_queue(priv->net_dev); | ||
10709 | } else { | ||
10710 | IPW_DEBUG_NOTIF("starting queue\n"); | ||
10711 | netif_start_queue(priv->net_dev); | ||
10712 | } | ||
10713 | 10688 | ||
10714 | cancel_delayed_work(&priv->request_scan); | 10689 | cancel_delayed_work(&priv->request_scan); |
10715 | cancel_delayed_work(&priv->request_direct_scan); | 10690 | cancel_delayed_work(&priv->request_direct_scan); |
@@ -10739,7 +10714,6 @@ static void ipw_link_down(struct ipw_priv *priv) | |||
10739 | { | 10714 | { |
10740 | ipw_led_link_down(priv); | 10715 | ipw_led_link_down(priv); |
10741 | netif_carrier_off(priv->net_dev); | 10716 | netif_carrier_off(priv->net_dev); |
10742 | netif_stop_queue(priv->net_dev); | ||
10743 | notify_wx_assoc_event(priv); | 10717 | notify_wx_assoc_event(priv); |
10744 | 10718 | ||
10745 | /* Cancel any queued work ... */ | 10719 | /* Cancel any queued work ... */ |
@@ -11419,7 +11393,6 @@ static void ipw_down(struct ipw_priv *priv) | |||
11419 | /* Clear all bits but the RF Kill */ | 11393 | /* Clear all bits but the RF Kill */ |
11420 | priv->status &= STATUS_RF_KILL_MASK | STATUS_EXIT_PENDING; | 11394 | priv->status &= STATUS_RF_KILL_MASK | STATUS_EXIT_PENDING; |
11421 | netif_carrier_off(priv->net_dev); | 11395 | netif_carrier_off(priv->net_dev); |
11422 | netif_stop_queue(priv->net_dev); | ||
11423 | 11396 | ||
11424 | ipw_stop_nic(priv); | 11397 | ipw_stop_nic(priv); |
11425 | 11398 | ||
@@ -11522,7 +11495,6 @@ static int ipw_prom_open(struct net_device *dev) | |||
11522 | 11495 | ||
11523 | IPW_DEBUG_INFO("prom dev->open\n"); | 11496 | IPW_DEBUG_INFO("prom dev->open\n"); |
11524 | netif_carrier_off(dev); | 11497 | netif_carrier_off(dev); |
11525 | netif_stop_queue(dev); | ||
11526 | 11498 | ||
11527 | if (priv->ieee->iw_mode != IW_MODE_MONITOR) { | 11499 | if (priv->ieee->iw_mode != IW_MODE_MONITOR) { |
11528 | priv->sys_config.accept_all_data_frames = 1; | 11500 | priv->sys_config.accept_all_data_frames = 1; |
@@ -11558,7 +11530,6 @@ static int ipw_prom_stop(struct net_device *dev) | |||
11558 | static int ipw_prom_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) | 11530 | static int ipw_prom_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) |
11559 | { | 11531 | { |
11560 | IPW_DEBUG_INFO("prom dev->xmit\n"); | 11532 | IPW_DEBUG_INFO("prom dev->xmit\n"); |
11561 | netif_stop_queue(dev); | ||
11562 | return -EOPNOTSUPP; | 11533 | return -EOPNOTSUPP; |
11563 | } | 11534 | } |
11564 | 11535 | ||