CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Srinivas Kandagatla <[email protected]>
CC: Mark Brown <[email protected]>
CC: "Pierre-Louis Bossart" <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   26291c54e111ff6ba87a164d85d4a4e134b7315c
commit: cf989b68fcadbeeea1446e50fd8b2f24a0f1275c ASoC: qdsp6: audioreach: add 
Kconfig and Makefile
date:   3 months ago
:::::: branch date: 2 days ago
:::::: commit date: 3 months ago
config: arm-randconfig-c002-20220122 
(https://download.01.org/0day-ci/archive/20220202/[email protected]/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
7b3d30728816403d1fd73cc5082e9fb761262bce)
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 arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cf989b68fcadbeeea1446e50fd8b2f24a0f1275c
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout cf989b68fcadbeeea1446e50fd8b2f24a0f1275c
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
   include/linux/printk.h:417:3: note: expanded from macro 'printk_index_wrap'
                   __printk_index_emit(_fmt, NULL, NULL);                  \
                   ^
   include/linux/printk.h:392:34: note: expanded from macro 
'__printk_index_emit'
   #define __printk_index_emit(...) do {} while (0)
                                    ^
   drivers/mtd/tests/subpagetest.c:348:14: note: Assuming 'i' is >= 'ebcnt'
           for (i = 0; i < ebcnt; ++i) {
                       ^~~~~~~~~
   drivers/mtd/tests/subpagetest.c:348:2: note: Loop condition is false. 
Execution continues on line 361
           for (i = 0; i < ebcnt; ++i) {
           ^
   drivers/mtd/tests/subpagetest.c:361:2: note: Loop condition is false.  
Exiting loop
           pr_info("verified %u eraseblocks\n", i);
           ^
   include/linux/printk.h:519:2: note: expanded from macro 'pr_info'
           printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
           ^
   include/linux/printk.h:446:26: note: expanded from macro 'printk'
   #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
                            ^
   include/linux/printk.h:417:3: note: expanded from macro 'printk_index_wrap'
                   __printk_index_emit(_fmt, NULL, NULL);                  \
                   ^
   include/linux/printk.h:392:34: note: expanded from macro 
'__printk_index_emit'
   #define __printk_index_emit(...) do {} while (0)
                                    ^
   drivers/mtd/tests/subpagetest.c:364:6: note: Assuming 'err' is 0
           if (err)
               ^~~
   drivers/mtd/tests/subpagetest.c:364:2: note: Taking false branch
           if (err)
           ^
   drivers/mtd/tests/subpagetest.c:367:8: note: Calling 
'verify_all_eraseblocks_ff'
           err = verify_all_eraseblocks_ff();
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mtd/tests/subpagetest.c:250:2: note: Loop condition is false.  
Exiting loop
           pr_info("verifying all eraseblocks for 0xff\n");
           ^
   include/linux/printk.h:519:2: note: expanded from macro 'pr_info'
           printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
           ^
   include/linux/printk.h:446:26: note: expanded from macro 'printk'
   #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
                            ^
   include/linux/printk.h:417:3: note: expanded from macro 'printk_index_wrap'
                   __printk_index_emit(_fmt, NULL, NULL);                  \
                   ^
   include/linux/printk.h:392:34: note: expanded from macro 
'__printk_index_emit'
   #define __printk_index_emit(...) do {} while (0)
                                    ^
   drivers/mtd/tests/subpagetest.c:251:14: note: Assuming 'i' is < 'ebcnt'
           for (i = 0; i < ebcnt; ++i) {
                       ^~~~~~~~~
   drivers/mtd/tests/subpagetest.c:251:2: note: Loop condition is true.  
Entering loop body
           for (i = 0; i < ebcnt; ++i) {
           ^
   drivers/mtd/tests/subpagetest.c:252:7: note: Assuming the condition is false
                   if (bbt[i])
                       ^~~~~~
   drivers/mtd/tests/subpagetest.c:252:3: note: Taking false branch
                   if (bbt[i])
                   ^
   drivers/mtd/tests/subpagetest.c:254:9: note: Calling 'verify_eraseblock_ff'
                   err = verify_eraseblock_ff(i);
                         ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/mtd/tests/subpagetest.c:220:14: note: Assuming the condition is true
           for (j = 0; j < mtd->erasesize / subpgsize; ++j) {
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mtd/tests/subpagetest.c:220:2: note: Loop condition is true.  
Entering loop body
           for (j = 0; j < mtd->erasesize / subpgsize; ++j) {
           ^
   drivers/mtd/tests/subpagetest.c:222:9: note: Value assigned to 'subpgsize'
                   err = mtd_read(mtd, addr, subpgsize, &read, readbuf);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/mtd/tests/subpagetest.c:223:16: note: Assuming 'err' is 0
                   if (unlikely(err || read != subpgsize)) {
                                ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   drivers/mtd/tests/subpagetest.c:223:16: note: Left side of '||' is false
                   if (unlikely(err || read != subpgsize)) {
                                ^
   drivers/mtd/tests/subpagetest.c:223:23: note: Assuming 'read' is equal to 
'subpgsize'
                   if (unlikely(err || read != subpgsize)) {
                                       ^
   include/linux/compiler.h:78:42: note: expanded from macro 'unlikely'
   # define unlikely(x)    __builtin_expect(!!(x), 0)
                                               ^
   drivers/mtd/tests/subpagetest.c:223:3: note: Taking false branch
                   if (unlikely(err || read != subpgsize)) {
                   ^
   drivers/mtd/tests/subpagetest.c:234:3: note: Taking false branch
                   if (unlikely(memcmp(readbuf, writebuf, subpgsize))) {
                   ^
   drivers/mtd/tests/subpagetest.c:220:33: note: Division by zero
           for (j = 0; j < mtd->erasesize / subpgsize; ++j) {
                           ~~~~~~~~~~~~~~~^~~~~~~~~~~
   2 warnings generated.
>> sound/soc/qcom/qdsp6/audioreach.c:500:36: warning: Division by zero 
>> [clang-analyzer-core.DivideZero]
           num_modules_per_list = num_modules/num_containers;
                                  ~~~~~~~~~~~^~~~~~~~~~~~~~~
   sound/soc/qcom/qdsp6/audioreach.c:480:2: note: 'num_containers' initialized 
to 0
           int num_containers = 0;
           ^~~~~~~~~~~~~~~~~~
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Left side of '&&' is false
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Taking false branch
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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))                                       \
                   ^
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Loop condition is false.  
Exiting loop
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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 {                                                            \
           ^
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Loop condition is false. 
Execution continues on line 499
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:2: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
           ^
   sound/soc/qcom/qdsp6/audioreach.c:500:36: note: Division by zero
           num_modules_per_list = num_modules/num_containers;
                                  ~~~~~~~~~~~^~~~~~~~~~~~~~~
>> sound/soc/qcom/qdsp6/audioreach.c:558:2: warning: Value stored to 'p' is 
>> never read [clang-analyzer-deadcode.DeadStores]
           p += mc_sz;
           ^    ~~~~~
   sound/soc/qcom/qdsp6/audioreach.c:558:2: note: Value stored to 'p' is never 
read
           p += mc_sz;
           ^    ~~~~~
   1 warning generated.
   drivers/iio/chemical/bme680_core.c:741:2: warning: Value stored to 'ret' is 
never read [clang-analyzer-deadcode.DeadStores]
           ret = regmap_read(data->regmap, BME680_REG_MEAS_STAT_0, &check);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/iio/chemical/bme680_core.c:741:2: note: Value stored to 'ret' is 
never read
           ret = regmap_read(data->regmap, BME680_REG_MEAS_STAT_0, &check);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   2 warnings generated.
   sound/drivers/mpu401/mpu401.c:67:2: warning: Call to function 'strcpy' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(card->shortname, card->driver);
           ^~~~~~
   sound/drivers/mpu401/mpu401.c:67:2: note: Call to function 'strcpy' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcpy'. CWE-119
           strcpy(card->shortname, card->driver);
           ^~~~~~
   sound/drivers/mpu401/mpu401.c:72:3: warning: Call to function 'strcat' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcat'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
                   strcat(card->longname, "polled");
                   ^~~~~~
   sound/drivers/mpu401/mpu401.c:72:3: note: Call to function 'strcat' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcat'. CWE-119
                   strcat(card->longname, "polled");
                   ^~~~~~
   5 warnings generated.
   include/linux/list.h:86:2: warning: Use of memory after it is freed 
[clang-analyzer-unix.Malloc]
           __list_add(new, head, head->next);
           ^
   sound/pci/hda/hda_codec.c:270:9: note: Calling 'snd_hda_get_conn_list'
           nums = snd_hda_get_conn_list(codec, mux, &conn);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/pci/hda/hda_codec.c:173:2: note: Loop condition is true.  Entering 
loop body
           for (;;) {
           ^
   sound/pci/hda/hda_codec.c:179:7: note: 'p' is null
                   if (p) {
                       ^
   sound/pci/hda/hda_codec.c:179:3: note: Taking false branch
                   if (p) {
                   ^
   sound/pci/hda/hda_codec.c:184:3: note: Taking false branch
                   if (snd_BUG_ON(added))
                   ^
   sound/pci/hda/hda_codec.c:187:9: note: Calling 'read_and_add_raw_conns'
                   err = read_and_add_raw_conns(codec, nid);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/pci/hda/hda_codec.c:139:6: note: Assuming the condition is false
           if (len == -ENOSPC) {
               ^~~~~~~~~~~~~~
   sound/pci/hda/hda_codec.c:139:2: note: Taking false branch
           if (len == -ENOSPC) {
           ^
   sound/pci/hda/hda_codec.c:146:6: note: Assuming 'len' is >= 0
           if (len >= 0)
               ^~~~~~~~
   sound/pci/hda/hda_codec.c:146:2: note: Taking true branch
           if (len >= 0)
           ^
   sound/pci/hda/hda_codec.c:147:9: note: Calling 'snd_hda_override_conn_list'
                   len = snd_hda_override_conn_list(codec, nid, len, result);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/pci/hda/hda_codec.c:244:6: note: 'p' is non-null
           if (p) {
               ^
   sound/pci/hda/hda_codec.c:244:2: note: Taking true branch
           if (p) {
           ^
   sound/pci/hda/hda_codec.c:246:3: note: Memory is released
                   kfree(p);
                   ^~~~~~~~
   sound/pci/hda/hda_codec.c:249:9: note: Calling 'add_conn_list'
           return add_conn_list(codec, nid, len, list);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/pci/hda/hda_codec.c:112:6: note: Assuming 'p' is non-null
           if (!p)
               ^~
   sound/pci/hda/hda_codec.c:112:2: note: Taking false branch
           if (!p)
           ^
   sound/pci/hda/hda_codec.c:117:2: note: Calling 'list_add'
           list_add(&p->list, &codec->conn_list);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/list.h:86:2: note: Use of memory after it is freed
           __list_add(new, head, head->next);
           ^                     ~~~~~~~~~~
   include/linux/list.h:135:13: warning: Use of memory after it is freed 
[clang-analyzer-unix.Malloc]
           __list_del(entry->prev, entry->next);
                      ^
   sound/pci/hda/hda_codec.c:765:6: note: Assuming field 'registered' is 0
           if (codec->registered) {
               ^~~~~~~~~~~~~~~~~
   sound/pci/hda/hda_codec.c:765:2: note: Taking false branch
           if (codec->registered) {
           ^
   sound/pci/hda/hda_codec.c:773:6: note: Assuming field 'in_freeing' is not 
equal to 0
           if (!codec->in_freeing)
               ^~~~~~~~~~~~~~~~~~
   sound/pci/hda/hda_codec.c:773:2: note: Taking false branch
           if (!codec->in_freeing)
--
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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 {                                                            \
           ^
   sound/pci/hda/hda_codec.c:127:3: note: Memory is released
                   kfree(p);
                   ^~~~~~~~
   sound/pci/hda/hda_codec.c:123:2: note: Loop condition is true.  Entering 
loop body
           while (!list_empty(&codec->conn_list)) {
           ^
   sound/pci/hda/hda_codec.c:125:7: note: Left side of '&&' is false
                   p = list_first_entry(&codec->conn_list, typeof(*p), list);
                       ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   sound/pci/hda/hda_codec.c:125:7: note: Taking false branch
                   p = list_first_entry(&codec->conn_list, typeof(*p), list);
                       ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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))                                       \
                   ^
   sound/pci/hda/hda_codec.c:125:7: note: Loop condition is false.  Exiting loop
                   p = list_first_entry(&codec->conn_list, typeof(*p), list);
                       ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:495:2: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
           ^
   note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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 {                                                            \
           ^
   sound/pci/hda/hda_codec.c:126:3: note: Calling 'list_del'
                   list_del(&p->list);
                   ^~~~~~~~~~~~~~~~~~
   include/linux/list.h:147:14: note: Use of memory after it is freed
           entry->next = LIST_POISON1;
           ~~~~~~~~~~~ ^
   sound/pci/hda/hda_codec.c:1613:2: warning: Call to function 'strcpy' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(id.name, name);
           ^~~~~~
   sound/pci/hda/hda_codec.c:1613:2: note: Call to function 'strcpy' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcpy'. CWE-119
           strcpy(id.name, name);
           ^~~~~~
   sound/pci/hda/hda_codec.c:3465:2: warning: Call to function 'strcpy' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(uinfo->value.enumerated.name, imux->items[index].label);
           ^~~~~~
   sound/pci/hda/hda_codec.c:3465:2: note: Call to function 'strcpy' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcpy'. CWE-119
           strcpy(uinfo->value.enumerated.name, imux->items[index].label);
           ^~~~~~
   2 warnings generated.
>> sound/soc/qcom/qdsp6/audioreach.c:500:36: warning: Division by zero 
>> [clang-analyzer-core.DivideZero]
           num_modules_per_list = num_modules/num_containers;
                                  ~~~~~~~~~~~^~~~~~~~~~~~~~~
   sound/soc/qcom/qdsp6/audioreach.c:480:2: note: 'num_containers' initialized 
to 0
           int num_containers = 0;
           ^~~~~~~~~~~~~~~~~~
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Left side of '&&' is false
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   include/linux/kernel.h:495:61: note: expanded from macro 'container_of'
           BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) &&   \
                                                                      ^
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Taking false branch
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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))                                       \
                   ^
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Loop condition is false.  
Exiting loop
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:13: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
                      ^
   include/linux/list.h:522:2: note: expanded from macro 'list_first_entry'
           list_entry((ptr)->next, type, member)
           ^
   include/linux/list.h:511:2: note: expanded from macro 'list_entry'
           container_of(ptr, type, member)
           ^
   note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to 
see all)
   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 {                                                            \
           ^
   sound/soc/qcom/qdsp6/audioreach.c:487:2: note: Loop condition is false. 
Execution continues on line 499
           list_for_each_entry(sgs, sg_list, node) {
           ^
   include/linux/list.h:628:2: note: expanded from macro 'list_for_each_entry'
           for (pos = list_first_entry(head, typeof(*pos), member);        \
           ^
   sound/soc/qcom/qdsp6/audioreach.c:500:36: note: Division by zero
           num_modules_per_list = num_modules/num_containers;
                                  ~~~~~~~~~~~^~~~~~~~~~~~~~~
>> sound/soc/qcom/qdsp6/audioreach.c:558:2: warning: Value stored to 'p' is 
>> never read [clang-analyzer-deadcode.DeadStores]
           p += mc_sz;
           ^    ~~~~~
   sound/soc/qcom/qdsp6/audioreach.c:558:2: note: Value stored to 'p' is never 
read
           p += mc_sz;
           ^    ~~~~~
   1 warning generated.
   Suppressed 1 warnings (1 with check filters).
   1 warning generated.
   drivers/rtc/rtc-mc146818-lib.c:187:3: warning: Value stored to 'century' is 
never read [clang-analyzer-deadcode.DeadStores]
                   century = bin2bcd(century);
                   ^
   drivers/rtc/rtc-mc146818-lib.c:187:3: note: Value stored to 'century' is 
never read
   1 warning generated.
   Suppressed 1 warnings (1 with check filters).
   2 warnings generated.
   net/bluetooth/hci_core.c:2188:2: warning: Call to function 'strcpy' is 
insecure as it does not provide bounding of the memory buffer. Replace 
unbounded copy functions with analogous functions that support length arguments 
such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy]
           strcpy(di.name, hdev->name);
           ^~~~~~
   net/bluetooth/hci_core.c:2188:2: note: Call to function 'strcpy' is insecure 
as it does not provide bounding of the memory buffer. Replace unbounded copy 
functions with analogous functions that support length arguments such as 
'strlcpy'. CWE-119
           strcpy(di.name, hdev->name);
           ^~~~~~
   Suppressed 1 warnings (1 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.
   1 warning generated.
   Suppressed 1 warnings (1 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.
   1 warning generated.
   Suppressed 1 warnings (1 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.
   net/bluetooth/mgmt.c:6265:4: warning: Value stored to 'authenticated' is 
never read [clang-analyzer-deadcode.DeadStores]
                           authenticated = 0x00;
                           ^               ~~~~
   net/bluetooth/mgmt.c:6265:4: note: Value stored to 'authenticated' is never 
read
                           authenticated = 0x00;
                           ^               ~~~~
   net/bluetooth/mgmt.c:6266:4: warning: Value stored to 'type' is never read 
[clang-analyzer-deadcode.DeadStores]
                           type = SMP_LTK_P256_DEBUG;
                           ^      ~~~~~~~~~~~~~~~~~~
   net/bluetooth/mgmt.c:6266:4: note: Value stored to 'type' is never read
                           type = SMP_LTK_P256_DEBUG;
                           ^      ~~~~~~~~~~~~~~~~~~
   net/bluetooth/mgmt.c:7239:2: warning: Value stored to 'err' is never read 
[clang-analyzer-deadcode.DeadStores]
           err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/mgmt.c:7239:2: note: Value stored to 'err' is never read
           err = mgmt_limited_event(MGMT_EV_LOCAL_OOB_DATA_UPDATED, hdev,
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   net/bluetooth/mgmt.c:7590:14: warning: Although the value stored to 
'cur_len' is used in the enclosing expression, the value is never actually read 
from 'cur_len' [clang-analyzer-deadcode.DeadStores]
           for (i = 0, cur_len = 0; i < len; i += (cur_len + 1)) {
                       ^         ~
   net/bluetooth/mgmt.c:7590:14: note: Although the value stored to 'cur_len' 
is used in the enclosing expression, the value is never actually read from 
'cur_len'
           for (i = 0, cur_len = 0; i < len; i += (cur_len + 1)) {
                       ^         ~
   Suppressed 1 warnings (1 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.
   drivers/net/phy/at803x.c:356:3: warning: Value stored to 'value' is never 
read [clang-analyzer-deadcode.DeadStores]
                   value = phy_read(phydev, AT803X_INTR_STATUS);
                   ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/phy/at803x.c:356:3: note: Value stored to 'value' is never read
                   value = phy_read(phydev, AT803X_INTR_STATUS);
                   ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/phy/at803x.c:363:3: warning: Value stored to 'value' is never 
read [clang-analyzer-deadcode.DeadStores]
                   value = phy_read(phydev, AT803X_INTR_STATUS);
                   ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/phy/at803x.c:363:3: note: Value stored to 'value' is never read
                   value = phy_read(phydev, AT803X_INTR_STATUS);
                   ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 warning generated.
   drivers/net/phy/bcm-cygnus.c:70:2: warning: Value stored to 'rc' is never 
read [clang-analyzer-deadcode.DeadStores]
           rc = bcm_phy_write_exp_sel(phydev, MII_BRCM_CORE_EXPB0, 0x00);
           ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/phy/bcm-cygnus.c:70:2: note: Value stored to 'rc' is never read
           rc = bcm_phy_write_exp_sel(phydev, MII_BRCM_CORE_EXPB0, 0x00);
           ^    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 warning generated.
   drivers/net/phy/marvell.c:1222:2: warning: Value stored to 'err' is never 
read [clang-analyzer-deadcode.DeadStores]
           err = genphy_config_aneg(phydev);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/phy/marvell.c:1222:2: note: Value stored to 'err' is never read
           err = genphy_config_aneg(phydev);
           ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 warning generated.
   drivers/comedi/drivers/das08.c:181:2: warning: Value stored to 'range' is 
never read [clang-analyzer-deadcode.DeadStores]
           range = CR_RANGE(insn->chanspec);
           ^
   drivers/comedi/drivers/das08.c:181:2: note: Value stored to 'range' is never 
read
   2 warnings generated.
   drivers/fsi/fsi-scom.c:295:7: warning: 2nd function call argument is an 
uninitialized value [clang-analyzer-core.CallAndMessage]
           rc = handle_fsi2pib_status(scom, status);
                ^
   drivers/fsi/fsi-scom.c:360:6: note: Assuming the condition is false
           if (len != sizeof(uint64_t))
               ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/fsi/fsi-scom.c:360:2: note: Taking false branch
           if (len != sizeof(uint64_t))
           ^
   drivers/fsi/fsi-scom.c:364:6: note: 'rc' is 0
           if (rc) {

vim +500 sound/soc/qcom/qdsp6/audioreach.c

5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  464  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  465  void 
*audioreach_alloc_graph_pkt(struct q6apm *apm, struct list_head *sg_list, int 
graph_id)
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  466  {
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  467     int payload_size, 
sg_sz, cont_sz, ml_sz, mp_sz, mc_sz;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  468     struct 
apm_module_param_data  *param_data;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  469     struct 
apm_container_params *cont_params;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  470     struct 
audioreach_container *container;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  471     struct 
apm_sub_graph_params *sg_params;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  472     struct 
apm_mod_conn_list_params *mcon;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  473     struct 
apm_graph_open_params params;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  474     struct 
apm_prop_list_params *mprop;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  475     struct 
audioreach_module *module;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  476     struct 
audioreach_sub_graph *sgs;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  477     struct apm_mod_list_obj 
*mlobj;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  478     int 
num_modules_per_list;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  479     int num_connections = 0;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  480     int num_containers = 0;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  481     int num_sub_graphs = 0;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  482     int num_modules = 0;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  483     int num_modules_list;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  484     struct gpr_pkt *pkt;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  485     void *p;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  486  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26 @487     
list_for_each_entry(sgs, sg_list, node) {
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  488             
num_sub_graphs++;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  489             
list_for_each_entry(container, &sgs->container_list, node) {
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  490                     
num_containers++;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  491                     
num_modules += container->num_modules;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  492                     
list_for_each_container_module(module, container) {
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  493                             
if (module->src_mod_inst_id)
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  494                             
        num_connections++;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  495                     }
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  496             }
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  497     }
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  498  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  499     num_modules_list = 
num_containers;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26 @500     num_modules_per_list = 
num_modules/num_containers;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  501     sg_sz = 
APM_SUB_GRAPH_PSIZE(sg_params, num_sub_graphs);
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  502     cont_sz = 
APM_CONTAINER_PSIZE(cont_params, num_containers);
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  503     ml_sz = 
ALIGN(sizeof(struct apm_module_list_params) +
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  504             
num_modules_list * APM_MOD_LIST_OBJ_PSIZE(mlobj,  num_modules_per_list), 8);
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  505     mp_sz = 
APM_MOD_PROP_PSIZE(mprop, num_modules);
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  506     mc_sz = 
APM_MOD_CONN_PSIZE(mcon, num_connections);
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  507  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  508     payload_size = sg_sz + 
cont_sz + ml_sz + mp_sz + mc_sz;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  509     pkt = 
audioreach_alloc_apm_cmd_pkt(payload_size, APM_CMD_GRAPH_OPEN, 0);
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  510     if (IS_ERR(pkt))
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  511             return pkt;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  512  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  513     p = (void *)pkt + 
GPR_HDR_SIZE + APM_CMD_HDR_SIZE;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  514  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  515     /* SubGraph */
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  516     params.sg_data = p;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  517     param_data = 
&params.sg_data->param_data;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  518     
param_data->module_instance_id = APM_MODULE_INSTANCE_ID;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  519     param_data->param_id = 
APM_PARAM_ID_SUB_GRAPH_CONFIG;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  520     param_data->param_size 
= sg_sz - APM_MODULE_PARAM_DATA_SIZE;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  521     
params.sg_data->num_sub_graphs = num_sub_graphs;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  522     p += sg_sz;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  523  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  524     /* Container */
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  525     params.cont_data = p;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  526     param_data = 
&params.cont_data->param_data;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  527     
param_data->module_instance_id = APM_MODULE_INSTANCE_ID;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  528     param_data->param_id = 
APM_PARAM_ID_CONTAINER_CONFIG;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  529     param_data->param_size 
= cont_sz - APM_MODULE_PARAM_DATA_SIZE;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  530     
params.cont_data->num_containers = num_containers;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  531     p += cont_sz;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  532  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  533     /* Module List*/
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  534     params.mod_list_data = 
p;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  535     param_data = 
&params.mod_list_data->param_data;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  536     
param_data->module_instance_id = APM_MODULE_INSTANCE_ID;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  537     param_data->param_id = 
APM_PARAM_ID_MODULE_LIST;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  538     param_data->param_size 
= ml_sz - APM_MODULE_PARAM_DATA_SIZE;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  539     
params.mod_list_data->num_modules_list = num_sub_graphs;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  540     p += ml_sz;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  541  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  542     /* Module Properties */
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  543     params.mod_prop_data = 
p;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  544     param_data = 
&params.mod_prop_data->param_data;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  545     
param_data->module_instance_id = APM_MODULE_INSTANCE_ID;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  546     param_data->param_id = 
APM_PARAM_ID_MODULE_PROP;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  547     param_data->param_size 
= mp_sz - APM_MODULE_PARAM_DATA_SIZE;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  548     
params.mod_prop_data->num_modules_prop_cfg = num_modules;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  549     p += mp_sz;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  550  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  551     /* Module Connections */
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  552     
params.mod_conn_list_data = p;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  553     param_data = 
&params.mod_conn_list_data->param_data;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  554     
param_data->module_instance_id = APM_MODULE_INSTANCE_ID;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  555     param_data->param_id = 
APM_PARAM_ID_MODULE_CONN;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  556     param_data->param_size 
= mc_sz - APM_MODULE_PARAM_DATA_SIZE;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  557     
params.mod_conn_list_data->num_connections = num_connections;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26 @558     p += mc_sz;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  559  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  560     
audioreach_populate_graph(&params, sg_list, num_sub_graphs);
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  561  
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  562     return pkt;
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  563  }
5477518b8a0e8a4 Srinivas Kandagatla 2021-10-26  564  
EXPORT_SYMBOL_GPL(audioreach_alloc_graph_pkt);
25ab80db6b133c2 Srinivas Kandagatla 2021-10-26  565  

:::::: The code at line 500 was first introduced by commit
:::::: 5477518b8a0e8a45239646acd80c9bafc4401522 ASoC: qdsp6: audioreach: add 
q6apm support

:::::: TO: Srinivas Kandagatla <[email protected]>
:::::: CC: Mark Brown <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to