iommu/dma: Use NUMA aware memory allocations in __iommu_dma_alloc_pages()
authorGanapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
Fri, 30 Nov 2018 11:14:00 +0000 (19:14 +0800)
committerJoerg Roedel <jroedel@suse.de>
Tue, 11 Dec 2018 09:29:39 +0000 (10:29 +0100)
commitc4b17afb0a4e8d042320efaf2acf55cb26795f78
treea594945f56effbc4c941ec961c27cc3f1b57c393
parent51eb78098ab79bba8b1df24da2304e61deb74629
iommu/dma: Use NUMA aware memory allocations in __iommu_dma_alloc_pages()

Change function __iommu_dma_alloc_pages() to allocate pages for DMA from
respective device NUMA node. The ternary operator which would be for
alloc_pages_node() is tidied along with this.

The motivation for this change is to have a policy for page allocation
consistent with direct DMA mapping, which attempts to allocate pages local
to the device, as mentioned in [1].

In addition, for certain workloads it has been observed a marginal
performance improvement. The patch caused an observation of 0.9% average
throughput improvement for running tcrypt with HiSilicon crypto engine.

We also include a modification to use kvzalloc() for kzalloc()/vzalloc()
combination.

[1] https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1692998.html

Signed-off-by: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
[JPG: Added kvzalloc(), drop pages ** being device local, remove ternary operator, update message]
Signed-off-by: John Garry <john.garry@huawei.com>
Reviewed-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/dma-iommu.c