From: Jeff Garzik <jeff@garzik.org>
To: Tejun Heo <htejun@gmail.com>
Cc: IDE/ATA development list <linux-ide@vger.kernel.org>,
will@trivescon.com.au, yannick.dirou@axetic.com,
Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH #upstream-fixes] libata: fix ATAPI draining
Date: Mon, 17 Dec 2007 20:43:52 -0500 [thread overview]
Message-ID: <476725D8.5060504@garzik.org> (raw)
In-Reply-To: <475F53D0.2040703@gmail.com>
Tejun Heo wrote:
> With ATAPI transfer chunk size properly programmed, libata PIO HSM
> should be able to handle full spurious data chunks. Also, it's a good
> idea to suppress trailing data warning for misc ATAPI commands as
> there can be many of them per command - for example, if the chunk size
> is 16 and the drive tries to transfer 510 bytes, there can be 31
> trailing data messages.
>
> This patch makes the following updates to libata ATAPI PIO HSM
> implementation.
>
> * Make it drain full spurious chunks.
>
> * Suppress trailing data warning message for misc commands.
>
> * Put limit on how many bytes can be drained.
>
> * If odd, round up consumed bytes and the number of bytes to be
> drained. This gets the number of bytes to drain right for drivers
> which do 16bit PIO.
>
> This patch is partial backport of improve-ATAPI-data-xfer patchset
> pending for #upstream.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> ---
> This combined with the previous patch fixes bug 9346.
>
> drivers/ata/libata-core.c | 87 ++++++++++++++++++++++++++++++++++------------
> include/linux/libata.h | 2 +
> 2 files changed, 67 insertions(+), 22 deletions(-)
>
> Index: work/drivers/ata/libata-core.c
> ===================================================================
> --- work.orig/drivers/ata/libata-core.c
> +++ work/drivers/ata/libata-core.c
> @@ -64,6 +64,7 @@
> #include <linux/libata.h>
> #include <asm/semaphore.h>
> #include <asm/byteorder.h>
> +#include <linux/cdrom.h>
>
> #include "libata.h"
>
> @@ -4649,6 +4650,43 @@ int ata_check_atapi_dma(struct ata_queue
> }
>
> /**
> + * atapi_qc_may_overflow - Check whether data transfer may overflow
> + * @qc: ATA command in question
> + *
> + * ATAPI commands which transfer variable length data to host
> + * might overflow due to application error or hardare bug. This
> + * function checks whether overflow should be drained and ignored
> + * for @qc.
> + *
> + * LOCKING:
> + * None.
> + *
> + * RETURNS:
> + * 1 if @qc may overflow; otherwise, 0.
> + */
> +static int atapi_qc_may_overflow(struct ata_queued_cmd *qc)
> +{
> + if (qc->tf.protocol != ATA_PROT_ATAPI &&
> + qc->tf.protocol != ATA_PROT_ATAPI_DMA)
> + return 0;
> +
> + if (qc->tf.flags & ATA_TFLAG_WRITE)
> + return 0;
> +
> + switch (qc->cdb[0]) {
> + case READ_10:
> + case READ_12:
> + case WRITE_10:
> + case WRITE_12:
> + case GPCMD_READ_CD:
> + case GPCMD_READ_CD_MSF:
> + return 0;
> + }
> +
> + return 1;
applied, though I hope we can eventually find a better solution...
next prev parent reply other threads:[~2007-12-18 1:43 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-12 3:12 [PATCH #upstream-fixes] libata: update atapi_eh_request_sense() such that lbam/lbah contains buffer size Tejun Heo
2007-12-12 3:21 ` [PATCH #upstream-fixes] libata: fix ATAPI draining Tejun Heo
2007-12-18 1:43 ` Jeff Garzik [this message]
2007-12-12 8:05 ` [PATCH #upstream-fixes] libata: update atapi_eh_request_sense() such that lbam/lbah contains buffer size Will Trives
2007-12-12 8:16 ` Tejun Heo
2007-12-12 8:16 ` Will Trives
2007-12-12 8:38 ` Tejun Heo
2007-12-12 8:50 ` Will Trives
2007-12-12 8:48 ` Yannick Dirou
2007-12-18 1:37 ` Jeff Garzik
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=476725D8.5060504@garzik.org \
--to=jeff@garzik.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=htejun@gmail.com \
--cc=linux-ide@vger.kernel.org \
--cc=will@trivescon.com.au \
--cc=yannick.dirou@axetic.com \
/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.