Files
kernel/include/linux
Tejun Heo 31cc23b349 libata-pmp-prep: implement ops->qc_defer()
Controllers which support PMP have various restrictions on which
combinations of commands are allowed to what number of devices
concurrently.  This patch implements ops->qc_defer() which determines
whether a qc can be issued at the moment or should be deferred.

If the function returns ATA_DEFER_LINK, the qc will be deferred until
a qc completes on the link.  If ATA_DEFER_PORT, until a qc completes
on any link.  The defer conditions are advisory and in general
ATA_DEFER_LINK can be considered as lower priority deferring than
ATA_DEFER_PORT.

ops->qc_defer() replaces fixed ata_scmd_need_defer().  For standard
NCQ/non-NCQ exclusion, ata_std_qc_defer() is implemented.  ahci and
sata_sil24 are converted to use ata_std_qc_defer().

ops->qc_defer() is heavier than the original mechanism because full qc
is prepped before determining to defer it, but various information is
needed to determine defer conditinos and fully translating a qc is the
only way to supply such information in generic manner.

IMHO, this shouldn't cause any noticeable performance issues as

* for most cases deferring occurs rarely (except for NCQ-aware
  cmd-switching PMP)
* translation itself isn't that expensive
* once deferred the command won't be repeated until another command
  completes which usually is a very long time cpu-wise.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2007-10-12 14:55:41 -04:00
..
2007-10-09 19:59:16 -07:00
2007-09-24 07:15:48 +02:00
2007-07-19 10:04:52 -07:00
2007-09-23 22:17:27 +02:00
2007-10-10 16:53:11 -07:00
2007-09-11 04:22:16 -07:00
2007-07-19 10:04:43 -07:00
2007-10-10 16:51:59 -07:00
2007-10-12 14:55:40 -04:00
2007-10-10 16:49:02 -07:00
2007-07-19 10:04:45 -07:00
2007-10-10 09:25:57 +02:00
2007-07-31 10:43:05 -05:00
2007-07-19 10:04:54 -07:00
2007-07-18 18:29:37 -04:00
2007-07-19 10:04:41 -07:00
2007-07-31 15:39:41 -07:00
2007-10-11 23:54:00 +02:00
2007-10-10 16:51:59 -07:00
2007-10-10 16:52:04 -07:00
2007-07-31 15:39:41 -07:00
2007-08-26 18:35:34 -07:00
2007-09-11 17:21:20 -07:00
2007-09-04 23:16:04 -04:00
2007-07-18 08:47:40 -07:00
2007-07-30 14:25:12 -07:00
2007-09-11 22:24:45 +01:00
2007-07-19 10:04:49 -07:00
2007-07-24 12:24:59 -07:00
2007-07-18 08:47:45 -07:00
2007-10-10 16:54:03 -07:00
2007-07-19 10:04:45 -07:00
2007-07-20 13:41:56 +10:00
2007-10-10 16:54:44 -07:00
2007-07-26 11:35:21 -07:00
2007-07-26 11:35:21 -07:00
2007-07-18 08:47:40 -07:00
2007-07-21 18:37:10 -07:00
2007-07-22 11:03:37 -07:00
2007-09-20 13:19:59 -07:00
2007-09-16 16:21:16 -07:00
2007-07-20 12:33:44 -07:00
2007-07-19 10:04:49 -07:00
2007-07-18 08:47:40 -07:00
2007-07-31 15:39:39 -07:00
2007-07-20 11:23:02 -07:00
2007-08-11 15:47:41 -07:00
2007-07-18 15:57:15 -07:00
2007-07-30 13:27:44 -07:00
2007-09-19 11:24:18 -07:00
2007-10-10 09:25:57 +02:00