[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#579393: linux-image-2.6.32-3-amd64: kernel crashes at booting when QLogic IB7220 firmware not available



On Wed, 2010-06-09 at 13:02 +0200, Sebastian Hegler wrote:
> Hi!
> 
> Here we go:
> 
> ==========================================
> [   28.007218] ib_ipath 000:07:00.0: firmware: requesting qlogic/sd7220.fw
> [   28.070446] ib_ipath 000:07:00.0: infinipath0: Failed to load IB SERDES image
> [   28.070455] ib_ipath 000:07:00.0: infinipath0: Could not initialize SerDes, not usable
> [   28.070456] ib_ipath 000:07:00.0: infinipath0: Failed to bring up IB link
> 
> ...
> 
> [   29.068010] BUG: unable to handle kernel NULL pointer dereference at (null)
> [   29.072001] IP: [<(null)>] (null)
> [   29.072001] PGD 23d60c067 PUD 23d958067 PMD 0
> [   29.072001] Thread overran stack, or stack corrupted
> [   29.072001] Oops: 0010 [#1] SMP
> [   29.072001] last sysfs file: /sys/kernel/uevent_seqnum
> [   29.072001] CPU 0
> [   29.072001] Modules linked in: snd_pcm snd_timer amd64_edac_mod snd edac_core soundcore ib_ipath i2c_nforce2 shpchp snd_page_alloc edac_mce_amd psmouse evdev i2c_core button pci_hotplug pcspkr serio_raw ib_core processor ext3 jbd dm_mod raid456 md_mod async_raid6_recov async_pq raid6_pq async_xor xor async_memcpy async_tx sd_mod crc_t10dif ses enclosure ata_generic usb_hid hid ide_pci_generic ide_core ohci_hcd mptsas mptscsih mptbase scsi_transport_sas thermal thermal_sys sata_nv ehci_hcd forcedeth libata scsi_mod usbcore nls_base [las unloaded: scsi_wait_scan]
> [   29.192763] Pid: 0, comm: swapper Not tainted 2.6.32-3-amd64 #1 H8DM8-2
> ==========================================
> 
> Please also see the "screenshot" attached.
[...]

I can't get much information from this log, but by inspecting the code I
do see some problems with the handling of errors during initialisation.

Could you please test whether the attached patch fixes this bug?
Instructions for rebuilding the Debian kernel package are available at
<http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official>.

Ben.

-- 
Ben Hutchings
Once a job is fouled up, anything done to improve it makes it worse.
From 9b01d68b014ede1893557fd53cee83756343ed1f Mon Sep 17 00:00:00 2001
From: Ben Hutchings <ben@decadent.org.uk>
Date: Fri, 11 Jun 2010 03:34:41 +0100
Subject: [PATCH] ipath: Fix probe failure path

The failure path in ipath_init_one() does not match the cleanup code
in ipath_remove_one() and appears to leave interrupts enabled in some
cases.  Change it to match.
---
 drivers/infiniband/hw/ipath/ipath_driver.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/ipath/ipath_driver.c b/drivers/infiniband/hw/ipath/ipath_driver.c
index 013d138..66f60bb 100644
--- a/drivers/infiniband/hw/ipath/ipath_driver.c
+++ b/drivers/infiniband/hw/ipath/ipath_driver.c
@@ -393,6 +393,8 @@ done:
 	ipath_enable_armlaunch(dd);
 }
 
+static void cleanup_device(struct ipath_devdata *dd);
+
 static int __devinit ipath_init_one(struct pci_dev *pdev,
 				    const struct pci_device_id *ent)
 {
@@ -640,8 +642,13 @@ static int __devinit ipath_init_one(struct pci_dev *pdev,
 	goto bail;
 
 bail_irqsetup:
-	if (pdev->irq)
-		free_irq(pdev->irq, dd);
+	cleanup_device(dd);
+
+	if (dd->ipath_irq)
+		dd->ipath_f_free_irq(dd);
+
+	if (dd->ipath_f_cleanup)
+		dd->ipath_f_cleanup(dd);
 
 bail_iounmap:
 	iounmap((volatile void __iomem *) dd->ipath_kregbase);
@@ -659,7 +666,7 @@ bail:
 	return ret;
 }
 
-static void __devexit cleanup_device(struct ipath_devdata *dd)
+static void cleanup_device(struct ipath_devdata *dd)
 {
 	int port;
 	struct ipath_portdata **tmp;
-- 
1.7.1

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: