diff mbox series

[v1,1/2] spi: sg2044-nor: Fully convert to device managed resources

Message ID 20250312172016.4070094-2-andriy.shevchenko@linux.intel.com
State New
Headers show
Series spi: sg2044-nor: A couple of cleanups | expand

Commit Message

Andy Shevchenko March 12, 2025, 5:19 p.m. UTC
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(-)

Comments

kernel test robot March 13, 2025, 12:51 a.m. UTC | #1
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
diff mbox series

Patch

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);