Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3cf840914bd467fa4cc76af1a01bba4d2813131c
Commit:     3cf840914bd467fa4cc76af1a01bba4d2813131c
Parent:     c95c7f930ec6fee029c8e7957ab95b3967578070
Author:     Holger Schurig <[EMAIL PROTECTED]>
AuthorDate: Thu Aug 2 11:50:12 2007 -0400
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:49:50 2007 -0700

    [PATCH] libertas: access mesh_dev more carefully
    
    The CF/SDIO firmware doesn't support Mesh, so priv->mesh_dev is
    NULL there. Protect all accesses.
    
    Signed-off-by: Holger Schurig <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/join.c |   12 ++++++++----
 drivers/net/wireless/libertas/main.c |   16 ++++++++++------
 drivers/net/wireless/libertas/scan.c |   12 ++++++++----
 drivers/net/wireless/libertas/tx.c   |   12 ++++++++----
 4 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/drivers/net/wireless/libertas/join.c 
b/drivers/net/wireless/libertas/join.c
index f9799c3..da47c22 100644
--- a/drivers/net/wireless/libertas/join.c
+++ b/drivers/net/wireless/libertas/join.c
@@ -739,8 +739,10 @@ int libertas_ret_80211_associate(wlan_private * priv,
        netif_carrier_on(priv->dev);
        netif_wake_queue(priv->dev);
 
-       netif_carrier_on(priv->mesh_dev);
-       netif_wake_queue(priv->mesh_dev);
+       if (priv->mesh_dev) {
+               netif_carrier_on(priv->mesh_dev);
+               netif_wake_queue(priv->mesh_dev);
+       }
 
        lbs_deb_join("ASSOC_RESP: Associated \n");
 
@@ -827,8 +829,10 @@ int libertas_ret_80211_ad_hoc_start(wlan_private * priv,
        netif_carrier_on(priv->dev);
        netif_wake_queue(priv->dev);
 
-       netif_carrier_on(priv->mesh_dev);
-       netif_wake_queue(priv->mesh_dev);
+       if (priv->mesh_dev) {
+               netif_carrier_on(priv->mesh_dev);
+               netif_wake_queue(priv->mesh_dev);
+       }
 
        memset(&wrqu, 0, sizeof(wrqu));
        memcpy(wrqu.ap_addr.sa_data, adapter->curbssparams.bssid, ETH_ALEN);
diff --git a/drivers/net/wireless/libertas/main.c 
b/drivers/net/wireless/libertas/main.c
index 170dc23..b4e2cd1 100644
--- a/drivers/net/wireless/libertas/main.c
+++ b/drivers/net/wireless/libertas/main.c
@@ -298,10 +298,12 @@ static int libertas_dev_open(struct net_device *dev)
 
        if (adapter->connect_status == LIBERTAS_CONNECTED) {
                netif_carrier_on(priv->dev);
-               netif_carrier_on(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_carrier_on(priv->mesh_dev);
        } else {
                netif_carrier_off(priv->dev);
-               netif_carrier_off(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_carrier_off(priv->mesh_dev);
        }
 
        lbs_deb_leave(LBS_DEB_NET);
@@ -408,7 +410,8 @@ static int libertas_hard_start_xmit(struct sk_buff *skb, 
struct net_device *dev)
        }
 
        netif_stop_queue(priv->dev);
-       netif_stop_queue(priv->mesh_dev);
+       if (priv->mesh_dev)
+               netif_stop_queue(priv->mesh_dev);
 
        if (libertas_process_tx(priv, skb) == 0)
                dev->trans_start = jiffies;
@@ -474,7 +477,8 @@ static void libertas_tx_timeout(struct net_device *dev)
                        wake_up_interruptible(&priv->waitq);
        } else if (priv->adapter->connect_status == LIBERTAS_CONNECTED) {
                netif_wake_queue(priv->dev);
-               netif_wake_queue(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_wake_queue(priv->mesh_dev);
        }
 
        lbs_deb_leave(LBS_DEB_TX);
@@ -1254,7 +1258,6 @@ int libertas_add_mesh(wlan_private *priv, struct device 
*dev)
        ret = 0;
        goto done;
 
-
 err_unregister:
        unregister_netdev(mesh_dev);
 
@@ -1454,7 +1457,8 @@ void libertas_interrupt(struct net_device *dev)
        if (priv->adapter->psstate == PS_STATE_SLEEP) {
                priv->adapter->psstate = PS_STATE_AWAKE;
                netif_wake_queue(dev);
-               netif_wake_queue(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_wake_queue(priv->mesh_dev);
        }
 
        wake_up_interruptible(&priv->waitq);
diff --git a/drivers/net/wireless/libertas/scan.c 
b/drivers/net/wireless/libertas/scan.c
index 683fa1b..7f045ec 100644
--- a/drivers/net/wireless/libertas/scan.c
+++ b/drivers/net/wireless/libertas/scan.c
@@ -793,8 +793,10 @@ int wlan_scan_networks(wlan_private * priv,
        if (!scancurrentchanonly) {
                netif_stop_queue(priv->dev);
                netif_carrier_off(priv->dev);
-               netif_stop_queue(priv->mesh_dev);
-               netif_carrier_off(priv->mesh_dev);
+               if (priv->mesh_dev) {
+                       netif_stop_queue(priv->mesh_dev);
+                       netif_carrier_off(priv->mesh_dev);
+               }
        }
 
        ret = wlan_scan_channel_list(priv,
@@ -820,8 +822,10 @@ int wlan_scan_networks(wlan_private * priv,
        if (priv->adapter->connect_status == LIBERTAS_CONNECTED) {
                netif_carrier_on(priv->dev);
                netif_wake_queue(priv->dev);
-               netif_carrier_on(priv->mesh_dev);
-               netif_wake_queue(priv->mesh_dev);
+               if (priv->mesh_dev) {
+                       netif_carrier_on(priv->mesh_dev);
+                       netif_wake_queue(priv->mesh_dev);
+               }
        }
 
 out:
diff --git a/drivers/net/wireless/libertas/tx.c 
b/drivers/net/wireless/libertas/tx.c
index c227102..7c38301 100644
--- a/drivers/net/wireless/libertas/tx.c
+++ b/drivers/net/wireless/libertas/tx.c
@@ -159,7 +159,8 @@ done:
                skb_orphan(skb);
                /* stop processing outgoing pkts */
                netif_stop_queue(priv->dev);
-               netif_stop_queue(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_stop_queue(priv->mesh_dev);
                /* freeze any packets already in our queues */
                priv->adapter->TxLockFlag = 1;
        } else {
@@ -198,10 +199,12 @@ static void wlan_tx_queue(wlan_private *priv, struct 
sk_buff *skb)
        adapter->tx_queue_ps[adapter->tx_queue_idx++] = skb;
        if (adapter->tx_queue_idx == NR_TX_QUEUE) {
                netif_stop_queue(priv->dev);
-               netif_stop_queue(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_stop_queue(priv->mesh_dev);
        } else {
                netif_start_queue(priv->dev);
-               netif_start_queue(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_start_queue(priv->mesh_dev);
        }
 
        spin_unlock(&adapter->txqueue_lock);
@@ -285,7 +288,8 @@ void libertas_send_tx_feedback(wlan_private * priv)
        priv->adapter->TxLockFlag = 0;
        if (priv->adapter->connect_status == LIBERTAS_CONNECTED) {
                netif_wake_queue(priv->dev);
-               netif_wake_queue(priv->mesh_dev);
+               if (priv->mesh_dev)
+                       netif_wake_queue(priv->mesh_dev);
        }
 }
 EXPORT_SYMBOL_GPL(libertas_send_tx_feedback);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to