* [PATCH] serial: 8250_mid fix calltrace when hotplug 8250 serial controller
@ 2016-11-30 6:25 Song liwei
2016-11-30 16:14 ` Andy Shevchenko
0 siblings, 1 reply; 2+ messages in thread
From: Song liwei @ 2016-11-30 6:25 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Jiri Slaby, Andy Shevchenko, Heikki Krogerus, Chuah Kim Tatt,
Vinod Koul, liwei.song, linux-serial, linux-kernel
From: Liwei Song <liwei.song@windriver.com>
Fix the following Calltrace:
[ 77.768221] WARNING: CPU: 5 PID: 645 at drivers/dma/dmaengine.c:1069 dma_async_device_unregister+0xe2/0xf0
[ 77.775058] dma_async_device_unregister called while 1 clients hold a reference
[ 77.825048] CPU: 5 PID: 645 Comm: sh Not tainted 4.8.8-WR9.0.0.0_standard+ #3
[ 77.832550] Hardware name: Intel Corp. Aspen Cove/Server, BIOS HAVLCRB1.X64.0012.D58.1604140405 04/14/2016
[ 77.840396] 0000000000000000 ffffc90008adbc80 ffffffff81403456 ffffc90008adbcd0
[ 77.848245] 0000000000000000 ffffc90008adbcc0 ffffffff8105e2e1 0000042d08adbf20
[ 77.855934] ffff88046a861c18 ffff88046a85c420 ffffffff820d4200 ffff88046ae92318
[ 77.863601] Call Trace:
[ 77.871113] [<ffffffff81403456>] dump_stack+0x4f/0x69
[ 77.878655] [<ffffffff8105e2e1>] __warn+0xd1/0xf0
[ 77.886102] [<ffffffff8105e34f>] warn_slowpath_fmt+0x4f/0x60
[ 77.893508] [<ffffffff814187a9>] ? find_next_bit+0x19/0x20
[ 77.900730] [<ffffffff814bf83e>] ? dma_channel_rebalance+0x23e/0x270
[ 77.907814] [<ffffffff814bfee2>] dma_async_device_unregister+0xe2/0xf0
[ 77.914992] [<ffffffff814c53aa>] hsu_dma_remove+0x1a/0x60
[ 77.921977] [<ffffffff814ee14c>] dnv_exit+0x1c/0x20
[ 77.928752] [<ffffffff814edff6>] mid8250_remove+0x26/0x40
[ 77.935607] [<ffffffff8144f1b9>] pci_device_remove+0x39/0xc0
[ 77.942292] [<ffffffff8160cfea>] __device_release_driver+0x9a/0x140
[ 77.948836] [<ffffffff8160d0b3>] device_release_driver+0x23/0x30
[ 77.955364] [<ffffffff81447dcc>] pci_stop_bus_device+0x8c/0xa0
[ 77.961769] [<ffffffff81447f0a>] pci_stop_and_remove_bus_device_locked+0x1a/0x30
[ 77.968113] [<ffffffff81450d4e>] remove_store+0x5e/0x70
[ 77.974267] [<ffffffff81607ed8>] dev_attr_store+0x18/0x30
[ 77.980243] [<ffffffff8123006a>] sysfs_kf_write+0x3a/0x50
[ 77.986180] [<ffffffff8122f5ab>] kernfs_fop_write+0x10b/0x190
[ 77.992118] [<ffffffff811bf1c8>] __vfs_write+0x18/0x40
[ 77.998032] [<ffffffff811bfdee>] vfs_write+0xae/0x190
[ 78.003747] [<ffffffff811c1016>] SyS_write+0x46/0xb0
[ 78.009234] [<ffffffff81a4c31b>] entry_SYSCALL_64_fastpath+0x13/0x8f
[ 78.014809] ---[ end trace 0c36dd73b7408eb2 ]---
This happens when the 8250 serial controller is hotplugged as follows:
echo 1 > /sys/bus/pci/devices/0000:00:1a.0/remove
This trace happens due to the serial port still holding a reference when
the dma device is unregistered.
The dma unregister routine will check if there is still a reference exist,
if so it will give the WARNING(here serial port still was not unregister).
To fix this, We need to unregister the serial port first, then do DMA
device unregister to make sure there is no reference when to DMA routine.
Signed-off-by: Liwei Song <liwei.song@windriver.com>
---
drivers/tty/serial/8250/8250_mid.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_mid.c b/drivers/tty/serial/8250/8250_mid.c
index 39c2324..ac013edf 100644
--- a/drivers/tty/serial/8250/8250_mid.c
+++ b/drivers/tty/serial/8250/8250_mid.c
@@ -303,10 +303,10 @@ static void mid8250_remove(struct pci_dev *pdev)
{
struct mid8250 *mid = pci_get_drvdata(pdev);
+ serial8250_unregister_port(mid->line);
+
if (mid->board->exit)
mid->board->exit(mid);
-
- serial8250_unregister_port(mid->line);
}
static const struct mid8250_board pnw_board = {
--
2.9.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] serial: 8250_mid fix calltrace when hotplug 8250 serial controller
2016-11-30 6:25 [PATCH] serial: 8250_mid fix calltrace when hotplug 8250 serial controller Song liwei
@ 2016-11-30 16:14 ` Andy Shevchenko
0 siblings, 0 replies; 2+ messages in thread
From: Andy Shevchenko @ 2016-11-30 16:14 UTC (permalink / raw)
To: Song liwei, Greg Kroah-Hartman
Cc: Jiri Slaby, Heikki Krogerus, Chuah Kim Tatt, Vinod Koul,
linux-serial, linux-kernel
On Wed, 2016-11-30 at 01:25 -0500, Song liwei wrote:
> From: Liwei Song <liwei.song@windriver.com>
>
> Fix the following Calltrace:
> [ 77.768221] WARNING: CPU: 5 PID: 645 at
> drivers/dma/dmaengine.c:1069 dma_async_device_unregister+0xe2/0xf0
> [ 77.775058] dma_async_device_unregister called while 1 clients hold
> a reference
> [ 77.825048] CPU: 5 PID: 645 Comm: sh Not tainted 4.8.8-
> WR9.0.0.0_standard+ #3
> [ 77.832550] Hardware name: Intel Corp. Aspen Cove/Server, BIOS
> HAVLCRB1.X64.0012.D58.1604140405 04/14/2016
> [ 77.840396] 0000000000000000 ffffc90008adbc80 ffffffff81403456
> ffffc90008adbcd0
> [ 77.848245] 0000000000000000 ffffc90008adbcc0 ffffffff8105e2e1
> 0000042d08adbf20
> [ 77.855934] ffff88046a861c18 ffff88046a85c420 ffffffff820d4200
> ffff88046ae92318
> [ 77.863601] Call Trace:
> [ 77.871113] [<ffffffff81403456>] dump_stack+0x4f/0x69
> [ 77.878655] [<ffffffff8105e2e1>] __warn+0xd1/0xf0
> [ 77.886102] [<ffffffff8105e34f>] warn_slowpath_fmt+0x4f/0x60
> [ 77.893508] [<ffffffff814187a9>] ? find_next_bit+0x19/0x20
> [ 77.900730] [<ffffffff814bf83e>] ?
> dma_channel_rebalance+0x23e/0x270
> [ 77.907814] [<ffffffff814bfee2>]
> dma_async_device_unregister+0xe2/0xf0
> [ 77.914992] [<ffffffff814c53aa>] hsu_dma_remove+0x1a/0x60
> [ 77.921977] [<ffffffff814ee14c>] dnv_exit+0x1c/0x20
> [ 77.928752] [<ffffffff814edff6>] mid8250_remove+0x26/0x40
> [ 77.935607] [<ffffffff8144f1b9>] pci_device_remove+0x39/0xc0
> [ 77.942292] [<ffffffff8160cfea>]
> __device_release_driver+0x9a/0x140
> [ 77.948836] [<ffffffff8160d0b3>] device_release_driver+0x23/0x30
> [ 77.955364] [<ffffffff81447dcc>] pci_stop_bus_device+0x8c/0xa0
> [ 77.961769] [<ffffffff81447f0a>]
> pci_stop_and_remove_bus_device_locked+0x1a/0x30
> [ 77.968113] [<ffffffff81450d4e>] remove_store+0x5e/0x70
> [ 77.974267] [<ffffffff81607ed8>] dev_attr_store+0x18/0x30
> [ 77.980243] [<ffffffff8123006a>] sysfs_kf_write+0x3a/0x50
> [ 77.986180] [<ffffffff8122f5ab>] kernfs_fop_write+0x10b/0x190
> [ 77.992118] [<ffffffff811bf1c8>] __vfs_write+0x18/0x40
> [ 77.998032] [<ffffffff811bfdee>] vfs_write+0xae/0x190
> [ 78.003747] [<ffffffff811c1016>] SyS_write+0x46/0xb0
> [ 78.009234] [<ffffffff81a4c31b>]
> entry_SYSCALL_64_fastpath+0x13/0x8f
> [ 78.014809] ---[ end trace 0c36dd73b7408eb2 ]---
>
> This happens when the 8250 serial controller is hotplugged as follows:
> echo 1 > /sys/bus/pci/devices/0000:00:1a.0/remove
>
> This trace happens due to the serial port still holding a reference
> when
> the dma device is unregistered.
> The dma unregister routine will check if there is still a reference
> exist,
> if so it will give the WARNING(here serial port still was not
> unregister).
>
> To fix this, We need to unregister the serial port first, then do DMA
> device unregister to make sure there is no reference when to DMA
> routine.
>
Good catch, thanks!
Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Signed-off-by: Liwei Song <liwei.song@windriver.com>
> ---
> drivers/tty/serial/8250/8250_mid.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/8250/8250_mid.c
> b/drivers/tty/serial/8250/8250_mid.c
> index 39c2324..ac013edf 100644
> --- a/drivers/tty/serial/8250/8250_mid.c
> +++ b/drivers/tty/serial/8250/8250_mid.c
> @@ -303,10 +303,10 @@ static void mid8250_remove(struct pci_dev *pdev)
> {
> struct mid8250 *mid = pci_get_drvdata(pdev);
>
> + serial8250_unregister_port(mid->line);
> +
> if (mid->board->exit)
> mid->board->exit(mid);
> -
> - serial8250_unregister_port(mid->line);
> }
>
> static const struct mid8250_board pnw_board = {
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-11-30 16:14 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-30 6:25 [PATCH] serial: 8250_mid fix calltrace when hotplug 8250 serial controller Song liwei
2016-11-30 16:14 ` Andy Shevchenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).