[<prev] [next>] [day] [month] [year] [list]
Message-ID: <aSEHcgqCQTzB+fLU@rli9-mobl>
Date: Sat, 22 Nov 2025 08:44:34 +0800
From: kernel test robot <lkp@...el.com>
To: Alex Mastro <amastro@...com>
CC: <oe-kbuild-all@...ts.linux.dev>, <linux-kernel@...r.kernel.org>, "Alex
Williamson" <alex@...zbot.org>, David Matlack <dmatlack@...gle.com>
Subject: tools/testing/selftests/vfio/lib/vfio_pci_device.c:249:7: warning:
comparison of distinct pointer types ('typeof (iova) *' (aka 'unsigned long
long *') and 'typeof (size - 1) *' (aka 'unsigned int *'))
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: fd95357fd8c6778ac7dea6c57a19b8b182b6e91f
commit: ce0e3c403e00e9e03e80aca6570bf936a44279e2 vfio: selftests: add iova allocator
date: 9 days ago
config: i386-allnoconfig-bpf (https://download.01.org/0day-ci/archive/20251121/202511212039.RbypLd55-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251121/202511212039.RbypLd55-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@...el.com>
| Closes: https://lore.kernel.org/r/202511212039.RbypLd55-lkp@intel.com/
All warnings (new ones prefixed by >>):
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:215:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
215 | VFIO_ASSERT_NOT_NULL(allocator);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:46:39: note: expanded from macro 'VFIO_ASSERT_NOT_NULL'
46 | #define VFIO_ASSERT_NOT_NULL(_a, ...) VFIO_ASSERT_NE(NULL, _a, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:38:37: note: expanded from macro 'VFIO_ASSERT_NE'
38 | #define VFIO_ASSERT_NE(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, !=, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:4: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:215:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
215 | VFIO_ASSERT_NOT_NULL(allocator);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:46:39: note: expanded from macro 'VFIO_ASSERT_NOT_NULL'
46 | #define VFIO_ASSERT_NOT_NULL(_a, ...) VFIO_ASSERT_NE(NULL, _a, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:38:37: note: expanded from macro 'VFIO_ASSERT_NE'
38 | #define VFIO_ASSERT_NE(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, !=, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:22: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:235:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
235 | VFIO_ASSERT_GT(size, 0, "Invalid size arg, zero\n");
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:41:37: note: expanded from macro 'VFIO_ASSERT_GT'
41 | #define VFIO_ASSERT_GT(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, >, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:4: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:235:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
235 | VFIO_ASSERT_GT(size, 0, "Invalid size arg, zero\n");
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:41:37: note: expanded from macro 'VFIO_ASSERT_GT'
41 | #define VFIO_ASSERT_GT(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, >, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:22: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:236:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
236 | VFIO_ASSERT_EQ(size & (size - 1), 0, "Invalid size arg, non-power-of-2\n");
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:37:37: note: expanded from macro 'VFIO_ASSERT_EQ'
37 | #define VFIO_ASSERT_EQ(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, ==, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:4: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:236:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
236 | VFIO_ASSERT_EQ(size & (size - 1), 0, "Invalid size arg, non-power-of-2\n");
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:37:37: note: expanded from macro 'VFIO_ASSERT_EQ'
37 | #define VFIO_ASSERT_EQ(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, ==, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:22: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:242:3: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
242 | VFIO_ASSERT_LT(allocator->range_idx, allocator->nranges,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
243 | "IOVA allocator out of space\n");
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:39:37: note: expanded from macro 'VFIO_ASSERT_LT'
39 | #define VFIO_ASSERT_LT(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, <, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:4: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:242:3: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
242 | VFIO_ASSERT_LT(allocator->range_idx, allocator->nranges,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
243 | "IOVA allocator out of space\n");
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:39:37: note: expanded from macro 'VFIO_ASSERT_LT'
39 | #define VFIO_ASSERT_LT(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, <, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:22: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
>> tools/testing/selftests/vfio/lib/vfio_pci_device.c:249:7: warning: comparison of distinct pointer types ('typeof (iova) *' (aka 'unsigned long long *') and 'typeof (size - 1) *' (aka 'unsigned int *')) [-Wcompare-distinct-pointer-types]
249 | if (check_add_overflow(iova, size - 1, &last) ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/../../../tools/include/linux/overflow.h:48:15: note: expanded from macro 'check_add_overflow'
48 | (void) (&__a == &__b); \
| ~~~~ ^ ~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:257:7: warning: comparison of distinct pointer types ('typeof (iova) *' (aka 'unsigned long long *') and 'typeof (size - 1) *' (aka 'unsigned int *')) [-Wcompare-distinct-pointer-types]
257 | if (check_add_overflow(iova, size - 1, &last) ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/../../../tools/include/linux/overflow.h:48:15: note: expanded from macro 'check_add_overflow'
48 | (void) (&__a == &__b); \
| ~~~~ ^ ~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:298:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
298 | VFIO_ASSERT_NE(iova, INVALID_IOVA, "%p is not mapped into device.\n", vaddr);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:38:37: note: expanded from macro 'VFIO_ASSERT_NE'
38 | #define VFIO_ASSERT_NE(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, !=, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:4: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:298:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
298 | VFIO_ASSERT_NE(iova, INVALID_IOVA, "%p is not mapped into device.\n", vaddr);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:38:37: note: expanded from macro 'VFIO_ASSERT_NE'
38 | #define VFIO_ASSERT_NE(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, !=, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:22: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:323:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
323 | ioctl_assert(device->fd, VFIO_DEVICE_SET_IRQS, irq);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:30:2: note: expanded from macro 'ioctl_assert'
30 | VFIO_ASSERT_EQ(__ret, 0, "ioctl(%s, %s, %s) returned %d\n", #_fd, #_op, #_arg, __ret); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:37:37: note: expanded from macro 'VFIO_ASSERT_EQ'
37 | #define VFIO_ASSERT_EQ(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, ==, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:4: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:323:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
323 | ioctl_assert(device->fd, VFIO_DEVICE_SET_IRQS, irq);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:30:2: note: expanded from macro 'ioctl_assert'
30 | VFIO_ASSERT_EQ(__ret, 0, "ioctl(%s, %s, %s) returned %d\n", #_fd, #_op, #_arg, __ret); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:37:37: note: expanded from macro 'VFIO_ASSERT_EQ'
37 | #define VFIO_ASSERT_EQ(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, ==, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:22: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:336:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
336 | ioctl_assert(device->fd, VFIO_DEVICE_SET_IRQS, &irq);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:30:2: note: expanded from macro 'ioctl_assert'
30 | VFIO_ASSERT_EQ(__ret, 0, "ioctl(%s, %s, %s) returned %d\n", #_fd, #_op, #_arg, __ret); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:37:37: note: expanded from macro 'VFIO_ASSERT_EQ'
37 | #define VFIO_ASSERT_EQ(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, ==, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:4: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:336:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
336 | ioctl_assert(device->fd, VFIO_DEVICE_SET_IRQS, &irq);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:30:2: note: expanded from macro 'ioctl_assert'
30 | VFIO_ASSERT_EQ(__ret, 0, "ioctl(%s, %s, %s) returned %d\n", #_fd, #_op, #_arg, __ret); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:37:37: note: expanded from macro 'VFIO_ASSERT_EQ'
37 | #define VFIO_ASSERT_EQ(_a, _b, ...) VFIO_ASSERT_OP(_a, _b, ==, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:32:22: note: expanded from macro 'VFIO_ASSERT_OP'
31 | fprintf(stderr, " Observed: %#lx %s %#lx\n", \
| ~~~~
32 | (u64)__lhs, #_op, (u64)__rhs); \
| ^~~~~~~~~~
tools/testing/selftests/vfio/lib/vfio_pci_device.c:342:2: warning: format specifies type 'unsigned long' but the argument has type 'u64' (aka 'unsigned long long') [-Wformat]
342 | VFIO_ASSERT_TRUE(index == VFIO_PCI_MSI_IRQ_INDEX ||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
343 | index == VFIO_PCI_MSIX_IRQ_INDEX,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
344 | "Unsupported IRQ index: %u\n", index);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:43:35: note: expanded from macro 'VFIO_ASSERT_TRUE'
43 | #define VFIO_ASSERT_TRUE(_a, ...) VFIO_ASSERT_NE(false, (_a), ##__VA_ARGS__)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
tools/testing/selftests/vfio/lib/include/vfio_util.h:38:37: note: expanded from macro 'VFIO_ASSERT_NE'
vim +249 tools/testing/selftests/vfio/lib/vfio_pci_device.c
ce0e3c403e00e9 Alex Mastro 2025-11-11 232
ce0e3c403e00e9 Alex Mastro 2025-11-11 233 iova_t iova_allocator_alloc(struct iova_allocator *allocator, size_t size)
ce0e3c403e00e9 Alex Mastro 2025-11-11 234 {
ce0e3c403e00e9 Alex Mastro 2025-11-11 235 VFIO_ASSERT_GT(size, 0, "Invalid size arg, zero\n");
ce0e3c403e00e9 Alex Mastro 2025-11-11 236 VFIO_ASSERT_EQ(size & (size - 1), 0, "Invalid size arg, non-power-of-2\n");
ce0e3c403e00e9 Alex Mastro 2025-11-11 237
ce0e3c403e00e9 Alex Mastro 2025-11-11 238 for (;;) {
ce0e3c403e00e9 Alex Mastro 2025-11-11 239 struct iommu_iova_range *range;
ce0e3c403e00e9 Alex Mastro 2025-11-11 240 iova_t iova, last;
ce0e3c403e00e9 Alex Mastro 2025-11-11 241
ce0e3c403e00e9 Alex Mastro 2025-11-11 242 VFIO_ASSERT_LT(allocator->range_idx, allocator->nranges,
ce0e3c403e00e9 Alex Mastro 2025-11-11 243 "IOVA allocator out of space\n");
ce0e3c403e00e9 Alex Mastro 2025-11-11 244
ce0e3c403e00e9 Alex Mastro 2025-11-11 245 range = &allocator->ranges[allocator->range_idx];
ce0e3c403e00e9 Alex Mastro 2025-11-11 246 iova = range->start + allocator->range_offset;
ce0e3c403e00e9 Alex Mastro 2025-11-11 247
ce0e3c403e00e9 Alex Mastro 2025-11-11 248 /* Check for sufficient space at the current offset */
ce0e3c403e00e9 Alex Mastro 2025-11-11 @249 if (check_add_overflow(iova, size - 1, &last) ||
ce0e3c403e00e9 Alex Mastro 2025-11-11 250 last > range->last)
ce0e3c403e00e9 Alex Mastro 2025-11-11 251 goto next_range;
ce0e3c403e00e9 Alex Mastro 2025-11-11 252
ce0e3c403e00e9 Alex Mastro 2025-11-11 253 /* Align iova to size */
ce0e3c403e00e9 Alex Mastro 2025-11-11 254 iova = last & ~(size - 1);
ce0e3c403e00e9 Alex Mastro 2025-11-11 255
ce0e3c403e00e9 Alex Mastro 2025-11-11 256 /* Check for sufficient space at the aligned iova */
ce0e3c403e00e9 Alex Mastro 2025-11-11 257 if (check_add_overflow(iova, size - 1, &last) ||
ce0e3c403e00e9 Alex Mastro 2025-11-11 258 last > range->last)
ce0e3c403e00e9 Alex Mastro 2025-11-11 259 goto next_range;
ce0e3c403e00e9 Alex Mastro 2025-11-11 260
ce0e3c403e00e9 Alex Mastro 2025-11-11 261 if (last == range->last) {
ce0e3c403e00e9 Alex Mastro 2025-11-11 262 allocator->range_idx++;
ce0e3c403e00e9 Alex Mastro 2025-11-11 263 allocator->range_offset = 0;
ce0e3c403e00e9 Alex Mastro 2025-11-11 264 } else {
ce0e3c403e00e9 Alex Mastro 2025-11-11 265 allocator->range_offset = last - range->start + 1;
ce0e3c403e00e9 Alex Mastro 2025-11-11 266 }
ce0e3c403e00e9 Alex Mastro 2025-11-11 267
ce0e3c403e00e9 Alex Mastro 2025-11-11 268 return iova;
ce0e3c403e00e9 Alex Mastro 2025-11-11 269
ce0e3c403e00e9 Alex Mastro 2025-11-11 270 next_range:
ce0e3c403e00e9 Alex Mastro 2025-11-11 271 allocator->range_idx++;
ce0e3c403e00e9 Alex Mastro 2025-11-11 272 allocator->range_offset = 0;
ce0e3c403e00e9 Alex Mastro 2025-11-11 273 }
ce0e3c403e00e9 Alex Mastro 2025-11-11 274 }
ce0e3c403e00e9 Alex Mastro 2025-11-11 275
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Powered by blists - more mailing lists