1. 06 1月, 2021 7 次提交
    • I
      nvmet-rdma: Fix list_del corruption on queue establishment failure · 9ceb7863
      Israel Rukshin 提交于
      When a queue is in NVMET_RDMA_Q_CONNECTING state, it may has some
      requests at rsp_wait_list. In case a disconnect occurs at this
      state, no one will empty this list and will return the requests to
      free_rsps list. Normally nvmet_rdma_queue_established() free those
      requests after moving the queue to NVMET_RDMA_Q_LIVE state, but in
      this case __nvmet_rdma_queue_disconnect() is called before. The
      crash happens at nvmet_rdma_free_rsps() when calling
      list_del(&rsp->free_list), because the request exists only at
      the wait list. To fix the issue, simply clear rsp_wait_list when
      destroying the queue.
      Signed-off-by: NIsrael Rukshin <israelr@nvidia.com>
      Reviewed-by: NMax Gurtovoy <mgurtovoy@nvidia.com>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      9ceb7863
    • M
      nvme: unexport functions with no external caller · 9b66fc02
      Minwoo Im 提交于
      There are no callers for nvme_reset_ctrl_sync() and
      nvme_alloc_request_qid() so that we keep the symbols exported.
      
      Unexport those functions, mark them static and update the header file
      respectively.
      Signed-off-by: NMinwoo Im <minwoo.im.dev@gmail.com>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      9b66fc02
    • L
      nvme: avoid possible double fetch in handling CQE · 62df8016
      Lalithambika Krishnakumar 提交于
      While handling the completion queue, keep a local copy of the command id
      from the DMA-accessible completion entry. This silences a time-of-check
      to time-of-use (TOCTOU) warning from KF/x[1], with respect to a
      Thunderclap[2] vulnerability analysis. The double-read impact appears
      benign.
      
      There may be a theoretical window for @command_id to be used as an
      adversary-controlled array-index-value for mounting a speculative
      execution attack, but that mitigation is saved for a potential follow-on.
      A man-in-the-middle attack on the data payload is out of scope for this
      analysis and is hopefully mitigated by filesystem integrity mechanisms.
      
      [1] https://github.com/intel/kernel-fuzzer-for-xen-project
      [2] http://thunderclap.io/thunderclap-paper-ndss2019.pdfSigned-off-by: NLalithambika Krishna Kumar <lalithambika.krishnakumar@intel.com>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      62df8016
    • S
      nvme-tcp: Fix possible race of io_work and direct send · 5c11f7d9
      Sagi Grimberg 提交于
      We may send a request (with or without its data) from two paths:
      
        1. From our I/O context nvme_tcp_io_work which is triggered from:
          - queue_rq
          - r2t reception
          - socket data_ready and write_space callbacks
        2. Directly from queue_rq if the send_list is empty (because we want to
           save the context switch associated with scheduling our io_work).
      
      However, given that now we have the send_mutex, we may run into a race
      condition where none of these contexts will send the pending payload to
      the controller. Both io_work send path and queue_rq send path
      opportunistically attempt to acquire the send_mutex however queue_rq only
      attempts to send a single request, and if io_work context fails to
      acquire the send_mutex it will complete without rescheduling itself.
      
      The race can trigger with the following sequence:
      
        1. queue_rq sends request (no incapsule data) and blocks
        2. RX path receives r2t - prepares data PDU to send, adds h2cdata PDU
           to the send_list and schedules io_work
        3. io_work triggers and cannot acquire the send_mutex - because of (1),
           ends without self rescheduling
        4. queue_rq completes the send, and completes
      
      ==> no context will send the h2cdata - timeout.
      
      Fix this by having queue_rq sending as much as it can from the send_list
      such that if it still has any left, its because the socket buffer is
      full and the socket write_space callback will trigger, thus guaranteeing
      that a context will be scheduled to send the h2cdata PDU.
      
      Fixes: db5ad6b7 ("nvme-tcp: try to send request in queue_rq context")
      Reported-by: NPotnuri Bharat Teja <bharat@chelsio.com>
      Reported-by: NSamuel Jones <sjones@kalrayinc.com>
      Signed-off-by: NSagi Grimberg <sagi@grimberg.me>
      Tested-by: NPotnuri Bharat Teja <bharat@chelsio.com>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      5c11f7d9
    • G
      nvme-pci: mark Samsung PM1725a as IGNORE_DEV_SUBNQN · 7ee5c78c
      Gopal Tiwari 提交于
      A system with more than one of these SSDs will only have one usable.
      Hence the kernel fails to detect nvme devices due to duplicate cntlids.
      
      [    6.274554] nvme nvme1: Duplicate cntlid 33 with nvme0, rejecting
      [    6.274566] nvme nvme1: Removing after probe failure status: -22
      
      Adding the NVME_QUIRK_IGNORE_DEV_SUBNQN quirk to resolves the issue.
      Signed-off-by: NGopal Tiwari <gtiwari@redhat.com>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      7ee5c78c
    • J
      nvme-fcloop: Fix sscanf type and list_first_entry_or_null warnings · 2b54996b
      James Smart 提交于
      Kernel robot had the following warnings:
      
      >> fcloop.c:1506:6: warning: %x in format string (no. 1) requires
      >> 'unsigned int *' but the argument type is 'signed int *'.
      >> [invalidScanfArgType_int]
      >>    if (sscanf(buf, "%x:%d:%d", &opcode, &starting, &amount) != 3)
      >>        ^
      
      Resolve by changing opcode from and int to an unsigned int
      
      and
      
      >>  fcloop.c:1632:32: warning: Uninitialized variable: lport [uninitvar]
      >>     ret = __wait_localport_unreg(lport);
      >>                                  ^
      
      >>  fcloop.c:1615:28: warning: Uninitialized variable: nport [uninitvar]
      >>     ret = __remoteport_unreg(nport, rport);
      >>                              ^
      
      These aren't actual issues as the values are assigned prior to use.
      It appears the tool doesn't understand list_first_entry_or_null().
      Regardless, quiet the tool by initializing the pointers to NULL at
      declaration.
      Signed-off-by: NJames Smart <james.smart@broadcom.com>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      2b54996b
    • J
      nvme-fc: avoid calling _nvme_fc_abort_outstanding_ios from interrupt context · 19fce047
      James Smart 提交于
      Recent patches changed calling sequences. nvme_fc_abort_outstanding_ios
      used to be called from a timeout or work context. Now it is being called
      in an io completion context, which can be an interrupt handler.
      Unfortunately, the abort outstanding ios routine attempts to stop nvme
      queues and nested routines that may try to sleep, which is in conflict
      with the interrupt handler.
      
      Correct replacing the direct call with a work element scheduling, and the
      abort outstanding ios routine will be called in the work element.
      
      Fixes: 95ced8a2 ("nvme-fc: eliminate terminate_io use by nvme_fc_error_recovery")
      Signed-off-by: NJames Smart <james.smart@broadcom.com>
      Reported-by: NDaniel Wagner <dwagner@suse.de>
      Tested-by: NDaniel Wagner <dwagner@suse.de>
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      19fce047
  2. 04 1月, 2021 2 次提交
  3. 27 12月, 2020 1 次提交
  4. 26 12月, 2020 4 次提交
    • N
      mfd: ab8500-debugfs: Remove extraneous curly brace · c9a3c4e6
      Nathan Chancellor 提交于
      Clang errors:
      
        drivers/mfd/ab8500-debugfs.c:1526:2: error: non-void function does not return a value [-Werror,-Wreturn-type]
                }
                ^
        drivers/mfd/ab8500-debugfs.c:1528:2: error: expected identifier or '('
        return 0;
                ^
        drivers/mfd/ab8500-debugfs.c:1529:1: error: extraneous closing brace ('}')
        }
        ^
        3 errors generated.
      
      The cleanup in ab8500_interrupts_show left a curly brace around, remove
      it to fix the error.
      
      Fixes: 886c8121 ("mfd: ab8500-debugfs: Remove the racy fiddling with irq_desc")
      Signed-off-by: NNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      c9a3c4e6
    • A
      PCI: dwc: Fix inverted condition of DMA mask setup warning · 99e629f1
      Alexander Lobakin 提交于
      Commit 660c4865 ("PCI: dwc: Set 32-bit DMA mask for MSI target address
      allocation") added dma_mask_set() call to explicitly set 32-bit DMA mask
      for MSI message mapping, but for now it throws a warning on ret == 0, while
      dma_set_mask() returns 0 in case of success.
      
      Fix this by inverting the condition.
      
      [bhelgaas: join string to make it greppable]
      Fixes: 660c4865 ("PCI: dwc: Set 32-bit DMA mask for MSI target address allocation")
      Link: https://lore.kernel.org/r/20201222150708.67983-1-alobakin@pm.meSigned-off-by: NAlexander Lobakin <alobakin@pm.me>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      99e629f1
    • R
      PCI: tegra: Fix host link initialization · 275e88b0
      Rob Herring 提交于
      Commit b9ac0f9d ("PCI: dwc: Move dw_pcie_setup_rc() to DWC common
      code") broke enumeration of downstream devices on Tegra:
      
      In non-working case (next-20201211):
      
        0001:00:00.0 PCI bridge: NVIDIA Corporation Device 1ad2 (rev a1)
        0001:01:00.0 SATA controller: Marvell Technology Group Ltd. Device 9171 (rev 13)
        0005:00:00.0 PCI bridge: NVIDIA Corporation Device 1ad0 (rev a1)
      
      In working case (v5.10-rc7):
      
        0001:00:00.0 PCI bridge: Molex Incorporated Device 1ad2 (rev a1)
        0001:01:00.0 SATA controller: Marvell Technology Group Ltd. Device 9171 (rev 13)
        0005:00:00.0 PCI bridge: Molex Incorporated Device 1ad0 (rev a1)
        0005:01:00.0 PCI bridge: PLX Technology, Inc. Device 3380 (rev ab)
        0005:02:02.0 PCI bridge: PLX Technology, Inc. Device 3380 (rev ab)
        0005:03:00.0 USB controller: PLX Technology, Inc. Device 3380 (rev ab)
      
      The problem seems to be dw_pcie_setup_rc() is now called twice before and
      after the link up handling. The fix is to move Tegra's link up handling to
      .start_link() function like other DWC drivers. Tegra is a bit more
      complicated than others as it re-inits the whole DWC controller to retry
      the link. With this, the initialization ordering is restored to match the
      prior sequence.
      
      Fixes: b9ac0f9d ("PCI: dwc: Move dw_pcie_setup_rc() to DWC common code")
      Link: https://lore.kernel.org/r/20201218143905.1614098-1-robh@kernel.orgReported-by: NMian Yousaf Kaukab <ykaukab@suse.de>
      Tested-by: NMian Yousaf Kaukab <ykaukab@suse.de>
      Signed-off-by: NRob Herring <robh@kernel.org>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Cc: Thierry Reding <thierry.reding@gmail.com>
      Cc: Jonathan Hunter <jonathanh@nvidia.com>
      Cc: Vidya Sagar <vidyas@nvidia.com>
      275e88b0
    • L
      drm/amd/display: avoid uninitialized variable warning · 61d79136
      Linus Torvalds 提交于
      clang (quite rightly) complains fairly loudly about the newly added
      mpc1_get_mpc_out_mux() function returning an uninitialized value if the
      'opp_id' checks don't pass.
      
      This may not happen in practice, but the code really shouldn't return
      garbage if the sanity checks don't pass.
      
      So just initialize 'val' to zero to avoid the issue.
      
      Fixes: 110b055b ("drm/amd/display: add getter routine to retrieve mpcc mux")
      Cc: Josip Pavic <Josip.Pavic@amd.com>
      Cc: Bindu Ramamurthy <bindu.r@amd.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      61d79136
  5. 25 12月, 2020 2 次提交
    • Z
      device-dax: Avoid an unnecessary check in alloc_dev_dax_range() · ff8da37d
      Zhen Lei 提交于
      Swap the calling sequence of krealloc() and __request_region(), call the
      latter first. In this way, the value of dev_dax->nr_range does not need to
      be considered when __request_region() failed.
      Signed-off-by: NZhen Lei <thunder.leizhen@huawei.com>
      Link: https://lore.kernel.org/r/20201219081840.1149-2-thunder.leizhen@huawei.comSigned-off-by: NDan Williams <dan.j.williams@intel.com>
      ff8da37d
    • D
      device-dax: Fix range release · 6268d7da
      Dan Williams 提交于
      There are multiple locations that open-code the release of the last
      range in a device-dax instance. Consolidate this into a new
      dev_dax_trim_range() helper.
      
      This also addresses a kmemleak report:
      
      # cat /sys/kernel/debug/kmemleak
      [..]
      unreferenced object 0xffff976bd46f6240 (size 64):
         comm "ndctl", pid 23556, jiffies 4299514316 (age 5406.733s)
         hex dump (first 32 bytes):
           00 00 00 00 00 00 00 00 00 00 20 c3 37 00 00 00  .......... .7...
           ff ff ff 7f 38 00 00 00 00 00 00 00 00 00 00 00  ....8...........
         backtrace:
           [<00000000064003cf>] __kmalloc_track_caller+0x136/0x379
           [<00000000d85e3c52>] krealloc+0x67/0x92
           [<00000000d7d3ba8a>] __alloc_dev_dax_range+0x73/0x25c
           [<0000000027d58626>] devm_create_dev_dax+0x27d/0x416
           [<00000000434abd43>] __dax_pmem_probe+0x1c9/0x1000 [dax_pmem_core]
           [<0000000083726c1c>] dax_pmem_probe+0x10/0x1f [dax_pmem]
           [<00000000b5f2319c>] nvdimm_bus_probe+0x9d/0x340 [libnvdimm]
           [<00000000c055e544>] really_probe+0x230/0x48d
           [<000000006cabd38e>] driver_probe_device+0x122/0x13b
           [<0000000029c7b95a>] device_driver_attach+0x5b/0x60
           [<0000000053e5659b>] bind_store+0xb7/0xc3
           [<00000000d3bdaadc>] drv_attr_store+0x27/0x31
           [<00000000949069c5>] sysfs_kf_write+0x4a/0x57
           [<000000004a8b5adf>] kernfs_fop_write+0x150/0x1e5
           [<00000000bded60f0>] __vfs_write+0x1b/0x34
           [<00000000b92900f0>] vfs_write+0xd8/0x1d1
      Reported-by: NJane Chu <jane.chu@oracle.com>
      Cc: Zhen Lei <thunder.leizhen@huawei.com>
      Link: https://lore.kernel.org/r/160834570161.1791850.14911670304441510419.stgit@dwillia2-desk3.amr.corp.intel.comSigned-off-by: NDan Williams <dan.j.williams@intel.com>
      6268d7da
  6. 24 12月, 2020 23 次提交
  7. 23 12月, 2020 1 次提交