CC: kbuild-...@lists.01.org
TO: Jason Gunthorpe <j...@mellanox.com>
CC: Leon Romanovsky <leo...@nvidia.com>
CC: Yishai Hadas <yish...@mellanox.com>
CC: Feras Daoud <fera...@mellanox.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git 
rdma-next
head:   fb60ce5917ddd769e17552ae421d056c0bb151a5
commit: 4e8a381066e9ae0c1f958fc879151012e9fb7f82 [8/76] RDMA/core: Introduce 
peer memory interface
:::::: branch date: 23 hours ago
:::::: commit date: 24 hours ago
config: i386-randconfig-m021-20200911 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

smatch warnings:
drivers/infiniband/core/umem.c:263 __ib_umem_get() warn: impossible condition 
'(npages > (~0)) => (0-u32max > u32max)'

# 
https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git/commit/?id=4e8a381066e9ae0c1f958fc879151012e9fb7f82
git remote add leon-rdma 
https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git
git fetch --no-tags leon-rdma rdma-next
git checkout 4e8a381066e9ae0c1f958fc879151012e9fb7f82
vim +263 drivers/infiniband/core/umem.c

4a35339958f16d drivers/infiniband/core/umem.c       Shiraz Saleem    2019-05-06 
 201  
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 202  /**
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 203   * __ib_umem_get - Pin and DMA map userspace memory.
8ada2c1c0c1d75 drivers/infiniband/core/umem.c       Shachar Raindel  2014-12-11 
 204   *
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua       2020-01-15 
 205   * @device: IB device to connect UMEM
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 206   * @addr: userspace virtual address to start at
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 207   * @size: length of region to pin
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 208   * @access: IB_ACCESS_xxx flags for memory being pinned
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 209   * @peer_mem_flags: IB_PEER_MEM_xxx flags for memory being used
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 210   */
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 211  static struct ib_umem *__ib_umem_get(struct ib_device *device,
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 212                                unsigned long addr, size_t size, int access,
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 213                                unsigned long peer_mem_flags)
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 214  {
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 215    struct ib_umem *umem;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 216    struct page **page_list;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 217    unsigned long lock_limit;
c6ce580716372d drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 218    unsigned long new_pinned;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 219    unsigned long cur_base;
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 220    unsigned long dma_attr = 0;
d4b4dd1b9706e4 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 221    struct mm_struct *mm;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 222    unsigned long npages;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 223    int ret;
d10bcf947a3ea2 drivers/infiniband/core/umem.c       Shiraz Saleem    2019-04-02 
 224    struct scatterlist *sg;
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 225    unsigned int gup_flags = FOLL_WRITE;
cb9fbc5c37b69a drivers/infiniband/core/umem.c       Arthur Kepner    2008-04-29 
 226  
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 227    /*
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 228     * If the combination of the addr and size requested for this memory
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 229     * region causes an integer overflow, return error.
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 230     */
66578b0b2f6965 drivers/infiniband/core/umem.c       Yann Droneaud    2015-04-13 
 231    if (((addr + size) < addr) ||
66578b0b2f6965 drivers/infiniband/core/umem.c       Yann Droneaud    2015-04-13 
 232        PAGE_ALIGN(addr + size) < (addr + size))
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 233            return ERR_PTR(-EINVAL);
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 234  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 235    if (!can_do_mlock())
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 236            return ERR_PTR(-EPERM);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 237  
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe  2019-08-19 
 238    if (access & IB_ACCESS_ON_DEMAND)
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe  2019-08-19 
 239            return ERR_PTR(-EOPNOTSUPP);
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe  2019-08-19 
 240  
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 241    umem = kzalloc(sizeof(*umem), GFP_KERNEL);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 242    if (!umem)
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 243            return ERR_PTR(-ENOMEM);
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua       2020-01-15 
 244    umem->ibdev      = device;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 245    umem->length     = size;
406f9e5fa9a7a6 drivers/infiniband/core/umem.c       Haggai Eran      2014-12-11 
 246    umem->address    = addr;
22939bfaf377fb drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 247    /*
22939bfaf377fb drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 248     * Drivers should call ib_umem_find_best_pgsz() to set the iova
22939bfaf377fb drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 249     * correctly.
22939bfaf377fb drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 250     */
22939bfaf377fb drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 251    umem->iova = addr;
08bb558ac11ab9 drivers/infiniband/core/umem.c       Jack Morgenstein 2018-05-23 
 252    umem->writable   = ib_access_writable(access);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 253    umem->owning_mm = mm = current->mm;
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 254    mmgrab(mm);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 255  
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 256    page_list = (struct page **) __get_free_page(GFP_KERNEL);
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 257    if (!page_list) {
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 258            ret = -ENOMEM;
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 259            goto umem_kfree;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 260    }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 261  
406f9e5fa9a7a6 drivers/infiniband/core/umem.c       Haggai Eran      2014-12-11 
 262    npages = ib_umem_num_pages(umem);
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
@263    if (npages == 0 || npages > UINT_MAX) {
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 264            ret = -EINVAL;
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 265            goto out;
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 266    }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 267  
ccbe9f0b11b137 drivers/infiniband/core/umem.c       Jiri Slaby       2010-02-11 
 268    lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 269  
b95df5e3e45914 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 270    new_pinned = atomic64_add_return(npages, &mm->pinned_vm);
70f8a3ca68d3e1 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 271    if (new_pinned > lock_limit && !capable(CAP_IPC_LOCK)) {
b95df5e3e45914 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 272            atomic64_sub(npages, &mm->pinned_vm);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 273            ret = -ENOMEM;
c6ce580716372d drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 274            goto out;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 275    }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 276  
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 277    cur_base = addr & PAGE_MASK;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 278  
eeb8461e36c99f drivers/infiniband/core/umem.c       Yishai Hadas     2014-01-28 
 279    ret = sg_alloc_table(&umem->sg_head, npages, GFP_KERNEL);
eeb8461e36c99f drivers/infiniband/core/umem.c       Yishai Hadas     2014-01-28 
 280    if (ret)
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 281            goto vma;
eeb8461e36c99f drivers/infiniband/core/umem.c       Yishai Hadas     2014-01-28 
 282  
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 283    if (!umem->writable)
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 284            gup_flags |= FOLL_FORCE;
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 285  
d10bcf947a3ea2 drivers/infiniband/core/umem.c       Shiraz Saleem    2019-04-02 
 286    sg = umem->sg_head.sgl;
eeb8461e36c99f drivers/infiniband/core/umem.c       Yishai Hadas     2014-01-28 
 287  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 288    while (npages) {
928da37a229f34 drivers/infiniband/core/umem.c       Eric Dumazet     2020-07-29 
 289            cond_resched();
dfa0a4fff11b32 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 290            ret = pin_user_pages_fast(cur_base,
8079ffa0e18baa drivers/infiniband/core/umem.c       Roland Dreier    2008-06-06 
 291                                      min_t(unsigned long, npages,
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 292                                            PAGE_SIZE /
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 293                                            sizeof(struct page *)),
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 294                                      gup_flags | FOLL_LONGTERM, page_list);
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 295            if (ret < 0)
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 296                    goto umem_release;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 297  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 298            cur_base += ret * PAGE_SIZE;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 299            npages   -= ret;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 300  
d10bcf947a3ea2 drivers/infiniband/core/umem.c       Shiraz Saleem    2019-04-02 
 301            sg = ib_umem_add_sg_table(sg, page_list, ret,
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua       2020-01-15 
 302                    dma_get_max_seg_size(device->dma_device),
d10bcf947a3ea2 drivers/infiniband/core/umem.c       Shiraz Saleem    2019-04-02 
 303                    &umem->sg_nents);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 304    }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 305  
d10bcf947a3ea2 drivers/infiniband/core/umem.c       Shiraz Saleem    2019-04-02 
 306    sg_mark_end(sg);
d10bcf947a3ea2 drivers/infiniband/core/umem.c       Shiraz Saleem    2019-04-02 
 307  
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 308    if (access & IB_ACCESS_RELAXED_ORDERING)
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 309            dma_attr |= DMA_ATTR_WEAK_ORDERING;
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 310  
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 311    umem->nmap =
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 312            ib_dma_map_sg_attrs(device, umem->sg_head.sgl, umem->sg_nents,
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 313                                DMA_BIDIRECTIONAL, dma_attr);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 314  
3a2e791c9456aa drivers/infiniband/core/umem.c       Leon Romanovsky  2018-06-24 
 315    if (!umem->nmap) {
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 316            ret = -ENOMEM;
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 317            goto umem_release;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 318    }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 319  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 320    ret = 0;
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 321    goto out;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 322  
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 323  umem_release:
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua       2020-01-15 
 324    __ib_umem_release(device, umem, 0);
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 325  vma:
70f8a3ca68d3e1 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 326    atomic64_sub(ib_umem_num_pages(umem), &mm->pinned_vm);
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 327  out:
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 328    free_page((unsigned long) page_list);
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 329    /*
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 330     * If the address belongs to peer memory client, then the first
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 331     * call to get_user_pages will fail. In this case, try to get
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 332     * these pages from the peers.
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 333     */
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 334    //FIXME: this placement is horrible
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 335    if (ret < 0 && peer_mem_flags & IB_PEER_MEM_ALLOW) {
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 336            struct ib_umem *new_umem;
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 337  
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 338            new_umem = ib_peer_umem_get(umem, ret, peer_mem_flags);
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 339            if (IS_ERR(new_umem)) {
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 340                    ret = PTR_ERR(new_umem);
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 341            } else {
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 342                    umem = new_umem;
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 343                    ret = 0;
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 344            }
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 345    }
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 346  umem_kfree:
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 347    if (ret) {
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 348            mmdrop(umem->owning_mm);
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 349            kfree(umem);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 350    }
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 351    return ret ? ERR_PTR(ret) : umem;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 352  }
4e8a381066e9ae drivers/infiniband/core/umem.c       Jason Gunthorpe  2016-10-27 
 353  

:::::: The code at line 263 was first introduced by commit
:::::: 3312d1c6bdee6aa912c099c0ac0662d197c52842 RDMA/umem: Minor optimizations

:::::: TO: Doug Ledford <dledf...@redhat.com>
:::::: CC: Jason Gunthorpe <j...@mellanox.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to