On 12/23/21 12:55, Philippe Mathieu-Daudé wrote: > Since the previous commit, dma_buf_rw() returns a MemTxResult > type. Do not discard it, return it to the caller. > > Since both dma_buf_read/dma_buf_write functions were previously > returning the QEMUSGList size not consumed, add an extra argument > where the unconsummed size can be stored. > > Update the few callers. > > Reviewed-by: Klaus Jensen <k.jen...@samsung.com> > Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> > --- > include/sysemu/dma.h | 6 ++++-- > hw/ide/ahci.c | 8 ++++---- > hw/nvme/ctrl.c | 4 ++-- > hw/scsi/megasas.c | 48 ++++++++++++++++++++++++++++++------------- > hw/scsi/scsi-bus.c | 4 ++-- > softmmu/dma-helpers.c | 18 ++++++---------- > 6 files changed, 52 insertions(+), 36 deletions(-) > > diff --git a/include/sysemu/dma.h b/include/sysemu/dma.h > index fd8f16003dd..d11c1d794f9 100644 > --- a/include/sysemu/dma.h > +++ b/include/sysemu/dma.h > @@ -302,8 +302,10 @@ BlockAIOCB *dma_blk_read(BlockBackend *blk, > BlockAIOCB *dma_blk_write(BlockBackend *blk, > QEMUSGList *sg, uint64_t offset, uint32_t align, > BlockCompletionFunc *cb, void *opaque); > -uint64_t dma_buf_read(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs > attrs); > -uint64_t dma_buf_write(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs > attrs); > +MemTxResult dma_buf_read(void *ptr, int32_t len, uint64_t *residp, > + QEMUSGList *sg, MemTxAttrs attrs); > +MemTxResult dma_buf_write(void *ptr, int32_t len, uint64_t *residp, > + QEMUSGList *sg, MemTxAttrs attrs); >
This fails on 32-bit host when passing a size_t variable as residp argument. I'll work a "clean" fix later. Meanwhile discarding this patch. > diff --git a/softmmu/dma-helpers.c b/softmmu/dma-helpers.c > index b0be1564797..498303157e9 100644 > --- a/softmmu/dma-helpers.c > +++ b/softmmu/dma-helpers.c > @@ -321,22 +321,16 @@ static MemTxResult dma_buf_rw(void *buf, int32_t len, > uint64_t *residp, > return res; > } > > -uint64_t dma_buf_read(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs > attrs) > +MemTxResult dma_buf_read(void *ptr, int32_t len, uint64_t *residp, > + QEMUSGList *sg, MemTxAttrs attrs) > { > - uint64_t resid; > - > - dma_buf_rw(ptr, len, &resid, sg, DMA_DIRECTION_FROM_DEVICE, attrs); > - > - return resid; > + return dma_buf_rw(ptr, len, residp, sg, DMA_DIRECTION_FROM_DEVICE, > attrs); > } > > -uint64_t dma_buf_write(void *ptr, int32_t len, QEMUSGList *sg, MemTxAttrs > attrs) > +MemTxResult dma_buf_write(void *ptr, int32_t len, uint64_t *residp, > + QEMUSGList *sg, MemTxAttrs attrs) > { > - uint64_t resid; > - > - dma_buf_rw(ptr, len, &resid, sg, DMA_DIRECTION_TO_DEVICE, attrs); > - > - return resid; > + return dma_buf_rw(ptr, len, residp, sg, DMA_DIRECTION_TO_DEVICE, attrs); > } > > void dma_acct_start(BlockBackend *blk, BlockAcctCookie *cookie,