CC: kbuild-all(a)lists.01.org In-Reply-To: <161799186664.847742.14555840742293852768.stgit@warthog.procyon.org.uk> References: <161799186664.847742.14555840742293852768.stgit@warthog.procyon.org.uk> TO: David Howells Hi David, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on next-20210409] [cannot apply to linus/master v5.12-rc6 v5.12-rc5 v5.12-rc4 v5.12-rc6] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/David-Howells/iov_iter-Remove-iov_iter_for_each_range/20210410-021151 base: e99d8a8495175df8cb8b739f8cf9b0fc9d0cd3b5 :::::: branch date: 5 hours ago :::::: commit date: 5 hours ago config: microblaze-randconfig-s031-20210409 (attached as .config) compiler: microblaze-linux-gcc (GCC) 9.3.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.3-279-g6d5d9b42-dirty # https://github.com/0day-ci/linux/commit/3a86123438f2aac6764901c8462752f378c958c0 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review David-Howells/iov_iter-Remove-iov_iter_for_each_range/20210410-021151 git checkout 3a86123438f2aac6764901c8462752f378c958c0 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=microblaze If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) >> lib/iov_iter.c:1481:9: sparse: sparse: context imbalance in 'iov_iter_get_pages' - different lock contexts for basic block >> lib/iov_iter.c:1607:9: sparse: sparse: context imbalance in 'iov_iter_get_pages_alloc' - different lock contexts for basic block lib/iov_iter.c: note: in included file: include/net/checksum.h:31:39: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected restricted __wsum [usertype] sum @@ got unsigned int @@ include/net/checksum.h:31:39: sparse: expected restricted __wsum [usertype] sum include/net/checksum.h:31:39: sparse: got unsigned int include/net/checksum.h:39:45: sparse: sparse: incorrect type in argument 3 (different base types) @@ expected restricted __wsum [usertype] sum @@ got unsigned int @@ include/net/checksum.h:39:45: sparse: expected restricted __wsum [usertype] sum include/net/checksum.h:39:45: sparse: got unsigned int >> lib/iov_iter.c:1818:5: sparse: sparse: context imbalance in 'iov_iter_npages' - different lock contexts for basic block vim +/iov_iter_get_pages +1481 lib/iov_iter.c 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1480 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 @1481 ssize_t iov_iter_get_pages(struct iov_iter *i, 2c80929c4c4d54 mm/iov_iter.c Miklos Szeredi 2014-09-24 1482 struct page **pages, size_t maxsize, unsigned maxpages, 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1483 size_t *start) 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1484 { e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1485 if (maxsize > i->count) e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1486 maxsize = i->count; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1487 00e23707442a75 lib/iov_iter.c David Howells 2018-10-22 1488 if (unlikely(iov_iter_is_pipe(i))) 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1489 return pipe_get_pages(i, pages, maxsize, maxpages, start); 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1490 if (unlikely(iov_iter_is_xarray(i))) 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1491 return iter_xarray_get_pages(i, pages, maxsize, maxpages, start); 9ea9ce0427aab0 lib/iov_iter.c David Howells 2018-10-20 1492 if (unlikely(iov_iter_is_discard(i))) 9ea9ce0427aab0 lib/iov_iter.c David Howells 2018-10-20 1493 return -EFAULT; 9ea9ce0427aab0 lib/iov_iter.c David Howells 2018-10-20 1494 e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1495 iterate_all_kinds(i, maxsize, v, ({ e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1496 unsigned long addr = (unsigned long)v.iov_base; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1497 size_t len = v.iov_len + (*start = addr & (PAGE_SIZE - 1)); e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1498 int n; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1499 int res; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1500 e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1501 if (len > maxpages * PAGE_SIZE) e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1502 len = maxpages * PAGE_SIZE; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1503 addr &= ~(PAGE_SIZE - 1); e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1504 n = DIV_ROUND_UP(len, PAGE_SIZE); 73b0140bf0fe9d lib/iov_iter.c Ira Weiny 2019-05-13 1505 res = get_user_pages_fast(addr, n, 73b0140bf0fe9d lib/iov_iter.c Ira Weiny 2019-05-13 1506 iov_iter_rw(i) != WRITE ? FOLL_WRITE : 0, 73b0140bf0fe9d lib/iov_iter.c Ira Weiny 2019-05-13 1507 pages); e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1508 if (unlikely(res < 0)) e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1509 return res; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1510 return (res == n ? len : res * PAGE_SIZE) - *start; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1511 0;}),({ e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1512 /* can't be more than PAGE_SIZE */ e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1513 *start = v.bv_offset; e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1514 get_page(*pages = v.bv_page); e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1515 return v.bv_len; a280455fa87053 mm/iov_iter.c Al Viro 2014-11-27 1516 }),({ a280455fa87053 mm/iov_iter.c Al Viro 2014-11-27 1517 return -EFAULT; 3a86123438f2aa lib/iov_iter.c David Howells 2021-04-09 1518 }) e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1519 ) e5393fae3b49e8 mm/iov_iter.c Al Viro 2014-11-27 1520 return 0; 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1521 } 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1522 EXPORT_SYMBOL(iov_iter_get_pages); 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1523 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1524 static struct page **get_pages_array(size_t n) 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1525 { 752ade68cbd81d lib/iov_iter.c Michal Hocko 2017-05-08 1526 return kvmalloc_array(n, sizeof(struct page *), GFP_KERNEL); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1527 } 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1528 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1529 static ssize_t pipe_get_pages_alloc(struct iov_iter *i, 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1530 struct page ***pages, size_t maxsize, 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1531 size_t *start) 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1532 { 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1533 struct page **p; 8cefc107ca54c8 lib/iov_iter.c David Howells 2019-11-15 1534 unsigned int iter_head, npages; d7760d638b140d lib/iov_iter.c Ilya Dryomov 2018-05-02 1535 ssize_t n; 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1536 33844e665104b1 lib/iov_iter.c Al Viro 2016-12-21 1537 if (!maxsize) 33844e665104b1 lib/iov_iter.c Al Viro 2016-12-21 1538 return 0; 33844e665104b1 lib/iov_iter.c Al Viro 2016-12-21 1539 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1540 if (!sanity(i)) 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1541 return -EFAULT; 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1542 8cefc107ca54c8 lib/iov_iter.c David Howells 2019-11-15 1543 data_start(i, &iter_head, start); 8cefc107ca54c8 lib/iov_iter.c David Howells 2019-11-15 1544 /* Amount of free space: some of this one + all after this one */ 8cefc107ca54c8 lib/iov_iter.c David Howells 2019-11-15 1545 npages = pipe_space_for_user(iter_head, i->pipe->tail, i->pipe); 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1546 n = npages * PAGE_SIZE - *start; 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1547 if (maxsize > n) 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1548 maxsize = n; 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1549 else 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1550 npages = DIV_ROUND_UP(maxsize + *start, PAGE_SIZE); 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1551 p = get_pages_array(npages); 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1552 if (!p) 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1553 return -ENOMEM; 8cefc107ca54c8 lib/iov_iter.c David Howells 2019-11-15 1554 n = __pipe_get_pages(i, maxsize, p, iter_head, start); 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1555 if (n > 0) 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1556 *pages = p; 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1557 else 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1558 kvfree(p); 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1559 return n; 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1560 } 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1561 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1562 static ssize_t iter_xarray_get_pages_alloc(struct iov_iter *i, 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1563 struct page ***pages, size_t maxsize, 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1564 size_t *_start_offset) 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1565 { 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1566 struct page **p; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1567 unsigned nr, offset; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1568 pgoff_t index, count; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1569 size_t size = maxsize, actual; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1570 loff_t pos; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1571 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1572 if (!size) 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1573 return 0; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1574 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1575 pos = i->xarray_start + i->iov_offset; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1576 index = pos >> PAGE_SHIFT; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1577 offset = pos & ~PAGE_MASK; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1578 *_start_offset = offset; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1579 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1580 count = 1; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1581 if (size > PAGE_SIZE - offset) { 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1582 size -= PAGE_SIZE - offset; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1583 count += size >> PAGE_SHIFT; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1584 size &= ~PAGE_MASK; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1585 if (size) 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1586 count++; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1587 } 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1588 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1589 p = get_pages_array(count); 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1590 if (!p) 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1591 return -ENOMEM; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1592 *pages = p; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1593 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1594 nr = iter_xarray_copy_pages(p, i->xarray, index, count); 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1595 if (nr == 0) 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1596 return 0; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1597 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1598 actual = PAGE_SIZE * nr; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1599 actual -= offset; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1600 if (nr == count && size > 0) { 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1601 unsigned last_offset = (nr > 1) ? 0 : offset; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1602 actual -= PAGE_SIZE - (last_offset + size); 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1603 } 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1604 return actual; 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1605 } 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1606 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 @1607 ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1608 struct page ***pages, size_t maxsize, 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1609 size_t *start) 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1610 { 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1611 struct page **p; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1612 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1613 if (maxsize > i->count) 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1614 maxsize = i->count; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1615 00e23707442a75 lib/iov_iter.c David Howells 2018-10-22 1616 if (unlikely(iov_iter_is_pipe(i))) 241699cd72a848 lib/iov_iter.c Al Viro 2016-09-22 1617 return pipe_get_pages_alloc(i, pages, maxsize, start); 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1618 if (unlikely(iov_iter_is_xarray(i))) 788abcfb66c10d lib/iov_iter.c David Howells 2020-02-10 1619 return iter_xarray_get_pages_alloc(i, pages, maxsize, start); 9ea9ce0427aab0 lib/iov_iter.c David Howells 2018-10-20 1620 if (unlikely(iov_iter_is_discard(i))) 9ea9ce0427aab0 lib/iov_iter.c David Howells 2018-10-20 1621 return -EFAULT; 9ea9ce0427aab0 lib/iov_iter.c David Howells 2018-10-20 1622 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1623 iterate_all_kinds(i, maxsize, v, ({ 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1624 unsigned long addr = (unsigned long)v.iov_base; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1625 size_t len = v.iov_len + (*start = addr & (PAGE_SIZE - 1)); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1626 int n; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1627 int res; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1628 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1629 addr &= ~(PAGE_SIZE - 1); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1630 n = DIV_ROUND_UP(len, PAGE_SIZE); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1631 p = get_pages_array(n); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1632 if (!p) 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1633 return -ENOMEM; 73b0140bf0fe9d lib/iov_iter.c Ira Weiny 2019-05-13 1634 res = get_user_pages_fast(addr, n, 73b0140bf0fe9d lib/iov_iter.c Ira Weiny 2019-05-13 1635 iov_iter_rw(i) != WRITE ? FOLL_WRITE : 0, p); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1636 if (unlikely(res < 0)) { 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1637 kvfree(p); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1638 return res; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1639 } 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1640 *pages = p; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1641 return (res == n ? len : res * PAGE_SIZE) - *start; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1642 0;}),({ 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1643 /* can't be more than PAGE_SIZE */ 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1644 *start = v.bv_offset; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1645 *pages = p = get_pages_array(1); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1646 if (!p) 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1647 return -ENOMEM; 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1648 get_page(*p = v.bv_page); 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1649 return v.bv_len; a280455fa87053 mm/iov_iter.c Al Viro 2014-11-27 1650 }),({ a280455fa87053 mm/iov_iter.c Al Viro 2014-11-27 1651 return -EFAULT; 3a86123438f2aa lib/iov_iter.c David Howells 2021-04-09 1652 }) 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1653 ) 1b17f1f2e56a09 mm/iov_iter.c Al Viro 2014-11-27 1654 return 0; 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1655 } 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1656 EXPORT_SYMBOL(iov_iter_get_pages_alloc); 62a8067a7f35db mm/iov_iter.c Al Viro 2014-04-04 1657 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org