Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Sep 2011 15:03:12 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-stable@freebsd.org
Cc:        Bartosz Stec <bartosz.stec@it4pro.pl>, "Vogel, Jack" <jack.vogel@intel.com>, Jeremy Chadwick <freebsd@jdc.parodius.com>
Subject:   Re: Panic during kernel booting on HP Proliant DL180G6 and latest STABLE
Message-ID:  <201109131503.12633.jhb@freebsd.org>
In-Reply-To: <4E6F7041.6040602@it4pro.pl>
References:  <4DC6A277.4030801@it4pro.pl> <1DB50624F8348F48840F2E2CF6040A9D018D22E697@orsmsx508.amr.corp.intel.com> <4E6F7041.6040602@it4pro.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday, September 13, 2011 11:01:21 am Bartosz Stec wrote:
> Hi again list. Here's little update about the issue.
> > Yes, there have been a few times when I have seen something like this, and 
issue when the driver is static and not when modulized. I have never been 
clear what to make of this. If anyone else here has any thoughts or 
enlightening ideas I'd appreciate it.
> Fresh build, 8.2-STABLE #7: Tue Sep 13 14:25:45, problem is still here, 
> regardless of igb included in the kernel or loaded as module from 
> loader.conf, system panic with msix enabled.
> > Also if it does not even happen when using the GENERIC config then it 
would be interesting to see the diff between that and what does cause the 
panic.
> Here it is:

Hmm, can you try this patch.  I need to come up with a final variant and
get it into the tree:

Index: if_igb.c
===================================================================
--- if_igb.c	(.../mirror/FreeBSD/stable/8/sys/dev/e1000)	(revision 225344)
+++ if_igb.c	(.../stable/8/sys/dev/e1000)	(revision 225344)
@@ -600,16 +619,6 @@
 		goto err_late;
 	}
 
-	/* 
-	** Configure Interrupts
-	*/
-	if ((adapter->msix > 1) && (igb_enable_msix))
-		error = igb_allocate_msix(adapter);
-	else /* MSI or Legacy */
-		error = igb_allocate_legacy(adapter);
-	if (error)
-		goto err_late;
-
 	/* Setup OS specific network interface */
 	if (igb_setup_interface(dev, adapter) != 0)
 		goto err_late;
@@ -653,6 +662,16 @@
 	adapter->led_dev = led_create(igb_led_func, adapter,
 	    device_get_nameunit(dev));
 
+	/* 
+	** Configure Interrupts
+	*/
+	if ((adapter->msix > 1) && (igb_enable_msix))
+		error = igb_allocate_msix(adapter);
+	else /* MSI or Legacy */
+		error = igb_allocate_legacy(adapter);
+	if (error)
+		goto err_late;
+
 	INIT_DEBUGOUT("igb_attach: end");
 
 	return (0);
@@ -661,10 +680,10 @@
 	igb_free_transmit_structures(adapter);
 	igb_free_receive_structures(adapter);
 	igb_release_hw_control(adapter);
+err_pci:
+	igb_free_pci_resources(adapter);
 	if (adapter->ifp != NULL)
 		if_free(adapter->ifp);
-err_pci:
-	igb_free_pci_resources(adapter);
 	free(adapter->mta, M_DEVBUF);
 	IGB_CORE_LOCK_DESTROY(adapter);
 
@@ -2272,6 +2291,8 @@
 	struct igb_queue	*que = adapter->queues;
 	int			error, rid, vector = 0;
 
+	/* Turn off all interrupts */
+	E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
 
 	for (int i = 0; i < adapter->num_queues; i++, vector++, que++) {
 		rid = vector +1;


-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201109131503.12633.jhb>