Skip to contentSkip to conversation

DAC960 Oopses

PATCH New [email protected] 1 participant 1 message Mar 7, 2004 Block layer

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 DAC960 Oopses

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.

drivers/block/DAC960.c +15 -1
@@ -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);