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

Reply via email to