diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-12-20 15:27:41 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-12-20 15:27:41 -0500 |
| commit | eaadcfeb31e959028dfa2cc48741e126e3e15b28 (patch) | |
| tree | 055e115973c57c246291bd262a5d7f014a1ddad2 | |
| parent | 46dd0835cacd149a981254864af9f41e7c841a94 (diff) | |
| parent | 77873803363c9e831fc1d1e6895c084279090c22 (diff) | |
Merge tag 'dmaengine-fixes-3.13-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/dmaengine
Pull dmaengine fixes from Dan Williams:
- deprecation of net_dma to be removed in 3.14
- crash regression fix in pl330 from the dmaengine_unmap rework
- crash regression fix for any channel running raid ops without
CONFIG_ASYNC_TX_DMA from dmaengine_unmap
- memory leak regression in mv_xor from dmaengine_unmap
- build warning regressions in mv_xor, fsldma, ppc4xx, txx9, and
at_hdmac from dmaengine_unmap
- sleep in atomic regression in dma_async_memcpy_pg_to_pg
- new fix in mv_xor for handling channel initialization failures
* tag 'dmaengine-fixes-3.13-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/dmaengine:
net_dma: mark broken
dma: pl330: ensure DMA descriptors are zero-initialised
dmaengine: fix sleep in atomic
dmaengine: mv_xor: fix oops when channels fail to initialise
dma: mv_xor: Use dmaengine_unmap_data for the self-tests
dmaengine: fix enable for high order unmap pools
dma: fix build warnings in txx9
dmatest: fix build warning on mips
dma: fix fsldma build warnings
dma: fix build warnings in ppc4xx
dmaengine: at_hdmac: remove unused function
dma: mv_xor: remove mv_desc_get_dest_addr()
| -rw-r--r-- | drivers/dma/Kconfig | 7 | ||||
| -rw-r--r-- | drivers/dma/at_hdmac_regs.h | 4 | ||||
| -rw-r--r-- | drivers/dma/dmaengine.c | 4 | ||||
| -rw-r--r-- | drivers/dma/dmatest.c | 8 | ||||
| -rw-r--r-- | drivers/dma/fsldma.c | 31 | ||||
| -rw-r--r-- | drivers/dma/mv_xor.c | 101 | ||||
| -rw-r--r-- | drivers/dma/pl330.c | 5 | ||||
| -rw-r--r-- | drivers/dma/ppc4xx/adma.c | 27 | ||||
| -rw-r--r-- | drivers/dma/txx9dmac.c | 1 |
9 files changed, 79 insertions, 109 deletions
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index 446687cc2334..c823daaf9043 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig | |||
| @@ -62,6 +62,7 @@ config INTEL_IOATDMA | |||
| 62 | tristate "Intel I/OAT DMA support" | 62 | tristate "Intel I/OAT DMA support" |
| 63 | depends on PCI && X86 | 63 | depends on PCI && X86 |
| 64 | select DMA_ENGINE | 64 | select DMA_ENGINE |
| 65 | select DMA_ENGINE_RAID | ||
| 65 | select DCA | 66 | select DCA |
| 66 | help | 67 | help |
| 67 | Enable support for the Intel(R) I/OAT DMA engine present | 68 | Enable support for the Intel(R) I/OAT DMA engine present |
| @@ -112,6 +113,7 @@ config MV_XOR | |||
| 112 | bool "Marvell XOR engine support" | 113 | bool "Marvell XOR engine support" |
| 113 | depends on PLAT_ORION | 114 | depends on PLAT_ORION |
| 114 | select DMA_ENGINE | 115 | select DMA_ENGINE |
| 116 | select DMA_ENGINE_RAID | ||
| 115 | select ASYNC_TX_ENABLE_CHANNEL_SWITCH | 117 | select ASYNC_TX_ENABLE_CHANNEL_SWITCH |
| 116 | ---help--- | 118 | ---help--- |
| 117 | Enable support for the Marvell XOR engine. | 119 | Enable support for the Marvell XOR engine. |
| @@ -187,6 +189,7 @@ config AMCC_PPC440SPE_ADMA | |||
| 187 | tristate "AMCC PPC440SPe ADMA support" | 189 | tristate "AMCC PPC440SPe ADMA support" |
| 188 | depends on 440SPe || 440SP | 190 | depends on 440SPe || 440SP |
| 189 | select DMA_ENGINE | 191 | select DMA_ENGINE |
| 192 | select DMA_ENGINE_RAID | ||
| 190 | select ARCH_HAS_ASYNC_TX_FIND_CHANNEL | 193 | select ARCH_HAS_ASYNC_TX_FIND_CHANNEL |
| 191 | select ASYNC_TX_ENABLE_CHANNEL_SWITCH | 194 | select ASYNC_TX_ENABLE_CHANNEL_SWITCH |
| 192 | help | 195 | help |
| @@ -352,6 +355,7 @@ config NET_DMA | |||
| 352 | bool "Network: TCP receive copy offload" | 355 | bool "Network: TCP receive copy offload" |
| 353 | depends on DMA_ENGINE && NET | 356 | depends on DMA_ENGINE && NET |
| 354 | default (INTEL_IOATDMA || FSL_DMA) | 357 | default (INTEL_IOATDMA || FSL_DMA) |
| 358 | depends on BROKEN | ||
| 355 | help | 359 | help |
| 356 | This enables the use of DMA engines in the network stack to | 360 | This enables the use of DMA engines in the network stack to |
| 357 | offload receive copy-to-user operations, freeing CPU cycles. | 361 | offload receive copy-to-user operations, freeing CPU cycles. |
| @@ -377,4 +381,7 @@ config DMATEST | |||
| 377 | Simple DMA test client. Say N unless you're debugging a | 381 | Simple DMA test client. Say N unless you're debugging a |
| 378 | DMA Device driver. | 382 | DMA Device driver. |
| 379 | 383 | ||
| 384 | config DMA_ENGINE_RAID | ||
| 385 | bool | ||
| 386 | |||
| 380 | endif | 387 | endif |
diff --git a/drivers/dma/at_hdmac_regs.h b/drivers/dma/at_hdmac_regs.h index f31d647acdfa..2787aba60c6b 100644 --- a/drivers/dma/at_hdmac_regs.h +++ b/drivers/dma/at_hdmac_regs.h | |||
| @@ -347,10 +347,6 @@ static struct device *chan2dev(struct dma_chan *chan) | |||
| 347 | { | 347 | { |
| 348 | return &chan->dev->device; | 348 | return &chan->dev->device; |
| 349 | } | 349 | } |
| 350 | static struct device *chan2parent(struct dma_chan *chan) | ||
| 351 | { | ||
| 352 | return chan->dev->device.parent; | ||
| 353 | } | ||
| 354 | 350 | ||
| 355 | #if defined(VERBOSE_DEBUG) | 351 | #if defined(VERBOSE_DEBUG) |
| 356 | static void vdbg_dump_regs(struct at_dma_chan *atchan) | 352 | static void vdbg_dump_regs(struct at_dma_chan *atchan) |
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index ea806bdc12ef..ef63b9058f3c 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c | |||
| @@ -912,7 +912,7 @@ struct dmaengine_unmap_pool { | |||
| 912 | #define __UNMAP_POOL(x) { .size = x, .name = "dmaengine-unmap-" __stringify(x) } | 912 | #define __UNMAP_POOL(x) { .size = x, .name = "dmaengine-unmap-" __stringify(x) } |
| 913 | static struct dmaengine_unmap_pool unmap_pool[] = { | 913 | static struct dmaengine_unmap_pool unmap_pool[] = { |
| 914 | __UNMAP_POOL(2), | 914 | __UNMAP_POOL(2), |
| 915 | #if IS_ENABLED(CONFIG_ASYNC_TX_DMA) | 915 | #if IS_ENABLED(CONFIG_DMA_ENGINE_RAID) |
| 916 | __UNMAP_POOL(16), | 916 | __UNMAP_POOL(16), |
| 917 | __UNMAP_POOL(128), | 917 | __UNMAP_POOL(128), |
| 918 | __UNMAP_POOL(256), | 918 | __UNMAP_POOL(256), |
| @@ -1054,7 +1054,7 @@ dma_async_memcpy_pg_to_pg(struct dma_chan *chan, struct page *dest_pg, | |||
| 1054 | dma_cookie_t cookie; | 1054 | dma_cookie_t cookie; |
| 1055 | unsigned long flags; | 1055 | unsigned long flags; |
| 1056 | 1056 | ||
| 1057 | unmap = dmaengine_get_unmap_data(dev->dev, 2, GFP_NOIO); | 1057 | unmap = dmaengine_get_unmap_data(dev->dev, 2, GFP_NOWAIT); |
| 1058 | if (!unmap) | 1058 | if (!unmap) |
| 1059 | return -ENOMEM; | 1059 | return -ENOMEM; |
| 1060 | 1060 | ||
diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c index 20f9a3aaf926..9dfcaf5c1288 100644 --- a/drivers/dma/dmatest.c +++ b/drivers/dma/dmatest.c | |||
| @@ -539,9 +539,9 @@ static int dmatest_func(void *data) | |||
| 539 | 539 | ||
| 540 | um->len = params->buf_size; | 540 | um->len = params->buf_size; |
| 541 | for (i = 0; i < src_cnt; i++) { | 541 | for (i = 0; i < src_cnt; i++) { |
| 542 | unsigned long buf = (unsigned long) thread->srcs[i]; | 542 | void *buf = thread->srcs[i]; |
| 543 | struct page *pg = virt_to_page(buf); | 543 | struct page *pg = virt_to_page(buf); |
| 544 | unsigned pg_off = buf & ~PAGE_MASK; | 544 | unsigned pg_off = (unsigned long) buf & ~PAGE_MASK; |
| 545 | 545 | ||
| 546 | um->addr[i] = dma_map_page(dev->dev, pg, pg_off, | 546 | um->addr[i] = dma_map_page(dev->dev, pg, pg_off, |
| 547 | um->len, DMA_TO_DEVICE); | 547 | um->len, DMA_TO_DEVICE); |
| @@ -559,9 +559,9 @@ static int dmatest_func(void *data) | |||
| 559 | /* map with DMA_BIDIRECTIONAL to force writeback/invalidate */ | 559 | /* map with DMA_BIDIRECTIONAL to force writeback/invalidate */ |
| 560 | dsts = &um->addr[src_cnt]; | 560 | dsts = &um->addr[src_cnt]; |
| 561 | for (i = 0; i < dst_cnt; i++) { | 561 | for (i = 0; i < dst_cnt; i++) { |
| 562 | unsigned long buf = (unsigned long) thread->dsts[i]; | 562 | void *buf = thread->dsts[i]; |
| 563 | struct page *pg = virt_to_page(buf); | 563 | struct page *pg = virt_to_page(buf); |
| 564 | unsigned pg_off = buf & ~PAGE_MASK; | 564 | unsigned pg_off = (unsigned long) buf & ~PAGE_MASK; |
| 565 | 565 | ||
| 566 | dsts[i] = dma_map_page(dev->dev, pg, pg_off, um->len, | 566 | dsts[i] = dma_map_page(dev->dev, pg, pg_off, um->len, |
| 567 | DMA_BIDIRECTIONAL); | 567 | DMA_BIDIRECTIONAL); |
diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c index 7086a16a55f2..f157c6f76b32 100644 --- a/drivers/dma/fsldma.c +++ b/drivers/dma/fsldma.c | |||
| @@ -86,11 +86,6 @@ static void set_desc_cnt(struct fsldma_chan *chan, | |||
| 86 | hw->count = CPU_TO_DMA(chan, count, 32); | 86 | hw->count = CPU_TO_DMA(chan, count, 32); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | static u32 get_desc_cnt(struct fsldma_chan *chan, struct fsl_desc_sw *desc) | ||
| 90 | { | ||
| 91 | return DMA_TO_CPU(chan, desc->hw.count, 32); | ||
| 92 | } | ||
| 93 | |||
| 94 | static void set_desc_src(struct fsldma_chan *chan, | 89 | static void set_desc_src(struct fsldma_chan *chan, |
| 95 | struct fsl_dma_ld_hw *hw, dma_addr_t src) | 90 | struct fsl_dma_ld_hw *hw, dma_addr_t src) |
| 96 | { | 91 | { |
| @@ -101,16 +96,6 @@ static void set_desc_src(struct fsldma_chan *chan, | |||
| 101 | hw->src_addr = CPU_TO_DMA(chan, snoop_bits | src, 64); | 96 | hw->src_addr = CPU_TO_DMA(chan, snoop_bits | src, 64); |
| 102 | } | 97 | } |
| 103 | 98 | ||
| 104 | static dma_addr_t get_desc_src(struct fsldma_chan *chan, | ||
| 105 | struct fsl_desc_sw *desc) | ||
| 106 | { | ||
| 107 | u64 snoop_bits; | ||
| 108 | |||
| 109 | snoop_bits = ((chan->feature & FSL_DMA_IP_MASK) == FSL_DMA_IP_85XX) | ||
| 110 | ? ((u64)FSL_DMA_SATR_SREADTYPE_SNOOP_READ << 32) : 0; | ||
| 111 | return DMA_TO_CPU(chan, desc->hw.src_addr, 64) & ~snoop_bits; | ||
| 112 | } | ||
| 113 | |||
| 114 | static void set_desc_dst(struct fsldma_chan *chan, | 99 | static void set_desc_dst(struct fsldma_chan *chan, |
| 115 | struct fsl_dma_ld_hw *hw, dma_addr_t dst) | 100 | struct fsl_dma_ld_hw *hw, dma_addr_t dst) |
| 116 | { | 101 | { |
| @@ -121,16 +106,6 @@ static void set_desc_dst(struct fsldma_chan *chan, | |||
| 121 | hw->dst_addr = CPU_TO_DMA(chan, snoop_bits | dst, 64); | 106 | hw->dst_addr = CPU_TO_DMA(chan, snoop_bits | dst, 64); |
| 122 | } | 107 | } |
| 123 | 108 | ||
| 124 | static dma_addr_t get_desc_dst(struct fsldma_chan *chan, | ||
| 125 | struct fsl_desc_sw *desc) | ||
| 126 | { | ||
| 127 | u64 snoop_bits; | ||
| 128 | |||
| 129 | snoop_bits = ((chan->feature & FSL_DMA_IP_MASK) == FSL_DMA_IP_85XX) | ||
| 130 | ? ((u64)FSL_DMA_DATR_DWRITETYPE_SNOOP_WRITE << 32) : 0; | ||
| 131 | return DMA_TO_CPU(chan, desc->hw.dst_addr, 64) & ~snoop_bits; | ||
| 132 | } | ||
| 133 | |||
