[GIT PULL] Please pull RDMA subsystem changes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Linus,

Here are the RDMA patches for 4.19.

This time there are many merge conflicts, all due to various tree-wide or RDMA
subystem wide changes done by various people. The resolution is tricky, as git
does not highlight two areas that need revision.

An overview of the conflicts:
 - Mark Rutland renamed __atomic_add_unless() conflicting with major rework of
   rdma_core.c
 - Steve Wise split ib_device_attr.max_sge into max_send_sge and max_recv_sge,
   and updated all ULPs. This clashed with other changes in the NVMe over
   fabrics driver adding new users of max_sge. This is tricky as the correct
   use of send/recv in the merge is essential. Christoph Hellwig has reviewded
   this resolution in linux-next
 - Bart did a tree wide change to use NULL for the last argument in
   ibv_post_send(), clashing with various RDP ULP changes in netdev
 - Parav revised the ugly ib_query_gid API with something saner and
   did a treewide update. This clashed horribly with general work on the SMC
   code in netdev. We've handled this by providing a compat ib_query_gid wrapper
   and reverting the SMC changes in rdma.git, so no merge fixup neeed.
   However, I will send a cleanup for this to remove the wrapper as soon as
   possible.
 - Various small conflicts between RDMA -rc and -next resolved by merging the
   v4.18 tag.

Notably we have again avoided the historical merge conflicts in the Mellanox
drivers with the new 'shared branch' arrangement with DaveM, this seems to be
working well.

The above tree wide changes explain most of the hunks outside the tree, the
only other cases are a new function check_shl_overflow() in
include/linux/overflow.h ack'd by Kees and an edit to idr.h from Matthew Wilcox
that was needed for other patches he sent to the RDMA tree.

As before I've resolved the conflicts in the for-next tag (this makes the
diffstat below more accurate) and provided the unmerged tree in the
for-linus-unmerged tag. The merge resolution diff is a bit big so it is
included at the end of this message for your reference.

The following changes since commit 5c60a7389d795e001c8748b458eb76e3a5b6008c:

  Merge tag 'for-linus-4.19-ofs1' of git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux (2018-08-16 10:53:45 -0700)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma.git tags/for-linus

for you to fetch changes up to 0a3173a5f09bc58a3638ecfd0a80bdbae55e123c:

  Merge branch 'linus/master' into rdma.git for-next (2018-08-16 14:21:29 -0600)

----------------------------------------------------------------
This has been a large cycle for RDMA, with several major patch series
reworking parts of the core code.

- Rework the so-called 'gid cache' and internal APIs to use a kref'd
  pointer to a struct instead of copying, push this upwards into the
  callers and add more stuff to the struct. The new design avoids some
  ugly races the old one suffered with. This is part of the namespace
  enablement work as the new struct is learning to be namespace aware.

- Various uapi cleanups, moving more stuff to include/uapi and fixing some
  long standing bugs that have recently been discovered.

- Driver updates for mlx5, mlx4 i40iw, rxe, cxgb4, hfi1, usnic, pvrdma,
  and hns

- Provide max_send_sge and max_recv_sge attributes to better support HW
  where these values are asymmetric.

- mlx5 user API 'devx' allows sending commands directly to the device FW,
  instead of trying to cram every wild and niche feature into the common
  API. Sort of like what GPU does.

- Major write() and ioctl() API rework to cleanly support PCI device hot
  unplug and advance the ioctl conversion work

- Sparse and compile warning cleanups

- Add 'const' to the ib_poll_cq() signature, and permit a NULL 'bad_wr',
  which is the common use case

- Various patches to avoid high order allocations across the stack

- SRQ support for cxgb4, hns and qedr

- Changes to IPoIB to better follow the netdev model for working with
  struct net_device liftime

----------------------------------------------------------------
Arnd Bergmann (1):
      infiniband: i40iw, nes: don't use wall time for TCP sequence numbers

Artemy Kovalyov (2):
      RDMA: Validate grh_required when handling AVs
      IB/uverbs: Pass IB_UVERBS_QPF_GRH_REQUIRED to user space

Bart Van Assche (51):
      MAINTAINERS: Update SRP entries
      IB/srpt: Support HCAs with more than two ports
      include/rdma/opa_addr.h: Fix an endianness issue
      IB/srp: Remove driver version and release data information
      IB/mlx5: Remove set-but-not-used variables
      ib_srpt: Fix a use-after-free in srpt_close_ch()
      ib_srpt: Fix a use-after-free in __srpt_close_all_ch()
      RDMA/core: Remove ib_find_cached_gid() and ib_find_cached_gid_by_port()
      RDMA/core: Remove set-but-not-used variables
      IB/nes: Fix a compiler warning
      RDMA/ocrdma: Remove a set-but-not-used variable
      IB/iser: Remove set-but-not-used variables
      RDMA/rxe: Simplify the error handling code in rxe_create_ah()
      RDMA/cxgb3: Make iwch_poll_cq_one() easier to analyze
      RDMA/cxgb4: Make c4iw_poll_cq_one() easier to analyze
      RDMA/rw: Fix rdma_rw_ctx_signature_init() kernel-doc header
      RDMA/nes: Avoid complaints about unused variables
      RDMA/ocrdma: Make ocrdma_destroy_qp() easier to analyze
      IB/hfi1: Suppress a compiler warning
      hns: Remove a set-but-not-used variable
      IB/srpt: Fix srpt_cm_req_recv() error path (1/2)
      IB/srpt: Fix srpt_cm_req_recv() error path (2/2)
      RDMA/bnxt_re: Modify a fall-through annotation
      MAINTAINERS: Remove Dave Goodell from the usnic RDMA driver maintainer list
      IB/core: Allow ULPs to specify NULL as the third ib_post_(send|recv|srq_recv)() argument
      RDMA/core: Simplify ib_post_(send|recv|srq_recv)() calls
      IB/IPoIB: Simplify ib_post_(send|recv|srq_recv)() calls
      IB/iser: Simplify ib_post_(send|recv|srq_recv)() calls
      IB/isert: Simplify ib_post_(send|recv|srq_recv)() calls
      IB/srp: Simplify ib_post_(send|recv|srq_recv)() calls
      IB/srpt: Simplify ib_post_(send|recv|srq_recv)() calls
      nvme-rdma: Simplify ib_post_(send|recv|srq_recv)() calls
      nvmet-rdma: Simplify ib_post_(send|recv|srq_recv)() calls
      fs/cifs: Simplify ib_post_(send|recv|srq_recv)() calls
      net/9p: Simplify ib_post_(send|recv|srq_recv)() calls
      net/rds: Remove two WARN_ON() statements
      net/rds: Simplify ib_post_(send|recv|srq_recv)() calls
      net/smc: Remove a WARN_ON() statement
      net/smc: Simplify ib_post_(send|recv|srq_recv)() calls
      net/xprtrdma: Simplify ib_post_(send|recv|srq_recv)() calls
      RDMA/ocrdma: Suppress a compiler warning
      RDMA/usnic: Suppress a compiler warning
      IB/iser: Inline two work request conversion functions
      RDMA: Constify the argument of the work request conversion functions
      IB/mlx5, ib_post_send(), IB_WR_REG_SIG_MR: Do not modify the 'wr' argument
      RDMA, core and ULPs: Declare ib_post_send() and ib_post_recv() arguments const
      rdma/cxgb4: Remove a set-but-not-used variable
      rdma/cxgb4: Fix SRQ endianness annotations
      rdma/cxgb4: Simplify a structure initialization
      RDMA/rxe: Set wqe->status correctly if an unexpected response is received
      Update the e-mail address of Bart Van Assche

Bharat Potnuri (1):
      iw_cxgb4: remove duplicate memcpy() in c4iw_create_listen()

Dan Carpenter (4):
      IB/core: type promotion bug in rdma_rw_init_one_mr()
      RDMA/bnxt_re: Fix a couple off by one bugs
      RDMA/bnxt_re: Fix a bunch of off by one bugs in qplib_fp.c
      rdma/cxgb4: fix some info leaks

Denis Drozdov (1):
      IB/IPoIB: Set ah valid flag in multicast send flow

Erez Shitrit (1):
      IB/ipoib: Use cancel_delayed_work_sync for neigh-clean task

Gal Pressman (1):
      RDMA/hns: Fix usage of bitmap allocation functions return values

Håkon Bugge (1):
      IB/cm: Remove unused and erroneous msg sequence encoding

Jack Morgenstein (1):
      IB/mlx4: Use 4K pages for kernel QP's WQE buffer

Jan Dakinevich (2):
      ib_srpt: use kvmalloc to allocate ring pointers
      IPoIB: use kvzalloc to allocate an array of bucket pointers

Jann Horn (1):
      IB/mlx5: fix uaccess beyond "count" in debugfs read/write handlers

Jason Gunthorpe (90):
      IB/core: Provide rdma_ versions of the gid cache API
      IB/core: Make rdma_find_gid_by_filter support all protocols
      IB/rxe: Do not hide uABI stuff in memcpy
      IB/core: Add a sgid_attr pointer to struct rdma_ah_attr
      IB{cm, core}: Introduce and use ah_attr copy, move, replace APIs
      RDMA: Hold the sgid_attr inside the struct ib_ah/qp
      Merge branch 'mellanox/mlx5-next' into RDMA for-next
      Merge branch 'icrc-counter' into rdma.git for-next
      IB/uverbs: Delete type and id from uverbs_obj_attr
      RDMA/core: Remove unused ib cache functions
      IB/usnic: Update with bug fixes from core code
      RDMA/uverbs: Check existence of create_flow callback
      IB/mlx4: Create slave AH's directly
      IB/core: Check for rdma_protocol_ib only after validating port_num
      IB/cm: Remove now useless rcu_lock in dst_fetch_ha
      Merge branch 'mlx5-dump-fill-mkey' into rdma.git for-next
      RDMA/uverbs: Store the specs_root in the struct ib_uverbs_device
      RDMA/uverbs: Split UVERBS_ATTR_FLOW_ACTION_ESP_HANDLE
      RDMA/uverbs: Simplify UVERBS_ATTR family of macros
      RDMA/uverbs: Simplify method definition macros
      RDMA/uverbs: Simplify UVERBS_OBJECT and _TREE family of macros
      RDMA/uverbs: Get rid of the & in method specifications
      RDMA/uverbs: Remove UA_FLAGS
      RDMA/uverbs: Use UVERBS_ATTR_MIN_SIZE correctly and uniformly
      RDMA/uverbs: Combine MIN_SZ_OR_ZERO with UVERBS_ATTR_STRUCT
      IB/uverbs: Add a uobj_perform_destroy helper
      IB/uverbs: Move non driver related elements from ib_ucontext to ib_ufile
      IB/uverbs: Replace ib_ucontext with ib_uverbs_file in core function calls
      IB/uverbs: Replace file->ucontext with file in uverbs_cmd.c
      IB/uverbs: Tidy up remaining references to ucontext
      IB/uverbs: Remove ib_uobject_file
      IB/uverbs: Replace ib_ucq_object uverbs_file with the one in ib_uobject
      IB/uverbs: Do not use uverbs_cmd_mask in the ioctl path
      RDMA: Fix storage of PortInfo CapabilityMask in the kernel
      RDMA/hfi1: Move grh_required into update_sm_ah
      RDMA/cxgb4: Restore the dropped uninitialized_var
      IB/cm: Remove cma_multicast->igmp_joined
      IB/uverbs: Move ib_access_flags and ib_read_counters_flags to uapi
      Merge branch 'mellanox/mlx5-next' into rdma.git for-next
      IB/uverbs: Get rid of null_obj_type
      IB/uverbs: Handle IDR and FD types without truncation
      IB/uverbs: Clarify the kref'ing ordering for alloc_commit
      IB/uverbs: Revise the placement of get/puts on uobject
      IB/uverbs: Clarify and revise uverbs_close_fd
      IB/uverbs: Revise and clarify the rwsem and uobjects_lock
      IB/uverbs: Rework the locking for cleaning up the ucontext
      IB/uverbs: Always propagate errors from rdma_alloc_commit_uobject()
      IB/uverbs: Move the FD uobj type struct file allocation to alloc_commit
      IB/mlx5: Use the ucontext from the uobj, not the file
      IB/uverbs: Fix locking around struct ib_uverbs_file ucontext
      IB/usnic: usnic should not select INFINIBAND_USER_ACCESS
      net/xprtrdma: Restore needed argument to ib_post_send
      IB/cache: Restore compatibility for ib_query_gid
      IB/uverbs: Add UVERBS_ATTR_FLAGS_IN to the specs language
      IB/uverbs: Remove rdma_explicit_destroy() from the ioctl methods
      IB/uverbs: Make the write path destroy methods use the same flow as ioctl
      IB/uverbs: Consolidate uobject destruction
      IB/uverbs: Convert 'bool exclusive' into an enum
      IB/uverbs: Allow RDMA_REMOVE_DESTROY to work concurrently with disassociate
      IB/uverbs: Allow uobject allocation to work concurrently with disassociate
      IB/uverbs: Lower the test for ongoing disassociation
      IB/uverbs: Do not pass struct ib_device to the write based methods
      IB/uverbs: Do not pass struct ib_device to the ioctl methods
      IB/uverbs: Do not block disassociate during write()
      IB/uverbs: Allow all DESTROY commands to succeed after disassociate
      IB/ipoib: Get rid of IPOIB_FLAG_GOING_DOWN
      IB/ipoib: Move all uninit code into ndo_uninit
      IB/ipoib: Move init code to ndo_init
      RDMA/netdev: Use priv_destructor for netdev cleanup
      IB/ipoib: Get rid of the sysfs_mutex
      IB/ipoib: Do not remove child devices from within the ndo_uninit
      IB/ipoib: Maintain the child_intfs list from ndo_init/uninit
      IB/ipoib: Consolidate checking of the proposed child interface
      overflow.h: Add arithmetic shift helper
      IB/uverbs: Fix reading of 32 bit flags
      IB/uverbs: Have the core code create the uverbs_root_spec
      IB/uverbs: Build the specs into a radix tree at runtime
      IB/uverbs: Use uverbs_api to manage the object type inside the uobject
      IB/uverbs: Provide implementation private memory for the uverbs_attr_bundle
      IB/uverbs: Remove the ib_uverbs_attr pointer from each attr
      IB/uverbs: Add a simple allocator to uverbs_attr_bundle
      IB/uverbs: Use uverbs_alloc for allocations
      IB/uverbs: Use uverbs_api to unmarshal ioctl commands
      IB/uverbs: Remove struct uverbs_root_spec and all supporting code
      IB/uverbs: Do not check for device disassociation during ioctl
      IB/ucm: Fix compiling ucm.c
      IB/mlx5: Fix leaking stack memory to userspace
      Merge tag 'v4.18' into rdma.git for-next
      Revert "net/smc: Replace ib_query_gid with rdma_get_gid_attr"
      Merge branch 'linus/master' into rdma.git for-next

Kamal Heib (11):
      RDMA/ipoib: Use min_t() macro instead of min()
      RDMA/ipoib: Prefer unsigned int to bare use of unsigned
      RDMA/ipoib: Fix use of sizeof()
      RDMA/ipoib: Fix return code from ipoib_cm_dev_init
      RDMA/mlx5: Remove set but not used variables
      RDMA/providers: Fix return value from create_srq callbacks
      RDMA/ipoib: Fix check for return code from ib_create_srq
      RDMA/core: Remove {create,destroy}_ah from mandatory verbs
      RDMA/core: Check for verbs callbacks before using them
      RDMA/providers: Remove pointless functions
      RDMA: Fix return code check in rdma_set_cq_moderation

Kees Cook (1):
      test_overflow: Add shift overflow tests

Leon Romanovsky (16):
      RDMA/nldev: Return port capability flag for IB only
      RDMA/uverbs: Refactor flow_resources_alloc() function
      RDMA/mlx5: Refactor transport domain checks
      RDMA/verbs: Drop kernel variant of create_flow
      RDMA/verbs: Drop kernel variant of destroy_flow
      RDMA/uverbs: Don't overwrite NULL pointer with ZERO_SIZE_PTR
      RDMA/umem: Don't check for a negative return value of dma_map_sg_attrs()
      RDMA/uverbs: Remove redundant check
      RDMA/mlx5: Don't leak UARs in case of free fails
      RDMA/i40w: Hold read semaphore while looking after VMA
      RDMA/mlx5: Remove unused port number parameter
      RDMA/mlx5: Melt consecutive calls to alloc_bfreg() in one call
      RDMA/mlx5: Check that supplied blue flame index doesn't overflow
      RDMA/umem: Don't hold mmap_sem for too long
      RDMA/umem: Refactor exit paths in ib_umem_get
      RDMA/mlx5: Fix shift overflow in mlx5_ib_create_wq

Lijun Ou (12):
      RDMA/hns: Do not overwrite the error code during error unwind in hns_roce_init
      RDMA/hns: Add 50GE type of hnae3 device match
      RDMA/hns: Return correct error code from hns_roce_v1_rsv_lp_qp()
      RDMA/hns: Add illegal hop_num judgement
      RDMA/hns: Use delay instead of usleep
      RDMA/hns: Update the data type of immediate data
      RDMA/hns: Enable modify_cq for uverbs.
      RDMA/hns: Only assgin the fields of the av if IB_QP_AV bit is set
      RDMA/hns: Assign the value for vlan field of qp context
      RDMA/hns: Modify qp will return errno when qp type is illegal
      RDMA/hns: Use macro instead of magic number
      RDMA/hns: Program the tclass and flow label into the hardware

Maor Gottlieb (1):
      IB/mlx5: Fix GRE flow specification

Matan Barak (5):
      IB/uverbs: Export uverbs idr and fd types
      IB/uverbs: Refactor uverbs_finalize_objects
      IB/uverbs: Add PTR_IN attributes that are allocated/copied automatically
      IB/uverbs: Add a macro to define a type with no kernel known size
      IB/uverbs: Allow an empty namespace in ioctl() framework

Matthew Wilcox (1):
      IB/mad: Agent registration is process context only

Michael J. Ruhl (3):
      IB/hfi1: Remove INTx support and simplify MSIx usage
      IB/hfi1: Set in_use_ctxts bits for user ctxts only
      IB/hfi1: Remove incorrect call to do_interrupt callback

Mike Marciniszyn (10):
      IB/hfi1: Move normal functions from hfi1_devdata to const array
      IB/hfi1: Move rhf_offset from devdata to ctxtdata
      IB/hfi1: Remove rcvhdrsize
      IB/rdmavt, IB/hfi1: Create device dependent s_flags
      IB/hfi1: Remove rcvhdrq_size
      IB/hfi1: Remove rcvctrl from ctxtdata
      IB/hfi1: Rightsize ctxt_eager_bufs fields
      IB/hfi1: Remove unused/writeonly devdata fields
      IB/hfi1: Remove caches of chip CSRs
      IB/hfi1: Reorg ctxtdata and rightsize fields

Neil Horman (1):
      vmw_pvrdma: Release netdev when vmxnet3 module is removed

Or Gerlitz (1):
      MAINTAINERS: Moving out...

Parav Pandit (45):
      IB/core: Do not set the gid type when reserving default entries
      IB/core: Store default GID property per-table instead of per-entry
      IB/core: Introduce GID entry reference counts
      RDMA: Use GID from the ib_gid_attr during the add_gid() callback
      IB/core: Introduce GID attribute get, put and hold APIs
      IB/core: Replace ib_query_gid with rdma_get_gid_attr
      net/smc: Replace ib_query_gid with rdma_get_gid_attr
      IB: Replace ib_query_gid/ib_get_cached_gid with rdma_query_gid
      IB/rxe: Use rdma GID API
      IB: Ensure that all rdma_ah_attr's are zero initialized
      IB/core: Tidy ib_resolve_eth_dmac
      RDMA: Convert drivers to use sgid_attr instead of sgid_index
      IB/mlx4: Use GID attribute from ah attribute
      RDMA: Convert drivers to use the AH's sgid_attr in post_wr paths
      RDMA/cma: Consider net namespace while leaving multicast group
      IB/core: Free GID table entry during GID deletion
      IB: Make ib_init_ah_attr_from_wc set sgid_attr
      IB: Make ib_init_ah_from_mcmember set sgid_attr
      IB: Make init_ah_attr_grh_fields set sgid_attr
      IB/cm: Keep track of the sgid_attr that created the cm id
      IB/cm: Pass the sgid_attr through various events
      IB/cm: Replace members of sa_path_rec with 'struct sgid_attr *'
      IB/cm: Use sgid_attr from the AV
      IB/mlx5: Honor cnt_set_id_valid flag instead of set_id
      IB/core: Simplify check for RoCE route resolve
      IB/core: Introduce and use sgid_attr in CM requests
      RDMA/cma: Consider netdevice for RoCE ports
      RDMA/cma: Do not ignore net namespace for unbound cm_id
      RDMA/cma: Initialize resource type in __rdma_create_id()
      RDMA/cma: Simplify rdma_resolve_addr() error flow
      RDMA/core: Constify dst_addr argument
      RDMA/cma: Constify path record, ib_cm_event, listen_id pointers
      RDMA/cma: Get rid of 1 bit boolean
      RDMA/core: Return bool instead of int
      RDMA/core: Avoid holding lock while initializing fields on stack
      RDMA/core: Simplify gid type check in cma_acquire_dev()
      RDMA/core: Prefix _ib to IB/RoCE specific functions
      IB/ucm: Initialize sgid request GID attribute pointer
      IB/core: Add comment for change upper netevent handling
      IB/core: Avoid confusing del_netdev_default_ips
      IB/core: Delete lower netdevice default GID entries in bonding scenario
      IB/core: Consider adding default GIDs of bond device
      IB/core: Add default GIDs of the bond master netdev
      IB/core: Update GID entries for netdevice whose mac address changes
      IB/core: Change filter function return type from int to bool

Potnuri Bharat Teja (3):
      iw_cxgb4: RDMA write with immediate support
      iw_cxgb4: Support FW write completion WR
      iw_cxgb4: pass window scale in flowc work request

Qing Huang (1):
      IB/mlx5: avoid excessive warning msgs when creating VFs on 2nd port

Raju Rangoju (3):
      rdma/cxgb4: Add support for 64Byte cqes
      rdma/cxgb4: Add support for srq functions & structs
      rdma/cxgb4: Add support for kernel mode SRQ's

Sagi Grimberg (1):
      IB/iser: set can_queue earlier to allow setting higher queue depth

Shiraz Saleem (1):
      i40iw: Reorganize acquire/release of locks in i40iw_manage_apbvt

Steve Wise (1):
      IB/core: add max_send_sge and max_recv_sge attributes

Talat Batheesh (1):
      IB/mlx5: Support RoCE ICRC encapsulated error counter

Tarick Bedeir (1):
      IB/mlx4: Test port number before querying type.

Varsha Rao (1):
      IB/core: Remove extra parentheses

Vijay Immanuel (3):
      IB/rxe: increase max MR limit
      IB/rxe: support for 802.1q VLAN on the listener
      IB/rxe: don't clear the tx queue on every transfer

Wei Yongjun (1):
      IB/ipoib: Fix error return code in ipoib_dev_init()

Yishai Hadas (22):
      IB/core: Introduce DECLARE_UVERBS_GLOBAL_METHODS
      IB/core: Expose ib_ucontext from a given ib_uverbs_file
      IB/mlx5: Introduce DEVX
      IB/mlx5: Add support for DEVX general command
      IB/mlx5: Add obj create and destroy functionality
      IB/mlx5: Add DEVX support for modify and query commands
      IB/mlx5: Add support for DEVX query UAR
      IB/mlx5: Add DEVX support for memory registration
      IB/mlx5: Add DEVX query EQN support
      IB/mlx5: Expose DEVX tree
      IB/mlx5: Add support for drain SQ & RQ
      IB/mlx4: Add support for drain SQ & RQ
      IB: Improve uverbs_cleanup_ucontext algorithm
      IB: Enable uverbs_destroy_def_handler to be used by drivers
      net/mlx5: Add forward compatible support for the FTE match data
      net/mlx5: Add support for flow table destination number
      IB/mlx5: Introduce flow steering matcher uapi object
      IB: Support ib_flow creation in drivers
      IB/mlx5: Introduce driver create and destroy flow methods
      IB/mlx5: Support adding flow steering rule by raw description
      IB/mlx5: Add support for a flow table destination for driver flow steering
      IB/mlx5: Enable driver uapi commands for flow steering

Yixian Liu (1):
      RDMA/hns: Support flush cqe for hip08 in kernel space

Yonatan Cohen (1):
      IB/mlx5: Expose dump and fill memory key

Yuval Bason (3):
      qedr: Add wrapping generic structure for qpidr and adjust idr routines.
      qedr: Add support for kernel mode SRQ's
      qedr: Add user space support for SRQ

Yuval Shaia (1):
      RDMA/vmw_pvrdma: Delete unused function

Zhu Yanjun (2):
      IB/rxe: avoid unnecessary NULL check
      IB/rxe: Drop QP0 silently

oulijun (5):
      RDMA/hns: Fix endian conversions and annotations
      RDMA/hns: Add TSQ link table support
      RDMA/hns: Add TPQ link table support
      RDMA/hns: Update the implementation of set_gid
      RDMA/hns: Update the implementation of set_mac

willy@xxxxxxxxxxxxx (2):
      IDR: Expose the XArray lock
      IB/mad: Use IDR for agent IDs

 .mailmap                                           |    2 +
 MAINTAINERS                                        |   16 +-
 drivers/infiniband/Kconfig                         |    2 +-
 drivers/infiniband/core/Makefile                   |    5 +-
 drivers/infiniband/core/addr.c                     |   16 +-
 drivers/infiniband/core/cache.c                    |  724 ++++++++-----
 drivers/infiniband/core/cm.c                       |  147 +--
 drivers/infiniband/core/cm_msgs.h                  |    7 -
 drivers/infiniband/core/cma.c                      |  362 ++++---
 drivers/infiniband/core/core_priv.h                |    4 +-
 drivers/infiniband/core/device.c                   |   23 +-
 drivers/infiniband/core/mad.c                      |  113 +-
 drivers/infiniband/core/mad_priv.h                 |    7 +-
 drivers/infiniband/core/multicast.c                |   40 +-
 drivers/infiniband/core/nldev.c                    |   16 +-
 drivers/infiniband/core/rdma_core.c                | 1018 +++++++++++-------
 drivers/infiniband/core/rdma_core.h                |   96 +-
 drivers/infiniband/core/roce_gid_mgmt.c            |  306 ++++--
 drivers/infiniband/core/rw.c                       |    8 +-
 drivers/infiniband/core/sa_query.c                 |  138 ++-
 drivers/infiniband/core/sysfs.c                    |   66 +-
 drivers/infiniband/core/ucm.c                      |   15 +-
 drivers/infiniband/core/umem.c                     |   62 +-
 drivers/infiniband/core/user_mad.c                 |    1 +
 drivers/infiniband/core/uverbs.h                   |   34 +-
 drivers/infiniband/core/uverbs_cmd.c               |  599 +++++------
 drivers/infiniband/core/uverbs_ioctl.c             |  709 ++++++++-----
 drivers/infiniband/core/uverbs_ioctl_merge.c       |  664 ------------
 drivers/infiniband/core/uverbs_main.c              |  232 ++--
 drivers/infiniband/core/uverbs_marshall.c          |    2 -
 drivers/infiniband/core/uverbs_std_types.c         |  200 ++--
 .../infiniband/core/uverbs_std_types_counters.c    |  108 +-
 drivers/infiniband/core/uverbs_std_types_cq.c      |  154 ++-
 drivers/infiniband/core/uverbs_std_types_dm.c      |   61 +-
 .../infiniband/core/uverbs_std_types_flow_action.c |  170 +--
 drivers/infiniband/core/uverbs_std_types_mr.c      |   88 +-
 drivers/infiniband/core/uverbs_uapi.c              |  346 ++++++
 drivers/infiniband/core/verbs.c                    |  523 ++++++---
 drivers/infiniband/hw/bnxt_re/ib_verbs.c           |  144 +--
 drivers/infiniband/hw/bnxt_re/ib_verbs.h           |   15 +-
 drivers/infiniband/hw/bnxt_re/qplib_fp.c           |   12 +-
 drivers/infiniband/hw/bnxt_re/qplib_sp.c           |    4 +-
 drivers/infiniband/hw/cxgb3/iwch_cq.c              |   64 +-
 drivers/infiniband/hw/cxgb3/iwch_provider.c        |   44 +-
 drivers/infiniband/hw/cxgb3/iwch_provider.h        |    8 +-
 drivers/infiniband/hw/cxgb3/iwch_qp.c              |   32 +-
 drivers/infiniband/hw/cxgb4/cm.c                   |   90 +-
 drivers/infiniband/hw/cxgb4/cq.c                   |  269 +++--
 drivers/infiniband/hw/cxgb4/device.c               |   20 +-
 drivers/infiniband/hw/cxgb4/ev.c                   |    5 +-
 drivers/infiniband/hw/cxgb4/iw_cxgb4.h             |   57 +-
 drivers/infiniband/hw/cxgb4/provider.c             |   56 +-
 drivers/infiniband/hw/cxgb4/qp.c                   | 1051 +++++++++++++++---
 drivers/infiniband/hw/cxgb4/resource.c             |   51 +-
 drivers/infiniband/hw/cxgb4/t4.h                   |  164 ++-
 drivers/infiniband/hw/cxgb4/t4fw_ri_api.h          |   68 +-
 drivers/infiniband/hw/hfi1/chip.c                  |  205 ++--
 drivers/infiniband/hw/hfi1/chip.h                  |   30 +
 drivers/infiniband/hw/hfi1/driver.c                |   63 +-
 drivers/infiniband/hw/hfi1/file_ops.c              |   10 +-
 drivers/infiniband/hw/hfi1/hfi.h                   |  243 ++---
 drivers/infiniband/hw/hfi1/init.c                  |   44 +-
 drivers/infiniband/hw/hfi1/pcie.c                  |   19 +-
 drivers/infiniband/hw/hfi1/pio.c                   |   14 +-
 drivers/infiniband/hw/hfi1/qp.c                    |    6 +-
 drivers/infiniband/hw/hfi1/qp.h                    |   24 +-
 drivers/infiniband/hw/hfi1/rc.c                    |    6 +-
 drivers/infiniband/hw/hfi1/ruc.c                   |   14 +-
 drivers/infiniband/hw/hfi1/sdma.c                  |   10 +-
 drivers/infiniband/hw/hfi1/verbs.c                 |   18 +-
 drivers/infiniband/hw/hfi1/vnic_main.c             |   12 +-
 drivers/infiniband/hw/hns/hns_roce_ah.c            |   21 +-
 drivers/infiniband/hw/hns/hns_roce_common.h        |    9 -
 drivers/infiniband/hw/hns/hns_roce_db.c            |    2 +
 drivers/infiniband/hw/hns/hns_roce_device.h        |   45 +-
 drivers/infiniband/hw/hns/hns_roce_hem.c           |    7 +-
 drivers/infiniband/hw/hns/hns_roce_hw_v1.c         |  430 +++++---
 drivers/infiniband/hw/hns/hns_roce_hw_v1.h         |    2 +-
 drivers/infiniband/hw/hns/hns_roce_hw_v2.c         |  698 ++++++++++--
 drivers/infiniband/hw/hns/hns_roce_hw_v2.h         |  136 ++-
 drivers/infiniband/hw/hns/hns_roce_main.c          |   15 +-
 drivers/infiniband/hw/hns/hns_roce_pd.c            |    2 +-
 drivers/infiniband/hw/hns/hns_roce_qp.c            |   55 +-
 drivers/infiniband/hw/i40iw/Kconfig                |    1 +
 drivers/infiniband/hw/i40iw/i40iw_cm.c             |   26 +-
 drivers/infiniband/hw/i40iw/i40iw_hw.c             |   83 +-
 drivers/infiniband/hw/i40iw/i40iw_verbs.c          |   54 +-
 drivers/infiniband/hw/mlx4/ah.c                    |   70 +-
 drivers/infiniband/hw/mlx4/mad.c                   |   29 +-
 drivers/infiniband/hw/mlx4/main.c                  |   41 +-
 drivers/infiniband/hw/mlx4/mlx4_ib.h               |   21 +-
 drivers/infiniband/hw/mlx4/qp.c                    |  421 ++++----
 drivers/infiniband/hw/mlx4/srq.c                   |    4 +-
 drivers/infiniband/hw/mlx5/Makefile                |    2 +
 drivers/infiniband/hw/mlx5/ah.c                    |   11 +-
 drivers/infiniband/hw/mlx5/cmd.c                   |   12 +
 drivers/infiniband/hw/mlx5/cmd.h                   |    1 +
 drivers/infiniband/hw/mlx5/cong.c                  |    9 +-
 drivers/infiniband/hw/mlx5/cq.c                    |    2 +-
 drivers/infiniband/hw/mlx5/devx.c                  | 1119 ++++++++++++++++++++
 drivers/infiniband/hw/mlx5/flow.c                  |  252 +++++
 drivers/infiniband/hw/mlx5/gsi.c                   |    8 +-
 drivers/infiniband/hw/mlx5/main.c                  |  570 +++++++---
 drivers/infiniband/hw/mlx5/mlx5_ib.h               |   85 +-
 drivers/infiniband/hw/mlx5/mr.c                    |   34 +-
 drivers/infiniband/hw/mlx5/qp.c                    |  294 +++--
 drivers/infiniband/hw/mlx5/srq.c                   |    4 +-
 drivers/infiniband/hw/mthca/mthca_av.c             |    5 +-
 drivers/infiniband/hw/mthca/mthca_dev.h            |   24 +-
 drivers/infiniband/hw/mthca/mthca_provider.c       |    7 +-
 drivers/infiniband/hw/mthca/mthca_qp.c             |   24 +-
 drivers/infiniband/hw/mthca/mthca_srq.c            |    8 +-
 drivers/infiniband/hw/nes/nes.h                    |    2 +-
 drivers/infiniband/hw/nes/nes_cm.c                 |    8 +-
 drivers/infiniband/hw/nes/nes_hw.c                 |    6 +-
 drivers/infiniband/hw/nes/nes_verbs.c              |   74 +-
 drivers/infiniband/hw/ocrdma/ocrdma_ah.c           |   32 +-
 drivers/infiniband/hw/ocrdma/ocrdma_ah.h           |    1 -
 drivers/infiniband/hw/ocrdma/ocrdma_hw.c           |   26 +-
 drivers/infiniband/hw/ocrdma/ocrdma_main.c         |    1 -
 drivers/infiniband/hw/ocrdma/ocrdma_verbs.c        |   50 +-
 drivers/infiniband/hw/ocrdma/ocrdma_verbs.h        |   12 +-
 drivers/infiniband/hw/qedr/main.c                  |  107 +-
 drivers/infiniband/hw/qedr/qedr.h                  |   43 +-
 drivers/infiniband/hw/qedr/qedr_hsi_rdma.h         |   11 +
 drivers/infiniband/hw/qedr/qedr_iw_cm.c            |   12 +-
 drivers/infiniband/hw/qedr/qedr_roce_cm.c          |   37 +-
 drivers/infiniband/hw/qedr/qedr_roce_cm.h          |    8 +-
 drivers/infiniband/hw/qedr/verbs.c                 |  625 +++++++++--
 drivers/infiniband/hw/qedr/verbs.h                 |   17 +-
 drivers/infiniband/hw/qib/qib_verbs.c              |    3 +-
 drivers/infiniband/hw/qib/qib_verbs.h              |    5 +-
 drivers/infiniband/hw/usnic/Kconfig                |    2 +-
 drivers/infiniband/hw/usnic/usnic_fwd.c            |    4 +-
 drivers/infiniband/hw/usnic/usnic_fwd.h            |    2 +-
 drivers/infiniband/hw/usnic/usnic_ib_verbs.c       |   10 +-
 drivers/infiniband/hw/usnic/usnic_ib_verbs.h       |    8 +-
 drivers/infiniband/hw/usnic/usnic_uiom.c           |   40 +-
 drivers/infiniband/hw/usnic/usnic_uiom.h           |    5 +-
 drivers/infiniband/hw/vmw_pvrdma/pvrdma.h          |    5 -
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c       |   26 -
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c     |   52 +-
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c       |   11 +-
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_srq.c      |    7 -
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c    |    6 +-
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h    |   15 +-
 drivers/infiniband/sw/rdmavt/ah.c                  |    4 +-
 drivers/infiniband/sw/rdmavt/qp.c                  |   27 +-
 drivers/infiniband/sw/rdmavt/qp.h                  |   12 +-
 drivers/infiniband/sw/rdmavt/srq.c                 |    2 +-
 drivers/infiniband/sw/rxe/rxe.c                    |    3 +-
 drivers/infiniband/sw/rxe/rxe_av.c                 |   30 +-
 drivers/infiniband/sw/rxe/rxe_comp.c               |    1 +
 drivers/infiniband/sw/rxe/rxe_loc.h                |    5 +-
 drivers/infiniband/sw/rxe/rxe_net.c                |   67 +-
 drivers/infiniband/sw/rxe/rxe_param.h              |    2 +-
 drivers/infiniband/sw/rxe/rxe_qp.c                 |   31 +-
 drivers/infiniband/sw/rxe/rxe_recv.c               |   24 +-
 drivers/infiniband/sw/rxe/rxe_resp.c               |    5 +
 drivers/infiniband/sw/rxe/rxe_verbs.c              |   70 +-
 drivers/infiniband/ulp/ipoib/ipoib.h               |   32 +-
 drivers/infiniband/ulp/ipoib/ipoib_cm.c            |   81 +-
 drivers/infiniband/ulp/ipoib/ipoib_ethtool.c       |    2 +-
 drivers/infiniband/ulp/ipoib/ipoib_fs.c            |    6 +-
 drivers/infiniband/ulp/ipoib/ipoib_ib.c            |   15 +-
 drivers/infiniband/ulp/ipoib/ipoib_main.c          |  444 ++++----
 drivers/infiniband/ulp/ipoib/ipoib_multicast.c     |    7 +-
 drivers/infiniband/ulp/ipoib/ipoib_netlink.c       |   23 -
 drivers/infiniband/ulp/ipoib/ipoib_verbs.c         |    8 +-
 drivers/infiniband/ulp/ipoib/ipoib_vlan.c          |  261 +++--
 drivers/infiniband/ulp/iser/iscsi_iser.c           |   16 +-
 drivers/infiniband/ulp/iser/iser_memory.c          |    5 +-
 drivers/infiniband/ulp/iser/iser_verbs.c           |   14 +-
 drivers/infiniband/ulp/isert/ib_isert.c            |   26 +-
 drivers/infiniband/ulp/srp/ib_srp.c                |   27 +-
 drivers/infiniband/ulp/srpt/ib_srpt.c              |   71 +-
 drivers/infiniband/ulp/srpt/ib_srpt.h              |    4 +-
 drivers/net/ethernet/chelsio/cxgb4/t4_msg.h        |    4 +-
 drivers/net/ethernet/mellanox/mlx5/core/cmd.c      |    5 +
 .../mellanox/mlx5/core/diag/fs_tracepoint.c        |    3 +
 drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c   |   24 +-
 drivers/net/ethernet/mellanox/mlx5/core/fs_core.c  |   81 +-
 .../net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c  |   37 +-
 drivers/nvme/host/rdma.c                           |   13 +-
 drivers/nvme/target/rdma.c                         |   13 +-
 fs/cifs/smbdirect.c                                |   32 +-
 include/linux/idr.h                                |   11 +
 include/linux/mlx5/driver.h                        |    3 -
 include/linux/mlx5/fs.h                            |    1 +
 include/linux/mlx5/mlx5_ifc.h                      |    5 +
 include/linux/overflow.h                           |   31 +
 include/rdma/ib.h                                  |    4 +-
 include/rdma/ib_addr.h                             |    6 +-
 include/rdma/ib_cache.h                            |   83 +-
 include/rdma/ib_cm.h                               |   18 +-
 include/rdma/ib_mad.h                              |   33 +
 include/rdma/ib_sa.h                               |   49 +-
 include/rdma/ib_verbs.h                            |  257 +++--
 include/rdma/opa_addr.h                            |    2 +-
 include/rdma/rdma_cm.h                             |    2 +-
 include/rdma/rdmavt_qp.h                           |   30 +-
 include/rdma/uverbs_ioctl.h                        |  627 ++++++-----
 include/rdma/uverbs_named_ioctl.h                  |  109 +-
 include/rdma/uverbs_std_types.h                    |   96 +-
 include/rdma/uverbs_types.h                        |  133 +--
 include/uapi/rdma/cxgb4-abi.h                      |   32 +-
 include/uapi/rdma/hns-abi.h                        |    1 +
 include/uapi/rdma/ib_user_ioctl_cmds.h             |    7 +-
 include/uapi/rdma/ib_user_ioctl_verbs.h            |   58 +
 include/uapi/rdma/ib_user_verbs.h                  |    5 +-
 include/uapi/rdma/mlx5-abi.h                       |    6 +-
 include/uapi/rdma/mlx5_user_ioctl_cmds.h           |  121 +++
 include/uapi/rdma/qedr-abi.h                       |   17 +
 include/uapi/rdma/rdma_user_ioctl_cmds.h           |    7 +-
 lib/test_overflow.c                                |  198 +++-
 net/9p/trans_rdma.c                                |    8 +-
 net/core/secure_seq.c                              |    1 +
 net/rds/ib.c                                       |    2 +-
 net/rds/ib_frmr.c                                  |   11 +-
 net/rds/ib_recv.c                                  |    6 +-
 net/rds/ib_send.c                                  |    6 +-
 net/smc/smc_core.c                                 |    1 +
 net/smc/smc_ib.c                                   |    1 +
 net/smc/smc_tx.c                                   |    3 +-
 net/smc/smc_wr.c                                   |    9 +-
 net/smc/smc_wr.h                                   |    3 +-
 net/sunrpc/xprtrdma/fmr_ops.c                      |    4 +-
 net/sunrpc/xprtrdma/frwr_ops.c                     |    7 +-
 net/sunrpc/xprtrdma/svc_rdma_recvfrom.c            |    3 +-
 net/sunrpc/xprtrdma/svc_rdma_rw.c                  |    3 +-
 net/sunrpc/xprtrdma/svc_rdma_sendto.c              |    3 +-
 net/sunrpc/xprtrdma/svc_rdma_transport.c           |    2 +-
 net/sunrpc/xprtrdma/verbs.c                        |    5 +-
 233 files changed, 12380 insertions(+), 7059 deletions(-)
 delete mode 100644 drivers/infiniband/core/uverbs_ioctl_merge.c
 create mode 100644 drivers/infiniband/core/uverbs_uapi.c
 create mode 100644 drivers/infiniband/hw/mlx5/devx.c
 create mode 100644 drivers/infiniband/hw/mlx5/flow.c

Merge resolution diff:

diff --cc drivers/infiniband/core/rdma_core.c
index 12e7c6c102c136,475910ffbcb680..6eb64c6f08028b
--- a/drivers/infiniband/core/rdma_core.c
+++ b/drivers/infiniband/core/rdma_core.c
@@@ -77,201 -120,19 +77,201 @@@ static int uverbs_try_lock_object(struc
  	 * concurrently, setting the counter to zero is enough for releasing
  	 * this lock.
  	 */
 -	if (!exclusive)
 +	switch (mode) {
 +	case UVERBS_LOOKUP_READ:
- 		return __atomic_add_unless(&uobj->usecnt, 1, -1) == -1 ?
+ 		return atomic_fetch_add_unless(&uobj->usecnt, 1, -1) == -1 ?
  			-EBUSY : 0;
 +	case UVERBS_LOOKUP_WRITE:
 +		/* lock is exclusive */
 +		return atomic_cmpxchg(&uobj->usecnt, 0, -1) == 0 ? 0 : -EBUSY;
 +	case UVERBS_LOOKUP_DESTROY:
 +		return 0;
 +	}
 +	return 0;
 +}
 +
 +static void assert_uverbs_usecnt(struct ib_uobject *uobj,
 +				 enum rdma_lookup_mode mode)
 +{
 +#ifdef CONFIG_LOCKDEP
 +	switch (mode) {
 +	case UVERBS_LOOKUP_READ:
 +		WARN_ON(atomic_read(&uobj->usecnt) <= 0);
 +		break;
 +	case UVERBS_LOOKUP_WRITE:
 +		WARN_ON(atomic_read(&uobj->usecnt) != -1);
 +		break;
 +	case UVERBS_LOOKUP_DESTROY:
 +		break;
 +	}
 +#endif
 +}
 +
 +/*
 + * This must be called with the hw_destroy_rwsem locked for read or write,
 + * also the uobject itself must be locked for write.
 + *
 + * Upon return the HW object is guaranteed to be destroyed.
 + *
 + * For RDMA_REMOVE_ABORT, the hw_destroy_rwsem is not required to be held,
 + * however the type's allocat_commit function cannot have been called and the
 + * uobject cannot be on the uobjects_lists
 + *
 + * For RDMA_REMOVE_DESTROY the caller shold be holding a kref (eg via
 + * rdma_lookup_get_uobject) and the object is left in a state where the caller
 + * needs to call rdma_lookup_put_uobject.
 + *
 + * For all other destroy modes this function internally unlocks the uobject
 + * and consumes the kref on the uobj.
 + */
 +static int uverbs_destroy_uobject(struct ib_uobject *uobj,
 +				  enum rdma_remove_reason reason)
 +{
 +	struct ib_uverbs_file *ufile = uobj->ufile;
 +	unsigned long flags;
 +	int ret;
 +
 +	lockdep_assert_held(&ufile->hw_destroy_rwsem);
 +	assert_uverbs_usecnt(uobj, UVERBS_LOOKUP_WRITE);
 +
 +	if (uobj->object) {
 +		ret = uobj->uapi_object->type_class->destroy_hw(uobj, reason);
 +		if (ret) {
 +			if (ib_is_destroy_retryable(ret, reason, uobj))
 +				return ret;
 +
 +			/* Nothing to be done, dangle the memory and move on */
 +			WARN(true,
 +			     "ib_uverbs: failed to remove uobject id %d, driver err=%d",
 +			     uobj->id, ret);
 +		}
 +
 +		uobj->object = NULL;
 +	}
  
 -	/* lock is either WRITE or DESTROY - should be exclusive */
 -	return atomic_cmpxchg(&uobj->usecnt, 0, -1) == 0 ? 0 : -EBUSY;
 +	if (reason == RDMA_REMOVE_ABORT) {
 +		WARN_ON(!list_empty(&uobj->list));
 +		WARN_ON(!uobj->context);
 +		uobj->uapi_object->type_class->alloc_abort(uobj);
 +	}
 +
 +	uobj->context = NULL;
 +
 +	/*
 +	 * For DESTROY the usecnt is held write locked, the caller is expected
 +	 * to put it unlock and put the object when done with it. Only DESTROY
 +	 * can remove the IDR handle.
 +	 */
 +	if (reason != RDMA_REMOVE_DESTROY)
 +		atomic_set(&uobj->usecnt, 0);
 +	else
 +		uobj->uapi_object->type_class->remove_handle(uobj);
 +
 +	if (!list_empty(&uobj->list)) {
 +		spin_lock_irqsave(&ufile->uobjects_lock, flags);
 +		list_del_init(&uobj->list);
 +		spin_unlock_irqrestore(&ufile->uobjects_lock, flags);
 +
 +		/*
 +		 * Pairs with the get in rdma_alloc_commit_uobject(), could
 +		 * destroy uobj.
 +		 */
 +		uverbs_uobject_put(uobj);
 +	}
 +
 +	/*
 +	 * When aborting the stack kref remains owned by the core code, and is
 +	 * not transferred into the type. Pairs with the get in alloc_uobj
 +	 */
 +	if (reason == RDMA_REMOVE_ABORT)
 +		uverbs_uobject_put(uobj);
 +
 +	return 0;
  }
  
 -static struct ib_uobject *alloc_uobj(struct ib_ucontext *context,
 -				     const struct uverbs_obj_type *type)
 +/*
 + * This calls uverbs_destroy_uobject() using the RDMA_REMOVE_DESTROY
 + * sequence. It should only be used from command callbacks. On success the
 + * caller must pair this with rdma_lookup_put_uobject(LOOKUP_WRITE). This
 + * version requires the caller to have already obtained an
 + * LOOKUP_DESTROY uobject kref.
 + */
 +int uobj_destroy(struct ib_uobject *uobj)
  {
 -	struct ib_uobject *uobj = kzalloc(type->obj_size, GFP_KERNEL);
 +	struct ib_uverbs_file *ufile = uobj->ufile;
 +	int ret;
 +
 +	down_read(&ufile->hw_destroy_rwsem);
 +
 +	ret = uverbs_try_lock_object(uobj, UVERBS_LOOKUP_WRITE);
 +	if (ret)
 +		goto out_unlock;
 +
 +	ret = uverbs_destroy_uobject(uobj, RDMA_REMOVE_DESTROY);
 +	if (ret) {
 +		atomic_set(&uobj->usecnt, 0);
 +		goto out_unlock;
 +	}
  
 +out_unlock:
 +	up_read(&ufile->hw_destroy_rwsem);
 +	return ret;
 +}
 +
 +/*
 + * uobj_get_destroy destroys the HW object and returns a handle to the uobj
 + * with a NULL object pointer. The caller must pair this with
 + * uverbs_put_destroy.
 + */
 +struct ib_uobject *__uobj_get_destroy(const struct uverbs_api_object *obj,
 +				      u32 id, struct ib_uverbs_file *ufile)
 +{
 +	struct ib_uobject *uobj;
 +	int ret;
 +
 +	uobj = rdma_lookup_get_uobject(obj, ufile, id, UVERBS_LOOKUP_DESTROY);
 +	if (IS_ERR(uobj))
 +		return uobj;
 +
 +	ret = uobj_destroy(uobj);
 +	if (ret) {
 +		rdma_lookup_put_uobject(uobj, UVERBS_LOOKUP_DESTROY);
 +		return ERR_PTR(ret);
 +	}
 +
 +	return uobj;
 +}
 +
 +/*
 + * Does both uobj_get_destroy() and uobj_put_destroy().  Returns success_res
 + * on success (negative errno on failure). For use by callers that do not need
 + * the uobj.
 + */
 +int __uobj_perform_destroy(const struct uverbs_api_object *obj, u32 id,
 +			   struct ib_uverbs_file *ufile, int success_res)
 +{
 +	struct ib_uobject *uobj;
 +
 +	uobj = __uobj_get_destroy(obj, id, ufile);
 +	if (IS_ERR(uobj))
 +		return PTR_ERR(uobj);
 +
 +	rdma_lookup_put_uobject(uobj, UVERBS_LOOKUP_WRITE);
 +	return success_res;
 +}
 +
 +/* alloc_uobj must be undone by uverbs_destroy_uobject() */
 +static struct ib_uobject *alloc_uobj(struct ib_uverbs_file *ufile,
 +				     const struct uverbs_api_object *obj)
 +{
 +	struct ib_uobject *uobj;
 +	struct ib_ucontext *ucontext;
 +
 +	ucontext = ib_uverbs_get_ucontext(ufile);
 +	if (IS_ERR(ucontext))
 +		return ERR_CAST(ucontext);
 +
 +	uobj = kzalloc(obj->type_attrs->obj_size, GFP_KERNEL);
  	if (!uobj)
  		return ERR_PTR(-ENOMEM);
  	/*
diff --cc drivers/nvme/host/rdma.c
index 72e8e8e7d2d7cd,0805fa6215eefb..dc042017c293ad
--- a/drivers/nvme/host/rdma.c
+++ b/drivers/nvme/host/rdma.c
@@@ -374,6 -377,8 +377,8 @@@ nvme_rdma_find_get_device(struct rdma_c
  		goto out_free_pd;
  	}
  
+ 	ndev->num_inline_segments = min(NVME_RDMA_MAX_INLINE_SEGMENTS,
 -					ndev->dev->attrs.max_sge - 1);
++					ndev->dev->attrs.max_send_sge - 1);
  	list_add(&ndev->entry, &device_list);
  out_unlock:
  	mutex_unlock(&device_list_mutex);
diff --cc drivers/nvme/target/rdma.c
index 1a642e214a4ce2,e7f43d1e17797f..3533e918ea376b
--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@@ -382,13 -435,22 +435,21 @@@ static void nvmet_rdma_free_rsps(struc
  static int nvmet_rdma_post_recv(struct nvmet_rdma_device *ndev,
  		struct nvmet_rdma_cmd *cmd)
  {
 -	struct ib_recv_wr *bad_wr;
+ 	int ret;
+ 
  	ib_dma_sync_single_for_device(ndev->device,
  		cmd->sge[0].addr, cmd->sge[0].length,
  		DMA_FROM_DEVICE);
  
  	if (ndev->srq)
- 		return ib_post_srq_recv(ndev->srq, &cmd->wr, NULL);
- 	return ib_post_recv(cmd->queue->cm_id->qp, &cmd->wr, NULL);
 -		ret = ib_post_srq_recv(ndev->srq, &cmd->wr, &bad_wr);
++		ret = ib_post_srq_recv(ndev->srq, &cmd->wr, NULL);
+ 	else
 -		ret = ib_post_recv(cmd->queue->cm_id->qp, &cmd->wr, &bad_wr);
++		ret = ib_post_recv(cmd->queue->cm_id->qp, &cmd->wr, NULL);
+ 
+ 	if (unlikely(ret))
+ 		pr_err("post_recv cmd failed\n");
+ 
+ 	return ret;
  }
  
  static void nvmet_rdma_process_wr_wait_list(struct nvmet_rdma_queue *queue)
@@@ -491,7 -553,7 +552,7 @@@ static void nvmet_rdma_queue_response(s
  		rsp->send_sge.addr, rsp->send_sge.length,
  		DMA_TO_DEVICE);
  
- 	if (ib_post_send(cm_id->qp, first_wr, NULL)) {
 -	if (unlikely(ib_post_send(cm_id->qp, first_wr, &bad_wr))) {
++	if (unlikely(ib_post_send(cm_id->qp, first_wr, NULL))) {
  		pr_err("sending cmd response failed\n");
  		nvmet_rdma_release_rsp(rsp);
  	}
@@@ -805,6 -890,18 +889,18 @@@ nvmet_rdma_find_get_device(struct rdma_
  	if (!ndev)
  		goto out_err;
  
+ 	inline_page_count = num_pages(port->inline_data_size);
+ 	inline_sge_count = max(cm_id->device->attrs.max_sge_rd,
 -				cm_id->device->attrs.max_sge) - 1;
++				cm_id->device->attrs.max_recv_sge) - 1;
+ 	if (inline_page_count > inline_sge_count) {
+ 		pr_warn("inline_data_size %d cannot be supported by device %s. Reducing to %lu.\n",
+ 			port->inline_data_size, cm_id->device->name,
+ 			inline_sge_count * PAGE_SIZE);
+ 		port->inline_data_size = inline_sge_count * PAGE_SIZE;
+ 		inline_page_count = inline_sge_count;
+ 	}
+ 	ndev->inline_data_size = port->inline_data_size;
+ 	ndev->inline_page_count = inline_page_count;
  	ndev->device = cm_id->device;
  	kref_init(&ndev->ref);
  
diff --cc net/rds/ib_recv.c
index 4c5a937304b274,d300186b8dc020..2f16146e4ec94e
--- a/net/rds/ib_recv.c
+++ b/net/rds/ib_recv.c
@@@ -416,10 -415,10 +414,10 @@@ void rds_ib_recv_refill(struct rds_conn
  				&recv->r_frag->f_sg));
  
  		/* XXX when can this fail? */
 -		ret = ib_post_recv(ic->i_cm_id->qp, &recv->r_wr, &failed_wr);
 +		ret = ib_post_recv(ic->i_cm_id->qp, &recv->r_wr, NULL);
  		if (ret) {
  			rds_ib_conn_error(conn, "recv post on "
- 			       "%pI4 returned %d, disconnecting and "
+ 			       "%pI6c returned %d, disconnecting and "
  			       "reconnecting\n", &conn->c_faddr,
  			       ret);
  			break;
diff --cc net/rds/ib_send.c
index 8ac80c1b051e1a,c8dd3125d39877..2dcb555e6350d1
--- a/net/rds/ib_send.c
+++ b/net/rds/ib_send.c
@@@ -758,8 -758,7 +758,7 @@@ int rds_ib_xmit_atomic(struct rds_conne
  {
  	struct rds_ib_connection *ic = conn->c_transport_data;
  	struct rds_ib_send_work *send = NULL;
 -	struct ib_send_wr *failed_wr;
 +	const struct ib_send_wr *failed_wr;
- 	struct rds_ib_device *rds_ibdev;
  	u32 pos;
  	u32 work_alloc;
  	int ret;
diff --cc net/smc/smc_wr.c
index de1a438cf9773f,f856b8402b3fe5..3c458d27985574
--- a/net/smc/smc_wr.c
+++ b/net/smc/smc_wr.c
@@@ -246,14 -239,11 +238,10 @@@ int smc_wr_tx_send(struct smc_link *lin
  	ib_req_notify_cq(link->smcibdev->roce_cq_send,
  			 IB_CQ_NEXT_COMP | IB_CQ_REPORT_MISSED_EVENTS);
  	pend = container_of(priv, struct smc_wr_tx_pend, priv);
 -	rc = ib_post_send(link->roce_qp, &link->wr_tx_ibs[pend->idx],
 -			  &failed_wr);
 +	rc = ib_post_send(link->roce_qp, &link->wr_tx_ibs[pend->idx], NULL);
  	if (rc) {
- 		struct smc_link_group *lgr =
- 			container_of(link, struct smc_link_group,
- 				     lnk[SMC_SINGLE_LINK]);
- 
  		smc_wr_tx_put_slot(link, priv);
- 		smc_lgr_terminate(lgr);
+ 		smc_lgr_terminate(smc_get_lgr(link));
  	}
  	return rc;
  }

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux