CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Vivek Kasireddy <[email protected]> CC: Gerd Hoffmann <[email protected]> CC: Dongwon Kim <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: da454ebf578f6c542ba9f5b3ddb98db3ede109c1 commit: 16c243e99d335e1ef3059871897119affc98b493 [279/6223] udmabuf: Add support for mapping hugepages (v4) :::::: branch date: 5 hours ago :::::: commit date: 9 weeks ago config: i386-randconfig-m021-20210809 (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 <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: drivers/dma-buf/udmabuf.c:230 udmabuf_create() error: uninitialized symbol 'subpgoff'. drivers/dma-buf/udmabuf.c:233 udmabuf_create() error: uninitialized symbol 'maxsubpgs'. vim +/subpgoff +230 drivers/dma-buf/udmabuf.c fbb0de795078190 Gerd Hoffmann 2018-08-27 157 c1bbed668997268 Gurchetan Singh 2019-12-02 158 static long udmabuf_create(struct miscdevice *device, c1bbed668997268 Gurchetan Singh 2019-12-02 159 struct udmabuf_create_list *head, c1bbed668997268 Gurchetan Singh 2019-12-02 160 struct udmabuf_create_item *list) fbb0de795078190 Gerd Hoffmann 2018-08-27 161 { fbb0de795078190 Gerd Hoffmann 2018-08-27 162 DEFINE_DMA_BUF_EXPORT_INFO(exp_info); fbb0de795078190 Gerd Hoffmann 2018-08-27 163 struct file *memfd = NULL; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 164 struct address_space *mapping = NULL; fbb0de795078190 Gerd Hoffmann 2018-08-27 165 struct udmabuf *ubuf; fbb0de795078190 Gerd Hoffmann 2018-08-27 166 struct dma_buf *buf; 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 167 pgoff_t pgoff, pgcnt, pgidx, pgbuf = 0, pglimit; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 168 struct page *page, *hpage = NULL; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 169 pgoff_t subpgoff, maxsubpgs; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 170 struct hstate *hpstate; fbb0de795078190 Gerd Hoffmann 2018-08-27 171 int seals, ret = -EINVAL; fbb0de795078190 Gerd Hoffmann 2018-08-27 172 u32 i, flags; fbb0de795078190 Gerd Hoffmann 2018-08-27 173 33f35429fc49c09 Gerd Hoffmann 2018-09-11 174 ubuf = kzalloc(sizeof(*ubuf), GFP_KERNEL); fbb0de795078190 Gerd Hoffmann 2018-08-27 175 if (!ubuf) fbb0de795078190 Gerd Hoffmann 2018-08-27 176 return -ENOMEM; fbb0de795078190 Gerd Hoffmann 2018-08-27 177 dc4716d75154b36 Gerd Hoffmann 2018-09-11 178 pglimit = (size_limit_mb * 1024 * 1024) >> PAGE_SHIFT; fbb0de795078190 Gerd Hoffmann 2018-08-27 179 for (i = 0; i < head->count; i++) { fbb0de795078190 Gerd Hoffmann 2018-08-27 180 if (!IS_ALIGNED(list[i].offset, PAGE_SIZE)) 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 181 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 182 if (!IS_ALIGNED(list[i].size, PAGE_SIZE)) 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 183 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 184 ubuf->pagecount += list[i].size >> PAGE_SHIFT; dc4716d75154b36 Gerd Hoffmann 2018-09-11 185 if (ubuf->pagecount > pglimit) 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 186 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 187 } 33f35429fc49c09 Gerd Hoffmann 2018-09-11 188 ubuf->pages = kmalloc_array(ubuf->pagecount, sizeof(*ubuf->pages), fbb0de795078190 Gerd Hoffmann 2018-08-27 189 GFP_KERNEL); fbb0de795078190 Gerd Hoffmann 2018-08-27 190 if (!ubuf->pages) { fbb0de795078190 Gerd Hoffmann 2018-08-27 191 ret = -ENOMEM; 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 192 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 193 } fbb0de795078190 Gerd Hoffmann 2018-08-27 194 fbb0de795078190 Gerd Hoffmann 2018-08-27 195 pgbuf = 0; fbb0de795078190 Gerd Hoffmann 2018-08-27 196 for (i = 0; i < head->count; i++) { 7a1c67d78094236 Gerd Hoffmann 2018-09-11 197 ret = -EBADFD; fbb0de795078190 Gerd Hoffmann 2018-08-27 198 memfd = fget(list[i].memfd); fbb0de795078190 Gerd Hoffmann 2018-08-27 199 if (!memfd) 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 200 goto err; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 201 mapping = file_inode(memfd)->i_mapping; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 202 if (!shmem_mapping(mapping) && !is_file_hugepages(memfd)) 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 203 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 204 seals = memfd_fcntl(memfd, F_GET_SEALS, 0); 7a1c67d78094236 Gerd Hoffmann 2018-09-11 205 if (seals == -EINVAL) 7a1c67d78094236 Gerd Hoffmann 2018-09-11 206 goto err; 7a1c67d78094236 Gerd Hoffmann 2018-09-11 207 ret = -EINVAL; 7a1c67d78094236 Gerd Hoffmann 2018-09-11 208 if ((seals & SEALS_WANTED) != SEALS_WANTED || fbb0de795078190 Gerd Hoffmann 2018-08-27 209 (seals & SEALS_DENIED) != 0) 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 210 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 211 pgoff = list[i].offset >> PAGE_SHIFT; fbb0de795078190 Gerd Hoffmann 2018-08-27 212 pgcnt = list[i].size >> PAGE_SHIFT; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 213 if (is_file_hugepages(memfd)) { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 214 hpstate = hstate_file(memfd); 16c243e99d335e1 Vivek Kasireddy 2021-06-09 215 pgoff = list[i].offset >> huge_page_shift(hpstate); 16c243e99d335e1 Vivek Kasireddy 2021-06-09 216 subpgoff = (list[i].offset & 16c243e99d335e1 Vivek Kasireddy 2021-06-09 217 ~huge_page_mask(hpstate)) >> PAGE_SHIFT; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 218 maxsubpgs = huge_page_size(hpstate) >> PAGE_SHIFT; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 219 } fbb0de795078190 Gerd Hoffmann 2018-08-27 220 for (pgidx = 0; pgidx < pgcnt; pgidx++) { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 221 if (is_file_hugepages(memfd)) { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 222 if (!hpage) { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 223 hpage = find_get_page_flags(mapping, pgoff, 16c243e99d335e1 Vivek Kasireddy 2021-06-09 224 FGP_ACCESSED); 16c243e99d335e1 Vivek Kasireddy 2021-06-09 225 if (IS_ERR(hpage)) { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 226 ret = PTR_ERR(hpage); 16c243e99d335e1 Vivek Kasireddy 2021-06-09 227 goto err; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 228 } 16c243e99d335e1 Vivek Kasireddy 2021-06-09 229 } 16c243e99d335e1 Vivek Kasireddy 2021-06-09 @230 page = hpage + subpgoff; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 231 get_page(page); 16c243e99d335e1 Vivek Kasireddy 2021-06-09 232 subpgoff++; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 @233 if (subpgoff == maxsubpgs) { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 234 put_page(hpage); 16c243e99d335e1 Vivek Kasireddy 2021-06-09 235 hpage = NULL; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 236 subpgoff = 0; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 237 pgoff++; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 238 } 16c243e99d335e1 Vivek Kasireddy 2021-06-09 239 } else { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 240 page = shmem_read_mapping_page(mapping, 16c243e99d335e1 Vivek Kasireddy 2021-06-09 241 pgoff + pgidx); fbb0de795078190 Gerd Hoffmann 2018-08-27 242 if (IS_ERR(page)) { fbb0de795078190 Gerd Hoffmann 2018-08-27 243 ret = PTR_ERR(page); 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 244 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 245 } 16c243e99d335e1 Vivek Kasireddy 2021-06-09 246 } fbb0de795078190 Gerd Hoffmann 2018-08-27 247 ubuf->pages[pgbuf++] = page; fbb0de795078190 Gerd Hoffmann 2018-08-27 248 } fbb0de795078190 Gerd Hoffmann 2018-08-27 249 fput(memfd); fbb0de795078190 Gerd Hoffmann 2018-08-27 250 memfd = NULL; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 251 if (hpage) { 16c243e99d335e1 Vivek Kasireddy 2021-06-09 252 put_page(hpage); 16c243e99d335e1 Vivek Kasireddy 2021-06-09 253 hpage = NULL; 16c243e99d335e1 Vivek Kasireddy 2021-06-09 254 } 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 255 } fbb0de795078190 Gerd Hoffmann 2018-08-27 256 fbb0de795078190 Gerd Hoffmann 2018-08-27 257 exp_info.ops = &udmabuf_ops; fbb0de795078190 Gerd Hoffmann 2018-08-27 258 exp_info.size = ubuf->pagecount << PAGE_SHIFT; fbb0de795078190 Gerd Hoffmann 2018-08-27 259 exp_info.priv = ubuf; 5c074eeabbd332b Gerd Hoffmann 2018-11-14 260 exp_info.flags = O_RDWR; fbb0de795078190 Gerd Hoffmann 2018-08-27 261 c1bbed668997268 Gurchetan Singh 2019-12-02 262 ubuf->device = device; fbb0de795078190 Gerd Hoffmann 2018-08-27 263 buf = dma_buf_export(&exp_info); fbb0de795078190 Gerd Hoffmann 2018-08-27 264 if (IS_ERR(buf)) { fbb0de795078190 Gerd Hoffmann 2018-08-27 265 ret = PTR_ERR(buf); 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 266 goto err; fbb0de795078190 Gerd Hoffmann 2018-08-27 267 } fbb0de795078190 Gerd Hoffmann 2018-08-27 268 fbb0de795078190 Gerd Hoffmann 2018-08-27 269 flags = 0; fbb0de795078190 Gerd Hoffmann 2018-08-27 270 if (head->flags & UDMABUF_FLAGS_CLOEXEC) fbb0de795078190 Gerd Hoffmann 2018-08-27 271 flags |= O_CLOEXEC; fbb0de795078190 Gerd Hoffmann 2018-08-27 272 return dma_buf_fd(buf, flags); fbb0de795078190 Gerd Hoffmann 2018-08-27 273 0d17455ca85ecbc Gerd Hoffmann 2018-09-11 274 err: fbb0de795078190 Gerd Hoffmann 2018-08-27 275 while (pgbuf > 0) fbb0de795078190 Gerd Hoffmann 2018-08-27 276 put_page(ubuf->pages[--pgbuf]); 683a0e630cb463d Gustavo A. R. Silva 2018-09-04 277 if (memfd) fbb0de795078190 Gerd Hoffmann 2018-08-27 278 fput(memfd); fbb0de795078190 Gerd Hoffmann 2018-08-27 279 kfree(ubuf->pages); fbb0de795078190 Gerd Hoffmann 2018-08-27 280 kfree(ubuf); fbb0de795078190 Gerd Hoffmann 2018-08-27 281 return ret; fbb0de795078190 Gerd Hoffmann 2018-08-27 282 } fbb0de795078190 Gerd Hoffmann 2018-08-27 283 --- 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]
