diff options
Diffstat (limited to 'meta-aspeed/recipes-kernel/linux/linux-aspeed-sdk/aspeed-g6')
-rw-r--r-- | meta-aspeed/recipes-kernel/linux/linux-aspeed-sdk/aspeed-g6/0001-aspeed-espi-Clean-up-error-handling.patch | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/meta-aspeed/recipes-kernel/linux/linux-aspeed-sdk/aspeed-g6/0001-aspeed-espi-Clean-up-error-handling.patch b/meta-aspeed/recipes-kernel/linux/linux-aspeed-sdk/aspeed-g6/0001-aspeed-espi-Clean-up-error-handling.patch new file mode 100644 index 000000000..8c69abc34 --- /dev/null +++ b/meta-aspeed/recipes-kernel/linux/linux-aspeed-sdk/aspeed-g6/0001-aspeed-espi-Clean-up-error-handling.patch @@ -0,0 +1,102 @@ +From aa808480fb9fa62c96bd38a83328a87971a95ed4 Mon Sep 17 00:00:00 2001 +From: Joel Stanley <joel@jms.id.au> +Date: Wed, 31 Jul 2019 18:10:37 +0930 +Subject: [PATCH] aspeed: espi: Clean up error handling + +I was seeing a crash shortly after the ESPI driver failed to probe: + + AST ESPI Unable to get GPIO IRQ -22 + Trying to free nonexistent resource <000000001e6ee000-000000001e6ee1ff> + aspeed_espi: probe of 1e6ee000.espi failed with error -22 + +The error handling was freeing the unallocated resource. + +The driver correctly makes allocations using the devm APIs. This means +the kernel will handle cleaning up of resources on failure. This patch +removes the unnecessary error handling. + +Signed-off-by: Joel Stanley <joel@jms.id.au> +--- + drivers/soc/aspeed/aspeed-espi.c | 30 ++++++------------------------ + 1 file changed, 6 insertions(+), 24 deletions(-) + +diff --git a/drivers/soc/aspeed/aspeed-espi.c b/drivers/soc/aspeed/aspeed-espi.c +index 342d45bdbad3..2b72f05dd24f 100644 +--- a/drivers/soc/aspeed/aspeed-espi.c ++++ b/drivers/soc/aspeed/aspeed-espi.c +@@ -1284,17 +1284,10 @@ static int aspeed_espi_probe(struct platform_device *pdev) + aspeed_espi->dma_mode = 0; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +- if (res == NULL) { +- dev_err(&pdev->dev, "no memory resource defined\n"); +- ret = -ENODEV; +- goto err_free; +- } +- + aspeed_espi->reg_base = devm_ioremap_resource(&pdev->dev, res); +- if (aspeed_espi->reg_base == NULL) { ++ if (IS_ERR(aspeed_espi->reg_base)) { + dev_err(&pdev->dev, "failed to ioremap() registers\n"); +- ret = -ENODEV; +- goto err_free_mem; ++ return ERR_PTR(aspeed_espi->reg_base); + } + + sysfs_bin_attr_init(&aspeed_espi->oob_channel); +@@ -1398,15 +1391,14 @@ static int aspeed_espi_probe(struct platform_device *pdev) + aspeed_espi->irq = platform_get_irq(pdev, 0); + if (aspeed_espi->irq < 0) { + dev_err(&pdev->dev, "no irq specified\n"); +- ret = -ENOENT; +- goto err_free_mem; ++ return aspeed_espi->irq; + } + + ret = devm_request_irq(&pdev->dev, aspeed_espi->irq, aspeed_espi_isr, + 0, dev_name(&pdev->dev), aspeed_espi); + if (ret) { + printk("AST ESPI Unable to get IRQ"); +- goto err_free_mem; ++ return ret; + } + + aspeed_espi->reset = devm_reset_control_get(&pdev->dev, NULL); +@@ -1421,7 +1413,7 @@ static int aspeed_espi_probe(struct platform_device *pdev) + 0, dev_name(&pdev->dev), aspeed_espi); + if (ret) { + printk("AST ESPI Unable to get GPIO IRQ %d\n", ret); +- goto err_free_mem; ++ return ret; + } + + aspeed_espi_ctrl_init(aspeed_espi); +@@ -1429,7 +1421,7 @@ static int aspeed_espi_probe(struct platform_device *pdev) + ret = misc_register(&aspeed_espi_misc); + if (ret) { + printk(KERN_ERR "ESPI : failed misc_register\n"); +- goto err_free_irq; ++ return ret; + } + + platform_set_drvdata(pdev, aspeed_espi); +@@ -1444,16 +1436,6 @@ static int aspeed_espi_probe(struct platform_device *pdev) + printk(KERN_INFO "aspeed_espi: driver successfully loaded.\n"); + + return 0; +- +-err_free_irq: +- free_irq(aspeed_espi->irq, pdev); +- +-err_free_mem: +- release_mem_region(res->start, resource_size(res)); +-err_free: +- kfree(aspeed_espi); +- +- return ret; + } + + static int aspeed_espi_remove(struct platform_device *pdev) +-- +2.20.1 + |