aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2008-07-22 21:32:47 -0400
committerDavid S. Miller <davem@davemloft.net>2008-07-22 21:32:47 -0400
commit521c4d96e0840ecce25b956e00f416ed499ef2ba (patch)
treeeef5a83ca23b4e9a43d1c37a83830617313fe074
parent4255589293b78c4dab324323e12857876b154863 (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.c33
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
10155static int ipw_net_open(struct net_device *dev) 10154static 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
10508static struct net_device_stats *ipw_net_get_stats(struct net_device *dev) 10490static 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)
11558static int ipw_prom_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) 11530static 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