Re: [PATCH v2 06/10] scsi: ufs: use devres functions for ufshcd
On Thu, Jun 27, 2013 at 10:01 AM, Seungwon Jeon tgih@samsung.com wrote: This patch replaces normal calls for resource allocation with devm_*() derivative functions. It makes resource freeing simpler. Signed-off-by: Seungwon Jeon tgih@samsung.com Signed-off-by: Santosh Y santos...@gmail.com --- Change in v2: [NOTE: There are no conflicts with the following series(07~10)] - Remove iounmap which is remained. - Apply devres to ufshcd_memory_alloc[dmam_alloc_coherent, devm_kzalloc] Accordingly, 'free' related functions are removed. drivers/scsi/ufs/ufshcd-pci.c|1 - drivers/scsi/ufs/ufshcd-pltfrm.c | 72 +--- drivers/scsi/ufs/ufshcd.c| 86 - 3 files changed, 39 insertions(+), 120 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd-pci.c b/drivers/scsi/ufs/ufshcd-pci.c index 5cb1d75..48be39a 100644 --- a/drivers/scsi/ufs/ufshcd-pci.c +++ b/drivers/scsi/ufs/ufshcd-pci.c @@ -92,7 +92,6 @@ static void ufshcd_pci_remove(struct pci_dev *pdev) struct ufs_hba *hba = pci_get_drvdata(pdev); disable_irq(pdev-irq); - free_irq(pdev-irq, hba); ufshcd_remove(hba); pci_release_regions(pdev); pci_set_drvdata(pdev, NULL); diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c index 3db2ee1..0e48827 100644 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c @@ -33,9 +33,10 @@ * this program. */ -#include ufshcd.h #include linux/platform_device.h +#include ufshcd.h + #ifdef CONFIG_PM /** * ufshcd_pltfrm_suspend - suspend power management function @@ -97,62 +98,45 @@ static int ufshcd_pltfrm_probe(struct platform_device *pdev) struct ufs_hba *hba; void __iomem *mmio_base; struct resource *mem_res; - struct resource *irq_res; - resource_size_t mem_size; - int err; + int irq, err; struct device *dev = pdev-dev; mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!mem_res) { - dev_err(pdev-dev, - Memory resource not available\n); + dev_err(dev, Memory resource not available\n); err = -ENODEV; - goto out_error; + goto out; } - mem_size = resource_size(mem_res); - if (!request_mem_region(mem_res-start, mem_size, ufshcd)) { - dev_err(pdev-dev, - Cannot reserve the memory resource\n); - err = -EBUSY; - goto out_error; + mmio_base = devm_ioremap_resource(dev, mem_res); + if (IS_ERR(mmio_base)) { + dev_err(dev, memory map failed\n); + err = PTR_ERR(mmio_base); + goto out; } - mmio_base = ioremap_nocache(mem_res-start, mem_size); - if (!mmio_base) { - dev_err(pdev-dev, memory map failed\n); - err = -ENOMEM; - goto out_release_regions; - } - - irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!irq_res) { - dev_err(pdev-dev, IRQ resource not available\n); + irq = platform_get_irq(pdev, 0); + if (irq 0) { + dev_err(dev, IRQ resource not available\n); err = -ENODEV; - goto out_iounmap; + goto out; } err = dma_set_coherent_mask(dev, dev-coherent_dma_mask); if (err) { - dev_err(pdev-dev, set dma mask failed\n); - goto out_iounmap; + dev_err(dev, set dma mask failed\n); + goto out; } - err = ufshcd_init(pdev-dev, hba, mmio_base, irq_res-start); + err = ufshcd_init(dev, hba, mmio_base, irq); if (err) { - dev_err(pdev-dev, Intialization failed\n); - goto out_iounmap; + dev_err(dev, Intialization failed\n); + goto out; } platform_set_drvdata(pdev, hba); - return 0; - -out_iounmap: - iounmap(mmio_base); -out_release_regions: - release_mem_region(mem_res-start, mem_size); -out_error: +out: return err; } @@ -164,26 +148,10 @@ out_error: */ static int ufshcd_pltfrm_remove(struct platform_device *pdev) { - struct resource *mem_res; - resource_size_t mem_size; struct ufs_hba *hba = platform_get_drvdata(pdev); disable_irq(hba-irq); - - /* Some buggy controllers raise interrupt after -* the resources are removed. So first we unregister the -* irq handler and then the resources used by driver -*/ - - free_irq(hba-irq, hba); ufshcd_remove(hba); - mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if
[PATCH v2 06/10] scsi: ufs: use devres functions for ufshcd
This patch replaces normal calls for resource allocation with devm_*() derivative functions. It makes resource freeing simpler. Signed-off-by: Seungwon Jeon tgih@samsung.com Signed-off-by: Santosh Y santos...@gmail.com --- Change in v2: [NOTE: There are no conflicts with the following series(07~10)] - Remove iounmap which is remained. - Apply devres to ufshcd_memory_alloc[dmam_alloc_coherent, devm_kzalloc] Accordingly, 'free' related functions are removed. drivers/scsi/ufs/ufshcd-pci.c|1 - drivers/scsi/ufs/ufshcd-pltfrm.c | 72 +--- drivers/scsi/ufs/ufshcd.c| 86 - 3 files changed, 39 insertions(+), 120 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd-pci.c b/drivers/scsi/ufs/ufshcd-pci.c index 5cb1d75..48be39a 100644 --- a/drivers/scsi/ufs/ufshcd-pci.c +++ b/drivers/scsi/ufs/ufshcd-pci.c @@ -92,7 +92,6 @@ static void ufshcd_pci_remove(struct pci_dev *pdev) struct ufs_hba *hba = pci_get_drvdata(pdev); disable_irq(pdev-irq); - free_irq(pdev-irq, hba); ufshcd_remove(hba); pci_release_regions(pdev); pci_set_drvdata(pdev, NULL); diff --git a/drivers/scsi/ufs/ufshcd-pltfrm.c b/drivers/scsi/ufs/ufshcd-pltfrm.c index 3db2ee1..0e48827 100644 --- a/drivers/scsi/ufs/ufshcd-pltfrm.c +++ b/drivers/scsi/ufs/ufshcd-pltfrm.c @@ -33,9 +33,10 @@ * this program. */ -#include ufshcd.h #include linux/platform_device.h +#include ufshcd.h + #ifdef CONFIG_PM /** * ufshcd_pltfrm_suspend - suspend power management function @@ -97,62 +98,45 @@ static int ufshcd_pltfrm_probe(struct platform_device *pdev) struct ufs_hba *hba; void __iomem *mmio_base; struct resource *mem_res; - struct resource *irq_res; - resource_size_t mem_size; - int err; + int irq, err; struct device *dev = pdev-dev; mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!mem_res) { - dev_err(pdev-dev, - Memory resource not available\n); + dev_err(dev, Memory resource not available\n); err = -ENODEV; - goto out_error; + goto out; } - mem_size = resource_size(mem_res); - if (!request_mem_region(mem_res-start, mem_size, ufshcd)) { - dev_err(pdev-dev, - Cannot reserve the memory resource\n); - err = -EBUSY; - goto out_error; + mmio_base = devm_ioremap_resource(dev, mem_res); + if (IS_ERR(mmio_base)) { + dev_err(dev, memory map failed\n); + err = PTR_ERR(mmio_base); + goto out; } - mmio_base = ioremap_nocache(mem_res-start, mem_size); - if (!mmio_base) { - dev_err(pdev-dev, memory map failed\n); - err = -ENOMEM; - goto out_release_regions; - } - - irq_res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); - if (!irq_res) { - dev_err(pdev-dev, IRQ resource not available\n); + irq = platform_get_irq(pdev, 0); + if (irq 0) { + dev_err(dev, IRQ resource not available\n); err = -ENODEV; - goto out_iounmap; + goto out; } err = dma_set_coherent_mask(dev, dev-coherent_dma_mask); if (err) { - dev_err(pdev-dev, set dma mask failed\n); - goto out_iounmap; + dev_err(dev, set dma mask failed\n); + goto out; } - err = ufshcd_init(pdev-dev, hba, mmio_base, irq_res-start); + err = ufshcd_init(dev, hba, mmio_base, irq); if (err) { - dev_err(pdev-dev, Intialization failed\n); - goto out_iounmap; + dev_err(dev, Intialization failed\n); + goto out; } platform_set_drvdata(pdev, hba); - return 0; - -out_iounmap: - iounmap(mmio_base); -out_release_regions: - release_mem_region(mem_res-start, mem_size); -out_error: +out: return err; } @@ -164,26 +148,10 @@ out_error: */ static int ufshcd_pltfrm_remove(struct platform_device *pdev) { - struct resource *mem_res; - resource_size_t mem_size; struct ufs_hba *hba = platform_get_drvdata(pdev); disable_irq(hba-irq); - - /* Some buggy controllers raise interrupt after -* the resources are removed. So first we unregister the -* irq handler and then the resources used by driver -*/ - - free_irq(hba-irq, hba); ufshcd_remove(hba); - mem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (!mem_res) - dev_err(pdev-dev, ufshcd: Memory resource not available\n); - else { - mem_size = resource_size(mem_res); - release_mem_region(mem_res-start,