1. 17 4月, 2014 2 次提交
    • A
      ahci: Ensure "MSI Revert to Single Message" mode is not enforced · ab0f9e78
      Alexander Gordeev 提交于
      The AHCI specification allows hardware to choose to revert to
      single MSI mode when fewer messages are allocated than requested.
      Yet, at least ICH10 chipset reverts to single MSI mode even when
      enough messages are allocated in some cases (see below).
      
      This update forces the driver to not rely on initialization of
      multiple MSIs mode alone and always check if "MSI Revert to
      Single Message" (MRSM) mode was enforced by the controller and
      fallback to the single MSI mode in case it did.
      
      That prevents a situation when the driver configured multiple
      per-port IRQ handlers, but the controller sends all port's
      interrupts to a single IRQ, which could easily screw up the
      interrupt handling and lead to delays and possibly crashes.
      
      The fix was tested on a 6-port controller that successfully
      reverted to the single MSI mode:
      
      00:1f.2 SATA controller: Intel Corporation 82801JI (ICH10 Family) SATA
      AHCI Controller (prog-if 01 [AHCI 1.0])
      	Subsystem: Super Micro Computer Inc Device 10a7
      	Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 101
      	I/O ports at f110 [size=8]
      	I/O ports at f100 [size=4]
      	I/O ports at f0f0 [size=8]
      	I/O ports at f0e0 [size=4]
      	I/O ports at f020 [size=32]
      	Memory at fbf00000 (32-bit, non-prefetchable) [size=2K]
      	Capabilities: [80] MSI: Enable+ Count=1/16 Maskable- 64bit-
      	Capabilities: [70] Power Management version 3
      	Capabilities: [a8] SATA HBA v1.0
      	Capabilities: [b0] PCI Advanced Features
      	Kernel driver in use: ahci
      
      With 6 ports just 8 MSI vectors should be enough, but the adapter
      enforces the MRSM mode when less than 16 vectors are written to
      the Multiple Messages Enable PCI register. I instigated MRSM mode
      by forcing @nvec to 8 in ahci_init_interrupts().
      Signed-off-by: NAlexander Gordeev <agordeev@redhat.com>
      Cc: linux-ide@vger.kernel.org
      Cc: stable@vger.kernel.org
      Signed-off-by: NTejun Heo <tj@kernel.org>
      ab0f9e78
    • D
      ahci: do not request irq for dummy port · 9ae794ac
      David Milburn 提交于
      System may crash in ahci_hw_interrupt() or ahci_thread_fn() when
      accessing the interrupt status in a port's private_data if the port is
      actually a DUMMY port.
      
      00:1f.2 SATA controller: Intel Corporation 82801JI (ICH10 Family) SATA AHCI Controller
      
      <snip console output for linux-3.15-rc1>
      [    9.352080] ahci 0000:00:1f.2: AHCI 0001.0200 32 slots 6 ports 3 Gbps 0x1 impl SATA mode
      [    9.352084] ahci 0000:00:1f.2: flags: 64bit ncq sntf pm led clo pio slum part ccc
      [    9.368155] Console: switching to colour frame buffer device 128x48
      [    9.439759] mgag200 0000:11:00.0: fb0: mgadrmfb frame buffer device
      [    9.446765] mgag200 0000:11:00.0: registered panic notifier
      [    9.470166] scsi1 : ahci
      [    9.479166] scsi2 : ahci
      [    9.488172] scsi3 : ahci
      [    9.497174] scsi4 : ahci
      [    9.506175] scsi5 : ahci
      [    9.515174] scsi6 : ahci
      [    9.518181] ata1: SATA max UDMA/133 abar m2048@0x95c00000 port 0x95c00100 irq 91
      [    9.526448] ata2: DUMMY
      [    9.529182] ata3: DUMMY
      [    9.531916] ata4: DUMMY
      [    9.534650] ata5: DUMMY
      [    9.537382] ata6: DUMMY
      [    9.576196] [drm] Initialized mgag200 1.0.0 20110418 for 0000:11:00.0 on minor 0
      [    9.845257] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
      [    9.865161] ata1.00: ATAPI: Optiarc DVD RW AD-7580S, FX04, max UDMA/100
      [    9.891407] ata1.00: configured for UDMA/100
      [    9.900525] scsi 1:0:0:0: CD-ROM            Optiarc  DVD RW AD-7580S  FX04 PQ: 0 ANSI: 5
      [   10.247399] iTCO_vendor_support: vendor-support=0
      [   10.261572] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.11
      [   10.269764] iTCO_wdt: unable to reset NO_REBOOT flag, device disabled by hardware/BIOS
      [   10.301932] sd 0:2:0:0: [sda] 570310656 512-byte logical blocks: (291 GB/271 GiB)
      [   10.317085] sd 0:2:0:0: [sda] Write Protect is off
      [   10.328326] sd 0:2:0:0: [sda] Write cache: disabled, read cache: disabled, supports DPO and FUA
      [   10.375452] BUG: unable to handle kernel NULL pointer dereference at 000000000000003c
      [   10.384217] IP: [<ffffffffa0133df0>] ahci_hw_interrupt+0x100/0x130 [libahci]
      [   10.392101] PGD 0
      [   10.394353] Oops: 0000 [#1] SMP
      [   10.397978] Modules linked in: sr_mod(+) cdrom sd_mod iTCO_wdt crc_t10dif iTCO_vendor_support crct10dif_common ahci libahci libata lpc_ich mfd_core mgag200 syscopyarea sysfillrect sysimgblt i2c_algo_bit drm_kms_helper ttm drm i2c_core megaraid_sas dm_mirror dm_region_hash
      dm_log dm_mod
      [   10.426499] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.15.0-rc1 #1
      [   10.433495] Hardware name: QCI QSSC-S4R/QSSC-S4R, BIOS QSSC-S4R.QCI.01.00.S013.032920111005 03/29/2011
      [   10.443886] task: ffffffff81906460 ti: ffffffff818f0000 task.ti: ffffffff818f0000
      [   10.452239] RIP: 0010:[<ffffffffa0133df0>]  [<ffffffffa0133df0>] ahci_hw_interrupt+0x100/0x130 [libahci]
      [   10.462838] RSP: 0018:ffff880033c03d98  EFLAGS: 00010046
      [   10.468767] RAX: 0000000000a400a4 RBX: ffff880029a6bc18 RCX: 00000000fffffffa
      [   10.476731] RDX: 00000000000000a4 RSI: ffff880029bb0000 RDI: ffff880029a6bc18
      [   10.484696] RBP: ffff880033c03dc8 R08: 0000000000000000 R09: ffff88002f800490
      [   10.492661] R10: 0000000000000000 R11: 0000000000000005 R12: 0000000000000000
      [   10.500625] R13: ffff880029a6bd98 R14: 0000000000000000 R15: ffffc90000194000
      [   10.508590] FS:  0000000000000000(0000) GS:ffff880033c00000(0000) knlGS:0000000000000000
      [   10.517623] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      [   10.524035] CR2: 000000000000003c CR3: 00000000328ff000 CR4: 00000000000007b0
      [   10.531999] Stack:
      [   10.534241]  0000000000000017 ffff880031ba7d00 000000000000005c ffff880031ba7d00
      [   10.542535]  0000000000000000 000000000000005c ffff880033c03e10 ffffffff810c2a1e
      [   10.550827]  ffff880031ae2900 000000008108fb4f ffff880031ae2900 ffff880031ae2984
      [   10.559121] Call Trace:
      [   10.561849]  <IRQ>
      [   10.563994]  [<ffffffff810c2a1e>] handle_irq_event_percpu+0x3e/0x1a0
      [   10.571309]  [<ffffffff810c2bbd>] handle_irq_event+0x3d/0x60
      [   10.577631]  [<ffffffff810c4fdd>] try_one_irq.isra.6+0x8d/0xf0
      [   10.584142]  [<ffffffff810c5313>] note_interrupt+0x173/0x1f0
      [   10.590460]  [<ffffffff810c2a8e>] handle_irq_event_percpu+0xae/0x1a0
      [   10.597554]  [<ffffffff810c2bbd>] handle_irq_event+0x3d/0x60
      [   10.603872]  [<ffffffff810c5727>] handle_edge_irq+0x77/0x130
      [   10.610199]  [<ffffffff81014b8f>] handle_irq+0xbf/0x150
      [   10.616040]  [<ffffffff8109ff4e>] ? vtime_account_idle+0xe/0x50
      [   10.622654]  [<ffffffff815fca1a>] ? atomic_notifier_call_chain+0x1a/0x20
      [   10.630140]  [<ffffffff816038cf>] do_IRQ+0x4f/0xf0
      [   10.635490]  [<ffffffff815f8aed>] common_interrupt+0x6d/0x6d
      [   10.641805]  <EOI>
      [   10.643950]  [<ffffffff8149ca9f>] ? cpuidle_enter_state+0x4f/0xc0
      [   10.650972]  [<ffffffff8149ca98>] ? cpuidle_enter_state+0x48/0xc0
      [   10.657775]  [<ffffffff8149cb47>] cpuidle_enter+0x17/0x20
      [   10.663807]  [<ffffffff810b0070>] cpu_startup_entry+0x2c0/0x3d0
      [   10.670423]  [<ffffffff815dfcc7>] rest_init+0x77/0x80
      [   10.676065]  [<ffffffff81a60f47>] start_kernel+0x40f/0x41a
      [   10.682190]  [<ffffffff81a60941>] ? repair_env_string+0x5c/0x5c
      [   10.688799]  [<ffffffff81a60120>] ? early_idt_handlers+0x120/0x120
      [   10.695699]  [<ffffffff81a605ee>] x86_64_start_reservations+0x2a/0x2c
      [   10.702889]  [<ffffffff81a60733>] x86_64_start_kernel+0x143/0x152
      [   10.709689] Code: a0 fc ff 85 c0 8b 4d d4 74 c3 48 8b 7b 08 89 ca 48 c7 c6 60 66 13 a0 31 c0 e8 9d 70 28 e1 8b 4d d4 eb aa 0f 1f 84 00 00 00 00 00 <45> 8b 64 24 3c 48 89 df e8 23 47 4c e1 41 83 fc 01 19 c0 48 83
      [   10.731470] RIP  [<ffffffffa0133df0>] ahci_hw_interrupt+0x100/0x130 [libahci]
      [   10.739441]  RSP <ffff880033c03d98>
      [   10.743333] CR2: 000000000000003c
      [   10.747032] ---[ end trace b6e82636970e2690 ]---
      [   10.760190] Kernel panic - not syncing: Fatal exception in interrupt
      [   10.767291] Kernel Offset: 0x0 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffff9fffffff)
      
      Cc: Alexander Gordeev <agordeev@redhat.com>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: <stable@vger.kernel.org>
      Signed-of-by: NDavid Milburn <dmilburn@redhat.com>
      Fixes: 5ca72c4f ("AHCI: Support multiple MSIs")
      9ae794ac
  2. 15 4月, 2014 2 次提交
  3. 08 4月, 2014 1 次提交
  4. 03 4月, 2014 3 次提交
    • B
      pata_at91: fix ata_host_activate() failure handling · 27aa64b9
      Bartlomiej Zolnierkiewicz 提交于
      Add missing clk_put() call to ata_host_activate() failure path.
      
      Sergei says,
      
        "Hm, I have once fixed that (see that *if* (!ret)) but looks like a
         later commit 477c87e9 (ARM:
         at91/pata: use gpio_is_valid to check the gpio) broke it again. :-(
         Would be good if the changelog did mention that..."
      
      Cc: Andrew Victor <linux@maxim.org.za>
      Cc: Nicolas Ferre <nicolas.ferre@atmel.com>
      Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
      Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
      Signed-off-by: NBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Cc: stable@vger.kernel.org
      27aa64b9
    • M
      libata: Update queued trim blacklist for M5x0 drives · d121f7d0
      Martin K. Petersen 提交于
      Crucial/Micron M500 drives properly support queued DSM TRIM starting
      with firmware MU05. Update the blacklist so we only disable queued trim
      for older firmware releases.
      
      Early M550 series drives suffer from the same issue as M500. A bugfix
      firmware is in the pipeline but not ready yet. Until then, blacklist
      queued trim for M550.
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      Cc: Chris Samuel <chris@csamuel.org>
      Cc: Marc MERLIN <marc@merlins.org>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Cc: stable@vger.kernel.org
      d121f7d0
    • T
      libata: make AHCI_XGENE depend on PHY_XGENE · 74c03eb6
      Tejun Heo 提交于
      AHCI_XGENE is only applicable on ARM64 but it can also be enabled for
      compile testing; however, AHCI_XGENE selects PHY_XGENE which has other
      arch specific dependencies.  This leads to the following warning when
      enabling it on other archs for compile testing.
      
        warning: (AHCI_XGENE) selects PHY_XGENE which has unmet direct
        dependencies (HAS_IOMEM && OF && (ARM64 || COMPILE_TEST))
      
      Selecting a config option which itself has dependencies can easily
      lead to broken configurations.  For now, let's just make AHCI_XGENE
      depend on PHY_XGENE which has all the necessary dependencies already.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Reported-by: NLinus Torvalds <torvalds@linux-foundation.org>
      Cc: Loc Ho <lho@apm.com>
      Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
      Cc: Kishon Vijay Abraham I <kishon@ti.com>
      74c03eb6
  5. 27 3月, 2014 3 次提交
  6. 26 3月, 2014 6 次提交
  7. 19 3月, 2014 3 次提交
    • T
      libata: async resume · 200421a8
      Todd Brandt 提交于
      Improve overall system resume time by making libata link recovery
      actions asynchronous relative to other resume events.
      
      Link resume operations are performed using the scsi_eh thread, so
      commands, particularly the sd resume start/stop command, will be held
      off until the device exits error handling.  Libata already flushes eh
      with ata_port_wait_eh() in the port teardown paths, so there are no
      concerns with async operation colliding with the end-of-life of the
      ata_port object.  Also, libata-core is already careful to flush
      in-flight pm operations before another round of pm starts on the given
      ata_port.
      
      Reference: https://01.org/suspendresume/blogs/tebrandt/2013/hard-disk-resume-optimization-simpler-approach
      
      Cc: Len Brown <len.brown@intel.com>
      Cc: Phillip Susi <psusi@ubuntu.com>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NTodd Brandt <todd.e.brandt@linux.intel.com>
      [djbw: rebase on cleanup patch, changelog wordsmithing]
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      200421a8
    • D
      libata, libsas: kill pm_result and related cleanup · bc6e7c4b
      Dan Williams 提交于
      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&m=138995409532286&w=2
      
      Cc: Phillip Susi <psusi@ubuntu.com>
      Cc: Alan Stern <stern@rowland.harvard.edu>
      Suggested-by: NTejun Heo <tj@kernel.org>
      Signed-off-by: NTodd Brandt <todd.e.brandt@intel.com>
      Signed-off-by: NDan Williams <dan.j.williams@intel.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      bc6e7c4b
    • L
      ata: Fix compiler warning with APM X-Gene host controller driver · 6a96918a
      Loc Ho 提交于
      This patch fixes an compiler warning with APM X-Gene host controller
      driver when compiled with DEBUG enabled.
      Signed-off-by: NLoc Ho <lho@apm.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      6a96918a
  8. 18 3月, 2014 1 次提交
  9. 17 3月, 2014 2 次提交
  10. 15 3月, 2014 4 次提交
  11. 14 3月, 2014 10 次提交
  12. 11 3月, 2014 2 次提交
    • S
      pata_legacy: Remove dead code · e853a4e0
      Silvan Jegen 提交于
      The current flow of control prevents this function from being
      called. Let's remove the call.
      Signed-off-by: NSilvan Jegen <s.jegen@gmail.com>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      e853a4e0
    • J
      ata: Fix CS55xx dependencies · 9236a76d
      Jean Delvare 提交于
      As far as I know, the CS5520 and CS5530 chipsets were only used with
      32-bit x86 Geode processors, so I think their drivers are only needed
      on this architecture, except for build testing purpose.
      
      While we're here, simplify the dependencies for the CS5535 driver.
      
      The CS5536 was used with the Geode processors, but also on MIPS
      Loongson/Lemote 2 systems, so let its driver be built for these two
      architectures only, except for build testing purpose.
      Signed-off-by: NJean Delvare <jdelvare@suse.de>
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Cc: Ralf Baechle <ralf@linux-mips.org>
      9236a76d
  13. 10 3月, 2014 1 次提交