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