[RFC] avoid indirect calls for DMA direct mappings v2

From: Christoph Hellwig
Date: Fri Dec 07 2018 - 14:07:43 EST


Hi all,

a while ago Jesper reported major performance regressions due to the
spectre v2 mitigations in his XDP forwarding workloads. A large part
of that is due to the DMA mapping API indirect calls.

It turns out that the most common implementation of the DMA API is the
direct mapping case, and now that we have merged almost all duplicate
implementations of that into a single generic one is easily feasily to
direct calls for this fast path.

This series adds consolidate the DMA mapping code by merging the
swiotlb case into the dma direct case, and then treats NULL dma_ops
as an indicator that that we should directly call the direct mapping
case. This recovers a large part of the retpoline induces XDP slowdown.

This works is based on the dma-mapping tree, so you probably want to
want this git tree for testing:

git://git.infradead.org/users/hch/misc.git dma-direct-calls.2

Gitweb:

http://git.infradead.org/users/hch/misc.git/shortlog/refs/heads/dma-direct-calls.2

Changes since v1:
- now also includes all the prep patches relative to the dma-mapping
for-next tree
- move various slow path functions out of line
- use a NULL dma ops as the indicate to use the direct mapping path
- remove dma_direct_ops now that we always call it without the indirection
- move the dummy dma ops to common code
- explicitly st the dummy dma ops for devices that are indicates as not
DMA capable by firmware