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 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).