* [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
@ 2021-05-04 16:01 Schrempf Frieder
2021-05-04 16:24 ` Andy Shevchenko
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Schrempf Frieder @ 2021-05-04 16:01 UTC (permalink / raw)
To: Marc Kleine-Budde, Vincent Mailhol, Oliver Hartkopp,
Frieder Schrempf, Gustavo A. R. Silva, Timo Schlüßler,
Andy Shevchenko, Tim Harvey
Cc: stable, linux-can, netdev, linux-kernel
Since 8ce8c0abcba3 the driver queues work via priv->restart_work when
resuming after suspend, even when the interface was not previously
enabled. This causes a null dereference error as the workqueue is
only allocated and initialized in mcp251x_open().
To fix this we move the workqueue init to mcp251x_can_probe() as
there is no reason to do it later and repeat it whenever
mcp251x_open() is called.
Fixes: 8ce8c0abcba3 ("can: mcp251x: only reset hardware as required")
Cc: stable@vger.kernel.org
Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
---
drivers/net/can/spi/mcp251x.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c
index a57da43680d8..42e8e5791c9f 100644
--- a/drivers/net/can/spi/mcp251x.c
+++ b/drivers/net/can/spi/mcp251x.c
@@ -956,8 +956,6 @@ static int mcp251x_stop(struct net_device *net)
priv->force_quit = 1;
free_irq(spi->irq, priv);
- destroy_workqueue(priv->wq);
- priv->wq = NULL;
mutex_lock(&priv->mcp_lock);
@@ -1224,15 +1222,6 @@ static int mcp251x_open(struct net_device *net)
goto out_close;
}
- priv->wq = alloc_workqueue("mcp251x_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM,
- 0);
- if (!priv->wq) {
- ret = -ENOMEM;
- goto out_clean;
- }
- INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
- INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler);
-
ret = mcp251x_hw_wake(spi);
if (ret)
goto out_free_wq;
@@ -1373,6 +1362,15 @@ static int mcp251x_can_probe(struct spi_device *spi)
if (ret)
goto out_clk;
+ priv->wq = alloc_workqueue("mcp251x_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM,
+ 0);
+ if (!priv->wq) {
+ ret = -ENOMEM;
+ goto out_clk;
+ }
+ INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
+ INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler);
+
priv->spi = spi;
mutex_init(&priv->mcp_lock);
@@ -1417,6 +1415,8 @@ static int mcp251x_can_probe(struct spi_device *spi)
return 0;
error_probe:
+ destroy_workqueue(priv->wq);
+ priv->wq = NULL;
mcp251x_power_enable(priv->power, 0);
out_clk:
@@ -1438,6 +1438,9 @@ static int mcp251x_can_remove(struct spi_device *spi)
mcp251x_power_enable(priv->power, 0);
+ destroy_workqueue(priv->wq);
+ priv->wq = NULL;
+
clk_disable_unprepare(priv->clk);
free_candev(net);
--
2.25.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
2021-05-04 16:01 [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up Schrempf Frieder
@ 2021-05-04 16:24 ` Andy Shevchenko
2021-05-04 18:48 ` Marc Kleine-Budde
2021-05-04 19:25 ` kernel test robot
2 siblings, 0 replies; 8+ messages in thread
From: Andy Shevchenko @ 2021-05-04 16:24 UTC (permalink / raw)
To: Schrempf Frieder
Cc: Marc Kleine-Budde, Vincent Mailhol, Oliver Hartkopp,
Gustavo A. R. Silva, Timo Schlüßler, Tim Harvey,
stable, linux-can, netdev, linux-kernel
On Tue, May 04, 2021 at 06:01:48PM +0200, Schrempf Frieder wrote:
> Since 8ce8c0abcba3 the driver queues work via priv->restart_work when
> resuming after suspend, even when the interface was not previously
> enabled. This causes a null dereference error as the workqueue is
> only allocated and initialized in mcp251x_open().
>
> To fix this we move the workqueue init to mcp251x_can_probe() as
> there is no reason to do it later and repeat it whenever
> mcp251x_open() is called.
AFAIU the IRQ is freed at ->ndo_stop() which is guaranteed to be called before
->remove(). If it's the case, we are fine.
FWIW,
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Fixes: 8ce8c0abcba3 ("can: mcp251x: only reset hardware as required")
> Cc: stable@vger.kernel.org
> Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
> ---
> drivers/net/can/spi/mcp251x.c | 25 ++++++++++++++-----------
> 1 file changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c
> index a57da43680d8..42e8e5791c9f 100644
> --- a/drivers/net/can/spi/mcp251x.c
> +++ b/drivers/net/can/spi/mcp251x.c
> @@ -956,8 +956,6 @@ static int mcp251x_stop(struct net_device *net)
>
> priv->force_quit = 1;
> free_irq(spi->irq, priv);
> - destroy_workqueue(priv->wq);
> - priv->wq = NULL;
>
> mutex_lock(&priv->mcp_lock);
>
> @@ -1224,15 +1222,6 @@ static int mcp251x_open(struct net_device *net)
> goto out_close;
> }
>
> - priv->wq = alloc_workqueue("mcp251x_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM,
> - 0);
> - if (!priv->wq) {
> - ret = -ENOMEM;
> - goto out_clean;
> - }
> - INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
> - INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler);
> -
> ret = mcp251x_hw_wake(spi);
> if (ret)
> goto out_free_wq;
> @@ -1373,6 +1362,15 @@ static int mcp251x_can_probe(struct spi_device *spi)
> if (ret)
> goto out_clk;
>
> + priv->wq = alloc_workqueue("mcp251x_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM,
> + 0);
> + if (!priv->wq) {
> + ret = -ENOMEM;
> + goto out_clk;
> + }
> + INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
> + INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler);
> +
> priv->spi = spi;
> mutex_init(&priv->mcp_lock);
>
> @@ -1417,6 +1415,8 @@ static int mcp251x_can_probe(struct spi_device *spi)
> return 0;
>
> error_probe:
> + destroy_workqueue(priv->wq);
> + priv->wq = NULL;
> mcp251x_power_enable(priv->power, 0);
>
> out_clk:
> @@ -1438,6 +1438,9 @@ static int mcp251x_can_remove(struct spi_device *spi)
>
> mcp251x_power_enable(priv->power, 0);
>
> + destroy_workqueue(priv->wq);
> + priv->wq = NULL;
> +
> clk_disable_unprepare(priv->clk);
>
> free_candev(net);
> --
> 2.25.1
>
>
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
2021-05-04 16:01 [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up Schrempf Frieder
2021-05-04 16:24 ` Andy Shevchenko
@ 2021-05-04 18:48 ` Marc Kleine-Budde
2021-05-04 19:40 ` Schlüßler, Timo
2021-05-04 19:25 ` kernel test robot
2 siblings, 1 reply; 8+ messages in thread
From: Marc Kleine-Budde @ 2021-05-04 18:48 UTC (permalink / raw)
To: Schrempf Frieder
Cc: Vincent Mailhol, Oliver Hartkopp, Gustavo A. R. Silva,
Timo Schlüßler, Andy Shevchenko, Tim Harvey, stable,
linux-can, netdev, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 966 bytes --]
On 04.05.2021 18:01:48, Schrempf Frieder wrote:
> Since 8ce8c0abcba3 the driver queues work via priv->restart_work when
> resuming after suspend, even when the interface was not previously
> enabled. This causes a null dereference error as the workqueue is
> only allocated and initialized in mcp251x_open().
>
> To fix this we move the workqueue init to mcp251x_can_probe() as
> there is no reason to do it later and repeat it whenever
> mcp251x_open() is called.
>
> Fixes: 8ce8c0abcba3 ("can: mcp251x: only reset hardware as required")
> Cc: stable@vger.kernel.org
> Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Added to linux-can/testing.
Thanks,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
2021-05-04 16:01 [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up Schrempf Frieder
@ 2021-05-04 19:25 ` kernel test robot
2021-05-04 18:48 ` Marc Kleine-Budde
2021-05-04 19:25 ` kernel test robot
2 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-05-04 19:25 UTC (permalink / raw)
To: Schrempf Frieder, Marc Kleine-Budde, Vincent Mailhol,
Oliver Hartkopp, Gustavo A. R. Silva, Timo Schlüßler,
Andy Shevchenko, Tim Harvey
Cc: kbuild-all, clang-built-linux, stable, linux-can
[-- Attachment #1: Type: text/plain, Size: 8591 bytes --]
Hi Schrempf,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on mkl-can-next/testing]
[also build test WARNING on v5.12 next-20210504]
[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]
url: https://github.com/0day-ci/linux/commits/Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
base: https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git testing
config: x86_64-randconfig-r012-20210503 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/a6e3fbb55cde65e2254ce0351b92997d14724726
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
git checkout a6e3fbb55cde65e2254ce0351b92997d14724726
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/net/can/spi/mcp251x.c:1244:1: warning: unused label 'out_clean' [-Wunused-label]
out_clean:
^~~~~~~~~~
drivers/net/can/spi/mcp251x.c:1335:17: warning: cast to smaller integer type 'enum mcp251x_model' from 'const void *' [-Wvoid-pointer-to-enum-cast]
priv->model = (enum mcp251x_model)match;
^~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
vim +/out_clean +1244 drivers/net/can/spi/mcp251x.c
e0000163e30eeb drivers/net/can/mcp251x.c Christian Pellegrin 2009-11-02 1193
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1194 static int mcp251x_open(struct net_device *net)
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1195 {
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1196 struct mcp251x_priv *priv = netdev_priv(net);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1197 struct spi_device *spi = priv->spi;
6a07c2305ab200 drivers/net/can/spi/mcp251x.c Phil Elwell 2017-11-14 1198 unsigned long flags = 0;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1199 int ret;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1200
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1201 ret = open_candev(net);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1202 if (ret) {
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1203 dev_err(&spi->dev, "unable to set initial baudrate!\n");
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1204 return ret;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1205 }
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1206
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1207 mutex_lock(&priv->mcp_lock);
1ddff7da0faecf drivers/net/can/mcp251x.c Alexander Shiyan 2013-08-19 1208 mcp251x_power_enable(priv->transceiver, 1);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1209
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1210 priv->force_quit = 0;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1211 priv->tx_skb = NULL;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1212 priv->tx_len = 0;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1213
8de29a5c34a5ff drivers/net/can/spi/mcp251x.c Andy Shevchenko 2019-08-26 1214 if (!dev_fwnode(&spi->dev))
6a07c2305ab200 drivers/net/can/spi/mcp251x.c Phil Elwell 2017-11-14 1215 flags = IRQF_TRIGGER_FALLING;
6a07c2305ab200 drivers/net/can/spi/mcp251x.c Phil Elwell 2017-11-14 1216
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1217 ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist,
3964576307edf4 drivers/net/can/spi/mcp251x.c Alexander Shiyan 2019-01-31 1218 flags | IRQF_ONESHOT, dev_name(&spi->dev),
3964576307edf4 drivers/net/can/spi/mcp251x.c Alexander Shiyan 2019-01-31 1219 priv);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1220 if (ret) {
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1221 dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1222 goto out_close;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1223 }
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1224
8ce8c0abcba314 drivers/net/can/spi/mcp251x.c Timo Schlüßler 2019-10-11 1225 ret = mcp251x_hw_wake(spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1226 if (ret)
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1227 goto out_free_wq;
aa68172235ba7a drivers/net/can/spi/mcp251x.c Marc Kleine-Budde 2017-12-06 1228 ret = mcp251x_setup(net, spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1229 if (ret)
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1230 goto out_free_wq;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1231 ret = mcp251x_set_normal_mode(spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1232 if (ret)
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1233 goto out_free_wq;
eb072a9baebefe drivers/net/can/mcp251x.c Fabio Baltieri 2012-12-18 1234
eb072a9baebefe drivers/net/can/mcp251x.c Fabio Baltieri 2012-12-18 1235 can_led_event(net, CAN_LED_EVENT_OPEN);
eb072a9baebefe drivers/net/can/mcp251x.c Fabio Baltieri 2012-12-18 1236
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1237 netif_wake_queue(net);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1238 mutex_unlock(&priv->mcp_lock);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1239
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1240 return 0;
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1241
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1242 out_free_wq:
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1243 destroy_workqueue(priv->wq);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 @1244 out_clean:
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1245 free_irq(spi->irq, priv);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1246 mcp251x_hw_sleep(spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1247 out_close:
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1248 mcp251x_power_enable(priv->transceiver, 0);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1249 close_candev(net);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1250 mutex_unlock(&priv->mcp_lock);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1251 return ret;
e0000163e30eeb drivers/net/can/mcp251x.c Christian Pellegrin 2009-11-02 1252 }
e0000163e30eeb drivers/net/can/mcp251x.c Christian Pellegrin 2009-11-02 1253
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 32013 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
@ 2021-05-04 19:25 ` kernel test robot
0 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-05-04 19:25 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 8702 bytes --]
Hi Schrempf,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on mkl-can-next/testing]
[also build test WARNING on v5.12 next-20210504]
[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]
url: https://github.com/0day-ci/linux/commits/Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
base: https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git testing
config: x86_64-randconfig-r012-20210503 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# https://github.com/0day-ci/linux/commit/a6e3fbb55cde65e2254ce0351b92997d14724726
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
git checkout a6e3fbb55cde65e2254ce0351b92997d14724726
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/net/can/spi/mcp251x.c:1244:1: warning: unused label 'out_clean' [-Wunused-label]
out_clean:
^~~~~~~~~~
drivers/net/can/spi/mcp251x.c:1335:17: warning: cast to smaller integer type 'enum mcp251x_model' from 'const void *' [-Wvoid-pointer-to-enum-cast]
priv->model = (enum mcp251x_model)match;
^~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
vim +/out_clean +1244 drivers/net/can/spi/mcp251x.c
e0000163e30eeb drivers/net/can/mcp251x.c Christian Pellegrin 2009-11-02 1193
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1194 static int mcp251x_open(struct net_device *net)
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1195 {
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1196 struct mcp251x_priv *priv = netdev_priv(net);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1197 struct spi_device *spi = priv->spi;
6a07c2305ab200 drivers/net/can/spi/mcp251x.c Phil Elwell 2017-11-14 1198 unsigned long flags = 0;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1199 int ret;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1200
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1201 ret = open_candev(net);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1202 if (ret) {
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1203 dev_err(&spi->dev, "unable to set initial baudrate!\n");
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1204 return ret;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1205 }
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1206
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1207 mutex_lock(&priv->mcp_lock);
1ddff7da0faecf drivers/net/can/mcp251x.c Alexander Shiyan 2013-08-19 1208 mcp251x_power_enable(priv->transceiver, 1);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1209
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1210 priv->force_quit = 0;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1211 priv->tx_skb = NULL;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1212 priv->tx_len = 0;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1213
8de29a5c34a5ff drivers/net/can/spi/mcp251x.c Andy Shevchenko 2019-08-26 1214 if (!dev_fwnode(&spi->dev))
6a07c2305ab200 drivers/net/can/spi/mcp251x.c Phil Elwell 2017-11-14 1215 flags = IRQF_TRIGGER_FALLING;
6a07c2305ab200 drivers/net/can/spi/mcp251x.c Phil Elwell 2017-11-14 1216
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1217 ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist,
3964576307edf4 drivers/net/can/spi/mcp251x.c Alexander Shiyan 2019-01-31 1218 flags | IRQF_ONESHOT, dev_name(&spi->dev),
3964576307edf4 drivers/net/can/spi/mcp251x.c Alexander Shiyan 2019-01-31 1219 priv);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1220 if (ret) {
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1221 dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1222 goto out_close;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1223 }
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1224
8ce8c0abcba314 drivers/net/can/spi/mcp251x.c Timo Schlüßler 2019-10-11 1225 ret = mcp251x_hw_wake(spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1226 if (ret)
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1227 goto out_free_wq;
aa68172235ba7a drivers/net/can/spi/mcp251x.c Marc Kleine-Budde 2017-12-06 1228 ret = mcp251x_setup(net, spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1229 if (ret)
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1230 goto out_free_wq;
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1231 ret = mcp251x_set_normal_mode(spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1232 if (ret)
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1233 goto out_free_wq;
eb072a9baebefe drivers/net/can/mcp251x.c Fabio Baltieri 2012-12-18 1234
eb072a9baebefe drivers/net/can/mcp251x.c Fabio Baltieri 2012-12-18 1235 can_led_event(net, CAN_LED_EVENT_OPEN);
eb072a9baebefe drivers/net/can/mcp251x.c Fabio Baltieri 2012-12-18 1236
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1237 netif_wake_queue(net);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1238 mutex_unlock(&priv->mcp_lock);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1239
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1240 return 0;
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1241
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1242 out_free_wq:
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1243 destroy_workqueue(priv->wq);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 @1244 out_clean:
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1245 free_irq(spi->irq, priv);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1246 mcp251x_hw_sleep(spi);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1247 out_close:
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1248 mcp251x_power_enable(priv->transceiver, 0);
375f755899b8fc drivers/net/can/spi/mcp251x.c Weitao Hou 2019-06-25 1249 close_candev(net);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1250 mutex_unlock(&priv->mcp_lock);
bf66f3736a945d drivers/net/can/mcp251x.c Christian Pellegrin 2010-02-03 1251 return ret;
e0000163e30eeb drivers/net/can/mcp251x.c Christian Pellegrin 2009-11-02 1252 }
e0000163e30eeb drivers/net/can/mcp251x.c Christian Pellegrin 2009-11-02 1253
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32013 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
2021-05-04 18:48 ` Marc Kleine-Budde
@ 2021-05-04 19:40 ` Schlüßler, Timo
0 siblings, 0 replies; 8+ messages in thread
From: Schlüßler, Timo @ 2021-05-04 19:40 UTC (permalink / raw)
To: Marc Kleine-Budde
Cc: Schrempf Frieder, Vincent Mailhol, Oliver Hartkopp,
Gustavo A. R. Silva, Andy Shevchenko, Tim Harvey, stable,
linux-can, netdev, linux-kernel
> On 04.05.2021 18:01:48, Schrempf Frieder wrote:
>> Fixes: 8ce8c0abcba3 ("can: mcp251x: only reset hardware as required")
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Thanks for finding and fixing this and sorry for introducing the bug.
Regards
Timo
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
2021-05-04 19:25 ` kernel test robot
@ 2021-05-04 19:54 ` Marc Kleine-Budde
-1 siblings, 0 replies; 8+ messages in thread
From: Marc Kleine-Budde @ 2021-05-04 19:54 UTC (permalink / raw)
To: kernel test robot
Cc: Schrempf Frieder, Vincent Mailhol, Oliver Hartkopp,
Gustavo A. R. Silva, Timo Schlüßler, Andy Shevchenko,
Tim Harvey, kbuild-all, clang-built-linux, stable, linux-can
[-- Attachment #1: Type: text/plain, Size: 3277 bytes --]
On 05.05.2021 03:25:57, kernel test robot wrote:
> Hi Schrempf,
>
> Thank you for the patch! Perhaps something to improve:
>
> [auto build test WARNING on mkl-can-next/testing]
> [also build test WARNING on v5.12 next-20210504]
> [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]
>
> url: https://github.com/0day-ci/linux/commits/Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
> base: https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git testing
> config: x86_64-randconfig-r012-20210503 (attached as .config)
> compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # install x86_64 cross compiling tool for clang build
> # apt-get install binutils-x86-64-linux-gnu
> # https://github.com/0day-ci/linux/commit/a6e3fbb55cde65e2254ce0351b92997d14724726
> git remote add linux-review https://github.com/0day-ci/linux
> git fetch --no-tags linux-review Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
> git checkout a6e3fbb55cde65e2254ce0351b92997d14724726
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All warnings (new ones prefixed by >>):
>
> >> drivers/net/can/spi/mcp251x.c:1244:1: warning: unused label 'out_clean' [-Wunused-label]
> out_clean:
> ^~~~~~~~~~
Thanks, I'll squash that into the original patch.
> drivers/net/can/spi/mcp251x.c:1335:17: warning: cast to smaller integer type 'enum mcp251x_model' from 'const void *' [-Wvoid-pointer-to-enum-cast]
> priv->model = (enum mcp251x_model)match;
> ^~~~~~~~~~~~~~~~~~~~~~~~~
This is technically correct, but we only put the enum into the struct
of_device_id:
| static const struct of_device_id mcp251x_of_match[] = {
| {
| .compatible = "microchip,mcp2510",
| .data = (void *)CAN_MCP251X_MCP2510,
| },
| {
| .compatible = "microchip,mcp2515",
| .data = (void *)CAN_MCP251X_MCP2515,
| },
| {
| .compatible = "microchip,mcp25625",
| .data = (void *)CAN_MCP251X_MCP25625,
| },
| { }
| };
An intermediate cast to kernel_ulong_t silences the warning:
| - priv->model = (enum mcp251x_model)match;
| + priv->model = (enum mcp251x_model)(kernel_ulong_t)match;
I'll send a patch.
regards,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up
@ 2021-05-04 19:54 ` Marc Kleine-Budde
0 siblings, 0 replies; 8+ messages in thread
From: Marc Kleine-Budde @ 2021-05-04 19:54 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 3277 bytes --]
On 05.05.2021 03:25:57, kernel test robot wrote:
> Hi Schrempf,
>
> Thank you for the patch! Perhaps something to improve:
>
> [auto build test WARNING on mkl-can-next/testing]
> [also build test WARNING on v5.12 next-20210504]
> [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]
>
> url: https://github.com/0day-ci/linux/commits/Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
> base: https://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can-next.git testing
> config: x86_64-randconfig-r012-20210503 (attached as .config)
> compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # install x86_64 cross compiling tool for clang build
> # apt-get install binutils-x86-64-linux-gnu
> # https://github.com/0day-ci/linux/commit/a6e3fbb55cde65e2254ce0351b92997d14724726
> git remote add linux-review https://github.com/0day-ci/linux
> git fetch --no-tags linux-review Schrempf-Frieder/can-mcp251x-Fix-resume-from-sleep-before-interface-was-brought-up/20210505-000504
> git checkout a6e3fbb55cde65e2254ce0351b92997d14724726
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=x86_64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All warnings (new ones prefixed by >>):
>
> >> drivers/net/can/spi/mcp251x.c:1244:1: warning: unused label 'out_clean' [-Wunused-label]
> out_clean:
> ^~~~~~~~~~
Thanks, I'll squash that into the original patch.
> drivers/net/can/spi/mcp251x.c:1335:17: warning: cast to smaller integer type 'enum mcp251x_model' from 'const void *' [-Wvoid-pointer-to-enum-cast]
> priv->model = (enum mcp251x_model)match;
> ^~~~~~~~~~~~~~~~~~~~~~~~~
This is technically correct, but we only put the enum into the struct
of_device_id:
| static const struct of_device_id mcp251x_of_match[] = {
| {
| .compatible = "microchip,mcp2510",
| .data = (void *)CAN_MCP251X_MCP2510,
| },
| {
| .compatible = "microchip,mcp2515",
| .data = (void *)CAN_MCP251X_MCP2515,
| },
| {
| .compatible = "microchip,mcp25625",
| .data = (void *)CAN_MCP251X_MCP25625,
| },
| { }
| };
An intermediate cast to kernel_ulong_t silences the warning:
| - priv->model = (enum mcp251x_model)match;
| + priv->model = (enum mcp251x_model)(kernel_ulong_t)match;
I'll send a patch.
regards,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-05-04 19:55 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-04 16:01 [PATCH] can: mcp251x: Fix resume from sleep before interface was brought up Schrempf Frieder
2021-05-04 16:24 ` Andy Shevchenko
2021-05-04 18:48 ` Marc Kleine-Budde
2021-05-04 19:40 ` Schlüßler, Timo
2021-05-04 19:25 ` kernel test robot
2021-05-04 19:25 ` kernel test robot
2021-05-04 19:54 ` Marc Kleine-Budde
2021-05-04 19:54 ` Marc Kleine-Budde
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.