iommu/amd: Reduce amount of MMIO when submitting commands
authorTom Lendacky <thomas.lendacky@amd.com>
Mon, 5 Jun 2017 19:52:12 +0000 (14:52 -0500)
committerJoerg Roedel <jroedel@suse.de>
Thu, 8 Jun 2017 12:31:03 +0000 (14:31 +0200)
commitd334a5637dfb53f7d07017afc1e491903b482ef8
tree9f53f94c1126dc3a3e4011a9ae6a04f441cc5c81
parente2f9d45fb452c60c9aaab55ce6f40601f9ec6516
iommu/amd: Reduce amount of MMIO when submitting commands

As newer, higher speed devices are developed, perf data shows that the
amount of MMIO that is performed when submitting commands to the IOMMU
causes performance issues. Currently, the command submission path reads
the command buffer head and tail pointers and then writes the tail
pointer once the command is ready.

The tail pointer is only ever updated by the driver so it can be tracked
by the driver without having to read it from the hardware.

The head pointer is updated by the hardware, but can be read
opportunistically. Reading the head pointer only when it appears that
there might not be room in the command buffer and then re-checking the
available space reduces the number of times the head pointer has to be
read.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd_iommu.c
drivers/iommu/amd_iommu_init.c
drivers/iommu/amd_iommu_types.h