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