CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: "GNU/Weeb Mailing List" <g...@vger.gnuweeb.org> CC: linux-ker...@vger.kernel.org TO: Liam Mark <lm...@codeaurora.org> CC: Todd Kjos <tk...@google.com> CC: "Isaac J. Manjarres" <isa...@codeaurora.org> CC: Georgi Djakov <quic_c_gdj...@quicinc.com>
tree: https://github.com/ammarfaizi2/linux-block google/android/kernel/common/android13-5.15 head: 28b046777fb6eee7c4382a4272e6fa1f517d7038 commit: 150c882a3dd8f530eb425e8a264838131973a53f [5109/5372] FROMLIST: iommu/iova: Add a best-fit algorithm :::::: branch date: 21 hours ago :::::: commit date: 9 days ago config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220319/202203191211.fcb2dva5-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project a6e70e4056dff962ec634c5bd4f2f4105a0bef71) 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/ammarfaizi2/linux-block/commit/150c882a3dd8f530eb425e8a264838131973a53f git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block git fetch --no-tags ammarfaizi2-block google/android/kernel/common/android13-5.15 git checkout 150c882a3dd8f530eb425e8a264838131973a53f # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) ^ include/asm-generic/rwonce.h:60:2: note: expanded from macro 'WRITE_ONCE' compiletime_assert_rwonce_type(x); \ ^ include/asm-generic/rwonce.h:36:2: note: expanded from macro 'compiletime_assert_rwonce_type' compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:302:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ include/linux/skbuff.h:1961:2: note: Loop condition is false. Exiting loop WRITE_ONCE(prev->next, newsk); ^ include/asm-generic/rwonce.h:60:2: note: expanded from macro 'WRITE_ONCE' compiletime_assert_rwonce_type(x); \ ^ include/asm-generic/rwonce.h:36:2: note: expanded from macro 'compiletime_assert_rwonce_type' compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \ ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:300:2: note: expanded from macro '__compiletime_assert' do { \ ^ include/linux/skbuff.h:1961:2: note: Dereference of null pointer WRITE_ONCE(prev->next, newsk); ^ include/asm-generic/rwonce.h:61:2: note: expanded from macro 'WRITE_ONCE' __WRITE_ONCE(x, val); \ ^~~~~~~~~~~~~~~~~~~~ include/asm-generic/rwonce.h:55:30: note: expanded from macro '__WRITE_ONCE' *(volatile typeof(x) *)&(x) = (val); \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~ include/linux/skbuff.h:2067:2: warning: 2nd function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage] __skb_insert(newsk, next->prev, next, list); ^ net/tipc/bcast.c:565:2: note: Calling 'tipc_bcbase_xmit' tipc_bcbase_xmit(net, &xmitq); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/tipc/bcast.c:184:2: note: Taking false branch if (skb_queue_empty(xmitq)) ^ net/tipc/bcast.c:189:6: note: Assuming 'bearer_id' is < 0 if (bearer_id >= 0) { ^~~~~~~~~~~~~~ net/tipc/bcast.c:189:2: note: Taking false branch if (bearer_id >= 0) { ^ net/tipc/bcast.c:195:2: note: Calling '__skb_queue_head_init' __skb_queue_head_init(&_xmitq); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/tipc/bcast.c:195:2: note: Returning from '__skb_queue_head_init' __skb_queue_head_init(&_xmitq); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/tipc/bcast.c:196:2: note: Loop condition is true. Entering loop body for (bearer_id = 0; bearer_id < MAX_BEARERS; bearer_id++) { ^ net/tipc/bcast.c:197:7: note: Assuming the condition is false if (!bb->dests[bearer_id]) ^~~~~~~~~~~~~~~~~~~~~ net/tipc/bcast.c:197:3: note: Taking false branch if (!bb->dests[bearer_id]) ^ net/tipc/bcast.c:200:3: note: Loop condition is true. Entering loop body skb_queue_walk(xmitq, skb) { ^ include/linux/skbuff.h:3556:3: note: expanded from macro 'skb_queue_walk' for (skb = (queue)->next; \ ^ net/tipc/bcast.c:202:8: note: Assuming '_skb' is non-null if (!_skb) ^~~~~ net/tipc/bcast.c:202:4: note: Taking false branch if (!_skb) ^ net/tipc/bcast.c:204:4: note: Calling '__skb_queue_tail' __skb_queue_tail(&_xmitq, _skb); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/skbuff.h:2100:2: note: Calling '__skb_queue_before' __skb_queue_before(list, (struct sk_buff *)list, newsk); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/skbuff.h:2067:2: note: 2nd function call argument is an uninitialized value __skb_insert(newsk, next->prev, next, list); ^ ~~~~~~~~~~ Suppressed 10 warnings (10 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 5 warnings generated. >> drivers/iommu/iova.c:364:3: warning: Value stored to 'candidate_gap' is >> never read [clang-analyzer-deadcode.DeadStores] candidate_gap = gap; ^ ~~~ drivers/iommu/iova.c:364:3: note: Value stored to 'candidate_gap' is never read candidate_gap = gap; ^ ~~~ Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. drivers/gpu/vga/vgaarb.c:235:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = &vgadev->pdev->dev; ^~~ ~~~~~~~~~~~~~~~~~~ drivers/gpu/vga/vgaarb.c:235:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = &vgadev->pdev->dev; ^~~ ~~~~~~~~~~~~~~~~~~ drivers/gpu/vga/vgaarb.c:373:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = &vgadev->pdev->dev; ^~~ ~~~~~~~~~~~~~~~~~~ drivers/gpu/vga/vgaarb.c:373:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = &vgadev->pdev->dev; ^~~ ~~~~~~~~~~~~~~~~~~ Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 3 warnings generated. Suppressed 3 warnings (3 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. Suppressed 9 warnings (9 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. drivers/base/bus.c:873:18: warning: Access to field 'drivers_kset' results in a dereference of a null pointer (loaded from field 'p') [clang-analyzer-core.NullDereference] kset_unregister(bus->p->drivers_kset); ^ drivers/base/bus.c:1139:9: note: Calling 'subsys_register' return subsys_register(subsys, groups, &system_kset->kobj); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/base/bus.c:1083:8: note: Calling 'bus_register' err = bus_register(subsys); ^~~~~~~~~~~~~~~~~~~~ drivers/base/bus.c:788:6: note: Assuming 'priv' is non-null if (!priv) ^~~~~ drivers/base/bus.c:788:2: note: Taking false branch if (!priv) ^ drivers/base/bus.c:794:2: note: Loop condition is false. Exiting loop BLOCKING_INIT_NOTIFIER_HEAD(&priv->bus_notifier); ^ include/linux/notifier.h:85:3: note: expanded from macro 'BLOCKING_INIT_NOTIFIER_HEAD' init_rwsem(&(name)->rwsem); \ ^ include/linux/rwsem.h:123:30: note: expanded from macro 'init_rwsem' #define init_rwsem(sem) \ ^ drivers/base/bus.c:794:2: note: Loop condition is false. Exiting loop BLOCKING_INIT_NOTIFIER_HEAD(&priv->bus_notifier); ^ include/linux/notifier.h:84:43: note: expanded from macro 'BLOCKING_INIT_NOTIFIER_HEAD' #define BLOCKING_INIT_NOTIFIER_HEAD(name) do { \ ^ drivers/base/bus.c:797:6: note: Assuming 'retval' is not equal to 0 if (retval) ^~~~~~ drivers/base/bus.c:797:2: note: Taking true branch if (retval) ^ drivers/base/bus.c:798:3: note: Control jumps to line 853 goto out; ^ drivers/base/bus.c:854:2: note: Null pointer value stored to field 'p' bus->p = NULL; ^~~~~~~~~~~~~ drivers/base/bus.c:1083:8: note: Returning from 'bus_register' err = bus_register(subsys); ^~~~~~~~~~~~~~~~~~~~ drivers/base/bus.c:1084:6: note: Assuming 'err' is >= 0 if (err < 0) ^~~~~~~ drivers/base/bus.c:1084:2: note: Taking false branch if (err < 0) ^ drivers/base/bus.c:1088:6: note: Assuming 'dev' is null if (!dev) { ^~~~ drivers/base/bus.c:1088:2: note: Taking true branch if (!dev) { ^ drivers/base/bus.c:1090:3: note: Control jumps to line 1114 goto err_dev; ^ drivers/base/bus.c:1114:2: note: Calling 'bus_unregister' bus_unregister(subsys); ^~~~~~~~~~~~~~~~~~~~~~ drivers/base/bus.c:868:2: note: Taking false branch pr_debug("bus: '%s': unregistering\n", bus->name); ^ include/linux/printk.h:580:2: note: expanded from macro 'pr_debug' no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:131:2: note: expanded from macro 'no_printk' if (0) \ vim +/candidate_gap +364 drivers/iommu/iova.c f8de50eb6b0855 drivers/pci/iova.c Keshavamurthy, Anil S 2007-10-21 320 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 321 static int __alloc_and_insert_iova_best_fit(struct iova_domain *iovad, 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 322 unsigned long size, 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 323 unsigned long limit_pfn, 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 324 struct iova *new, bool size_aligned) 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 325 { 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 326 struct rb_node *curr, *prev; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 327 struct iova *curr_iova, *prev_iova; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 328 unsigned long flags; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 329 unsigned long align_mask = ~0UL; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 330 struct rb_node *candidate_rb_parent; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 331 unsigned long new_pfn, candidate_pfn = ~0UL; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 332 unsigned long gap, candidate_gap = ~0UL; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 333 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 334 if (size_aligned) 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 335 align_mask <<= limit_align_shift(iovad, fls_long(size - 1)); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 336 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 337 /* Walk the tree backwards */ 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 338 spin_lock_irqsave(&iovad->iova_rbtree_lock, flags); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 339 curr = &iovad->anchor.node; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 340 prev = rb_prev(curr); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 341 for (; prev; curr = prev, prev = rb_prev(curr)) { 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 342 curr_iova = rb_entry(curr, struct iova, node); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 343 prev_iova = rb_entry(prev, struct iova, node); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 344 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 345 limit_pfn = min(limit_pfn, curr_iova->pfn_lo); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 346 new_pfn = (limit_pfn - size) & align_mask; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 347 gap = curr_iova->pfn_lo - prev_iova->pfn_hi - 1; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 348 if ((limit_pfn >= size) && (new_pfn > prev_iova->pfn_hi) 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 349 && (gap < candidate_gap)) { 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 350 candidate_gap = gap; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 351 candidate_pfn = new_pfn; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 352 candidate_rb_parent = curr; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 353 if (gap == size) 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 354 goto insert; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 355 } 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 356 } 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 357 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 358 curr_iova = rb_entry(curr, struct iova, node); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 359 limit_pfn = min(limit_pfn, curr_iova->pfn_lo); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 360 new_pfn = (limit_pfn - size) & align_mask; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 361 gap = curr_iova->pfn_lo - iovad->start_pfn; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 362 if (limit_pfn >= size && new_pfn >= iovad->start_pfn && 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 363 gap < candidate_gap) { 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 @364 candidate_gap = gap; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 365 candidate_pfn = new_pfn; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 366 candidate_rb_parent = curr; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 367 } 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 368 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 369 insert: 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 370 if (candidate_pfn == ~0UL) { 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 371 spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 372 return -ENOMEM; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 373 } 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 374 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 375 /* pfn_lo will point to size aligned address if size_aligned is set */ 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 376 new->pfn_lo = candidate_pfn; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 377 new->pfn_hi = new->pfn_lo + size - 1; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 378 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 379 /* If we have 'prev', it's a valid place to start the insertion. */ 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 380 iova_insert_rbtree(&iovad->rbroot, new, candidate_rb_parent); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 381 spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags); 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 382 return 0; 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 383 } 150c882a3dd8f5 drivers/iommu/iova.c Liam Mark 2020-02-26 384 --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org