From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:41923) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SCXQI-0000rA-A7 for qemu-devel@nongnu.org; Tue, 27 Mar 2012 10:31:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SCXPk-0004xk-M6 for qemu-devel@nongnu.org; Tue, 27 Mar 2012 10:30:57 -0400 Message-ID: <4F71CEF4.1020306@suse.de> Date: Tue, 27 Mar 2012 16:30:12 +0200 From: =?ISO-8859-15?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1332816143-4989-1-git-send-email-david@gibson.dropbear.id.au> In-Reply-To: <1332816143-4989-1-git-send-email-david@gibson.dropbear.id.au> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] Use DMADirection type for dma_bdrv_io List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: kwolf@redhat.com, aliguori@us.ibm.com, mst@redhat.com, Alexander Graf , qemu-devel@nongnu.org, qemu-ppc Am 27.03.2012 04:42, schrieb David Gibson: > Currently dma_bdrv_io() takes a 'to_dev' boolean parameter to > determine the direction of DMA it is emulating. We already have a > DMADirection enum designed specifically to encode DMA directions. > This patch uses it for dma_bdrv_io() as well. This involves removing > the DMADirection definition from the #ifdef it was inside, but since th= at > only existed to protect the definition of dma_addr_t from places where > config.h is not included, there wasn't any reason for it to be there in > the first place. >=20 > Cc: Kevin Wolf >=20 > Signed-off-by: David Gibson Including for ppc macio in absence of Alex, Reviewed-by: Andreas F=E4rber (Expecting this to go through IDE/Kevin's tree.) Andreas > --- > dma-helpers.c | 20 ++++++++++++-------- > dma.h | 12 ++++++------ > hw/ide/core.c | 3 ++- > hw/ide/macio.c | 3 ++- > 4 files changed, 22 insertions(+), 16 deletions(-) >=20 > diff --git a/dma-helpers.c b/dma-helpers.c > index c29ea6d..5f19a85 100644 > --- a/dma-helpers.c > +++ b/dma-helpers.c > @@ -42,7 +42,7 @@ typedef struct { > BlockDriverAIOCB *acb; > QEMUSGList *sg; > uint64_t sector_num; > - bool to_dev; > + DMADirection dir; > bool in_cancel; > int sg_cur_index; > dma_addr_t sg_cur_byte; > @@ -76,7 +76,8 @@ static void dma_bdrv_unmap(DMAAIOCB *dbs) > =20 > for (i =3D 0; i < dbs->iov.niov; ++i) { > cpu_physical_memory_unmap(dbs->iov.iov[i].iov_base, > - dbs->iov.iov[i].iov_len, !dbs->to_de= v, > + dbs->iov.iov[i].iov_len, > + dbs->dir !=3D DMA_DIRECTION_TO_DEVIC= E, > dbs->iov.iov[i].iov_len); > } > qemu_iovec_reset(&dbs->iov); > @@ -123,7 +124,8 @@ static void dma_bdrv_cb(void *opaque, int ret) > while (dbs->sg_cur_index < dbs->sg->nsg) { > cur_addr =3D dbs->sg->sg[dbs->sg_cur_index].base + dbs->sg_cur= _byte; > cur_len =3D dbs->sg->sg[dbs->sg_cur_index].len - dbs->sg_cur_b= yte; > - mem =3D cpu_physical_memory_map(cur_addr, &cur_len, !dbs->to_d= ev); > + mem =3D cpu_physical_memory_map(cur_addr, &cur_len, > + dbs->dir !=3D DMA_DIRECTION_TO_D= EVICE); > if (!mem) > break; > qemu_iovec_add(&dbs->iov, mem, cur_len); > @@ -170,11 +172,11 @@ static AIOPool dma_aio_pool =3D { > BlockDriverAIOCB *dma_bdrv_io( > BlockDriverState *bs, QEMUSGList *sg, uint64_t sector_num, > DMAIOFunc *io_func, BlockDriverCompletionFunc *cb, > - void *opaque, bool to_dev) > + void *opaque, DMADirection dir) > { > DMAAIOCB *dbs =3D qemu_aio_get(&dma_aio_pool, bs, cb, opaque); > =20 > - trace_dma_bdrv_io(dbs, bs, sector_num, to_dev); > + trace_dma_bdrv_io(dbs, bs, sector_num, (dir =3D=3D DMA_DIRECTION_T= O_DEVICE)); > =20 > dbs->acb =3D NULL; > dbs->bs =3D bs; > @@ -182,7 +184,7 @@ BlockDriverAIOCB *dma_bdrv_io( > dbs->sector_num =3D sector_num; > dbs->sg_cur_index =3D 0; > dbs->sg_cur_byte =3D 0; > - dbs->to_dev =3D to_dev; > + dbs->dir =3D dir; > dbs->io_func =3D io_func; > dbs->bh =3D NULL; > qemu_iovec_init(&dbs->iov, sg->nsg); > @@ -195,14 +197,16 @@ BlockDriverAIOCB *dma_bdrv_read(BlockDriverState = *bs, > QEMUSGList *sg, uint64_t sector, > void (*cb)(void *opaque, int ret), voi= d *opaque) > { > - return dma_bdrv_io(bs, sg, sector, bdrv_aio_readv, cb, opaque, fal= se); > + return dma_bdrv_io(bs, sg, sector, bdrv_aio_readv, cb, opaque, > + DMA_DIRECTION_FROM_DEVICE); > } > =20 > BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs, > QEMUSGList *sg, uint64_t sector, > void (*cb)(void *opaque, int ret), vo= id *opaque) > { > - return dma_bdrv_io(bs, sg, sector, bdrv_aio_writev, cb, opaque, tr= ue); > + return dma_bdrv_io(bs, sg, sector, bdrv_aio_writev, cb, opaque, > + DMA_DIRECTION_TO_DEVICE); > } > =20 > =20 > diff --git a/dma.h b/dma.h > index 20e86d2..05ac325 100644 > --- a/dma.h > +++ b/dma.h > @@ -17,6 +17,11 @@ > =20 > typedef struct ScatterGatherEntry ScatterGatherEntry; > =20 > +typedef enum { > + DMA_DIRECTION_TO_DEVICE =3D 0, > + DMA_DIRECTION_FROM_DEVICE =3D 1, > +} DMADirection; > + > struct QEMUSGList { > ScatterGatherEntry *sg; > int nsg; > @@ -29,11 +34,6 @@ typedef target_phys_addr_t dma_addr_t; > =20 > #define DMA_ADDR_FMT TARGET_FMT_plx > =20 > -typedef enum { > - DMA_DIRECTION_TO_DEVICE =3D 0, > - DMA_DIRECTION_FROM_DEVICE =3D 1, > -} DMADirection; > - > struct ScatterGatherEntry { > dma_addr_t base; > dma_addr_t len; > @@ -51,7 +51,7 @@ typedef BlockDriverAIOCB *DMAIOFunc(BlockDriverState = *bs, int64_t sector_num, > BlockDriverAIOCB *dma_bdrv_io(BlockDriverState *bs, > QEMUSGList *sg, uint64_t sector_num, > DMAIOFunc *io_func, BlockDriverCompletio= nFunc *cb, > - void *opaque, bool to_dev); > + void *opaque, DMADirection dir); > BlockDriverAIOCB *dma_bdrv_read(BlockDriverState *bs, > QEMUSGList *sg, uint64_t sector, > BlockDriverCompletionFunc *cb, void *o= paque); > diff --git a/hw/ide/core.c b/hw/ide/core.c > index 4d568ac..43da841 100644 > --- a/hw/ide/core.c > +++ b/hw/ide/core.c > @@ -604,7 +604,8 @@ void ide_dma_cb(void *opaque, int ret) > break; > case IDE_DMA_TRIM: > s->bus->dma->aiocb =3D dma_bdrv_io(s->bs, &s->sg, sector_num, > - ide_issue_trim, ide_dma_cb, s= , true); > + ide_issue_trim, ide_dma_cb, s= , > + DMA_DIRECTION_TO_DEVICE); > break; > } > return; > diff --git a/hw/ide/macio.c b/hw/ide/macio.c > index a4df244..7b38d9e 100644 > --- a/hw/ide/macio.c > +++ b/hw/ide/macio.c > @@ -149,7 +149,8 @@ static void pmac_ide_transfer_cb(void *opaque, int = ret) > break; > case IDE_DMA_TRIM: > m->aiocb =3D dma_bdrv_io(s->bs, &s->sg, sector_num, > - ide_issue_trim, pmac_ide_transfer_cb, s= , true); > + ide_issue_trim, pmac_ide_transfer_cb, s= , > + DMA_DIRECTION_TO_DEVICE); > break; > } > return; --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg