* [net-2.6 PATCH 0/3] critical fixes
@ 2009-11-21 1:09 Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 1/3] netxen: fix memory initialization Amit Kumar Salecha
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Amit Kumar Salecha @ 2009-11-21 1:09 UTC (permalink / raw)
To: davem; +Cc: netdev, dhananjay.phadke
Hi
I am sending three patches, to fix some critical issues.
1) Skip memory initialization during driver load. Device may not come up, if memory is reset.
2) Fix promisc mode, kernel crashes with this bug. Drain rx queue before changing mode.
3) Fix bonding mode TLB/ALB, correct mac address need to communicate to device.
-Amit Salecha
^ permalink raw reply [flat|nested] 7+ messages in thread* [net-2.6 PATCH 1/3] netxen: fix memory initialization
2009-11-21 1:09 [net-2.6 PATCH 0/3] critical fixes Amit Kumar Salecha
@ 2009-11-21 1:09 ` Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 2/3] netxen: fix promisc for NX2031 Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode Amit Kumar Salecha
2 siblings, 0 replies; 7+ messages in thread
From: Amit Kumar Salecha @ 2009-11-21 1:09 UTC (permalink / raw)
To: davem; +Cc: netdev, dhananjay.phadke
Avoid resetting memory during initialization, skip this memory
block during driver probe.
Signed-off-by: Amit Kumar Salecha <amit@netxen.com>
---
drivers/net/netxen/netxen_nic_init.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c
index e40b914..8a09043 100644
--- a/drivers/net/netxen/netxen_nic_init.c
+++ b/drivers/net/netxen/netxen_nic_init.c
@@ -544,6 +544,8 @@ int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose)
continue;
if (off == (ROMUSB_GLB + 0x1c)) /* MS clock */
continue;
+ if ((off & 0x0ff00000) == NETXEN_CRB_DDR_NET)
+ continue;
if (off == (NETXEN_CRB_PEG_NET_1 + 0x18))
buf[i].data = 0x1020;
/* skip the function enable register */
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [net-2.6 PATCH 2/3] netxen: fix promisc for NX2031.
2009-11-21 1:09 [net-2.6 PATCH 0/3] critical fixes Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 1/3] netxen: fix memory initialization Amit Kumar Salecha
@ 2009-11-21 1:09 ` Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode Amit Kumar Salecha
2 siblings, 0 replies; 7+ messages in thread
From: Amit Kumar Salecha @ 2009-11-21 1:09 UTC (permalink / raw)
To: davem; +Cc: netdev, dhananjay.phadke, Narender Kumar, Amit Kumar Salecha
From: Narender Kumar <narender.kumar@qlogic.com>
Kernel crashes, if promisc mode set without disabling rx queue.
Before changing mode in NX2031 chip, wait till rx queue drains.
Signed-off-by: Narender Kumar <narender.kumar@qlogic.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
---
drivers/net/netxen/netxen_nic_hdr.h | 2 +
drivers/net/netxen/netxen_nic_hw.c | 49 +++++++++++++++++++++++++++--------
2 files changed, 40 insertions(+), 11 deletions(-)
diff --git a/drivers/net/netxen/netxen_nic_hdr.h b/drivers/net/netxen/netxen_nic_hdr.h
index 1c46da6..17bb381 100644
--- a/drivers/net/netxen/netxen_nic_hdr.h
+++ b/drivers/net/netxen/netxen_nic_hdr.h
@@ -545,6 +545,8 @@ enum {
#define NETXEN_NIU_TEST_MUX_CTL (NETXEN_CRB_NIU + 0x00094)
#define NETXEN_NIU_XG_PAUSE_CTL (NETXEN_CRB_NIU + 0x00098)
#define NETXEN_NIU_XG_PAUSE_LEVEL (NETXEN_CRB_NIU + 0x000dc)
+#define NETXEN_NIU_FRAME_COUNT_SELECT (NETXEN_CRB_NIU + 0x000ac)
+#define NETXEN_NIU_FRAME_COUNT (NETXEN_CRB_NIU + 0x000b0)
#define NETXEN_NIU_XG_SEL (NETXEN_CRB_NIU + 0x00128)
#define NETXEN_NIU_GB_PAUSE_CTL (NETXEN_CRB_NIU + 0x0030c)
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c
index 3185a98..e2c4a01 100644
--- a/drivers/net/netxen/netxen_nic_hw.c
+++ b/drivers/net/netxen/netxen_nic_hw.c
@@ -383,24 +383,51 @@ int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)
int netxen_p2_nic_set_promisc(struct netxen_adapter *adapter, u32 mode)
{
- __u32 reg;
+ u32 mac_cfg;
+ u32 cnt = 0;
+ __u32 reg = 0x0200;
u32 port = adapter->physical_port;
+ u16 board_type = adapter->ahw.board_type;
if (port > NETXEN_NIU_MAX_XG_PORTS)
return -EINVAL;
- reg = NXRD32(adapter, NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port));
- if (mode == NETXEN_NIU_PROMISC_MODE)
- reg = (reg | 0x2000UL);
- else
- reg = (reg & ~0x2000UL);
+ mac_cfg = NXRD32(adapter, NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port));
+ mac_cfg &= ~0x4;
+ NXWR32(adapter, NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port), mac_cfg);
- if (mode == NETXEN_NIU_ALLMULTI_MODE)
- reg = (reg | 0x1000UL);
- else
- reg = (reg & ~0x1000UL);
+ if ((board_type == NETXEN_BRDTYPE_P2_SB31_10G_IMEZ) ||
+ (board_type == NETXEN_BRDTYPE_P2_SB31_10G_HMEZ))
+ reg = (0x20 << port);
+
+ NXWR32(adapter, NETXEN_NIU_FRAME_COUNT_SELECT, reg);
+
+ mdelay(10);
+
+ while (NXRD32(adapter, NETXEN_NIU_FRAME_COUNT) && ++cnt < 20)
+ mdelay(10);
+
+ if (cnt < 20) {
+
+ reg = NXRD32(adapter,
+ NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port));
+
+ if (mode == NETXEN_NIU_PROMISC_MODE)
+ reg = (reg | 0x2000UL);
+ else
+ reg = (reg & ~0x2000UL);
+
+ if (mode == NETXEN_NIU_ALLMULTI_MODE)
+ reg = (reg | 0x1000UL);
+ else
+ reg = (reg & ~0x1000UL);
+
+ NXWR32(adapter,
+ NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), reg);
+ }
- NXWR32(adapter, NETXEN_NIU_XGE_CONFIG_1 + (0x10000 * port), reg);
+ mac_cfg |= 0x4;
+ NXWR32(adapter, NETXEN_NIU_XGE_CONFIG_0 + (0x10000 * port), mac_cfg);
return 0;
}
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode.
2009-11-21 1:09 [net-2.6 PATCH 0/3] critical fixes Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 1/3] netxen: fix memory initialization Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 2/3] netxen: fix promisc for NX2031 Amit Kumar Salecha
@ 2009-11-21 1:09 ` Amit Kumar Salecha
2009-11-21 5:48 ` David Miller
2 siblings, 1 reply; 7+ messages in thread
From: Amit Kumar Salecha @ 2009-11-21 1:09 UTC (permalink / raw)
To: davem; +Cc: netdev, dhananjay.phadke, Narender Kumar, Amit Kumar Salecha
From: Narender Kumar <narender.kumar@qlogic.com>
o In case of bonding mode BOND_MODE_TLB and BOND_MODE_ALB,
mac addr can swap of new_active && old_active slave.
o In set_mac, store mac addr in device private structure for future use.
Signed-off-by: Narender Kumar <narender.kumar@qlogic.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
---
drivers/net/netxen/netxen_nic.h | 2 ++
drivers/net/netxen/netxen_nic_hw.c | 6 +++---
drivers/net/netxen/netxen_nic_main.c | 4 +++-
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h
index 7384f59..e1237b8 100644
--- a/drivers/net/netxen/netxen_nic.h
+++ b/drivers/net/netxen/netxen_nic.h
@@ -1163,6 +1163,8 @@ struct netxen_adapter {
u32 int_vec_bit;
u32 heartbit;
+ u8 mac_addr[ETH_ALEN];
+
struct netxen_adapter_stats stats;
struct netxen_recv_context recv_ctx;
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c
index e2c4a01..52a3798 100644
--- a/drivers/net/netxen/netxen_nic_hw.c
+++ b/drivers/net/netxen/netxen_nic_hw.c
@@ -463,7 +463,7 @@ netxen_nic_enable_mcast_filter(struct netxen_adapter *adapter)
{
u32 val = 0;
u16 port = adapter->physical_port;
- u8 *addr = adapter->netdev->dev_addr;
+ u8 *addr = adapter->mac_addr;
if (adapter->mc_enabled)
return 0;
@@ -492,7 +492,7 @@ netxen_nic_disable_mcast_filter(struct netxen_adapter *adapter)
{
u32 val = 0;
u16 port = adapter->physical_port;
- u8 *addr = adapter->netdev->dev_addr;
+ u8 *addr = adapter->mac_addr;
if (!adapter->mc_enabled)
return 0;
@@ -687,7 +687,7 @@ void netxen_p3_nic_set_multi(struct net_device *netdev)
list_splice_tail_init(&adapter->mac_list, &del_list);
- nx_p3_nic_add_mac(adapter, netdev->dev_addr, &del_list);
+ nx_p3_nic_add_mac(adapter, adapter->mac_addr, &del_list);
nx_p3_nic_add_mac(adapter, bcast_addr, &del_list);
if (netdev->flags & IFF_PROMISC) {
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 0b4a56a..3bf78db 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -437,6 +437,7 @@ netxen_read_mac_addr(struct netxen_adapter *adapter)
netdev->dev_addr[i] = *(p + 5 - i);
memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
+ memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
/* set station address */
@@ -459,6 +460,7 @@ int netxen_nic_set_mac(struct net_device *netdev, void *p)
netxen_napi_disable(adapter);
}
+ memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len);
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
adapter->macaddr_set(adapter, addr->sa_data);
@@ -956,7 +958,7 @@ netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev)
return err;
}
if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
- adapter->macaddr_set(adapter, netdev->dev_addr);
+ adapter->macaddr_set(adapter, adapter->mac_addr);
adapter->set_multi(netdev);
adapter->set_mtu(adapter, netdev->mtu);
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode.
2009-11-21 1:09 ` [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode Amit Kumar Salecha
@ 2009-11-21 5:48 ` David Miller
0 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2009-11-21 5:48 UTC (permalink / raw)
To: amit; +Cc: netdev, dhananjay.phadke, narender.kumar, amit.salecha
From: Amit Kumar Salecha <amit@netxen.com>
Date: Fri, 20 Nov 2009 17:09:34 -0800
> @@ -437,6 +437,7 @@ netxen_read_mac_addr(struct netxen_adapter *adapter)
> netdev->dev_addr[i] = *(p + 5 - i);
>
> memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
> + memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
>
> /* set station address */
>
I don't think this is correct.
You have to maintain a valid netdev->perm_addr even if you don't use
that value later on internally. This is how the permanent, probed,
MAC address of the card is made available to the user.
Second of all, it is not clear at all why you need to maintain this
value internally. Why does it not work to simply use
netdev->dev_addr?
Whatever the reason, you need to explain the details of this in your
commit message.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode.
@ 2009-11-21 8:08 Amit Kumar Salecha
2009-11-21 19:36 ` David Miller
0 siblings, 1 reply; 7+ messages in thread
From: Amit Kumar Salecha @ 2009-11-21 8:08 UTC (permalink / raw)
To: davem; +Cc: netdev, dhananjay.phadke, Narender Kumar, Amit Kumar Salecha
From: Narender Kumar <narender.kumar@qlogic.com>
o Along with netdev->perm_addr, mac address will be
maintained in device private structure.
o Device limitation: We need to set mac address when ever
interface comes up.
In ALB/TAL mode, bonding driver calls set_mac for all slave with bond mac address.
But bonding driver set netdev->dev_addr field to its original value,
after enslaving interfaces.
When ever active slave changes, it swap dev_addr of inactive slave with active.
Yet it doesn't notify driver about change in netdev->dev_addr.
As netxen driver need to set mac addr when ever interface comes up,
it can't rely on netdev->dev_addr field. Specially in case of bonding mode ALB/TLB.
Signed-off-by: Narender Kumar <narender.kumar@qlogic.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
---
drivers/net/netxen/netxen_nic.h | 2 ++
drivers/net/netxen/netxen_nic_hw.c | 6 +++---
drivers/net/netxen/netxen_nic_main.c | 4 +++-
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h
index 7384f59..e1237b8 100644
--- a/drivers/net/netxen/netxen_nic.h
+++ b/drivers/net/netxen/netxen_nic.h
@@ -1163,6 +1163,8 @@ struct netxen_adapter {
u32 int_vec_bit;
u32 heartbit;
+ u8 mac_addr[ETH_ALEN];
+
struct netxen_adapter_stats stats;
struct netxen_recv_context recv_ctx;
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c
index e2c4a01..52a3798 100644
--- a/drivers/net/netxen/netxen_nic_hw.c
+++ b/drivers/net/netxen/netxen_nic_hw.c
@@ -463,7 +463,7 @@ netxen_nic_enable_mcast_filter(struct netxen_adapter *adapter)
{
u32 val = 0;
u16 port = adapter->physical_port;
- u8 *addr = adapter->netdev->dev_addr;
+ u8 *addr = adapter->mac_addr;
if (adapter->mc_enabled)
return 0;
@@ -492,7 +492,7 @@ netxen_nic_disable_mcast_filter(struct netxen_adapter *adapter)
{
u32 val = 0;
u16 port = adapter->physical_port;
- u8 *addr = adapter->netdev->dev_addr;
+ u8 *addr = adapter->mac_addr;
if (!adapter->mc_enabled)
return 0;
@@ -687,7 +687,7 @@ void netxen_p3_nic_set_multi(struct net_device *netdev)
list_splice_tail_init(&adapter->mac_list, &del_list);
- nx_p3_nic_add_mac(adapter, netdev->dev_addr, &del_list);
+ nx_p3_nic_add_mac(adapter, adapter->mac_addr, &del_list);
nx_p3_nic_add_mac(adapter, bcast_addr, &del_list);
if (netdev->flags & IFF_PROMISC) {
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 0b4a56a..3bf78db 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -437,6 +437,7 @@ netxen_read_mac_addr(struct netxen_adapter *adapter)
netdev->dev_addr[i] = *(p + 5 - i);
memcpy(netdev->perm_addr, netdev->dev_addr, netdev->addr_len);
+ memcpy(adapter->mac_addr, netdev->dev_addr, netdev->addr_len);
/* set station address */
@@ -459,6 +460,7 @@ int netxen_nic_set_mac(struct net_device *netdev, void *p)
netxen_napi_disable(adapter);
}
+ memcpy(adapter->mac_addr, addr->sa_data, netdev->addr_len);
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
adapter->macaddr_set(adapter, addr->sa_data);
@@ -956,7 +958,7 @@ netxen_nic_up(struct netxen_adapter *adapter, struct net_device *netdev)
return err;
}
if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
- adapter->macaddr_set(adapter, netdev->dev_addr);
+ adapter->macaddr_set(adapter, adapter->mac_addr);
adapter->set_multi(netdev);
adapter->set_mtu(adapter, netdev->mtu);
--
1.5.6.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode.
2009-11-21 8:08 Amit Kumar Salecha
@ 2009-11-21 19:36 ` David Miller
0 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2009-11-21 19:36 UTC (permalink / raw)
To: amit; +Cc: netdev, dhananjay.phadke, narender.kumar, amit.salecha
From: Amit Kumar Salecha <amit@netxen.com>
Date: Sat, 21 Nov 2009 00:08:57 -0800
> As netxen driver need to set mac addr when ever interface comes up,
> it can't rely on netdev->dev_addr field. Specially in case of
> bonding mode ALB/TLB.
Thanks a lot, now I understand your patch better.
I'll all 3 patches to net-2.6, thanks again.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-11-21 19:36 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-21 1:09 [net-2.6 PATCH 0/3] critical fixes Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 1/3] netxen: fix memory initialization Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 2/3] netxen: fix promisc for NX2031 Amit Kumar Salecha
2009-11-21 1:09 ` [net-2.6 PATCH 3/3] netxen : fix BOND_MODE_TLB/ALB mode Amit Kumar Salecha
2009-11-21 5:48 ` David Miller
-- strict thread matches above, loose matches on Subject: below --
2009-11-21 8:08 Amit Kumar Salecha
2009-11-21 19:36 ` David Miller
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).