1. 23 6月, 2016 1 次提交
    • M
      IB/mlx5: Reset flow support for IB kernel ULPs · 89ea94a7
      Maor Gottlieb 提交于
      The driver exposes interfaces that directly relate to HW state.
      Upon fatal error, consumers of these interfaces (ULPs) that rely
      on completion of all their posted work-request could hang, thereby
      introducing dependencies in shutdown order. To prevent this from
      happening, we manage the relevant resources (CQs, QPs) that are used
      by the device. Upon a fatal error, we now generate simulated
      completions for outstanding WQEs that were not completed at the
      time the HW was reset.
      
      It includes invoking the completion event handler for all involved
      CQs so that the ULPs will poll those CQs. When polled we return
      simulated CQEs with IB_WC_WR_FLUSH_ERR return code enabling ULPs
      to clean up their  resources and not wait forever for completions
      upon receiving remove_one.
      
      The above change requires an extra check in the data path to make
      sure that when device is in error state, the simulated CQEs will
      be returned and no further WQEs will be posted.
      Signed-off-by: NMaor Gottlieb <maorg@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leon@kernel.org>
      Signed-off-by: NDoug Ledford <dledford@redhat.com>
      89ea94a7
  2. 03 3月, 2016 2 次提交
  3. 22 1月, 2016 1 次提交
  4. 05 6月, 2015 1 次提交
  5. 31 5月, 2015 2 次提交
  6. 03 4月, 2015 2 次提交
  7. 22 11月, 2014 1 次提交
  8. 04 10月, 2014 1 次提交
  9. 31 7月, 2014 1 次提交
    • J
      mlx5: Move pci device handling from mlx5_ib to mlx5_core · 9603b61d
      Jack Morgenstein 提交于
      In preparation for a new mlx5 device which is VPI (i.e., ports can be
      either IB or ETH), move the pci device functionality from mlx5_ib
      to mlx5_core.
      
      This involves the following changes:
      1. Move mlx5_core_dev struct out of mlx5_ib_dev. mlx5_core_dev
         is now an independent structure maintained by mlx5_core.
         mlx5_ib_dev now has a pointer to that struct.
         This requires changing a lot of places where the core_dev
         struct was accessed via mlx5_ib_dev (now, this needs to
         be a pointer dereference).
      2. All PCI initializations are now done in mlx5_core. Thus,
         it is now mlx5_core which does pci_register_device (and not
         mlx5_ib, as was previously).
      3. mlx5_ib now registers itself with mlx5_core as an "interface"
         driver. This is very similar to the mechanism employed for
         the mlx4 (ConnectX) driver. Once the HCA is initialized
         (by mlx5_core), it invokes the interface drivers to do
         their initializations.
      4. There is a new event handler which the core registers:
         mlx5_core_event(). This event handler invokes the
         event handlers registered by the interfaces.
      
      Based on a patch by Eli Cohen <eli@mellanox.com>
      Signed-off-by: NJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: NEli Cohen <eli@mellanox.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9603b61d
  10. 28 5月, 2014 1 次提交
    • Y
      IB/mlx5: add missing padding at end of struct mlx5_ib_create_srq · 43bc8893
      Yann Droneaud 提交于
      The i386 ABI disagrees with most other ABIs regarding alignment of
      data type larger than 4 bytes: on most ABIs a padding must be added at
      end of the structures, while it is not required on i386.
      
      So for most ABIs struct mlx5_ib_create_srq gets implicitly padded to be
      aligned on a 8 bytes multiple, while for i386, such padding is not
      added.
      
      Tool pahole could be used to find such implicit padding:
      
        $ pahole --anon_include \
                 --nested_anon_include \
                 --recursive \
                 --class_name mlx5_ib_create_srq \
                 drivers/infiniband/hw/mlx5/mlx5_ib.o
      
      Then, structure layout can be compared between i386 and x86_64:
      
        +++ obj-i386/drivers/infiniband/hw/mlx5/mlx5_ib.o.pahole.txt    2014-03-28 11:43:07.386413682 +0100
        --- obj-x86_64/drivers/infiniband/hw/mlx5/mlx5_ib.o.pahole.txt  2014-03-27 13:06:17.788472721 +0100
        @@ -69,7 +68,6 @@ struct mlx5_ib_create_srq {
                __u64                      db_addr;              /*     8     8 */
                __u32                      flags;                /*    16     4 */
      
        -       /* size: 20, cachelines: 1, members: 3 */
        -       /* last cacheline: 20 bytes */
        +       /* size: 24, cachelines: 1, members: 3 */
        +       /* padding: 4 */
        +       /* last cacheline: 24 bytes */
         };
      
      ABI disagreement will make an x86_64 kernel try to read past
      the buffer provided by an i386 binary.
      
      When boundary check will be implemented, the x86_64 kernel will
      refuse to read past the i386 userspace provided buffer and the
      uverb will fail.
      
      Anyway, if the structure lay in memory on a page boundary and
      next page is not mapped, ib_copy_from_udata() will fail and the
      uverb will fail.
      
      This patch makes create_srq_user() takes care of the input
      data size to handle the case where no padding was provided.
      
      This way, x86_64 kernel will be able to handle struct mlx5_ib_create_srq
      as sent by unpatched and patched i386 libmlx5.
      
      Link: http://marc.info/?i=cover.1399309513.git.ydroneaud@opteya.com
      Cc: <stable@vger.kernel.org>
      Fixes: e126ba97 ("mlx5: Add driver for Mellanox Connect-IB adapter")
      Signed-off-by: NYann Droneaud <ydroneaud@opteya.com>
      Signed-off-by: NRoland Dreier <roland@purestorage.com>
      43bc8893
  11. 09 11月, 2013 3 次提交
  12. 11 10月, 2013 1 次提交
  13. 09 7月, 2013 1 次提交