[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/