14 Dec, 2016
3 commits
-
Pull another libata patch from Tejun Heo:
"One more patch from Adam added.It makes libata skip probing for NCQ prio unless the feature is
explicitly requested by the user. This is necessary because some
controllers lock up after the optional feature is probed"* 'for-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata:
ata: avoid probing NCQ Prio Support if not explicitly requested -
Previously, when the ata device was being initialized we were
probing for NCQ prio support by checking the identify information
and also checking the log page that holds information about ncq prio
support.This caused an error on an Intel HBA so the code is now updated to
only probe for NCQ prio support when the sysfs variable controlling
NCQ prio support is enabled.tj: Update formatting, switch to spin_[un]lock_irq() and update
locking a bit, use REVALIDATE instead of RESET, and return -EIO
instead of -EINVAL on config failure.Signed-off-by: Adam Manzanares
Signed-off-by: Tejun Heo -
Pull libata updates from Tejun Heo:
- Adam added opt-in ATA command priority support.
- There are machines which hide multiple nvme devices behind an ahci
BAR. Dan Williams proposed a solution to force-switch the mode but
deemed too hackishd. People are gonna discuss the proper way to
handle the situation in nvme standard meetings. For now, detect and
warn about the situation.- Low level driver specific changes.
Christoph Hellwig pipes in about the hidden nvme warning:
"I wish that was the case. We've pretty much agreed that we'll want to
implement it as a virtual PCIe root bridge, similar to Intels other
'innovation' VMD that we work around that way.But Intel management has apparently decided that they don't want to
spend more cycles on this now that Lenovo has an optional BIOS that
doesn't force this broken mode anymore, and no one outside of Intel
has enough information to implement something like this.So for now I guess this warning is it, until Intel reconsideres and
spends resources on fixing up the damage their Chipset people caused"* 'for-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata:
ahci: warn about remapped NVMe devices
ahci-remap.h: add ahci remapping definitions
nvme: move NVMe class code to pci_ids.h
pata: imx: support controller modes up to PIO4
pata: imx: add support of setting timings for PIO modes
pata: imx: set controller PIO mode with .set_piomode callback
pata: imx: sort headers out
ata: set ncq_prio_enabled iff device has support
ata: ATA Command Priority Disabled By Default
ata: Enabling ATA Command Priorities
block: Add iocontext priority to request
ahci: qoriq: added ls1046a platform support
13 Dec, 2016
1 commit
-
Pull documentation update from Jonathan Corbet:
"These are the documentation changes for 4.10.It's another busy cycle for the docs tree, as the sphinx conversion
continues. Highlights include:- Further work on PDF output, which remains a bit of a pain but
should be more solid now.- Five more DocBook template files converted to Sphinx. Only 27 to
go... Lots of plain-text files have also been converted and
integrated.- Images in binary formats have been replaced with more
source-friendly versions.- Various bits of organizational work, including the renaming of
various files discussed at the kernel summit.- New documentation for the device_link mechanism.
... and, of course, lots of typo fixes and small updates"
* tag 'docs-4.10' of git://git.lwn.net/linux: (193 commits)
dma-buf: Extract dma-buf.rst
Update Documentation/00-INDEX
docs: 00-INDEX: document directories/files with no docs
docs: 00-INDEX: remove non-existing entries
docs: 00-INDEX: add missing entries for documentation files/dirs
docs: 00-INDEX: consolidate process/ and admin-guide/ description
scripts: add a script to check if Documentation/00-INDEX is sane
Docs: change sh -> awk in REPORTING-BUGS
Documentation/core-api/device_link: Add initial documentation
core-api: remove an unexpected unident
ppc/idle: Add documentation for powersave=off
Doc: Correct typo, "Introdution" => "Introduction"
Documentation/atomic_ops.txt: convert to ReST markup
Documentation/local_ops.txt: convert to ReST markup
Documentation/assoc_array.txt: convert to ReST markup
docs-rst: parse-headers.pl: cleanup the documentation
docs-rst: fix media cleandocs target
docs-rst: media/Makefile: reorganize the rules
docs-rst: media: build SVG from graphviz files
docs-rst: replace bayer.png by a SVG image
...
08 Dec, 2016
1 commit
-
SCT Write Same support had been introduced with
commit 7b2030942859 ("libata: Add support for SCT Write Same")Some problems, namely excessive userspace segfaults, had been reported at
http://lkml.kernel.org/r/20160908192736.GA4356@gmail.com
This lead to commit 0ce1b18c42a5 ("libata: Some drives failing on
SCT Write Same") which strived to disable SCT Write Same on !ZAC devices.
Due to the way this was done and to the logic in sd_config_write_same(),
this didn't work for those devices that have
->max_ws_blocks > SD_MAX_WS10_BLOCKS: for these, ->no_write_same and
->max_write_same_sectors would still be non-zero,
but ->ws10 == ->ws16 == 0. This would cause sd_setup_write_same_cmnd() to
demultiplex REQ_OP_WRITE_SAME requests to WRITE_SAME, and these in turn
aren't supported by libata-scsi:EXT4-fs (dm-1): Delayed block allocation failed for inode 2625094 at
logical offset 2032 with max blocks 2 with error 121
EXT4-fs (dm-1): This should not happen!! Data will be lost121 == EREMOTEIO is what scsi_io_completion() asserts in case of
invalid opcodes.Back to the original problem of userspace segfaults: this can be tracked
down to ata_format_sct_write_same() overwriting the input page. Sometimes,
this page is ZERO_PAGE(0) which ceases to be filled with zeros from that
point on. Since ZERO_PAGE(0) is used for userspace .bss mappings, code of
the following is doomed:static char *a = NULL; /* .bss */
...
if (a)
*a = 'a';This problem is not solved by disabling SCT Write Same for !ZAC devices
only.It can certainly be fixed, but the final release is quite close -- so
disable SCT Write Same for all ATA devices rather than introducing some
SCT key buffer allocation schemes at this point.Fixes: 7b2030942859 ("libata: Add support for SCT Write Same")
Signed-off-by: Nicolai Stange
Signed-off-by: Tejun Heo
06 Dec, 2016
1 commit
-
Some Intel ahci implementations have a completely broken remapping mode
where they hide one or more NVMe devices behind the bar of an AHCI device.Intel refuses to let the OS reprogram the BIOS to switch out of this
mode at runtime, and so far we're not come up with another good way
to undo the mess that the Chipset people created. So for now the only
thing we can do is to alert users about this situation and switch to the
faster and much saner so called "AHCI" mode insted of the RAID mode in
the BIOS so that the BIOS does not hide the NVMe devices from us.The sitation is even worse as at least one vendor (thanks a lot Lenovo..)
has started hardcoding their BIOS into the "RAID" mode even for laptops
that don't use AHCI _at all_ and just have a single NVMe device. For now
there is an unspported Linux-only BIOS that undoes this braindamage,
but we'll have to see if things are getting better or worse from here.Based on an earlier patch from Dan Williams .
Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
30 Nov, 2016
1 commit
-
If the nr-ports property is missing ata_host_alloc_pinfo is called with
n_ports = 0. This results in host->ports[0] = NULL which later makes
mv_init_host() oops when dereferencing this pointer.Instead be a bit more cooperative and fail the probing with an error
message.Signed-off-by: Uwe Kleine-König
Signed-off-by: Tejun Heo
22 Nov, 2016
1 commit
-
Don't try to guess what the errors from pci_irq_alloc_vectors mean, as
that's too fragile. Instead always try allocating a single vector
when multi-MSI mode fails. This makes various intel Desktop and
Laptop CPUs use MSI again.Signed-off-by: Christoph Hellwig
Reported-by: Michael Marley
Tested-by: Michael Marley
Fixes: 0b9e2988ab22 ("ahci: use pci_alloc_irq_vectors")
Signed-off-by: Tejun Heo
19 Nov, 2016
1 commit
-
Bring in -rc4 patches so I can successfully merge the sound doc changes.
10 Nov, 2016
4 commits
-
Having timing settings for all supported by the controller PIO modes
now it is possible to expand its PIO mask.Signed-off-by: Vladimir Zapolskiy
Signed-off-by: Tejun Heo -
The controller is capable to operate in up to PIO4 mode, however
before the change the driver relies on timing settings done by
a bootloader for PIO0 mode only. The change adds more flexibility
in PIO mode selection at runtime and makes the driver to work even if
bootloader does not preset ATA timings.Signed-off-by: Vladimir Zapolskiy
Signed-off-by: Tejun Heo -
Convert .set_mode callback function to more specific .set_piomode,
the driver does not have support of DMA modes, thus a simpler version
of the callback is preferred.Signed-off-by: Vladimir Zapolskiy
Signed-off-by: Tejun Heo -
Put headers in alphabetic order and remove redundant ones.
Signed-off-by: Vladimir Zapolskiy
Signed-off-by: Tejun Heo
02 Nov, 2016
1 commit
-
There's a typo in ata_gen_passthru_sense(), where the first byte
would be overwritten incorrectly later on.Reported-by: Charles Machalow
Signed-off-by: Hannes Reinecke
Fixes: 11093cb1ef56 ("libata-scsi: generate correct ATA pass-through sense")
Cc: stable@vger.kernel.org # v4.7+
Signed-off-by: Tejun Heo
25 Oct, 2016
1 commit
-
We need to make sure hpriv->irq is set properly if we don't use per-port
vectors, so switch from blindly assigning pdev->irq to using
pci_irq_vector, which handles all interrupt types correctly.Signed-off-by: Christoph Hellwig
Reported-by: Robert Richter
Tested-by: Robert Richter
Tested-by: David Daney
Fixes: 0b9e2988ab22 ("ahci: use pci_alloc_irq_vectors")
Signed-off-by: Tejun Heo
24 Oct, 2016
1 commit
-
The previous patch renamed several files that are cross-referenced
along the Kernel documentation. Adjust the links to point to
the right places.Signed-off-by: Mauro Carvalho Chehab
21 Oct, 2016
1 commit
-
commit 17a51f12 ("ahci: only try to use multi-MSI mode if there is more
than 1 port") lead to a case where nvec isn't initialized before it's
used. Fix this by moving the check into the n_ports conditional.Reported-and-reviewed-by Colin Ian King
Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
20 Oct, 2016
5 commits
-
We previously had a check to see if the device has support for
prioritized ncq commands and a check to see if a device flag
is set, through a sysfs variable, in order to send a prioritized
command.This patch only allows the sysfs variable to be set if the device
supports prioritized commands enabling one check in ata_build_rw_tf
in order to determine whether or not to send a prioritized command.This patch depends on ata: ATA Command Priority Disabled By Default
tj: Minor subject and formatting updates.
Signed-off-by: Adam Manzanares
Signed-off-by: Tejun Heo -
Add a sysfs entry to turn on priority information being passed
to a ATA device. By default this feature is turned off.This patch depends on ata: Enabling ATA Command Priorities
tj: Renamed ncq_prio_on to ncq_prio_enable and removed trivial
ata_ncq_prio_on() and open-coded the test.Signed-off-by: Adam Manzanares
Signed-off-by: Tejun Heo -
This patch checks to see if an ATA device supports NCQ command priorities.
If so and the user has specified an iocontext that indicates
IO_PRIO_CLASS_RT then we build a tf with a high priority command.This is done to improve the tail latency of commands that are high
priority by passing priority to the device.tj: Removed trivial ata_ncq_prio_enabled() and open-coded the test.
Signed-off-by: Adam Manzanares
Signed-off-by: Tejun Heo -
Ls1046a is a new introduced soc which supports ATA3.0.
Signed-off-by: Tang Yuantian
Signed-off-by: Tejun Heo -
We should only try to allocate multiple MSI or MSI-X vectors if the device
actually has multiple ports. Otherwise pci_alloc_irq_vectors will return
a single vector due to n_ports = 1, in which case we shouldn't set the
AHCI_HFLAG_MULTI_MSI flag.Signed-off-by: Christoph Hellwig
Fixes: 0b9e2988 ("ahci: use pci_alloc_irq_vectors")
Reported-by: Emmanuel Benisty
Tested-by: Emmanuel Benisty
Signed-off-by: Tejun Heo
30 Sep, 2016
1 commit
-
This reverts commit 640847298e2b7f19 ("ahci: qoriq: Disable NCQ
on ls2080a SoC")The erratum has been fixed in ls2080a v2.0 and later soc.
In reality, customer will not get any ls2080a v1.0 soc. Neither apply
to any products. So reverting this commit won't create any side effect.Blacklisting v2.0 could also be a option, but that needs to check the
soc version which is not suitable in the driver.Signed-off-by: Tang Yuantian
Signed-off-by: Tejun Heo
22 Sep, 2016
2 commits
-
Signed-off-by: Harman Kalra
Signed-off-by: Tejun Heo -
Replace BUG() with BUG_ON().
Caught by coccinelle.Signed-off-by: Harman Kalra
Signed-off-by: Tejun Heo
21 Sep, 2016
1 commit
-
Replacing dma_pool_alloc and memset with a single call to dma_pool_zalloc
Signed-off-by: Harman Kalra
Signed-off-by: Tejun Heo
10 Sep, 2016
1 commit
-
Restrict support SCT Write Same to devices which also support ZAC where
support is required.Reported-by: Mike Krinkin
Signed-off-by: Shaun Tancheff
Signed-off-by: Tejun Heo
07 Sep, 2016
2 commits
-
Use the new pci_alloc_irq_vectors API to allocate MSI-X and MSI vectors.
The big advantage over the old code is that we can use the same API for
MSI and MSI-X, and that we don't need to store the MSI-X vector mapping
in driver-private data structures.This first conversion keeps the probe order as-is: MSI-X multi vector,
MSI multi vector, MSI single vector, MSI-X single vector and last a
single least legacy interrupt line. There is one small change of
behavior: we now check the "MSI Revert to Single Message" flag for
MSI-X in addition to MSI.Because the API to find the Linux IRQ number for a MSI/MSI-X vector
is PCI specific, but libahaci is bus-agnostic I had to a
get_irq_vector function pointer to struct ahci_host_priv. The
alternative would be to move the multi-vector case of ahci_host_activate
to ahci.c and just call ata_host_activate directly from the others
users of ahci_host_activate.Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
30 Aug, 2016
1 commit
-
Ninja32 needs to set some flags to indicate it does 32bit IO. However it currently assigns this which
loses the initializing flag and causes a warning spew. Fix it to use a logical or as is intended.Signed-off-by: Alan Cox
Tested-by: Ellmar Stelnberger
Signed-off-by: Tejun Heo
25 Aug, 2016
4 commits
-
Use non DMA write log when ATA_DFLAG_PIO is set.
Signed-off-by: Shaun Tancheff
Reviewed-by: Hannes Reinecke
Acked-by: Tejun Heo -
Correct handling of devices with sector_size other that 512 bytes.
In the case of a 4Kn device sector_size it is possible to describe a much
larger DSM Trim than the current fixed default of 512 bytes.This patch assumes the minimum descriptor is sector_size and fills out
the descriptor accordingly.The ACS-2 specification is quite clear that the DSM command payload is
sized as number of 512 byte transfers so a 4Kn device will operate
correctly without this patch.Signed-off-by: Shaun Tancheff
Acked-by: Tejun Heo -
SATA drives may support write same via SCT. This is useful
for setting the drive contents to a specific pattern (0's).Translate a SCSI WRITE SAME 16 command to be either a DSM TRIM
command or an SCT Write Same command.Based on the UNMAP flag:
- When set translate to DSM TRIM
- When not set translate to SCT Write SameSigned-off-by: Shaun Tancheff
Reviewed-by: Hannes Reinecke
Acked-by: Tejun Heo -
Safely overwriting the attached page to ATA format from the SCSI formatted
variant.Signed-off-by: Shaun Tancheff
Reviewed-by: Hannes Reinecke
Acked-by: Tejun Heo
12 Aug, 2016
2 commits
-
irq already contains the interrupt number for the port, don't add the
port index to it.Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
Fixes: d684a90d38e2 ("ahci: per-port msix support")
Cc: stable@vger.kernel.org v4.5+ -
Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
11 Aug, 2016
1 commit
-
Despite ST AHCI version = 1.3, reading HOST_PORTS_IMPL
returns 0. So force_port_map to 1 by using ports-implemented
DT property.Signed-off-by: Patrice Chotard
Signed-off-by: Tejun Heo
10 Aug, 2016
3 commits
-
By default the SATA IP on the qoriq SoCs does not generating
coherent/snoopable transactions. This patch enable it in the
sata axicc register.
In addition, the dma-coherent property must be set on the
SATA controller nodes.Signed-off-by: Tang Yuantian
Signed-off-by: Tejun Heo -
The default values for Port Phy2Cfg register and
Port Phy3Cfg register are better, no need to overwrite them.Signed-off-by: Tang Yuantian
Signed-off-by: Tejun Heo -
scsi_done() was called repeatedly and apparently because of that,
the kernel would call trace when we touch the Control mode page:Call Trace:
[] dump_stack+0x63/0x81
[] __warn+0xcb/0xf0
[] warn_slowpath_null+0x1d/0x20
[] ata_eh_finish+0xe0/0xf0 [libata]
[] sata_pmp_error_handler+0x640/0xa50 [libata]
[] ahci_error_handler+0x1d/0x70 [libahci]
[] ata_scsi_port_error_handler+0x430/0x770 [libata]
[] ? ata_scsi_cmd_error_handler+0xdd/0x160 [libata]
[] ata_scsi_error+0xa7/0xf0 [libata]
[] scsi_error_handler+0xaa/0x560 [scsi_mod]
[] ? scsi_eh_get_sense+0x180/0x180 [scsi_mod]
[] kthread+0xd8/0xf0
[] ret_from_fork+0x1f/0x40
[] ? kthread_worker_fn+0x170/0x170
---[ end trace 8b7501047e928a17 ]---Removed the unnecessary code and let ata_scsi_translate() do the job.
Also, since ata_mselect_control() has no ATA command to send to the
device, ata_scsi_mode_select_xlat() should return 1 for it, so that
ata_scsi_translate() will finish early to avoid ata_qc_issue().Signed-off-by: Tom Yan
Signed-off-by: Tejun Heo