Message ID | 1468071703-77301-1-git-send-email-andriy.shevchenko@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 09/07/16 16:41, Andy Shevchenko wrote: > This makes the error handling much more simpler than open-coding everything > and in addition makes the probe function smaller an tidier. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> > --- > drivers/mmc/host/sdhci-pci-core.c | 42 ++++++++++----------------------------- > 1 file changed, 11 insertions(+), 31 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c > index 6fbf708..773532d 100644 > --- a/drivers/mmc/host/sdhci-pci-core.c > +++ b/drivers/mmc/host/sdhci-pci-core.c > @@ -1819,15 +1819,13 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > return -ENODEV; > } > > - ret = pci_enable_device(pdev); > + ret = pcim_enable_device(pdev); > if (ret) > return ret; > > - chip = kzalloc(sizeof(struct sdhci_pci_chip), GFP_KERNEL); > - if (!chip) { > - ret = -ENOMEM; > - goto err; > - } > + chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); > + if (!chip) > + return -ENOMEM; > > chip->pdev = pdev; > chip->fixes = (const struct sdhci_pci_fixes *)ent->driver_data; > @@ -1843,7 +1841,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > if (chip->fixes && chip->fixes->probe) { > ret = chip->fixes->probe(chip); > if (ret) > - goto free; > + return ret; > } > > slots = chip->num_slots; /* Quirk may have changed this */ > @@ -1853,8 +1851,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > if (IS_ERR(slot)) { > for (i--; i >= 0; i--) > sdhci_pci_remove_slot(chip->slots[i]); > - ret = PTR_ERR(slot); > - goto free; > + return PTR_ERR(slot); > } > > chip->slots[i] = slot; > @@ -1864,35 +1861,18 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > sdhci_pci_runtime_pm_allow(&pdev->dev); > > return 0; > - > -free: > - pci_set_drvdata(pdev, NULL); > - kfree(chip); > - > -err: > - pci_disable_device(pdev); > - return ret; > } > > static void sdhci_pci_remove(struct pci_dev *pdev) > { > int i; > - struct sdhci_pci_chip *chip; > - > - chip = pci_get_drvdata(pdev); > - > - if (chip) { > - if (chip->allow_runtime_pm) > - sdhci_pci_runtime_pm_forbid(&pdev->dev); > + struct sdhci_pci_chip *chip = pci_get_drvdata(pdev); > > - for (i = 0; i < chip->num_slots; i++) > - sdhci_pci_remove_slot(chip->slots[i]); > - > - pci_set_drvdata(pdev, NULL); > - kfree(chip); > - } > + if (chip->allow_runtime_pm) > + sdhci_pci_runtime_pm_forbid(&pdev->dev); > > - pci_disable_device(pdev); > + for (i = 0; i < chip->num_slots; i++) > + sdhci_pci_remove_slot(chip->slots[i]); > } > > static struct pci_driver sdhci_driver = { > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 9 July 2016 at 15:41, Andy Shevchenko <andriy.shevchenko@linux.intel.com> wrote: > This makes the error handling much more simpler than open-coding everything > and in addition makes the probe function smaller an tidier. > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Thanks, applied for next! Kind regards Uffe > --- > drivers/mmc/host/sdhci-pci-core.c | 42 ++++++++++----------------------------- > 1 file changed, 11 insertions(+), 31 deletions(-) > > diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c > index 6fbf708..773532d 100644 > --- a/drivers/mmc/host/sdhci-pci-core.c > +++ b/drivers/mmc/host/sdhci-pci-core.c > @@ -1819,15 +1819,13 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > return -ENODEV; > } > > - ret = pci_enable_device(pdev); > + ret = pcim_enable_device(pdev); > if (ret) > return ret; > > - chip = kzalloc(sizeof(struct sdhci_pci_chip), GFP_KERNEL); > - if (!chip) { > - ret = -ENOMEM; > - goto err; > - } > + chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); > + if (!chip) > + return -ENOMEM; > > chip->pdev = pdev; > chip->fixes = (const struct sdhci_pci_fixes *)ent->driver_data; > @@ -1843,7 +1841,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > if (chip->fixes && chip->fixes->probe) { > ret = chip->fixes->probe(chip); > if (ret) > - goto free; > + return ret; > } > > slots = chip->num_slots; /* Quirk may have changed this */ > @@ -1853,8 +1851,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > if (IS_ERR(slot)) { > for (i--; i >= 0; i--) > sdhci_pci_remove_slot(chip->slots[i]); > - ret = PTR_ERR(slot); > - goto free; > + return PTR_ERR(slot); > } > > chip->slots[i] = slot; > @@ -1864,35 +1861,18 @@ static int sdhci_pci_probe(struct pci_dev *pdev, > sdhci_pci_runtime_pm_allow(&pdev->dev); > > return 0; > - > -free: > - pci_set_drvdata(pdev, NULL); > - kfree(chip); > - > -err: > - pci_disable_device(pdev); > - return ret; > } > > static void sdhci_pci_remove(struct pci_dev *pdev) > { > int i; > - struct sdhci_pci_chip *chip; > - > - chip = pci_get_drvdata(pdev); > - > - if (chip) { > - if (chip->allow_runtime_pm) > - sdhci_pci_runtime_pm_forbid(&pdev->dev); > + struct sdhci_pci_chip *chip = pci_get_drvdata(pdev); > > - for (i = 0; i < chip->num_slots; i++) > - sdhci_pci_remove_slot(chip->slots[i]); > - > - pci_set_drvdata(pdev, NULL); > - kfree(chip); > - } > + if (chip->allow_runtime_pm) > + sdhci_pci_runtime_pm_forbid(&pdev->dev); > > - pci_disable_device(pdev); > + for (i = 0; i < chip->num_slots; i++) > + sdhci_pci_remove_slot(chip->slots[i]); > } > > static struct pci_driver sdhci_driver = { > -- > 2.8.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c index 6fbf708..773532d 100644 --- a/drivers/mmc/host/sdhci-pci-core.c +++ b/drivers/mmc/host/sdhci-pci-core.c @@ -1819,15 +1819,13 @@ static int sdhci_pci_probe(struct pci_dev *pdev, return -ENODEV; } - ret = pci_enable_device(pdev); + ret = pcim_enable_device(pdev); if (ret) return ret; - chip = kzalloc(sizeof(struct sdhci_pci_chip), GFP_KERNEL); - if (!chip) { - ret = -ENOMEM; - goto err; - } + chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL); + if (!chip) + return -ENOMEM; chip->pdev = pdev; chip->fixes = (const struct sdhci_pci_fixes *)ent->driver_data; @@ -1843,7 +1841,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, if (chip->fixes && chip->fixes->probe) { ret = chip->fixes->probe(chip); if (ret) - goto free; + return ret; } slots = chip->num_slots; /* Quirk may have changed this */ @@ -1853,8 +1851,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, if (IS_ERR(slot)) { for (i--; i >= 0; i--) sdhci_pci_remove_slot(chip->slots[i]); - ret = PTR_ERR(slot); - goto free; + return PTR_ERR(slot); } chip->slots[i] = slot; @@ -1864,35 +1861,18 @@ static int sdhci_pci_probe(struct pci_dev *pdev, sdhci_pci_runtime_pm_allow(&pdev->dev); return 0; - -free: - pci_set_drvdata(pdev, NULL); - kfree(chip); - -err: - pci_disable_device(pdev); - return ret; } static void sdhci_pci_remove(struct pci_dev *pdev) { int i; - struct sdhci_pci_chip *chip; - - chip = pci_get_drvdata(pdev); - - if (chip) { - if (chip->allow_runtime_pm) - sdhci_pci_runtime_pm_forbid(&pdev->dev); + struct sdhci_pci_chip *chip = pci_get_drvdata(pdev); - for (i = 0; i < chip->num_slots; i++) - sdhci_pci_remove_slot(chip->slots[i]); - - pci_set_drvdata(pdev, NULL); - kfree(chip); - } + if (chip->allow_runtime_pm) + sdhci_pci_runtime_pm_forbid(&pdev->dev); - pci_disable_device(pdev); + for (i = 0; i < chip->num_slots; i++) + sdhci_pci_remove_slot(chip->slots[i]); } static struct pci_driver sdhci_driver = {
This makes the error handling much more simpler than open-coding everything and in addition makes the probe function smaller an tidier. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- drivers/mmc/host/sdhci-pci-core.c | 42 ++++++++++----------------------------- 1 file changed, 11 insertions(+), 31 deletions(-)