netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/9] net: constify netdev->dev_addr
@ 2021-11-18  4:14 Jakub Kicinski
  2021-11-18  4:14 ` [PATCH net-next 1/9] net: ax88796c: don't write to netdev->dev_addr directly Jakub Kicinski
                   ` (8 more replies)
  0 siblings, 9 replies; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski

Take care of a few stragglers and make netdev->dev_addr const.

netdev->dev_addr can be held on the address tree like any other
address now.

Jakub Kicinski (9):
  net: ax88796c: don't write to netdev->dev_addr directly
  mlxsw: constify address in mlxsw_sp_port_dev_addr_set
  wilc1000: copy address before calling wilc_set_mac_address
  ipw2200: constify address in ipw_send_adapter_address
  net: constify netdev->dev_addr
  net: unexport dev_addr_init() & dev_addr_flush()
  dev_addr: add a modification check
  dev_addr_list: put the first addr on the tree
  net: kunit: add a test for dev_addr_lists

 drivers/net/ethernet/asix/ax88796c_main.c     |  18 +-
 .../net/ethernet/mellanox/mlxsw/spectrum.c    |   2 +-
 drivers/net/wireless/intel/ipw2x00/ipw2200.c  |   2 +-
 .../net/wireless/microchip/wilc1000/netdev.c  |   6 +-
 include/linux/netdevice.h                     |  17 +-
 net/Kconfig                                   |   5 +
 net/core/Makefile                             |   2 +
 net/core/dev.c                                |   1 +
 net/core/dev_addr_lists.c                     |  93 ++++---
 net/core/dev_addr_lists_test.c                | 234 ++++++++++++++++++
 10 files changed, 328 insertions(+), 52 deletions(-)
 create mode 100644 net/core/dev_addr_lists_test.c

-- 
2.31.1


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

* [PATCH net-next 1/9] net: ax88796c: don't write to netdev->dev_addr directly
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
@ 2021-11-18  4:14 ` Jakub Kicinski
       [not found]   ` <CGME20211118121026eucas1p2b113b6be5644d9c2038519feecba51f5@eucas1p2.samsung.com>
  2021-11-18  4:14 ` [PATCH net-next 2/9] mlxsw: constify address in mlxsw_sp_port_dev_addr_set Jakub Kicinski
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, l.stelmach

The future is here, convert the new driver as we are about
to make netdev->dev_addr const.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: l.stelmach@samsung.com
---
 drivers/net/ethernet/asix/ax88796c_main.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/asix/ax88796c_main.c b/drivers/net/ethernet/asix/ax88796c_main.c
index e230d8d0ff73..e7a9f9863258 100644
--- a/drivers/net/ethernet/asix/ax88796c_main.c
+++ b/drivers/net/ethernet/asix/ax88796c_main.c
@@ -144,12 +144,13 @@ static void ax88796c_set_mac_addr(struct net_device *ndev)
 static void ax88796c_load_mac_addr(struct net_device *ndev)
 {
 	struct ax88796c_device *ax_local = to_ax88796c_device(ndev);
+	u8 addr[ETH_ALEN];
 	u16 temp;
 
 	lockdep_assert_held(&ax_local->spi_lock);
 
 	/* Try the device tree first */
-	if (!eth_platform_get_mac_address(&ax_local->spi->dev, ndev->dev_addr) &&
+	if (!platform_get_ethdev_address(&ax_local->spi->dev, ndev) &&
 	    is_valid_ether_addr(ndev->dev_addr)) {
 		if (netif_msg_probe(ax_local))
 			dev_info(&ax_local->spi->dev,
@@ -159,18 +160,19 @@ static void ax88796c_load_mac_addr(struct net_device *ndev)
 
 	/* Read the MAC address from AX88796C */
 	temp = AX_READ(&ax_local->ax_spi, P3_MACASR0);
-	ndev->dev_addr[5] = (u8)temp;
-	ndev->dev_addr[4] = (u8)(temp >> 8);
+	addr[5] = (u8)temp;
+	addr[4] = (u8)(temp >> 8);
 
 	temp = AX_READ(&ax_local->ax_spi, P3_MACASR1);
-	ndev->dev_addr[3] = (u8)temp;
-	ndev->dev_addr[2] = (u8)(temp >> 8);
+	addr[3] = (u8)temp;
+	addr[2] = (u8)(temp >> 8);
 
 	temp = AX_READ(&ax_local->ax_spi, P3_MACASR2);
-	ndev->dev_addr[1] = (u8)temp;
-	ndev->dev_addr[0] = (u8)(temp >> 8);
+	addr[1] = (u8)temp;
+	addr[0] = (u8)(temp >> 8);
 
-	if (is_valid_ether_addr(ndev->dev_addr)) {
+	if (is_valid_ether_addr(addr)) {
+		eth_hw_addr_set(ndev, addr);
 		if (netif_msg_probe(ax_local))
 			dev_info(&ax_local->spi->dev,
 				 "MAC address read from ASIX chip\n");
-- 
2.31.1


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

* [PATCH net-next 2/9] mlxsw: constify address in mlxsw_sp_port_dev_addr_set
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
  2021-11-18  4:14 ` [PATCH net-next 1/9] net: ax88796c: don't write to netdev->dev_addr directly Jakub Kicinski
@ 2021-11-18  4:14 ` Jakub Kicinski
  2021-11-18  7:27   ` Ido Schimmel
  2021-11-18  4:14 ` [PATCH net-next 3/9] wilc1000: copy address before calling wilc_set_mac_address Jakub Kicinski
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, jiri, idosch

Argument comes from netdev->dev_addr directly, it needs a const.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: jiri@nvidia.com
CC: idosch@nvidia.com
---
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index 5925db386b1b..4ce07f9905f6 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -303,7 +303,7 @@ int mlxsw_sp_port_admin_status_set(struct mlxsw_sp_port *mlxsw_sp_port,
 }
 
 static int mlxsw_sp_port_dev_addr_set(struct mlxsw_sp_port *mlxsw_sp_port,
-				      unsigned char *addr)
+				      const unsigned char *addr)
 {
 	struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
 	char ppad_pl[MLXSW_REG_PPAD_LEN];
-- 
2.31.1


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

* [PATCH net-next 3/9] wilc1000: copy address before calling wilc_set_mac_address
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
  2021-11-18  4:14 ` [PATCH net-next 1/9] net: ax88796c: don't write to netdev->dev_addr directly Jakub Kicinski
  2021-11-18  4:14 ` [PATCH net-next 2/9] mlxsw: constify address in mlxsw_sp_port_dev_addr_set Jakub Kicinski
@ 2021-11-18  4:14 ` Jakub Kicinski
  2021-11-18  5:35   ` Kalle Valo
  2021-11-18  4:14 ` [PATCH net-next 4/9] ipw2200: constify address in ipw_send_adapter_address Jakub Kicinski
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, ajay.kathat, claudiu.beznea, kvalo

wilc_set_mac_address() calls IO routines which don't guarantee
the pointer won't be written to. Make a copy.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: ajay.kathat@microchip.com
CC: claudiu.beznea@microchip.com
CC: kvalo@codeaurora.org
---
 drivers/net/wireless/microchip/wilc1000/netdev.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/microchip/wilc1000/netdev.c b/drivers/net/wireless/microchip/wilc1000/netdev.c
index 690572e01a2a..4712cd7dff9f 100644
--- a/drivers/net/wireless/microchip/wilc1000/netdev.c
+++ b/drivers/net/wireless/microchip/wilc1000/netdev.c
@@ -574,6 +574,7 @@ static int wilc_mac_open(struct net_device *ndev)
 	struct wilc *wl = vif->wilc;
 	int ret = 0;
 	struct mgmt_frame_regs mgmt_regs = {};
+	u8 addr[ETH_ALEN] __aligned(2);
 
 	if (!wl || !wl->dev) {
 		netdev_err(ndev, "device not ready\n");
@@ -596,10 +597,9 @@ static int wilc_mac_open(struct net_device *ndev)
 				vif->idx);
 
 	if (is_valid_ether_addr(ndev->dev_addr)) {
-		wilc_set_mac_address(vif, ndev->dev_addr);
+		ether_addr_copy(addr, ndev->dev_addr);
+		wilc_set_mac_address(vif, addr);
 	} else {
-		u8 addr[ETH_ALEN];
-
 		wilc_get_mac_address(vif, addr);
 		eth_hw_addr_set(ndev, addr);
 	}
-- 
2.31.1


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

* [PATCH net-next 4/9] ipw2200: constify address in ipw_send_adapter_address
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
                   ` (2 preceding siblings ...)
  2021-11-18  4:14 ` [PATCH net-next 3/9] wilc1000: copy address before calling wilc_set_mac_address Jakub Kicinski
@ 2021-11-18  4:14 ` Jakub Kicinski
  2021-11-18  5:36   ` Kalle Valo
  2021-11-18  4:14 ` [PATCH net-next 5/9] net: constify netdev->dev_addr Jakub Kicinski
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski, stas.yakovlev, kvalo

Add const to the address param of ipw_send_adapter_address()
all the functions down the chain have already been changed.

Not sure how I lost this in the rebase.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: stas.yakovlev@gmail.com
CC: kvalo@codeaurora.org
---
 drivers/net/wireless/intel/ipw2x00/ipw2200.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/intel/ipw2x00/ipw2200.c b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
index 23037bfc9e4c..5727c7c00a28 100644
--- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c
@@ -2303,7 +2303,7 @@ static int ipw_send_ssid(struct ipw_priv *priv, u8 * ssid, int len)
 				ssid);
 }
 
-static int ipw_send_adapter_address(struct ipw_priv *priv, u8 * mac)
+static int ipw_send_adapter_address(struct ipw_priv *priv, const u8 * mac)
 {
 	if (!priv || !mac) {
 		IPW_ERROR("Invalid args\n");
-- 
2.31.1


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

* [PATCH net-next 5/9] net: constify netdev->dev_addr
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
                   ` (3 preceding siblings ...)
  2021-11-18  4:14 ` [PATCH net-next 4/9] ipw2200: constify address in ipw_send_adapter_address Jakub Kicinski
@ 2021-11-18  4:14 ` Jakub Kicinski
  2021-11-18  6:15   ` kernel test robot
                     ` (2 more replies)
  2021-11-18  4:14 ` [PATCH net-next 6/9] net: unexport dev_addr_init() & dev_addr_flush() Jakub Kicinski
                   ` (3 subsequent siblings)
  8 siblings, 3 replies; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski

Commit 406f42fa0d3c ("net-next: When a bond have a massive amount
of VLANs...") introduced a rbtree for faster Ethernet address look
up. We converted all users to make modifications via appropriate
helpers, make netdev->dev_addr const.

The update helpers need to upcast from the buffer to
struct netdev_hw_addr.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 include/linux/netdevice.h | 14 +++++---------
 net/core/dev_addr_lists.c | 10 ++++++++++
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 4f4a299e92de..2462195784a9 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2117,7 +2117,7 @@ struct net_device {
  * Cache lines mostly used on receive path (including eth_type_trans())
  */
 	/* Interface address info used in eth_type_trans() */
-	unsigned char		*dev_addr;
+	const unsigned char	*dev_addr;
 
 	struct netdev_rx_queue	*_rx;
 	unsigned int		num_rx_queues;
@@ -4268,10 +4268,13 @@ void __hw_addr_unsync_dev(struct netdev_hw_addr_list *list,
 void __hw_addr_init(struct netdev_hw_addr_list *list);
 
 /* Functions used for device addresses handling */
+void dev_addr_mod(struct net_device *dev, unsigned int offset,
+		  const void *addr, size_t len);
+
 static inline void
 __dev_addr_set(struct net_device *dev, const void *addr, size_t len)
 {
-	memcpy(dev->dev_addr, addr, len);
+	dev_addr_mod(dev, 0, addr, len);
 }
 
 static inline void dev_addr_set(struct net_device *dev, const u8 *addr)
@@ -4279,13 +4282,6 @@ static inline void dev_addr_set(struct net_device *dev, const u8 *addr)
 	__dev_addr_set(dev, addr, dev->addr_len);
 }
 
-static inline void
-dev_addr_mod(struct net_device *dev, unsigned int offset,
-	     const void *addr, size_t len)
-{
-	memcpy(&dev->dev_addr[offset], addr, len);
-}
-
 int dev_addr_add(struct net_device *dev, const unsigned char *addr,
 		 unsigned char addr_type);
 int dev_addr_del(struct net_device *dev, const unsigned char *addr,
diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
index f0cb38344126..ae8b1ef00fec 100644
--- a/net/core/dev_addr_lists.c
+++ b/net/core/dev_addr_lists.c
@@ -549,6 +549,16 @@ int dev_addr_init(struct net_device *dev)
 }
 EXPORT_SYMBOL(dev_addr_init);
 
+void dev_addr_mod(struct net_device *dev, unsigned int offset,
+		  const void *addr, size_t len)
+{
+	struct netdev_hw_addr *ha;
+
+	ha = container_of(dev->dev_addr, struct netdev_hw_addr, addr[0]);
+	memcpy(&ha->addr[offset], addr, len);
+}
+EXPORT_SYMBOL(dev_addr_mod);
+
 /**
  *	dev_addr_add - Add a device address
  *	@dev: device
-- 
2.31.1


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

* [PATCH net-next 6/9] net: unexport dev_addr_init() & dev_addr_flush()
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
                   ` (4 preceding siblings ...)
  2021-11-18  4:14 ` [PATCH net-next 5/9] net: constify netdev->dev_addr Jakub Kicinski
@ 2021-11-18  4:14 ` Jakub Kicinski
  2021-11-18  4:14 ` [PATCH net-next 7/9] dev_addr: add a modification check Jakub Kicinski
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski

There are no module callers in-tree and it's hard to justify
why anyone would init or flush addresses of a netdev (note
the flush is more of a destructor, it frees netdev->dev_addr).

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 net/core/dev_addr_lists.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
index ae8b1ef00fec..a23a83ac18e5 100644
--- a/net/core/dev_addr_lists.c
+++ b/net/core/dev_addr_lists.c
@@ -513,7 +513,6 @@ void dev_addr_flush(struct net_device *dev)
 	__hw_addr_flush(&dev->dev_addrs);
 	dev->dev_addr = NULL;
 }
-EXPORT_SYMBOL(dev_addr_flush);
 
 /**
  *	dev_addr_init - Init device address list
@@ -547,7 +546,6 @@ int dev_addr_init(struct net_device *dev)
 	}
 	return err;
 }
-EXPORT_SYMBOL(dev_addr_init);
 
 void dev_addr_mod(struct net_device *dev, unsigned int offset,
 		  const void *addr, size_t len)
-- 
2.31.1


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

* [PATCH net-next 7/9] dev_addr: add a modification check
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
                   ` (5 preceding siblings ...)
  2021-11-18  4:14 ` [PATCH net-next 6/9] net: unexport dev_addr_init() & dev_addr_flush() Jakub Kicinski
@ 2021-11-18  4:14 ` Jakub Kicinski
  2021-11-18  4:15 ` [PATCH net-next 8/9] dev_addr_list: put the first addr on the tree Jakub Kicinski
  2021-11-18  4:15 ` [PATCH net-next 9/9] net: kunit: add a test for dev_addr_lists Jakub Kicinski
  8 siblings, 0 replies; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:14 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski

netdev->dev_addr should only be modified via helpers,
but someone may be casting off the const. Add a runtime
check to catch abuses.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 include/linux/netdevice.h |  3 +++
 net/core/dev.c            |  1 +
 net/core/dev_addr_lists.c | 19 +++++++++++++++++++
 3 files changed, 23 insertions(+)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 2462195784a9..b2ae8b9e04e4 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2268,6 +2268,8 @@ struct net_device {
 
 	/* protected by rtnl_lock */
 	struct bpf_xdp_entity	xdp_state[__MAX_XDP_MODE];
+
+	u8 dev_addr_shadow[MAX_ADDR_LEN];
 };
 #define to_net_dev(d) container_of(d, struct net_device, dev)
 
@@ -4288,6 +4290,7 @@ int dev_addr_del(struct net_device *dev, const unsigned char *addr,
 		 unsigned char addr_type);
 void dev_addr_flush(struct net_device *dev);
 int dev_addr_init(struct net_device *dev);
+void dev_addr_check(struct net_device *dev);
 
 /* Functions used for unicast addresses handling */
 int dev_uc_add(struct net_device *dev, const unsigned char *addr);
diff --git a/net/core/dev.c b/net/core/dev.c
index 92c9258cbf28..9219e319e901 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1377,6 +1377,7 @@ static int __dev_open(struct net_device *dev, struct netlink_ext_ack *extack)
 	int ret;
 
 	ASSERT_RTNL();
+	dev_addr_check(dev);
 
 	if (!netif_device_present(dev)) {
 		/* may be detached because parent is runtime-suspended */
diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
index a23a83ac18e5..969942734951 100644
--- a/net/core/dev_addr_lists.c
+++ b/net/core/dev_addr_lists.c
@@ -498,6 +498,21 @@ EXPORT_SYMBOL(__hw_addr_init);
  * Device addresses handling functions
  */
 
+/* Check that netdev->dev_addr is not written to directly as this would
+ * break the rbtree layout. All changes should go thru dev_addr_set() and co.
+ * Remove this check in mid-2024.
+ */
+void dev_addr_check(struct net_device *dev)
+{
+	if (!memcmp(dev->dev_addr, dev->dev_addr_shadow, MAX_ADDR_LEN))
+		return;
+
+	netdev_warn(dev, "Current addr:  %*ph\n", MAX_ADDR_LEN, dev->dev_addr);
+	netdev_warn(dev, "Expected addr: %*ph\n",
+		    MAX_ADDR_LEN, dev->dev_addr_shadow);
+	netdev_WARN(dev, "Incorrect netdev->dev_addr\n");
+}
+
 /**
  *	dev_addr_flush - Flush device address list
  *	@dev: device
@@ -509,6 +524,7 @@ EXPORT_SYMBOL(__hw_addr_init);
 void dev_addr_flush(struct net_device *dev)
 {
 	/* rtnl_mutex must be held here */
+	dev_addr_check(dev);
 
 	__hw_addr_flush(&dev->dev_addrs);
 	dev->dev_addr = NULL;
@@ -552,8 +568,11 @@ void dev_addr_mod(struct net_device *dev, unsigned int offset,
 {
 	struct netdev_hw_addr *ha;
 
+	dev_addr_check(dev);
+
 	ha = container_of(dev->dev_addr, struct netdev_hw_addr, addr[0]);
 	memcpy(&ha->addr[offset], addr, len);
+	memcpy(&dev->dev_addr_shadow[offset], addr, len);
 }
 EXPORT_SYMBOL(dev_addr_mod);
 
-- 
2.31.1


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

* [PATCH net-next 8/9] dev_addr_list: put the first addr on the tree
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
                   ` (6 preceding siblings ...)
  2021-11-18  4:14 ` [PATCH net-next 7/9] dev_addr: add a modification check Jakub Kicinski
@ 2021-11-18  4:15 ` Jakub Kicinski
  2021-11-18  4:15 ` [PATCH net-next 9/9] net: kunit: add a test for dev_addr_lists Jakub Kicinski
  8 siblings, 0 replies; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:15 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski

Since all netdev->dev_addr modifications go via dev_addr_mod()
we can put it on the list. When address is change remove it
and add it back.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 net/core/dev_addr_lists.c | 62 +++++++++++++++++++++------------------
 1 file changed, 34 insertions(+), 28 deletions(-)

diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c
index 969942734951..bead38ca50bd 100644
--- a/net/core/dev_addr_lists.c
+++ b/net/core/dev_addr_lists.c
@@ -16,6 +16,35 @@
  * General list handling functions
  */
 
+static int __hw_addr_insert(struct netdev_hw_addr_list *list,
+			    struct netdev_hw_addr *new, int addr_len)
+{
+	struct rb_node **ins_point = &list->tree.rb_node, *parent = NULL;
+	struct netdev_hw_addr *ha;
+
+	while (*ins_point) {
+		int diff;
+
+		ha = rb_entry(*ins_point, struct netdev_hw_addr, node);
+		diff = memcmp(new->addr, ha->addr, addr_len);
+		if (diff == 0)
+			diff = memcmp(&new->type, &ha->type, sizeof(new->type));
+
+		parent = *ins_point;
+		if (diff < 0)
+			ins_point = &parent->rb_left;
+		else if (diff > 0)
+			ins_point = &parent->rb_right;
+		else
+			return -EEXIST;
+	}
+
+	rb_link_node_rcu(&new->node, parent, ins_point);
+	rb_insert_color(&new->node, &list->tree);
+
+	return 0;
+}
+
 static struct netdev_hw_addr*
 __hw_addr_create(const unsigned char *addr, int addr_len,
 		 unsigned char addr_type, bool global, bool sync)
@@ -50,11 +79,6 @@ static int __hw_addr_add_ex(struct netdev_hw_addr_list *list,
 	if (addr_len > MAX_ADDR_LEN)
 		return -EINVAL;
 
-	ha = list_first_entry(&list->list, struct netdev_hw_addr, list);
-	if (ha && !memcmp(addr, ha->addr, addr_len) &&
-	    (!addr_type || addr_type == ha->type))
-		goto found_it;
-
 	while (*ins_point) {
 		int diff;
 
@@ -69,7 +93,6 @@ static int __hw_addr_add_ex(struct netdev_hw_addr_list *list,
 		} else if (diff > 0) {
 			ins_point = &parent->rb_right;
 		} else {
-found_it:
 			if (exclusive)
 				return -EEXIST;
 			if (global) {
@@ -94,16 +117,8 @@ static int __hw_addr_add_ex(struct netdev_hw_addr_list *list,
 	if (!ha)
 		return -ENOMEM;
 
-	/* The first address in dev->dev_addrs is pointed to by dev->dev_addr
-	 * and mutated freely by device drivers and netdev ops, so if we insert
-	 * it into the tree we'll end up with an invalid rbtree.
-	 */
-	if (list->count > 0) {
-		rb_link_node(&ha->node, parent, ins_point);
-		rb_insert_color(&ha->node, &list->tree);
-	} else {
-		RB_CLEAR_NODE(&ha->node);
-	}
+	rb_link_node(&ha->node, parent, ins_point);
+	rb_insert_color(&ha->node, &list->tree);
 
 	list_add_tail_rcu(&ha->list, &list->list);
 	list->count++;
@@ -138,8 +153,7 @@ static int __hw_addr_del_entry(struct netdev_hw_addr_list *list,
 	if (--ha->refcount)
 		return 0;
 
-	if (!RB_EMPTY_NODE(&ha->node))
-		rb_erase(&ha->node, &list->tree);
+	rb_erase(&ha->node, &list->tree);
 
 	list_del_rcu(&ha->list);
 	kfree_rcu(ha, rcu_head);
@@ -151,18 +165,8 @@ static struct netdev_hw_addr *__hw_addr_lookup(struct netdev_hw_addr_list *list,
 					       const unsigned char *addr, int addr_len,
 					       unsigned char addr_type)
 {
-	struct netdev_hw_addr *ha;
 	struct rb_node *node;
 
-	/* The first address isn't inserted into the tree because in the dev->dev_addrs
-	 * list it's the address pointed to by dev->dev_addr which is freely mutated
-	 * in place, so we need to check it separately.
-	 */
-	ha = list_first_entry(&list->list, struct netdev_hw_addr, list);
-	if (ha && !memcmp(addr, ha->addr, addr_len) &&
-	    (!addr_type || addr_type == ha->type))
-		return ha;
-
 	node = list->tree.rb_node;
 
 	while (node) {
@@ -571,8 +575,10 @@ void dev_addr_mod(struct net_device *dev, unsigned int offset,
 	dev_addr_check(dev);
 
 	ha = container_of(dev->dev_addr, struct netdev_hw_addr, addr[0]);
+	rb_erase(&ha->node, &dev->dev_addrs.tree);
 	memcpy(&ha->addr[offset], addr, len);
 	memcpy(&dev->dev_addr_shadow[offset], addr, len);
+	WARN_ON(__hw_addr_insert(&dev->dev_addrs, ha, dev->addr_len));
 }
 EXPORT_SYMBOL(dev_addr_mod);
 
-- 
2.31.1


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

* [PATCH net-next 9/9] net: kunit: add a test for dev_addr_lists
  2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
                   ` (7 preceding siblings ...)
  2021-11-18  4:15 ` [PATCH net-next 8/9] dev_addr_list: put the first addr on the tree Jakub Kicinski
@ 2021-11-18  4:15 ` Jakub Kicinski
  8 siblings, 0 replies; 17+ messages in thread
From: Jakub Kicinski @ 2021-11-18  4:15 UTC (permalink / raw)
  To: davem; +Cc: netdev, Jakub Kicinski

Add a KUnit test for the dev_addr API.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 net/Kconfig                    |   5 +
 net/core/Makefile              |   2 +
 net/core/dev_addr_lists_test.c | 234 +++++++++++++++++++++++++++++++++
 3 files changed, 241 insertions(+)
 create mode 100644 net/core/dev_addr_lists_test.c

diff --git a/net/Kconfig b/net/Kconfig
index 074472dfa94a..8a1f9d0287de 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -455,4 +455,9 @@ config ETHTOOL_NETLINK
 	  netlink. It provides better extensibility and some new features,
 	  e.g. notification messages.
 
+config NETDEV_ADDR_LIST_TEST
+	tristate "Unit tests for device address list"
+	default KUNIT_ALL_TESTS
+	depends on KUNIT
+
 endif   # if NET
diff --git a/net/core/Makefile b/net/core/Makefile
index 6bdcb2cafed8..a8e4f737692b 100644
--- a/net/core/Makefile
+++ b/net/core/Makefile
@@ -13,6 +13,8 @@ obj-y		     += dev.o dev_addr_lists.o dst.o netevent.o \
 			sock_diag.o dev_ioctl.o tso.o sock_reuseport.o \
 			fib_notifier.o xdp.o flow_offload.o gro.o
 
+obj-$(CONFIG_NETDEV_ADDR_LIST_TEST) += dev_addr_lists_test.o
+
 obj-y += net-sysfs.o
 obj-$(CONFIG_PAGE_POOL) += page_pool.o
 obj-$(CONFIG_PROC_FS) += net-procfs.o
diff --git a/net/core/dev_addr_lists_test.c b/net/core/dev_addr_lists_test.c
new file mode 100644
index 000000000000..b4faad5c98b2
--- /dev/null
+++ b/net/core/dev_addr_lists_test.c
@@ -0,0 +1,234 @@
+#include <kunit/test.h>
+#include <linux/etherdevice.h>
+#include <linux/netdevice.h>
+#include <linux/rtnetlink.h>
+
+static const struct net_device_ops dummy_netdev_ops = {
+};
+
+struct dev_addr_test_priv {
+	u32 addr_seen;
+};
+
+static int dev_addr_test_sync(struct net_device *netdev, const unsigned char *a)
+{
+	struct dev_addr_test_priv *datp = netdev_priv(netdev);
+
+	if (a[0] < 31 && !memchr_inv(a, a[0], ETH_ALEN))
+		datp->addr_seen |= 1 << a[0];
+	return 0;
+}
+
+static int dev_addr_test_unsync(struct net_device *netdev,
+				const unsigned char *a)
+{
+	struct dev_addr_test_priv *datp = netdev_priv(netdev);
+
+	if (a[0] < 31 && !memchr_inv(a, a[0], ETH_ALEN))
+		datp->addr_seen &= ~(1 << a[0]);
+	return 0;
+}
+
+static int dev_addr_test_init(struct kunit *test)
+{
+	struct dev_addr_test_priv *datp;
+	struct net_device *netdev;
+	int err;
+
+	netdev = alloc_etherdev(sizeof(*datp));
+	KUNIT_ASSERT_TRUE(test, netdev != NULL);
+
+	test->priv = netdev;
+	netdev->netdev_ops = &dummy_netdev_ops;
+
+	err = register_netdev(netdev);
+	if (err) {
+		free_netdev(netdev);
+		KUNIT_FAIL(test, "Can't register netdev %d", err);
+	}
+
+	rtnl_lock();
+	return 0;
+}
+
+static void dev_addr_test_exit(struct kunit *test)
+{
+	struct net_device *netdev = test->priv;
+
+	rtnl_unlock();
+	unregister_netdev(netdev);
+	free_netdev(netdev);
+}
+
+static void dev_addr_test_basic(struct kunit *test)
+{
+	struct net_device *netdev = test->priv;
+	u8 addr[ETH_ALEN];
+
+        KUNIT_EXPECT_TRUE(test, netdev->dev_addr != NULL);
+
+	memset(addr, 2, sizeof(addr));
+	eth_hw_addr_set(netdev, addr);
+	KUNIT_EXPECT_EQ(test, 0, memcmp(netdev->dev_addr, addr, sizeof(addr)));
+
+	memset(addr, 3, sizeof(addr));
+	dev_addr_set(netdev, addr);
+	KUNIT_EXPECT_EQ(test, 0, memcmp(netdev->dev_addr, addr, sizeof(addr)));
+}
+
+static void dev_addr_test_sync_one(struct kunit *test)
+{
+	struct net_device *netdev = test->priv;
+	struct dev_addr_test_priv *datp;
+	u8 addr[ETH_ALEN];
+
+	datp = netdev_priv(netdev);
+
+	memset(addr, 1, sizeof(addr));
+	eth_hw_addr_set(netdev, addr);
+
+	__hw_addr_sync_dev(&netdev->dev_addrs, netdev, dev_addr_test_sync,
+			   dev_addr_test_unsync);
+	KUNIT_EXPECT_EQ(test, 2, datp->addr_seen);
+
+	memset(addr, 2, sizeof(addr));
+	eth_hw_addr_set(netdev, addr);
+
+	datp->addr_seen = 0;
+	__hw_addr_sync_dev(&netdev->dev_addrs, netdev, dev_addr_test_sync,
+			   dev_addr_test_unsync);
+	/* It's not going to sync anything because the main address is
+	 * considered synced and we overwrite in place.
+	 */
+	KUNIT_EXPECT_EQ(test, 0, datp->addr_seen);
+}
+
+static void dev_addr_test_add_del(struct kunit *test)
+{
+	struct net_device *netdev = test->priv;
+	struct dev_addr_test_priv *datp;
+	u8 addr[ETH_ALEN];
+	int i;
+
+	datp = netdev_priv(netdev);
+
+	for (i = 1; i < 4; i++) {
+		memset(addr, i, sizeof(addr));
+		KUNIT_EXPECT_EQ(test, 0, dev_addr_add(netdev, addr,
+						      NETDEV_HW_ADDR_T_LAN));
+	}
+	/* Add 3 again */
+	KUNIT_EXPECT_EQ(test, 0, dev_addr_add(netdev, addr,
+					      NETDEV_HW_ADDR_T_LAN));
+
+	__hw_addr_sync_dev(&netdev->dev_addrs, netdev, dev_addr_test_sync,
+			   dev_addr_test_unsync);
+	KUNIT_EXPECT_EQ(test, 0xf, datp->addr_seen);
+
+	KUNIT_EXPECT_EQ(test, 0, dev_addr_del(netdev, addr,
+					      NETDEV_HW_ADDR_T_LAN));
+
+	__hw_addr_sync_dev(&netdev->dev_addrs, netdev, dev_addr_test_sync,
+			   dev_addr_test_unsync);
+	KUNIT_EXPECT_EQ(test, 0xf, datp->addr_seen);
+
+	for (i = 1; i < 4; i++) {
+		memset(addr, i, sizeof(addr));
+		KUNIT_EXPECT_EQ(test, 0, dev_addr_del(netdev, addr,
+						      NETDEV_HW_ADDR_T_LAN));
+	}
+
+	__hw_addr_sync_dev(&netdev->dev_addrs, netdev, dev_addr_test_sync,
+			   dev_addr_test_unsync);
+	KUNIT_EXPECT_EQ(test, 1, datp->addr_seen);
+}
+
+static void dev_addr_test_del_main(struct kunit *test)
+{
+	struct net_device *netdev = test->priv;
+	u8 addr[ETH_ALEN];
+
+	memset(addr, 1, sizeof(addr));
+	eth_hw_addr_set(netdev, addr);
+
+	KUNIT_EXPECT_EQ(test, -ENOENT, dev_addr_del(netdev, addr,
+						    NETDEV_HW_ADDR_T_LAN));
+	KUNIT_EXPECT_EQ(test, 0, dev_addr_add(netdev, addr,
+					      NETDEV_HW_ADDR_T_LAN));
+	KUNIT_EXPECT_EQ(test, 0, dev_addr_del(netdev, addr,
+					      NETDEV_HW_ADDR_T_LAN));
+	KUNIT_EXPECT_EQ(test, -ENOENT, dev_addr_del(netdev, addr,
+						    NETDEV_HW_ADDR_T_LAN));
+}
+
+static void dev_addr_test_add_set(struct kunit *test)
+{
+	struct net_device *netdev = test->priv;
+	struct dev_addr_test_priv *datp;
+	u8 addr[ETH_ALEN];
+	int i;
+
+	datp = netdev_priv(netdev);
+
+	/* There is no external API like dev_addr_add_excl(),
+	 * so shuffle the tree a little bit and exploit aliasing.
+	 */
+	for (i = 1; i < 16; i++) {
+		memset(addr, i, sizeof(addr));
+		KUNIT_EXPECT_EQ(test, 0, dev_addr_add(netdev, addr,
+						      NETDEV_HW_ADDR_T_LAN));
+	}
+
+	memset(addr, i, sizeof(addr));
+	eth_hw_addr_set(netdev, addr);
+	KUNIT_EXPECT_EQ(test, 0, dev_addr_add(netdev, addr,
+					      NETDEV_HW_ADDR_T_LAN));
+	memset(addr, 0, sizeof(addr));
+	eth_hw_addr_set(netdev, addr);
+
+	__hw_addr_sync_dev(&netdev->dev_addrs, netdev, dev_addr_test_sync,
+			   dev_addr_test_unsync);
+	KUNIT_EXPECT_EQ(test, 0xffff, datp->addr_seen);
+}
+
+static void dev_addr_test_add_excl(struct kunit *test)
+{
+	struct net_device *netdev = test->priv;
+	u8 addr[ETH_ALEN];
+	int i;
+
+	for (i = 0; i < 10; i++) {
+		memset(addr, i, sizeof(addr));
+		KUNIT_EXPECT_EQ(test, 0, dev_uc_add_excl(netdev, addr));
+	}
+	KUNIT_EXPECT_EQ(test, -EEXIST, dev_uc_add_excl(netdev, addr));
+
+	for (i = 0; i < 10; i += 2) {
+		memset(addr, i, sizeof(addr));
+		KUNIT_EXPECT_EQ(test, 0, dev_uc_del(netdev, addr));
+	}
+	for (i = 1; i < 10; i += 2) {
+		memset(addr, i, sizeof(addr));
+		KUNIT_EXPECT_EQ(test, -EEXIST, dev_uc_add_excl(netdev, addr));
+	}
+}
+
+static struct kunit_case dev_addr_test_cases[] = {
+        KUNIT_CASE(dev_addr_test_basic),
+        KUNIT_CASE(dev_addr_test_sync_one),
+        KUNIT_CASE(dev_addr_test_add_del),
+        KUNIT_CASE(dev_addr_test_del_main),
+        KUNIT_CASE(dev_addr_test_add_set),
+        KUNIT_CASE(dev_addr_test_add_excl),
+        {}
+};
+
+static struct kunit_suite dev_addr_test_suite = {
+        .name = "dev-addr-list-test",
+        .test_cases = dev_addr_test_cases,
+	.init = dev_addr_test_init,
+	.exit = dev_addr_test_exit,
+};
+kunit_test_suite(dev_addr_test_suite);
+
+MODULE_LICENSE("GPL");
-- 
2.31.1


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

* Re: [PATCH net-next 3/9] wilc1000: copy address before calling wilc_set_mac_address
  2021-11-18  4:14 ` [PATCH net-next 3/9] wilc1000: copy address before calling wilc_set_mac_address Jakub Kicinski
@ 2021-11-18  5:35   ` Kalle Valo
  0 siblings, 0 replies; 17+ messages in thread
From: Kalle Valo @ 2021-11-18  5:35 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, ajay.kathat, claudiu.beznea, linux-wireless

Jakub Kicinski <kuba@kernel.org> writes:

> wilc_set_mac_address() calls IO routines which don't guarantee
> the pointer won't be written to. Make a copy.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Acked-by: Kalle Valo <kvalo@codeaurora.org>

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

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

* Re: [PATCH net-next 4/9] ipw2200: constify address in ipw_send_adapter_address
  2021-11-18  4:14 ` [PATCH net-next 4/9] ipw2200: constify address in ipw_send_adapter_address Jakub Kicinski
@ 2021-11-18  5:36   ` Kalle Valo
  0 siblings, 0 replies; 17+ messages in thread
From: Kalle Valo @ 2021-11-18  5:36 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, stas.yakovlev

Jakub Kicinski <kuba@kernel.org> writes:

> Add const to the address param of ipw_send_adapter_address()
> all the functions down the chain have already been changed.
>
> Not sure how I lost this in the rebase.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Acked-by: Kalle Valo <kvalo@codeaurora.org>

-- 
https://patchwork.kernel.org/project/linux-wireless/list/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

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

* Re: [PATCH net-next 5/9] net: constify netdev->dev_addr
  2021-11-18  4:14 ` [PATCH net-next 5/9] net: constify netdev->dev_addr Jakub Kicinski
@ 2021-11-18  6:15   ` kernel test robot
  2021-11-18 11:36   ` kernel test robot
  2021-11-18 14:12   ` kernel test robot
  2 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2021-11-18  6:15 UTC (permalink / raw)
  To: Jakub Kicinski, davem; +Cc: kbuild-all, netdev, Jakub Kicinski

[-- Attachment #1: Type: text/plain, Size: 18557 bytes --]

Hi Jakub,

I love your patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Jakub-Kicinski/net-constify-netdev-dev_addr/20211118-121649
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 75082e7f46809432131749f4ecea66864d0f7438
config: m68k-defconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/ea5373ba01c0915c0dceb67e2df2b05343642b84
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jakub-Kicinski/net-constify-netdev-dev_addr/20211118-121649
        git checkout ea5373ba01c0915c0dceb67e2df2b05343642b84
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/net/ethernet/8390/mac8390.c: In function 'mac8390_rsrc_init':
>> drivers/net/ethernet/8390/mac8390.c:317:31: warning: passing argument 1 of 'nubus_get_rsrc_mem' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     317 |         nubus_get_rsrc_mem(dev->dev_addr, &ent, 6);
         |                            ~~~^~~~~~~~~~
   In file included from drivers/net/ethernet/8390/mac8390.c:29:
   include/linux/nubus.h:156:31: note: expected 'void *' but argument is of type 'const unsigned char *'
     156 | void nubus_get_rsrc_mem(void *dest, const struct nubus_dirent *dirent,
         |                         ~~~~~~^~~~
--
   drivers/net/ethernet/amd/atarilance.c:370:28: warning: no previous prototype for 'atarilance_probe' [-Wmissing-prototypes]
     370 | struct net_device * __init atarilance_probe(void)
         |                            ^~~~~~~~~~~~~~~~
   drivers/net/ethernet/amd/atarilance.c: In function 'lance_probe1':
>> drivers/net/ethernet/amd/atarilance.c:588:33: warning: passing argument 1 of 'lp->memcpy_f' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     588 |                 lp->memcpy_f(dev->dev_addr, RIEBL_HWADDR_ADDR, ETH_ALEN);
         |                              ~~~^~~~~~~~~~
   drivers/net/ethernet/amd/atarilance.c:588:33: note: expected 'void *' but argument is of type 'const unsigned char *'
   drivers/net/ethernet/amd/atarilance.c:593:42: error: assignment of read-only location '*(dev->dev_addr + (sizetype)i)'
     593 |                         dev->dev_addr[i] =
         |                                          ^
--
   drivers/net/ethernet/apple/macmace.c: In function 'mace_probe':
   drivers/net/ethernet/apple/macmace.c:232:34: error: assignment of read-only location '*(dev->dev_addr + (sizetype)j)'
     232 |                 dev->dev_addr[j] = v;
         |                                  ^
   drivers/net/ethernet/apple/macmace.c: In function 'mace_reset':
>> drivers/net/ethernet/apple/macmace.c:294:36: warning: passing argument 2 of '__mace_set_address' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     294 |         __mace_set_address(dev, dev->dev_addr);
         |                                 ~~~^~~~~~~~~~
   drivers/net/ethernet/apple/macmace.c:95:62: note: expected 'void *' but argument is of type 'const unsigned char *'
      95 | static void __mace_set_address(struct net_device *dev, void *addr);
         |                                                        ~~~~~~^~~~
   drivers/net/ethernet/apple/macmace.c: In function '__mace_set_address':
   drivers/net/ethernet/apple/macmace.c:334:45: error: assignment of read-only location '*(dev->dev_addr + (sizetype)i)'
     334 |                 mb->padr = dev->dev_addr[i] = p[i];
         |                                             ^
--
   drivers/net/ethernet/natsemi/macsonic.c: In function 'mac_onboard_sonic_ethernet_addr':
   drivers/net/ethernet/natsemi/macsonic.c:216:42: error: assignment of read-only location '*(dev->dev_addr + (sizetype)i)'
     216 |                         dev->dev_addr[i] = SONIC_READ_PROM(i);
         |                                          ^
>> drivers/net/ethernet/natsemi/macsonic.c:225:37: warning: passing argument 1 of 'bit_reverse_addr' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     225 |                 bit_reverse_addr(dev->dev_addr);
         |                                  ~~~^~~~~~~~~~
   drivers/net/ethernet/natsemi/macsonic.c:109:51: note: expected 'unsigned char *' but argument is of type 'const unsigned char *'
     109 | static inline void bit_reverse_addr(unsigned char addr[6])
         |                                     ~~~~~~~~~~~~~~^~~~~~~
   drivers/net/ethernet/natsemi/macsonic.c:246:26: error: assignment of read-only location '*(dev->dev_addr + 5)'
     246 |         dev->dev_addr[5] = val >> 8;
         |                          ^
   drivers/net/ethernet/natsemi/macsonic.c:247:26: error: assignment of read-only location '*(dev->dev_addr + 4)'
     247 |         dev->dev_addr[4] = val & 0xff;
         |                          ^
   drivers/net/ethernet/natsemi/macsonic.c:249:26: error: assignment of read-only location '*(dev->dev_addr + 3)'
     249 |         dev->dev_addr[3] = val >> 8;
         |                          ^
   drivers/net/ethernet/natsemi/macsonic.c:250:26: error: assignment of read-only location '*(dev->dev_addr + 2)'
     250 |         dev->dev_addr[2] = val & 0xff;
         |                          ^
   drivers/net/ethernet/natsemi/macsonic.c:252:26: error: assignment of read-only location '*(dev->dev_addr + 1)'
     252 |         dev->dev_addr[1] = val >> 8;
         |                          ^
   drivers/net/ethernet/natsemi/macsonic.c:253:26: error: assignment of read-only location '*dev->dev_addr'
     253 |         dev->dev_addr[0] = val & 0xff;
         |                          ^
   drivers/net/ethernet/natsemi/macsonic.c: In function 'mac_sonic_nubus_ethernet_addr':
   drivers/net/ethernet/natsemi/macsonic.c:360:34: error: assignment of read-only location '*(dev->dev_addr + (sizetype)i)'
     360 |                 dev->dev_addr[i] = SONIC_READ_PROM(i);
         |                                  ^
   drivers/net/ethernet/natsemi/macsonic.c:364:37: warning: passing argument 1 of 'bit_reverse_addr' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
     364 |                 bit_reverse_addr(dev->dev_addr);
         |                                  ~~~^~~~~~~~~~
   drivers/net/ethernet/natsemi/macsonic.c:109:51: note: expected 'unsigned char *' but argument is of type 'const unsigned char *'
     109 | static inline void bit_reverse_addr(unsigned char addr[6])
         |                                     ~~~~~~~~~~~~~~^~~~~~~


vim +317 drivers/net/ethernet/8390/mac8390.c

^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  285  
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  286  static bool mac8390_rsrc_init(struct net_device *dev,
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  287  			      struct nubus_rsrc *fres,
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  288  			      enum mac8390_type cardtype)
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  289  {
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  290  	struct nubus_board *board = fres->board;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  291  	struct nubus_dir dir;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  292  	struct nubus_dirent ent;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  293  	int offset;
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  294  	volatile unsigned short *i;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  295  
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  296  	dev->irq = SLOT2IRQ(board->slot);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  297  	/* This is getting to be a habit */
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  298  	dev->base_addr = board->slot_addr | ((board->slot & 0xf) << 20);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  299  
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  300  	/*
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  301  	 * Get some Nubus info - we will trust the card's idea
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  302  	 * of where its memory and registers are.
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  303  	 */
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  304  
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  305  	if (nubus_get_func_dir(fres, &dir) == -1) {
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  306  		dev_err(&board->dev,
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  307  			"Unable to get Nubus functional directory\n");
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  308  		return false;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  309  	}
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  310  
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  311  	/* Get the MAC address */
8e4d9696b45d96 drivers/net/mac8390.c               Joe Perches    2010-01-04  312  	if (nubus_find_rsrc(&dir, NUBUS_RESID_MAC_ADDRESS, &ent) == -1) {
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  313  		dev_info(&board->dev, "MAC address resource not found\n");
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  314  		return false;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  315  	}
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  316  
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04 @317  	nubus_get_rsrc_mem(dev->dev_addr, &ent, 6);
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  318  
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  319  	if (useresources[cardtype] == 1) {
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  320  		nubus_rewinddir(&dir);
8e4d9696b45d96 drivers/net/mac8390.c               Joe Perches    2010-01-04  321  		if (nubus_find_rsrc(&dir, NUBUS_RESID_MINOR_BASEOS,
8e4d9696b45d96 drivers/net/mac8390.c               Joe Perches    2010-01-04  322  				    &ent) == -1) {
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  323  			dev_err(&board->dev,
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  324  				"Memory offset resource not found\n");
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  325  			return false;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  326  		}
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  327  		nubus_get_rsrc_mem(&offset, &ent, 4);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  328  		dev->mem_start = dev->base_addr + offset;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  329  		/* yes, this is how the Apple driver does it */
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  330  		dev->base_addr = dev->mem_start + 0x10000;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  331  		nubus_rewinddir(&dir);
8e4d9696b45d96 drivers/net/mac8390.c               Joe Perches    2010-01-04  332  		if (nubus_find_rsrc(&dir, NUBUS_RESID_MINOR_LENGTH,
8e4d9696b45d96 drivers/net/mac8390.c               Joe Perches    2010-01-04  333  				    &ent) == -1) {
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  334  			dev_info(&board->dev,
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  335  				 "Memory length resource not found, probing\n");
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  336  			offset = mac8390_memsize(dev->mem_start);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  337  		} else {
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  338  			nubus_get_rsrc_mem(&offset, &ent, 4);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  339  		}
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  340  		dev->mem_end = dev->mem_start + offset;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  341  	} else {
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  342  		switch (cardtype) {
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  343  		case MAC8390_KINETICS:
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  344  		case MAC8390_DAYNA: /* it's the same */
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  345  			dev->base_addr = (int)(board->slot_addr +
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  346  					       DAYNA_8390_BASE);
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  347  			dev->mem_start = (int)(board->slot_addr +
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  348  					       DAYNA_8390_MEM);
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  349  			dev->mem_end = dev->mem_start +
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  350  				       mac8390_memsize(dev->mem_start);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  351  			break;
2964db0f590437 drivers/net/mac8390.c               Finn Thain     2007-05-01  352  		case MAC8390_INTERLAN:
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  353  			dev->base_addr = (int)(board->slot_addr +
2964db0f590437 drivers/net/mac8390.c               Finn Thain     2007-05-01  354  					       INTERLAN_8390_BASE);
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  355  			dev->mem_start = (int)(board->slot_addr +
2964db0f590437 drivers/net/mac8390.c               Finn Thain     2007-05-01  356  					       INTERLAN_8390_MEM);
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  357  			dev->mem_end = dev->mem_start +
2964db0f590437 drivers/net/mac8390.c               Finn Thain     2007-05-01  358  				       mac8390_memsize(dev->mem_start);
2964db0f590437 drivers/net/mac8390.c               Finn Thain     2007-05-01  359  			break;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  360  		case MAC8390_CABLETRON:
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  361  			dev->base_addr = (int)(board->slot_addr +
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  362  					       CABLETRON_8390_BASE);
494a973e229542 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  363  			dev->mem_start = (int)(board->slot_addr +
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  364  					       CABLETRON_8390_MEM);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  365  			/* The base address is unreadable if 0x00
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  366  			 * has been written to the command register
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  367  			 * Reset the chip by writing E8390_NODMA +
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  368  			 *   E8390_PAGE0 + E8390_STOP just to be
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  369  			 *   sure
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  370  			 */
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  371  			i = (void *)dev->base_addr;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  372  			*i = 0x21;
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  373  			dev->mem_end = dev->mem_start +
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  374  				       mac8390_memsize(dev->mem_start);
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  375  			break;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  376  
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  377  		default:
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  378  			dev_err(&board->dev,
4a1b27c9e32c39 drivers/net/ethernet/8390/mac8390.c Finn Thain     2018-02-18  379  				"No known base address for card type\n");
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  380  			return false;
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  381  		}
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  382  	}
^1da177e4c3f41 drivers/net/mac8390.c               Linus Torvalds 2005-04-16  383  
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  384  	return true;
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  385  }
f6de7acc42de90 drivers/net/mac8390.c               Joe Perches    2010-01-04  386  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 17440 bytes --]

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

* Re: [PATCH net-next 2/9] mlxsw: constify address in mlxsw_sp_port_dev_addr_set
  2021-11-18  4:14 ` [PATCH net-next 2/9] mlxsw: constify address in mlxsw_sp_port_dev_addr_set Jakub Kicinski
@ 2021-11-18  7:27   ` Ido Schimmel
  0 siblings, 0 replies; 17+ messages in thread
From: Ido Schimmel @ 2021-11-18  7:27 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev, jiri, idosch

On Wed, Nov 17, 2021 at 08:14:54PM -0800, Jakub Kicinski wrote:
> Argument comes from netdev->dev_addr directly, it needs a const.
> 
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>

Reviewed-by: Ido Schimmel <idosch@nvidia.com>

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

* Re: [PATCH net-next 5/9] net: constify netdev->dev_addr
  2021-11-18  4:14 ` [PATCH net-next 5/9] net: constify netdev->dev_addr Jakub Kicinski
  2021-11-18  6:15   ` kernel test robot
@ 2021-11-18 11:36   ` kernel test robot
  2021-11-18 14:12   ` kernel test robot
  2 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2021-11-18 11:36 UTC (permalink / raw)
  To: Jakub Kicinski, davem; +Cc: kbuild-all, netdev, Jakub Kicinski

[-- Attachment #1: Type: text/plain, Size: 26754 bytes --]

Hi Jakub,

I love your patch! Yet something to improve:

[auto build test ERROR on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Jakub-Kicinski/net-constify-netdev-dev_addr/20211118-121649
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 75082e7f46809432131749f4ecea66864d0f7438
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/ea5373ba01c0915c0dceb67e2df2b05343642b84
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jakub-Kicinski/net-constify-netdev-dev_addr/20211118-121649
        git checkout ea5373ba01c0915c0dceb67e2df2b05343642b84
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/net/ethernet/smsc/smc9194.c: In function 'smc_probe':
>> drivers/net/ethernet/smsc/smc9194.c:927:39: error: assignment of read-only location '*(dev->dev_addr + ((sizetype)i + 1))'
     927 |                 dev->dev_addr[ i + 1] = address >> 8;
         |                                       ^
   drivers/net/ethernet/smsc/smc9194.c:928:36: error: assignment of read-only location '*(dev->dev_addr + (sizetype)i)'
     928 |                 dev->dev_addr[ i ] = address & 0xFF;
         |                                    ^


vim +927 drivers/net/ethernet/smsc/smc9194.c

32670c36d0222e drivers/net/smc9194.c               Stephen Hemminger 2009-03-26   815  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   816  /*----------------------------------------------------------------------
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   817   . Function: smc_probe( int ioaddr )
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   818   .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   819   . Purpose:
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   820   .	Tests to see if a given ioaddr points to an SMC9xxx chip.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   821   .	Returns a 0 on success
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   822   .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   823   . Algorithm:
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   824   .	(1) see if the high byte of BANK_SELECT is 0x33
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   825   . 	(2) compare the ioaddr with the base register's address
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   826   .	(3) see if I recognize the chip ID in the appropriate register
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   827   .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   828   .---------------------------------------------------------------------
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   829   */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   830  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   831  /*---------------------------------------------------------------
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   832   . Here I do typical initialization tasks.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   833   .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   834   . o  Initialize the structure if needed
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   835   . o  print out my vanity message if not done so already
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   836   . o  print out what type of hardware is detected
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   837   . o  print out the ethernet address
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   838   . o  find the IRQ
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   839   . o  set up my private data
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   840   . o  configure the dev structure with my subroutines
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   841   . o  actually GRAB the irq.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   842   . o  GRAB the region
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   843   .-----------------------------------------------------------------
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   844  */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   845  static int __init smc_probe(struct net_device *dev, int ioaddr)
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   846  {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   847  	int i, memory, retval;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   848  	unsigned int bank;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   849  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   850  	const char *version_string;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   851  	const char *if_string;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   852  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   853  	/* registers */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   854  	word revision_register;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   855  	word base_address_register;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   856  	word configuration_register;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   857  	word memory_info_register;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   858  	word memory_cfg_register;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   859  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   860  	/* Grab the region so that no one else tries to probe our ioports. */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   861  	if (!request_region(ioaddr, SMC_IO_EXTENT, DRV_NAME))
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   862  		return -EBUSY;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   863  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   864  	dev->irq = irq;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   865  	dev->if_port = ifport;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   866  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   867  	/* First, see if the high byte is 0x33 */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   868  	bank = inw( ioaddr + BANK_SELECT );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   869  	if ( (bank & 0xFF00) != 0x3300 ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   870  		retval = -ENODEV;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   871  		goto err_out;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   872  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   873  	/* The above MIGHT indicate a device, but I need to write to further
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   874  		test this.  */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   875  	outw( 0x0, ioaddr + BANK_SELECT );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   876  	bank = inw( ioaddr + BANK_SELECT );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   877  	if ( (bank & 0xFF00 ) != 0x3300 ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   878  		retval = -ENODEV;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   879  		goto err_out;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   880  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   881  	/* well, we've already written once, so hopefully another time won't
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   882  	   hurt.  This time, I need to switch the bank register to bank 1,
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   883  	   so I can access the base address register */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   884  	SMC_SELECT_BANK(1);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   885  	base_address_register = inw( ioaddr + BASE );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   886  	if ( ioaddr != ( base_address_register >> 3 & 0x3E0 ) )  {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   887  		printk(CARDNAME ": IOADDR %x doesn't match configuration (%x). "
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   888  			"Probably not a SMC chip\n",
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   889  			ioaddr, base_address_register >> 3 & 0x3E0 );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   890  		/* well, the base address register didn't match.  Must not have
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   891  		   been a SMC chip after all. */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   892  		retval = -ENODEV;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   893  		goto err_out;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   894  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   895  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   896  	/*  check if the revision register is something that I recognize.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   897  	    These might need to be added to later, as future revisions
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   898  	    could be added.  */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   899  	SMC_SELECT_BANK(3);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   900  	revision_register  = inw( ioaddr + REVISION );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   901  	if ( !chip_ids[ ( revision_register  >> 4 ) & 0xF  ] ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   902  		/* I don't recognize this chip, so... */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   903  		printk(CARDNAME ": IO %x: Unrecognized revision register:"
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   904  			" %x, Contact author.\n", ioaddr, revision_register);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   905  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   906  		retval = -ENODEV;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   907  		goto err_out;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   908  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   909  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   910  	/* at this point I'll assume that the chip is an SMC9xxx.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   911  	   It might be prudent to check a listing of MAC addresses
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   912  	   against the hardware address, or do some other tests. */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   913  
2ad02bdc885db5 drivers/net/ethernet/smsc/smc9194.c Ben Boeckel       2013-11-01   914  	pr_info_once("%s\n", version);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   915  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   916  	/* fill in some of the fields */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   917  	dev->base_addr = ioaddr;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   918  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   919  	/*
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   920  	 . Get the MAC address ( bank 1, regs 4 - 9 )
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   921  	*/
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   922  	SMC_SELECT_BANK( 1 );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   923  	for ( i = 0; i < 6; i += 2 ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   924  		word	address;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   925  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   926  		address = inw( ioaddr + ADDR0 + i  );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  @927  		dev->dev_addr[ i + 1] = address >> 8;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   928  		dev->dev_addr[ i ] = address & 0xFF;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   929  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   930  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   931  	/* get the memory information */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   932  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   933  	SMC_SELECT_BANK( 0 );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   934  	memory_info_register = inw( ioaddr + MIR );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   935  	memory_cfg_register  = inw( ioaddr + MCR );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   936  	memory = ( memory_cfg_register >> 9 )  & 0x7;  /* multiplier */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   937  	memory *= 256 * ( memory_info_register & 0xFF );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   938  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   939  	/*
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   940  	 Now, I want to find out more about the chip.  This is sort of
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   941  	 redundant, but it's cleaner to have it in both, rather than having
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   942  	 one VERY long probe procedure.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   943  	*/
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   944  	SMC_SELECT_BANK(3);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   945  	revision_register  = inw( ioaddr + REVISION );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   946  	version_string = chip_ids[ ( revision_register  >> 4 ) & 0xF  ];
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   947  	if ( !version_string ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   948  		/* I shouldn't get here because this call was done before.... */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   949  		retval = -ENODEV;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   950  		goto err_out;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   951  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   952  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   953  	/* is it using AUI or 10BaseT ? */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   954  	if ( dev->if_port == 0 ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   955  		SMC_SELECT_BANK(1);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   956  		configuration_register = inw( ioaddr + CONFIG );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   957  		if ( configuration_register & CFG_AUI_SELECT )
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   958  			dev->if_port = 2;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   959  		else
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   960  			dev->if_port = 1;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   961  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   962  	if_string = interfaces[ dev->if_port - 1 ];
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   963  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   964  	/* now, reset the chip, and put it into a known state */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   965  	smc_reset( ioaddr );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   966  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   967  	/*
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   968  	 . If dev->irq is 0, then the device has to be banged on to see
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   969  	 . what the IRQ is.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   970  	 .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   971  	 . This banging doesn't always detect the IRQ, for unknown reasons.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   972  	 . a workaround is to reset the chip and try again.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   973  	 .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   974  	 . Interestingly, the DOS packet driver *SETS* the IRQ on the card to
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   975  	 . be what is requested on the command line.   I don't do that, mostly
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   976  	 . because the card that I have uses a non-standard method of accessing
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   977  	 . the IRQs, and because this _should_ work in most configurations.
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   978  	 .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   979  	 . Specifying an IRQ is done with the assumption that the user knows
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   980  	 . what (s)he is doing.  No checking is done!!!!
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   981  	 .
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   982  	*/
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   983  	if ( dev->irq < 2 ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   984  		int	trials;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   985  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   986  		trials = 3;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   987  		while ( trials-- ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   988  			dev->irq = smc_findirq( ioaddr );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   989  			if ( dev->irq )
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   990  				break;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   991  			/* kick the card and try again */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   992  			smc_reset( ioaddr );
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   993  		}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   994  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   995  	if (dev->irq == 0 ) {
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   996  		printk(CARDNAME": Couldn't autodetect your IRQ. Use irq=xx.\n");
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   997  		retval = -ENODEV;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   998  		goto err_out;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16   999  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1000  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1001  	/* now, print out the card info, in a short format.. */
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1002  
2ad02bdc885db5 drivers/net/ethernet/smsc/smc9194.c Ben Boeckel       2013-11-01  1003  	netdev_info(dev, "%s(r:%d) at %#3x IRQ:%d INTF:%s MEM:%db ",
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1004  		    version_string, revision_register & 0xF, ioaddr, dev->irq,
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1005  		    if_string, memory);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1006  	/*
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1007  	 . Print the Ethernet address
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1008  	*/
2ad02bdc885db5 drivers/net/ethernet/smsc/smc9194.c Ben Boeckel       2013-11-01  1009  	netdev_info(dev, "ADDR: %pM\n", dev->dev_addr);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1010  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1011  	/* Grab the IRQ */
a0607fd3a25ba1 drivers/net/smc9194.c               Joe Perches       2009-11-18  1012  	retval = request_irq(dev->irq, smc_interrupt, 0, DRV_NAME, dev);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1013  	if (retval) {
2ad02bdc885db5 drivers/net/ethernet/smsc/smc9194.c Ben Boeckel       2013-11-01  1014  		netdev_warn(dev, "%s: unable to get IRQ %d (irqval=%d).\n",
2ad02bdc885db5 drivers/net/ethernet/smsc/smc9194.c Ben Boeckel       2013-11-01  1015  			    DRV_NAME, dev->irq, retval);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1016  		goto err_out;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1017  	}
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1018  
32670c36d0222e drivers/net/smc9194.c               Stephen Hemminger 2009-03-26  1019  	dev->netdev_ops			= &smc_netdev_ops;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1020  	dev->watchdog_timeo		= HZ/20;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1021  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1022  	return 0;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1023  
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1024  err_out:
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1025  	release_region(ioaddr, SMC_IO_EXTENT);
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1026  	return retval;
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1027  }
^1da177e4c3f41 drivers/net/smc9194.c               Linus Torvalds    2005-04-16  1028  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 62370 bytes --]

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

* Re: [PATCH net-next 1/9] net: ax88796c: don't write to netdev->dev_addr directly
       [not found]   ` <CGME20211118121026eucas1p2b113b6be5644d9c2038519feecba51f5@eucas1p2.samsung.com>
@ 2021-11-18 12:09     ` Lukasz Stelmach
  0 siblings, 0 replies; 17+ messages in thread
From: Lukasz Stelmach @ 2021-11-18 12:09 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: davem, netdev

[-- Attachment #1: Type: text/plain, Size: 2333 bytes --]

It was <2021-11-17 śro 20:14>, when Jakub Kicinski wrote:
> The future is here, convert the new driver as we are about
> to make netdev->dev_addr const.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> CC: l.stelmach@samsung.com
> ---
>  drivers/net/ethernet/asix/ax88796c_main.c | 18 ++++++++++--------
>  1 file changed, 10 insertions(+), 8 deletions(-)
>

Acked-by: Lukasz Stelmach <l.stelmach@samsung.com>

> diff --git a/drivers/net/ethernet/asix/ax88796c_main.c b/drivers/net/ethernet/asix/ax88796c_main.c
> index e230d8d0ff73..e7a9f9863258 100644
> --- a/drivers/net/ethernet/asix/ax88796c_main.c
> +++ b/drivers/net/ethernet/asix/ax88796c_main.c
> @@ -144,12 +144,13 @@ static void ax88796c_set_mac_addr(struct net_device *ndev)
>  static void ax88796c_load_mac_addr(struct net_device *ndev)
>  {
>  	struct ax88796c_device *ax_local = to_ax88796c_device(ndev);
> +	u8 addr[ETH_ALEN];
>  	u16 temp;
>  
>  	lockdep_assert_held(&ax_local->spi_lock);
>  
>  	/* Try the device tree first */
> -	if (!eth_platform_get_mac_address(&ax_local->spi->dev, ndev->dev_addr) &&
> +	if (!platform_get_ethdev_address(&ax_local->spi->dev, ndev) &&
>  	    is_valid_ether_addr(ndev->dev_addr)) {
>  		if (netif_msg_probe(ax_local))
>  			dev_info(&ax_local->spi->dev,
> @@ -159,18 +160,19 @@ static void ax88796c_load_mac_addr(struct net_device *ndev)
>  
>  	/* Read the MAC address from AX88796C */
>  	temp = AX_READ(&ax_local->ax_spi, P3_MACASR0);
> -	ndev->dev_addr[5] = (u8)temp;
> -	ndev->dev_addr[4] = (u8)(temp >> 8);
> +	addr[5] = (u8)temp;
> +	addr[4] = (u8)(temp >> 8);
>  
>  	temp = AX_READ(&ax_local->ax_spi, P3_MACASR1);
> -	ndev->dev_addr[3] = (u8)temp;
> -	ndev->dev_addr[2] = (u8)(temp >> 8);
> +	addr[3] = (u8)temp;
> +	addr[2] = (u8)(temp >> 8);
>  
>  	temp = AX_READ(&ax_local->ax_spi, P3_MACASR2);
> -	ndev->dev_addr[1] = (u8)temp;
> -	ndev->dev_addr[0] = (u8)(temp >> 8);
> +	addr[1] = (u8)temp;
> +	addr[0] = (u8)(temp >> 8);
>  
> -	if (is_valid_ether_addr(ndev->dev_addr)) {
> +	if (is_valid_ether_addr(addr)) {
> +		eth_hw_addr_set(ndev, addr);
>  		if (netif_msg_probe(ax_local))
>  			dev_info(&ax_local->spi->dev,
>  				 "MAC address read from ASIX chip\n");

-- 
Łukasz Stelmach
Samsung R&D Institute Poland
Samsung Electronics

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

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

* Re: [PATCH net-next 5/9] net: constify netdev->dev_addr
  2021-11-18  4:14 ` [PATCH net-next 5/9] net: constify netdev->dev_addr Jakub Kicinski
  2021-11-18  6:15   ` kernel test robot
  2021-11-18 11:36   ` kernel test robot
@ 2021-11-18 14:12   ` kernel test robot
  2 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2021-11-18 14:12 UTC (permalink / raw)
  To: Jakub Kicinski, davem; +Cc: kbuild-all, netdev, Jakub Kicinski

[-- Attachment #1: Type: text/plain, Size: 41081 bytes --]

Hi Jakub,

I love your patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    https://github.com/0day-ci/linux/commits/Jakub-Kicinski/net-constify-netdev-dev_addr/20211118-121649
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 75082e7f46809432131749f4ecea66864d0f7438
config: x86_64-randconfig-s032-20211118 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/0day-ci/linux/commit/ea5373ba01c0915c0dceb67e2df2b05343642b84
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Jakub-Kicinski/net-constify-netdev-dev_addr/20211118-121649
        git checkout ea5373ba01c0915c0dceb67e2df2b05343642b84
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)
>> drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2820:55: sparse: sparse: incorrect type in argument 2 (different modifiers) @@     expected unsigned char [usertype] *addr @@     got unsigned char const *dev_addr @@
   drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2820:55: sparse:     expected unsigned char [usertype] *addr
   drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2820:55: sparse:     got unsigned char const *dev_addr
--
   drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:121:25: sparse: sparse: symbol 'bnx2x_iov_wq' was not declared. Should it be static?
>> drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:8555:57: sparse: sparse: incorrect type in argument 2 (different modifiers) @@     expected unsigned char [usertype] *addr @@     got unsigned char const *dev_addr @@
   drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:8555:57: sparse:     expected unsigned char [usertype] *addr
   drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c:8555:57: sparse:     got unsigned char const *dev_addr

vim +2820 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c

9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2626  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2627  	bp->state = BNX2X_STATE_OPENING_WAIT4_LOAD;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2628  
16a5fd9265e757 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-06-02  2629  	/* zero the structure w/o any lock, before SP handler is initialized */
2ae17f666099c9 drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-05-04  2630  	memset(&bp->last_reported_link, 0, sizeof(bp->last_reported_link));
2ae17f666099c9 drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-05-04  2631  	__set_bit(BNX2X_LINK_REPORT_LINK_DOWN,
2ae17f666099c9 drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-05-04  2632  		&bp->last_reported_link.link_report_flags);
2ae17f666099c9 drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-05-04  2633  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2634  	if (IS_PF(bp))
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2635  		/* must be called before memory allocation and HW init */
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2636  		bnx2x_ilt_set_info(bp);
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2637  
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2638  	/*
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2639  	 * Zero fastpath structures preserving invariants like napi, which are
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2640  	 * allocated only once, fp index, max_cos, bp pointer.
7e6b4d440b0ae9 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Michal Schmidt          2015-04-28  2641  	 * Also set fp->mode and txdata_ptr.
b3b83c3f3c640b drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-05-04  2642  	 */
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2643  	DP(NETIF_MSG_IFUP, "num queues: %d", bp->num_queues);
b3b83c3f3c640b drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-05-04  2644  	for_each_queue(bp, i)
b3b83c3f3c640b drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-05-04  2645  		bnx2x_bz_fp(bp, i);
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2646  	memset(bp->bnx2x_txq, 0, (BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS +
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2647  				  bp->num_cnic_queues) *
65565884fba67d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-06-19  2648  				  sizeof(struct bnx2x_fp_txdata));
b3b83c3f3c640b drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-05-04  2649  
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2650  	bp->fcoe_init = false;
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2651  
a8c94b9188bf60 drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-02-06  2652  	/* Set the receive queues buffer size */
a8c94b9188bf60 drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-02-06  2653  	bnx2x_set_rx_buf_size(bp);
a8c94b9188bf60 drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-02-06  2654  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2655  	if (IS_PF(bp)) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2656  		rc = bnx2x_alloc_mem(bp);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2657  		if (rc) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2658  			BNX2X_ERR("Unable to allocate bp memory\n");
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2659  			return rc;
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2660  		}
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2661  	}
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2662  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2663  	/* need to be done after alloc mem, since it's self adjusting to amount
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2664  	 * of memory available for RSS queues
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2665  	 */
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2666  	rc = bnx2x_alloc_fp_mem(bp);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2667  	if (rc) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2668  		BNX2X_ERR("Unable to allocate memory for fps\n");
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2669  		LOAD_ERROR_EXIT(bp, load_error0);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2670  	}
d6214d7aaa9a82 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2671  
e3ed4eaef4932f drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dmitry Kravkov          2013-10-27  2672  	/* Allocated memory for FW statistics  */
fb653827c75872 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dan Carpenter           2021-08-05  2673  	rc = bnx2x_alloc_fw_stats_mem(bp);
fb653827c75872 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dan Carpenter           2021-08-05  2674  	if (rc)
e3ed4eaef4932f drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dmitry Kravkov          2013-10-27  2675  		LOAD_ERROR_EXIT(bp, load_error0);
e3ed4eaef4932f drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dmitry Kravkov          2013-10-27  2676  
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2677  	/* request pf to initialize status blocks */
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2678  	if (IS_VF(bp)) {
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2679  		rc = bnx2x_vfpf_init(bp);
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2680  		if (rc)
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2681  			LOAD_ERROR_EXIT(bp, load_error0);
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2682  	}
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2683  
b3b83c3f3c640b drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-05-04  2684  	/* As long as bnx2x_alloc_mem() may possibly update
b3b83c3f3c640b drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-05-04  2685  	 * bp->num_queues, bnx2x_set_real_num_queues() should always
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2686  	 * come after it. At this stage cnic queues are not counted.
b3b83c3f3c640b drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-05-04  2687  	 */
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2688  	rc = bnx2x_set_real_num_queues(bp, 0);
d6214d7aaa9a82 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2689  	if (rc) {
ec6ba945211b1c drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2010-12-13  2690  		BNX2X_ERR("Unable to set real_num_queues\n");
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2691  		LOAD_ERROR_EXIT(bp, load_error0);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2692  	}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2693  
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2694  	/* configure multi cos mappings in kernel.
16a5fd9265e757 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-06-02  2695  	 * this configuration may be overridden by a multi class queue
16a5fd9265e757 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-06-02  2696  	 * discipline or by a dcbx negotiation result.
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2697  	 */
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2698  	bnx2x_setup_tc(bp->dev, bp->max_cos);
6383c0b35b48bf drivers/net/bnx2x/bnx2x_cmn.c                   Ariel Elior             2011-07-14  2699  
26614ba5445fe3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-08-27  2700  	/* Add all NAPI objects */
26614ba5445fe3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-08-27  2701  	bnx2x_add_all_napi(bp);
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2702  	DP(NETIF_MSG_IFUP, "napi added\n");
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2703  	bnx2x_napi_enable(bp);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2704  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2705  	if (IS_PF(bp)) {
889b9af34f9861 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2012-01-26  2706  		/* set pf load just before approaching the MCP */
889b9af34f9861 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2012-01-26  2707  		bnx2x_set_pf_load(bp);
889b9af34f9861 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2012-01-26  2708  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2709  		/* if mcp exists send load request and analyze response */
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2710  		if (!BP_NOMCP(bp)) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2711  			/* attempt to load pf */
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2712  			rc = bnx2x_nic_load_request(bp, &load_code);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2713  			if (rc)
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2714  				LOAD_ERROR_EXIT(bp, load_error1);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2715  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2716  			/* what did mcp say? */
91ebb929b6f802 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-12-26  2717  			rc = bnx2x_compare_fw_ver(bp, load_code, true);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2718  			if (rc) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2719  				bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
d1e2d9660e6bca drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2012-01-26  2720  				LOAD_ERROR_EXIT(bp, load_error2);
d1e2d9660e6bca drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2012-01-26  2721  			}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2722  		} else {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2723  			load_code = bnx2x_nic_load_no_mcp(bp, port);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2724  		}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2725  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2726  		/* mark pmf if applicable */
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2727  		bnx2x_nic_load_pmf(bp, load_code);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2728  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2729  		/* Init Function state controlling object */
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2730  		bnx2x__init_func_obj(bp);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2731  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2732  		/* Initialize HW */
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2733  		rc = bnx2x_init_hw(bp, load_code);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2734  		if (rc) {
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2735  			BNX2X_ERR("HW init failed, aborting\n");
a22f078867ef36 drivers/net/bnx2x/bnx2x_cmn.c                   Yaniv Rosner            2010-09-07  2736  			bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2737  			LOAD_ERROR_EXIT(bp, load_error2);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2738  		}
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2739  	}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2740  
ecf01c22be0346 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-04-22  2741  	bnx2x_pre_irq_nic_init(bp);
ecf01c22be0346 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-04-22  2742  
d6214d7aaa9a82 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2743  	/* Connect to IRQs */
d6214d7aaa9a82 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2744  	rc = bnx2x_setup_irqs(bp);
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2745  	if (rc) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2746  		BNX2X_ERR("setup irqs failed\n");
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2747  		if (IS_PF(bp))
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2748  			bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2749  		LOAD_ERROR_EXIT(bp, load_error2);
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2750  	}
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2751  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2752  	/* Init per-function objects */
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2753  	if (IS_PF(bp)) {
ecf01c22be0346 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-04-22  2754  		/* Setup NIC internals and enable interrupts */
ecf01c22be0346 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-04-22  2755  		bnx2x_post_irq_nic_init(bp, load_code);
ecf01c22be0346 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-04-22  2756  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2757  		bnx2x_init_bp_objs(bp);
b56e9670ffa4de drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2758  		bnx2x_iov_nic_init(bp);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2759  
a334872224a67b drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-04-23  2760  		/* Set AFEX default VLAN tag to an invalid value */
a334872224a67b drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-04-23  2761  		bp->afex_def_vlan_tag = -1;
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2762  		bnx2x_nic_load_afex_dcc(bp, load_code);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2763  		bp->state = BNX2X_STATE_OPENING_WAIT4_PORT;
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2764  		rc = bnx2x_func_start(bp);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2765  		if (rc) {
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2766  			BNX2X_ERR("Function start failed!\n");
c636322b24eb69 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-07-19  2767  			bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2768  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2769  			LOAD_ERROR_EXIT(bp, load_error3);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2770  		}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2771  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2772  		/* Send LOAD_DONE command to MCP */
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2773  		if (!BP_NOMCP(bp)) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2774  			load_code = bnx2x_fw_command(bp,
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2775  						     DRV_MSG_CODE_LOAD_DONE, 0);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2776  			if (!load_code) {
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2777  				BNX2X_ERR("MCP response failure, aborting\n");
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2778  				rc = -EBUSY;
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2779  				LOAD_ERROR_EXIT(bp, load_error3);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2780  			}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2781  		}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2782  
0c14e5ced26462 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-04-17  2783  		/* initialize FW coalescing state machines in RAM */
0c14e5ced26462 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-04-17  2784  		bnx2x_update_coalesce(bp);
60cad4e67bd6ff drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-09-04  2785  	}
0c14e5ced26462 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-04-17  2786  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2787  	/* setup the leading queue */
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2788  	rc = bnx2x_setup_leading(bp);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2789  	if (rc) {
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2790  		BNX2X_ERR("Setup leading failed!\n");
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2791  		LOAD_ERROR_EXIT(bp, load_error3);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2792  	}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2793  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2794  	/* set up the rest of the queues */
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2795  	for_each_nondefault_eth_queue(bp, i) {
60cad4e67bd6ff drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-09-04  2796  		if (IS_PF(bp))
60cad4e67bd6ff drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-09-04  2797  			rc = bnx2x_setup_queue(bp, &bp->fp[i], false);
60cad4e67bd6ff drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-09-04  2798  		else /* VF */
60cad4e67bd6ff drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-09-04  2799  			rc = bnx2x_vfpf_setup_q(bp, &bp->fp[i], false);
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2800  		if (rc) {
60cad4e67bd6ff drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-09-04  2801  			BNX2X_ERR("Queue %d setup failed\n", i);
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2802  			LOAD_ERROR_EXIT(bp, load_error3);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2803  		}
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2804  	}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2805  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2806  	/* setup rss */
60cad4e67bd6ff drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-09-04  2807  	rc = bnx2x_init_rss(bp);
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2808  	if (rc) {
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2809  		BNX2X_ERR("PF RSS init failed\n");
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2810  		LOAD_ERROR_EXIT(bp, load_error3);
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2811  	}
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2812  
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2813  	/* Now when Clients are configured we are ready to work */
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2814  	bp->state = BNX2X_STATE_OPEN;
523224a3b3cd40 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-10-06  2815  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2816  	/* Configure a ucast MAC */
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2817  	if (IS_PF(bp))
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2818  		rc = bnx2x_set_eth_mac(bp, true);
8d9ac297d18dbe drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2819  	else /* vf */
f8f4f61a5a3588 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dmitry Kravkov          2013-04-24 @2820  		rc = bnx2x_vfpf_config_mac(bp, bp->dev->dev_addr, bp->fp->index,
f8f4f61a5a3588 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dmitry Kravkov          2013-04-24  2821  					   true);
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2822  	if (rc) {
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2823  		BNX2X_ERR("Setting Ethernet MAC failed\n");
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2824  		LOAD_ERROR_EXIT(bp, load_error3);
51c1a580b1e07d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-03-18  2825  	}
6e30dd4e3935dd drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-02-06  2826  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2827  	if (IS_PF(bp) && bp->pending_max) {
e3835b99333eb3 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-03-06  2828  		bnx2x_update_max_mf_config(bp, bp->pending_max);
e3835b99333eb3 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-03-06  2829  		bp->pending_max = 0;
e3835b99333eb3 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-03-06  2830  	}
e3835b99333eb3 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2011-03-06  2831  
484c016d939278 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Sudarsana Reddy Kalluru 2018-06-28  2832  	bp->force_link_down = false;
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2833  	if (bp->port.pmf) {
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2834  		rc = bnx2x_initial_phy_init(bp, load_mode);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2835  		if (rc)
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2836  			LOAD_ERROR_EXIT(bp, load_error3);
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2837  	}
c63da990cd6315 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-12-05  2838  	bp->link_params.feature_config_flags &= ~FEATURE_CONFIG_BOOT_FROM_SAN;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2839  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2840  	/* Start fast path */
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2841  
05cc5a39ddb74d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-29  2842  	/* Re-configure vlan filters */
05cc5a39ddb74d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-29  2843  	rc = bnx2x_vlan_reconfigure_vid(bp);
05cc5a39ddb74d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-29  2844  	if (rc)
05cc5a39ddb74d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-29  2845  		LOAD_ERROR_EXIT(bp, load_error3);
05cc5a39ddb74d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-29  2846  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2847  	/* Initialize Rx filter. */
8b09be5f173759 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-08-01  2848  	bnx2x_set_rx_mode_inner(bp);
6e30dd4e3935dd drivers/net/bnx2x/bnx2x_cmn.c                   Vladislav Zolotarov     2011-02-06  2849  
eeed018cbfa30c drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Michal Kalderon         2014-08-17  2850  	if (bp->flags & PTP_SUPPORTED) {
07f12622a66320 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Sudarsana Reddy Kalluru 2018-12-12  2851  		bnx2x_register_phc(bp);
eeed018cbfa30c drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Michal Kalderon         2014-08-17  2852  		bnx2x_init_ptp(bp);
eeed018cbfa30c drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Michal Kalderon         2014-08-17  2853  		bnx2x_configure_ptp_filters(bp);
eeed018cbfa30c drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Michal Kalderon         2014-08-17  2854  	}
eeed018cbfa30c drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Michal Kalderon         2014-08-17  2855  	/* Start Tx */
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2856  	switch (load_mode) {
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2857  	case LOAD_NORMAL:
16a5fd9265e757 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2013-06-02  2858  		/* Tx queue should be only re-enabled */
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2859  		netif_tx_wake_all_queues(bp->dev);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2860  		break;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2861  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2862  	case LOAD_OPEN:
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2863  		netif_tx_start_all_queues(bp->dev);
4e857c58efeb99 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Peter Zijlstra          2014-03-17  2864  		smp_mb__after_atomic();
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2865  		break;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2866  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2867  	case LOAD_DIAG:
8970b2e4393a34 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-06-19  2868  	case LOAD_LOOPBACK_EXT:
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2869  		bp->state = BNX2X_STATE_DIAG;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2870  		break;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2871  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2872  	default:
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2873  		break;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2874  	}
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2875  
00253a8cf3119a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dmitry Kravkov          2011-11-13  2876  	if (bp->port.pmf)
4c704899328bcb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-12-02  2877  		bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_PORT_MASK, 0);
00253a8cf3119a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Dmitry Kravkov          2011-11-13  2878  	else
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2879  		bnx2x__link_status_update(bp);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2880  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2881  	/* start the timer */
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2882  	mod_timer(&bp->timer, jiffies + bp->current_interval);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2883  
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2884  	if (CNIC_ENABLED(bp))
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2885  		bnx2x_load_cnic(bp);
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2886  
42f8277f56cf4a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2014-03-23  2887  	if (IS_PF(bp))
42f8277f56cf4a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2014-03-23  2888  		bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_GET_DRV_VERSION, 0);
42f8277f56cf4a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2014-03-23  2889  
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2890  	if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2891  		/* mark driver is loaded in shmem2 */
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2892  		u32 val;
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2893  		val = SHMEM2_RD(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)]);
230d00eb4bfe0d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2894  		val &= ~DRV_FLAGS_MTU_MASK;
230d00eb4bfe0d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2895  		val |= (bp->dev->mtu << DRV_FLAGS_MTU_SHIFT);
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2896  		SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)],
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2897  			  val | DRV_FLAGS_CAPABILITIES_LOADED_SUPPORTED |
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2898  			  DRV_FLAGS_CAPABILITIES_LOADED_L2);
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2899  	}
9ce392d4fa43c3 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-03-12  2900  
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2901  	/* Wait for all pending SP commands to complete */
ad5afc89365e98 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Ariel Elior             2013-01-01  2902  	if (IS_PF(bp) && !bnx2x_wait_sp_comp(bp, ~0x0UL)) {
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2903  		BNX2X_ERR("Timeout waiting for SP elements to complete\n");
5d07d8680692a2 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2012-09-13  2904  		bnx2x_nic_unload(bp, UNLOAD_CLOSE, false);
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2905  		return -EBUSY;
619c5cb6885b93 drivers/net/bnx2x/bnx2x_cmn.c                   Vlad Zolotarov          2011-06-14  2906  	}
6891dd25d3f82e drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-08-03  2907  
c48f350ff5e75a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2908  	/* Update driver data for On-Chip MFW dump. */
c48f350ff5e75a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2909  	if (IS_PF(bp))
c48f350ff5e75a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2910  		bnx2x_update_mfw_dump(bp);
c48f350ff5e75a drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2911  
9876879fce3081 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-06-19  2912  	/* If PMF - send ADMIN DCBX msg to MFW to initiate DCBX FSM */
9876879fce3081 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-06-19  2913  	if (bp->port.pmf && (bp->state != BNX2X_STATE_DIAG))
9876879fce3081 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-06-19  2914  		bnx2x_dcbx_init(bp, false);
9876879fce3081 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Barak Witkowski         2012-06-19  2915  
230d00eb4bfe0d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2916  	if (!IS_MF_SD_STORAGE_PERSONALITY_ONLY(bp))
230d00eb4bfe0d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2917  		bnx2x_set_os_driver_state(bp, OS_DRIVER_STATE_ACTIVE);
230d00eb4bfe0d drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Yuval Mintz             2015-07-22  2918  
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2919  	DP(NETIF_MSG_IFUP, "Ending successfully NIC load\n");
55c11941e382cb drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c Merav Sicron            2012-11-07  2920  
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2921  	return 0;
9f6c925889ad92 drivers/net/bnx2x/bnx2x_cmn.c                   Dmitry Kravkov          2010-07-27  2922  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 39229 bytes --]

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

end of thread, other threads:[~2021-11-18 14:13 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-18  4:14 [PATCH net-next 0/9] net: constify netdev->dev_addr Jakub Kicinski
2021-11-18  4:14 ` [PATCH net-next 1/9] net: ax88796c: don't write to netdev->dev_addr directly Jakub Kicinski
     [not found]   ` <CGME20211118121026eucas1p2b113b6be5644d9c2038519feecba51f5@eucas1p2.samsung.com>
2021-11-18 12:09     ` Lukasz Stelmach
2021-11-18  4:14 ` [PATCH net-next 2/9] mlxsw: constify address in mlxsw_sp_port_dev_addr_set Jakub Kicinski
2021-11-18  7:27   ` Ido Schimmel
2021-11-18  4:14 ` [PATCH net-next 3/9] wilc1000: copy address before calling wilc_set_mac_address Jakub Kicinski
2021-11-18  5:35   ` Kalle Valo
2021-11-18  4:14 ` [PATCH net-next 4/9] ipw2200: constify address in ipw_send_adapter_address Jakub Kicinski
2021-11-18  5:36   ` Kalle Valo
2021-11-18  4:14 ` [PATCH net-next 5/9] net: constify netdev->dev_addr Jakub Kicinski
2021-11-18  6:15   ` kernel test robot
2021-11-18 11:36   ` kernel test robot
2021-11-18 14:12   ` kernel test robot
2021-11-18  4:14 ` [PATCH net-next 6/9] net: unexport dev_addr_init() & dev_addr_flush() Jakub Kicinski
2021-11-18  4:14 ` [PATCH net-next 7/9] dev_addr: add a modification check Jakub Kicinski
2021-11-18  4:15 ` [PATCH net-next 8/9] dev_addr_list: put the first addr on the tree Jakub Kicinski
2021-11-18  4:15 ` [PATCH net-next 9/9] net: kunit: add a test for dev_addr_lists Jakub Kicinski

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).