From: Tejun Heo <tj@kernel.org>
To: Larry Baker <baker@usgs.gov>
Cc: jgarzik@pobox.com, linux-ide@vger.kernel.org,
Sergei Shtylyov <sshtylyov@ru.mvista.com>,
Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: Fwd: CF card I/O errors on Linux
Date: Thu, 20 May 2010 11:50:36 +0200 [thread overview]
Message-ID: <4BF505EC.5030102@kernel.org> (raw)
In-Reply-To: <291D4AE0-82BE-44F8-9AF0-209433D9FA39@usgs.gov>
Hello,
On 05/12/2010 11:19 PM, Larry Baker wrote:
> 1. I needed to see more of the IDENTIFY DEVICE response, so I modified
> the probe printout to include words 47, 49, 59, and 80-88, like this:
>
> - "%s: cfg 49:%04x 82:%04x 83:%04x 84:%04x "
> - "85:%04x 86:%04x 87:%04x 88:%04x\n",
> + "%s: cfg 47:%04x 49:%04x 59:%04x "
> + "80-88:%04x %04x %04x %04x %04x %04x %04x %04x
> %04x\n",
> __func__,
> - id[49], id[82], id[83], id[84],
> - id[85], id[86], id[87], id[88]);
> + id[47], id[49], id[59], id[80], id[81], id[82],
> + id[83], id[84], id[85], id[86], id[87], id[88]);
I think it would be better to include a module parameter which makes
libata dump the whole thing. The message is only useful for
development and debugging anyway. I'll add such an option.
> 2. The device I was having trouble with claims to support multi-sector
> transfers, with a maximum Sector Count of 1. There's not much point
> then, is there? I suggest adding a test for max >= 2 in the conditional
> where dev->multi_count is assigned:
>
> /* get current R/W Multiple count setting */
> if ((dev->id[47] >> 8) == 0x80 && (dev->id[59] & 0x100)) {
> unsigned int max = dev->id[47] & 0xff;
> unsigned int cnt = dev->id[59] & 0xff;
> + /* no point unless max >= 2 */
> + if (max >= 2)
> /* only recognize/allow powers of two here */
> if (is_power_of_2(max) && is_power_of_2(cnt))
> if (cnt <= max)
> dev->multi_count = cnt;
> }
Yeap, this does make sense. Sergei, Alan, what do you guys think?
> 3. In the error recovery code (in libata-eh.c?), I suggest a way to
> recover for devices like the one I've got that improperly implement
> READ/WRITE MULTI commands:
>
> If the failed command is one of the READ/WRITE MULTI commands (entries
> 0-4 in ata_rw_cmds[]), and the device response is ABORT, use your
> HORKAGE mechanism to set a flag like ATA_HORKAGE_BROKEN_MULTI to skip
> setting dev->multi_count in libata-core.c (the code in 2., above), i.e.,
> disable multi-sector transfers, then reconfigure the device to disable
> multi-sector transfers (call ata_dev_configure(), I guess, so the new
> configuration gets printed out in dmesg) and retry the transfer. Any
> future calls to ata_dev_configure() for that device will not attempt to
> enable multi-sector transfers because the ATA_HORKAGE_BROKEN_MULTI is set:
>
> + /* don't try to enable R/W multi if it is broken */
> + if (!(dev->horkage & ATA_HORKAGE_BROKEN_MULTI))
So, turn off MULTI on ABORT.... Oh yeah, I can add that to the
existing speed down logic. Would you be available to test patches?
Thanks.
--
tejun
next prev parent reply other threads:[~2010-05-20 9:51 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <7B56DFFC-819E-46BA-9D06-B9AB97144AD6@usgs.gov>
2010-05-12 21:19 ` Fwd: CF card I/O errors on Linux Larry Baker
2010-05-20 9:50 ` Tejun Heo [this message]
2010-05-23 13:58 ` 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=4BF505EC.5030102@kernel.org \
--to=tj@kernel.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=baker@usgs.gov \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
--cc=sshtylyov@ru.mvista.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.