kernel: improve dma ops inlining patches
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 37790
This commit is contained in:
parent
e8d6de95b3
commit
e27f67b30a
3 changed files with 157 additions and 40 deletions
|
@ -1,35 +1,20 @@
|
|||
From 151c4e4a06b0b8d16c2fd392bb0e33868b12357f Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@openwrt.org>
|
||||
Subject: [PATCH 1/2] MIPS: remove unnecessary platform dma helper functions
|
||||
Date: Mon, 12 Aug 2013 12:45:52 +0200
|
||||
Subject: [PATCH] MIPS: remove unnecessary platform dma helper functions
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
---
|
||||
--- a/arch/mips/mm/dma-default.c
|
||||
+++ b/arch/mips/mm/dma-default.c
|
||||
@@ -289,7 +289,6 @@ static void mips_dma_sync_single_for_cpu
|
||||
static void mips_dma_sync_single_for_device(struct device *dev,
|
||||
dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
- plat_extra_sync_for_device(dev);
|
||||
if (!plat_device_is_coherent(dev))
|
||||
__dma_sync(dma_addr_to_page(dev, dma_handle),
|
||||
dma_handle & ~PAGE_MASK, size, direction);
|
||||
@@ -323,7 +322,7 @@ static void mips_dma_sync_sg_for_device(
|
||||
arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h | 12 ------------
|
||||
arch/mips/include/asm/mach-generic/dma-coherence.h | 10 ----------
|
||||
arch/mips/include/asm/mach-ip27/dma-coherence.h | 10 ----------
|
||||
arch/mips/include/asm/mach-ip32/dma-coherence.h | 11 -----------
|
||||
arch/mips/include/asm/mach-jazz/dma-coherence.h | 10 ----------
|
||||
arch/mips/include/asm/mach-loongson/dma-coherence.h | 10 ----------
|
||||
arch/mips/include/asm/mach-powertv/dma-coherence.h | 10 ----------
|
||||
arch/mips/mm/dma-default.c | 4 +---
|
||||
8 files changed, 1 insertion(+), 76 deletions(-)
|
||||
|
||||
int mips_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
||||
{
|
||||
- return plat_dma_mapping_error(dev, dma_addr);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
int mips_dma_supported(struct device *dev, u64 mask)
|
||||
@@ -336,7 +335,6 @@ void dma_cache_sync(struct device *dev,
|
||||
{
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
- plat_extra_sync_for_device(dev);
|
||||
if (!plat_device_is_coherent(dev))
|
||||
__dma_sync_virtual(vaddr, size, direction);
|
||||
}
|
||||
--- a/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
|
||||
+++ b/arch/mips/include/asm/mach-cavium-octeon/dma-coherence.h
|
||||
@@ -46,22 +46,11 @@ static inline int plat_dma_supported(str
|
||||
|
@ -170,3 +155,30 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
static inline int plat_device_is_coherent(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
--- a/arch/mips/mm/dma-default.c
|
||||
+++ b/arch/mips/mm/dma-default.c
|
||||
@@ -289,7 +289,6 @@ static void mips_dma_sync_single_for_cpu
|
||||
static void mips_dma_sync_single_for_device(struct device *dev,
|
||||
dma_addr_t dma_handle, size_t size, enum dma_data_direction direction)
|
||||
{
|
||||
- plat_extra_sync_for_device(dev);
|
||||
if (!plat_device_is_coherent(dev))
|
||||
__dma_sync(dma_addr_to_page(dev, dma_handle),
|
||||
dma_handle & ~PAGE_MASK, size, direction);
|
||||
@@ -323,7 +322,7 @@ static void mips_dma_sync_sg_for_device(
|
||||
|
||||
int mips_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
||||
{
|
||||
- return plat_dma_mapping_error(dev, dma_addr);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
int mips_dma_supported(struct device *dev, u64 mask)
|
||||
@@ -336,7 +335,6 @@ void dma_cache_sync(struct device *dev,
|
||||
{
|
||||
BUG_ON(direction == DMA_NONE);
|
||||
|
||||
- plat_extra_sync_for_device(dev);
|
||||
if (!plat_device_is_coherent(dev))
|
||||
__dma_sync_virtual(vaddr, size, direction);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,89 @@
|
|||
From d593f8fc627f8cdaee9c14e4d22b0770a09baaf1 Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@openwrt.org>
|
||||
Date: Thu, 15 Aug 2013 10:47:47 +0200
|
||||
Subject: [PATCH] MIPS: improve checks for noncoherent DMA
|
||||
|
||||
Only one MIPS development board actually supports enabling/disabling DMA
|
||||
coherency at runtime, so it's not a good idea to push the overhead of
|
||||
checking that configuration setting onto every other supported target as
|
||||
well.
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
---
|
||||
arch/mips/Kconfig | 6 +++++-
|
||||
arch/mips/include/asm/dma-coherence.h | 7 +++++++
|
||||
arch/mips/include/asm/mach-generic/dma-coherence.h | 4 ----
|
||||
arch/mips/mm/dma-default.c | 2 ++
|
||||
4 files changed, 14 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -296,7 +296,7 @@ config MIPS_MALTA
|
||||
select CEVT_R4K
|
||||
select CSRC_R4K
|
||||
select CSRC_GIC
|
||||
- select DMA_NONCOHERENT
|
||||
+ select DMA_MAYBE_COHERENT
|
||||
select GENERIC_ISA_DMA
|
||||
select HAVE_PCSPKR_PLATFORM
|
||||
select IRQ_CPU
|
||||
@@ -947,6 +947,10 @@ config FW_CFE
|
||||
config ARCH_DMA_ADDR_T_64BIT
|
||||
def_bool (HIGHMEM && 64BIT_PHYS_ADDR) || 64BIT
|
||||
|
||||
+config DMA_MAYBE_COHERENT
|
||||
+ select DMA_NONCOHERENT
|
||||
+ bool
|
||||
+
|
||||
config DMA_COHERENT
|
||||
bool
|
||||
|
||||
--- a/arch/mips/include/asm/dma-coherence.h
|
||||
+++ b/arch/mips/include/asm/dma-coherence.h
|
||||
@@ -9,7 +9,14 @@
|
||||
#ifndef __ASM_DMA_COHERENCE_H
|
||||
#define __ASM_DMA_COHERENCE_H
|
||||
|
||||
+#ifdef CONFIG_DMA_MAYBE_COHERENT
|
||||
extern int coherentio;
|
||||
extern int hw_coherentio;
|
||||
+#elif defined(CONFIG_DMA_COHERENT)
|
||||
+#define coherentio 1
|
||||
+#else
|
||||
+#define coherentio 0
|
||||
+#endif
|
||||
+#define hw_coherentio 0
|
||||
|
||||
#endif
|
||||
--- a/arch/mips/include/asm/mach-generic/dma-coherence.h
|
||||
+++ b/arch/mips/include/asm/mach-generic/dma-coherence.h
|
||||
@@ -49,11 +49,7 @@ static inline int plat_dma_supported(str
|
||||
|
||||
static inline int plat_device_is_coherent(struct device *dev)
|
||||
{
|
||||
-#ifdef CONFIG_DMA_COHERENT
|
||||
- return 1;
|
||||
-#else
|
||||
return coherentio;
|
||||
-#endif
|
||||
}
|
||||
|
||||
#endif /* __ASM_MACH_GENERIC_DMA_COHERENCE_H */
|
||||
--- a/arch/mips/mm/dma-default.c
|
||||
+++ b/arch/mips/mm/dma-default.c
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include <dma-coherence.h>
|
||||
|
||||
+#ifdef CONFIG_DMA_MAYBE_COHERENT
|
||||
int coherentio = 0; /* User defined DMA coherency from command line. */
|
||||
EXPORT_SYMBOL_GPL(coherentio);
|
||||
int hw_coherentio = 0; /* Actual hardware supported DMA coherency setting. */
|
||||
@@ -41,6 +42,7 @@ static int __init setnocoherentio(char *
|
||||
return 0;
|
||||
}
|
||||
early_param("nocoherentio", setnocoherentio);
|
||||
+#endif
|
||||
|
||||
static inline struct page *dma_addr_to_page(struct device *dev,
|
||||
dma_addr_t dma_addr)
|
|
@ -1,5 +1,7 @@
|
|||
From 2c58080407554e1bac8fd50d23cb02420524caed Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@openwrt.org>
|
||||
Subject: [PATCH 2/2] MIPS: partially inline dma ops
|
||||
Date: Mon, 12 Aug 2013 12:50:22 +0200
|
||||
Subject: [PATCH] MIPS: partially inline dma ops
|
||||
|
||||
Several DMA ops are no-op on many platforms, and the indirection through
|
||||
the mips_dma_map_ops function table is causing the compiler to emit
|
||||
|
@ -10,9 +12,14 @@ based system), and also slightly reduces code size of a few drivers.
|
|||
|
||||
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
||||
---
|
||||
arch/mips/Kconfig | 4 +
|
||||
arch/mips/include/asm/dma-mapping.h | 360 +++++++++++++++++++++++++++++++++++-
|
||||
arch/mips/mm/dma-default.c | 163 ++--------------
|
||||
3 files changed, 373 insertions(+), 154 deletions(-)
|
||||
|
||||
--- a/arch/mips/Kconfig
|
||||
+++ b/arch/mips/Kconfig
|
||||
@@ -1426,6 +1426,7 @@ config CPU_CAVIUM_OCTEON
|
||||
@@ -1430,6 +1430,7 @@ config CPU_CAVIUM_OCTEON
|
||||
select LIBFDT
|
||||
select USE_OF
|
||||
select USB_EHCI_BIG_ENDIAN_MMIO
|
||||
|
@ -20,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
help
|
||||
The Cavium Octeon processor is a highly integrated chip containing
|
||||
many ethernet hardware widgets for networking tasks. The processor
|
||||
@@ -1646,6 +1647,9 @@ config SYS_HAS_CPU_XLR
|
||||
@@ -1650,6 +1651,9 @@ config SYS_HAS_CPU_XLR
|
||||
config SYS_HAS_CPU_XLP
|
||||
bool
|
||||
|
||||
|
@ -444,9 +451,18 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
}
|
||||
--- a/arch/mips/mm/dma-default.c
|
||||
+++ b/arch/mips/mm/dma-default.c
|
||||
@@ -42,26 +42,6 @@ static int __init setnocoherentio(char *
|
||||
}
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
#ifdef CONFIG_DMA_MAYBE_COHERENT
|
||||
int coherentio = 0; /* User defined DMA coherency from command line. */
|
||||
-EXPORT_SYMBOL_GPL(coherentio);
|
||||
+EXPORT_SYMBOL(coherentio);
|
||||
int hw_coherentio = 0; /* Actual hardware supported DMA coherency setting. */
|
||||
|
||||
static int __init setcoherentio(char *str)
|
||||
@@ -44,26 +44,6 @@ static int __init setnocoherentio(char *
|
||||
early_param("nocoherentio", setnocoherentio);
|
||||
#endif
|
||||
|
||||
-static inline struct page *dma_addr_to_page(struct device *dev,
|
||||
- dma_addr_t dma_addr)
|
||||
|
@ -471,7 +487,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp)
|
||||
{
|
||||
gfp_t dma_flag;
|
||||
@@ -117,8 +97,9 @@ void *dma_alloc_noncoherent(struct devic
|
||||
@@ -119,8 +99,9 @@ void *dma_alloc_noncoherent(struct devic
|
||||
}
|
||||
EXPORT_SYMBOL(dma_alloc_noncoherent);
|
||||
|
||||
|
@ -483,7 +499,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
{
|
||||
void *ret;
|
||||
|
||||
@@ -142,6 +123,7 @@ static void *mips_dma_alloc_coherent(str
|
||||
@@ -144,6 +125,7 @@ static void *mips_dma_alloc_coherent(str
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -491,7 +507,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
|
||||
|
||||
void dma_free_noncoherent(struct device *dev, size_t size, void *vaddr,
|
||||
@@ -152,8 +134,8 @@ void dma_free_noncoherent(struct device
|
||||
@@ -154,8 +136,8 @@ void dma_free_noncoherent(struct device
|
||||
}
|
||||
EXPORT_SYMBOL(dma_free_noncoherent);
|
||||
|
||||
|
@ -502,7 +518,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
{
|
||||
unsigned long addr = (unsigned long) vaddr;
|
||||
int order = get_order(size);
|
||||
@@ -168,6 +150,7 @@ static void mips_dma_free_coherent(struc
|
||||
@@ -170,6 +152,7 @@ static void mips_dma_free_coherent(struc
|
||||
|
||||
free_pages(addr, get_order(size));
|
||||
}
|
||||
|
@ -510,7 +526,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
|
||||
static inline void __dma_sync_virtual(void *addr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
@@ -196,8 +179,8 @@ static inline void __dma_sync_virtual(vo
|
||||
@@ -198,8 +181,8 @@ static inline void __dma_sync_virtual(vo
|
||||
* If highmem is not configured then the bulk of this loop gets
|
||||
* optimized out.
|
||||
*/
|
||||
|
@ -521,7 +537,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
{
|
||||
size_t left = size;
|
||||
|
||||
@@ -226,109 +209,7 @@ static inline void __dma_sync(struct pag
|
||||
@@ -228,109 +211,7 @@ static inline void __dma_sync(struct pag
|
||||
left -= len;
|
||||
} while (left);
|
||||
}
|
||||
|
@ -632,7 +648,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
|
|||
|
||||
void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
|
||||
enum dma_data_direction direction)
|
||||
@@ -341,23 +222,10 @@ void dma_cache_sync(struct device *dev,
|
||||
@@ -343,23 +224,10 @@ void dma_cache_sync(struct device *dev,
|
||||
|
||||
EXPORT_SYMBOL(dma_cache_sync);
|
||||
|
Loading…
Reference in a new issue