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]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
