On 05/11/2016 05:41 AM, Paolo Bonzini wrote: > These are replacements for blk_aio_readv and blk_aio_writev that allow > customization of the data path. They reuse the DMA helpers' DMAIOFunc > callback type, so that the same function can be used in either the > QEMUSGList or the bounce-buffered case. > > This customization will be needed in the next patch to do zero-copy > SG_IO on scsi-block. > > Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> > --- > hw/scsi/scsi-disk.c | 64 > ++++++++++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 56 insertions(+), 8 deletions(-) >
> @@ -339,14 +354,16 @@ static void scsi_do_read(SCSIDiskReq *r, int ret) > if (r->req.sg) { > dma_acct_start(s->qdev.conf.blk, &r->acct, r->req.sg, > BLOCK_ACCT_READ); > r->req.resid -= r->req.sg->size; > - r->req.aiocb = dma_blk_read(s->qdev.conf.blk, r->req.sg, r->sector, > - scsi_dma_complete, r); > + r->req.aiocb = dma_blk_io(blk_get_aio_context(s->qdev.conf.blk), > + r->req.sg, r->sector, > + sdc->dma_readv, r, scsi_dma_complete, r, > + DMA_DIRECTION_FROM_DEVICE); Is it worth considering byte-based rather than sector-based interfaces, as part of this series? > +static > +BlockAIOCB *scsi_dma_readv(int64_t sector_num, > + QEMUIOVector *iov, int nb_sectors, > + BlockCompletionFunc *cb, void *cb_opaque, > + void *opaque) > +{ > + SCSIDiskReq *r = opaque; > + SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev); > + return blk_aio_readv(s->qdev.conf.blk, sector_num, iov, nb_sectors, > + cb, cb_opaque); > +} Especially since commit 7b1deac killed blk_aio_readv() in favor of byte-based blk_aio_preadv(). -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature