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:   8d9227da5495f0b28eca4c1fae9d0ada6a464fe5
commit: f1b020e9d2ad379b44fe323ff9c2eb27d872fbdd [9/18] RDMA/core: Introduce 
peer memory interface
:::::: branch date: 16 hours ago
:::::: commit date: 16 hours ago
config: i386-randconfig-m021-20201227 (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 <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

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

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

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

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

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to