All of lore.kernel.org
 help / color / mirror / Atom feed
From: Albert Lee <albertcc@tw.ibm.com>
To: Tejun Heo <htejun@gmail.com>
Cc: jeff@garzik.org, linux-ide@vger.kernel.org,
	alan@lxorguk.ukuu.org.uk, liml@rtr.ca, albertl@mail.com,
	jens.axboe@oracle.com
Subject: Re: [PATCH 06/14] libata: improve ATAPI draining
Date: Tue, 04 Dec 2007 18:06:37 +0800	[thread overview]
Message-ID: <475526AD.3090406@tw.ibm.com> (raw)
In-Reply-To: <11963468192463-git-send-email-htejun@gmail.com>

Tejun Heo wrote:
> For misc ATAPI commands which transfer variable length data to the
> host, overflow can occur due to application or hardware bug.  Such
> overflows can be ignored safely as long as overflow data is properly
> drained.  libata HSM implementation has this implemented in
> __atapi_pio_bytes() but it isn't enough.  Improve drain logic such
> that...
> 
> * Multiple PIO data phases are allowed.  Not allowing this used to be
>   okay when transfer chunk size was set to 8k unconditionally but with
>   transfer hcunk size set to allocation size, treating extra PIO data
>   phases as HSM violations cause a lot of trouble.
> 
> * Limit the amount of draining to ATAPI_MAX_DRAIN (16k currently).
> 
> * Don't whine if overflow is allowed and safe.  When unexpected
>   overflow occurs, trigger HSM violation and report the problem using
>   ehi error description.
> 
> * Properly calculate the number of bytes to be drained considering
>   actual number of consumed bytes for partial draining.
> 
> * Add and use ata_drain_page for draining.  This change fixes the
>   problem where LLDs which do 32bit IOs consumes 4 bytes on each 2
>   byte draining resulting in draining twice more data than requested.
> 
> This patch fixes ATAPI regressions introduced by setting transfer
> chunk size to allocation size.
> 
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> Cc: Albert Lee <albertcc@tw.ibm.com>

Sorry for the late reply. The new patch looks good.

However, I am a little worried about the following code segment in 
__atapi_pio_bytes():

next_sg:
	if (!bytes)
		return 0;


Maybe we should add an additional check to atapi_pio_bytes() such
that "DRQ asserted with bytes = 0" is considered as AC_ERR_HSM?
(patch attached below.) Otherwise the device might keep interruping us
with DRQ asserted + zero byte count, and we are in infinite loop...

--
albert


diff -Nrup 00_libata-dev/drivers/ata/libata-core.c 07_more_check/drivers/ata/libata-core.c
--- 00_libata-dev/drivers/ata/libata-core.c	2007-11-14 10:08:36.000000000 +0800
+++ 07_more_check/drivers/ata/libata-core.c	2007-12-04 18:03:48.000000000 +0800
@@ -5341,6 +5341,9 @@ static void atapi_pio_bytes(struct ata_q
 	if (do_write != i_write)
 		goto err_out;
 
+	if (!bytes)
+		goto err_out;
+
 	VPRINTK("ata%u: xfering %d bytes\n", ap->print_id, bytes);
 
 	__atapi_pio_bytes(qc, bytes);


  parent reply	other threads:[~2007-12-04 10:07 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-29 14:33 [PATCHSET] libata: improve ATAPI data transfer handling, take #2 Tejun Heo
2007-11-29 14:33 ` [PATCH 01/14] libata: update atapi_eh_request_sense() such that lbam/lbah contains buffer size Tejun Heo
2007-11-29 15:51   ` Alan Cox
2007-12-04 19:27   ` Jeff Garzik
2007-12-05  0:47     ` Tejun Heo
2007-11-29 14:33 ` [PATCH 02/14] cdrom: add more GPCMD_* constants Tejun Heo
2007-11-29 14:33 ` [PATCH 03/14] libata: rename ATA_PROT_ATAPI_* to ATAPI_PROT_* Tejun Heo
2007-11-29 15:52   ` Alan Cox
2007-11-29 14:33 ` [PATCH 04/14] libata: add ATAPI_* cmd types and implement atapi_cmd_type() Tejun Heo
2007-11-29 14:33 ` [PATCH 05/14] libata: make ->data_xfer return the number of consumed bytes Tejun Heo
2007-11-29 15:55   ` Alan Cox
2007-11-29 16:06     ` Tejun Heo
2007-11-29 17:42       ` Alan Cox
2007-11-29 18:00         ` Tejun Heo
2007-11-29 18:24           ` Alan Cox
2007-11-29 18:57             ` Mark Lord
2007-11-29 19:37               ` Jeff Garzik
2007-11-29 19:36             ` Jeff Garzik
2007-11-29 21:22               ` Alan Cox
2007-12-04 19:30   ` Jeff Garzik
2007-12-05  0:49     ` Tejun Heo
2007-12-05  1:05       ` Jeff Garzik
2007-11-29 14:33 ` [PATCH 06/14] libata: improve ATAPI draining Tejun Heo
2007-11-29 15:59   ` Alan Cox
2007-11-29 16:09     ` Tejun Heo
2007-11-29 16:42     ` Tejun Heo
2007-11-29 17:40       ` Alan Cox
2007-11-29 18:11         ` Tejun Heo
2007-11-29 18:19           ` Alan Cox
2007-12-04 10:06   ` Albert Lee [this message]
2007-12-05  1:00     ` Tejun Heo
2007-11-29 14:33 ` [PATCH 07/14] libata: make atapi_request_sense() use sg Tejun Heo
2007-11-29 14:33 ` [PATCH 08/14] libata: kill non-sg DMA interface Tejun Heo
2007-11-29 16:00   ` Alan Cox
2007-12-04 19:31   ` Jeff Garzik
2007-12-05  1:02     ` Tejun Heo
2007-11-29 14:33 ` [PATCH 09/14] libata: change ATA_QCFLAG_DMAMAP semantics Tejun Heo
2007-11-29 14:33 ` [PATCH 10/14] libata: convert to chained sg Tejun Heo
2007-11-29 14:33 ` [PATCH 11/14] libata: add qc->dma_nbytes Tejun Heo
2007-11-29 16:02   ` Alan Cox
2007-12-04 19:33   ` Jeff Garzik
2007-12-05  1:02     ` Tejun Heo
2007-11-29 14:33 ` [PATCH 12/14] libata: implement ATAPI drain buffer Tejun Heo
2007-11-29 14:33 ` [PATCH 13/14] libata: implement ATAPI per-command-type DMA horkages Tejun Heo
2007-11-29 16:04   ` Alan Cox
2007-11-29 16:10     ` Tejun Heo
2007-11-29 14:33 ` [PATCH 14/14] libata: use PIO for misc ATAPI commands Tejun Heo
2007-11-29 16:05   ` Alan Cox
2007-11-29 16:14     ` Tejun Heo
2007-11-29 16:16       ` Tejun Heo
2007-11-29 18:55         ` Mark Lord
2007-11-29 22:52           ` Tejun Heo
2007-11-30  1:03             ` Mark Lord
2007-11-30  1:34               ` Tejun Heo
2007-11-30  4:19                 ` Mark Lord
2007-11-30 13:40                 ` Alan Cox
2007-11-30 13:59                   ` Tejun Heo
2007-11-30 14:12                     ` Jeff Garzik
2007-11-30 15:36                     ` Alan Cox
2007-11-30 13:09             ` Alan Cox
2007-11-29 17:38       ` Alan Cox
2007-12-04 19:34   ` Jeff Garzik
2007-12-05  1:14     ` Tejun Heo
2007-12-05 12:47       ` Alan Cox
2007-12-05 13:03         ` Tejun Heo
2007-12-05 14:01           ` Alan Cox
2007-12-05 14:22             ` Tejun Heo
2007-12-05 14:46               ` Alan Cox
2007-12-05 15:13                 ` Tejun Heo
2007-12-05 18:52                   ` Jeff Garzik
2007-12-06 11:03                 ` Petr Vandrovec
2007-12-06 11:10                   ` 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=475526AD.3090406@tw.ibm.com \
    --to=albertcc@tw.ibm.com \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=albertl@mail.com \
    --cc=htejun@gmail.com \
    --cc=jeff@garzik.org \
    --cc=jens.axboe@oracle.com \
    --cc=liml@rtr.ca \
    --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.