sparc: Make sparc64 use scalable lib/iommu-common.c functions
In iperf experiments running linux as the Tx side (TCP client) with 10 threads results in a severe performance drop when TSO is disabled, indicating a weakness in the software that can be avoided by using the scalable IOMMU arena DMA allocation. Baseline numbers before this patch: with default settings (TSO enabled) : 9-9.5 Gbps Disable TSO using ethtool- drops badly: 2-3 Gbps. After this patch, iperf client with 10 threads, can give a throughput of at least 8.5 Gbps, even when TSO is disabled. Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
ff7d37a502
commit
bb620c3d39
@@ -16,6 +16,7 @@
|
||||
#define IOPTE_WRITE 0x0000000000000002UL
|
||||
|
||||
#define IOMMU_NUM_CTXS 4096
|
||||
#include <linux/iommu-common.h>
|
||||
|
||||
struct iommu_arena {
|
||||
unsigned long *map;
|
||||
@@ -24,11 +25,10 @@ struct iommu_arena {
|
||||
};
|
||||
|
||||
struct iommu {
|
||||
struct iommu_map_table tbl;
|
||||
spinlock_t lock;
|
||||
struct iommu_arena arena;
|
||||
void (*flush_all)(struct iommu *);
|
||||
u32 dma_addr_mask;
|
||||
iopte_t *page_table;
|
||||
u32 page_table_map_base;
|
||||
unsigned long iommu_control;
|
||||
unsigned long iommu_tsbbase;
|
||||
unsigned long iommu_flush;
|
||||
@@ -40,7 +40,6 @@ struct iommu {
|
||||
unsigned long dummy_page_pa;
|
||||
unsigned long ctx_lowest_free;
|
||||
DECLARE_BITMAP(ctx_bitmap, IOMMU_NUM_CTXS);
|
||||
u32 dma_addr_mask;
|
||||
};
|
||||
|
||||
struct strbuf {
|
||||
|
Reference in New Issue
Block a user