1. 15 12月, 2016 1 次提交
  2. 08 10月, 2016 5 次提交
  3. 24 9月, 2016 3 次提交
  4. 17 9月, 2016 1 次提交
    • A
      IB/ipoib: Don't allow MC joins during light MC flush · 344bacca
      Alex Vesker 提交于
      This fix solves a race between light flush and on the fly joins.
      Light flush doesn't set the device to down and unset IPOIB_OPER_UP
      flag, this means that if while flushing we have a MC join in progress
      and the QP was attached to BC MGID we can have a mismatches when
      re-attaching a QP to the BC MGID.
      
      The light flush would set the broadcast group to NULL causing an on
      the fly join to rejoin and reattach to the BC MCG as well as adding
      the BC MGID to the multicast list. The flush process would later on
      remove the BC MGID and detach it from the QP. On the next flush
      the BC MGID is present in the multicast list but not found when trying
      to detach it because of the previous double attach and single detach.
      
      [18332.714265] ------------[ cut here ]------------
      [18332.717775] WARNING: CPU: 6 PID: 3767 at drivers/infiniband/core/verbs.c:280 ib_dealloc_pd+0xff/0x120 [ib_core]
      ...
      [18332.775198] Hardware name: Red Hat KVM, BIOS Bochs 01/01/2011
      [18332.779411]  0000000000000000 ffff8800b50dfbb0 ffffffff813fed47 0000000000000000
      [18332.784960]  0000000000000000 ffff8800b50dfbf0 ffffffff8109add1 0000011832f58300
      [18332.790547]  ffff880226a596c0 ffff880032482000 ffff880032482830 ffff880226a59280
      [18332.796199] Call Trace:
      [18332.798015]  [<ffffffff813fed47>] dump_stack+0x63/0x8c
      [18332.801831]  [<ffffffff8109add1>] __warn+0xd1/0xf0
      [18332.805403]  [<ffffffff8109aebd>] warn_slowpath_null+0x1d/0x20
      [18332.809706]  [<ffffffffa025d90f>] ib_dealloc_pd+0xff/0x120 [ib_core]
      [18332.814384]  [<ffffffffa04f3d7c>] ipoib_transport_dev_cleanup+0xfc/0x1d0 [ib_ipoib]
      [18332.820031]  [<ffffffffa04ed648>] ipoib_ib_dev_cleanup+0x98/0x110 [ib_ipoib]
      [18332.825220]  [<ffffffffa04e62c8>] ipoib_dev_cleanup+0x2d8/0x550 [ib_ipoib]
      [18332.830290]  [<ffffffffa04e656f>] ipoib_uninit+0x2f/0x40 [ib_ipoib]
      [18332.834911]  [<ffffffff81772a8a>] rollback_registered_many+0x1aa/0x2c0
      [18332.839741]  [<ffffffff81772bd1>] rollback_registered+0x31/0x40
      [18332.844091]  [<ffffffff81773b18>] unregister_netdevice_queue+0x48/0x80
      [18332.848880]  [<ffffffffa04f489b>] ipoib_vlan_delete+0x1fb/0x290 [ib_ipoib]
      [18332.853848]  [<ffffffffa04df1cd>] delete_child+0x7d/0xf0 [ib_ipoib]
      [18332.858474]  [<ffffffff81520c08>] dev_attr_store+0x18/0x30
      [18332.862510]  [<ffffffff8127fe4a>] sysfs_kf_write+0x3a/0x50
      [18332.866349]  [<ffffffff8127f4e0>] kernfs_fop_write+0x120/0x170
      [18332.870471]  [<ffffffff81207198>] __vfs_write+0x28/0xe0
      [18332.874152]  [<ffffffff810e09bf>] ? percpu_down_read+0x1f/0x50
      [18332.878274]  [<ffffffff81208062>] vfs_write+0xa2/0x1a0
      [18332.881896]  [<ffffffff812093a6>] SyS_write+0x46/0xa0
      [18332.885632]  [<ffffffff810039b7>] do_syscall_64+0x57/0xb0
      [18332.889709]  [<ffffffff81883321>] entry_SYSCALL64_slow_path+0x25/0x25
      [18332.894727] ---[ end trace 09ebbe31f831ef17 ]---
      
      Fixes: ee1e2c82 ("IPoIB: Refresh paths instead of flushing them on SM change events")
      Signed-off-by: NAlex Vesker <valex@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      344bacca
  5. 03 9月, 2016 2 次提交
    • E
      IB/ipoib: Fix memory corruption in ipoib cm mode connect flow · 546481c2
      Erez Shitrit 提交于
      When a new CM connection is being requested, ipoib driver copies data
      from the path pointer in the CM/tx object, the path object might be
      invalid at the point and memory corruption will happened later when now
      the CM driver will try using that data.
      
      The next scenario demonstrates it:
      	neigh_add_path --> ipoib_cm_create_tx -->
      	queue_work (pointer to path is in the cm/tx struct)
      	#while the work is still in the queue,
      	#the port goes down and causes the ipoib_flush_paths:
      	ipoib_flush_paths --> path_free --> kfree(path)
      	#at this point the work scheduled starts.
      	ipoib_cm_tx_start --> copy from the (invalid)path pointer:
      	(memcpy(&pathrec, &p->path->pathrec, sizeof pathrec);)
      	 -> memory corruption.
      
      To fix that the driver now starts the CM/tx connection only if that
      specific path exists in the general paths database.
      This check is protected with the relevant locks, and uses the gid from
      the neigh member in the CM/tx object which is valid according to the ref
      count that was taken by the CM/tx.
      
      Fixes: 839fcaba ('IPoIB: Connected mode experimental support')
      Signed-off-by: NErez Shitrit <erezsh@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      546481c2
    • R
      IB/isert: Properly release resources on DEVICE_REMOVAL · 63b268d2
      Raju Rangoju 提交于
      When the low level driver exercises the hot unplug they would call
      rdma_cm cma_remove_one which would fire DEVICE_REMOVAL event to all cma
      consumers. Now, if consumer doesn't make sure they destroy all IB
      objects created on that IB device instance prior to finalizing all
      processing of DEVICE_REMOVAL callback, rdma_cm will let the lld to
      de-register with IB core and destroy the IB device instance. And if the
      consumer calls (say) ib_dereg_mr(), it will crash since that dev object
      is NULL.
      
      In the current implementation, iser-target just initiates the cleanup
      and returns from DEVICE_REMOVAL callback. This deferred work creates a
      race between iser-target cleaning IB objects(say MR) and lld destroying
      IB device instance.
      
      This patch includes the following fixes
        -> make sure that consumer frees all IB objects associated with device
           instance
        -> return non-zero from the callback to destroy the rdma_cm id
      Signed-off-by: NRaju Rangoju <rajur@chelsio.com>
      Acked-by: NSagi Grimberg <sagi@grimberg.me>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      63b268d2
  6. 25 8月, 2016 1 次提交
    • D
      IB/srpt: Update sport->port_guid with each port refresh · 716b076b
      Doug Ledford 提交于
      If port_guid is set with the default subnet_prefix, then we get a change
      event and run a port refresh, we don't update the port_guid.  As a
      result, attempts to create a target device that uses the new
      subnet_prefix in the wwn will fail to find a match and be rejected by
      the ib_srpt driver.  This makes it impossible to configure a port if it
      was initialized with a default subnet_prefix and later changed to any
      non-default subnet-prefix.  Updating the port refresh task to always
      update the wwn based upon the current subnext_prefix solves this
      problem.
      
      Cc: Bart Van Assche <bart.vanassche@sandisk.com>
      Cc: nab@linux-iscsi.org
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      716b076b
  7. 23 8月, 2016 1 次提交
  8. 04 8月, 2016 1 次提交
  9. 03 8月, 2016 3 次提交
  10. 24 6月, 2016 2 次提交
    • I
      IB/ipoib: Use new device FW version string · 1a863212
      Ira Weiny 提交于
      Using this allows for devices to specify the format of their
      firmware version rather than forcing a format.
      Reviewed-by: NDennis Dalessandro <dennis.dalessandro@intel.com>
      Signed-off-by: NIra Weiny <ira.weiny@intel.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      1a863212
    • B
      IB/srpt: Reduce QP buffer size · c0cf4512
      Bart Van Assche 提交于
      The memory needed for the send and receive queues associated with
      a QP is proportional to the max_sge parameter. The current value
      of that parameter is such that with an mlx4 HCA the QP buffer size
      is 8 MB. Since DMA is used for communication between HCA and CPU
      that buffer either has to be allocated coherently or map_single()
      must succeed for that buffer. Since large contiguous allocations
      are fragile and since the maximum segment size for e.g. swiotlb
      is 256 KB, reduce the max_sge parameter. This patch avoids that
      the following text appears on the console after SRP logout and
      relogin on a system equipped with multiple IB HCAs:
      
      mlx4_core 0000:05:00.0: swiotlb buffer is full (sz: 8388608 bytes)
      swiotlb: coherent allocation failed for device 0000:05:00.0 size=8388608
      CPU: 11 PID: 148 Comm: kworker/11:1 Not tainted 4.7.0-rc4-dbg+ #1
      Call Trace:
       [<ffffffff812c6d35>] dump_stack+0x67/0x92
       [<ffffffff812efe71>] swiotlb_alloc_coherent+0x141/0x150
       [<ffffffff810458be>] x86_swiotlb_alloc_coherent+0x3e/0x50
       [<ffffffffa03861fa>] mlx4_buf_direct_alloc.isra.5+0x9a/0x120 [mlx4_core]
       [<ffffffffa0386545>] mlx4_buf_alloc+0x165/0x1a0 [mlx4_core]
       [<ffffffffa035053d>] create_qp_common.isra.29+0x57d/0xff0 [mlx4_ib]
       [<ffffffffa03510da>] mlx4_ib_create_qp+0x12a/0x3f0 [mlx4_ib]
       [<ffffffffa031154a>] ib_create_qp+0x3a/0x250 [ib_core]
       [<ffffffffa055dd4b>] srpt_cm_handler+0x4bb/0xcad [ib_srpt]
       [<ffffffffa02c1ab0>] cm_process_work+0x20/0xf0 [ib_cm]
       [<ffffffffa02c3640>] cm_work_handler+0x1ac0/0x2059 [ib_cm]
       [<ffffffff810737ed>] process_one_work+0x19d/0x490
       [<ffffffff81073b29>] worker_thread+0x49/0x490
       [<ffffffff8107a0ea>] kthread+0xea/0x100
       [<ffffffff815b25af>] ret_from_fork+0x1f/0x40
      
      Fixes: b99f8e4d ("IB/srpt: convert to the generic RDMA READ/WRITE API")
      Signed-off-by: NBart Van Assche <bart.vanassche@sandisk.com>
      Cc: Laurence Oberman <loberman@redhat.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Sagi Grimberg <sagi@grimberg.me>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      c0cf4512
  11. 07 6月, 2016 5 次提交
  12. 26 5月, 2016 3 次提交
    • M
      IB/IPoIB: Allow setting the device address · 492a7e67
      Mark Bloch 提交于
      In IB networks, and specifically in IPoIB/rdmacm traffic, the device
      address of an IPoIB interface is used as a means to exchange information
      between nodes needed for communication.
      
      Currently an IPoIB interface will always be created with a device
      address based on its node GUID without a way to change that.
      
      This change adds the ability to set the device address of an IPoIB
      interface by value. We use the set mac address ndo to do that.
      
      The flow should be broken down to two:
      1) The GID value is already in the GID table,
         in this case the interface will be able to set carrier up.
      
      2) The GID value is not yet in the GID table,
         in this case the interface won't try to join the multicast group
         and will wait (listen on GID_CHANGE event) until the GID is inserted.
      
      In order to track those changes, we add a new flag:
      * IPOIB_FLAG_DEV_ADDR_SET.
      
      When set, it means the dev_addr is a based on a value in the gid
      table. this bit will be cleared upon a dev_addr change triggered
      by the user and set after validation.
      
      Per IB spec the port GUID can't change if the module is loaded.
      port GUID is the basis for GID at index 0 which is the basis for
      the default device address of a ipoib interface.
      
      The issue is that there are devices that don't follow the spec,
      they change the port GUID while HCA is powered on, so in order
      not to break userspace applications. We need to check if the
      user wanted to control the device address and we assume that
      if he sets the device address back to be based on GID index 0,
      he no longer wishs to control it.
      
      In order to track this, we add an additional flag:
      * IPOIB_FLAG_DEV_ADDR_CTRL
      
      When setting the device address, there is no validation of the upper
      twelve bytes of the device address (flags, qpn, subnet prefix) as those
      bytes are not under the control of the user.
      Signed-off-by: NMark Bloch <markb@mellanox.com>
      Reviewed-by: NLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      492a7e67
    • E
      IB/ipoib: Support SendOnlyFullMember MCG for SendOnly join · 3b561130
      Erez Shitrit 提交于
      Check (via an SA query) if the SM supports the new option for SendOnly
      multicast joins.
      If the SM supports that option it will use the new join state to create
      such multicast group.
      If SendOnlyFullMember is supported, we wouldn't use faked FullMember state
      join for SendOnly MCG, use the correct state if supported.
      
      This check is performed at every invocation of mcast_restart task, to be
      sure that the driver stays in sync with the current state of the SM.
      Signed-off-by: NErez Shitrit <erezsh@mellanox.com>
      Reviewed-by: NLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      3b561130
    • E
      IB/core: Introduce capabilitymask2 field in ClassPortInfo mad · 507f6afa
      Erez Shitrit 提交于
      Change struct ib_class_port_info to conform to IB Spec 1.3
      That in order to get specific capability mask from ClassPortInfo mad.
      
      >From the IB Spec, ClassPortInfo section:
              "CapabilityMask2 Bits 0-26: Additional class-specific capabilities...
               RespTimeValue the rest 5 bits"
      
      The new struct now has one field for capabilitymask2 (previously was the
      reserved field) and the resp_time field.
      
      And it fixes up qib and srpt, use of the field repurposed to be used as
      capabilitymask2:
      IB/qib: Change pma_get_classportinfo
      IB/srpt: Adjust the use of ib_class_port_info
      Signed-off-by: NErez Shitrit <erezsh@mellanox.com>
      Reviewed-by: NLeon Romanovsky <leonro@mellanox.com>
      Reviewed-by: NHal Rosenstock <hal@mellanox.com>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      507f6afa
  13. 17 5月, 2016 1 次提交
    • N
      iscsi-target: Convert transport drivers to signal rdma_shutdown · bd027d85
      Nicholas Bellinger 提交于
      Instead of special casing the handful of callers that check for
      iser-target rdma verbs specific shutdown, use a simple flag at
      iscsit_transport->rdma_shutdown so each driver can signal this.
      
      Also, update iscsi-target/tcp + cxgbit to rdma_shutdown = false.
      
      Cc: Varun Prakash <varun@chelsio.com>
      Cc: Hariprasad Shenai <hariprasad@chelsio.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Sagi Grimberg <sagi@grimberg.me>
      Signed-off-by: NNicholas Bellinger <nab@linux-iscsi.org>
      bd027d85
  14. 14 5月, 2016 11 次提交