From: Jeff Garzik <jgarzik@pobox.com>
To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Cc: axboe@suse.de, torvalds@osdl.org, Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: 2.7 block ramblings (was Re: DMA for ide-scsi?)
Date: Sat, 13 Sep 2003 14:49:34 -0400 [thread overview]
Message-ID: <20030913184934.GB10047@gtf.org> (raw)
In-Reply-To: <1063476275.8702.35.camel@dhcp23.swansea.linux.org.uk>
On Sat, Sep 13, 2003 at 07:04:36PM +0100, Alan Cox wrote:
> In 2.7 the SCSI layer split can get finished so it seperates "scsi the
> protocol" from "queueing engine and handling for an intelligent
> controller".
Yep, this is exactly my plan. And exactly why libata must use
the SCSI layer in 2.4 and 2.6, and in 2.7 use the "queueing engine ..."
stuff that you describe.
There are a lot of pieces in the SCSI layer that I want to move "up" to
the block layer in 2.7: ->queuecommand "queue one" callback and loop
(Jens has code for this already), error handling thread helper code,
low-level device driver registration structure[1], personality code
(disk, cdrom, tape, ....), support for host controllers which may have
host _or_ device (or both!) TCQ limits, and on and on.
That's a ton of code, and IMO it's not feasible to (a) recreate it
for 2.6 libata, or (b) do the "move up" in 2.6.0-testX and change ide,
scsi, block, ... drivers to use the new helpers and new structure.
Changes are too big this late in the 2.6 game.
As of next week (I'm presenting this at Intel Developer Forum), libata
will support "AHCI", Intel's next generation SATA controller. Each PCI
device supports up to 32 SATA ports (one SATA device each). Each port
supports up to 32 outstanding ATA commands (i.e. 32 tags), including a
64-bit-DMA-capable scatter-gather table. The S/G doesn't have the silly
64K segment boundary worries, either.
Promise hardware is similar -- up to 10 "packets" (taskfiles) can be
queued per host... not per device. SCSI layer handles this with just a
few knob-turns.
For 2.6, libata (unfortunately) requires the SCSI layer for ATA
devices, and libata drives real hardware that noone else can drive.
For 2.7, when all this code "moves up" -- basically adding a bunch of
helper functions to the block layer -- libata won't need to treat ATA
devices as SCSI devices.
Some developers have rightfully pointed out that disks going from
/dev/hdX to /dev/sdX might create some user confusion. This hasn't been
the case in practice. Partly because LABEL= is fairly prevalent, and
partly because libata is used for "only SATA" scenarios, which is by
definition new hardware.
On to /dev/disk...
Another interesting part of this "moving up" is that I want to unify the
personality code. The various tape, cdrom, and disk modules for ide,
scsi, and others are quite similar. And if you look closer at today's
block layer, you see that already everything is designed around "struct
request". So I envision a more top-down structure, with helper
functions and callbacks combining to form: /dev/disk, /dev/cdrom,
/dev/tape, ...
The generic "disk" personality code would take care of allocating block
device major/minors (i.e. register_blkdev duties), and generating
requests. Existing ->prep_rq helpers will fill in the specific details.
Subsystem-specfic ioctls can be delivered as REQ_SPECIAL.
cdrom, tape, and friends follow a similar pattern.
"What about /dev/hda!" Answer: a simple remapping block device, which
simulates /dev/hdXX or /dev/sdXX, by remapping all requests to
/dev/diskXX.
So the next time you hear me say "libata must wait for 2.7 to ditch SCSI"
this is what I mean ;-) These aren't unachieveable goals, either. It's
mostly code shuffling. This code mostly already exists today.
Jeff
[1] low-level driver registers a set of callbacks, which are
either implemented in the driver itself (cciss, cpqarray) or mostly
library-based helper functions (ATA or SCSI).
next prev parent reply other threads:[~2003-09-13 18:49 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-09-13 11:01 DMA for ide-scsi? Mikael Pettersson
2003-09-13 16:25 ` Bartlomiej Zolnierkiewicz
2003-09-13 18:04 ` Alan Cox
2003-09-13 18:49 ` Jeff Garzik [this message]
2003-09-13 19:01 ` 2.7 block ramblings (was Re: DMA for ide-scsi?) Jeff Garzik
2003-09-13 19:06 ` Jeff Garzik
2003-09-15 7:34 ` Jens Axboe
2003-09-16 19:49 ` Jeff Garzik
2003-09-16 19:55 ` Jens Axboe
2003-09-20 18:28 ` Jeff Garzik
2003-09-20 22:16 ` Alan Cox
2003-09-20 22:22 ` Jeff Garzik
2003-09-20 22:46 ` Alan Cox
2003-09-21 9:23 ` Jens Axboe
2003-09-13 19:24 ` Bartlomiej Zolnierkiewicz
2003-09-13 19:57 ` Jeff Garzik
2003-09-13 20:16 James Bottomley
2003-09-13 21:27 ` Jeff Garzik
2003-09-14 11:15 ` Justin Cormack
2003-09-14 15:02 ` Alan Cox
2003-09-14 16:55 ` Kevin P. Fleming
2003-09-14 17:01 ` Andries Brouwer
2003-09-14 17:24 ` Jeff Garzik
2003-09-14 18:55 ` Alan Cox
2003-09-16 2:38 ` Thomas Molina
2003-09-16 13:56 ` Alan Cox
2003-09-14 17:20 ` Jeff Garzik
2003-09-14 16:12 ` Andries Brouwer
2003-09-14 17:30 ` Jeff Garzik
2003-09-13 2:11 ` Matt Domsch
2003-09-14 22:26 ` Alan Cox
2003-09-13 6:05 ` Matt Domsch
2003-09-15 22:16 ` Matt Domsch
2003-09-15 3:23 ` Andre Hedrick
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=20030913184934.GB10047@gtf.org \
--to=jgarzik@pobox.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=axboe@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®