From: Matthew Wilcox <matthew@wil.cx>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org,
jgarzik@pobox.com, Matt_Domsch@dell.com,
Matthew Wilcox <willy@linux.intel.com>
Subject: Re: [PATCH] ata: Add support for Long Logical Sectors and Long Physical Sectors
Date: Tue, 5 Aug 2008 20:22:55 -0600 [thread overview]
Message-ID: <20080806022255.GC2055@parisc-linux.org> (raw)
In-Reply-To: <20080805214651.621263f5@lxorguk.ukuu.org.uk>
On Tue, Aug 05, 2008 at 09:46:51PM +0100, Alan Cox wrote:
> > + * Some commands are specified to transfer (a multiple of) 512 bytes of data
> > + * while others transfer a multiple of the number of bytes in a sector. This
> > + * function knows which commands transfer how much data.
>
> static u32 ata_sector_or_block[]={...};
>
> if (test_bit(tf->cmd, &ata_sector_or_block))
>
> looks so much more elegant than a giant switch statement and I suspect
> produces far better code
Probably ... I did consider it, but I think I was too influenced by the
existing READ/WRITE LONG code.
> > + * ATA supports sector sizes up to 2^33 - 1. The reported sector size may
> > + * not be a power of two. The extra bytes are used for user-visible data
> > + * integrity calculations. Note this is not the same as the ECC which is
> > + * accessed through the SCT Command Transport or READ / WRITE LONG.
> > + */
> > +static u64 ata_id_sect_size(const u16 *id)
>
> word 106 is not defined in early ATA standards so it would be wise to
> check that ATA8 is reported by the drive - and trust the relevant bits
> for ATA7/8 as appropriate.
I'm not sure that's necessary. The spec says to check whether words are
valid by doing the & 0xc000 == 0x4000 test.
> The drivers also need to know when a command is being issued which is a
> funny shape as some hardware cannot do it because the internal state
> machine knows the sector size and other stuff seems to need the internal
> FIFO turning off or other things whacked repeatedly on the head to make
> it work.
Yes, I would expect some driver work to be required. It only gets worse
once we implement the DIX-equivalent. How do you suggest would be a
good migration path? We could have the driver set a flag, or call into
the driver from the midlayer to check whether it can cope with a
particular sector size.
> You also don't need to bother listing all the commands that don't have
> data transfer phases as a sector size is meaningless there so we
> shouldn't even bother doing a lookup for them. Indeed the more I look at
> this the more it seems that keeping long complex ever out of date arrays
> is the wrong way to do it.
I didn't want to change behaviour. We currently set sect_size to 512
for all commands (except READ LONG), and I didn't want to change that
for non-data commands. I agree with you that it's not relevant.
--
Intel are signing my paycheques ... these opinions are still mine
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."
next prev parent reply other threads:[~2008-08-06 2:23 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-08-05 17:26 LibATA support for long sectors Matthew Wilcox
2008-08-05 17:26 ` [PATCH] ata: Define new commands from ATA8 Matthew Wilcox
2008-08-05 20:10 ` Greg Freemyer
2008-08-05 17:26 ` [PATCH] ata: Add support for Long Logical Sectors and Long Physical Sectors Matthew Wilcox
2008-08-05 20:46 ` Alan Cox
2008-08-06 2:22 ` Matthew Wilcox [this message]
2008-08-06 9:06 ` Alan Cox
2008-08-06 13:11 ` Matthew Wilcox
2008-08-06 14:13 ` Alan Cox
2008-08-06 15:13 ` Matthew Wilcox
2008-08-06 15:06 ` Alan Cox
2008-08-17 23:19 ` Jeff Garzik
2008-08-18 18:15 ` Matthew Wilcox
2008-08-18 18:06 ` Alan Cox
2008-08-18 18:42 ` Matthew Wilcox
2008-08-18 18:49 ` Alan Cox
2008-08-18 19:04 ` Matthew Wilcox
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=20080806022255.GC2055@parisc-linux.org \
--to=matthew@wil.cx \
--cc=Matt_Domsch@dell.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=willy@linux.intel.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).