20 Jan, 2015

1 commit

  • It is possible for ata_sff_flush_pio_task() to set ap->hsm_task_state to
    HSM_ST_IDLE in between the time __ata_sff_port_intr() checks for HSM_ST_IDLE
    and before it calls ata_sff_hsm_move() causing ata_sff_hsm_move() to BUG().

    This problem is hard to reproduce making this patch hard to verify, but this
    fix will prevent the race.

    I have not been able to reproduce the problem, but here is a crash dump from
    a 2.6.32 kernel.

    On examining the ata port's state, its hsm_task_state field has a value of HSM_ST_IDLE:

    crash> struct ata_port.hsm_task_state ffff881c1121c000
    hsm_task_state = 0

    Normally, this should not be possible as ata_sff_hsm_move() was called from ata_sff_host_intr(),
    which checks hsm_task_state and won't call ata_sff_hsm_move() if it has a HSM_ST_IDLE value.

    PID: 11053 TASK: ffff8816e846cae0 CPU: 0 COMMAND: "sshd"
    #0 [ffff88008ba03960] machine_kexec at ffffffff81038f3b
    #1 [ffff88008ba039c0] crash_kexec at ffffffff810c5d92
    #2 [ffff88008ba03a90] oops_end at ffffffff8152b510
    #3 [ffff88008ba03ac0] die at ffffffff81010e0b
    #4 [ffff88008ba03af0] do_trap at ffffffff8152ad74
    #5 [ffff88008ba03b50] do_invalid_op at ffffffff8100cf95
    #6 [ffff88008ba03bf0] invalid_op at ffffffff8100bf9b
    [exception RIP: ata_sff_hsm_move+317]
    RIP: ffffffff813a77ad RSP: ffff88008ba03ca0 RFLAGS: 00010097
    RAX: 0000000000000000 RBX: ffff881c1121dc60 RCX: 0000000000000000
    RDX: ffff881c1121dd10 RSI: ffff881c1121dc60 RDI: ffff881c1121c000
    RBP: ffff88008ba03d00 R8: 0000000000000000 R9: 000000000000002e
    R10: 000000000001003f R11: 000000000000009b R12: ffff881c1121c000
    R13: 0000000000000000 R14: 0000000000000050 R15: ffff881c1121dd78
    ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
    #7 [ffff88008ba03d08] ata_sff_host_intr at ffffffff813a7fbd
    #8 [ffff88008ba03d38] ata_sff_interrupt at ffffffff813a821e
    #9 [ffff88008ba03d78] handle_IRQ_event at ffffffff810e6ec0
    --- ---
    [exception RIP: pipe_poll+48]
    RIP: ffffffff81192780 RSP: ffff880f26d459b8 RFLAGS: 00000246
    RAX: 0000000000000000 RBX: ffff880f26d459c8 RCX: 0000000000000000
    RDX: 0000000000000001 RSI: 0000000000000000 RDI: ffff881a0539fa80
    RBP: ffffffff8100bb8e R8: ffff8803b23324a0 R9: 0000000000000000
    R10: ffff880f26d45dd0 R11: 0000000000000008 R12: ffffffff8109b646
    R13: ffff880f26d45948 R14: 0000000000000246 R15: 0000000000000246
    ORIG_RAX: ffffffffffffff10 CS: 0010 SS: 0018
    RIP: 00007f26017435c3 RSP: 00007fffe020c420 RFLAGS: 00000206
    RAX: 0000000000000017 RBX: ffffffff8100b072 RCX: 00007fffe020c45c
    RDX: 00007f2604a3f120 RSI: 00007f2604a3f140 RDI: 000000000000000d
    RBP: 0000000000000000 R8: 00007fffe020e570 R9: 0101010101010101
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007fffe020e5f0
    R13: 00007fffe020e5f4 R14: 00007f26045f373c R15: 00007fffe020e5e0
    ORIG_RAX: 0000000000000017 CS: 0033 SS: 002b

    Somewhere between the ata_sff_hsm_move() check and the ata_sff_host_intr() check, the value changed.
    On examining the other cpus to see what else was running, another cpu was running the error handler
    routines:

    PID: 326 TASK: ffff881c11014aa0 CPU: 1 COMMAND: "scsi_eh_1"
    #0 [ffff88008ba27e90] crash_nmi_callback at ffffffff8102fee6
    #1 [ffff88008ba27ea0] notifier_call_chain at ffffffff8152d515
    #2 [ffff88008ba27ee0] atomic_notifier_call_chain at ffffffff8152d57a
    #3 [ffff88008ba27ef0] notify_die at ffffffff810a154e
    #4 [ffff88008ba27f20] do_nmi at ffffffff8152b1db
    #5 [ffff88008ba27f50] nmi at ffffffff8152aaa0
    [exception RIP: _spin_lock_irqsave+47]
    RIP: ffffffff8152a1ff RSP: ffff881c11a73aa0 RFLAGS: 00000006
    RAX: 0000000000000001 RBX: ffff881c1121deb8 RCX: 0000000000000000
    RDX: 0000000000000246 RSI: 0000000000000020 RDI: ffff881c122612d8
    RBP: ffff881c11a73aa0 R8: ffff881c17083800 R9: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000000 R12: ffff881c1121c000
    R13: 000000000000001f R14: ffff881c1121dd50 R15: ffff881c1121dc60
    ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0000
    --- ---
    #6 [ffff881c11a73aa0] _spin_lock_irqsave at ffffffff8152a1ff
    #7 [ffff881c11a73aa8] ata_exec_internal_sg at ffffffff81396fb5
    #8 [ffff881c11a73b58] ata_exec_internal at ffffffff81397109
    #9 [ffff881c11a73bd8] atapi_eh_request_sense at ffffffff813a34eb

    Before it tried to acquire a spinlock, ata_exec_internal_sg() called ata_sff_flush_pio_task().
    This function will set ap->hsm_task_state to HSM_ST_IDLE, and has no locking around setting this
    value. ata_sff_flush_pio_task() can then race with the interrupt handler and potentially set
    HSM_ST_IDLE at a fatal moment, which will trigger a kernel BUG.

    v2: Fixup comment in ata_sff_flush_pio_task()

    tj: Further updated comment. Use ap->lock instead of shost lock and
    use the [un]lock_irq variant instead of the irqsave/restore one.

    Signed-off-by: David Milburn
    Signed-off-by: Tejun Heo
    Cc: stable@vger.kernel.org

    David Jeffery
     

19 Jan, 2015

1 commit

  • Ronny reports: https://bugzilla.kernel.org/show_bug.cgi?id=87101
    "Since commit 8a4aeec8d "libata/ahci: accommodate tag ordered
    controllers" the access to the harddisk on the first SATA-port is
    failing on its first access. The access to the harddisk on the
    second port is working normal.

    When reverting the above commit, access to both harddisks is working
    fine again."

    Maintain tag ordered submission as the default, but allow sata_sil24 to
    continue with the old behavior.

    Cc:
    Cc: Tejun Heo
    Reported-by: Ronny Hegewald
    Signed-off-by: Dan Williams
    Signed-off-by: Tejun Heo

    Dan Williams
     

14 Jan, 2015

1 commit


13 Jan, 2015

1 commit


10 Jan, 2015

1 commit


08 Jan, 2015

1 commit

  • As defined, the DRAT (Deterministic Read After Trim) and RZAT (Return
    Zero After Trim) flags in the ATA Command Set are unreliable in the
    sense that they only define what happens if the device successfully
    executed the DSM TRIM command. TRIM is only advisory, however, and the
    device is free to silently ignore all or parts of the request.

    In practice this renders the DRAT and RZAT flags completely useless and
    because the results are unpredictable we decided to disable discard in
    MD for 3.18 to avoid the risk of data corruption.

    Hardware vendors in the real world obviously need better guarantees than
    what the standards bodies provide. Unfortuntely those guarantees are
    encoded in product requirements documents rather than somewhere we can
    key off of them programatically. So we are compelled to disabling
    discard_zeroes_data for all devices unless we explicitly have data to
    support whitelisting them.

    This patch whitelists SSDs from a few of the main vendors. None of the
    whitelists are based on written guarantees. They are purely based on
    empirical evidence collected from internal and external users that have
    tested or qualified these drives in RAID deployments.

    The whitelist is only meant as a starting point and is by no means
    comprehensive:

    - All intel SSD models except for 510
    - Micron M5?0/M600
    - Samsung SSDs
    - Seagate SSDs

    Signed-off-by: Martin K. Petersen
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Tejun Heo

    Martin K. Petersen
     

07 Jan, 2015

1 commit


06 Jan, 2015

1 commit

  • The driver sata_dwc_460ex is using this symbol. To build it as a
    module we have to have the symbol exported. This patch adds
    EXPORT_SYMBOL_GPL() macro for that.

    tj: Updated to use EXPORT_SYMBOL_GPL() instead of EXPORT_SYMBOL() as
    the only known user is an in-tree driver. Suggested by Sergei.

    Signed-off-by: Andy Shevchenko
    Signed-off-by: Tejun Heo
    Cc: Sergei Shtylyov

    Andy Shevchenko
     

05 Jan, 2015

2 commits


19 Dec, 2014

1 commit

  • Pull more ACPI and power management updates from Rafael Wysocki:
    "These are regression fixes (leds-gpio, ACPI backlight driver,
    operating performance points library, ACPI device enumeration
    messages, cpupower tool), other bug fixes (ACPI EC driver, ACPI device
    PM), some cleanups in the operating performance points (OPP)
    framework, continuation of CONFIG_PM_RUNTIME elimination, a couple of
    minor intel_pstate driver changes, a new MAINTAINERS entry for it and
    an ACPI fan driver change needed for better support of thermal
    management in user space.

    Specifics:

    - Fix a regression in leds-gpio introduced by a recent commit that
    inadvertently changed the name of one of the properties used by the
    driver (Fabio Estevam).

    - Fix a regression in the ACPI backlight driver introduced by a
    recent fix that missed one special case that had to be taken into
    account (Aaron Lu).

    - Drop the level of some new kernel messages from the ACPI core
    introduced by a recent commit to KERN_DEBUG which they should have
    used from the start and drop some other unuseful KERN_ERR messages
    printed by ACPI (Rafael J Wysocki).

    - Revert an incorrect commit modifying the cpupower tool (Prarit
    Bhargava).

    - Fix two regressions introduced by recent commits in the OPP library
    and clean up some existing minor issues in that code (Viresh
    Kumar).

    - Continue to replace CONFIG_PM_RUNTIME with CONFIG_PM throughout the
    tree (or drop it where that can be done) in order to make it
    possible to eliminate CONFIG_PM_RUNTIME (Rafael J Wysocki, Ulf
    Hansson, Ludovic Desroches).

    There will be one more "CONFIG_PM_RUNTIME removal" batch after this
    one, because some new uses of it have been introduced during the
    current merge window, but that should be sufficient to finally get
    rid of it.

    - Make the ACPI EC driver more robust against race conditions related
    to GPE handler installation failures (Lv Zheng).

    - Prevent the ACPI device PM core code from attempting to disable
    GPEs that it has not enabled which confuses ACPICA and makes it
    report errors unnecessarily (Rafael J Wysocki).

    - Add a "force" command line switch to the intel_pstate driver to
    make it possible to override the blacklisting of some systems in
    that driver if needed (Ethan Zhao).

    - Improve intel_pstate code documentation and add a MAINTAINERS entry
    for it (Kristen Carlson Accardi).

    - Make the ACPI fan driver create cooling device interfaces witn
    names that reflect the IDs of the ACPI device objects they are
    associated with, except for "generic" ACPI fans (PNP ID "PNP0C0B").

    That's necessary for user space thermal management tools to be able
    to connect the fans with the parts of the system they are supposed
    to be cooling properly. From Srinivas Pandruvada"

    * tag 'pm+acpi-3.19-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (32 commits)
    MAINTAINERS: add entry for intel_pstate
    ACPI / video: update the skip case for acpi_video_device_in_dod()
    power / PM: Eliminate CONFIG_PM_RUNTIME
    NFC / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    SCSI / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    ACPI / EC: Fix unexpected ec_remove_handlers() invocations
    Revert "tools: cpupower: fix return checks for sysfs_get_idlestate_count()"
    tracing / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    x86 / PM: Replace CONFIG_PM_RUNTIME in io_apic.c
    PM: Remove the SET_PM_RUNTIME_PM_OPS() macro
    mmc: atmel-mci: use SET_RUNTIME_PM_OPS() macro
    PM / Kconfig: Replace PM_RUNTIME with PM in dependencies
    ARM / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    sound / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    phy / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    video / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    tty / PM: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    spi: Replace CONFIG_PM_RUNTIME with CONFIG_PM
    ACPI / PM: Do not disable wakeup GPEs that have not been enabled
    ACPI / utils: Drop error messages from acpi_evaluate_reference()
    ...

    Linus Torvalds
     

15 Dec, 2014

1 commit

  • Pull driver core update from Greg KH:
    "Here's the set of driver core patches for 3.19-rc1.

    They are dominated by the removal of the .owner field in platform
    drivers. They touch a lot of files, but they are "simple" changes,
    just removing a line in a structure.

    Other than that, a few minor driver core and debugfs changes. There
    are some ath9k patches coming in through this tree that have been
    acked by the wireless maintainers as they relied on the debugfs
    changes.

    Everything has been in linux-next for a while"

    * tag 'driver-core-3.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (324 commits)
    Revert "ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries"
    fs: debugfs: add forward declaration for struct device type
    firmware class: Deletion of an unnecessary check before the function call "vunmap"
    firmware loader: fix hung task warning dump
    devcoredump: provide a one-way disable function
    device: Add dev__once variants
    ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries
    ath: use seq_file api for ath9k debugfs files
    debugfs: add helper function to create device related seq_file
    drivers/base: cacheinfo: remove noisy error boot message
    Revert "core: platform: add warning if driver has no owner"
    drivers: base: support cpu cache information interface to userspace via sysfs
    drivers: base: add cpu_device_create to support per-cpu devices
    topology: replace custom attribute macros with standard DEVICE_ATTR*
    cpumask: factor out show_cpumap into separate helper function
    driver core: Fix unbalanced device reference in drivers_probe
    driver core: fix race with userland in device_add()
    sysfs/kernfs: make read requests on pre-alloc files use the buffer.
    sysfs/kernfs: allow attributes to request write buffer be pre-allocated.
    fs: sysfs: return EGBIG on write if offset is larger than file size
    ...

    Linus Torvalds
     

13 Dec, 2014

1 commit

  • After commit b2b49ccbdd54 (PM: Kconfig: Set PM_RUNTIME if PM_SLEEP is
    selected) PM_RUNTIME is always set if PM is set, so Kconfig options
    depending on CONFIG_PM_RUNTIME may now be changed to depend on
    CONFIG_PM.

    Replace PM_RUNTIME with PM in Kconfig dependencies throughout the
    tree.

    Signed-off-by: Rafael J. Wysocki
    Acked-by: Felipe Balbi
    Acked-by: Greg Kroah-Hartman
    Acked-by: Tejun Heo

    Rafael J. Wysocki
     

12 Dec, 2014

1 commit

  • Pull libata changes from Tejun Heo:
    "The only interesting piece is the support for shingled drives. The
    changes in libata layer are minimal. All it does is identifying the
    new class of device and report upwards accordingly"

    * 'for-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata:
    libata: Remove FIXME comment in atapi_request_sense()
    sata_rcar: Document deprecated "renesas,rcar-sata"
    sata_rcar: Add clocks to sata_rcar bindings
    ahci_sunxi: Make AHCI_HFLAG_NO_PMP flag configurable with a module option
    libata-scsi: Update SATL for ZAC drives
    libata: Implement ATA_DEV_ZAC
    libsas: use ata_dev_classify()

    Linus Torvalds
     

09 Dec, 2014

1 commit

  • Pull SCSI updates from James Bottomley:
    "This patch is the usual mix of driver updates (srp, ipr, scsi_debug,
    NCR5380, fnic, 53c974, ses, wd719x, hpsa, megaraid_sas).

    Of those, wd7a9x is new and 53c974 is a rewrite of the old tmscsim
    driver and the extensive work by Finn Thain rewrites all the NCR5380
    based drivers.

    There's also extensive infrastructure updates: a new logging
    infrastructure for sense information and a rewrite of the tagged
    command queue API and an assortment of minor updates"

    * tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (183 commits)
    scsi: set fmt to NULL scsi_extd_sense_format() by default
    libsas: remove task_collector mode
    wd719x: remove dma_cache_sync call
    scsi_debug: add Report supported opcodes+tmfs; Compare and write
    scsi_debug: change SCSI command parser to table driven
    scsi_debug: add Capacity Changed Unit Attention
    scsi_debug: append inject error flags onto scsi_cmnd object
    scsi_debug: pinpoint invalid field in sense data
    wd719x: Add firmware documentation
    wd719x: Introduce Western Digital WD7193/7197/7296 PCI SCSI card driver
    eeprom-93cx6: Add (read-only) support for 8-bit mode
    esas2r: fix an oversight in setting return value
    esas2r: fix an error path in esas2r_ioctl_handler
    esas2r: fir error handling in do_fm_api
    scsi: add SPC-3 command definitions
    scsi: rename SERVICE_ACTION_IN to SERVICE_ACTION_IN_16
    scsi: remove scsi_driver owner field
    scsi: move scsi_dispatch_cmd to scsi_lib.c
    scsi: stop passing a gfp_mask argument down the command setup path
    scsi: remove scsi_next_command
    ...

    Linus Torvalds
     

08 Dec, 2014

2 commits


05 Dec, 2014

2 commits

  • Just like 0x1600 which got blacklisted by 66a7cbc303f4 ("ahci: disable
    MSI instead of NCQ on Samsung pci-e SSDs on macbooks"), 0xa800 chokes
    on NCQ commands if MSI is enabled. Disable MSI.

    Signed-off-by: Tejun Heo
    Reported-by: Dominik Mierzejewski
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=89171
    Cc: stable@vger.kernel.org

    Tejun Heo
     
  • Remove the FIXME comment in atapi_request_sense() asking whether
    memset of sense buffer is necessary. The buffer may be partially or
    fully filled by the device. We want it to be cleared.

    tj: Updated description.

    Signed-off-by: Nicholas Krause
    Signed-off-by: Tejun Heo

    Nicholas Krause
     

03 Dec, 2014

2 commits


25 Nov, 2014

1 commit


24 Nov, 2014

1 commit

  • Drop the now unused reason argument from the ->change_queue_depth method.
    Also add a return value to scsi_adjust_queue_depth, and rename it to
    scsi_change_queue_depth now that it can be used as the default
    ->change_queue_depth implementation.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Mike Christie
    Reviewed-by: Hannes Reinecke

    Christoph Hellwig
     

15 Nov, 2014

1 commit

  • The use of the AHCI_HFLAG_NO_PMP flag is something which we inherited from
    the Allwinner android kernel sources, and I've always wanted to test if this
    is really necessary.

    So recently I've bought a sata port multiplexer, and I've given this a test
    spin on both A10 and A20 devices, and it seems to work fine:

    [ 2.154456] ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
    [ 2.161092] ata1.15: Port Multiplier 1.2, 0x197b:0x0325 r0, 5 ports, feat 0x5/0xf
    [ 2.175511] ata1.00: hard resetting link
    [ 2.524929] ata1.00: SATA link up 3.0 Gbps (SStatus 123 SControl 320)
    [ 2.531430] ata1.01: hard resetting link
    [ 2.974465] ata1.01: link resume succeeded after 1 retries
    [ 3.094932] ata1.01: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
    [ 3.101431] ata1.02: hard resetting link
    [ 4.174466] ata1.02: failed to resume link (SControl 0)
    [ 4.180065] ata1.02: SATA link down (SStatus 0 SControl 0)
    (and the same for links 3 and 4)

    Once the NO_PMP flag is removed it correctly sees the 2 disks which I've
    attached, and I can mount and use them just fine.

    Unfortunately when I then directly attached a disk to the sata port on the
    sunxi SoC, and booted a kernel without the AHCI_HFLAG_NO_PMP flag, it would
    not recognize that disk.

    It turns out that the sata controller in the sunxi SoCs fails to handle
    soft-resets issued to directly attached disks, and when pmp support is
    enabled the kernel will always issue a soft-reset.

    So add a module parameter to enable pmp usage, and default this to off, so
    that directly attached disks keep working normally.

    Signed-off-by: Hans de Goede
    Signed-off-by: Tejun Heo

    Hans de Goede
     

12 Nov, 2014

1 commit

  • Remove the tagged argument from scsi_adjust_queue_depth, and just let it
    handle the queue depth. For most drivers those two are fairly separate,
    given that most modern drivers don't care about the SCSI "tagged" status
    of a command at all, and many old drivers allow queuing of multiple
    untagged commands in the driver.

    Instead we start out with the ->simple_tags flag set before calling
    ->slave_configure, which is how all drivers actually looking at
    ->simple_tags except for one worke anyway. The one other case looks
    broken, but I've kept the behavior as-is for now.

    Except for that we only change ->simple_tags from the ->change_queue_type,
    and when rejecting a tag message in a single driver, so keeping this
    churn out of scsi_adjust_queue_depth is a clear win.

    Now that the usage of scsi_adjust_queue_depth is more obvious we can
    also remove all the trivial instances in ->slave_alloc or ->slave_configure
    that just set it to the cmd_per_lun default.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Mike Christie
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Martin K. Petersen

    Christoph Hellwig
     

06 Nov, 2014

2 commits


05 Nov, 2014

1 commit

  • Changes into the AHCI subsystem have introduced a bug by not taking into
    account the force_port_map and mask_port_map parameters when using the
    ahci_pci_save_initial_config function. This commit fixes it by setting
    the internal parameters of the ahci_port_priv structure.

    Fixes: 725c7b570fda

    Reported-and-tested-by: Zlatko Calusic
    Signed-off-by: Antoine Tenart

    Antoine Tenart
     

28 Oct, 2014

5 commits

  • Signed-off-by: Koji Matsuoka
    Signed-off-by: Yoshihiro Kaneko
    Signed-off-by: Tejun Heo

    Koji Matsuoka
     
  • This patch adds the AHCI-mode SATA Device IDs for the Intel Sunrise Point PCH.

    Signed-off-by: James Ralston
    Signed-off-by: Tejun Heo
    Cc: stable@vger.kernel.org

    James Ralston
     
  • Samsung pci-e SSDs on macbooks failed miserably on NCQ commands, so
    67809f85d31e ("ahci: disable NCQ on Samsung pci-e SSDs on macbooks")
    disabled NCQ on them. It turns out that NCQ is fine as long as MSI is
    not used, so let's turn off MSI and leave NCQ on.

    Signed-off-by: Tejun Heo
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=60731
    Tested-by:
    Tested-by: Imre Kaloz
    Cc: stable@vger.kernel.org
    Fixes: 67809f85d31e ("ahci: disable NCQ on Samsung pci-e SSDs on macbooks")

    Tejun Heo
     
  • This reverts commit 18dcf433f3ded61eb140a55e7048ec2fef79e723.
    IRQF_ONESHOT was missing from the conversion causing screaming
    interrupts problems on some setups and LKP detected measureable drop
    in IO performance. It looks like we'll first need to drop the
    threaded IRQ handling first before splitting locking.

    Signed-off-by: Tejun Heo
    Cc: Alexander Gordeev
    Reported-by: kernel test robot
    Reported-by: Marc Zyngier
    Link: http://lkml.kernel.org/g/20141027021651.GF27038@yliu-dev.sh.intel.com
    Link: http://lkml.kernel.org/g/1414082970-20775-1-git-send-email-marc.zyngier@arm.com

    Tejun Heo
     
  • This reverts commit 33fb0d01ce60fe4c0c12c4f0c134c5cdb818ac5a.

    18dcf433f3de ("AHCI: Optimize single IRQ interrupt processing") is
    scheduled to be reverted. This is an optimization dependent on the
    mentioned commit. Revert it first.

    Signed-off-by: Tejun Heo

    Tejun Heo
     

27 Oct, 2014

1 commit


20 Oct, 2014

1 commit


19 Oct, 2014

1 commit

  • Pull slave-dmaengine updates from Vinod Koul:
    "For dmaengine contributions we have:
    - designware cleanup by Andy
    - my series moving device_control users to dmanegine_xxx APIs for
    later removal of device_control API
    - minor fixes spread over drivers mainly mv_xor, pl330, mmp, imx-sdma
    etc"

    * 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma: (60 commits)
    serial: atmel: add missing dmaengine header
    dmaengine: remove FSLDMA_EXTERNAL_START
    dmaengine: freescale: remove FSLDMA_EXTERNAL_START control method
    carma-fpga: move to fsl_dma_external_start()
    carma-fpga: use dmaengine_xxx() API
    dmaengine: freescale: add and export fsl_dma_external_start()
    dmaengine: add dmaengine_prep_dma_sg() helper
    video: mx3fb: use dmaengine_terminate_all() API
    serial: sh-sci: use dmaengine_terminate_all() API
    net: ks8842: use dmaengine_terminate_all() API
    mtd: sh_flctl: use dmaengine_terminate_all() API
    mtd: fsmc_nand: use dmaengine_terminate_all() API
    V4L2: mx3_camer: use dmaengine_pause() API
    dmaengine: coh901318: use dmaengine_terminate_all() API
    pata_arasan_cf: use dmaengine_terminate_all() API
    dmaengine: edma: check for echan->edesc => NULL in edma_dma_pause()
    dmaengine: dw: export probe()/remove() and Co to users
    dmaengine: dw: enable and disable controller when needed
    dmaengine: dw: always export dw_dma_{en,dis}able
    dmaengine: dw: introduce dw_dma_on() helper
    ...

    Linus Torvalds
     

16 Oct, 2014

1 commit


10 Oct, 2014

1 commit

  • Pull libata update from Tejun Heo:
    "AHCI is getting per-port irq handling and locks for better
    scalability. The gain is not huge but measureable with multiple high
    iops devices connected to the same host; however, the value of
    threaded IRQ handling seems negligible for AHCI and it likely will
    revert to non-threaded handling soon.

    Another noteworthy change is George Spelvin's "libata: Un-break ATA
    blacklist". During 3.17 devel cycle, the libata blacklist glob
    matching got generalized and rewritten; unfortunately, the patch
    forgot to swap arguments to match the new match function and ended up
    breaking blacklist matching completely. It got noticed only a couple
    days ago so it couldn't make for-3.17-fixes either. :(

    Other than the above two, nothing too interesting - the usual cleanup
    churns and device-specific changes"

    * 'for-3.18' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata: (22 commits)
    pata_serverworks: disable 64-KB DMA transfers on Broadcom OSB4 IDE Controller
    libata: Un-break ATA blacklist
    AHCI: Do not acquire ata_host::lock from single IRQ handler
    AHCI: Optimize single IRQ interrupt processing
    AHCI: Do not read HOST_IRQ_STAT reg in multi-MSI mode
    AHCI: Make few function names more descriptive
    AHCI: Move host activation code into ahci_host_activate()
    AHCI: Move ahci_host_activate() function to libahci.c
    AHCI: Pass SCSI host template as arg to ahci_host_activate()
    ata: pata_imx: Use the SIMPLE_DEV_PM_OPS() macro
    AHCI: Cleanup checking of multiple MSIs/SLM modes
    libata-sff: Fix controllers with no ctl port
    ahci_xgene: Fix the error print invalid resource for APM X-Gene SoC AHCI SATA Host Controller driver.
    libata: change ata__printk routines to return void
    ata: qcom: Add device tree bindings information
    ahci-platform: Bump max number of clocks to 5
    ahci: ahci_p5wdh_workaround - constify DMI table
    libahci_platform: Staticize ahci_platform_able_phys()
    pata_platform: Remove useless irq_flags field
    pata_of_platform: Remove "electra-ide" quirk
    ...

    Linus Torvalds
     

09 Oct, 2014

1 commit

  • Pull ARM SoC non-critical bug fixes from Arnd Bergmann:
    "These are bug fixes for harmless problems that were not important
    enough to get fixed in 3.17. The majority of these are OMAP specific,
    but there are also a couple for Marvell mvebu, cns3xxx, and others, as
    well as some updates for the MAINTAINERS file.

    In particular, Robert Jarzmik and Daniel Mack now volunteered to help
    out maintaining the PXA platform, Krzysztof Halasa took over the
    cns3xxx platform, Carlo Caione is the maintainer for the new Amlogic
    meson platform, and Matthias Brugger is now listed for the mediatek
    platform he recently contributed"

    * tag 'fixes-nc-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (42 commits)
    MAINTAINERS: update Shawn's email address
    MAINTAINERS: condense some Tegra related entries
    MAINTAINERS: add Alexandre Courbot for Tegra
    MAINTAINERS: CNS3xxx and IXP4xx update.
    MAINTAINERS: Add maintainers entry for Mediatek SoCs
    arm, vt8500, LLVMLlinux: Use mcr instead of mcr% for mach-vt8500
    MAINTAINERS: add a third maintainer to mach-bcm
    CNS3xxx: Fix PCIe read size limit.
    CNS3xxx: Fix logical PCIe topology.
    CNS3xxx: Fix debug UART.
    MAINTAINERS: Add entry for the Amlogic MesonX SoCs
    MAINTAINERS: update ARM pxa maintainers
    ARM: at91/PMC: don't forget to write PMC_PCDR register to disable clocks
    ARM: at91: fix at91sam9263ek DT mmc pinmuxing settings
    ARM: mvebu: Netgear RN102: Use Hardware BCH ECC
    ARM: Kirkwood: Fix DT based DSA.
    ARM: OMAP2+: make of_device_ids const
    ARM: omap2: make arrays containing machine compatible strings const
    ARM: LPC32xx: Fix reset function
    ARM: mvebu: Netgear RN2120: Use Hardware BCH ECC
    ...

    Linus Torvalds
     

08 Oct, 2014

1 commit

  • The Broadcom OSB4 IDE Controller (vendor and device IDs: 1166:0211)
    does not support 64-KB DMA transfers.
    Whenever a 64-KB DMA transfer is attempted,
    the transfer fails and messages similar to the following
    are written to the console log:

    [ 2431.851125] sr 0:0:0:0: [sr0] Unhandled sense code
    [ 2431.851139] sr 0:0:0:0: [sr0] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
    [ 2431.851152] sr 0:0:0:0: [sr0] Sense Key : Hardware Error [current]
    [ 2431.851166] sr 0:0:0:0: [sr0] Add. Sense: Logical unit communication time-out
    [ 2431.851182] sr 0:0:0:0: [sr0] CDB: Read(10): 28 00 00 00 76 f4 00 00 40 00
    [ 2431.851210] end_request: I/O error, dev sr0, sector 121808

    When the libata and pata_serverworks modules
    are recompiled with ATA_DEBUG and ATA_VERBOSE_DEBUG defined in libata.h,
    the 64-KB transfer size in the scatter-gather list can be seen
    in the console log:

    [ 2664.897267] sr 9:0:0:0: [sr0] Send:
    [ 2664.897274] 0xf63d85e0
    [ 2664.897283] sr 9:0:0:0: [sr0] CDB:
    [ 2664.897288] Read(10): 28 00 00 00 7f b4 00 00 40 00
    [ 2664.897319] buffer = 0xf6d6fbc0, bufflen = 131072, queuecommand 0xf81b7700
    [ 2664.897331] ata_scsi_dump_cdb: CDB (1:0,0,0) 28 00 00 00 7f b4 00 00 40
    [ 2664.897338] ata_scsi_translate: ENTER
    [ 2664.897345] ata_sg_setup: ENTER, ata1
    [ 2664.897356] ata_sg_setup: 3 sg elements mapped
    [ 2664.897364] ata_bmdma_fill_sg: PRD[0] = (0x66FD2000, 0xE000)
    [ 2664.897371] ata_bmdma_fill_sg: PRD[1] = (0x65000000, 0x10000)
    ------------------------------------------------------> =======
    [ 2664.897378] ata_bmdma_fill_sg: PRD[2] = (0x66A10000, 0x2000)
    [ 2664.897386] ata1: ata_dev_select: ENTER, device 0, wait 1
    [ 2664.897422] ata_sff_tf_load: feat 0x1 nsect 0x0 lba 0x0 0x0 0xFC
    [ 2664.897428] ata_sff_tf_load: device 0xA0
    [ 2664.897448] ata_sff_exec_command: ata1: cmd 0xA0
    [ 2664.897457] ata_scsi_translate: EXIT
    [ 2664.897462] leaving scsi_dispatch_cmnd()
    [ 2664.897497] Doing sr request, dev = sr0, block = 0
    [ 2664.897507] sr0 : reading 64/256 512 byte blocks.
    [ 2664.897553] ata_sff_hsm_move: ata1: protocol 7 task_state 1 (dev_stat 0x58)
    [ 2664.897560] atapi_send_cdb: send cdb
    [ 2666.910058] ata_bmdma_port_intr: ata1: host_stat 0x64
    [ 2666.910079] __ata_sff_port_intr: ata1: protocol 7 task_state 3
    [ 2666.910093] ata_sff_hsm_move: ata1: protocol 7 task_state 3 (dev_stat 0x51)
    [ 2666.910101] ata_sff_hsm_move: ata1: protocol 7 task_state 4 (dev_stat 0x51)
    [ 2666.910129] sr 9:0:0:0: [sr0] Done:
    [ 2666.910136] 0xf63d85e0 TIMEOUT

    lspci shows that the driver used for the Broadcom OSB4 IDE Controller is
    pata_serverworks:

    00:0f.1 IDE interface: Broadcom OSB4 IDE Controller (prog-if 8e [Master SecP SecO PriP])
    Flags: bus master, medium devsel, latency 64
    [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
    [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
    I/O ports at 0170 [size=8]
    I/O ports at 0374 [size=4]
    I/O ports at 1440 [size=16]
    Kernel driver in use: pata_serverworks

    The pata_serverworks driver supports five distinct device IDs,
    one being the OSB4 and the other four belonging to the CSB series.
    The CSB series appears to support 64-KB DMA transfers,
    as tests on a machine with an SAI2 motherboard
    containing a Broadcom CSB5 IDE Controller (vendor and device IDs: 1166:0212)
    showed no problems with 64-KB DMA transfers.

    This problem was first discovered when attempting to install openSUSE
    from a DVD on a machine with an STL2 motherboard.
    Using the pata_serverworks module,
    older releases of openSUSE will not install at all due to the timeouts.
    Releases of openSUSE prior to 11.3 can be installed by disabling
    the pata_serverworks module using the brokenmodules boot parameter,
    which causes the serverworks module to be used instead.
    Recent releases of openSUSE (12.2 and later) include better error recovery and
    will install, though very slowly.
    On all openSUSE releases, the problem can be recreated
    on a machine containing a Broadcom OSB4 IDE Controller
    by mounting an install DVD and running a command similar to the following:

    find /mnt -type f -print | xargs cat > /dev/null

    The patch below corrects the problem.
    Similar to the other ATA drivers that do not support 64-KB DMA transfers,
    the patch changes the ata_port_operations qc_prep vector to point to a routine
    that breaks any 64-KB segment into two 32-KB segments and
    changes the scsi_host_template sg_tablesize element to reduce by half
    the number of scatter/gather elements allowed.
    These two changes affect only the OSB4.

    Signed-off-by: Scott Carter
    Signed-off-by: Tejun Heo
    Cc: stable@vger.kernel.org

    Scott Carter