<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/include/linux/libata.h, branch v3.15.2</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=v3.15.2</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=v3.15.2'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2014-04-18T19:56:03+00:00</updated>
<entry>
<title>libata/ahci: accommodate tag ordered controllers</title>
<updated>2014-04-18T19:56:03+00:00</updated>
<author>
<name>Dan Williams</name>
<email>dan.j.williams@intel.com</email>
</author>
<published>2014-04-17T18:48:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=8a4aeec8d2d6a3edeffbdfae451cdf05cbf0fefd'/>
<id>urn:sha1:8a4aeec8d2d6a3edeffbdfae451cdf05cbf0fefd</id>
<content type='text'>
The AHCI spec allows implementations to issue commands in tag order
rather than FIFO order:

	5.3.2.12 P:SelectCmd
	HBA sets pSlotLoc = (pSlotLoc + 1) mod (CAP.NCS + 1)
	or HBA selects the command to issue that has had the
	PxCI bit set to '1' longer than any other command
	pending to be issued.

The result is that commands posted sequentially (time-wise) may play out
of sequence when issued by hardware.

This behavior has likely been hidden by drives that arrange for commands
to complete in issue order.  However, it appears recent drives (two from
different vendors that we have found so far) inflict out-of-order
completions as a matter of course.  So, we need to take care to maintain
ordered submission, otherwise we risk triggering a drive to fall out of
sequential-io automation and back to random-io processing, which incurs
large latency and degrades throughput.

This issue was found in simple benchmarks where QD=2 seq-write
performance was 30-50% *greater* than QD=32 seq-write performance.

Tagging for -stable and making the change globally since it has a low
risk-to-reward ratio.  Also, word is that recent versions of an unnamed
OS also does it this way now.  So, drives in the field are already
experienced with this tag ordering scheme.

Cc: &lt;stable@vger.kernel.org&gt;
Cc: Dave Jiang &lt;dave.jiang@intel.com&gt;
Cc: Ed Ciechanowski &lt;ed.ciechanowski@intel.com&gt;
Reviewed-by: Matthew Wilcox &lt;matthew.r.wilcox@intel.com&gt;
Signed-off-by: Dan Williams &lt;dan.j.williams@intel.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
<entry>
<title>libata: remove unused ata_sas_port_async_resume() stub</title>
<updated>2014-03-19T20:30:23+00:00</updated>
<author>
<name>Dan Williams</name>
<email>dan.j.williams@intel.com</email>
</author>
<published>2014-03-19T18:14:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=0dd5d6f0e8763ff09939adf3e5b1465a3a414fea'/>
<id>urn:sha1:0dd5d6f0e8763ff09939adf3e5b1465a3a414fea</id>
<content type='text'>
Commit bc6e7c4b0d1a "libata, libsas: kill pm_result and related cleanup"
renamed ata_sas_port_async_resume() to ata_sas_port_resume(), but missed
a CONFIG_PM=n stub conversion.  Randy fixed that up in commit
a5a6569959fc "libata.h: add stub for ata_sas_port_resume", but missed
the deletion of the now unused ata_sas_port_async_resume() routine.

Cc: Randy Dunlap &lt;rdunlap@infradead.org&gt;
Signed-off-by: Dan Williams &lt;dan.j.williams@intel.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
<entry>
<title>libata.h: add stub for ata_sas_port_resume</title>
<updated>2014-03-19T17:56:40+00:00</updated>
<author>
<name>Randy Dunlap</name>
<email>rdunlap@infradead.org</email>
</author>
<published>2014-03-19T17:46:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=a5a6569959fc55d4ebf1526f7855003596946c32'/>
<id>urn:sha1:a5a6569959fc55d4ebf1526f7855003596946c32</id>
<content type='text'>
Fix build error when CONFIG_PM is not enabled by adding a stub
function in &lt;linux/libata.h&gt;.

drivers/scsi/libsas/sas_ata.c: In function 'sas_resume_sata':
drivers/scsi/libsas/sas_ata.c:756:3: error: implicit declaration of function 'ata_sas_port_resume' [-Werror=implicit-function-declaration]

Signed-off-by: Randy Dunlap &lt;rdunlap@infradead.org&gt;
Reported-by: Jim Davis &lt;jim.epost@gmail.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
Cc: Dan Williams &lt;dan.j.williams@intel.com&gt;
</content>
</entry>
<entry>
<title>libata, libsas: kill pm_result and related cleanup</title>
<updated>2014-03-18T20:08:38+00:00</updated>
<author>
<name>Dan Williams</name>
<email>dan.j.williams@intel.com</email>
</author>
<published>2014-03-14T20:52:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=bc6e7c4b0d1a1f742d96556f63d68f17f4e232c3'/>
<id>urn:sha1:bc6e7c4b0d1a1f742d96556f63d68f17f4e232c3</id>
<content type='text'>
Tejun says:
  "At least for libata, worrying about suspend/resume failures don't make
   whole lot of sense.  If suspend failed, just proceed with suspend.  If
   the device can't be woken up afterwards, that's that.  There isn't
   anything we could have done differently anyway.  The same for resume, if
   spinup fails, the device is dud and the following commands will invoke
   EH actions and will eventually fail.  Again, there really isn't any
   *choice* to make.  Just making sure the errors are handled gracefully
   (ie. don't crash) and the following commands are handled correctly
   should be enough."

The only libata user that actually cares about the result from a suspend
operation is libsas.  However, it only cares about whether queuing a new
operation collides with an in-flight one.  All libsas does with the
error is retry, but we can just let libata wait for the previous
operation before continuing.

Other cleanups include:
1/ Unifying all ata port pm operations on an ata_port_pm_ prefix
2/ Marking all ata port pm helper routines as returning void, only
   ata_port_pm_ entry points need to fake a 0 return value.
3/ Killing ata_port_{suspend|resume}_common() in favor of calling
   ata_port_request_pm() directly
4/ Killing the wrappers that just do a to_ata_port() conversion
5/ Clearly marking the entry points that do async operations with an
  _async suffix.

Reference: http://marc.info/?l=linux-scsi&amp;m=138995409532286&amp;w=2

Cc: Phillip Susi &lt;psusi@ubuntu.com&gt;
Cc: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Suggested-by: Tejun Heo &lt;tj@kernel.org&gt;
Signed-off-by: Todd Brandt &lt;todd.e.brandt@intel.com&gt;
Signed-off-by: Dan Williams &lt;dan.j.williams@intel.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
<entry>
<title>libata: disable LPM for some WD SATA-I devices</title>
<updated>2014-01-16T14:49:10+00:00</updated>
<author>
<name>Tejun Heo</name>
<email>tj@kernel.org</email>
</author>
<published>2014-01-16T14:47:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=ecd75ad514d73efc1bbcc5f10a13566c3ace5f53'/>
<id>urn:sha1:ecd75ad514d73efc1bbcc5f10a13566c3ace5f53</id>
<content type='text'>
For some reason, some early WD drives spin up and down drives
erratically when the link is put into slumber mode which can reduce
the life expectancy of the device significantly.  Unfortunately, we
don't have full list of devices and given the nature of the issue it'd
be better to err on the side of false positives than the other way
around.  Let's disable LPM on all WD devices which match one of the
known problematic model prefixes and are SATA-I.

As horkage list doesn't support matching SATA capabilities, this is
implemented as two horkages - WD_BROKEN_LPM and NOLPM.  The former is
set for the known prefixes and sets the latter if the matched device
is SATA-I.

Note that this isn't optimal as this disables all LPM operations and
partial link power state reportedly works fine on these; however, the
way LPM is implemented in libata makes it difficult to precisely map
libata LPM setting to specific link power state.  Well, these devices
are already fairly outdated.  Let's just disable whole LPM for now.

Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
Reported-and-tested-by: Nikos Barkas &lt;levelwol@gmail.com&gt;
Reported-and-tested-by: Ioannis Barkas &lt;risc4all@yahoo.com&gt;
References: https://bugzilla.kernel.org/show_bug.cgi?id=57211
Cc: stable@vger.kernel.org
</content>
</entry>
<entry>
<title>libata: implement ATA_HORKAGE_NO_NCQ_TRIM and apply it to Micro M500 SSDs</title>
<updated>2013-12-17T12:03:14+00:00</updated>
<author>
<name>Marc Carino</name>
<email>marc.ceeeee@gmail.com</email>
</author>
<published>2013-12-17T02:15:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=f78dea064c5f7de07de4912a6e5136dbc443d614'/>
<id>urn:sha1:f78dea064c5f7de07de4912a6e5136dbc443d614</id>
<content type='text'>
Certain drives cannot handle queued TRIM commands properly, even
though support is indicated in the IDENTIFY DEVICE buffer.  This patch
allows for disabling the commands for the affected drives and apply it
to the Micron/Crucial M500 SSDs which exhibit incorrect protocol
behavior when issued queued TRIM commands, which could lead to silent
data corruption.

tj: Merged two unnecessarily split patches and made minor edits
    including shortening horkage name.

Signed-off-by: Marc Carino &lt;marc.ceeeee@gmail.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
Link: http://lkml.kernel.org/g/1387246554-7311-1-git-send-email-marc.ceeeee@gmail.com
Cc: stable@vger.kernel.org # 3.12+
</content>
</entry>
<entry>
<title>libata: Add support for queued DSM TRIM</title>
<updated>2013-08-25T13:39:12+00:00</updated>
<author>
<name>Marc Carino</name>
<email>marc.ceeeee@gmail.com</email>
</author>
<published>2013-08-25T06:22:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=87fb6c31b9ef9ccab9a822b01fc3911f026a29bb'/>
<id>urn:sha1:87fb6c31b9ef9ccab9a822b01fc3911f026a29bb</id>
<content type='text'>
Some new SSDs support the queued version of the DSM TRIM command.
Let the driver use the new command if supported.

Signed-off-by: Marc Carino &lt;marc.ceeeee@gmail.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
<entry>
<title>libata: Add support for SEND/RECEIVE FPDMA QUEUED</title>
<updated>2013-08-25T13:39:12+00:00</updated>
<author>
<name>Marc Carino</name>
<email>marc.ceeeee@gmail.com</email>
</author>
<published>2013-08-25T06:22:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=ed36911c747c18525691c0aa0fbe6b918c8eac19'/>
<id>urn:sha1:ed36911c747c18525691c0aa0fbe6b918c8eac19</id>
<content type='text'>
Add support for the following ATA opcodes, which are present
in SATA 3.1 and T13 ATA ACS-3:

        SEND FPDMA QUEUED
        RECEIVE FPDMA QUEUED

Signed-off-by: Marc Carino &lt;marc.ceeeee@gmail.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
<entry>
<title>libata: Add H2D FIS "auxiliary" port flag</title>
<updated>2013-08-25T13:39:12+00:00</updated>
<author>
<name>Marc Carino</name>
<email>marc.ceeeee@gmail.com</email>
</author>
<published>2013-08-25T06:22:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=40fb59e75ad197a1c4ca2fbccef85432d8d103f8'/>
<id>urn:sha1:40fb59e75ad197a1c4ca2fbccef85432d8d103f8</id>
<content type='text'>
Add a new port flag, ATA_FLAG_FPDMA_AUX, used to indicate
support for transmission of the H2D FIS 'auxiliary' field.

Signed-off-by: Marc Carino &lt;marc.ceeeee@gmail.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
<entry>
<title>libata: Populate host-to-device FIS "auxiliary" field</title>
<updated>2013-08-25T13:39:11+00:00</updated>
<author>
<name>Marc Carino</name>
<email>marc.ceeeee@gmail.com</email>
</author>
<published>2013-08-25T06:22:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=8be5ad9acb7c11b9d717bcdbe3d6de0dab081a39'/>
<id>urn:sha1:8be5ad9acb7c11b9d717bcdbe3d6de0dab081a39</id>
<content type='text'>
SATA 3.1 added an "auxiliary" field to the host-to-device FIS.
Populate the host-to-device FIS with the new field via the
taskfile struct.

Signed-off-by: Marc Carino &lt;marc.ceeeee@gmail.com&gt;
Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
</feed>
