16 Jul, 2020

1 commit

  • Fixes the following W=1 kernel build warning(s):

    drivers/scsi/ipr.h:1687:1: warning: alignment 1 of ‘struct ipr_dump_location_entry’ is less than 4 [-Wpacked-not-aligned]
    1687 | }__attribute__((packed));
    | ^
    drivers/scsi/ipr.h:1711:1: warning: alignment 1 of ‘struct ipr_driver_dump’ is less than 4 [-Wpacked-not-aligned]
    1711 | }__attribute__((packed));
    | ^

    Link: https://lore.kernel.org/r/20200713080001.128044-15-lee.jones@linaro.org
    Cc: Brian King
    Cc: Alan Cox
    Signed-off-by: Lee Jones
    Signed-off-by: Martin K. Petersen

    Lee Jones
     

03 Apr, 2020

1 commit

  • Pull SCSI updates from James Bottomley:
    "This series has a huge amount of churn because it pulls in Mauro's doc
    update changing all our txt files to rst ones.

    Excluding that, we have the usual driver updates (qla2xxx, ufs, lpfc,
    zfcp, ibmvfc, pm80xx, aacraid), a treewide update for scnprintf and
    some other minor updates.

    The major core change is Hannes moving functions out of the aacraid
    driver and into the core"

    * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (223 commits)
    scsi: aic7xxx: aic97xx: Remove FreeBSD-specific code
    scsi: ufs: Do not rely on prefetched data
    scsi: dc395x: remove dc395x_bios_param
    scsi: libiscsi: Fix error count for active session
    scsi: hpsa: correct race condition in offload enabled
    scsi: message: fusion: Replace zero-length array with flexible-array member
    scsi: qedi: Add PCI shutdown handler support
    scsi: qedi: Add MFW error recovery process
    scsi: ufs: Enable block layer runtime PM for well-known logical units
    scsi: ufs-qcom: Override devfreq parameters
    scsi: ufshcd: Let vendor override devfreq parameters
    scsi: ufshcd: Update the set frequency to devfreq
    scsi: ufs: Resume ufs host before accessing ufs device
    scsi: ufs-mediatek: customize the delay for enabling host
    scsi: ufs: make HCE polling more compact to improve initialization latency
    scsi: ufs: allow custom delay prior to host enabling
    scsi: ufs-mediatek: use common delay function
    scsi: ufs: introduce common and flexible delay function
    scsi: ufs: use an enum for host capabilities
    scsi: ufs: fix uninitialized tx_lanes in ufshcd_disable_tx_lcc()
    ...

    Linus Torvalds
     

12 Mar, 2020

1 commit

  • The current codebase makes use of the zero-length array language extension
    to the C90 standard, but the preferred mechanism to declare variable-length
    types such as these ones is a flexible array member[1][2], introduced in
    C99:

    struct foo {
    int stuff;
    struct boo array[];
    };

    By making use of the mechanism above, we will get a compiler warning in
    case the flexible array does not occur last in the structure, which will
    help us prevent some kind of undefined behavior bugs from being
    inadvertently introduced[3] to the codebase from now on.

    Also, notice that, dynamic memory allocations won't be affected by this
    change:

    "Flexible array members have incomplete type, and so the sizeof operator
    may not be applied. As a quirk of the original implementation of
    zero-length arrays, sizeof evaluates to zero."[1]

    This issue was found with the help of Coccinelle.

    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

    Link: https://lore.kernel.org/r/20200224161406.GA21454@embeddedor
    Reviewed-by: Lee Duncan
    Reviewed-by: Satish Kharat
    Signed-off-by: Gustavo A. R. Silva
    Signed-off-by: Martin K. Petersen

    Gustavo A. R. Silva
     

11 Mar, 2020

1 commit

  • When trying to rescan disks in petitboot shell, we hit the following
    softlockup stacktrace:

    Kernel panic - not syncing: System is deadlocked on memory
    [ 241.223394] CPU: 32 PID: 693 Comm: sh Not tainted 5.4.16-openpower1 #1
    [ 241.223406] Call Trace:
    [ 241.223415] [c0000003f07c3180] [c000000000493fc4] dump_stack+0xa4/0xd8 (unreliable)
    [ 241.223432] [c0000003f07c31c0] [c00000000007d4ac] panic+0x148/0x3cc
    [ 241.223446] [c0000003f07c3260] [c000000000114b10] out_of_memory+0x468/0x4c4
    [ 241.223461] [c0000003f07c3300] [c0000000001472b0] __alloc_pages_slowpath+0x594/0x6d8
    [ 241.223476] [c0000003f07c3420] [c00000000014757c] __alloc_pages_nodemask+0x188/0x1a4
    [ 241.223492] [c0000003f07c34a0] [c000000000153e10] alloc_pages_current+0xcc/0xd8
    [ 241.223508] [c0000003f07c34e0] [c0000000001577ac] alloc_slab_page+0x30/0x98
    [ 241.223524] [c0000003f07c3520] [c0000000001597fc] new_slab+0x138/0x40c
    [ 241.223538] [c0000003f07c35f0] [c00000000015b204] ___slab_alloc+0x1e4/0x404
    [ 241.223552] [c0000003f07c36c0] [c00000000015b450] __slab_alloc+0x2c/0x48
    [ 241.223566] [c0000003f07c36f0] [c00000000015b754] kmem_cache_alloc_node+0x9c/0x1b4
    [ 241.223582] [c0000003f07c3760] [c000000000218c48] blk_alloc_queue_node+0x34/0x270
    [ 241.223599] [c0000003f07c37b0] [c000000000226574] blk_mq_init_queue+0x2c/0x78
    [ 241.223615] [c0000003f07c37e0] [c0000000002ff710] scsi_mq_alloc_queue+0x28/0x70
    [ 241.223631] [c0000003f07c3810] [c0000000003005b8] scsi_alloc_sdev+0x184/0x264
    [ 241.223647] [c0000003f07c38a0] [c000000000300ba0] scsi_probe_and_add_lun+0x288/0xa3c
    [ 241.223663] [c0000003f07c3a00] [c000000000301768] __scsi_scan_target+0xcc/0x478
    [ 241.223679] [c0000003f07c3b20] [c000000000301c64] scsi_scan_channel.part.9+0x74/0x7c
    [ 241.223696] [c0000003f07c3b70] [c000000000301df4] scsi_scan_host_selected+0xe0/0x158
    [ 241.223712] [c0000003f07c3bd0] [c000000000303f04] store_scan+0x104/0x114
    [ 241.223727] [c0000003f07c3cb0] [c0000000002d5ac4] dev_attr_store+0x30/0x4c
    [ 241.223741] [c0000003f07c3cd0] [c0000000001dbc34] sysfs_kf_write+0x64/0x78
    [ 241.223756] [c0000003f07c3cf0] [c0000000001da858] kernfs_fop_write+0x170/0x1b8
    [ 241.223773] [c0000003f07c3d40] [c0000000001621fc] __vfs_write+0x34/0x60
    [ 241.223787] [c0000003f07c3d60] [c000000000163c2c] vfs_write+0xa8/0xcc
    [ 241.223802] [c0000003f07c3db0] [c000000000163df4] ksys_write+0x70/0xbc
    [ 241.223816] [c0000003f07c3e20] [c00000000000b40c] system_call+0x5c/0x68

    As a part of the scan process Linux will allocate and configure a
    scsi_device for each target to be scanned. If the device is not present,
    then the scsi_device is torn down. As a part of scsi_device teardown a
    workqueue item will be scheduled and the lockups we see are because there
    are 250k workqueue items to be processed. Accoding to the specification of
    SIS-64 sas controller, max_channel should be decreased on SIS-64 adapters
    to 4.

    The patch fixes softlockup issue.

    Thanks for Oliver Halloran's help with debugging and explanation!

    Link: https://lore.kernel.org/r/1583510248-23672-1-git-send-email-wenxiong@linux.vnet.ibm.com
    Signed-off-by: Wen Xiong
    Signed-off-by: Martin K. Petersen

    Wen Xiong
     

31 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 of the license 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 if not write to the free software foundation inc
    59 temple place suite 330 boston ma 02111 1307 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 1334 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Reviewed-by: Richard Fontana
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190527070033.113240726@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

22 Sep, 2018

1 commit

  • While dlpar adding primary ipr adapter back, driver goes through adapter
    initialization then schedule ipr_worker_thread to start te disk scan by
    dropping the host lock, calling scsi_add_device. Then get the adapter reset
    request again, so driver does scsi_block_requests, this will cause the
    scsi_add_device get hung until we unblock. But we can't run ipr_worker_thread
    to do the unblock because its stuck in scsi_add_device.

    This patch fixes the issue.

    [mkp: typo and whitespace fixes]

    Signed-off-by: Wen Xiong
    Acked-by: Brian King
    Signed-off-by: Martin K. Petersen

    Wen Xiong
     

20 Jun, 2018

1 commit


14 Feb, 2018

1 commit


08 Aug, 2017

1 commit

  • Fixes the following lockdep warning that can occur when scsi-mq is
    enabled with ipr due to ipr calling scsi_unblock_requests from irq
    context. The fix is to move the call to scsi_unblock_requests to ipr's
    existing workqueue.

    stack backtrace:
    CPU: 28 PID: 0 Comm: swapper/28 Not tainted 4.13.0-rc2-gcc6x-gf74c89b #1
    Call Trace:
    [c000001fffe97550] [c000000000b50818] dump_stack+0xe8/0x160 (unreliable)
    [c000001fffe97590] [c0000000001586d0] print_usage_bug+0x2d0/0x390
    [c000001fffe97640] [c000000000158f34] mark_lock+0x7a4/0x8e0
    [c000001fffe976f0] [c00000000015a000] __lock_acquire+0x6a0/0x1a70
    [c000001fffe97860] [c00000000015befc] lock_acquire+0xec/0x2e0
    [c000001fffe97930] [c000000000b71514] _raw_spin_lock+0x44/0x70
    [c000001fffe97960] [c0000000005b60f4] blk_mq_sched_dispatch_requests+0xa4/0x2a0
    [c000001fffe979c0] [c0000000005acac0] __blk_mq_run_hw_queue+0x100/0x2c0
    [c000001fffe97a00] [c0000000005ad478] __blk_mq_delay_run_hw_queue+0x118/0x130
    [c000001fffe97a40] [c0000000005ad61c] blk_mq_start_hw_queues+0x6c/0xa0
    [c000001fffe97a80] [c000000000797aac] scsi_kick_queue+0x2c/0x60
    [c000001fffe97aa0] [c000000000797cf0] scsi_run_queue+0x210/0x360
    [c000001fffe97b10] [c00000000079b888] scsi_run_host_queues+0x48/0x80
    [c000001fffe97b40] [c0000000007b6090] ipr_ioa_bringdown_done+0x70/0x1e0
    [c000001fffe97bc0] [c0000000007bc860] ipr_reset_ioa_job+0x80/0xf0
    [c000001fffe97bf0] [c0000000007b4d50] ipr_reset_timer_done+0xd0/0x100
    [c000001fffe97c30] [c0000000001937bc] call_timer_fn+0xdc/0x4b0
    [c000001fffe97cf0] [c000000000193d08] expire_timers+0x178/0x330
    [c000001fffe97d60] [c0000000001940c8] run_timer_softirq+0xb8/0x120
    [c000001fffe97de0] [c000000000b726a8] __do_softirq+0x168/0x6d8
    [c000001fffe97ef0] [c0000000000df2c8] irq_exit+0x108/0x150
    [c000001fffe97f10] [c000000000017bf4] __do_irq+0x2a4/0x4a0
    [c000001fffe97f90] [c00000000002da50] call_do_irq+0x14/0x24
    [c0000007fad93aa0] [c000000000017e8c] do_IRQ+0x9c/0x140
    [c0000007fad93af0] [c000000000008b98] hardware_interrupt_common+0x138/0x140

    Reported-by: Michael Ellerman
    Signed-off-by: Brian King
    Signed-off-by: Martin K. Petersen

    Brian King
     

24 Mar, 2017

1 commit


09 Nov, 2016

1 commit

  • Switch the ipr driver to use pci_alloc_irq_vectors. We need to two
    calls to pci_alloc_irq_vectors as ipr only supports multiple MSI-X
    vectors, but not multiple MSI vectors.

    Otherwise this cleans up a lot of cruft and allows to use a common
    request_irq loop for irq types, which happens to only iterate over a
    single line in the non MSI-X case.

    Signed-off-by: Christoph Hellwig
    Acked-by: Brian King
    Signed-off-by: Martin K. Petersen

    Christoph Hellwig
     

19 Sep, 2016

1 commit

  • A 9084 error gets logged by the ipr adapter when adapter raw mode gets
    enabled. A bunch of unformatted hex data also gets logged for this
    error, which is of little use, so let's avoid logging it by default in
    order to avoid the log getting polluted with useless data.

    Signed-off-by: Brian King
    Reviewed-by: Gabriel Krisman Bertazi
    Signed-off-by: Martin K. Petersen

    Brian King
     

26 Aug, 2016

1 commit

  • This patch implements functions for pushing HCAM (host controlled
    asynchronous messages) error buffers to userspace through sysfs
    attributes. Reads to the "async_err_log" attribute will result in a
    single HCAM buffer being copied to userspace; one can process the next
    HCAM buffer by writing any string to the same attribute.

    A new list was added to the ioa_cfg structure to store the HCAM buffers
    for later reporting. We also send a KOBJ_CHANGE event whenever a new
    HCAM buffer is made available to userspace.

    Signed-off-by: Heitor Ricardo Alves de Siqueira
    Signed-off-by: Gabriel Krisman Bertazi
    Signed-off-by: Brian King
    Signed-off-by: Martin K. Petersen

    Brian King
     

27 Jul, 2016

1 commit


14 Jul, 2016

1 commit


12 Dec, 2015

1 commit


10 Nov, 2015

4 commits

  • Signed-off-by: Gabriel Krisman Bertazi
    Acked-by: Brian King
    Reviewed-by: Wen Xiong
    Signed-off-by: Martin K. Petersen

    Gabriel Krisman Bertazi
     
  • Some new adapters require a special Configure Cache Parameters command
    to enable the adapter write cache, so send this during the adapter
    initialization if the adapter requires it.

    Signed-off-by: Gabriel Krisman Bertazi
    Acked-by: Brian King
    Reviewed-by: Wen Xiong
    Signed-off-by: Martin K. Petersen

    Gabriel Krisman Bertazi
     
  • Add an IOA Inquiry command for Page 0xC4 during IOA initialization to
    collect cache capabilities, particularly to check if Sync IOA Write
    Cache is supported.

    Inquiry will happen right after Cap Inquiry on page 0xD0; and will
    execute only if the "Supported Pages" field in Inquiry Page 0x0 shows
    support for Page 0xC4. Otherwise, assume Sync IOA Write Cache is
    not supported.

    Signed-off-by: Gabriel Krisman Bertazi
    Acked-by: Brian King
    Reviewed-by: Wen Xiong
    Signed-off-by: Martin K. Petersen

    Gabriel Krisman Bertazi
     
  • Add a holding pattern prior to collecting dump data, to wait for the IOA
    indication that the Mailbox register is stable and won't change without
    an explicit reset. This ensures we'll be collecting meaningful dump
    data, even when dumping right after an adapter reset.

    In the event of a timeout, we still force the dump, since a partial dump
    still might be useful.

    Signed-off-by: Gabriel Krisman Bertazi
    Acked-by: Brian King
    Reviewed-by: Wen Xiong
    Signed-off-by: Martin K. Petersen

    Gabriel Krisman Bertazi
     

31 Jul, 2015

3 commits

  • Signed-off-by: Brian King
    Signed-off-by: James Bottomley

    Brian King
     
  • Some misc fixes for endianness checking with sparse so sparse with
    endian checking now runs clean. Fixes a minor bug in the process
    which was uncovered by sparse which would result in unnecessary
    error recovery for check conditions.

    Signed-off-by: Brian King
    Reviewed-by: Wen Xiong
    Signed-off-by: James Bottomley

    Brian King
     
  • When ipr's internal driver trace was changed to an atomic, a signed/unsigned
    bug slipped in which results in us indexing backwards in our memory buffer
    writing on memory that does not belong to us. This patch fixes this by removing
    the modulo and instead just mask off the low bits.

    Cc:
    Tested-by: Wen Xiong
    Reviewed-by: Wen Xiong
    Reviewed-by: Gabriel Krisman Bertazi
    Signed-off-by: Brian King
    Reviewed-by: Martin K. Petersen
    Signed-off-by: James Bottomley

    Brian King
     

02 Jun, 2015

1 commit

  • Increase the default init stage change timeout from 15 seconds to 30 seconds.
    This resolves issues we have seen with some adapters not transitioning
    to the first init stage within 15 seconds, which results in adapter
    initialization failures.

    Cc:
    Signed-off-by: Brian King
    Signed-off-by: James Bottomley

    Brian King
     

10 Apr, 2015

4 commits

  • Signed-off-by: Brian King
    Signed-off-by: James Bottomley

    Brian King
     
  • This patch implements raw mode support for AF DASD in ipr driver
    which allows for tools to send commands directly to physical
    devices which are members of RAID arrays when enabled in the firmware.

    [jejb: fix up whitespace]
    Signed-off-by: Wen Xiong
    Signed-off-by: Brian King
    Reviewed-by: Daniel Kreling
    Signed-off-by: James Bottomley

    Wen Xiong
     
  • The pci_set_pcie_reset_state has changed semantics to not be callable
    from interrupt context, so change ipr's usage of the API to comply with
    this change by ensuring this occurs from a workqueue.

    Signed-off-by: Brian King
    Reviewed-by: Wen Xiong
    Reviewed-by: Daniel Kreling
    Signed-off-by: James Bottomley

    Brian King
     
  • Currently when performing a reboot with an ipr adapter,
    the adapter gets shutdown completely, flushing all write
    cache, as well as performing a full hardware reset of the card
    during the shutdown phase of the old kernel. This ensures
    the adapter is in a fully quiesced state across the reboot.

    There are scenarios, however, such as when performing
    kexec, where this full adapter shutdown is not required
    and not desired, since it can make the reboot process take
    noticeably longer.

    This patch adds a module parameter to allow for skipping the
    full shutdown during reboot. Rather than performing a full
    adapter shutdown and reset, we simply cancel any outstanding
    error buffers, place the adapter into a state where it has no
    memory of any DMA addresses from the old kernel, then disable
    the device. This significantly speeds up kexec boot, particularly
    in configurations with multiple ipr adapters.

    Signed-off-by: Brian King
    Reviewed-by: Wen Xiong
    Reviewed-by: Daniel Kreling
    Signed-off-by: James Bottomley

    Brian King
     

19 Jan, 2015

1 commit

  • Fixes a race condition in abort handling that was injected
    when multiple interrupt support was added. When only a single
    interrupt is present, the adapter guarantees it will send
    responses for aborted commands prior to the response for the
    abort command itself. With multiple interrupts, these responses
    generally come back on different interrupts, so we need to
    ensure the abort thread waits until the aborted command is
    complete so we don't perform a double completion. This race
    condition was being hit frequently in environments which
    were triggering command timeouts, which was resulting in
    a double completion causing a kernel oops.

    Cc:
    Signed-off-by: Brian King
    Reviewed-by: Wendy Xiong
    Tested-by: Wendy Xiong
    Signed-off-by: Christoph Hellwig

    Brian King
     

15 Dec, 2014

1 commit


12 Nov, 2014

1 commit


26 Sep, 2014

1 commit


25 Sep, 2014

1 commit


20 Mar, 2014

5 commits


20 Dec, 2013

1 commit


19 Dec, 2013

1 commit