From 554e3bc3ad3c96740ac27f5dd224f2976f0f9bb6 Mon Sep 17 00:00:00 2001 From: Bjorn Helgaas Date: Sun, 25 Jun 2006 05:49:02 -0700 Subject: [PATCH] --- yaml --- r: 29791 b: refs/heads/master c: 4e570309e80f7c7a532fe0074e74df26ff8ef5d2 h: refs/heads/master i: 29789: a778204ca5e8215c2560ef2fa1a7a71e0886d47a 29787: bbb26e0f79096015e6c54dfc216ef4ddc7f607cd 29783: c9a7e73d6dbb4466927216b65ac71305aab882a3 29775: 3ea8ccac7c1fc73a1e246b75eca7d786dae3ca48 29759: 606f6106102bb743c282e7f29c2caa46dd84a175 v: v3 --- [refs] | 2 +- trunk/drivers/block/cciss.c | 62 +++++++++++-------------------------- trunk/drivers/block/cciss.h | 2 -- 3 files changed, 19 insertions(+), 47 deletions(-) diff --git a/[refs] b/[refs] index f31bd56328bb..fd7b24195e29 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c33ac89bc7d697e23ce09ddae73e0ece5f65ad48 +refs/heads/master: 4e570309e80f7c7a532fe0074e74df26ff8ef5d2 diff --git a/trunk/drivers/block/cciss.c b/trunk/drivers/block/cciss.c index 83bd091fc6ce..45c4c3131c8f 100644 --- a/trunk/drivers/block/cciss.c +++ b/trunk/drivers/block/cciss.c @@ -2638,16 +2638,6 @@ static void print_cfg_table( CfgTable_struct *tb) } #endif /* CCISS_DEBUG */ -static void release_io_mem(ctlr_info_t *c) -{ - /* if IO mem was not protected do nothing */ - if( c->io_mem_addr == 0) - return; - release_region(c->io_mem_addr, c->io_mem_length); - c->io_mem_addr = 0; - c->io_mem_length = 0; -} - static int find_PCI_BAR_index(struct pci_dev *pdev, unsigned long pci_bar_addr) { @@ -2762,36 +2752,18 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) return err; } + err = pci_request_regions(pdev, "cciss"); + if (err) { + printk(KERN_ERR "cciss: Cannot obtain PCI resources, " + "aborting\n"); + goto err_out_disable_pdev; + } + subsystem_vendor_id = pdev->subsystem_vendor; subsystem_device_id = pdev->subsystem_device; board_id = (((__u32) (subsystem_device_id << 16) & 0xffff0000) | subsystem_vendor_id); - /* search for our IO range so we can protect it */ - for(i=0; iio_mem_addr = pci_resource_start(pdev, i); - c->io_mem_length = pci_resource_end(pdev, i) - - pci_resource_start(pdev, i) +1; -#ifdef CCISS_DEBUG - printk("IO value found base_addr[%d] %lx %lx\n", i, - c->io_mem_addr, c->io_mem_length); -#endif /* CCISS_DEBUG */ - /* register the IO range */ - if(!request_region( c->io_mem_addr, - c->io_mem_length, "cciss")) - { - printk(KERN_WARNING "cciss I/O memory range already in use addr=%lx length=%ld\n", - c->io_mem_addr, c->io_mem_length); - c->io_mem_addr= 0; - c->io_mem_length = 0; - } - break; - } - } - #ifdef CCISS_DEBUG printk("command = %x\n", command); printk("irq = %x\n", pdev->irq); @@ -2826,7 +2798,7 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) if (scratchpad != CCISS_FIRMWARE_READY) { printk(KERN_WARNING "cciss: Board not ready. Timed out.\n"); err = -ENODEV; - goto err_out_disable_pdev; + goto err_out_free_res; } /* get the address index number */ @@ -2842,9 +2814,8 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) #endif /* CCISS_DEBUG */ if (cfg_base_addr_index == -1) { printk(KERN_WARNING "cciss: Cannot find cfg_base_addr_index\n"); - release_io_mem(c); err = -ENODEV; - goto err_out_disable_pdev; + goto err_out_free_res; } cfg_offset = readl(c->vaddr + SA5_CTMEM_OFFSET); @@ -2872,7 +2843,7 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) " to access the Smart Array controller %08lx\n", (unsigned long)board_id); err = -ENODEV; - goto err_out_disable_pdev; + goto err_out_free_res; } if ( (readb(&c->cfgtable->Signature[0]) != 'C') || (readb(&c->cfgtable->Signature[1]) != 'I') || @@ -2881,7 +2852,7 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) { printk("Does not appear to be a valid CISS config table\n"); err = -ENODEV; - goto err_out_disable_pdev; + goto err_out_free_res; } #ifdef CONFIG_X86 @@ -2926,10 +2897,13 @@ static int cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev) printk(KERN_WARNING "cciss: unable to get board into" " simple mode\n"); err = -ENODEV; - goto err_out_disable_pdev; + goto err_out_free_res; } return 0; +err_out_free_res: + pci_release_regions(pdev); + err_out_disable_pdev: pci_disable_device(pdev); return err; @@ -3276,7 +3250,6 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, clean2: unregister_blkdev(hba[i]->major, hba[i]->devname); clean1: - release_io_mem(hba[i]); hba[i]->busy_initializing = 0; free_hba(i); return(-1); @@ -3322,7 +3295,6 @@ static void __devexit cciss_remove_one (struct pci_dev *pdev) pci_disable_msi(hba[i]->pdev); #endif /* CONFIG_PCI_MSI */ - pci_set_drvdata(pdev, NULL); iounmap(hba[i]->vaddr); cciss_unregister_scsi(i); /* unhook from SCSI subsystem */ unregister_blkdev(hba[i]->major, hba[i]->devname); @@ -3349,7 +3321,9 @@ static void __devexit cciss_remove_one (struct pci_dev *pdev) #ifdef CONFIG_CISS_SCSI_TAPE kfree(hba[i]->scsi_rejects.complete); #endif - release_io_mem(hba[i]); + pci_release_regions(pdev); + pci_disable_device(pdev); + pci_set_drvdata(pdev, NULL); free_hba(i); } diff --git a/trunk/drivers/block/cciss.h b/trunk/drivers/block/cciss.h index b24fc0553ccf..868e0d862b0d 100644 --- a/trunk/drivers/block/cciss.h +++ b/trunk/drivers/block/cciss.h @@ -60,8 +60,6 @@ struct ctlr_info __u32 board_id; void __iomem *vaddr; unsigned long paddr; - unsigned long io_mem_addr; - unsigned long io_mem_length; CfgTable_struct __iomem *cfgtable; int interrupts_enabled; int major;