21 May, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation either version 2 or at your option any
    later version this program is distributed in the hope that it will
    be useful but without any warranty without even the implied warranty
    of merchantability or fitness for a particular purpose see the gnu
    general public license for more details you should have received a
    copy of the gnu general public license along with this program see
    the file copying if not write to the free software foundation 675
    mass ave cambridge ma 02139 usa

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 52 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Jilayne Lovejoy
    Reviewed-by: Steve Winslow
    Reviewed-by: Kate Stewart
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190519154042.342335923@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

20 Jun, 2018

1 commit

  • Commit 2623c7a5f2 ("libata: add refcounting to ata_host") v4.17+ introduced
    refcounting to ata_host and will increase or decrease the refcount when
    adding or deleting transport ATA port.

    Now the ata host for libsas is embedded in domain_device, and the ->kref
    member is not initialized. Afer we add ata transport class, ata_host_get()
    will be called when adding transport ATA port and a warning will be
    triggered as below:

    refcount_t: increment on 0; use-after-free.
    WARNING: CPU: 2 PID: 103 at
    lib/refcount.c:153 refcount_inc+0x40/0x48 ...... Call trace:
    refcount_inc+0x40/0x48
    ata_host_get+0x10/0x18
    ata_tport_add+0x40/0x120
    ata_sas_tport_add+0xc/0x14
    sas_ata_init+0x7c/0xc8
    sas_discover_domain+0x380/0x53c
    process_one_work+0x12c/0x288
    worker_thread+0x58/0x3f0
    kthread+0xfc/0x128
    ret_from_fork+0x10/0x18

    And also when removing transport ATA port ata_host_put() will be called and
    another similar warning will be triggered. If the refcount decreased to
    zero, the ata host will be freed. But this ata host is only part of
    domain_device, it cannot be freed directly.

    So we have to change this embedded static ata host to a dynamically
    allocated ata host and initialize the ->kref member. To use ata_host_get()
    and ata_host_put() in libsas, we need to move the declaration of these
    functions to the public libata.h and export them.

    Fixes: b6240a4df018 ("scsi: libsas: add transport class for ATA devices")
    Signed-off-by: Jason Yan
    CC: John Garry
    CC: Taras Kondratiuk
    CC: Tejun Heo
    Acked-by: Tejun Heo
    Signed-off-by: Martin K. Petersen

    Jason Yan
     

14 Mar, 2018

1 commit

  • After commit 9a6d6a2ddabb ("ata: make ata port as parent device of scsi
    host") manual driver unbind/remove causes use-after-free.

    Unbind unconditionally invokes devres_release_all() which calls
    ata_host_release() and frees ata_host/ata_port memory while it is still
    being referenced as a parent of SCSI host. When SCSI host is finally
    released scsi_host_dev_release() calls put_device(parent) and accesses
    freed ata_port memory.

    Add reference counting to make sure that ata_host lives long enough.

    Bug report: https://lkml.org/lkml/2017/11/1/945
    Fixes: 9a6d6a2ddabb ("ata: make ata port as parent device of scsi host")
    Cc: Tejun Heo
    Cc: Lin Ming
    Cc: linux-ide@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Taras Kondratiuk
    Signed-off-by: Tejun Heo

    Taras Kondratiuk
     

16 Nov, 2017

1 commit

  • Pull libata updates from Tejun Heo:
    "Nothing too interesting or alarming. Other than a new power saving
    mode addition to ahci and crash fix on a tracepoint, all changes are
    trivial or device-specific"

    * 'for-4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata: (22 commits)
    ahci: imx: Handle increased read failures for IMX53 temperature sensor in low frequency mode.
    ata: sata_dwc_460ex: Propagate platform device ID to DMA driver
    ata: fixes kernel crash while tracing ata_eh_link_autopsy event
    ata: pata_pdc2027x: Fix space before '[' error.
    libata: fix spelling mistake: 'ambigious' -> 'ambiguous'
    ata: ceva: Add SMMU support for SATA IP
    ata: ceva: Correct the suspend and resume logic for SATA
    ata: ceva: Correct the AXI bus configuration for SATA ports
    ata: ceva: Add CCI support for SATA if CCI is enabled
    ata: ceva: Make RxWaterMark value as module parameter
    ata: ceva: Disable Device Sleep capability
    ata: ceva: Add gen 3 mode support in driver
    ata: ceva: Move sata port phy oob settings to device-tree
    devicetree: bindings: Add sata port phy config parameters in ahci-ceva
    ata: mark expected switch fall-throughs
    ata: sata_mv: remove a redundant assignment to pointer ehi
    ahci: Add support for Cavium's fifth generation SATA controller
    ata: sata_rcar: Use of_device_get_match_data() helper
    libata: make ata_port_type const
    libata: make static arrays const, reduces object code size
    ...

    Linus Torvalds
     

17 Oct, 2017

1 commit

  • In preparation for unconditionally passing the struct timer_list pointer to
    all timer callbacks, switch to using the new timer_setup() and from_timer()
    to pass the timer pointer explicitly.

    Signed-off-by: Kees Cook
    Signed-off-by: Thomas Gleixner
    Acked-by: Tejun Heo
    Cc: linux-ide@vger.kernel.org
    Link: https://lkml.kernel.org/r/20171005004842.GA23011@beast

    Kees Cook
     

03 Oct, 2017

1 commit

  • Make this const as it is only stored in the const field of a device
    structure. Make the declaration in header const too.

    Structure found using Coccinelle and changes done by hand.

    Signed-off-by: Bhumika Goyal
    Signed-off-by: Tejun Heo

    Bhumika Goyal
     

06 Jun, 2017

1 commit


16 May, 2017

1 commit


22 Feb, 2017

1 commit

  • Pull libata updates from Tejun Heo:

    - Bartlomiej added pata_falcon

    - Christoph is trying to remove use of static 4k buf. It's still WIP

    - config cleanup around HAS_DMA

    - other fixes and driver-specific changes

    * 'for-4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata: (29 commits)
    ata: pata_of_platform: using of_property_read_u32() helper
    pata_atiixp: Don't use unconnected secondary port on SB600/SB700
    libata-sff: Don't scan disabled ports when checking for legacy mode.
    pata_octeon_cf: remove unused local variables from octeon_cf_set_piomode()
    ahci: qoriq: added ls2088a platforms support
    ahci: qoriq: report error when ecc register address is missing in dts
    ahci: qoriq: added a condition to enable dma coherence
    Revert "libata: switch to dynamic allocation instead of ata_scsi_rbuf"
    ahci: imx: fix building without hwmon or thermal
    ata: add Atari Falcon PATA controller driver
    ata: pass queued command to ->sff_data_xfer method
    ata: allow subsystem to be used on m68k arch
    libata: switch to dynamic allocation instead of ata_scsi_rbuf
    libata: don't call ata_scsi_rbuf_fill for command without a response buffer
    libata: call ->scsi_done from ata_scsi_simulate
    libata: remove the done callback from ata_scsi_args
    libata: move struct ata_scsi_args to libata-scsi.c
    libata: avoid global response buffer in atapi_qc_complete
    libata-eh: Use switch() instead of sparse array for protocol strings
    ata: sata_mv: Convert to devm_ioremap_resource()
    ...

    Linus Torvalds
     

07 Feb, 2017

1 commit

  • Instead define the timeout behavior purely based on the host_template
    eh_timed_out method and wire up the existing transport implementations
    in the host templates. This also clears up the confusion that the
    transport template method overrides the host template one, so some
    drivers have to re-override the transport template one.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Tyrel Datwyler
    Signed-off-by: Martin K. Petersen

    Christoph Hellwig
     

10 Jan, 2017

1 commit


07 Jan, 2017

1 commit


20 Oct, 2016

1 commit

  • 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

    Adam Manzanares
     

05 Apr, 2016

4 commits


04 Aug, 2015

1 commit

  • This reverts commit 42b966fbf35da9c87f08d98f9b8978edf9e717cf.

    As implemented, ACS-4 sense reporting for ATA devices bypasses error
    diagnosis and handling in libata degrading EH behavior significantly.
    Revert the related changes for now.

    Signed-off-by: Tejun Heo
    Cc: Hannes Reinecke
    Cc: stable@vger.kernel.org #v4.1+

    Tejun Heo
     

03 Aug, 2015

1 commit

  • This reverts commit a1524f226a02aa6edebd90ae0752e97cfd78b159.

    As implemented, ACS-4 sense reporting for ATA devices bypasses error
    diagnosis and handling in libata degrading EH behavior significantly.
    Revert the related changes for now.

    Signed-off-by: Tejun Heo
    Cc: Hannes Reinecke
    Cc: stable@vger.kernel.org #v4.1+

    Tejun Heo
     

27 Mar, 2015

2 commits


13 Feb, 2015

1 commit

  • Pull block driver changes from Jens Axboe:
    "This contains:

    - The 4k/partition fixes for brd from Boaz/Matthew.

    - A few xen front/back block fixes from David Vrabel and Roger Pau
    Monne.

    - Floppy changes from Takashi, cleaning the device file creation.

    - Switching libata to use the new blk-mq tagging policy, removing
    code (and a suboptimal implementation) from libata. This will
    throw you a merge conflict, since a bug in the original libata
    tagging code was fixed since this code was branched. Trivial.
    From Shaohua.

    - Conversion of loop to blk-mq, from Ming Lei.

    - Cleanup of the io_schedule() handling in bsg from Peter Zijlstra.
    He claims it improves on unreadable code, which will cost him a
    beer.

    - Maintainer update or NDB, now handled by Markus Pargmann.

    - NVMe:
    - Optimization from me that avoids a kmalloc/kfree per IO for
    smaller (t handle REQ_FUA explicitly
    block: loop: introduce lo_discard() and lo_req_flush()
    block: loop: say goodby to bio
    block: loop: improve performance via blk-mq

    Linus Torvalds
     

25 Jan, 2015

1 commit


24 Jan, 2015

1 commit

  • libata uses its own tag management which is duplication and the
    implementation is poor. And if we switch to blk-mq, tag is build-in.
    It's time to switch to generic taging.

    The SAS driver has its own tag management, and looks we can't directly
    map the host controler tag to SATA tag. So I just bypassed the SAS case.

    I changed the code/variable name for the tag management of libata to
    make it self contained. Only sas will use it. Later if libsas implements
    its tag management, the tag management code in libata can be deleted
    easily.

    Cc: Jens Axboe
    Cc: Christoph Hellwig
    Signed-off-by: Shaohua Li
    Acked-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Shaohua Li
     

12 Jan, 2015

1 commit


18 Jul, 2014

1 commit

  • The SCSI standard defines 64-bit values for LUNs, and large arrays
    employing large or hierarchical LUN numbers become more and more
    common.

    So update the linux SCSI stack to use 64-bit LUN numbers.

    Signed-off-by: Hannes Reinecke
    Reviewed-by: Christoph Hellwig
    Reviewed-by: Ewan Milne
    Signed-off-by: Christoph Hellwig

    Hannes Reinecke
     

17 Oct, 2013

1 commit

  • Previously, we wanted SCSI devices corrsponding to ATA devices to
    be runtime resumed when the power resource for those ATA device was
    turned on by some other device, so we added the SCSI device to the
    dependent device list of the ATA device's ACPI node. However, this
    code has no effect after commit 41863fc (ACPI / power: Drop automaitc
    resume of power resource dependent devices) and the mechanism it was
    supposed to implement is regarded as a bad idea now, so drop it.

    [rjw: Changelog]
    Signed-off-by: Aaron Lu
    Signed-off-by: Rafael J. Wysocki

    Aaron Lu
     

28 Aug, 2013

1 commit

  • The ata_dev_acpi_handle is defined in libata-acpi.c and the only
    external user is libata-zpodd.c, which is built when CONFIG_ATA_ACPI
    is set, so there is no need to make an empty stub function for
    ONFIG_ATA_ACPI case in libata.h. It also causes compile errors due to
    acpi_handle is not defined when !CONFIG_ACPI. This patch fixes this
    problem by removing the empty stub.

    Reported-by: Stephen Rothwell
    Signed-off-by: Aaron Lu
    Signed-off-by: Tejun Heo

    Aaron Lu
     

24 Aug, 2013

1 commit

  • Binding ACPI handle to SCSI device has several drawbacks, namely:
    1 During ATA device initialization time, ACPI handle will be needed
    while SCSI devices are not created yet. So each time ACPI handle is
    needed, instead of retrieving the handle by ACPI_HANDLE macro,
    a namespace scan is performed to find the handle for the corresponding
    ATA device. This is inefficient, and also expose a restriction on
    calling path not holding any lock.
    2 The binding to SCSI device tree makes code complex, while at the same
    time doesn't bring us any benefit. All ACPI handlings are still done
    in ATA module, not in SCSI.

    Rework the ATA ACPI binding code to bind ACPI handle to ATA transport
    devices(ATA port and ATA device). The binding needs to be done only once,
    since the ATA transport devices do not go away with hotplug. And due to
    this, the flush_work call in hotplug handler for ATA bay is no longer
    needed.

    Tested on an Intel test platform for binding and runtime power off for
    ODD(ZPODD) and hard disk; on an ASUS S400C for binding and normal boot
    and S3, where its SATA port node has _SDD and _GTF control methods when
    configured as an AHCI controller and its PATA device node has _GTF
    control method when configured as an IDE controller. SATA PMP binding
    and ATA hotplug is not tested.

    Signed-off-by: Aaron Lu
    Tested-by: Dirk Griesbach
    Signed-off-by: Tejun Heo

    Aaron Lu
     

25 Jul, 2013

1 commit


25 Jun, 2013

1 commit

  • Commit 30dcf76acc69 "libata: migrate ACPI code over to new bindings"
    mistakenly dropped the code to register hotplug notificaion handler
    for ATA port/devices, causing regression for people using ATA bay,
    as kernel bug #59871 shows.

    Fix this by adding back the hotplug notification handler registration
    code. Since this code has to be run once and notification needs to
    be installed on every ATA port/devices handle no matter if there is
    actual device attached, we can't do this in binding time for ATA
    device ACPI handle, as the binding only occurs when a SCSI device is
    created, i.e. there is device attached. So introduce the
    ata_acpi_hotplug_init() function to loop scan all ATA ACPI handles
    and if it is available, install the notificaion handler for it during
    ATA init time.

    With the ATA ACPI handle binding to SCSI device tree, it is possible
    now that when the SCSI hotplug work removes the SCSI device, the ACPI
    unbind function will find that the corresponding ACPI device has
    already been deleted by dock driver, causing a scaring message like:
    [ 128.263966] scsi 4:0:0:0: Oops, 'acpi_handle' corrupt
    Fix this by waiting for SCSI hotplug task finish in our notificaion
    handler, so that the removal of ACPI device done in ACPI unbind
    function triggered by the removal of SCSI device is run earlier when
    ACPI device is still available.

    [rjw: Rebased]
    References: https://bugzilla.kernel.org/show_bug.cgi?id=59871
    Reported-bisected-and-tested-by: Dirk Griesbach
    Signed-off-by: Aaron Lu
    Acked-by: Tejun Heo
    Cc: 3.6+
    Signed-off-by: Rafael J. Wysocki

    Aaron Lu
     

22 Jan, 2013

3 commits

  • When ata port is runtime suspended, it will check if the ODD attched to
    it is a zero power(ZP) capable ODD and if the ZP capable ODD is in zero
    power ready state. And if this is not the case, the highest acpi state
    will be limited to ACPI_STATE_D3_HOT to avoid powering off the ODD. And
    if the ODD can be powered off, runtime wake capability needs to be
    enabled and powered_off flag will be set to let resume code knows that
    the ODD was in powered off state.

    And on resume, before it is powered on, if it was powered off during
    suspend, runtime wake capability needs to be disabled. After it is
    recovered, the ODD is considered functional, post power on processing
    like eject tray if the ODD is drawer type is done, and several ZPODD
    related fields will also be reset.

    Signed-off-by: Aaron Lu
    Acked-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Aaron Lu
     
  • Per the Mount Fuji spec, the ODD is considered zero power ready when:
    - For slot type ODD, no media inside;
    - For tray type ODD, no media inside and tray closed.

    The information can be retrieved by either the returned information of
    command GET_EVENT_STATUS_NOTIFICATION(the command is used to poll for
    media event) or sense code.

    The information provided by the media status byte is not accurate, it
    is possible that after a new disc is just inserted, the status byte
    still returns media not present. So this information can not be used as
    the deciding factor, we use sense code to decide if zpready status is
    true.

    When we first sensed the ODD in the zero power ready state, the
    zp_sampled will be set and timestamp will be recoreded. And after ODD
    stayed in this state for some pre-defined period, the ODD is considered
    as power off ready and the zp_ready flag will be set. The zp_ready flag
    serves as the deciding factor other code will use to see if power off is
    OK for the ODD.

    The Mount Fuji spec suggests a delay should be used here, to avoid the
    case user ejects the ODD and then instantly inserts a new one again, so
    that we can avoid a power transition. And some ODDs may be slow to place
    its head to the home position after disc is ejected, so a delay here is
    generally a good idea. And the delay time can be changed via the module
    param zpodd_poweroff_delay.

    The zero power ready status check is performed in the ata port's runtime
    suspend code path, when port is not frozen yet, as we need to issue some
    IOs to the ODD.

    Signed-off-by: Aaron Lu
    Signed-off-by: Jeff Garzik

    Aaron Lu
     
  • The ODD can be enabled for ZPODD if the following three conditions are
    satisfied:
    1 The ODD supports device attention;
    2 The platform can runtime power off the ODD through ACPI;
    3 The ODD is either slot type or drawer type.
    For such ODDs, zpodd_init is called and a new structure is allocated for
    it to store ZPODD related stuffs.

    And the zpodd_dev_enabled function is used to test if ZPODD is currently
    enabled for this ODD.

    A new config CONFIG_SATA_ZPODD is added to selectively build ZPODD code.

    Signed-off-by: Aaron Lu
    Acked-by: Tejun Heo
    Signed-off-by: Jeff Garzik

    Aaron Lu
     

13 Sep, 2012

1 commit

  • Device Sleep is a feature as described in AHCI 1.3.1 Technical Proposal.
    This feature enables an HBA and SATA storage device to enter the DevSleep
    interface state, enabling lower power SATA-based systems.

    Aggressive Device Sleep enables the HBA to assert the DEVSLP signal as
    soon as there are no commands outstanding to the device and the port
    specific Device Sleep idle timer has expired. This enables autonomous
    entry into the DevSleep interface state without waiting for software
    in power sensitive systems.

    This patch enables Aggressive Device Sleep only if both host controller
    and device support it.

    Tested on AMD reference board together with Device Sleep supported device
    sample.

    Signed-off-by: Shane Huang
    Reviewed-by: Aaron Lu
    Signed-off-by: Jeff Garzik

    Shane Huang
     

26 Jul, 2012

1 commit

  • Adds inline for ata_acpi_unregister/ata_acpi_bind/ata_acpi_unbind
    in drivers/ata/libata.h for !CONFIG_ATA_ACPI to fix below warnings.

    warning: 'ata_acpi_unregister' defined but not used [-Wunused-function]
    warning: 'ata_acpi_bind' defined but not used [-Wunused-function]
    warning: 'ata_acpi_unbind' defined but not used [-Wunused-function]

    Reported-by: Stephen Rothwell
    Signed-off-by: Lin Ming
    Signed-off-by: Jeff Garzik

    Lin Ming
     

29 Jun, 2012

3 commits


13 Apr, 2012

1 commit

  • This variable is incremented from multiple contexts (module_init via
    libata-lldds and the libsas discovery thread). Make it atomic to head
    off any chance of libsas and libata creating duplicate ids.

    Acked-by: Jacek Danecki
    Signed-off-by: Dan Williams
    Signed-off-by: Jeff Garzik

    Dan Williams