All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: linux-ide@vger.kernel.org
Subject: Re: [PATCH] fix dma_unmap_sg misuse
Date: Wed, 18 Feb 2009 21:59:49 +0100	[thread overview]
Message-ID: <200902182159.49980.bzolnier@gmail.com> (raw)
In-Reply-To: <20090217133432M.fujita.tomonori@lab.ntt.co.jp>

On Tuesday 17 February 2009, FUJITA Tomonori wrote:
> Looks like that libata misuses dma_unmap_sg though I'm not familiar
> with libata so I might completely misunderstand something.
> 
> =
> From: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
> Subject: [PATCH] fix dma_unmap_sg misuse
> 
> DMA-mapping.txt says:
> 
> To unmap a scatterlist, just call:
> 
> 	pci_unmap_sg(pdev, sglist, nents, direction);
> 
> Again, make sure DMA activity has already finished.
> 
> PLEASE NOTE:  The 'nents' argument to the pci_unmap_sg call must be
>               the _same_ one you passed into the pci_map_sg call,
> 	      it should _NOT_ be the 'count' value _returned_ from the
>               pci_map_sg call.

This is correct and other subsystems (SCSI, IDE) are compliant with it.

> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>

Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

> ---
>  drivers/ata/libata-core.c |    4 ++--
>  include/linux/libata.h    |    1 +
>  2 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
> index 9fbf059..5e324ce 100644
> --- a/drivers/ata/libata-core.c
> +++ b/drivers/ata/libata-core.c
> @@ -4612,7 +4612,7 @@ void ata_sg_clean(struct ata_queued_cmd *qc)
>  	VPRINTK("unmapping %u sg elements\n", qc->n_elem);
>  
>  	if (qc->n_elem)
> -		dma_unmap_sg(ap->dev, sg, qc->n_elem, dir);
> +		dma_unmap_sg(ap->dev, sg, qc->orig_n_elem, dir);
>  
>  	qc->flags &= ~ATA_QCFLAG_DMAMAP;
>  	qc->sg = NULL;
> @@ -4727,7 +4727,7 @@ static int ata_sg_setup(struct ata_queued_cmd *qc)
>  		return -1;
>  
>  	DPRINTK("%d sg elements mapped\n", n_elem);
> -
> +	qc->orig_n_elem = qc->n_elem;
>  	qc->n_elem = n_elem;
>  	qc->flags |= ATA_QCFLAG_DMAMAP;
>  
> diff --git a/include/linux/libata.h b/include/linux/libata.h
> index 5577ea8..2de827d 100644
> --- a/include/linux/libata.h
> +++ b/include/linux/libata.h
> @@ -530,6 +530,7 @@ struct ata_queued_cmd {
>  	unsigned long		flags;		/* ATA_QCFLAG_xxx */
>  	unsigned int		tag;
>  	unsigned int		n_elem;
> +	unsigned int		orig_n_elem;
>  
>  	int			dma_dir;

  reply	other threads:[~2009-02-18 20:59 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-17  4:35 [PATCH] fix dma_unmap_sg misuse FUJITA Tomonori
2009-02-18 20:59 ` Bartlomiej Zolnierkiewicz [this message]
2009-02-19 13:04   ` FUJITA Tomonori
2009-02-19 16:06     ` Bartlomiej Zolnierkiewicz
2009-02-18 22:12 ` Chuck Ebbert
2009-02-19 13:09   ` FUJITA Tomonori
2009-02-19  9:03 ` Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200902182159.49980.bzolnier@gmail.com \
    --to=bzolnier@gmail.com \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=linux-ide@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.