linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Garzik <jeff@garzik.org>
To: Tejun Heo <htejun@gmail.com>
Cc: alan@lxorguk.ukuu.org.uk, linux-ide@vger.kernel.org
Subject: Polling (was Re: [PATCHSET 2/2] implement PMP support, take 6)
Date: Tue, 25 Sep 2007 22:09:02 -0400	[thread overview]
Message-ID: <46F9BF3E.5050708@garzik.org> (raw)
In-Reply-To: <1190521193410-git-send-email-htejun@gmail.com>

Here's one thing that jumps out at me, reviewing the PMP patchset:

PMP reads and writes require polling, which is not something we should 
impose upon the design.  Conversations with a port multiplier are 
fundamentally packetized, and modern controllers treat these just like 
the bazillion other types of packets they must deal with:   just another 
entry on a DMA ring, with an interrupt to signal completion/reception.

For situations like this, libata EH needs to the use normal, natural 
delivery method: initiate an action, and wait asynchronously for completion.

Certainly the flow of control might be synchronous inside libata EH; 
that requirement is normal and usable with an issue+wait setup.

More and more I am convinced this "mission creep", the slow expansion of 
polling even into modern controllers, is going in the wrong direction.

Consider the mvsas driver (Marvell 6440 SAS/SATA), whose rough draft I 
posted yesterday:  in order to support SAS wide ports -- multiple phys 
aggregated at runtime into a single "SAS port" -- and remote SATA device 
attachment behind expanders then PMPs, their hardware design became
	- single command queue, for all ports/phys
	- single response queue, for all ports/phys
	- events from all ports, SAS and SATA, aggregate
	  onto those queues
	- a single MSI interrupt signals "go look for new work on
	  DMA ring"

There, even the concept of "port" is fluid, and the libata EH model of 
freezing and thawing a port (with the desired irq-off result) just 
doesn't fit the hardware.

The model under SAS+SATA is even closer to that of a network driver: 
you just have a very dumb driver, that sends and receives frames, as 
signalled via interrupt.

As such, polling is simply an outmoded concept.  It does not make sense 
on new hardware, and forcing design decisions down that path only lead 
to a cascade of similar design decisions -- pmp_read polling being just 
one example of such a result.

Just like the Linux kernel MM platform API presents 3 levels of page 
table entries, even when the hardware may only have 2, libata high level 
API _must_ be implemented as 100% asynchronous event driven API.

If the default implementation chooses to use polling -- i.e. all SFF 
controllers -- that's fine.  But in the new SAS/SATA world its clear 
that we have far too many polling-related assumptions as it is.

Polling just flat out doesn't make sense on modern SAS/SATA -- and even 
a couple modern SATA controllers.  On such controllers, we are notified 
immediately via interrupt even in the event of errors.

	Jeff





  parent reply	other threads:[~2007-09-26  2:09 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-23  4:19 [PATCHSET 2/2] implement PMP support, take 6 Tejun Heo
2007-09-23  4:19 ` [PATCH 01/10] libata-pmp: update ata_eh_reset() for PMP Tejun Heo
2007-09-23  4:19 ` [PATCH 03/10] libata-pmp: hook PMP support and enable it Tejun Heo
2007-09-23  4:19 ` [PATCH 04/10] libata-pmp: extend ACPI support to cover PMP Tejun Heo
2007-09-23  4:19 ` [PATCH 07/10] sata_sil24: implement PORT_RST Tejun Heo
2007-09-23  4:19 ` [PATCH 06/10] sata_sil24: implement PMP support Tejun Heo
2007-09-23  4:19 ` [PATCH 02/10] libata-pmp: implement Port Multiplier support Tejun Heo
2007-09-23  4:19 ` [PATCH 05/10] libata-pmp: implement qc_defer for command switching PMP support Tejun Heo
2007-09-23  4:19 ` [PATCH 08/10] ahci: implement " Tejun Heo
2007-09-23  4:19 ` [PATCH 09/10] ahci: move host flags over to pi.private_data Tejun Heo
2007-09-23  4:19 ` [PATCH 10/10] ahci: implement AHCI_HFLAG_NO_PMP Tejun Heo
2007-09-26  2:09 ` Jeff Garzik [this message]
2007-09-26  2:12   ` Polling (was Re: [PATCHSET 2/2] implement PMP support, take 6) Jeff Garzik
2007-09-26  8:41   ` Tejun Heo
2007-09-28 12:10     ` Tejun Heo
2007-09-28 13:54     ` Jeff Garzik
2007-09-28 14:18       ` Tejun Heo
2007-09-28 14:57         ` Alan Cox
2007-09-28 15:20           ` Jeff Garzik
2007-09-28 15:43             ` Alan Cox
2007-09-28 15:40               ` Jeff Garzik
2007-09-28 20:00                 ` Mark Lord
2007-09-29  1:49                   ` Jeff Garzik
2007-09-29  3:29                   ` Jeff Garzik
2007-09-29  4:58                     ` Andrew Morton
2007-09-29  5:09                       ` Jeff Garzik
2007-09-29 16:51                     ` Greg Freemyer
2007-09-29 20:56                     ` Alan Cox
2007-10-01 12:28                       ` Jeff Garzik
2007-09-28 15:22         ` Jeff Garzik
2007-09-28 16:48           ` Tejun Heo
2007-09-28 20:02             ` Mark Lord
2007-09-28 20:25               ` Bartlomiej Zolnierkiewicz
2007-09-28 21:03               ` Alan Cox
2007-09-29  1:43                 ` Jeff Garzik
2007-09-29  5:24                   ` Tejun Heo
2007-10-01 13:31                     ` Jeff Garzik
2007-10-02  0:11                       ` Tejun Heo
2007-10-02 14:25                       ` Alan Cox
2007-10-02 14:30                         ` Jeff Garzik
2007-09-29 12:32                   ` Mark Lord
2007-10-01 12:38                     ` Jeff Garzik
2007-10-02  0:12                       ` Tejun Heo
2007-10-02 12:56                         ` Jeff Garzik
2007-10-02 13:06                           ` Mark Lord
2007-10-02 13:30                             ` Jeff Garzik
2007-10-06 22:02                               ` Tejun Heo
2007-10-09  2:09                                 ` Jeff Garzik
2007-10-09  6:54                                   ` Tejun Heo
2007-09-28 14:20   ` Mark Lord
2007-09-28 15:36     ` Jeff Garzik
2007-09-28 15:55       ` Alan Cox

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=46F9BF3E.5050708@garzik.org \
    --to=jeff@garzik.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=htejun@gmail.com \
    --cc=linux-ide@vger.kernel.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;
as well as URLs for NNTP newsgroup(s).