mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 01:28:59 +00:00
327b6dbd98
Backport qca8k mdio improvement patch merged upstream, where we use eth packet when available to send mdio commands. This should improve speed and cause less load on the CPU. Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
97 lines
2.9 KiB
Diff
97 lines
2.9 KiB
Diff
From a1ff94c2973c43bc1e2677ac63ebb15b1d1ff846 Mon Sep 17 00:00:00 2001
|
|
From: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
Date: Thu, 6 Jan 2022 01:11:14 +0200
|
|
Subject: [PATCH 3/6] net: dsa: stop updating master MTU from master.c
|
|
|
|
At present there are two paths for changing the MTU of the DSA master.
|
|
|
|
The first is:
|
|
|
|
dsa_tree_setup
|
|
-> dsa_tree_setup_ports
|
|
-> dsa_port_setup
|
|
-> dsa_slave_create
|
|
-> dsa_slave_change_mtu
|
|
-> dev_set_mtu(master)
|
|
|
|
The second is:
|
|
|
|
dsa_tree_setup
|
|
-> dsa_tree_setup_master
|
|
-> dsa_master_setup
|
|
-> dev_set_mtu(dev)
|
|
|
|
So the dev_set_mtu() call from dsa_master_setup() has been effectively
|
|
superseded by the dsa_slave_change_mtu(slave_dev, ETH_DATA_LEN) that is
|
|
done from dsa_slave_create() for each user port. The later function also
|
|
updates the master MTU according to the largest user port MTU from the
|
|
tree. Therefore, updating the master MTU through a separate code path
|
|
isn't needed.
|
|
|
|
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
net/dsa/master.c | 25 +------------------------
|
|
1 file changed, 1 insertion(+), 24 deletions(-)
|
|
|
|
diff --git a/net/dsa/master.c b/net/dsa/master.c
|
|
index e8e19857621b..f4efb244f91d 100644
|
|
--- a/net/dsa/master.c
|
|
+++ b/net/dsa/master.c
|
|
@@ -330,28 +330,13 @@ static const struct attribute_group dsa_group = {
|
|
.attrs = dsa_slave_attrs,
|
|
};
|
|
|
|
-static void dsa_master_reset_mtu(struct net_device *dev)
|
|
-{
|
|
- int err;
|
|
-
|
|
- rtnl_lock();
|
|
- err = dev_set_mtu(dev, ETH_DATA_LEN);
|
|
- if (err)
|
|
- netdev_dbg(dev,
|
|
- "Unable to reset MTU to exclude DSA overheads\n");
|
|
- rtnl_unlock();
|
|
-}
|
|
-
|
|
static struct lock_class_key dsa_master_addr_list_lock_key;
|
|
|
|
int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp)
|
|
{
|
|
- const struct dsa_device_ops *tag_ops = cpu_dp->tag_ops;
|
|
struct dsa_switch *ds = cpu_dp->ds;
|
|
struct device_link *consumer_link;
|
|
- int mtu, ret;
|
|
-
|
|
- mtu = ETH_DATA_LEN + dsa_tag_protocol_overhead(tag_ops);
|
|
+ int ret;
|
|
|
|
/* The DSA master must use SET_NETDEV_DEV for this to work. */
|
|
consumer_link = device_link_add(ds->dev, dev->dev.parent,
|
|
@@ -361,13 +346,6 @@ int dsa_master_setup(struct net_device *dev, struct dsa_port *cpu_dp)
|
|
"Failed to create a device link to DSA switch %s\n",
|
|
dev_name(ds->dev));
|
|
|
|
- rtnl_lock();
|
|
- ret = dev_set_mtu(dev, mtu);
|
|
- rtnl_unlock();
|
|
- if (ret)
|
|
- netdev_warn(dev, "error %d setting MTU to %d to include DSA overhead\n",
|
|
- ret, mtu);
|
|
-
|
|
/* If we use a tagging format that doesn't have an ethertype
|
|
* field, make sure that all packets from this point on get
|
|
* sent to the tag format's receive function.
|
|
@@ -405,7 +383,6 @@ void dsa_master_teardown(struct net_device *dev)
|
|
sysfs_remove_group(&dev->dev.kobj, &dsa_group);
|
|
dsa_netdev_ops_set(dev, NULL);
|
|
dsa_master_ethtool_teardown(dev);
|
|
- dsa_master_reset_mtu(dev);
|
|
dsa_master_set_promiscuity(dev, -1);
|
|
|
|
dev->dsa_ptr = NULL;
|
|
--
|
|
2.34.1
|
|
|