From: mikem@beardog.cca.cpqcorp.net

This patch moves the check of the controller to before trying to enable it. 
If a controller is disabled the system will Oops without this fix.  This in
the 2.4 tree.



---

 drivers/block/cciss.c |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)

diff -puN drivers/block/cciss.c~cciss-06-controller-check-fix drivers/block/cciss.c
--- 25/drivers/block/cciss.c~cciss-06-controller-check-fix	2004-02-04 20:21:49.000000000 -0800
+++ 25-akpm/drivers/block/cciss.c	2004-02-04 20:21:49.000000000 -0800
@@ -2130,6 +2130,15 @@ static int cciss_pci_init(ctlr_info_t *c
 	__u64 cfg_base_addr_index;
 	int i;
 
+	/* check to see if controller has been disabled */
+	/* BEFORE trying to enable it */
+	(void) pci_read_config_word(pdev, PCI_COMMAND,&command);
+	if(!(command & 0x02))
+	{
+		printk(KERN_WARNING "cciss: controller appears to be disabled\n");
+		return(-1);
+	}
+
 	if (pci_enable_device(pdev))
 	{
 		printk(KERN_ERR "cciss: Unable to Enable PCI device\n");
@@ -2145,7 +2154,6 @@ static int cciss_pci_init(ctlr_info_t *c
 	device_id = pdev->device;
 	irq = pdev->irq;
 
-	(void) pci_read_config_word(pdev, PCI_COMMAND,&command);
 	(void) pci_read_config_byte(pdev, PCI_CLASS_REVISION, &revision);
 	(void) pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE,
 						&cache_line_size);
@@ -2154,13 +2162,6 @@ static int cciss_pci_init(ctlr_info_t *c
 	(void) pci_read_config_dword(pdev, PCI_SUBSYSTEM_VENDOR_ID, 
 						&board_id);
 
-	/* check to see if controller has been disabled */
-	if(!(command & 0x02))
-	{
-		printk(KERN_WARNING "cciss: controller appears to be disabled\n");
-		return(-1);
-	}
-
 	/* search for our IO range so we can protect it */
 	for(i=0; i<DEVICE_COUNT_RESOURCE; i++)
 	{

_