All of lore.kernel.org
 help / color / mirror / Atom feed
* [mellanox:queue-next 1371/1385] drivers/infiniband/core/umem.c:206 __ib_umem_get() warn: impossible condition '(npages > (~0)) => (0-u32max > u32max)'
@ 2021-02-11  8:10 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2021-02-11  8:10 UTC (permalink / raw)
  To: kbuild

[-- Attachment #1: Type: text/plain, Size: 18418 bytes --]

CC: kbuild-all(a)lists.01.org
TO: Jason Gunthorpe <jgg@nvidia.com>
CC: Leon Romanovsky <leonro@nvidia.com>
CC: Yishai Hadas <yishaih@mellanox.com>
CC: Feras Daoud <ferasda@mellanox.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/mellanox/linux.git queue-next
head:   4c15ba82aff76a52f734495ea85b2c15693c6340
commit: d7f5a92ad24728b1bdf38a09f9dcfe6d07888e9e [1371/1385] RDMA/core: Introduce peer memory interface
:::::: branch date: 23 hours ago
:::::: commit date: 23 hours ago
config: i386-randconfig-m031-20210209 (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 <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>

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

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

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

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

:::::: TO: Doug Ledford <dledford@redhat.com>
:::::: CC: Jason Gunthorpe <jgg@mellanox.com>

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

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 42295 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-02-11  8:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-02-11  8:10 [mellanox:queue-next 1371/1385] drivers/infiniband/core/umem.c:206 __ib_umem_get() warn: impossible condition '(npages > (~0)) => (0-u32max > u32max)' kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.