]> xenbits.xensource.com Git - seabios.git/commit
nvme: Build the page list in the existing dma buffer
authorKevin O'Connor <kevin@koconnor.net>
Wed, 19 Jan 2022 18:20:21 +0000 (13:20 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Thu, 27 Jan 2022 16:26:01 +0000 (11:26 -0500)
commitf13b650015eba78725ceaf992b5ad6858fd77769
treea3afa568bdf0f0abcc58ce2245075b9cfc748cd5
parent0a40653f3013a31f3f7aeeddd7633328469a3ad3
nvme: Build the page list in the existing dma buffer

Commit 01f2736cc905d ("nvme: Pass large I/O requests as PRP lists")
introduced multi-page requests using the NVMe PRP mechanism. To store the
list and "first page to write to" hints, it added fields to the NVMe
namespace struct.

Unfortunately, that struct resides in fseg which is read-only at runtime.
While KVM ignores the read-only part and allows writes, real hardware and
TCG adhere to the semantics and ignore writes to the fseg region. The net
effect of that is that reads and writes were always happening on address 0,
unless they went through the bounce buffer logic.

This patch builds the PRP maintenance data in the existing "dma bounce
buffer" and only builds it when needed.

Fixes: 01f2736cc905d ("nvme: Pass large I/O requests as PRP lists")
Reported-by: Matt DeVillier <matt.devillier@gmail.com>
Signed-off-by: Alexander Graf <graf@amazon.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Reviewed-by: Alexander Graf <graf@amazon.com>
src/hw/nvme-int.h
src/hw/nvme.c