lkml.org 
[lkml]   [2021]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subject[luxis1999-iommufd:iommufd-v5.16-rc3 23/25] drivers/iommu/iommufd/io_pagetable.c:1535:6: warning: comparison of distinct pointer types ('typeof (iova) *' (aka 'unsigned long *') and 'typeof (length - 1) *' (aka 'unsigned int *'))
tree:   https://github.com/luxis1999/iommufd iommufd-v5.16-rc3
head: 21c1bb93447d6cced2f486cdb68b92d11f2e664d
commit: 4aa75d972a71aafba6e3b57ca91f6a04bdd37611 [23/25] vfio/pci: Add bind_iommufd() support
config: i386-randconfig-r013-20211216 (https://download.01.org/0day-ci/archive/20211217/202112170238.6pX2L0DT-lkp@intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project dd245bab9fbb364faa1581e4f92ba3119a872fba)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/luxis1999/iommufd/commit/4aa75d972a71aafba6e3b57ca91f6a04bdd37611
git remote add luxis1999-iommufd https://github.com/luxis1999/iommufd
git fetch --no-tags luxis1999-iommufd iommufd-v5.16-rc3
git checkout 4aa75d972a71aafba6e3b57ca91f6a04bdd37611
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/iommu/iommufd/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

>> drivers/iommu/iommufd/io_pagetable.c:1535:6: warning: comparison of distinct pointer types ('typeof (iova) *' (aka 'unsigned long *') and 'typeof (length - 1) *' (aka 'unsigned int *')) [-Wcompare-distinct-pointer-types]
if (check_add_overflow(iova, length - 1, &last_iova))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/overflow.h:66:15: note: expanded from macro 'check_add_overflow'
(void) (&__a == &__b); \
~~~~ ^ ~~~~
drivers/iommu/iommufd/io_pagetable.c:1595:14: warning: comparison of distinct pointer types ('typeof (iova) *' (aka 'unsigned long *') and 'typeof (length - 1) *' (aka 'unsigned int *')) [-Wcompare-distinct-pointer-types]
WARN_ON(check_add_overflow(iova, length - 1, &last_iova)))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/overflow.h:66:15: note: expanded from macro 'check_add_overflow'
(void) (&__a == &__b); \
~~~~ ^ ~~~~
include/asm-generic/bug.h:121:25: note: expanded from macro 'WARN_ON'
int __ret_warn_on = !!(condition); \
^~~~~~~~~
2 warnings generated.

Kconfig warnings: (for reference only)
WARNING: unmet direct dependencies detected for IOMMUFD
Depends on IOMMU_SUPPORT
Selected by
- VFIO_PCI_CORE && VFIO && PCI && MMU


vim +1535 drivers/iommu/iommufd/io_pagetable.c

b1baa437fe5478 Jason Gunthorpe 2021-11-11 1509
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1510 /**
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1511 * iopt_access_pages - Return a list of pages under the iova
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1512 *
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1513 * Reads @npages starting at iova and returns the struct page * pointers. These
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1514 * can be kmap'd by the caller for CPU access.
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1515 *
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1516 * The caller must perform iopt_unaccess_pages() when done to balance this.
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1517 *
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1518 * iova can be unaligned from PAGE_SIZE. The first returned byte starts at
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1519 * page_to_phys(out_pages[0]) + (iova % PAGE_SIZE). The caller promises not
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1520 * to touch memory outside the requested iova subslice.
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1521 *
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1522 * FIXME: callers that need a DMA mapping via a sgl should create another
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1523 * interface to build the SGL efficiently
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1524 */
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1525 int iopt_access_pages(struct io_pagetable *iopt, unsigned long iova,
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1526 size_t length, struct page **out_pages, bool write)
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1527 {
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1528 unsigned long cur_iova = iova;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1529 unsigned long last_iova;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1530 struct iopt_area *area;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1531 int rc;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1532
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1533 if (!length)
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1534 return -EINVAL;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 @1535 if (check_add_overflow(iova, length - 1, &last_iova))
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1536 return -EOVERFLOW;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1537
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1538 down_read(&iopt->rwsem);
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1539 for (area = iopt_area_iter_first(iopt, iova, last_iova); area;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1540 area = iopt_area_iter_next(area, iova, last_iova)) {
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1541 unsigned long last = min(last_iova, iopt_area_last_iova(area));
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1542 unsigned long last_index;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1543 unsigned long index;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1544
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1545 /* Need contiguous areas in the access */
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1546 if (iopt_area_iova(area) < cur_iova) {
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1547 rc = -EINVAL;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1548 goto out_remove;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1549 }
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1550
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1551 index = iopt_iova_to_index(area, cur_iova);
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1552 last_index = iopt_iova_to_index(area, last);
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1553 rc = iopt_pages_add_user(area->pages, index, last_index,
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1554 out_pages, write);
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1555 if (rc)
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1556 goto out_remove;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1557 if (last == last_iova)
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1558 break;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1559 /*
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1560 * Can't cross areas that are not aligned to the system page
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1561 * size with this API.
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1562 */
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1563 if (cur_iova % PAGE_SIZE) {
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1564 rc = -EINVAL;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1565 goto out_remove;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1566 }
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1567 cur_iova = last + 1;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1568 out_pages += last_index - index;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1569 atomic_inc(&area->num_users);
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1570 }
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1571
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1572 up_read(&iopt->rwsem);
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1573 return 0;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1574
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1575 out_remove:
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1576 if (cur_iova != iova)
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1577 iopt_unaccess_pages(iopt, iova, cur_iova - iova);
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1578 return rc;
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1579 }
b1baa437fe5478 Jason Gunthorpe 2021-11-11 1580

:::::: The code at line 1535 was first introduced by commit
:::::: b1baa437fe5478bf8f79e53f49409b2f413ea27e iommufd: Data structure to provide IOVA to PFN mapping

:::::: TO: Jason Gunthorpe <jgg@nvidia.com>
:::::: CC: Jason Gunthorpe <jgg@nvidia.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

\
 
 \ /
  Last update: 2021-12-16 19:42    [W:0.060 / U:2.480 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site