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 | ||
