mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 02:16:43 +07:00
dmaengine: Call module_put() after device_free_chan_resources()
The module reference is taken to ensure the callbacks still exist when they are called. If the channel holds the last reference to the module, the module can disappear before device_free_chan_resources() is called and would cause a call into free'd memory. Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Link: https://lore.kernel.org/r/20191216190120.21374-3-logang@deltatee.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
dae7a589c1
commit
686607106f
@ -250,7 +250,6 @@ static void dma_chan_put(struct dma_chan *chan)
|
||||
return;
|
||||
|
||||
chan->client_count--;
|
||||
module_put(dma_chan_to_owner(chan));
|
||||
|
||||
/* This channel is not in use anymore, free it */
|
||||
if (!chan->client_count && chan->device->device_free_chan_resources) {
|
||||
@ -259,6 +258,8 @@ static void dma_chan_put(struct dma_chan *chan)
|
||||
chan->device->device_free_chan_resources(chan);
|
||||
}
|
||||
|
||||
module_put(dma_chan_to_owner(chan));
|
||||
|
||||
/* If the channel is used via a DMA request router, free the mapping */
|
||||
if (chan->router && chan->router->route_free) {
|
||||
chan->router->route_free(chan->router->dev, chan->route_data);
|
||||
|
Loading…
Reference in New Issue
Block a user