From c5c158f5db87ccfb7ab219609d10d91c2372a28e Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Sat, 7 Feb 2004 17:43:21 -0800 Subject: [PATCH] [PATCH] cciss: intialisation oops fix 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 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index b6c0049dd4266..879d5c825eef2 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -2130,6 +2130,15 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) __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, struct pci_dev *pdev) 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, struct pci_dev *pdev) (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