CC: kbuild-...@lists.01.org
TO: Jason Gunthorpe <j...@nvidia.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:   9aa4d07c314b94ec7d9eb07314390cf25cfba7cb
commit: 901df51c1d3850ad03572057b42395842ebf802a [6/20] RDMA/core: Introduce 
peer memory interface
:::::: branch date: 20 hours ago
:::::: commit date: 21 hours ago
config: i386-randconfig-m021-20210622 (attached as .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 <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

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

vim +202 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  /**
901df51c1d3850 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
901df51c1d3850 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   */
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  150  static struct ib_umem *__ib_umem_get(struct ib_device *device,
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  151                               unsigned long addr, size_t size, 
int access,
901df51c1d3850 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;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier     
2007-03-04  162   int ret;
0c16d9635e3a51 drivers/infiniband/core/umem.c       Maor Gottlieb     
2020-10-04  163   struct scatterlist *sg = NULL;
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes   
2016-10-13  164   unsigned int gup_flags = FOLL_WRITE;
cb9fbc5c37b69a drivers/infiniband/core/umem.c       Arthur Kepner     
2008-04-29  165  
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel   
2015-03-18  166   /*
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel   
2015-03-18  167    * If the combination of the addr and size requested for this 
memory
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel   
2015-03-18  168    * region causes an integer overflow, return error.
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel   
2015-03-18  169    */
66578b0b2f6965 drivers/infiniband/core/umem.c       Yann Droneaud     
2015-04-13  170   if (((addr + size) < addr) ||
66578b0b2f6965 drivers/infiniband/core/umem.c       Yann Droneaud     
2015-04-13  171       PAGE_ALIGN(addr + size) < (addr + size))
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel   
2015-03-18  172           return ERR_PTR(-EINVAL);
8494057ab5e40d drivers/infiniband/core/umem.c       Shachar Raindel   
2015-03-18  173  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  174   if (!can_do_mlock())
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier     
2007-03-04  175           return ERR_PTR(-EPERM);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  176  
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2019-08-19  177   if (access & IB_ACCESS_ON_DEMAND)
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2019-08-19  178           return ERR_PTR(-EOPNOTSUPP);
261dc53f8ee037 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2019-08-19  179  
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2018-09-16  180   umem = kzalloc(sizeof(*umem), GFP_KERNEL);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2018-09-16  181   if (!umem)
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2018-09-16  182           return ERR_PTR(-ENOMEM);
c320e527e15483 drivers/infiniband/core/umem.c       Moni Shoua        
2020-01-15  183   umem->ibdev      = device;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier     
2007-03-04  184   umem->length     = size;
406f9e5fa9a7a6 drivers/infiniband/core/umem.c       Haggai Eran       
2014-12-11  185   umem->address    = addr;
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-09-04  186   /*
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-09-04  187    * Drivers should call ib_umem_find_best_pgsz() to set the 
iova
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-09-04  188    * correctly.
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-09-04  189    */
a665aca89a4111 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-09-04  190   umem->iova = addr;
08bb558ac11ab9 drivers/infiniband/core/umem.c       Jack Morgenstein  
2018-05-23  191   umem->writable   = ib_access_writable(access);
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2018-09-16  192   umem->owning_mm = mm = current->mm;
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2018-09-16  193   mmgrab(mm);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  194  
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier     
2007-03-04  195   page_list = (struct page **) __get_free_page(GFP_KERNEL);
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier     
2007-03-04  196   if (!page_list) {
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky   
2018-07-10  197           ret = -ENOMEM;
41b4deeaa123e6 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2018-09-16  198           goto umem_kfree;
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier     
2007-03-04  199   }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  200  
406f9e5fa9a7a6 drivers/infiniband/core/umem.c       Haggai Eran       
2014-12-11  201   npages = ib_umem_num_pages(umem);
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford      
2018-09-21 @202   if (npages == 0 || npages > UINT_MAX) {
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford      
2018-09-21  203           ret = -EINVAL;
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford      
2018-09-21  204           goto out;
3312d1c6bdee6a drivers/infiniband/core/umem.c       Doug Ledford      
2018-09-21  205   }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  206  
ccbe9f0b11b137 drivers/infiniband/core/umem.c       Jiri Slaby        
2010-02-11  207   lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  208  
b95df5e3e45914 drivers/infiniband/core/umem.c       Davidlohr Bueso   
2019-02-06  209   new_pinned = atomic64_add_return(npages, &mm->pinned_vm);
70f8a3ca68d3e1 drivers/infiniband/core/umem.c       Davidlohr Bueso   
2019-02-06  210   if (new_pinned > lock_limit && !capable(CAP_IPC_LOCK)) {
b95df5e3e45914 drivers/infiniband/core/umem.c       Davidlohr Bueso   
2019-02-06  211           atomic64_sub(npages, &mm->pinned_vm);
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  212           ret = -ENOMEM;
c6ce580716372d drivers/infiniband/core/umem.c       Doug Ledford      
2018-09-21  213           goto out;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  214   }
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  215  
f7c6a7b5d59980 drivers/infiniband/core/umem.c       Roland Dreier     
2007-03-04  216   cur_base = addr & PAGE_MASK;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  217  
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes   
2016-10-13  218   if (!umem->writable)
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes   
2016-10-13  219           gup_flags |= FOLL_FORCE;
768ae309a96103 drivers/infiniband/core/umem.c       Lorenzo Stoakes   
2016-10-13  220  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  221   while (npages) {
928da37a229f34 drivers/infiniband/core/umem.c       Eric Dumazet      
2020-07-29  222           cond_resched();
dfa0a4fff11b32 drivers/infiniband/core/umem.c       John Hubbard      
2020-01-30  223           ret = pin_user_pages_fast(cur_base,
8079ffa0e18baa drivers/infiniband/core/umem.c       Roland Dreier     
2008-06-06  224                                     min_t(unsigned long, npages,
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard      
2020-01-30  225                                           PAGE_SIZE /
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard      
2020-01-30  226                                           sizeof(struct page 
*)),
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard      
2020-01-30  227                                     gup_flags | FOLL_LONGTERM, 
page_list);
4789fcdd140952 drivers/infiniband/core/umem.c       John Hubbard      
2020-01-30  228           if (ret < 0)
1215cb7c88ec88 drivers/infiniband/core/umem.c       Leon Romanovsky   
2018-07-10  229                   goto umem_release;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  230  
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  231           cur_base += ret * PAGE_SIZE;
eb8ffbfed50e79 drivers/infiniband/core/uverbs_mem.c Roland Dreier     
2005-07-07  232           npages -= ret;
b116c702791a98 drivers/infiniband/core/umem.c       Christoph Hellwig 
2020-11-06  233           sg = __sg_alloc_table_from_pages(&umem->sg_head, 
page_list, ret,
b116c702791a98 drivers/infiniband/core/umem.c       Christoph Hellwig 
2020-11-06  234                           0, ret << PAGE_SHIFT,
b116c702791a98 drivers/infiniband/core/umem.c       Christoph Hellwig 
2020-11-06  235                           ib_dma_max_seg_size(device), sg, 
npages,
0c16d9635e3a51 drivers/infiniband/core/umem.c       Maor Gottlieb     
2020-10-04  236                           GFP_KERNEL);
0c16d9635e3a51 drivers/infiniband/core/umem.c       Maor Gottlieb     
2020-10-04  237           if (IS_ERR(sg)) {
0c16d9635e3a51 drivers/infiniband/core/umem.c       Maor Gottlieb     
2020-10-04  238                   unpin_user_pages_dirty_lock(page_list, ret, 
0);
0c16d9635e3a51 drivers/infiniband/core/umem.c       Maor Gottlieb     
2020-10-04  239                   ret = PTR_ERR(sg);
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  
ff640c664197ae drivers/infiniband/core/umem.c       Maor Gottlieb     
2021-06-13  247   ret = ib_dma_map_sgtable_attrs(device, &umem->sg_head,
f03d9fadfe13a7 drivers/infiniband/core/umem.c       Michael Guralnik  
2020-02-12  248                                  DMA_BIDIRECTIONAL, dma_attr);
ff640c664197ae drivers/infiniband/core/umem.c       Maor Gottlieb     
2021-06-13  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);
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  255  
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  256   /*
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  257    * If the address belongs to peer memory client, then the 
first
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  258    * call to get_user_pages will fail. In this case, try to get
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  259    * these pages from the peers.
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  260    */
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  261   //FIXME: this placement is horrible
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  262   if (ret < 0 && peer_mem_flags & IB_PEER_MEM_ALLOW) {
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  263           struct ib_umem *new_umem;
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  264  
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  265           new_umem = ib_peer_umem_get(umem, ret, 
peer_mem_flags);
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  266           if (IS_ERR(new_umem)) {
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  267                   ret = PTR_ERR(new_umem);
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  268                   goto vma;
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  269           }
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  270           umem = new_umem;
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  271           ret = 0;
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  272           goto out;
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  273   }
901df51c1d3850 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  }
901df51c1d3850 drivers/infiniband/core/umem.c       Jason Gunthorpe   
2020-11-26  285  

:::::: The code at line 202 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