OSDN Git Service
(root)
/
sagit-ice-cold
/
kernel_xiaomi_msm8998.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net: dsa: Refactor transmit path to eliminate duplication
[sagit-ice-cold/kernel_xiaomi_msm8998.git]
/
net
/
dsa
/
slave.c
diff --git
a/net/dsa/slave.c
b/net/dsa/slave.c
index
04ffad3
..
5fc87ee
100644
(file)
--- a/
net/dsa/slave.c
+++ b/
net/dsa/slave.c
@@
-112,7
+112,7
@@
static int dsa_slave_open(struct net_device *dev)
clear_promisc:
if (dev->flags & IFF_PROMISC)
clear_promisc:
if (dev->flags & IFF_PROMISC)
- dev_set_promiscuity(master,
0
);
+ dev_set_promiscuity(master,
-1
);
clear_allmulti:
if (dev->flags & IFF_ALLMULTI)
dev_set_allmulti(master, -1);
clear_allmulti:
if (dev->flags & IFF_ALLMULTI)
dev_set_allmulti(master, -1);
@@
-421,21
+421,32
@@
static int dsa_slave_port_attr_get(struct net_device *dev,
static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct dsa_slave_priv *p = netdev_priv(dev);
static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct dsa_slave_priv *p = netdev_priv(dev);
+ struct sk_buff *nskb;
-
return p->xmit(skb, dev)
;
-}
+
dev->stats.tx_packets++
;
+ dev->stats.tx_bytes += skb->len;
-static netdev_tx_t dsa_slave_notag_xmit(struct sk_buff *skb,
- struct net_device *dev)
-{
-
struct dsa_slave_priv *p = netdev_priv(dev)
;
+ /* Transmit function may have to reallocate the original SKB */
+ nskb = p->xmit(skb, dev);
+ if (!nskb)
+
return NETDEV_TX_OK
;
- skb->dev = p->parent->dst->master_netdev;
- dev_queue_xmit(skb);
+ /* Queue the SKB for transmission on the parent interface, but
+ * do not modify its EtherType
+ */
+ nskb->dev = p->parent->dst->master_netdev;
+ dev_queue_xmit(nskb);
return NETDEV_TX_OK;
}
return NETDEV_TX_OK;
}
+static struct sk_buff *dsa_slave_notag_xmit(struct sk_buff *skb,
+ struct net_device *dev)
+{
+ /* Just return the original SKB */
+ return skb;
+}
+
/* ethtool operations *******************************************************/
static int
/* ethtool operations *******************************************************/
static int