aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma
diff options
context:
space:
mode:
authorMaciej Sosnowski <maciej.sosnowski@intel.com>2008-11-07 01:45:52 +0000
committerDavid S. Miller <davem@davemloft.net>2008-11-10 15:00:51 -0800
commitc3d4f44f50b65b0b0290e357f8739cfb3f4bcaca (patch)
treeebc00379b3eeb562a1d810e3ca92ff37bd01bc37 /drivers/dma
parentfd0fcf5c29dd0339c5f5d86eb2cbe9fdad5bcd73 (diff)
downloadkernel_goldelico_gta04-c3d4f44f50b65b0b0290e357f8739cfb3f4bcaca.zip
kernel_goldelico_gta04-c3d4f44f50b65b0b0290e357f8739cfb3f4bcaca.tar.gz
kernel_goldelico_gta04-c3d4f44f50b65b0b0290e357f8739cfb3f4bcaca.tar.bz2
[1/4] I/OAT: fix channel resources free for not allocated channels
If the ioatdma driver is loaded but not used it does not allocate descriptors. Before it frees channel resources it should first be sure that they have been previously allocated. Cc: <stable@kernel.org> Signed-off-by: Maciej Sosnowski <maciej.sosnowski@intel.com> Tested-by: Tom Picard <tom.s.picard@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/ioat_dma.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c
index b0438c4..dbb8bbb 100644
--- a/drivers/dma/ioat_dma.c
+++ b/drivers/dma/ioat_dma.c
@@ -807,6 +807,12 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan)
struct ioat_desc_sw *desc, *_desc;
int in_use_descs = 0;
+ /* Before freeing channel resources first check
+ * if they have been previously allocated for this channel.
+ */
+ if (ioat_chan->desccount == 0)
+ return;
+
tasklet_disable(&ioat_chan->cleanup_task);
ioat_dma_memcpy_cleanup(ioat_chan);
@@ -869,6 +875,7 @@ static void ioat_dma_free_chan_resources(struct dma_chan *chan)
ioat_chan->last_completion = ioat_chan->completion_addr = 0;
ioat_chan->pending = 0;
ioat_chan->dmacount = 0;
+ ioat_chan->desccount = 0;
ioat_chan->watchdog_completion = 0;
ioat_chan->last_compl_desc_addr_hw = 0;
ioat_chan->watchdog_tcp_cookie =