[PATCH] swiotlb uninlinings
Optimise swiotlb.c for size.
text data bss dec hex filename
5009 89 64 5162 142a lib/swiotlb.o-before
4666 89 64 4819 12d3 lib/swiotlb.o-after
For some reason my gcc (4.0.2) doesn't want to tailcall these things.
swiotlb_sync_sg_for_device:
pushq %rbp #
movl $1, %r8d #,
movq %rsp, %rbp #,
call swiotlb_sync_sg #
leave
ret
.size swiotlb_sync_sg_for_device, .-swiotlb_sync_sg_for_device
.section .text.swiotlb_sync_sg_for_cpu,"ax",@progbits
.globl swiotlb_sync_sg_for_cpu
.type swiotlb_sync_sg_for_cpu, @function
swiotlb_sync_sg_for_cpu:
pushq %rbp #
xorl %r8d, %r8d #
movq %rsp, %rbp #,
call swiotlb_sync_sg #
leave
ret
Cc: Jan Beulich <jbeulich@novell.com>
Cc: Andi Kleen <ak@suse.de>
Cc: "Luck, Tony" <tony.luck@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
diff --git a/lib/swiotlb.c b/lib/swiotlb.c
index 50a4380..623a68a 100644
--- a/lib/swiotlb.c
+++ b/lib/swiotlb.c
@@ -313,7 +313,7 @@
#endif
#ifndef SWIOTLB_ARCH_HAS_NEEDS_MAPPING
-static inline int
+static int
address_needs_mapping(struct device *hwdev, dma_addr_t addr)
{
dma_addr_t mask = 0xffffffff;
@@ -672,7 +672,7 @@
* address back to the card, you must first perform a
* swiotlb_dma_sync_for_device, and then the device again owns the buffer
*/
-static inline void
+static void
swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr,
size_t size, int dir, int target)
{
@@ -702,7 +702,7 @@
/*
* Same as above, but for a sub-range of the mapping.
*/
-static inline void
+static void
swiotlb_sync_single_range(struct device *hwdev, dma_addr_t dev_addr,
unsigned long offset, size_t size,
int dir, int target)
@@ -805,7 +805,7 @@
* The same as swiotlb_sync_single_* but for a scatter-gather list, same rules
* and usage.
*/
-static inline void
+static void
swiotlb_sync_sg(struct device *hwdev, struct scatterlist *sg,
int nelems, int dir, int target)
{