The driver has a wrong order of the cleaning up the resources,
i.e. it first will destroy the mutex and only then free the SPI
which might still use it. Fix this by switching to devm_mutex_init().
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/spi/spi-sg2044-nor.c | 14 +++-----------
1 file changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/spi/spi-sg2044-nor.c b/drivers/spi/spi-sg2044-nor.c
index 454153a63b42..e104cac57d41 100644
--- a/drivers/spi/spi-sg2044-nor.c
+++ b/drivers/spi/spi-sg2044-nor.c
@@ -435,7 +435,6 @@ static int sg2044_spifmc_probe(struct platform_device *pdev)
return -ENOMEM;
spifmc = spi_controller_get_devdata(ctrl);
- dev_set_drvdata(&pdev->dev, ctrl);
spifmc->clk = devm_clk_get_enabled(&pdev->dev, NULL);
if (IS_ERR(spifmc->clk))
@@ -457,14 +456,15 @@ static int sg2044_spifmc_probe(struct platform_device *pdev)
ctrl->mem_ops = &sg2044_spifmc_mem_ops;
ctrl->mode_bits = SPI_RX_DUAL | SPI_TX_DUAL | SPI_RX_QUAD | SPI_TX_QUAD;
- mutex_init(&spifmc->lock);
+ ret = devm_mutex_init(&spifmc->lock);
+ if (ret)
+ return ret;
sg2044_spifmc_init(spifmc);
sg2044_spifmc_init_reg(spifmc);
ret = devm_spi_register_controller(&pdev->dev, ctrl);
if (ret) {
- mutex_destroy(&spifmc->lock);
dev_err(&pdev->dev, "spi_register_controller failed\n");
return ret;
}
@@ -472,13 +472,6 @@ static int sg2044_spifmc_probe(struct platform_device *pdev)
return 0;
}
-static void sg2044_spifmc_remove(struct platform_device *pdev)
-{
- struct sg2044_spifmc *spifmc = platform_get_drvdata(pdev);
-
- mutex_destroy(&spifmc->lock);
-}
-
static const struct of_device_id sg2044_spifmc_match[] = {
{ .compatible = "sophgo,sg2044-spifmc-nor" },
{ /* sentinel */ }
@@ -491,7 +484,6 @@ static struct platform_driver sg2044_nor_driver = {
.of_match_table = sg2044_spifmc_match,
},
.probe = sg2044_spifmc_probe,
- .remove = sg2044_spifmc_remove,
};
module_platform_driver(sg2044_nor_driver);
--
2.47.2
Hi Andy,
kernel test robot noticed the following build errors:
[auto build test ERROR on broonie-spi/for-next]
[cannot apply to linus/master v6.14-rc6 next-20250312]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/spi-sg2044-nor-Fully-convert-to-device-managed-resources/20250313-012347
base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next
patch link: https://lore.kernel.org/r/20250312172016.4070094-2-andriy.shevchenko%40linux.intel.com
patch subject: [PATCH v1 1/2] spi: sg2044-nor: Fully convert to device managed resources
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20250313/202503130819.4zfx3AKS-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250313/202503130819.4zfx3AKS-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503130819.4zfx3AKS-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/spi/spi-sg2044-nor.c:11:
In file included from include/linux/module.h:19:
In file included from include/linux/elf.h:6:
In file included from arch/s390/include/asm/elf.h:181:
In file included from arch/s390/include/asm/mmu_context.h:11:
In file included from arch/s390/include/asm/pgalloc.h:18:
In file included from include/linux/mm.h:2224:
include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
504 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
505 | item];
| ~~~~
include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
511 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
512 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
include/linux/vmstat.h:524:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
524 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
525 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/spi/spi-sg2044-nor.c:459:37: error: too few arguments provided to function-like macro invocation
459 | ret = devm_mutex_init(&spifmc->lock);
| ^
include/linux/mutex.h:144:9: note: macro 'devm_mutex_init' defined here
144 | #define devm_mutex_init(dev, mutex) \
| ^
>> drivers/spi/spi-sg2044-nor.c:459:8: error: use of undeclared identifier 'devm_mutex_init'; did you mean '__devm_mutex_init'?
459 | ret = devm_mutex_init(&spifmc->lock);
| ^~~~~~~~~~~~~~~
| __devm_mutex_init
include/linux/mutex.h:129:5: note: '__devm_mutex_init' declared here
129 | int __devm_mutex_init(struct device *dev, struct mutex *lock);
| ^
3 warnings and 2 errors generated.
vim +459 drivers/spi/spi-sg2044-nor.c
425
426 static int sg2044_spifmc_probe(struct platform_device *pdev)
427 {
428 struct spi_controller *ctrl;
429 struct sg2044_spifmc *spifmc;
430 void __iomem *base;
431 int ret;
432
433 ctrl = devm_spi_alloc_host(&pdev->dev, sizeof(*spifmc));
434 if (!ctrl)
435 return -ENOMEM;
436
437 spifmc = spi_controller_get_devdata(ctrl);
438
439 spifmc->clk = devm_clk_get_enabled(&pdev->dev, NULL);
440 if (IS_ERR(spifmc->clk))
441 return dev_err_probe(&pdev->dev, PTR_ERR(spifmc->clk),
442 "%s: Cannot get and enable AHB clock\n",
443 __func__);
444
445 spifmc->dev = &pdev->dev;
446 spifmc->ctrl = ctrl;
447
448 spifmc->io_base = devm_platform_ioremap_resource(pdev, 0);
449 if (IS_ERR(base))
450 return PTR_ERR(base);
451
452 ctrl->num_chipselect = 1;
453 ctrl->dev.of_node = pdev->dev.of_node;
454 ctrl->bits_per_word_mask = SPI_BPW_MASK(8);
455 ctrl->auto_runtime_pm = false;
456 ctrl->mem_ops = &sg2044_spifmc_mem_ops;
457 ctrl->mode_bits = SPI_RX_DUAL | SPI_TX_DUAL | SPI_RX_QUAD | SPI_TX_QUAD;
458
> 459 ret = devm_mutex_init(&spifmc->lock);
460 if (ret)
461 return ret;
462
463 sg2044_spifmc_init(spifmc);
464 sg2044_spifmc_init_reg(spifmc);
465
466 ret = devm_spi_register_controller(&pdev->dev, ctrl);
467 if (ret) {
468 dev_err(&pdev->dev, "spi_register_controller failed\n");
469 return ret;
470 }
471
472 return 0;
473 }
474
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Andy,
kernel test robot noticed the following build errors:
[auto build test ERROR on broonie-spi/for-next]
[cannot apply to linus/master v6.14-rc6 next-20250312]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/spi-sg2044-nor-Fully-convert-to-device-managed-resources/20250313-012347
base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next
patch link: https://lore.kernel.org/r/20250312172016.4070094-2-andriy.shevchenko%40linux.intel.com
patch subject: [PATCH v1 1/2] spi: sg2044-nor: Fully convert to device managed resources
config: sh-allyesconfig (https://download.01.org/0day-ci/archive/20250313/202503130708.AmtUDVfq-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250313/202503130708.AmtUDVfq-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202503130708.AmtUDVfq-lkp@intel.com/
All errors (new ones prefixed by >>):
drivers/spi/spi-sg2044-nor.c: In function 'sg2044_spifmc_probe':
>> drivers/spi/spi-sg2044-nor.c:459:44: error: macro "devm_mutex_init" requires 2 arguments, but only 1 given
459 | ret = devm_mutex_init(&spifmc->lock);
| ^
In file included from include/linux/notifier.h:14,
from include/linux/clk.h:14,
from drivers/spi/spi-sg2044-nor.c:9:
include/linux/mutex.h:144:9: note: macro "devm_mutex_init" defined here
144 | #define devm_mutex_init(dev, mutex) \
| ^~~~~~~~~~~~~~~
>> drivers/spi/spi-sg2044-nor.c:459:15: error: 'devm_mutex_init' undeclared (first use in this function)
459 | ret = devm_mutex_init(&spifmc->lock);
| ^~~~~~~~~~~~~~~
drivers/spi/spi-sg2044-nor.c:459:15: note: each undeclared identifier is reported only once for each function it appears in
vim +/devm_mutex_init +459 drivers/spi/spi-sg2044-nor.c
425
426 static int sg2044_spifmc_probe(struct platform_device *pdev)
427 {
428 struct spi_controller *ctrl;
429 struct sg2044_spifmc *spifmc;
430 void __iomem *base;
431 int ret;
432
433 ctrl = devm_spi_alloc_host(&pdev->dev, sizeof(*spifmc));
434 if (!ctrl)
435 return -ENOMEM;
436
437 spifmc = spi_controller_get_devdata(ctrl);
438
439 spifmc->clk = devm_clk_get_enabled(&pdev->dev, NULL);
440 if (IS_ERR(spifmc->clk))
441 return dev_err_probe(&pdev->dev, PTR_ERR(spifmc->clk),
442 "%s: Cannot get and enable AHB clock\n",
443 __func__);
444
445 spifmc->dev = &pdev->dev;
446 spifmc->ctrl = ctrl;
447
448 spifmc->io_base = devm_platform_ioremap_resource(pdev, 0);
449 if (IS_ERR(base))
450 return PTR_ERR(base);
451
452 ctrl->num_chipselect = 1;
453 ctrl->dev.of_node = pdev->dev.of_node;
454 ctrl->bits_per_word_mask = SPI_BPW_MASK(8);
455 ctrl->auto_runtime_pm = false;
456 ctrl->mem_ops = &sg2044_spifmc_mem_ops;
457 ctrl->mode_bits = SPI_RX_DUAL | SPI_TX_DUAL | SPI_RX_QUAD | SPI_TX_QUAD;
458
> 459 ret = devm_mutex_init(&spifmc->lock);
460 if (ret)
461 return ret;
462
463 sg2044_spifmc_init(spifmc);
464 sg2044_spifmc_init_reg(spifmc);
465
466 ret = devm_spi_register_controller(&pdev->dev, ctrl);
467 if (ret) {
468 dev_err(&pdev->dev, "spi_register_controller failed\n");
469 return ret;
470 }
471
472 return 0;
473 }
474
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On Thu, Mar 13, 2025 at 07:34:50AM +0800, kernel test robot wrote: > Hi Andy, > > kernel test robot noticed the following build errors: > > [auto build test ERROR on broonie-spi/for-next] > [cannot apply to linus/master v6.14-rc6 next-20250312] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use '--base' as documented in > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: https://github.com/intel-lab-lkp/linux/commits/Andy-Shevchenko/spi-sg2044-nor-Fully-convert-to-device-managed-resources/20250313-012347 > base: https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next > patch link: https://lore.kernel.org/r/20250312172016.4070094-2-andriy.shevchenko%40linux.intel.com > patch subject: [PATCH v1 1/2] spi: sg2044-nor: Fully convert to device managed resources > config: sh-allyesconfig (https://download.01.org/0day-ci/archive/20250313/202503130708.AmtUDVfq-lkp@intel.com/config) > compiler: sh4-linux-gcc (GCC) 14.2.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250313/202503130708.AmtUDVfq-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202503130708.AmtUDVfq-lkp@intel.com/ > > All errors (new ones prefixed by >>): Oh, indeed, missed the compilation of this module somehow. Will be fixed in v2, thanks! -- With Best Regards, Andy Shevchenko
© 2016 - 2025 Red Hat, Inc.