Hi Alex,

I was looking at your recent fix for SeaBIOS NVME.  I agree that it is
not valid to write to the f-segment during runtime.  However, I was
struggling to understand the PRP list management in the nvme.c code.

I came up with a different implementation that avoids allocating
another buffer in the "high zone".  Instead, the code in this patch
series builds the page list in the existing "dma bounce buffer".

I don't have a good way to test this on real hardware.  It passes
simple qemu tests (both with and without kvm).  For example:

qemu-system-x86_64 -k en-us -snapshot -L test -chardev stdio,id=seabios -device 
isa-debugcon,iobase=0x402,chardev=seabios -m 512 -drive 
file=dos-drivec,if=none,id=drive0 -device nvme,drive=drive0,serial=nvme-1 -boot 
menu=on

Thanks,
-Kevin


Kevin O'Connor (5):
  nvme: Rework nvme_io_readwrite() to return -1 on error
  nvme: Add nvme_bounce_xfer() helper function
  nvme: Convert nvme_build_prpl() to nvme_prpl_xfer()
  nvme: Pass prp1 and prp2 directly to nvme_io_xfer()
  nvme: Build the page list in the existing dma buffer

 src/hw/nvme-int.h |   7 ---
 src/hw/nvme.c     | 143 ++++++++++++++++++++--------------------------
 2 files changed, 61 insertions(+), 89 deletions(-)

-- 
2.31.1

_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to