All of lore.kernel.org
 help / color / mirror / Atom feed
* Query on dmaengine: add support to dynamic register/unregister of channels patch
@ 2021-01-18  7:54 Radhey Shyam Pandey
  2021-01-18 17:01 ` Dave Jiang
  0 siblings, 1 reply; 2+ messages in thread
From: Radhey Shyam Pandey @ 2021-01-18  7:54 UTC (permalink / raw)
  To: dave.jiang@intel.com, Vinod Koul, Paul Thomas; +Cc: dmaengine@vger.kernel.org

Hi Dave,

I have a query on below patch (commit-e81274cd6b52). It causes regression
in xilinx_dma driver and there is a reported kernel crash on rmmod.

commit e81274cd6b5264809384066e09a5253708822522
Author: Dave Jiang <dave.jiang@intel.com>
Date:   Tue Jan 21 16:43:53 2020 -0700

dmaengine: add support to dynamic register/unregister of channels
    
With the channel registration routines broken out, now add support code to
allow independent registering and unregistering of channels in a hotplug 
fashion.

Crash on the unloading xilinx_dma module is reproducible after e81274cd6b526
mainline commit is added in the 5.6 kernel.

[   42.142705] Internal error: Oops: 96000044 [#1] SMP
[   42.147566] Modules linked in: xilinx_dma(-) clk_xlnx_clock_wizard
uio_pdrv_genirq
[   42.155139] CPU: 1 PID: 2075 Comm: rmmod Not tainted
5.10.1-00026-g3a2e6dd7a05-dirty #192
[   42.163302] Hardware name: Enclustra XU5 SOM (DT)
[   42.167992] pstate: 40000005 (nZcv daif -PAN -UAO -TCO BTYPE=--)
[   42.173996] pc : xilinx_dma_chan_remove+0x74/0xa0 [xilinx_dma]
[   42.179815] lr : xilinx_dma_chan_remove+0x70/0xa0 [xilinx_dma]
[   42.185636] sp : ffffffc01112bca0
[   42.188935] x29: ffffffc01112bca0 x28: ffffff80402ea640


xilinx_dma_chan_remove+0x74/0xa0:
__list_del at ./include/linux/list.h:112 (inlined by)
 __list_del_entry at./include/linux/list.h:135 (inlined by)
list_del at ./include/linux/list.h:146 (inlined by)
xilinx_dma_chan_remove at drivers/dma/xilinx/xilinx_dma.c:2546

Looking into e81274cd6b526 commit - It deletes channel device_node entry.
Same channel device_node entry is also deleted in 
xilinx_dma_chan_remove as a result we see this crash.

@@ -993,12 +1007,22 @@ static
void __dma_async_device_channel_unregister(struct dma_device *device,
                  "%s called while %d clients hold a reference\n",
                  __func__, chan->client_count);
        mutex_lock(&dma_list_mutex);
+       list_del(&chan->device_node);
+       device->chancnt--;

I want to know some background for this change.  In dmaengine driver -
we are adding channel device node entry so deleting it in the exit 
the path should be done in dmaengine driver and not in _channel_unregister?

NOTE:  This issue is reported in https://www.spinics.net/lists/dmaengine/msg24923.html

Thanks,
Radhey

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-01-18 17:02 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-18  7:54 Query on dmaengine: add support to dynamic register/unregister of channels patch Radhey Shyam Pandey
2021-01-18 17:01 ` Dave Jiang

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.