netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] netxen: bug fixes for multiport adapters
@ 2007-07-20 19:07 dhananjay
  2007-07-20 19:07 ` [PATCH 1/2] netxen: IMEZ multiport card 2nd port issue, dma watchdog fix dhananjay
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: dhananjay @ 2007-07-20 19:07 UTC (permalink / raw)
  To: netdev; +Cc: rob

These patches include fix for problem with 2nd port of multiport adapters
on IBM blades. Also improves interrupt handling for multiport adapters
avoiding interrupt flood after interrupt is down.

Generated against upstream-fixes.

 drivers/net/netxen/netxen_nic.h          |    3 +-
 drivers/net/netxen/netxen_nic_main.c     |   85 +++++++++++++++---------------
 2 files changed, 43 insertions(+), 45 deletions(-)

-- 

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

* [PATCH 1/2] netxen: IMEZ multiport card 2nd port issue, dma watchdog fix
  2007-07-20 19:07 [PATCH 0/2] netxen: bug fixes for multiport adapters dhananjay
@ 2007-07-20 19:07 ` dhananjay
  2007-07-20 19:07 ` [PATCH 2/2] netxen: Fix interrupt handling for multiport adapters dhananjay
  2007-07-24 16:57 ` [PATCH 0/2] netxen: bug fixes " Dhananjay Phadke
  2 siblings, 0 replies; 4+ messages in thread
From: dhananjay @ 2007-07-20 19:07 UTC (permalink / raw)
  To: netdev; +Cc: rob, Wen Xiong

[-- Attachment #1: dma.patch --]
[-- Type: text/plain, Size: 4409 bytes --]

This fixes issue with 2nd port of multiport adapter that the MAC address
is reset by firmware in PCI probe. This patch also fixes a bug that PCI
resources are not released if dma watchdog shutdown failed. The dma watchdog
poll messages during module unload are also suppressed.

Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: Wen Xiong <wenxiong@us.ibm.com>

Index: netdev-2.6/drivers/net/netxen/netxen_nic_main.c
===================================================================
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_main.c
+++ netdev-2.6/drivers/net/netxen/netxen_nic_main.c
@@ -46,7 +46,7 @@ MODULE_DESCRIPTION("NetXen Multi port (1
 MODULE_LICENSE("GPL");
 MODULE_VERSION(NETXEN_NIC_LINUX_VERSIONID);
 
-char netxen_nic_driver_name[] = "netxen-nic";
+char netxen_nic_driver_name[] = "netxen_nic";
 static char netxen_nic_driver_string[] = "NetXen Network Driver version "
     NETXEN_NIC_LINUX_VERSIONID;
 
@@ -785,19 +785,18 @@ static void __devexit netxen_nic_remove(
 
 	if (adapter->portnum == 0) {
 		if (init_firmware_done) {
-			dma_watchdog_shutdown_request(adapter);
-			msleep(100);
 			i = 100;
-			while ((dma_watchdog_shutdown_poll_result(adapter) != 1) && i) {
-				printk(KERN_INFO "dma_watchdog_shutdown_poll still in progress\n");
+			do {
+				if (dma_watchdog_shutdown_request(adapter) == 1)
+					break;
 				msleep(100);
-				i--;
-			}
-
-			if (i == 0) {
-				printk(KERN_ERR "dma_watchdog_shutdown_request failed\n");
-				return;
-			}
+				if (dma_watchdog_shutdown_poll_result(adapter) == 1)
+					break;
+			} while (--i);
+
+			if (i == 0)
+				printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n",
+						netdev->name);
 
 			/* clear the register for future unloads/loads */
 			writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
@@ -805,12 +804,11 @@ static void __devexit netxen_nic_remove(
 				readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
 
 			/* leave the hw in the same state as reboot */
+			netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
 			writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE));
-			if (netxen_pinit_from_rom(adapter, 0))
-				return;
+			netxen_pinit_from_rom(adapter, 0);
 			msleep(1);
-			if (netxen_load_firmware(adapter))
-				return;
+			netxen_load_firmware(adapter);
 			netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
 		}
 
@@ -819,22 +817,21 @@ static void __devexit netxen_nic_remove(
 		printk(KERN_INFO "State: 0x%0x\n",
 			readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
 
-		dma_watchdog_shutdown_request(adapter);
-		msleep(100);
 		i = 100;
-		while ((dma_watchdog_shutdown_poll_result(adapter) != 1) && i) {
-			printk(KERN_INFO "dma_watchdog_shutdown_poll still in progress\n");
+		do {
+			if (dma_watchdog_shutdown_request(adapter) == 1)
+				break;
 			msleep(100);
-			i--;
-		}
+			if (dma_watchdog_shutdown_poll_result(adapter) == 1)
+				break;
+		} while (--i);
 
 		if (i) {
 			netxen_free_adapter_offload(adapter);
 		} else {
-			printk(KERN_ERR "failed to dma shutdown\n");
-			return;
+			printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n",
+					netdev->name);
 		}
-
 	}
 
 	iounmap(adapter->ahw.db_base);
@@ -898,8 +895,6 @@ static int netxen_nic_open(struct net_de
 
 	/* Done here again so that even if phantom sw overwrote it,
 	 * we set it */
-	if (adapter->macaddr_set)
-		adapter->macaddr_set(adapter, netdev->dev_addr);
 	if (adapter->init_port
 	    && adapter->init_port(adapter, adapter->portnum) != 0) {
 	    del_timer_sync(&adapter->watchdog_timer);
@@ -907,6 +902,8 @@ static int netxen_nic_open(struct net_de
 				netxen_nic_driver_name, adapter->portnum);
 		return -EIO;
 	}
+	if (adapter->macaddr_set)
+		adapter->macaddr_set(adapter, netdev->dev_addr);
 
 	netxen_nic_set_link_parameters(adapter);
 
Index: netdev-2.6/drivers/net/netxen/netxen_nic.h
===================================================================
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic.h
+++ netdev-2.6/drivers/net/netxen/netxen_nic.h
@@ -1179,8 +1179,7 @@ dma_watchdog_shutdown_poll_result(struct
 	    NETXEN_CAM_RAM(NETXEN_CAM_RAM_DMA_WATCHDOG_CTRL), &ctrl, 4))
 		printk(KERN_ERR "failed to read dma watchdog status\n");
 
-	return ((netxen_get_dma_watchdog_enabled(ctrl) == 0) &&
-		(netxen_get_dma_watchdog_disabled(ctrl) == 0));
+	return (netxen_get_dma_watchdog_enabled(ctrl) == 0);
 }
 
 static inline int

-- 

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

* [PATCH 2/2] netxen: Fix interrupt handling for multiport adapters
  2007-07-20 19:07 [PATCH 0/2] netxen: bug fixes for multiport adapters dhananjay
  2007-07-20 19:07 ` [PATCH 1/2] netxen: IMEZ multiport card 2nd port issue, dma watchdog fix dhananjay
@ 2007-07-20 19:07 ` dhananjay
  2007-07-24 16:57 ` [PATCH 0/2] netxen: bug fixes " Dhananjay Phadke
  2 siblings, 0 replies; 4+ messages in thread
From: dhananjay @ 2007-07-20 19:07 UTC (permalink / raw)
  To: netdev; +Cc: rob

[-- Attachment #1: intr.patch --]
[-- Type: text/plain, Size: 2562 bytes --]

This patch fixes masking of interrupts on multiport adapters. Also disables
interrupts upon ifdown interface. The wrong mask could result in interrupt
flood after interface is down.

Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Index: netdev-2.6/drivers/net/netxen/netxen_nic_main.c
===================================================================
--- netdev-2.6.orig/drivers/net/netxen/netxen_nic_main.c
+++ netdev-2.6/drivers/net/netxen/netxen_nic_main.c
@@ -930,6 +930,8 @@ static int netxen_nic_close(struct net_d
 	netif_carrier_off(netdev);
 	netif_stop_queue(netdev);
 
+	netxen_nic_disable_int(adapter);
+
 	cmd_buff = adapter->cmd_buf_arr;
 	for (i = 0; i < adapter->max_tx_desc_count; i++) {
 		buffrag = cmd_buff->frag_array;
@@ -1243,28 +1245,12 @@ static int
 netxen_handle_int(struct netxen_adapter *adapter, struct net_device *netdev)
 {
 	u32 ret = 0;
-	u32 our_int = 0;
 
 	DPRINTK(INFO, "Entered handle ISR\n");
 	adapter->stats.ints++;
 
-	if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
-		our_int = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
-		/* not our interrupt */
-		if ((our_int & (0x80 << adapter->portnum)) == 0)
-			return ret;
-	}
-
 	netxen_nic_disable_int(adapter);
 
-	if (adapter->intr_scheme == INTR_SCHEME_PERPORT) {
-		/* claim interrupt */
-		if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
-			writel(our_int & ~((u32)(0x80 << adapter->portnum)),
-			NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
-		}
-	}
-
 	if (netxen_nic_rx_has_work(adapter) || netxen_nic_tx_has_work(adapter)) {
 		if (netif_rx_schedule_prep(netdev)) {
 			/*
@@ -1298,6 +1284,7 @@ irqreturn_t netxen_intr(int irq, void *d
 {
 	struct netxen_adapter *adapter;
 	struct net_device *netdev;
+	u32 our_int = 0;
 
 	if (unlikely(!irq)) {
 		return IRQ_NONE;	/* Not our interrupt */
@@ -1305,7 +1292,22 @@ irqreturn_t netxen_intr(int irq, void *d
 
 	adapter = (struct netxen_adapter *)data;
 	netdev  = adapter->netdev;
-	/* process our status queue (for all 4 ports) */
+
+	if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
+		our_int = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
+		/* not our interrupt */
+		if ((our_int & (0x80 << adapter->portnum)) == 0)
+			return IRQ_NONE;
+	}
+
+	if (adapter->intr_scheme == INTR_SCHEME_PERPORT) {
+		/* claim interrupt */
+		if (!(adapter->flags & NETXEN_NIC_MSI_ENABLED)) {
+			writel(our_int & ~((u32)(0x80 << adapter->portnum)),
+			NETXEN_CRB_NORMALIZE(adapter, CRB_INT_VECTOR));
+		}
+	}
+
 	if (netif_running(netdev))
 		netxen_handle_int(adapter, netdev);
 

-- 

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

* Re: [PATCH 0/2] netxen: bug fixes for multiport adapters
  2007-07-20 19:07 [PATCH 0/2] netxen: bug fixes for multiport adapters dhananjay
  2007-07-20 19:07 ` [PATCH 1/2] netxen: IMEZ multiport card 2nd port issue, dma watchdog fix dhananjay
  2007-07-20 19:07 ` [PATCH 2/2] netxen: Fix interrupt handling for multiport adapters dhananjay
@ 2007-07-24 16:57 ` Dhananjay Phadke
  2 siblings, 0 replies; 4+ messages in thread
From: Dhananjay Phadke @ 2007-07-24 16:57 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: netdev

Jeff,

Any chance of these patches getting committed soon?

Thanks,
-Dhananjay Phadke

On 7/21/07, dhananjay@netxen.com <dhananjay@netxen.com> wrote:
> These patches include fix for problem with 2nd port of multiport adapters
> on IBM blades. Also improves interrupt handling for multiport adapters
> avoiding interrupt flood after interrupt is down.
>
> Generated against upstream-fixes.
>
>  drivers/net/netxen/netxen_nic.h          |    3 +-
>  drivers/net/netxen/netxen_nic_main.c     |   85 +++++++++++++++---------------
>  2 files changed, 43 insertions(+), 45 deletions(-)
>
> --
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

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

end of thread, other threads:[~2007-07-24 16:57 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-20 19:07 [PATCH 0/2] netxen: bug fixes for multiport adapters dhananjay
2007-07-20 19:07 ` [PATCH 1/2] netxen: IMEZ multiport card 2nd port issue, dma watchdog fix dhananjay
2007-07-20 19:07 ` [PATCH 2/2] netxen: Fix interrupt handling for multiport adapters dhananjay
2007-07-24 16:57 ` [PATCH 0/2] netxen: bug fixes " Dhananjay Phadke

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