CC: [email protected]
CC: [email protected]
TO: Jason Gunthorpe <[email protected]>
CC: Leon Romanovsky <[email protected]>
CC: Yishai Hadas <[email protected]>
CC: Feras Daoud <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git 
rdma-next
head:   659c776c82b14003666c91799ac3a6a3c4fb3665
commit: bc623e553908107bb16bef04bbe4b2469001fc9a [10/16] RDMA/core: Introduce 
peer memory interface
:::::: branch date: 24 hours ago
:::::: commit date: 25 hours ago
config: i386-randconfig-m021-20220131 
(https://download.01.org/0day-ci/archive/20220131/[email protected]/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

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

vim +201 drivers/infiniband/core/umem.c

4a35339958f16d drivers/infiniband/core/umem.c       Shiraz Saleem    2019-05-06 
 140  
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 141  /**
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 142   * __ib_umem_get - Pin and DMA map userspace memory.
8ada2c1c0c1d75 drivers/infiniband/core/umem.c       Shachar Raindel  2014-12-11 
 143   *
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua       2020-01-15 
 144   * @device: IB device to connect UMEM
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 145   * @addr: userspace virtual address to start at
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 146   * @size: length of region to pin
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 147   * @access: IB_ACCESS_xxx flags for memory being pinned
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 148   * @peer_mem_flags: IB_PEER_MEM_xxx flags for memory being used
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 149   */
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 150  static struct ib_umem *__ib_umem_get(struct ib_device *device,
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 151                                unsigned long addr, size_t size, int access,
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 152                                unsigned long peer_mem_flags)
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 153  {
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 154    struct ib_umem *umem;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 155    struct page **page_list;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 156    unsigned long lock_limit;
c6ce580716372d drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 157    unsigned long new_pinned;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 158    unsigned long cur_base;
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 159    unsigned long dma_attr = 0;
d4b4dd1b9706e4 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 160    struct mm_struct *mm;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 161    unsigned long npages;
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 162    int pinned, ret;
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 163    unsigned int gup_flags = FOLL_WRITE;
cb9fbc5c37b69a drivers/infiniband/core/umem.c       Arthur Kepner    2008-04-29 
 164  
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 165    /*
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 166     * If the combination of the addr and size requested for this memory
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 167     * region causes an integer overflow, return error.
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 168     */
66578b0b2f6965 drivers/infiniband/core/umem.c       Yann Droneaud    2015-04-13 
 169    if (((addr + size) < addr) ||
66578b0b2f6965 drivers/infiniband/core/umem.c       Yann Droneaud    2015-04-13 
 170        PAGE_ALIGN(addr + size) < (addr + size))
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 171            return ERR_PTR(-EINVAL);
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel  2015-03-18 
 172  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 173    if (!can_do_mlock())
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 174            return ERR_PTR(-EPERM);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 175  
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe  2019-08-19 
 176    if (access & IB_ACCESS_ON_DEMAND)
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe  2019-08-19 
 177            return ERR_PTR(-EOPNOTSUPP);
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe  2019-08-19 
 178  
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 179    umem = kzalloc(sizeof(*umem), GFP_KERNEL);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 180    if (!umem)
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 181            return ERR_PTR(-ENOMEM);
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua       2020-01-15 
 182    umem->ibdev      = device;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 183    umem->length     = size;
406f9e5fa9a7a6 drivers/infiniband/core/umem.c       Haggai Eran      2014-12-11 
 184    umem->address    = addr;
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 185    /*
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 186     * Drivers should call ib_umem_find_best_pgsz() to set the iova
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 187     * correctly.
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 188     */
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-09-04 
 189    umem->iova = addr;
08bb558ac11ab9 drivers/infiniband/core/umem.c       Jack Morgenstein 2018-05-23 
 190    umem->writable   = ib_access_writable(access);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 191    umem->owning_mm = mm = current->mm;
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 192    mmgrab(mm);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 193  
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 194    page_list = (struct page **) __get_free_page(GFP_KERNEL);
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 195    if (!page_list) {
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 196            ret = -ENOMEM;
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 197            goto umem_kfree;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier    2007-03-04 
 198    }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 199  
406f9e5fa9a7a6 drivers/infiniband/core/umem.c       Haggai Eran      2014-12-11 
 200    npages = ib_umem_num_pages(umem);
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
@201    if (npages == 0 || npages > UINT_MAX) {
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 202            ret = -EINVAL;
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 203            goto out;
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 204    }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 205  
ccbe9f0b11b137 drivers/infiniband/core/umem.c       Jiri Slaby       2010-02-11 
 206    lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 207  
b95df5e3e45914 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 208    new_pinned = atomic64_add_return(npages, &mm->pinned_vm);
70f8a3ca68d3e1 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 209    if (new_pinned > lock_limit && !capable(CAP_IPC_LOCK)) {
b95df5e3e45914 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 210            atomic64_sub(npages, &mm->pinned_vm);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 211            ret = -ENOMEM;
c6ce580716372d drivers/infiniband/core/umem.c       Doug Ledford     2018-09-21 
 212            goto out;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 213    }
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    cur_base = addr & PAGE_MASK;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 216  
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 217    if (!umem->writable)
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 218            gup_flags |= FOLL_FORCE;
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes  2016-10-13 
 219  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 220    while (npages) {
928da37a229f34 drivers/infiniband/core/umem.c       Eric Dumazet     2020-07-29 
 221            cond_resched();
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 222            pinned = pin_user_pages_fast(cur_base,
8079ffa0e18baa drivers/infiniband/core/umem.c       Roland Dreier    2008-06-06 
 223                                      min_t(unsigned long, npages,
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 224                                            PAGE_SIZE /
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 225                                            sizeof(struct page *)),
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard     2020-01-30 
 226                                      gup_flags | FOLL_LONGTERM, page_list);
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 227            if (pinned < 0) {
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 228                    ret = pinned;
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 229                    goto umem_release;
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 230            }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 231  
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 232            cur_base += pinned * PAGE_SIZE;
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 233            npages -= pinned;
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 234            ret = sg_alloc_append_table_from_pages(
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 235                    &umem->sgt_append, page_list, pinned, 0,
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 236                    pinned << PAGE_SHIFT, ib_dma_max_seg_size(device),
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 237                    npages, GFP_KERNEL);
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 238            if (ret) {
3e302dbc6774a2 drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 239                    unpin_user_pages_dirty_lock(page_list, pinned, 0);
0c16d9635e3a51 drivers/infiniband/core/umem.c       Maor Gottlieb    2020-10-04 
 240                    goto umem_release;
0c16d9635e3a51 drivers/infiniband/core/umem.c       Maor Gottlieb    2020-10-04 
 241            }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 242    }
d10bcf947a3ea2 drivers/infiniband/core/umem.c       Shiraz Saleem    2019-04-02 
 243  
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 244    if (access & IB_ACCESS_RELAXED_ORDERING)
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 245            dma_attr |= DMA_ATTR_WEAK_ORDERING;
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 246  
79fbd3e1241cea drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 247    ret = ib_dma_map_sgtable_attrs(device, &umem->sgt_append.sgt,
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik 2020-02-12 
 248                                   DMA_BIDIRECTIONAL, dma_attr);
79fbd3e1241cea drivers/infiniband/core/umem.c       Maor Gottlieb    2021-08-24 
 249    if (ret)
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 250            goto umem_release;
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 251    goto out;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 252  
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 253  umem_release:
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua       2020-01-15 
 254    __ib_umem_release(device, umem, 0);
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 255  
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 256    /*
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 257     * If the address belongs to peer memory client, then the first
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 258     * call to get_user_pages will fail. In this case, try to get
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 259     * these pages from the peers.
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 260     */
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 261    //FIXME: this placement is horrible
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 262    if (ret < 0 && peer_mem_flags & IB_PEER_MEM_ALLOW) {
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 263            struct ib_umem *new_umem;
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 264  
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 265            new_umem = ib_peer_umem_get(umem, ret, peer_mem_flags);
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 266            if (IS_ERR(new_umem)) {
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 267                    ret = PTR_ERR(new_umem);
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 268                    goto vma;
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 269            }
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 270            umem = new_umem;
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 271            ret = 0;
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 272            goto out;
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 273    }
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 274  vma:
70f8a3ca68d3e1 drivers/infiniband/core/umem.c       Davidlohr Bueso  2019-02-06 
 275    atomic64_sub(ib_umem_num_pages(umem), &mm->pinned_vm);
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 276  out:
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 277    free_page((unsigned long) page_list);
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 278  umem_kfree:
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 279    if (ret) {
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 280            mmdrop(umem->owning_mm);
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 281            kfree(umem);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe  2018-09-16 
 282    }
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky  2018-07-10 
 283    return ret ? ERR_PTR(ret) : umem;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier    2005-07-07 
 284  }
bc623e55390810 drivers/infiniband/core/umem.c       Jason Gunthorpe  2020-11-26 
 285  

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

:::::: TO: Doug Ledford <[email protected]>
:::::: CC: Jason Gunthorpe <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to