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]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to