Thread (12 messages) read the whole thread 12 messages, 4 authors, 2021-10-06

Re: [PATCH net-next 3/4] device property: add a helper for loading netdev->dev_addr

From: Jakub Kicinski <kuba@kernel.org>
Date: 2021-10-06 12:59:29
Also in: netdev

On Wed, 6 Oct 2021 10:43:13 +0300 Heikki Krogerus wrote:
On Tue, Oct 05, 2021 at 08:53:20AM -0700, Jakub Kicinski wrote:
quoted
Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. To maintain netdev->dev_addr in this tree we need to make all
the writes to it got through appropriate helpers.

There is a handful of drivers which pass netdev->dev_addr as
the destination buffer to device_get_mac_address(). Add a helper
which takes a dev pointer instead, so it can call an appropriate
helper.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 drivers/base/property.c  | 20 ++++++++++++++++++++
 include/linux/property.h |  2 ++
 2 files changed, 22 insertions(+)
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 453918eb7390..1c8d4676addc 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -997,6 +997,26 @@ void *device_get_mac_address(struct device *dev, char *addr, int alen)
 }
 EXPORT_SYMBOL(device_get_mac_address);
 
+/**
+ * device_get_ethdev_addr - Set netdev's MAC address from a given device
+ * @dev:	Pointer to the device
+ * @netdev:	Pointer to netdev to write the address to
+ *
+ * Wrapper around device_get_mac_address() which writes the address
+ * directly to netdev->dev_addr.
+ */
+void *device_get_ethdev_addr(struct device *dev, struct net_device *netdev)
+{
+	u8 addr[ETH_ALEN];
+	void *ret;
+
+	ret = device_get_mac_address(dev, addr, ETH_ALEN);
+	if (ret)
+		eth_hw_addr_set(netdev, addr);
+	return ret;
+}
+EXPORT_SYMBOL(device_get_ethdev_addr);  
Is there some reason why can't this be in net/ethernet/eth.c?

I would really prefer that we don't add any more subsystem specific
functions into this file (drivers/base/property.c).
Sure.
Shouldn't actually fwnode_get_mac_addr() and fwnode_get_mac_address()
be moved to net/ethernet/eth.c as well?
Fine by me, there's already a handful of such helpers there. 

I'll add the refactoring I posted as a RFC to the series as well:

https://lore.kernel.org/all/20211006022444.3155482-1-kuba@kernel.org/ (local)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help