From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: [mellanox:queue-next 1371/1385] drivers/infiniband/core/umem.c:206 __ib_umem_get() warn: impossible condition '(npages > (~0)) => (0-u32max > u32max)'
Date: Thu, 11 Feb 2021 16:10:53 +0800 [thread overview]
Message-ID: <202102111634.DN4dplkn-lkp@intel.com> (raw)
[-- 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 --]
reply other threads:[~2021-02-11 8:10 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202102111634.DN4dplkn-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.