Currently doing modprobe c_can_pci will make kernel complain
"Unbalanced pm_runtime_enable!", this is caused by pm_runtime_enable()
called before pm is initialized in register_candev() and doing so will
also cause it to enable twice.
This fix is similar to 227619c3ff7c, move those pm_enable/disable code to
c_can_platform.
Signed-off-by: Tong Zhang <redacted>
---
drivers/net/can/c_can/c_can.c | 26 ++------------------------
drivers/net/can/c_can/c_can_platform.c | 6 +++++-
2 files changed, 7 insertions(+), 25 deletions(-)
@@ -1335,7 +1323,6 @@ static const struct net_device_ops c_can_netdev_ops = {intregister_c_can_dev(structnet_device*dev){-structc_can_priv*priv=netdev_priv(dev);interr;/* Deactivate pins to prevent DRA7 DCAN IP from being
@@ -1345,28 +1332,19 @@ int register_c_can_dev(struct net_device *dev)*/pinctrl_pm_select_sleep_state(dev->dev.parent);-c_can_pm_runtime_enable(priv);-dev->flags|=IFF_ECHO;/* we support local echo */dev->netdev_ops=&c_can_netdev_ops;err=register_candev(dev);-if(err)-c_can_pm_runtime_disable(priv);-else-devm_can_led_init(dev);-+if(!err)+devm_can_led_init(dev);returnerr;}EXPORT_SYMBOL_GPL(register_c_can_dev);voidunregister_c_can_dev(structnet_device*dev){-structc_can_priv*priv=netdev_priv(dev);-unregister_candev(dev);--c_can_pm_runtime_disable(priv);}EXPORT_SYMBOL_GPL(unregister_c_can_dev);
From: Marc Kleine-Budde <mkl@pengutronix.de> Date: 2021-03-02 05:07:06
On 28.02.2021 23:15:48, Tong Zhang wrote:
Currently doing modprobe c_can_pci will make kernel complain
"Unbalanced pm_runtime_enable!", this is caused by pm_runtime_enable()
called before pm is initialized in register_candev() and doing so will
I don't see where register_candev() is doing any pm related
initialization.
also cause it to enable twice.
This fix is similar to 227619c3ff7c, move those pm_enable/disable code to
c_can_platform.
As I understand 227619c3ff7c ("can: m_can: move runtime PM
enable/disable to m_can_platform"), PCI devices automatically enable PM,
when the "PCI device is added".
Please clarify the above point, otherwise the code looks OK, small
nitpick inline:
@@ -1335,7 +1323,6 @@ static const struct net_device_ops c_can_netdev_ops = {intregister_c_can_dev(structnet_device*dev){-structc_can_priv*priv=netdev_priv(dev);interr;/* Deactivate pins to prevent DRA7 DCAN IP from being
@@ -1345,28 +1332,19 @@ int register_c_can_dev(struct net_device *dev)*/pinctrl_pm_select_sleep_state(dev->dev.parent);-c_can_pm_runtime_enable(priv);-dev->flags|=IFF_ECHO;/* we support local echo */dev->netdev_ops=&c_can_netdev_ops;err=register_candev(dev);-if(err)-c_can_pm_runtime_disable(priv);-else-devm_can_led_init(dev);-+if(!err)+devm_can_led_init(dev);
Please indent with two tabs here.
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 |
Currently doing modprobe c_can_pci will make kernel complain
"Unbalanced pm_runtime_enable!", this is caused by pm_runtime_enable()
called before pm is initialized.
This fix is similar to 227619c3ff7c, move those pm_enable/disable code to
c_can_platform.
Signed-off-by: Tong Zhang <redacted>
---
drivers/net/can/c_can/c_can.c | 24 +-----------------------
drivers/net/can/c_can/c_can_platform.c | 6 +++++-
2 files changed, 6 insertions(+), 24 deletions(-)
@@ -1335,7 +1323,6 @@ static const struct net_device_ops c_can_netdev_ops = {intregister_c_can_dev(structnet_device*dev){-structc_can_priv*priv=netdev_priv(dev);interr;/* Deactivate pins to prevent DRA7 DCAN IP from being
@@ -1345,28 +1332,19 @@ int register_c_can_dev(struct net_device *dev)*/pinctrl_pm_select_sleep_state(dev->dev.parent);-c_can_pm_runtime_enable(priv);-dev->flags|=IFF_ECHO;/* we support local echo */dev->netdev_ops=&c_can_netdev_ops;err=register_candev(dev);-if(err)-c_can_pm_runtime_disable(priv);-else+if(!err)devm_can_led_init(dev);-returnerr;}EXPORT_SYMBOL_GPL(register_c_can_dev);voidunregister_c_can_dev(structnet_device*dev){-structc_can_priv*priv=netdev_priv(dev);-unregister_candev(dev);--c_can_pm_runtime_disable(priv);}EXPORT_SYMBOL_GPL(unregister_c_can_dev);
On Mon, Mar 1, 2021 at 2:49 PM Marc Kleine-Budde [off-list ref] wrote:
On 28.02.2021 23:15:48, Tong Zhang wrote:
quoted
Currently doing modprobe c_can_pci will make kernel complain
"Unbalanced pm_runtime_enable!", this is caused by pm_runtime_enable()
called before pm is initialized in register_candev() and doing so will
I don't see where register_candev() is doing any pm related
initialization.
quoted
also cause it to enable twice.
quoted
This fix is similar to 227619c3ff7c, move those pm_enable/disable code to
c_can_platform.
As I understand 227619c3ff7c ("can: m_can: move runtime PM
enable/disable to m_can_platform"), PCI devices automatically enable PM,
when the "PCI device is added".
Hi Marc,
Thanks for the comments. I thinks you are right -- I was mislead by the trace --
I have corrected the commit log along with the indent fix in v2 patch.
Thanks again for your help,
- Tong
Please clarify the above point, otherwise the code looks OK, small
nitpick inline:
From: Marc Kleine-Budde <mkl@pengutronix.de> Date: 2021-03-02 08:36:28
On 3/2/21 3:55 AM, Tong Zhang wrote:
Currently doing modprobe c_can_pci will make kernel complain
"Unbalanced pm_runtime_enable!", this is caused by pm_runtime_enable()
called before pm is initialized.
This fix is similar to 227619c3ff7c, move those pm_enable/disable code to
c_can_platform.
Signed-off-by: Tong Zhang <redacted>
Applied 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 |
On Mon, Mar 01, 2021 at 09:55:40PM -0500, Tong Zhang wrote:
Currently doing modprobe c_can_pci will make kernel complain
"Unbalanced pm_runtime_enable!", this is caused by pm_runtime_enable()
called before pm is initialized.
This fix is similar to 227619c3ff7c, move those pm_enable/disable code to
c_can_platform.
I can confirm this makes the warning go away on a Congatec Atom board. I
didn't do any further runtime tests.
Tested-by: Uwe Kleine-König <redacted>
Thanks
Uwe
--
Pengutronix e.K. | Uwe Kleine-König |
Industrial Linux Solutions | https://www.pengutronix.de/ |