netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2)
@ 2021-10-18 14:29 Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 01/12] ethernet: mv643xx: use eth_hw_addr_set() Jakub Kicinski
                   ` (12 more replies)
  0 siblings, 13 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski

Manual conversions of Ethernet drivers writing directly
to netdev->dev_addr (part 2 out of 3).

Jakub Kicinski (12):
  ethernet: mv643xx: use eth_hw_addr_set()
  ethernet: sky2/skge: use eth_hw_addr_set()
  ethernet: lpc: use eth_hw_addr_set()
  ethernet: netxen: use eth_hw_addr_set()
  ethernet: r8169: use eth_hw_addr_set()
  ethernet: renesas: use eth_hw_addr_set()
  ethernet: rocker: use eth_hw_addr_set()
  ethernet: sxgbe: use eth_hw_addr_set()
  ethernet: sis190: use eth_hw_addr_set()
  ethernet: sis900: use eth_hw_addr_set()
  ethernet: smc91x: use eth_hw_addr_set()
  ethernet: smsc: use eth_hw_addr_set()

 drivers/net/ethernet/marvell/mv643xx_eth.c     | 10 +++++++---
 drivers/net/ethernet/marvell/skge.c            |  4 +++-
 drivers/net/ethernet/marvell/sky2.c            |  9 ++++++---
 drivers/net/ethernet/nxp/lpc_eth.c             |  4 +++-
 .../ethernet/qlogic/netxen/netxen_nic_main.c   |  4 +++-
 drivers/net/ethernet/realtek/r8169_main.c      |  3 ++-
 drivers/net/ethernet/renesas/ravb_main.c       | 16 +++++++++-------
 drivers/net/ethernet/renesas/sh_eth.c          | 16 +++++++++-------
 drivers/net/ethernet/rocker/rocker_main.c      |  8 +++++---
 .../net/ethernet/samsung/sxgbe/sxgbe_main.c    |  9 ++++++---
 drivers/net/ethernet/sis/sis190.c              |  4 +++-
 drivers/net/ethernet/sis/sis900.c              |  4 +++-
 drivers/net/ethernet/smsc/smc911x.c            |  4 +++-
 drivers/net/ethernet/smsc/smc91x.c             |  4 +++-
 drivers/net/ethernet/smsc/smsc911x.c           | 16 +++++++++-------
 drivers/net/ethernet/smsc/smsc9420.c           | 18 ++++++++++--------
 16 files changed, 84 insertions(+), 49 deletions(-)

-- 
2.31.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH net-next 01/12] ethernet: mv643xx: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 02/12] ethernet: sky2/skge: " Jakub Kicinski
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, sebastian.hesselbarth

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: sebastian.hesselbarth@gmail.com
---
 drivers/net/ethernet/marvell/mv643xx_eth.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/marvell/mv643xx_eth.c b/drivers/net/ethernet/marvell/mv643xx_eth.c
index a63d9a5c8059..bb14fa2241a3 100644
--- a/drivers/net/ethernet/marvell/mv643xx_eth.c
+++ b/drivers/net/ethernet/marvell/mv643xx_eth.c
@@ -2925,10 +2925,14 @@ static void set_params(struct mv643xx_eth_private *mp,
 	struct net_device *dev = mp->dev;
 	unsigned int tx_ring_size;
 
-	if (is_valid_ether_addr(pd->mac_addr))
+	if (is_valid_ether_addr(pd->mac_addr)) {
 		eth_hw_addr_set(dev, pd->mac_addr);
-	else
-		uc_addr_get(mp, dev->dev_addr);
+	} else {
+		u8 addr[ETH_ALEN];
+
+		uc_addr_get(mp, addr);
+		eth_hw_addr_set(dev, addr);
+	}
 
 	mp->rx_ring_size = DEFAULT_RX_QUEUE_SIZE;
 	if (pd->rx_queue_size)
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 02/12] ethernet: sky2/skge: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 01/12] ethernet: mv643xx: use eth_hw_addr_set() Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 17:01   ` Stephen Hemminger
  2021-10-18 14:29 ` [PATCH net-next 03/12] ethernet: lpc: " Jakub Kicinski
                   ` (10 subsequent siblings)
  12 siblings, 1 reply; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, mlindner, stephen

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: mlindner@marvell.com
CC: stephen@networkplumber.org
---
 drivers/net/ethernet/marvell/skge.c | 4 +++-
 drivers/net/ethernet/marvell/sky2.c | 9 ++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c
index ac48dcca268c..0c864e5bf0a6 100644
--- a/drivers/net/ethernet/marvell/skge.c
+++ b/drivers/net/ethernet/marvell/skge.c
@@ -3810,6 +3810,7 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
 {
 	struct skge_port *skge;
 	struct net_device *dev = alloc_etherdev(sizeof(*skge));
+	u8 addr[ETH_ALEN];
 
 	if (!dev)
 		return NULL;
@@ -3862,7 +3863,8 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port,
 	}
 
 	/* read the mac address */
-	memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port*8, ETH_ALEN);
+	memcpy_fromio(addr, hw->regs + B2_MAC_1 + port*8, ETH_ALEN);
+	eth_hw_addr_set(dev, addr);
 
 	return dev;
 }
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
index 0da18b3f1c01..5abb55191e8e 100644
--- a/drivers/net/ethernet/marvell/sky2.c
+++ b/drivers/net/ethernet/marvell/sky2.c
@@ -4721,9 +4721,12 @@ static struct net_device *sky2_init_netdev(struct sky2_hw *hw, unsigned port,
 	 * 2) from internal registers set by bootloader
 	 */
 	ret = of_get_ethdev_address(hw->pdev->dev.of_node, dev);
-	if (ret)
-		memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8,
-			      ETH_ALEN);
+	if (ret) {
+		u8 addr[ETH_ALEN];
+
+		memcpy_fromio(addr, hw->regs + B2_MAC_1 + port * 8, ETH_ALEN);
+		eth_hw_addr_set(dev, addr);
+	}
 
 	/* if the address is invalid, use a random value */
 	if (!is_valid_ether_addr(dev->dev_addr)) {
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 03/12] ethernet: lpc: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 01/12] ethernet: mv643xx: use eth_hw_addr_set() Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 02/12] ethernet: sky2/skge: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 04/12] ethernet: netxen: " Jakub Kicinski
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, vz, linux-arm-kernel

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: vz@mleia.com
CC: linux-arm-kernel@lists.infradead.org
---
 drivers/net/ethernet/nxp/lpc_eth.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
index fbfbf94e0377..a63cc295b979 100644
--- a/drivers/net/ethernet/nxp/lpc_eth.c
+++ b/drivers/net/ethernet/nxp/lpc_eth.c
@@ -1232,6 +1232,7 @@ static int lpc_eth_drv_probe(struct platform_device *pdev)
 	struct net_device *ndev;
 	dma_addr_t dma_handle;
 	struct resource *res;
+	u8 addr[ETH_ALEN];
 	int irq, ret;
 
 	/* Setup network interface for RMII or MII mode */
@@ -1347,7 +1348,8 @@ static int lpc_eth_drv_probe(struct platform_device *pdev)
 	pldat->phy_node = of_parse_phandle(np, "phy-handle", 0);
 
 	/* Get MAC address from current HW setting (POR state is all zeros) */
-	__lpc_get_mac(pldat, ndev->dev_addr);
+	__lpc_get_mac(pldat, addr);
+	eth_hw_addr_set(ndev, addr);
 
 	if (!is_valid_ether_addr(ndev->dev_addr)) {
 		of_get_ethdev_address(np, ndev);
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 04/12] ethernet: netxen: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (2 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 03/12] ethernet: lpc: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 05/12] ethernet: r8169: " Jakub Kicinski
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, manishc, rahulv, GR-Linux-NIC-Dev

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.

Invert the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: manishc@marvell.com
CC: rahulv@marvell.com
CC: GR-Linux-NIC-Dev@marvell.com
---
 drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
index b4e094e6f58c..4cfab4434e80 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
@@ -463,6 +463,7 @@ netxen_read_mac_addr(struct netxen_adapter *adapter)
 	u64 mac_addr;
 	struct net_device *netdev = adapter->netdev;
 	struct pci_dev *pdev = adapter->pdev;
+	u8 addr[ETH_ALEN];
 
 	if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
 		if (netxen_p3_get_mac_addr(adapter, &mac_addr) != 0)
@@ -474,7 +475,8 @@ netxen_read_mac_addr(struct netxen_adapter *adapter)
 
 	p = (unsigned char *)&mac_addr;
 	for (i = 0; i < 6; i++)
-		netdev->dev_addr[i] = *(p + 5 - i);
+		addr[i] = *(p + 5 - i);
+	eth_hw_addr_set(netdev, addr);
 
 	memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 05/12] ethernet: r8169: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (3 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 04/12] ethernet: netxen: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 06/12] ethernet: renesas: " Jakub Kicinski
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, hkallweit1, nic_swsd

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: hkallweit1@gmail.com
CC: nic_swsd@realtek.com
---
 drivers/net/ethernet/realtek/r8169_main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index 0199914440ab..ee6c9c842012 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -5217,7 +5217,7 @@ static int rtl_get_ether_clk(struct rtl8169_private *tp)
 static void rtl_init_mac_address(struct rtl8169_private *tp)
 {
 	struct net_device *dev = tp->dev;
-	u8 *mac_addr = dev->dev_addr;
+	u8 mac_addr[ETH_ALEN];
 	int rc;
 
 	rc = eth_platform_get_mac_address(tp_to_dev(tp), mac_addr);
@@ -5235,6 +5235,7 @@ static void rtl_init_mac_address(struct rtl8169_private *tp)
 	eth_hw_addr_random(dev);
 	dev_warn(tp_to_dev(tp), "can't read MAC address, setting random one\n");
 done:
+	eth_hw_addr_set(dev, mac_addr);
 	rtl_rar_set(tp, mac_addr);
 }
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 06/12] ethernet: renesas: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (4 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 05/12] ethernet: r8169: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 07/12] ethernet: rocker: " Jakub Kicinski
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem
  Cc: netdev, Jakub Kicinski, s.shtylyov, biju.das.jz,
	prabhakar.mahadev-lad.rj

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.

Break the address up into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: s.shtylyov@omp.ru
CC: biju.das.jz@bp.renesas.com
CC: prabhakar.mahadev-lad.rj@bp.renesas.com
---
 drivers/net/ethernet/renesas/ravb_main.c | 16 +++++++++-------
 drivers/net/ethernet/renesas/sh_eth.c    | 16 +++++++++-------
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index e5243cc87a19..b4c597f4040c 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -136,13 +136,15 @@ static void ravb_read_mac_address(struct device_node *np,
 	if (ret) {
 		u32 mahr = ravb_read(ndev, MAHR);
 		u32 malr = ravb_read(ndev, MALR);
-
-		ndev->dev_addr[0] = (mahr >> 24) & 0xFF;
-		ndev->dev_addr[1] = (mahr >> 16) & 0xFF;
-		ndev->dev_addr[2] = (mahr >>  8) & 0xFF;
-		ndev->dev_addr[3] = (mahr >>  0) & 0xFF;
-		ndev->dev_addr[4] = (malr >>  8) & 0xFF;
-		ndev->dev_addr[5] = (malr >>  0) & 0xFF;
+		u8 addr[ETH_ALEN];
+
+		addr[0] = (mahr >> 24) & 0xFF;
+		addr[1] = (mahr >> 16) & 0xFF;
+		addr[2] = (mahr >>  8) & 0xFF;
+		addr[3] = (mahr >>  0) & 0xFF;
+		addr[4] = (malr >>  8) & 0xFF;
+		addr[5] = (malr >>  0) & 0xFF;
+		eth_hw_addr_set(ndev, addr);
 	}
 }
 
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index 0a7d23df45f2..a3fbb2221c9a 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -1157,13 +1157,15 @@ static void read_mac_address(struct net_device *ndev, unsigned char *mac)
 	} else {
 		u32 mahr = sh_eth_read(ndev, MAHR);
 		u32 malr = sh_eth_read(ndev, MALR);
-
-		ndev->dev_addr[0] = (mahr >> 24) & 0xFF;
-		ndev->dev_addr[1] = (mahr >> 16) & 0xFF;
-		ndev->dev_addr[2] = (mahr >>  8) & 0xFF;
-		ndev->dev_addr[3] = (mahr >>  0) & 0xFF;
-		ndev->dev_addr[4] = (malr >>  8) & 0xFF;
-		ndev->dev_addr[5] = (malr >>  0) & 0xFF;
+		u8 addr[ETH_ALEN];
+
+		addr[0] = (mahr >> 24) & 0xFF;
+		addr[1] = (mahr >> 16) & 0xFF;
+		addr[2] = (mahr >>  8) & 0xFF;
+		addr[3] = (mahr >>  0) & 0xFF;
+		addr[4] = (malr >>  8) & 0xFF;
+		addr[5] = (malr >>  0) & 0xFF;
+		eth_hw_addr_set(ndev, addr);
 	}
 }
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 07/12] ethernet: rocker: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (5 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 06/12] ethernet: renesas: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 08/12] ethernet: sxgbe: " Jakub Kicinski
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, jiri

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: jiri@resnulli.us
---
 drivers/net/ethernet/rocker/rocker_main.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/rocker/rocker_main.c b/drivers/net/ethernet/rocker/rocker_main.c
index f28c0c36b606..ba4062881eed 100644
--- a/drivers/net/ethernet/rocker/rocker_main.c
+++ b/drivers/net/ethernet/rocker/rocker_main.c
@@ -2545,11 +2545,13 @@ static void rocker_port_dev_addr_init(struct rocker_port *rocker_port)
 {
 	const struct rocker *rocker = rocker_port->rocker;
 	const struct pci_dev *pdev = rocker->pdev;
+	u8 addr[ETH_ALEN];
 	int err;
 
-	err = rocker_cmd_get_port_settings_macaddr(rocker_port,
-						   rocker_port->dev->dev_addr);
-	if (err) {
+	err = rocker_cmd_get_port_settings_macaddr(rocker_port, addr);
+	if (!err) {
+		eth_hw_addr_set(rocker_port->dev, addr);
+	} else {
 		dev_warn(&pdev->dev, "failed to get mac address, using random\n");
 		eth_hw_addr_random(rocker_port->dev);
 	}
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 08/12] ethernet: sxgbe: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (6 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 07/12] ethernet: rocker: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 09/12] ethernet: sis190: " Jakub Kicinski
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, bh74.an

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: bh74.an@samsung.com
---
 drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
index 6781aa636d58..32161a56726c 100644
--- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
+++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
@@ -931,10 +931,13 @@ static int sxgbe_get_hw_features(struct sxgbe_priv_data * const priv)
 static void sxgbe_check_ether_addr(struct sxgbe_priv_data *priv)
 {
 	if (!is_valid_ether_addr(priv->dev->dev_addr)) {
+		u8 addr[ETH_ALEN];
+
 		priv->hw->mac->get_umac_addr((void __iomem *)
-					     priv->ioaddr,
-					     priv->dev->dev_addr, 0);
-		if (!is_valid_ether_addr(priv->dev->dev_addr))
+					     priv->ioaddr, addr, 0);
+		if (is_valid_ether_addr(addr))
+			eth_hw_addr_set(priv->dev, addr);
+		else
 			eth_hw_addr_random(priv->dev);
 	}
 	dev_info(priv->device, "device MAC address %pM\n",
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 09/12] ethernet: sis190: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (7 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 08/12] ethernet: sxgbe: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 10/12] ethernet: sis900: " Jakub Kicinski
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, romieu

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: romieu@fr.zoreil.com
---
 drivers/net/ethernet/sis/sis190.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/sis/sis190.c b/drivers/net/ethernet/sis/sis190.c
index 5e66e3f3aafc..216bb2d34d7c 100644
--- a/drivers/net/ethernet/sis/sis190.c
+++ b/drivers/net/ethernet/sis/sis190.c
@@ -1631,6 +1631,7 @@ static int sis190_get_mac_addr_from_apc(struct pci_dev *pdev,
 	static const u16 ids[] = { 0x0965, 0x0966, 0x0968 };
 	struct sis190_private *tp = netdev_priv(dev);
 	struct pci_dev *isa_bridge;
+	u8 addr[ETH_ALEN];
 	u8 reg, tmp8;
 	unsigned int i;
 
@@ -1659,8 +1660,9 @@ static int sis190_get_mac_addr_from_apc(struct pci_dev *pdev,
 
         for (i = 0; i < ETH_ALEN; i++) {
                 outb(0x9 + i, 0x78);
-                dev->dev_addr[i] = inb(0x79);
+                addr[i] = inb(0x79);
         }
+	eth_hw_addr_set(dev, addr);
 
 	outb(0x12, 0x78);
 	reg = inb(0x79);
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 10/12] ethernet: sis900: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (8 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 09/12] ethernet: sis190: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 11/12] ethernet: smc91x: " Jakub Kicinski
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, venza

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: venza@brownhat.org
---
 drivers/net/ethernet/sis/sis900.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/sis/sis900.c b/drivers/net/ethernet/sis/sis900.c
index 3f5717a1874f..cc2d907c4c4b 100644
--- a/drivers/net/ethernet/sis/sis900.c
+++ b/drivers/net/ethernet/sis/sis900.c
@@ -292,6 +292,7 @@ static int sis630e_get_mac_addr(struct pci_dev *pci_dev,
 				struct net_device *net_dev)
 {
 	struct pci_dev *isa_bridge = NULL;
+	u8 addr[ETH_ALEN];
 	u8 reg;
 	int i;
 
@@ -308,8 +309,9 @@ static int sis630e_get_mac_addr(struct pci_dev *pci_dev,
 
 	for (i = 0; i < 6; i++) {
 		outb(0x09 + i, 0x70);
-		((u8 *)(net_dev->dev_addr))[i] = inb(0x71);
+		addr[i] = inb(0x71);
 	}
+	eth_hw_addr_set(net_dev, addr);
 
 	pci_write_config_byte(isa_bridge, 0x48, reg & ~0x40);
 	pci_dev_put(isa_bridge);
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 11/12] ethernet: smc91x: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (9 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 10/12] ethernet: sis900: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-18 14:29 ` [PATCH net-next 12/12] ethernet: smsc: " Jakub Kicinski
  2021-10-19 11:50 ` [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) patchwork-bot+netdevbpf
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, nico

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.

Read the address into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: nico@fluxnic.net
---
 drivers/net/ethernet/smsc/smc911x.c | 4 +++-
 drivers/net/ethernet/smsc/smc91x.c  | 4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/smsc/smc911x.c b/drivers/net/ethernet/smsc/smc911x.c
index b008b4e8a2a5..89381f796985 100644
--- a/drivers/net/ethernet/smsc/smc911x.c
+++ b/drivers/net/ethernet/smsc/smc911x.c
@@ -1788,6 +1788,7 @@ static int smc911x_probe(struct net_device *dev)
 	struct dma_slave_config	config;
 	dma_cap_mask_t mask;
 #endif
+	u8 addr[ETH_ALEN];
 
 	DBG(SMC_DEBUG_FUNC, dev, "--> %s\n", __func__);
 
@@ -1892,7 +1893,8 @@ static int smc911x_probe(struct net_device *dev)
 	spin_lock_init(&lp->lock);
 
 	/* Get the MAC address */
-	SMC_GET_MAC_ADDR(lp, dev->dev_addr);
+	SMC_GET_MAC_ADDR(lp, addr);
+	eth_hw_addr_set(dev, addr);
 
 	/* now, reset the chip, and put it into a known state */
 	smc911x_reset(dev);
diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c
index 813ea941b91a..a31c159e96ea 100644
--- a/drivers/net/ethernet/smsc/smc91x.c
+++ b/drivers/net/ethernet/smsc/smc91x.c
@@ -1851,6 +1851,7 @@ static int smc_probe(struct net_device *dev, void __iomem *ioaddr,
 	int retval;
 	unsigned int val, revision_register;
 	const char *version_string;
+	u8 addr[ETH_ALEN];
 
 	DBG(2, dev, "%s: %s\n", CARDNAME, __func__);
 
@@ -1922,7 +1923,8 @@ static int smc_probe(struct net_device *dev, void __iomem *ioaddr,
 
 	/* Get the MAC address */
 	SMC_SELECT_BANK(lp, 1);
-	SMC_GET_MAC_ADDR(lp, dev->dev_addr);
+	SMC_GET_MAC_ADDR(lp, addr);
+	eth_hw_addr_set(dev, addr);
 
 	/* now, reset the chip, and put it into a known state */
 	smc_reset(dev);
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH net-next 12/12] ethernet: smsc: use eth_hw_addr_set()
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (10 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 11/12] ethernet: smc91x: " Jakub Kicinski
@ 2021-10-18 14:29 ` Jakub Kicinski
  2021-10-19 11:50 ` [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) patchwork-bot+netdevbpf
  12 siblings, 0 replies; 15+ messages in thread
From: Jakub Kicinski @ 2021-10-18 14:29 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, steve.glendinning

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.

Break the address up into an array on the stack, then call
eth_hw_addr_set().

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: steve.glendinning@shawell.net
---
 drivers/net/ethernet/smsc/smsc911x.c | 16 +++++++++-------
 drivers/net/ethernet/smsc/smsc9420.c | 18 ++++++++++--------
 2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
index 73bcc6f2bb6e..7a50ba00f8ae 100644
--- a/drivers/net/ethernet/smsc/smsc911x.c
+++ b/drivers/net/ethernet/smsc/smsc911x.c
@@ -2162,13 +2162,15 @@ static void smsc911x_read_mac_address(struct net_device *dev)
 	struct smsc911x_data *pdata = netdev_priv(dev);
 	u32 mac_high16 = smsc911x_mac_read(pdata, ADDRH);
 	u32 mac_low32 = smsc911x_mac_read(pdata, ADDRL);
-
-	dev->dev_addr[0] = (u8)(mac_low32);
-	dev->dev_addr[1] = (u8)(mac_low32 >> 8);
-	dev->dev_addr[2] = (u8)(mac_low32 >> 16);
-	dev->dev_addr[3] = (u8)(mac_low32 >> 24);
-	dev->dev_addr[4] = (u8)(mac_high16);
-	dev->dev_addr[5] = (u8)(mac_high16 >> 8);
+	u8 addr[ETH_ALEN];
+
+	addr[0] = (u8)(mac_low32);
+	addr[1] = (u8)(mac_low32 >> 8);
+	addr[2] = (u8)(mac_low32 >> 16);
+	addr[3] = (u8)(mac_low32 >> 24);
+	addr[4] = (u8)(mac_high16);
+	addr[5] = (u8)(mac_high16 >> 8);
+	eth_hw_addr_set(dev, addr);
 }
 
 /* Initializing private device structures, only called from probe */
diff --git a/drivers/net/ethernet/smsc/smsc9420.c b/drivers/net/ethernet/smsc/smsc9420.c
index d207c0b463ab..d937af18973e 100644
--- a/drivers/net/ethernet/smsc/smsc9420.c
+++ b/drivers/net/ethernet/smsc/smsc9420.c
@@ -416,6 +416,7 @@ static void smsc9420_set_mac_address(struct net_device *dev)
 static void smsc9420_check_mac_address(struct net_device *dev)
 {
 	struct smsc9420_pdata *pd = netdev_priv(dev);
+	u8 addr[ETH_ALEN];
 
 	/* Check if mac address has been specified when bringing interface up */
 	if (is_valid_ether_addr(dev->dev_addr)) {
@@ -427,15 +428,16 @@ static void smsc9420_check_mac_address(struct net_device *dev)
 		 * it will already have been set */
 		u32 mac_high16 = smsc9420_reg_read(pd, ADDRH);
 		u32 mac_low32 = smsc9420_reg_read(pd, ADDRL);
-		dev->dev_addr[0] = (u8)(mac_low32);
-		dev->dev_addr[1] = (u8)(mac_low32 >> 8);
-		dev->dev_addr[2] = (u8)(mac_low32 >> 16);
-		dev->dev_addr[3] = (u8)(mac_low32 >> 24);
-		dev->dev_addr[4] = (u8)(mac_high16);
-		dev->dev_addr[5] = (u8)(mac_high16 >> 8);
-
-		if (is_valid_ether_addr(dev->dev_addr)) {
+		addr[0] = (u8)(mac_low32);
+		addr[1] = (u8)(mac_low32 >> 8);
+		addr[2] = (u8)(mac_low32 >> 16);
+		addr[3] = (u8)(mac_low32 >> 24);
+		addr[4] = (u8)(mac_high16);
+		addr[5] = (u8)(mac_high16 >> 8);
+
+		if (is_valid_ether_addr(addr)) {
 			/* eeprom values are valid  so use them */
+			eth_hw_addr_set(dev, addr);
 			netif_dbg(pd, probe, pd->dev,
 				  "Mac Address is read from EEPROM\n");
 		} else {
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH net-next 02/12] ethernet: sky2/skge: use eth_hw_addr_set()
  2021-10-18 14:29 ` [PATCH net-next 02/12] ethernet: sky2/skge: " Jakub Kicinski
@ 2021-10-18 17:01   ` Stephen Hemminger
  0 siblings, 0 replies; 15+ messages in thread
From: Stephen Hemminger @ 2021-10-18 17:01 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, mlindner

On Mon, 18 Oct 2021 07:29:22 -0700
Jakub Kicinski <kuba@kernel.org> wrote:

> 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.
> 
> Read the address into an array on the stack, then call
> eth_hw_addr_set().
> 
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> CC: mlindner@marvell.com
> CC: stephen@networkplumber.org

Looks ok. Don't even use any of that hardware anymore.

Acked-by: Stephen Hemminger <stephen@networkplumber.org>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2)
  2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
                   ` (11 preceding siblings ...)
  2021-10-18 14:29 ` [PATCH net-next 12/12] ethernet: smsc: " Jakub Kicinski
@ 2021-10-19 11:50 ` patchwork-bot+netdevbpf
  12 siblings, 0 replies; 15+ messages in thread
From: patchwork-bot+netdevbpf @ 2021-10-19 11:50 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev

Hello:

This series was applied to netdev/net-next.git (master)
by David S. Miller <davem@davemloft.net>:

On Mon, 18 Oct 2021 07:29:20 -0700 you wrote:
> Manual conversions of Ethernet drivers writing directly
> to netdev->dev_addr (part 2 out of 3).
> 
> Jakub Kicinski (12):
>   ethernet: mv643xx: use eth_hw_addr_set()
>   ethernet: sky2/skge: use eth_hw_addr_set()
>   ethernet: lpc: use eth_hw_addr_set()
>   ethernet: netxen: use eth_hw_addr_set()
>   ethernet: r8169: use eth_hw_addr_set()
>   ethernet: renesas: use eth_hw_addr_set()
>   ethernet: rocker: use eth_hw_addr_set()
>   ethernet: sxgbe: use eth_hw_addr_set()
>   ethernet: sis190: use eth_hw_addr_set()
>   ethernet: sis900: use eth_hw_addr_set()
>   ethernet: smc91x: use eth_hw_addr_set()
>   ethernet: smsc: use eth_hw_addr_set()
> 
> [...]

Here is the summary with links:
  - [net-next,01/12] ethernet: mv643xx: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/15c343eb0588
  - [net-next,02/12] ethernet: sky2/skge: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/4789b57af37f
  - [net-next,03/12] ethernet: lpc: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/b814d3286923
  - [net-next,04/12] ethernet: netxen: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/88e102e8777e
  - [net-next,05/12] ethernet: r8169: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/1c5d09d58748
  - [net-next,06/12] ethernet: renesas: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/0b08956cd532
  - [net-next,07/12] ethernet: rocker: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/298b0e0c5fec
  - [net-next,08/12] ethernet: sxgbe: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/15fa05bf41ab
  - [net-next,09/12] ethernet: sis190: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/f60e8b06e0cc
  - [net-next,10/12] ethernet: sis900: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/74fad215ee3d
  - [net-next,11/12] ethernet: smc91x: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/02bfb6beb695
  - [net-next,12/12] ethernet: smsc: use eth_hw_addr_set()
    https://git.kernel.org/netdev/net-next/c/f15fef4c0675

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2021-10-19 11:50 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-18 14:29 [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 01/12] ethernet: mv643xx: use eth_hw_addr_set() Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 02/12] ethernet: sky2/skge: " Jakub Kicinski
2021-10-18 17:01   ` Stephen Hemminger
2021-10-18 14:29 ` [PATCH net-next 03/12] ethernet: lpc: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 04/12] ethernet: netxen: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 05/12] ethernet: r8169: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 06/12] ethernet: renesas: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 07/12] ethernet: rocker: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 08/12] ethernet: sxgbe: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 09/12] ethernet: sis190: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 10/12] ethernet: sis900: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 11/12] ethernet: smc91x: " Jakub Kicinski
2021-10-18 14:29 ` [PATCH net-next 12/12] ethernet: smsc: " Jakub Kicinski
2021-10-19 11:50 ` [PATCH net-next 00/12] ethernet: manual netdev->dev_addr conversions (part 2) patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).