All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-next:master 1184/3379] drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
@ 2021-07-27 14:44 kernel test robot
  2021-07-28  0:33   ` kernel test robot
  0 siblings, 1 reply; 4+ messages in thread
From: kernel test robot @ 2021-07-27 14:44 UTC (permalink / raw)
  To: kbuild

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

CC: clang-built-linux(a)googlegroups.com
CC: kbuild-all(a)lists.01.org
CC: Linux Memory Management List <linux-mm@kvack.org>
TO: "권오훈" <ohoono.kwon@samsung.com>
CC: Rob Herring <robh@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   2265c5286967c58db9a99ed1b74105977507e690
commit: eb7173988caf6fc68ef00065b9defb5ac3467f21 [1184/3379] of: fdt: remove unnecessary codes
:::::: branch date: 17 hours ago
:::::: commit date: 12 days ago
config: x86_64-randconfig-c001-20210726 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project c63dbd850182797bc4b76124d08e1c320ab2365d)
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
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=eb7173988caf6fc68ef00065b9defb5ac3467f21
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout eb7173988caf6fc68ef00065b9defb5ac3467f21
        # save the attached .config 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 <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                   ^
   drivers/mtd/chips/cfi_cmdset_0020.c:703:7: note: Assuming the condition is false
                   if (ECCBUF_DIV(elem_len)) { /* write clean aligned data */
                       ^
   drivers/mtd/chips/cfi_cmdset_0020.c:660:24: note: expanded from macro 'ECCBUF_DIV'
   #define ECCBUF_DIV(x) ((x) & ~(ECCBUF_SIZE - 1))
                          ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mtd/chips/cfi_cmdset_0020.c:703:3: note: Taking false branch
                   if (ECCBUF_DIV(elem_len)) { /* write clean aligned data */
                   ^
   drivers/mtd/chips/cfi_cmdset_0020.c:712:7: note: Assuming 'buflen' is not equal to 0
                   if (buflen) {
                       ^~~~~~
   drivers/mtd/chips/cfi_cmdset_0020.c:712:3: note: Taking true branch
                   if (buflen) {
                   ^
   drivers/mtd/chips/cfi_cmdset_0020.c:714:29: note: The right operand of '+' is a garbage value
                           memcpy(buffer, elem_base + thislen, buflen);
                                                    ^ ~~~~~~~
   drivers/mtd/chips/cfi_cmdset_0020.c:1035:16: warning: Value stored to 'timeo' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           unsigned long timeo = jiffies + HZ;
                         ^~~~~   ~~~~~~~~~~~~
   drivers/mtd/chips/cfi_cmdset_0020.c:1035:16: note: Value stored to 'timeo' during its initialization is never read
           unsigned long timeo = jiffies + HZ;
                         ^~~~~   ~~~~~~~~~~~~
   drivers/mtd/chips/cfi_cmdset_0020.c:1181:16: warning: Value stored to 'timeo' during its initialization is never read [clang-analyzer-deadcode.DeadStores]
           unsigned long timeo = jiffies + HZ;
                         ^~~~~   ~~~~~~~~~~~~
   drivers/mtd/chips/cfi_cmdset_0020.c:1181:16: note: Value stored to 'timeo' during its initialization is never read
           unsigned long timeo = jiffies + HZ;
                         ^~~~~   ~~~~~~~~~~~~
   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.
   4 warnings generated.
   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.
   4 warnings generated.
   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.
   2 warnings generated.
   Suppressed 2 warnings (2 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.
   2 warnings generated.
   Suppressed 2 warnings (2 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.
   4 warnings generated.
   drivers/nfc/st21nfca/i2c.c:321:4: warning: Value stored to 'i' is never read [clang-analyzer-deadcode.DeadStores]
                           i = 0;
                           ^   ~
   drivers/nfc/st21nfca/i2c.c:321:4: note: Value stored to 'i' is never read
                           i = 0;
                           ^   ~
   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.
   2 warnings generated.
   Suppressed 2 warnings (2 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.
   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.
   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.
   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.
   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.
   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.
   4 warnings generated.
   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.
   4 warnings generated.
   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.
   2 warnings generated.
   Suppressed 2 warnings (2 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.
   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.
   2 warnings generated.
   Suppressed 2 warnings (2 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.
>> drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
                           pprev      = &pp->next;
                           ^            ~~~~~~~~~
   drivers/of/fdt.c:196:4: note: Value stored to 'pprev' is never read
                           pprev      = &pp->next;
                           ^            ~~~~~~~~~
   Suppressed 2 warnings (2 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.
   4 warnings generated.
   drivers/of/irq.c:567:2: warning: Dereference of null pointer [clang-analyzer-core.NullDereference]
           list_for_each_entry_safe(desc, temp_desc, &intc_parent_list, list) {
           ^
   include/linux/list.h:716:7: note: expanded from macro 'list_for_each_entry_safe'
                   n = list_next_entry(pos, member);                       \
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:555:2: note: expanded from macro 'list_next_entry'
           list_entry((pos)->member.next, typeof(*(pos)), member)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:494:25: note: expanded from macro 'container_of'
           void *__mptr = (void *)(ptr);                                   \
                                  ^~~~~
   drivers/of/irq.c:489:2: note: Loop condition is true.  Entering loop body
           for_each_matching_node_and_match(np, matches, &match) {
           ^
   include/linux/of.h:1292:2: note: expanded from macro 'for_each_matching_node_and_match'
           for (dn = of_find_matching_node_and_match(NULL, matches, match); \
           ^
   drivers/of/irq.c:490:8: note: Calling 'of_property_read_bool'
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/of.h:1230:9: note: Assuming 'prop' is non-null
           return prop ? true : false;
                  ^~~~
   include/linux/of.h:1230:9: note: '?' condition is true
   include/linux/of.h:1230:2: note: Returning the value 1, which participates in a condition later
           return prop ? true : false;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:490:8: note: Returning from 'of_property_read_bool'
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:490:7: note: Left side of '||' is false
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                       ^
   drivers/of/irq.c:491:5: note: Assuming the condition is false
                                   !of_device_is_available(np))
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:490:3: note: Taking false branch
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                   ^
   drivers/of/irq.c:494:12: note: Assuming field 'data' is non-null
                   if (WARN(!match->data, "of_irq_init: no init function for %s\n",
                            ^
   include/asm-generic/bug.h:130:25: note: expanded from macro 'WARN'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   drivers/of/irq.c:494:7: note: Taking false branch
                   if (WARN(!match->data, "of_irq_init: no init function for %s\n",
                       ^
   include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN'
           if (unlikely(__ret_warn_on))                                    \
           ^
   drivers/of/irq.c:494:3: note: Taking false branch
                   if (WARN(!match->data, "of_irq_init: no init function for %s\n",
                   ^
   drivers/of/irq.c:502:10: note: Calling 'kzalloc'
                   desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:9: note: Calling 'kmalloc'
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:579:2: note: Taking false branch
           if (__builtin_constant_p(size)) {
           ^
   include/linux/slab.h:596:2: note: Returning pointer, which participates in a condition later
           return __kmalloc(size, flags);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:9: note: Returning from 'kmalloc'
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:2: note: Returning pointer, which participates in a condition later
           return kmalloc(size, flags | __GFP_ZERO);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:502:10: note: Returning from 'kzalloc'
                   desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:503:7: note: Assuming 'desc' is non-null
                   if (!desc) {
                       ^~~~~
   drivers/of/irq.c:503:3: note: Taking false branch
                   if (!desc) {
                   ^
   drivers/of/irq.c:511:33: note: 'np' is not equal to field 'interrupt_parent'
                   if (desc->interrupt_parent == np)
                                                 ^~
   drivers/of/irq.c:511:3: note: Taking false branch

vim +/pprev +196 drivers/of/fdt.c

bbd33931a08362 Grant Likely 2009-11-23  106  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  107  static void populate_properties(const void *blob,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  108  				int offset,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  109  				void **mem,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  110  				struct device_node *np,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  111  				const char *nodename,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  112  				bool dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  113  {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  114  	struct property *pp, **pprev = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  115  	int cur;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  116  	bool has_name = false;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  117  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  118  	pprev = &np->properties;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  119  	for (cur = fdt_first_property_offset(blob, offset);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  120  	     cur >= 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  121  	     cur = fdt_next_property_offset(blob, cur)) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  122  		const __be32 *val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  123  		const char *pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  124  		u32 sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  125  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  126  		val = fdt_getprop_by_offset(blob, cur, &pname, &sz);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  127  		if (!val) {
606ad42aa3b1fe Rob Herring  2016-06-15  128  			pr_warn("Cannot locate property at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  129  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  130  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  131  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  132  		if (!pname) {
606ad42aa3b1fe Rob Herring  2016-06-15  133  			pr_warn("Cannot find property name at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  134  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  135  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  136  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  137  		if (!strcmp(pname, "name"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  138  			has_name = true;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  139  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  140  		pp = unflatten_dt_alloc(mem, sizeof(struct property),
dfbd4c6eff35f1 Gavin Shan   2016-05-03  141  					__alignof__(struct property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  142  		if (dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  143  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  144  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  145  		/* We accept flattened tree phandles either in
dfbd4c6eff35f1 Gavin Shan   2016-05-03  146  		 * ePAPR-style "phandle" properties, or the
dfbd4c6eff35f1 Gavin Shan   2016-05-03  147  		 * legacy "linux,phandle" properties.  If both
dfbd4c6eff35f1 Gavin Shan   2016-05-03  148  		 * appear and have different values, things
dfbd4c6eff35f1 Gavin Shan   2016-05-03  149  		 * will get weird. Don't do that.
bbd33931a08362 Grant Likely 2009-11-23  150  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  151  		if (!strcmp(pname, "phandle") ||
dfbd4c6eff35f1 Gavin Shan   2016-05-03  152  		    !strcmp(pname, "linux,phandle")) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  153  			if (!np->phandle)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  154  				np->phandle = be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  155  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  156  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  157  		/* And we process the "ibm,phandle" property
dfbd4c6eff35f1 Gavin Shan   2016-05-03  158  		 * used in pSeries dynamic device tree
dfbd4c6eff35f1 Gavin Shan   2016-05-03  159  		 * stuff
dfbd4c6eff35f1 Gavin Shan   2016-05-03  160  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  161  		if (!strcmp(pname, "ibm,phandle"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  162  			np->phandle = be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  163  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  164  		pp->name   = (char *)pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  165  		pp->length = sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  166  		pp->value  = (__be32 *)val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  167  		*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  168  		pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  169  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  170  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  171  	/* With version 0x10 we may not have the name property,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  172  	 * recreate it here from the unit name if absent
dfbd4c6eff35f1 Gavin Shan   2016-05-03  173  	 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  174  	if (!has_name) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  175  		const char *p = nodename, *ps = p, *pa = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  176  		int len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  177  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  178  		while (*p) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  179  			if ((*p) == '@')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  180  				pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  181  			else if ((*p) == '/')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  182  				ps = p + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  183  			p++;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  184  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  185  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  186  		if (pa < ps)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  187  			pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  188  		len = (pa - ps) + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  189  		pp = unflatten_dt_alloc(mem, sizeof(struct property) + len,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  190  					__alignof__(struct property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  191  		if (!dryrun) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  192  			pp->name   = "name";
dfbd4c6eff35f1 Gavin Shan   2016-05-03  193  			pp->length = len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  194  			pp->value  = pp + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  195  			*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03 @196  			pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  197  			memcpy(pp->value, ps, len - 1);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  198  			((char *)pp->value)[len - 1] = 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  199  			pr_debug("fixed up name for %s -> %s\n",
dfbd4c6eff35f1 Gavin Shan   2016-05-03  200  				 nodename, (char *)pp->value);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  201  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  202  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  203  }
dfbd4c6eff35f1 Gavin Shan   2016-05-03  204  

:::::: The code at line 196 was first introduced by commit
:::::: dfbd4c6eff35f1b1065cca046003cc9d7ff27222 drivers/of: Split unflatten_dt_node()

:::::: TO: Gavin Shan <gwshan@linux.vnet.ibm.com>
:::::: CC: Rob Herring <robh@kernel.org>

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

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Fwd: [kbuild] [linux-next:master 1184/3379] drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
  2021-07-27 14:44 [linux-next:master 1184/3379] drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores] kernel test robot
@ 2021-07-28  0:33   ` kernel test robot
  0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-07-28  0:33 UTC (permalink / raw)
  To: 권오훈
  Cc: clang-built-linux, kbuild-all, Linux Memory Management List, Rob Herring

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


tree: 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   2265c5286967c58db9a99ed1b74105977507e690
commit: eb7173988caf6fc68ef00065b9defb5ac3467f21 [1184/3379] of: fdt: 
remove unnecessary codes
config: x86_64-randconfig-c001-20210726 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 
c63dbd850182797bc4b76124d08e1c320ab2365d)
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
         # install x86_64 cross compiling tool for clang build
         # apt-get install binutils-x86-64-linux-gnu
         # 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=eb7173988caf6fc68ef00065b9defb5ac3467f21
         git remote add linux-next 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
         git fetch --no-tags linux-next master
         git checkout eb7173988caf6fc68ef00065b9defb5ac3467f21
         # save the attached .config 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 <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                    ^
    drivers/mtd/chips/cfi_cmdset_0020.c:703:7: note: Assuming the 
condition is false
                    if (ECCBUF_DIV(elem_len)) { /* write clean aligned 
data */
                        ^
    drivers/mtd/chips/cfi_cmdset_0020.c:660:24: note: expanded from 
macro 'ECCBUF_DIV'
    #define ECCBUF_DIV(x) ((x) & ~(ECCBUF_SIZE - 1))
                           ^~~~~~~~~~~~~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:703:3: note: Taking false branch
                    if (ECCBUF_DIV(elem_len)) { /* write clean aligned 
data */
                    ^
    drivers/mtd/chips/cfi_cmdset_0020.c:712:7: note: Assuming 'buflen' 
is not equal to 0
                    if (buflen) {
                        ^~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:712:3: note: Taking true branch
                    if (buflen) {
                    ^
    drivers/mtd/chips/cfi_cmdset_0020.c:714:29: note: The right operand 
of '+' is a garbage value
                            memcpy(buffer, elem_base + thislen, buflen);
                                                     ^ ~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1035:16: warning: Value stored 
to 'timeo' during its initialization is never read 
[clang-analyzer-deadcode.DeadStores]
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1035:16: note: Value stored to 
'timeo' during its initialization is never read
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1181:16: warning: Value stored 
to 'timeo' during its initialization is never read 
[clang-analyzer-deadcode.DeadStores]
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1181:16: note: Value stored to 
'timeo' during its initialization is never read
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    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.
    4 warnings generated.
    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.
    4 warnings generated.
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    4 warnings generated.
    drivers/nfc/st21nfca/i2c.c:321:4: warning: Value stored to 'i' is 
never read [clang-analyzer-deadcode.DeadStores]
                            i = 0;
                            ^   ~
    drivers/nfc/st21nfca/i2c.c:321:4: note: Value stored to 'i' is never 
read
                            i = 0;
                            ^   ~
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    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.
    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.
    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.
    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.
    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.
    4 warnings generated.
    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.
    4 warnings generated.
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
>> drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
                            pprev      = &pp->next;
                            ^            ~~~~~~~~~
    drivers/of/fdt.c:196:4: note: Value stored to 'pprev' is never read
                            pprev      = &pp->next;
                            ^            ~~~~~~~~~
    Suppressed 2 warnings (2 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.
    4 warnings generated.
    drivers/of/irq.c:567:2: warning: Dereference of null pointer 
[clang-analyzer-core.NullDereference]
            list_for_each_entry_safe(desc, temp_desc, &intc_parent_list, 
list) {
            ^
    include/linux/list.h:716:7: note: expanded from macro 
'list_for_each_entry_safe'
                    n = list_next_entry(pos, member); 
     \
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/list.h:555:2: note: expanded from macro 'list_next_entry'
            list_entry((pos)->member.next, typeof(*(pos)), member)
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/list.h:511:2: note: expanded from macro 'list_entry'
            container_of(ptr, type, member)
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/kernel.h:494:25: note: expanded from macro 'container_of'
            void *__mptr = (void *)(ptr); 
     \
                                   ^~~~~
    drivers/of/irq.c:489:2: note: Loop condition is true.  Entering loop 
body
            for_each_matching_node_and_match(np, matches, &match) {
            ^
    include/linux/of.h:1292:2: note: expanded from macro 
'for_each_matching_node_and_match'
            for (dn = of_find_matching_node_and_match(NULL, matches, 
match); \
            ^
    drivers/of/irq.c:490:8: note: Calling 'of_property_read_bool'
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/of.h:1230:9: note: Assuming 'prop' is non-null
            return prop ? true : false;
                   ^~~~
    include/linux/of.h:1230:9: note: '?' condition is true
    include/linux/of.h:1230:2: note: Returning the value 1, which 
participates in a condition later
            return prop ? true : false;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:490:8: note: Returning from 'of_property_read_bool'
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:490:7: note: Left side of '||' is false
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                        ^
    drivers/of/irq.c:491:5: note: Assuming the condition is false
                                    !of_device_is_available(np))
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:490:3: note: Taking false branch
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                    ^
    drivers/of/irq.c:494:12: note: Assuming field 'data' is non-null
                    if (WARN(!match->data, "of_irq_init: no init 
function for %s\n",
                             ^
    include/asm-generic/bug.h:130:25: note: expanded from macro 'WARN'
            int __ret_warn_on = !!(condition); 
     \
                                   ^~~~~~~~~
    drivers/of/irq.c:494:7: note: Taking false branch
                    if (WARN(!match->data, "of_irq_init: no init 
function for %s\n",
                        ^
    include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN'
            if (unlikely(__ret_warn_on)) 
     \
            ^
    drivers/of/irq.c:494:3: note: Taking false branch
                    if (WARN(!match->data, "of_irq_init: no init 
function for %s\n",
                    ^
    drivers/of/irq.c:502:10: note: Calling 'kzalloc'
                    desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:721:9: note: Calling 'kmalloc'
            return kmalloc(size, flags | __GFP_ZERO);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:579:2: note: Taking false branch
            if (__builtin_constant_p(size)) {
            ^
    include/linux/slab.h:596:2: note: Returning pointer, which 
participates in a condition later
            return __kmalloc(size, flags);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:721:9: note: Returning from 'kmalloc'
            return kmalloc(size, flags | __GFP_ZERO);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:721:2: note: Returning pointer, which 
participates in a condition later
            return kmalloc(size, flags | __GFP_ZERO);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:502:10: note: Returning from 'kzalloc'
                    desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:503:7: note: Assuming 'desc' is non-null
                    if (!desc) {
                        ^~~~~
    drivers/of/irq.c:503:3: note: Taking false branch
                    if (!desc) {
                    ^
    drivers/of/irq.c:511:33: note: 'np' is not equal to field 
'interrupt_parent'
                    if (desc->interrupt_parent == np)
                                                  ^~
    drivers/of/irq.c:511:3: note: Taking false branch

vim +/pprev +196 drivers/of/fdt.c

bbd33931a08362 Grant Likely 2009-11-23  106  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  107  static void populate_properties(const void *blob,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  108  				int offset,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  109  				void **mem,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  110  				struct device_node *np,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  111  				const char *nodename,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  112  				bool dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  113  {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  114  	struct property *pp, 
**pprev = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  115  	int cur;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  116  	bool has_name = false;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  117  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  118  	pprev = &np->properties;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  119  	for (cur = 
fdt_first_property_offset(blob, offset);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  120  	     cur >= 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  121  	     cur = 
fdt_next_property_offset(blob, cur)) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  122  		const __be32 *val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  123  		const char *pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  124  		u32 sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  125  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  126  		val = fdt_getprop_by_offset(blob, cur, &pname, &sz);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  127  		if (!val) {
606ad42aa3b1fe Rob Herring  2016-06-15  128  			pr_warn("Cannot locate 
property at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  129  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  130  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  131  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  132  		if (!pname) {
606ad42aa3b1fe Rob Herring  2016-06-15  133  			pr_warn("Cannot find 
property name at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  134  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  135  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  136  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  137  		if (!strcmp(pname, "name"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  138  			has_name = true;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  139  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  140  		pp = unflatten_dt_alloc(mem, sizeof(struct property),
dfbd4c6eff35f1 Gavin Shan   2016-05-03  141  					__alignof__(struct 
property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  142  		if (dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  143  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  144  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  145  		/* We accept flattened tree phandles either in
dfbd4c6eff35f1 Gavin Shan   2016-05-03  146  		 * ePAPR-style "phandle" 
properties, or the
dfbd4c6eff35f1 Gavin Shan   2016-05-03  147  		 * legacy "linux,phandle" 
properties.  If both
dfbd4c6eff35f1 Gavin Shan   2016-05-03  148  		 * appear and have 
different values, things
dfbd4c6eff35f1 Gavin Shan   2016-05-03  149  		 * will get weird. Don't 
do that.
bbd33931a08362 Grant Likely 2009-11-23  150  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  151  		if (!strcmp(pname, 
"phandle") ||
dfbd4c6eff35f1 Gavin Shan   2016-05-03  152  		    !strcmp(pname, 
"linux,phandle")) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  153  			if (!np->phandle)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  154  				np->phandle = 
be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  155  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  156  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  157  		/* And we process the "ibm,phandle" property
dfbd4c6eff35f1 Gavin Shan   2016-05-03  158  		 * used in pSeries 
dynamic device tree
dfbd4c6eff35f1 Gavin Shan   2016-05-03  159  		 * stuff
dfbd4c6eff35f1 Gavin Shan   2016-05-03  160  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  161  		if (!strcmp(pname, 
"ibm,phandle"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  162  			np->phandle = 
be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  163  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  164  		pp->name   = (char *)pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  165  		pp->length = sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  166  		pp->value  = (__be32 *)val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  167  		*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  168  		pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  169  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  170  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  171  	/* With version 0x10 we may not have the name property,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  172  	 * recreate it here from 
the unit name if absent
dfbd4c6eff35f1 Gavin Shan   2016-05-03  173  	 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  174  	if (!has_name) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  175  		const char *p = nodename, 
*ps = p, *pa = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  176  		int len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  177  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  178  		while (*p) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  179  			if ((*p) == '@')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  180  				pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  181  			else if ((*p) == '/')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  182  				ps = p + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  183  			p++;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  184  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  185  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  186  		if (pa < ps)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  187  			pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  188  		len = (pa - ps) + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  189  		pp = 
unflatten_dt_alloc(mem, sizeof(struct property) + len,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  190  					__alignof__(struct 
property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  191  		if (!dryrun) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  192  			pp->name   = "name";
dfbd4c6eff35f1 Gavin Shan   2016-05-03  193  			pp->length = len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  194  			pp->value  = pp + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  195  			*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03 @196  			pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  197  			memcpy(pp->value, ps, 
len - 1);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  198  			((char *)pp->value)[len 
- 1] = 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  199  			pr_debug("fixed up name 
for %s -> %s\n",
dfbd4c6eff35f1 Gavin Shan   2016-05-03  200  				 nodename, (char 
*)pp->value);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  201  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  202  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  203  }
dfbd4c6eff35f1 Gavin Shan   2016-05-03  204
:::::: The code at line 196 was first introduced by commit
:::::: dfbd4c6eff35f1b1065cca046003cc9d7ff27222 drivers/of: Split 
unflatten_dt_node()

:::::: TO: Gavin Shan <gwshan@linux.vnet.ibm.com>
:::::: CC: Rob Herring <robh@kernel.org>

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


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

[-- Attachment #3: Attached Message Part --]
[-- Type: text/plain, Size: 154 bytes --]

_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-leave@lists.01.org


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Fwd: [kbuild] [linux-next:master 1184/3379] drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
@ 2021-07-28  0:33   ` kernel test robot
  0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-07-28  0:33 UTC (permalink / raw)
  To: kbuild-all

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


tree: 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   2265c5286967c58db9a99ed1b74105977507e690
commit: eb7173988caf6fc68ef00065b9defb5ac3467f21 [1184/3379] of: fdt: 
remove unnecessary codes
config: x86_64-randconfig-c001-20210726 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 
c63dbd850182797bc4b76124d08e1c320ab2365d)
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
         # install x86_64 cross compiling tool for clang build
         # apt-get install binutils-x86-64-linux-gnu
         # 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=eb7173988caf6fc68ef00065b9defb5ac3467f21
         git remote add linux-next 
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
         git fetch --no-tags linux-next master
         git checkout eb7173988caf6fc68ef00065b9defb5ac3467f21
         # save the attached .config 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 <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
                    ^
    drivers/mtd/chips/cfi_cmdset_0020.c:703:7: note: Assuming the 
condition is false
                    if (ECCBUF_DIV(elem_len)) { /* write clean aligned 
data */
                        ^
    drivers/mtd/chips/cfi_cmdset_0020.c:660:24: note: expanded from 
macro 'ECCBUF_DIV'
    #define ECCBUF_DIV(x) ((x) & ~(ECCBUF_SIZE - 1))
                           ^~~~~~~~~~~~~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:703:3: note: Taking false branch
                    if (ECCBUF_DIV(elem_len)) { /* write clean aligned 
data */
                    ^
    drivers/mtd/chips/cfi_cmdset_0020.c:712:7: note: Assuming 'buflen' 
is not equal to 0
                    if (buflen) {
                        ^~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:712:3: note: Taking true branch
                    if (buflen) {
                    ^
    drivers/mtd/chips/cfi_cmdset_0020.c:714:29: note: The right operand 
of '+' is a garbage value
                            memcpy(buffer, elem_base + thislen, buflen);
                                                     ^ ~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1035:16: warning: Value stored 
to 'timeo' during its initialization is never read 
[clang-analyzer-deadcode.DeadStores]
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1035:16: note: Value stored to 
'timeo' during its initialization is never read
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1181:16: warning: Value stored 
to 'timeo' during its initialization is never read 
[clang-analyzer-deadcode.DeadStores]
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    drivers/mtd/chips/cfi_cmdset_0020.c:1181:16: note: Value stored to 
'timeo' during its initialization is never read
            unsigned long timeo = jiffies + HZ;
                          ^~~~~   ~~~~~~~~~~~~
    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.
    4 warnings generated.
    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.
    4 warnings generated.
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    4 warnings generated.
    drivers/nfc/st21nfca/i2c.c:321:4: warning: Value stored to 'i' is 
never read [clang-analyzer-deadcode.DeadStores]
                            i = 0;
                            ^   ~
    drivers/nfc/st21nfca/i2c.c:321:4: note: Value stored to 'i' is never 
read
                            i = 0;
                            ^   ~
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    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.
    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.
    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.
    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.
    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.
    4 warnings generated.
    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.
    4 warnings generated.
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
    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.
    2 warnings generated.
    Suppressed 2 warnings (2 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.
>> drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
                            pprev      = &pp->next;
                            ^            ~~~~~~~~~
    drivers/of/fdt.c:196:4: note: Value stored to 'pprev' is never read
                            pprev      = &pp->next;
                            ^            ~~~~~~~~~
    Suppressed 2 warnings (2 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.
    4 warnings generated.
    drivers/of/irq.c:567:2: warning: Dereference of null pointer 
[clang-analyzer-core.NullDereference]
            list_for_each_entry_safe(desc, temp_desc, &intc_parent_list, 
list) {
            ^
    include/linux/list.h:716:7: note: expanded from macro 
'list_for_each_entry_safe'
                    n = list_next_entry(pos, member); 
     \
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/list.h:555:2: note: expanded from macro 'list_next_entry'
            list_entry((pos)->member.next, typeof(*(pos)), member)
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/list.h:511:2: note: expanded from macro 'list_entry'
            container_of(ptr, type, member)
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/kernel.h:494:25: note: expanded from macro 'container_of'
            void *__mptr = (void *)(ptr); 
     \
                                   ^~~~~
    drivers/of/irq.c:489:2: note: Loop condition is true.  Entering loop 
body
            for_each_matching_node_and_match(np, matches, &match) {
            ^
    include/linux/of.h:1292:2: note: expanded from macro 
'for_each_matching_node_and_match'
            for (dn = of_find_matching_node_and_match(NULL, matches, 
match); \
            ^
    drivers/of/irq.c:490:8: note: Calling 'of_property_read_bool'
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/of.h:1230:9: note: Assuming 'prop' is non-null
            return prop ? true : false;
                   ^~~~
    include/linux/of.h:1230:9: note: '?' condition is true
    include/linux/of.h:1230:2: note: Returning the value 1, which 
participates in a condition later
            return prop ? true : false;
            ^~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:490:8: note: Returning from 'of_property_read_bool'
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:490:7: note: Left side of '||' is false
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                        ^
    drivers/of/irq.c:491:5: note: Assuming the condition is false
                                    !of_device_is_available(np))
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:490:3: note: Taking false branch
                    if (!of_property_read_bool(np, 
"interrupt-controller") ||
                    ^
    drivers/of/irq.c:494:12: note: Assuming field 'data' is non-null
                    if (WARN(!match->data, "of_irq_init: no init 
function for %s\n",
                             ^
    include/asm-generic/bug.h:130:25: note: expanded from macro 'WARN'
            int __ret_warn_on = !!(condition); 
     \
                                   ^~~~~~~~~
    drivers/of/irq.c:494:7: note: Taking false branch
                    if (WARN(!match->data, "of_irq_init: no init 
function for %s\n",
                        ^
    include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN'
            if (unlikely(__ret_warn_on)) 
     \
            ^
    drivers/of/irq.c:494:3: note: Taking false branch
                    if (WARN(!match->data, "of_irq_init: no init 
function for %s\n",
                    ^
    drivers/of/irq.c:502:10: note: Calling 'kzalloc'
                    desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:721:9: note: Calling 'kmalloc'
            return kmalloc(size, flags | __GFP_ZERO);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:579:2: note: Taking false branch
            if (__builtin_constant_p(size)) {
            ^
    include/linux/slab.h:596:2: note: Returning pointer, which 
participates in a condition later
            return __kmalloc(size, flags);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:721:9: note: Returning from 'kmalloc'
            return kmalloc(size, flags | __GFP_ZERO);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    include/linux/slab.h:721:2: note: Returning pointer, which 
participates in a condition later
            return kmalloc(size, flags | __GFP_ZERO);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:502:10: note: Returning from 'kzalloc'
                    desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/of/irq.c:503:7: note: Assuming 'desc' is non-null
                    if (!desc) {
                        ^~~~~
    drivers/of/irq.c:503:3: note: Taking false branch
                    if (!desc) {
                    ^
    drivers/of/irq.c:511:33: note: 'np' is not equal to field 
'interrupt_parent'
                    if (desc->interrupt_parent == np)
                                                  ^~
    drivers/of/irq.c:511:3: note: Taking false branch

vim +/pprev +196 drivers/of/fdt.c

bbd33931a08362 Grant Likely 2009-11-23  106  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  107  static void populate_properties(const void *blob,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  108  				int offset,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  109  				void **mem,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  110  				struct device_node *np,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  111  				const char *nodename,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  112  				bool dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  113  {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  114  	struct property *pp, 
**pprev = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  115  	int cur;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  116  	bool has_name = false;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  117  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  118  	pprev = &np->properties;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  119  	for (cur = 
fdt_first_property_offset(blob, offset);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  120  	     cur >= 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  121  	     cur = 
fdt_next_property_offset(blob, cur)) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  122  		const __be32 *val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  123  		const char *pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  124  		u32 sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  125  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  126  		val = fdt_getprop_by_offset(blob, cur, &pname, &sz);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  127  		if (!val) {
606ad42aa3b1fe Rob Herring  2016-06-15  128  			pr_warn("Cannot locate 
property at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  129  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  130  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  131  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  132  		if (!pname) {
606ad42aa3b1fe Rob Herring  2016-06-15  133  			pr_warn("Cannot find 
property name at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  134  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  135  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  136  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  137  		if (!strcmp(pname, "name"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  138  			has_name = true;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  139  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  140  		pp = unflatten_dt_alloc(mem, sizeof(struct property),
dfbd4c6eff35f1 Gavin Shan   2016-05-03  141  					__alignof__(struct 
property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  142  		if (dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  143  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  144  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  145  		/* We accept flattened tree phandles either in
dfbd4c6eff35f1 Gavin Shan   2016-05-03  146  		 * ePAPR-style "phandle" 
properties, or the
dfbd4c6eff35f1 Gavin Shan   2016-05-03  147  		 * legacy "linux,phandle" 
properties.  If both
dfbd4c6eff35f1 Gavin Shan   2016-05-03  148  		 * appear and have 
different values, things
dfbd4c6eff35f1 Gavin Shan   2016-05-03  149  		 * will get weird. Don't 
do that.
bbd33931a08362 Grant Likely 2009-11-23  150  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  151  		if (!strcmp(pname, 
"phandle") ||
dfbd4c6eff35f1 Gavin Shan   2016-05-03  152  		    !strcmp(pname, 
"linux,phandle")) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  153  			if (!np->phandle)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  154  				np->phandle = 
be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  155  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  156  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  157  		/* And we process the "ibm,phandle" property
dfbd4c6eff35f1 Gavin Shan   2016-05-03  158  		 * used in pSeries 
dynamic device tree
dfbd4c6eff35f1 Gavin Shan   2016-05-03  159  		 * stuff
dfbd4c6eff35f1 Gavin Shan   2016-05-03  160  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  161  		if (!strcmp(pname, 
"ibm,phandle"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  162  			np->phandle = 
be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  163  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  164  		pp->name   = (char *)pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  165  		pp->length = sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  166  		pp->value  = (__be32 *)val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  167  		*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  168  		pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  169  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  170  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  171  	/* With version 0x10 we may not have the name property,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  172  	 * recreate it here from 
the unit name if absent
dfbd4c6eff35f1 Gavin Shan   2016-05-03  173  	 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  174  	if (!has_name) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  175  		const char *p = nodename, 
*ps = p, *pa = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  176  		int len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  177  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  178  		while (*p) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  179  			if ((*p) == '@')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  180  				pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  181  			else if ((*p) == '/')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  182  				ps = p + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  183  			p++;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  184  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  185  dfbd4c6eff35f1 Gavin Shan 
  2016-05-03  186  		if (pa < ps)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  187  			pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  188  		len = (pa - ps) + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  189  		pp = 
unflatten_dt_alloc(mem, sizeof(struct property) + len,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  190  					__alignof__(struct 
property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  191  		if (!dryrun) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  192  			pp->name   = "name";
dfbd4c6eff35f1 Gavin Shan   2016-05-03  193  			pp->length = len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  194  			pp->value  = pp + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  195  			*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03 @196  			pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  197  			memcpy(pp->value, ps, 
len - 1);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  198  			((char *)pp->value)[len 
- 1] = 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  199  			pr_debug("fixed up name 
for %s -> %s\n",
dfbd4c6eff35f1 Gavin Shan   2016-05-03  200  				 nodename, (char 
*)pp->value);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  201  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  202  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  203  }
dfbd4c6eff35f1 Gavin Shan   2016-05-03  204
:::::: The code at line 196 was first introduced by commit
:::::: dfbd4c6eff35f1b1065cca046003cc9d7ff27222 drivers/of: Split 
unflatten_dt_node()

:::::: TO: Gavin Shan <gwshan@linux.vnet.ibm.com>
:::::: CC: Rob Herring <robh@kernel.org>

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


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

[-- Attachment #3: AttachedMessagePart.ksh --]
[-- Type: text/plain, Size: 154 bytes --]

_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-leave@lists.01.org


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [linux-next:master 1184/3379] drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
@ 2021-07-27  0:32 kernel test robot
  0 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2021-07-27  0:32 UTC (permalink / raw)
  To: kbuild

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

CC: kbuild-all(a)lists.01.org
CC: Linux Memory Management List <linux-mm@kvack.org>
TO: "권오훈" <ohoono.kwon@samsung.com>
CC: Rob Herring <robh@kernel.org>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head:   2265c5286967c58db9a99ed1b74105977507e690
commit: eb7173988caf6fc68ef00065b9defb5ac3467f21 [1184/3379] of: fdt: remove unnecessary codes
:::::: branch date: 3 hours ago
:::::: commit date: 11 days ago
config: x86_64-randconfig-c001-20210726 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project c63dbd850182797bc4b76124d08e1c320ab2365d)
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
        # install x86_64 cross compiling tool for clang build
        # apt-get install binutils-x86-64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=eb7173988caf6fc68ef00065b9defb5ac3467f21
        git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
        git fetch --no-tags linux-next master
        git checkout eb7173988caf6fc68ef00065b9defb5ac3467f21
        # save the attached .config 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 <lkp@intel.com>


clang-analyzer warnings: (new ones prefixed by >>)
   drivers/leds/leds-pwm.c:143:2: note: Taking false branch
           if (!count)
           ^
   drivers/leds/leds-pwm.c:148:6: note: Assuming 'priv' is non-null
           if (!priv)
               ^~~~~
   drivers/leds/leds-pwm.c:148:2: note: Taking false branch
           if (!priv)
           ^
   drivers/leds/leds-pwm.c:151:8: note: Calling 'led_pwm_create_fwnode'
           ret = led_pwm_create_fwnode(&pdev->dev, priv);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/leds/leds-pwm.c:108:2: note: Loop condition is true.  Entering loop body
           device_for_each_child_node(dev, fwnode) {
           ^
   include/linux/property.h:111:2: note: expanded from macro 'device_for_each_child_node'
           for (child = device_get_next_child_node(dev, NULL); child;      \
           ^
   drivers/leds/leds-pwm.c:110:7: note: Assuming 'ret' is not equal to 0
                   if (ret && is_of_node(fwnode))
                       ^~~
   drivers/leds/leds-pwm.c:110:7: note: Left side of '&&' is true
   drivers/leds/leds-pwm.c:110:14: note: Assuming the condition is true
                   if (ret && is_of_node(fwnode))
                              ^~~~~~~~~~~~~~~~~~
   drivers/leds/leds-pwm.c:110:3: note: Taking true branch
                   if (ret && is_of_node(fwnode))
                   ^
   drivers/leds/leds-pwm.c:111:15: note: Assuming the condition is false
                           led.name = to_of_node(fwnode)->name;
                                      ^
   include/linux/of.h:164:3: note: expanded from macro 'to_of_node'
                   is_of_node(__to_of_node_fwnode) ?                       \
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/leds/leds-pwm.c:111:15: note: '?' condition is false
                           led.name = to_of_node(fwnode)->name;
                                      ^
   include/linux/of.h:164:3: note: expanded from macro 'to_of_node'
                   is_of_node(__to_of_node_fwnode) ?                       \
                   ^
   drivers/leds/leds-pwm.c:111:15: note: Access to field 'name' results in a dereference of a null pointer
                           led.name = to_of_node(fwnode)->name;
                                      ^
   include/linux/of.h:161:2: note: expanded from macro 'to_of_node'
           ({                                                              \
           ^
   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.
   4 warnings generated.
   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.
   4 warnings generated.
   drivers/of/property.c:920:19: warning: Access to field 'full_name' results in a dereference of a null pointer [clang-analyzer-core.NullDereference]
           return kbasename(to_of_node(fwnode)->full_name);
                            ^
   include/linux/of.h:161:2: note: expanded from macro 'to_of_node'
           ({                                                              \
           ^
   drivers/of/property.c:920:19: note: '?' condition is false
           return kbasename(to_of_node(fwnode)->full_name);
                            ^
   include/linux/of.h:164:3: note: expanded from macro 'to_of_node'
                   is_of_node(__to_of_node_fwnode) ?                       \
                   ^
   drivers/of/property.c:920:19: note: Access to field 'full_name' results in a dereference of a null pointer
           return kbasename(to_of_node(fwnode)->full_name);
                            ^
   include/linux/of.h:161:2: note: expanded from macro 'to_of_node'
           ({                                                              \
           ^
   drivers/of/property.c:926:7: warning: Access to field 'parent' results in a dereference of a null pointer [clang-analyzer-core.NullDereference]
           if (!to_of_node(fwnode)->parent)
                ^
   include/linux/of.h:161:2: note: expanded from macro 'to_of_node'
           ({                                                              \
           ^
   drivers/of/property.c:926:7: note: '?' condition is false
           if (!to_of_node(fwnode)->parent)
                ^
   include/linux/of.h:164:3: note: expanded from macro 'to_of_node'
                   is_of_node(__to_of_node_fwnode) ?                       \
                   ^
   drivers/of/property.c:926:7: note: Access to field 'parent' results in a dereference of a null pointer
           if (!to_of_node(fwnode)->parent)
                ^
   include/linux/of.h:161:2: note: expanded from macro 'to_of_node'
           ({                                                              \
           ^
   Suppressed 2 warnings (2 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.
   2 warnings generated.
   Suppressed 2 warnings (2 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.
   2 warnings generated.
   Suppressed 2 warnings (2 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.
>> drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores]
                           pprev      = &pp->next;
                           ^            ~~~~~~~~~
   drivers/of/fdt.c:196:4: note: Value stored to 'pprev' is never read
                           pprev      = &pp->next;
                           ^            ~~~~~~~~~
   Suppressed 2 warnings (2 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.
   4 warnings generated.
   drivers/of/irq.c:567:2: warning: Dereference of null pointer [clang-analyzer-core.NullDereference]
           list_for_each_entry_safe(desc, temp_desc, &intc_parent_list, list) {
           ^
   include/linux/list.h:716:7: note: expanded from macro 'list_for_each_entry_safe'
                   n = list_next_entry(pos, member);                       \
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:555:2: note: expanded from macro 'list_next_entry'
           list_entry((pos)->member.next, typeof(*(pos)), member)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:494:25: note: expanded from macro 'container_of'
           void *__mptr = (void *)(ptr);                                   \
                                  ^~~~~
   drivers/of/irq.c:489:2: note: Loop condition is true.  Entering loop body
           for_each_matching_node_and_match(np, matches, &match) {
           ^
   include/linux/of.h:1292:2: note: expanded from macro 'for_each_matching_node_and_match'
           for (dn = of_find_matching_node_and_match(NULL, matches, match); \
           ^
   drivers/of/irq.c:490:8: note: Calling 'of_property_read_bool'
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/of.h:1230:9: note: Assuming 'prop' is non-null
           return prop ? true : false;
                  ^~~~
   include/linux/of.h:1230:9: note: '?' condition is true
   include/linux/of.h:1230:2: note: Returning the value 1, which participates in a condition later
           return prop ? true : false;
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:490:8: note: Returning from 'of_property_read_bool'
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:490:7: note: Left side of '||' is false
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                       ^
   drivers/of/irq.c:491:5: note: Assuming the condition is false
                                   !of_device_is_available(np))
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:490:3: note: Taking false branch
                   if (!of_property_read_bool(np, "interrupt-controller") ||
                   ^
   drivers/of/irq.c:494:12: note: Assuming field 'data' is non-null
                   if (WARN(!match->data, "of_irq_init: no init function for %s\n",
                            ^
   include/asm-generic/bug.h:130:25: note: expanded from macro 'WARN'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   drivers/of/irq.c:494:7: note: Taking false branch
                   if (WARN(!match->data, "of_irq_init: no init function for %s\n",
                       ^
   include/asm-generic/bug.h:131:2: note: expanded from macro 'WARN'
           if (unlikely(__ret_warn_on))                                    \
           ^
   drivers/of/irq.c:494:3: note: Taking false branch
                   if (WARN(!match->data, "of_irq_init: no init function for %s\n",
                   ^
   drivers/of/irq.c:502:10: note: Calling 'kzalloc'
                   desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:9: note: Calling 'kmalloc'
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:579:2: note: Taking false branch
           if (__builtin_constant_p(size)) {
           ^
   include/linux/slab.h:596:2: note: Returning pointer, which participates in a condition later
           return __kmalloc(size, flags);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:9: note: Returning from 'kmalloc'
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:721:2: note: Returning pointer, which participates in a condition later
           return kmalloc(size, flags | __GFP_ZERO);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:502:10: note: Returning from 'kzalloc'
                   desc = kzalloc(sizeof(*desc), GFP_KERNEL);
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/of/irq.c:503:7: note: Assuming 'desc' is non-null
                   if (!desc) {
                       ^~~~~
   drivers/of/irq.c:503:3: note: Taking false branch
                   if (!desc) {
                   ^
   drivers/of/irq.c:511:33: note: 'np' is not equal to field 'interrupt_parent'
                   if (desc->interrupt_parent == np)
                                                 ^~
   drivers/of/irq.c:511:3: note: Taking false branch

vim +/pprev +196 drivers/of/fdt.c

bbd33931a08362 Grant Likely 2009-11-23  106  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  107  static void populate_properties(const void *blob,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  108  				int offset,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  109  				void **mem,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  110  				struct device_node *np,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  111  				const char *nodename,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  112  				bool dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  113  {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  114  	struct property *pp, **pprev = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  115  	int cur;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  116  	bool has_name = false;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  117  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  118  	pprev = &np->properties;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  119  	for (cur = fdt_first_property_offset(blob, offset);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  120  	     cur >= 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  121  	     cur = fdt_next_property_offset(blob, cur)) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  122  		const __be32 *val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  123  		const char *pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  124  		u32 sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  125  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  126  		val = fdt_getprop_by_offset(blob, cur, &pname, &sz);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  127  		if (!val) {
606ad42aa3b1fe Rob Herring  2016-06-15  128  			pr_warn("Cannot locate property at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  129  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  130  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  131  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  132  		if (!pname) {
606ad42aa3b1fe Rob Herring  2016-06-15  133  			pr_warn("Cannot find property name at 0x%x\n", cur);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  134  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  135  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  136  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  137  		if (!strcmp(pname, "name"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  138  			has_name = true;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  139  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  140  		pp = unflatten_dt_alloc(mem, sizeof(struct property),
dfbd4c6eff35f1 Gavin Shan   2016-05-03  141  					__alignof__(struct property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  142  		if (dryrun)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  143  			continue;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  144  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  145  		/* We accept flattened tree phandles either in
dfbd4c6eff35f1 Gavin Shan   2016-05-03  146  		 * ePAPR-style "phandle" properties, or the
dfbd4c6eff35f1 Gavin Shan   2016-05-03  147  		 * legacy "linux,phandle" properties.  If both
dfbd4c6eff35f1 Gavin Shan   2016-05-03  148  		 * appear and have different values, things
dfbd4c6eff35f1 Gavin Shan   2016-05-03  149  		 * will get weird. Don't do that.
bbd33931a08362 Grant Likely 2009-11-23  150  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  151  		if (!strcmp(pname, "phandle") ||
dfbd4c6eff35f1 Gavin Shan   2016-05-03  152  		    !strcmp(pname, "linux,phandle")) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  153  			if (!np->phandle)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  154  				np->phandle = be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  155  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  156  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  157  		/* And we process the "ibm,phandle" property
dfbd4c6eff35f1 Gavin Shan   2016-05-03  158  		 * used in pSeries dynamic device tree
dfbd4c6eff35f1 Gavin Shan   2016-05-03  159  		 * stuff
dfbd4c6eff35f1 Gavin Shan   2016-05-03  160  		 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  161  		if (!strcmp(pname, "ibm,phandle"))
dfbd4c6eff35f1 Gavin Shan   2016-05-03  162  			np->phandle = be32_to_cpup(val);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  163  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  164  		pp->name   = (char *)pname;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  165  		pp->length = sz;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  166  		pp->value  = (__be32 *)val;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  167  		*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  168  		pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  169  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  170  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  171  	/* With version 0x10 we may not have the name property,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  172  	 * recreate it here from the unit name if absent
dfbd4c6eff35f1 Gavin Shan   2016-05-03  173  	 */
dfbd4c6eff35f1 Gavin Shan   2016-05-03  174  	if (!has_name) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  175  		const char *p = nodename, *ps = p, *pa = NULL;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  176  		int len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  177  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  178  		while (*p) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  179  			if ((*p) == '@')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  180  				pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  181  			else if ((*p) == '/')
dfbd4c6eff35f1 Gavin Shan   2016-05-03  182  				ps = p + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  183  			p++;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  184  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  185  
dfbd4c6eff35f1 Gavin Shan   2016-05-03  186  		if (pa < ps)
dfbd4c6eff35f1 Gavin Shan   2016-05-03  187  			pa = p;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  188  		len = (pa - ps) + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  189  		pp = unflatten_dt_alloc(mem, sizeof(struct property) + len,
dfbd4c6eff35f1 Gavin Shan   2016-05-03  190  					__alignof__(struct property));
dfbd4c6eff35f1 Gavin Shan   2016-05-03  191  		if (!dryrun) {
dfbd4c6eff35f1 Gavin Shan   2016-05-03  192  			pp->name   = "name";
dfbd4c6eff35f1 Gavin Shan   2016-05-03  193  			pp->length = len;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  194  			pp->value  = pp + 1;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  195  			*pprev     = pp;
dfbd4c6eff35f1 Gavin Shan   2016-05-03 @196  			pprev      = &pp->next;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  197  			memcpy(pp->value, ps, len - 1);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  198  			((char *)pp->value)[len - 1] = 0;
dfbd4c6eff35f1 Gavin Shan   2016-05-03  199  			pr_debug("fixed up name for %s -> %s\n",
dfbd4c6eff35f1 Gavin Shan   2016-05-03  200  				 nodename, (char *)pp->value);
dfbd4c6eff35f1 Gavin Shan   2016-05-03  201  		}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  202  	}
dfbd4c6eff35f1 Gavin Shan   2016-05-03  203  }
dfbd4c6eff35f1 Gavin Shan   2016-05-03  204  

:::::: The code at line 196 was first introduced by commit
:::::: dfbd4c6eff35f1b1065cca046003cc9d7ff27222 drivers/of: Split unflatten_dt_node()

:::::: TO: Gavin Shan <gwshan@linux.vnet.ibm.com>
:::::: CC: Rob Herring <robh@kernel.org>

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

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-07-28  0:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-27 14:44 [linux-next:master 1184/3379] drivers/of/fdt.c:196:4: warning: Value stored to 'pprev' is never read [clang-analyzer-deadcode.DeadStores] kernel test robot
2021-07-28  0:33 ` Fwd: [kbuild] " kernel test robot
2021-07-28  0:33   ` kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2021-07-27  0:32 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.