nvme: add support for pre-mapped IO buffers
Normally when an IO comes in, NVMe will DMA map the page(s) and setup
the PRP or SG list. When IO completes, the mappings are undone. This
takes time, obviously.
Add support for mapping buffers upfront, by filling in the
mq_ops->dma_map() handler. The ownership of the mappings goes to the
caller, and the caller is responsible for tearing them down.
This is good for a ~4% improvement in peak IOPS without an IOMMU,
much more so with an IOMMU enabled.
Signed-off-by: Jens Axboe <axboe@kernel.dk>