[PATCH] DAC960 Oopses

From: markus . amsler
Date: Sun Mar 07 2004 - 07:48:36 EST


Hi,

The first part fixes a Kernel paging request failure on alpha with
some older DAC960P cards (i tried D040340-0-DEC/Firmware 2.70).
The Problem was, that ioremap_nocache(NULL) is not NULL (only on alpha).
This card is still unsupported, due to lacking PCI resources.

The second part fixes a kernel Oops, if the initialization
of the Controller fails (like too old firmware).
In that case, DAC960_UnregisterBlockDevice fails,
because DAC960_RegisterBlockDevice was never called.
This is a side effect of the multi-queue patch by Dave Olien.

Please CC to me directly.

--- linux-2.6.3/drivers/block/DAC960.c Wed Feb 18 04:59:05 2004
+++ linux/drivers/block/DAC960.c Sun Mar 7 11:47:55 2004
@@ -2723,6 +2723,20 @@
break;
}

+ /*
+ Controller with Mylex P/N D040340-0-DEC has no PCI resource[1]!!
+ Checking the MemoryMappedAddress == NULL will fail on
+ virtual Alpha addresses.
+ */
+ if (!Controller->PCI_Address)
+ {
+ DAC960_Error("Unable to get PCI Address. "
+ "This Controller is currently not supported.\n",
+ Controller);
+ Controller->IO_Address = 0;
+ goto Failure;
+ }
+
pci_set_drvdata(PCI_Device, (void *)((long)Controller->ControllerNumber));
for (i = 0; i < DAC960_MaxLogicalDrives; i++) {
Controller->disks[i] = alloc_disk(1<<DAC960_MaxPartitionsBits);
@@ -3061,8 +3075,8 @@
DAC960_V2_RAID_Controller);
DAC960_Notice("done\n", Controller);
}
+ DAC960_UnregisterBlockDevice(Controller);
}
- DAC960_UnregisterBlockDevice(Controller);
DAC960_DestroyAuxiliaryStructures(Controller);
DAC960_DestroyProcEntries(Controller);
DAC960_DetectCleanup(Controller);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/