net: dsa: use cpu_switch instead of ds[0]
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>
Wed, 18 Jan 2017 01:41:39 +0000 (20:41 -0500)
committerDavid S. Miller <davem@davemloft.net>
Wed, 18 Jan 2017 21:49:47 +0000 (16:49 -0500)
Now that the DSA Ethernet switches are true Linux devices, the CPU
switch is not necessarily the first one. If its address is higher than
the second switch on the same MDIO bus, its index will be 1, not 0.

Avoid any confusion by using dst->cpu_switch instead of dst->ds[0].

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/dsa.c
net/dsa/dsa2.c
net/dsa/slave.c
net/dsa/tag_brcm.c
net/dsa/tag_qca.c
net/dsa/tag_trailer.c

index b220609cfe6fdaee29289576a20a8f6c915ba66f..91f96e1bd2ecec1db34ce9d8b56661213eb567ce 100644 (file)
@@ -868,7 +868,7 @@ static void dsa_remove_dst(struct dsa_switch_tree *dst)
                        dsa_switch_destroy(ds);
        }
 
-       dsa_cpu_port_ethtool_restore(dst->ds[0]);
+       dsa_cpu_port_ethtool_restore(dst->cpu_switch);
 
        dev_put(dst->master_netdev);
 }
index 020e072b4299ce540bd3c5d581c010257d6b225e..866222a8f9bf56933acebd8b2f0c44d22091fbae 100644 (file)
@@ -377,8 +377,8 @@ static int dsa_dst_apply(struct dsa_switch_tree *dst)
                        return err;
        }
 
-       if (dst->ds[0]) {
-               err = dsa_cpu_port_ethtool_setup(dst->ds[0]);
+       if (dst->cpu_switch) {
+               err = dsa_cpu_port_ethtool_setup(dst->cpu_switch);
                if (err)
                        return err;
        }
@@ -418,8 +418,8 @@ static void dsa_dst_unapply(struct dsa_switch_tree *dst)
                dsa_ds_unapply(dst, ds);
        }
 
-       if (dst->ds[0])
-               dsa_cpu_port_ethtool_restore(dst->ds[0]);
+       if (dst->cpu_switch)
+               dsa_cpu_port_ethtool_restore(dst->cpu_switch);
 
        pr_info("DSA: tree %d unapplied\n", dst->tree);
        dst->applied = false;
index 0cdcaf5269873cea2bc2923d385935e470b6808e..b8e58689a9a193a26957dd42d19bcc4d5425df13 100644 (file)
@@ -781,7 +781,7 @@ static void dsa_cpu_port_get_ethtool_stats(struct net_device *dev,
                                           uint64_t *data)
 {
        struct dsa_switch_tree *dst = dev->dsa_ptr;
-       struct dsa_switch *ds = dst->ds[0];
+       struct dsa_switch *ds = dst->cpu_switch;
        s8 cpu_port = dst->cpu_port;
        int count = 0;
 
@@ -798,7 +798,7 @@ static void dsa_cpu_port_get_ethtool_stats(struct net_device *dev,
 static int dsa_cpu_port_get_sset_count(struct net_device *dev, int sset)
 {
        struct dsa_switch_tree *dst = dev->dsa_ptr;
-       struct dsa_switch *ds = dst->ds[0];
+       struct dsa_switch *ds = dst->cpu_switch;
        int count = 0;
 
        if (dst->master_ethtool_ops.get_sset_count)
@@ -814,7 +814,7 @@ static void dsa_cpu_port_get_strings(struct net_device *dev,
                                     uint32_t stringset, uint8_t *data)
 {
        struct dsa_switch_tree *dst = dev->dsa_ptr;
-       struct dsa_switch *ds = dst->ds[0];
+       struct dsa_switch *ds = dst->cpu_switch;
        s8 cpu_port = dst->cpu_port;
        int len = ETH_GSTRING_LEN;
        int mcount = 0, count;
index 21bffde6e4bf1043c65eeef86f206c592e987eb7..af82927674e0072735bd1e3c2e695186b7012b23 100644 (file)
@@ -102,7 +102,7 @@ static int brcm_tag_rcv(struct sk_buff *skb, struct net_device *dev,
        if (unlikely(dst == NULL))
                goto out_drop;
 
-       ds = dst->ds[0];
+       ds = dst->cpu_switch;
 
        skb = skb_unshare(skb, GFP_ATOMIC);
        if (skb == NULL)
index 0c90cacee7aa7fe3fd309f0e693999215da3cc28..736ca8e8c31e0612bb235034ba749710591bfe8e 100644 (file)
@@ -104,7 +104,7 @@ static int qca_tag_rcv(struct sk_buff *skb, struct net_device *dev,
        /* This protocol doesn't support cascading multiple switches so it's
         * safe to assume the switch is first in the tree
         */
-       ds = dst->ds[0];
+       ds = dst->cpu_switch;
        if (!ds)
                goto out_drop;
 
index 5e3903eb1afa644b8b8861e60e112957346e5104..271128a2dc64bde8493378738cb33e16d1ef253c 100644 (file)
@@ -67,7 +67,7 @@ static int trailer_rcv(struct sk_buff *skb, struct net_device *dev,
 
        if (unlikely(dst == NULL))
                goto out_drop;
-       ds = dst->ds[0];
+       ds = dst->cpu_switch;
 
        skb = skb_unshare(skb, GFP_ATOMIC);
        if (skb == NULL)