Skip to content

Commit 2786aae

Browse files
Sebastian Siewiordavem330
Sebastian Siewior
authored andcommitted
net/ti davinci_mdio: don't hold a spin lock while calling pm_runtime
was playing with suspend and run into this: |BUG: sleeping function called from invalid context at drivers/base/power/runtime.c:891 |in_atomic(): 1, irqs_disabled(): 0, pid: 1963, name: bash |6 locks held by bash/1963: |CPU: 0 PID: 1963 Comm: bash Not tainted 3.10.0-rc4+ #50 |[<c0014fdc>] (unwind_backtrace+0x0/0xf8) from [<c0011da4>] (show_stack+0x10/0x14) |[<c0011da4>] (show_stack+0x10/0x14) from [<c02e8680>] (__pm_runtime_idle+0xa4/0xac) |[<c02e8680>] (__pm_runtime_idle+0xa4/0xac) from [<c0341158>] (davinci_mdio_suspend+0x6c/0x9c) |[<c0341158>] (davinci_mdio_suspend+0x6c/0x9c) from [<c02e0628>] (platform_pm_suspend+0x2c/0x54) |[<c02e0628>] (platform_pm_suspend+0x2c/0x54) from [<c02e52bc>] (dpm_run_callback.isra.3+0x2c/0x64) |[<c02e52bc>] (dpm_run_callback.isra.3+0x2c/0x64) from [<c02e57e4>] (__device_suspend+0x100/0x22c) |[<c02e57e4>] (__device_suspend+0x100/0x22c) from [<c02e67e8>] (dpm_suspend+0x68/0x230) |[<c02e67e8>] (dpm_suspend+0x68/0x230) from [<c0072a20>] (suspend_devices_and_enter+0x68/0x350) |[<c0072a20>] (suspend_devices_and_enter+0x68/0x350) from [<c0072f18>] (pm_suspend+0x210/0x24c) |[<c0072f18>] (pm_suspend+0x210/0x24c) from [<c0071c74>] (state_store+0x6c/0xbc) |[<c0071c74>] (state_store+0x6c/0xbc) from [<c02714dc>] (kobj_attr_store+0x14/0x20) |[<c02714dc>] (kobj_attr_store+0x14/0x20) from [<c01341a0>] (sysfs_write_file+0x16c/0x19c) |[<c01341a0>] (sysfs_write_file+0x16c/0x19c) from [<c00ddfe4>] (vfs_write+0xb4/0x190) |[<c00ddfe4>] (vfs_write+0xb4/0x190) from [<c00de3a4>] (SyS_write+0x3c/0x70) |[<c00de3a4>] (SyS_write+0x3c/0x70) from [<c000e2c0>] (ret_fast_syscall+0x0/0x48) I don't see a reason why the pm_runtime call must be under the lock. Further I don't understand why this is a spinlock and not mutex. Cc: Mugunthan V N <[email protected]> Signed-off-by: Sebastian Andrzej Siewior <[email protected]> Acked-by: Mugunthan V N <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ed13998 commit 2786aae

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

drivers/net/ethernet/ti/davinci_mdio.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -449,10 +449,9 @@ static int davinci_mdio_suspend(struct device *dev)
449449
__raw_writel(ctrl, &data->regs->control);
450450
wait_for_idle(data);
451451

452-
pm_runtime_put_sync(data->dev);
453-
454452
data->suspended = true;
455453
spin_unlock(&data->lock);
454+
pm_runtime_put_sync(data->dev);
456455

457456
return 0;
458457
}
@@ -462,9 +461,9 @@ static int davinci_mdio_resume(struct device *dev)
462461
struct davinci_mdio_data *data = dev_get_drvdata(dev);
463462
u32 ctrl;
464463

465-
spin_lock(&data->lock);
466464
pm_runtime_get_sync(data->dev);
467465

466+
spin_lock(&data->lock);
468467
/* restart the scan state machine */
469468
ctrl = __raw_readl(&data->regs->control);
470469
ctrl |= CONTROL_ENABLE;

0 commit comments

Comments
 (0)