Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 17 Oct 2020 18:18:18 +0000 (11:18 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 17 Oct 2020 18:18:18 +0000 (11:18 -0700)
Pull rdma updates from Jason Gunthorpe:
 "A usual cycle for RDMA with a typical mix of driver and core subsystem
  updates:

   - Driver minor changes and bug fixes for mlx5, efa, rxe, vmw_pvrdma,
     hns, usnic, qib, qedr, cxgb4, hns, bnxt_re

   - Various rtrs fixes and updates

   - Bug fix for mlx4 CM emulation for virtualization scenarios where
     MRA wasn't working right

   - Use tracepoints instead of pr_debug in the CM code

   - Scrub the locking in ucma and cma to close more syzkaller bugs

   - Use tasklet_setup in the subsystem

   - Revert the idea that 'destroy' operations are not allowed to fail
     at the driver level. This proved unworkable from a HW perspective.

   - Revise how the umem API works so drivers make fewer mistakes using
     it

   - XRC support for qedr

   - Convert uverbs objects RWQ and MW to new the allocation scheme

   - Large queue entry sizes for hns

   - Use hmm_range_fault() for mlx5 On Demand Paging

   - uverbs APIs to inspect the GID table instead of sysfs

   - Move some of the RDMA code for building large page SGLs into
     lib/scatterlist"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (191 commits)
  RDMA/ucma: Fix use after free in destroy id flow
  RDMA/rxe: Handle skb_clone() failure in rxe_recv.c
  RDMA/rxe: Move the definitions for rxe_av.network_type to uAPI
  RDMA: Explicitly pass in the dma_device to ib_register_device
  lib/scatterlist: Do not limit max_segment to PAGE_ALIGNED values
  IB/mlx4: Convert rej_tmout radix-tree to XArray
  RDMA/rxe: Fix bug rejecting all multicast packets
  RDMA/rxe: Fix skb lifetime in rxe_rcv_mcast_pkt()
  RDMA/rxe: Remove duplicate entries in struct rxe_mr
  IB/hfi,rdmavt,qib,opa_vnic: Update MAINTAINERS
  IB/rdmavt: Fix sizeof mismatch
  MAINTAINERS: CISCO VIC LOW LATENCY NIC DRIVER
  RDMA/bnxt_re: Fix sizeof mismatch for allocation of pbl_tbl.
  RDMA/bnxt_re: Use rdma_umem_for_each_dma_block()
  RDMA/umem: Move to allocate SG table from pages
  lib/scatterlist: Add support in dynamic allocation of SG table from pages
  tools/testing/scatterlist: Show errors in human readable form
  tools/testing/scatterlist: Rejuvenate bit-rotten test
  RDMA/ipoib: Set rtnl_link_ops for ipoib interfaces
  RDMA/uverbs: Expose the new GID query API to user space
  ...

1  2 
.clang-format
MAINTAINERS
drivers/gpu/drm/drm_prime.c
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
drivers/infiniband/core/cache.c
drivers/infiniband/core/cma.c
drivers/infiniband/core/uverbs_main.c
drivers/infiniband/ulp/ipoib/ipoib_main.c
drivers/net/ethernet/qlogic/qed/qed_rdma.c
include/linux/overflow.h
lib/scatterlist.c

diff --cc .clang-format
Simple merge
diff --cc MAINTAINERS
Simple merge
@@@ -803,33 -802,26 +803,30 @@@ static const struct dma_buf_ops drm_gem
   *
   * This is useful for implementing &drm_gem_object_funcs.get_sg_table.
   */
 -struct sg_table *drm_prime_pages_to_sg(struct page **pages, unsigned int nr_pages)
 +struct sg_table *drm_prime_pages_to_sg(struct drm_device *dev,
 +                                     struct page **pages, unsigned int nr_pages)
  {
--      struct sg_table *sg = NULL;
 -      int ret;
++      struct sg_table *sg;
++      struct scatterlist *sge;
 +      size_t max_segment = 0;
-       int ret;
  
        sg = kmalloc(sizeof(struct sg_table), GFP_KERNEL);
--      if (!sg) {
--              ret = -ENOMEM;
--              goto out;
-       }
++      if (!sg)
++              return ERR_PTR(-ENOMEM);
 +
 +      if (dev)
 +              max_segment = dma_max_mapping_size(dev->dev);
 +      if (max_segment == 0 || max_segment > SCATTERLIST_MAX_SEGMENT)
 +              max_segment = SCATTERLIST_MAX_SEGMENT;
-       ret = __sg_alloc_table_from_pages(sg, pages, nr_pages, 0,
++      sge = __sg_alloc_table_from_pages(sg, pages, nr_pages, 0,
 +                                        nr_pages << PAGE_SHIFT,
-                                         max_segment, GFP_KERNEL);
-       if (ret)
-               goto out;
++                                        max_segment,
++                                        NULL, 0, GFP_KERNEL);
++      if (IS_ERR(sge)) {
++              kfree(sg);
++              sg = ERR_CAST(sge);
+       }
 -
 -      ret = sg_alloc_table_from_pages(sg, pages, nr_pages, 0,
 -                              nr_pages << PAGE_SHIFT, GFP_KERNEL);
 -      if (ret)
 -              goto out;
 -
        return sg;
--out:
--      kfree(sg);
--      return ERR_PTR(ret);
  }
  EXPORT_SYMBOL(drm_prime_pages_to_sg);
  
@@@ -454,18 -442,20 +455,20 @@@ static int vmw_ttm_map_dma(struct vmw_t
                if (unlikely(ret != 0))
                        return ret;
  
-               ret = __sg_alloc_table_from_pages
-                       (&vmw_tt->sgt, vsgt->pages, vsgt->num_pages, 0,
-                        (unsigned long) vsgt->num_pages << PAGE_SHIFT,
-                        dma_get_max_seg_size(dev_priv->dev->dev),
-                        GFP_KERNEL);
-               if (unlikely(ret != 0))
+               sg = __sg_alloc_table_from_pages(&vmw_tt->sgt, vsgt->pages,
+                               vsgt->num_pages, 0,
+                               (unsigned long) vsgt->num_pages << PAGE_SHIFT,
+                               dma_get_max_seg_size(dev_priv->dev->dev),
+                               NULL, 0, GFP_KERNEL);
+               if (IS_ERR(sg)) {
+                       ret = PTR_ERR(sg);
                        goto out_sg_alloc_fail;
+               }
  
 -              if (vsgt->num_pages > vmw_tt->sgt.nents) {
 +              if (vsgt->num_pages > vmw_tt->sgt.orig_nents) {
                        uint64_t over_alloc =
                                sgl_size * (vsgt->num_pages -
 -                                          vmw_tt->sgt.nents);
 +                                          vmw_tt->sgt.orig_nents);
  
                        ttm_mem_global_free(glob, over_alloc);
                        vmw_tt->sg_alloc_size -= over_alloc;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge