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
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org