Re: [PATCH 09/11] lib/interval-tree: convert interval_tree to half closed intervals

kbuild test robot
2019-10-03T22:51:34Z

[-- Attachment #1: Type: text/plain, Size: 19110 bytes --]

Hi Davidlohr,

I love your patch! Yet something to improve:

[auto build test ERROR on next-20191003]

url: https://github.com/0day-ci/linux/commits/Davidlohr-Bueso/lib-interval-tree-move-to-half-closed-intervals/20191004-042411
config: arm64-allyesconfig (attached as .config)
compiler: aarch64-linux-gcc (GCC) 7.4.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.4.0 make.cross ARCH=arm64

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

All error/warnings (new ones prefixed by >>):

In file included from include/linux/swab.h:5:0,
from include/uapi/linux/byteorder/big_endian.h:13,
from include/linux/byteorder/big_endian.h:5,
from arch/arm64/include/uapi/asm/byteorder.h:21,
from include/asm-generic/bitops/le.h:6,
from arch/arm64/include/asm/bitops.h:29,
from include/linux/bitops.h:26,
from include/linux/kernel.h:12,
from include/linux/clk.h:13,
from include/linux/amba/bus.h:14,
from drivers//iommu/virtio-iommu.c:10:
drivers//iommu/virtio-iommu.c: In function 'viommu_replay_mappings':
>> drivers//iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:130:32: note: in definition of macro '__swab64'
(__builtin_constant_p((__u64)(x)) ? \
^
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:24:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:25:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:26:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:27:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
>> drivers//iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:28:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \
^
--
In file included from include/linux/swab.h:5:0,
from include/uapi/linux/byteorder/big_endian.h:13,
from include/linux/byteorder/big_endian.h:5,
from arch/arm64/include/uapi/asm/byteorder.h:21,
from include/asm-generic/bitops/le.h:6,
from arch/arm64/include/asm/bitops.h:29,
from include/linux/bitops.h:26,
from include/linux/kernel.h:12,
from include/linux/clk.h:13,
from include/linux/amba/bus.h:14,
from drivers/iommu/virtio-iommu.c:10:
drivers/iommu/virtio-iommu.c: In function 'viommu_replay_mappings':
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:130:32: note: in definition of macro '__swab64'
(__builtin_constant_p((__u64)(x)) ? \
^
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:24:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:25:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:26:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:27:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:28:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:29:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:30:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:31:12: note: in definition of macro '___constant_swab64'
(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56)))
^
>> include/uapi/linux/byteorder/big_endian.h:31:43: note: in expansion of macro '__swab64'
#define __cpu_to_le64(x) ((__force __le64)__swab64((x)))
^~~~~~~~
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:41: error: 'struct interval_tree_node' has no member named 'last'
.virt_end = cpu_to_le64(mapping->iova.last),
^
include/uapi/linux/swab.h:132:12: note: in definition of macro '__swab64'
__fswab64(x))
^
>> include/linux/byteorder/generic.h:86:21: note: in expansion of macro '__cpu_to_le64'
#define cpu_to_le64 __cpu_to_le64
^~~~~~~~~~~~~
drivers/iommu/virtio-iommu.c:403:16: note: in expansion of macro 'cpu_to_le64'
.virt_end = cpu_to_le64(mapping->iova.last),
^~~~~~~~~~~

vim +403 drivers//iommu/virtio-iommu.c

edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 379
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 380 /*
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 381 * viommu_replay_mappings - re-send MAP requests
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 382 *
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 383 * When reattaching a domain that was previously detached from all endpoints,
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 384 * mappings were deleted from the device. Re-create the mappings available in
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 385 * the internal tree.
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 386 */
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 387 static int viommu_replay_mappings(struct viommu_domain *vdomain)
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 388 {
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 389 int ret = 0;
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 390 unsigned long flags;
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 391 struct viommu_mapping *mapping;
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 392 struct interval_tree_node *node;
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 393 struct virtio_iommu_req_map map;
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 394
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 395 spin_lock_irqsave(&vdomain->mappings_lock, flags);
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 396 node = interval_tree_iter_first(&vdomain->mappings, 0, -1UL);
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 397 while (node) {
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 398 mapping = container_of(node, struct viommu_mapping, iova);
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 399 map = (struct virtio_iommu_req_map) {
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 400 .head.type = VIRTIO_IOMMU_T_MAP,
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 401 .domain = cpu_to_le32(vdomain->id),
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 402 .virt_start = cpu_to_le64(mapping->iova.start),
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 @403 .virt_end = cpu_to_le64(mapping->iova.last),
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 404 .phys_start = cpu_to_le64(mapping->paddr),
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 405 .flags = cpu_to_le32(mapping->flags),
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 406 };
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 407
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 408 ret = viommu_send_req_sync(vdomain->viommu, &map, sizeof(map));
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 409 if (ret)
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 410 break;
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 411
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 412 node = interval_tree_iter_next(node, 0, -1UL);
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 413 }
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 414 spin_unlock_irqrestore(&vdomain->mappings_lock, flags);
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 415
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 416 return ret;
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 417 }
edcd69ab9a323b Jean-Philippe Brucker 2019-01-15 418

:::::: The code at line 403 was first introduced by commit
:::::: edcd69ab9a323b7ac7a86e1c44b6c9c46598391f iommu: Add virtio-iommu driver

:::::: TO: Jean-Philippe Brucker <jean-philippe.brucker@arm.com>
:::::: CC: Michael S. Tsirkin <mst@redhat.com>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 67355 bytes --]