linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <htejun@gmail.com>
To: Robert Hancock <hancockr@shaw.ca>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	ide <linux-ide@vger.kernel.org>, Jeff Garzik <jeff@garzik.org>
Subject: Re: [PATCH 1/2] sata_nv: don't use legacy DMA in ADMA mode
Date: Thu, 15 Nov 2007 10:43:35 +0900	[thread overview]
Message-ID: <473BA447.6090909@gmail.com> (raw)
In-Reply-To: <473A7628.3010907@shaw.ca>

Hello,

Robert Hancock wrote:
> We need to run any DMA command with result taskfile requested in ADMA mode
> when the port is in ADMA mode, otherwise it may try to use the legacy DMA engine
> in ADMA mode which is not allowed. Enforce this with BUG_ON() since data
> corruption could potentially result if this happened.
> 
> Signed-off-by: Robert Hancock <hancockr@shaw.ca>
> 
> --- linux-2.6.24-rc1-git10/drivers/ata/sata_nv.c	2007-11-01 20:01:32.000000000 -0600
> +++ linux-2.6.24-rc1-git10edit/drivers/ata/sata_nv.c	2007-11-13 19:01:09.000000000 -0600
> @@ -791,11 +797,13 @@
>  
>  static void nv_adma_tf_read(struct ata_port *ap, struct ata_taskfile *tf)
>  {
> -	/* Since commands where a result TF is requested are not
> -	   executed in ADMA mode, the only time this function will be called
> -	   in ADMA mode will be if a command fails. In this case we
> -	   don't care about going into register mode with ADMA commands
> -	   pending, as the commands will all shortly be aborted anyway. */
> +	/* Other than when internal or pass-through commands are executed,
> +	   the only time this function will be called in ADMA mode will be
> +	   if a command fails. In the failure case we don't care about going
> +	   into register mode with ADMA commands pending, as the commands will
> +	   all shortly be aborted anyway. We assume that NCQ commands are not
> +	   issued via passthrough and so this will not abort any commands in
> +	   that case. */
>  	nv_adma_register_mode(ap);

So, now if an ATA DMA command is issued w/ RESULT_TF set, it's issued
using ADMA.  Then when nv_adma_tf_read() is called on success path, it
switches into register mode and read TF which is okay as long as there's
no other ADMA commands in flight and that's why you wrote about not
issuing NCQ commands via NCQ.  Am I understanding it correctly?

If so, can you please add that switching into register mode is okay as
long as there's no other ADMA commands in flight and add
WARN_ON((qc->flags & ATA_QCFLAG_RESULT_TF) && link->sactive)?

Thanks.

-- 
tejun

  reply	other threads:[~2007-11-15  1:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-14  4:14 [PATCH 1/2] sata_nv: don't use legacy DMA in ADMA mode Robert Hancock
2007-11-15  1:43 ` Tejun Heo [this message]
2007-11-15  1:46   ` Tejun Heo
2007-11-21  0:59     ` Robert Hancock
2007-11-22  0:48       ` 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=473BA447.6090909@gmail.com \
    --to=htejun@gmail.com \
    --cc=hancockr@shaw.ca \
    --cc=jeff@garzik.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).