CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: "Geoffrey D. Bennett" <[email protected]>
CC: Takashi Iwai <[email protected]>
CC: Vladimir Sadovnikov <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   6880fa6c56601bb8ed59df6c30fd390cc5f6dd8f
commit: d5bda7e03982f67ce2f6c0d79b750fb27077331a ALSA: usb-audio: scarlett2: 
Add support for the talkback feature
date:   3 months ago
:::::: branch date: 11 hours ago
:::::: commit date: 3 months ago
config: i386-randconfig-c001-20210910 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 
261cbe98c38f8c1ee1a482fe76511110e790f58a)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d5bda7e03982f67ce2f6c0d79b750fb27077331a
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout d5bda7e03982f67ce2f6c0d79b750fb27077331a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=i386 
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 >>)
           for (i = 0; i < num_mixer_out; i++) {
           ^
   sound/usb/mixer_scarlett_gen2.c:3639:9: note: Calling 'scarlett2_usb_get_mux'
           return scarlett2_usb_get_mux(mixer);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1489:8: note: Calling 'scarlett2_usb'
           err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1070:6: note: Assuming 'req' is non-null
           if (!req) {
               ^~~~
   sound/usb/mixer_scarlett_gen2.c:1070:2: note: Taking false branch
           if (!req) {
           ^
   sound/usb/mixer_scarlett_gen2.c:1076:6: note: Assuming 'resp' is non-null
           if (!resp) {
               ^~~~~
   sound/usb/mixer_scarlett_gen2.c:1076:2: note: Taking false branch
           if (!resp) {
           ^
   sound/usb/mixer_scarlett_gen2.c:1087:6: note: 'req_size' is 4
           if (req_size)
               ^~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1087:2: note: Taking true branch
           if (req_size)
           ^
   sound/usb/mixer_scarlett_gen2.c:1093:6: note: Assuming 'err' is equal to 
'req_buf_size'
           if (err != req_buf_size) {
               ^~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1093:2: note: Taking false branch
           if (err != req_buf_size) {
           ^
   sound/usb/mixer_scarlett_gen2.c:1110:6: note: Assuming 'err' is equal to 
'resp_buf_size'
           if (err != resp_buf_size) {
               ^~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1110:2: note: Taking false branch
           if (err != resp_buf_size) {
           ^
   sound/usb/mixer_scarlett_gen2.c:1123:6: note: Assuming 'resp->cmd' is equal 
to 'req->cmd'
           if (resp->cmd != req->cmd ||
               ^~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1123:6: note: Left side of '||' is false
   sound/usb/mixer_scarlett_gen2.c:1124:7: note: Assuming 'resp->seq' is equal 
to 'req->seq'
               (resp->seq != req->seq &&
                ^~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1124:29: note: Left side of '&&' is false
               (resp->seq != req->seq &&
                                      ^
   sound/usb/mixer_scarlett_gen2.c:1126:6: note: Assuming 'resp_size' is equal 
to field 'size'
               resp_size != le16_to_cpu(resp->size) ||
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1123:6: note: Left side of '||' is false
           if (resp->cmd != req->cmd ||
               ^
   sound/usb/mixer_scarlett_gen2.c:1127:6: note: Assuming field 'error' is 0
               resp->error ||
               ^~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1123:6: note: Left side of '||' is false
           if (resp->cmd != req->cmd ||
               ^
   sound/usb/mixer_scarlett_gen2.c:1128:6: note: Assuming field 'pad' is 0
               resp->pad) {
               ^~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1123:2: note: Taking false branch
           if (resp->cmd != req->cmd ||
           ^
   sound/usb/mixer_scarlett_gen2.c:1143:6: note: 'resp_data' is non-null
           if (resp_data && resp_size > 0)
               ^~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1143:6: note: Left side of '&&' is true
   sound/usb/mixer_scarlett_gen2.c:1143:19: note: Assuming 'resp_size' is <= 0
           if (resp_data && resp_size > 0)
                            ^~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1143:2: note: Taking false branch
           if (resp_data && resp_size > 0)
           ^
   sound/usb/mixer_scarlett_gen2.c:1151:2: note: Returning without writing to 
'*resp_data'
           return err;
           ^
   sound/usb/mixer_scarlett_gen2.c:1489:8: note: Returning from 'scarlett2_usb'
           err = scarlett2_usb(mixer, SCARLETT2_USB_GET_MUX,
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1492:6: note: Assuming 'err' is >= 0
           if (err < 0)
               ^~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1492:2: note: Taking false branch
           if (err < 0)
           ^
   sound/usb/mixer_scarlett_gen2.c:1495:7: note: The value 0 is assigned to 'i'
           for (i = 0; i < count; i++)
                ^~~~~
   sound/usb/mixer_scarlett_gen2.c:1495:14: note: Assuming 'i' is < 'count'
           for (i = 0; i < count; i++)
                       ^~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:1495:2: note: Loop condition is true.  
Entering loop body
           for (i = 0; i < count; i++)
           ^
   sound/usb/mixer_scarlett_gen2.c:1496:3: note: 2nd function call argument is 
an uninitialized value
                   scarlett2_usb_populate_mux(private, le32_to_cpu(data[i]));
                   ^
>> sound/usb/mixer_scarlett_gen2.c:2429:3: warning: Value stored to 'err' is 
>> never read [clang-analyzer-deadcode.DeadStores]
                   err = scarlett2_usb_get_config(mixer,
                   ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:2429:3: note: Value stored to 'err' is never 
read
                   err = scarlett2_usb_get_config(mixer,
                   ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:2433:38: warning: The left operand of '&' is 
a garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult]
                           private->talkback_map[i] = bitmap & 1;
                                                             ^
   sound/usb/mixer_scarlett_gen2.c:3933:6: note: Assuming field 'protocol' is 
not equal to 0
           if (!mixer->protocol)
               ^~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:3933:2: note: Taking false branch
           if (!mixer->protocol)
           ^
   sound/usb/mixer_scarlett_gen2.c:3936:6: note: Assuming the condition is false
           if (!(chip->setup & SCARLETT2_ENABLE)) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:3936:2: note: Taking false branch
           if (!(chip->setup & SCARLETT2_ENABLE)) {
           ^
   sound/usb/mixer_scarlett_gen2.c:3951:8: note: Calling 
'snd_scarlett_gen2_controls_create'
           err = snd_scarlett_gen2_controls_create(mixer);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:3845:9: note: Assuming the condition is true
           while (*info && (*info)->usb_id != mixer->chip->usb_id)
                  ^~~~~
   sound/usb/mixer_scarlett_gen2.c:3845:9: note: Left side of '&&' is true
   sound/usb/mixer_scarlett_gen2.c:3845:18: note: Assuming '(*info)->usb_id' is 
equal to 'mixer->chip->usb_id'
           while (*info && (*info)->usb_id != mixer->chip->usb_id)
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:3845:2: note: Loop condition is false. 
Execution continues on line 3847
           while (*info && (*info)->usb_id != mixer->chip->usb_id)
           ^
   sound/usb/mixer_scarlett_gen2.c:3847:2: note: Taking false branch
           if (!*info)
           ^
   sound/usb/mixer_scarlett_gen2.c:3852:6: note: 'err' is >= 0
           if (err < 0)
               ^~~
   sound/usb/mixer_scarlett_gen2.c:3852:2: note: Taking false branch
           if (err < 0)
           ^
   sound/usb/mixer_scarlett_gen2.c:3857:6: note: 'err' is >= 0
           if (err < 0)
               ^~~
   sound/usb/mixer_scarlett_gen2.c:3857:2: note: Taking false branch
           if (err < 0)
           ^
   sound/usb/mixer_scarlett_gen2.c:3861:8: note: Calling 
'scarlett2_read_configs'
           err = scarlett2_read_configs(mixer);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:3573:6: note: Assuming field 'has_msd_mode' 
is 0
           if (info->has_msd_mode) {
               ^~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:3573:2: note: Taking false branch
           if (info->has_msd_mode) {
           ^
   sound/usb/mixer_scarlett_gen2.c:3586:6: note: 'err' is >= 0
           if (err < 0)
               ^~~
   sound/usb/mixer_scarlett_gen2.c:3586:2: note: Taking false branch
           if (err < 0)
           ^
   sound/usb/mixer_scarlett_gen2.c:3589:8: note: Calling 
'scarlett2_update_monitor_other'
           err = scarlett2_update_monitor_other(mixer);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:2388:6: note: Assuming field 
'direct_monitor' is 0
           if (info->direct_monitor)
               ^~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:2388:2: note: Taking false branch
           if (info->direct_monitor)
           ^
   sound/usb/mixer_scarlett_gen2.c:2396:6: note: Assuming field 
'has_speaker_switching' is not equal to 0
           if (!info->has_speaker_switching)
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:2396:2: note: Taking false branch
           if (!info->has_speaker_switching)
           ^
   sound/usb/mixer_scarlett_gen2.c:2402:6: note: 'err' is >= 0
           if (err < 0)
               ^~~
   sound/usb/mixer_scarlett_gen2.c:2402:2: note: Taking false branch
           if (err < 0)
           ^
   sound/usb/mixer_scarlett_gen2.c:2408:6: note: 'err' is >= 0
           if (err < 0)
               ^~~
   sound/usb/mixer_scarlett_gen2.c:2408:2: note: Taking false branch
           if (err < 0)
           ^
   sound/usb/mixer_scarlett_gen2.c:2411:6: note: Assuming the condition is true
           if (!monitor_other_enable[0])
               ^~~~~~~~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:2411:2: note: Taking true branch
           if (!monitor_other_enable[0])
           ^
   sound/usb/mixer_scarlett_gen2.c:2416:6: note: Assuming field 'has_talkback' 
is not equal to 0
           if (info->has_talkback) {
               ^~~~~~~~~~~~~~~~~~
   sound/usb/mixer_scarlett_gen2.c:2416:2: note: Taking true branch

vim +/err +2429 sound/usb/mixer_scarlett_gen2.c

6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2369  
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2370  static int 
scarlett2_update_monitor_other(struct usb_mixer_interface *mixer)
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2371  {
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2372     struct scarlett2_data 
*private = mixer->private_data;
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2373     const struct 
scarlett2_device_info *info = private->info;
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2374     int err;
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2375  
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2376     /* 
monitor_other_enable[0] enables speaker switching
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2377      * 
monitor_other_enable[1] enables talkback
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2378      */
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2379     u8 
monitor_other_enable[2];
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2380  
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2381     /* 
monitor_other_switch[0] activates the alternate speakers
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2382      * 
monitor_other_switch[1] activates talkback
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2383      */
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2384     u8 
monitor_other_switch[2];
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2385  
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2386     
private->monitor_other_updated = 0;
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2387  
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2388     if 
(info->direct_monitor)
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2389             return 
scarlett2_usb_get_config(
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2390                     mixer, 
SCARLETT2_CONFIG_DIRECT_MONITOR,
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2391                     1, 
&private->direct_monitor_switch);
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2392  
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2393     /* if it doesn't do 
speaker switching then it also doesn't do
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2394      * talkback
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2395      */
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2396     if 
(!info->has_speaker_switching)
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2397             return 0;
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2398  
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2399     err = 
scarlett2_usb_get_config(
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2400             mixer, 
SCARLETT2_CONFIG_MONITOR_OTHER_ENABLE,
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2401             2, 
monitor_other_enable);
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2402     if (err < 0)
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2403             return err;
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2404  
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2405     err = 
scarlett2_usb_get_config(
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2406             mixer, 
SCARLETT2_CONFIG_MONITOR_OTHER_SWITCH,
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2407             2, 
monitor_other_switch);
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2408     if (err < 0)
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2409             return err;
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2410  
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2411     if 
(!monitor_other_enable[0])
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2412             
private->speaker_switching_switch = 0;
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2413     else
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2414             
private->speaker_switching_switch = monitor_other_switch[0] + 1;
e914d8432cb4b9 Geoffrey D. Bennett 2021-06-23  2415  
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2416     if (info->has_talkback) 
{
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2417             const int 
(*port_count)[SCARLETT2_PORT_DIRNS] =
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2418                     
info->port_count;
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2419             int num_mixes =
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2420                     
port_count[SCARLETT2_PORT_TYPE_MIX][SCARLETT2_PORT_IN];
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2421             u16 bitmap;
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2422             int i;
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2423  
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2424             if 
(!monitor_other_enable[1])
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2425                     
private->talkback_switch = 0;
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2426             else
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2427                     
private->talkback_switch = monitor_other_switch[1] + 1;
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2428  
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23 @2429             err = 
scarlett2_usb_get_config(mixer,
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2430                             
               SCARLETT2_CONFIG_TALKBACK_MAP,
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2431                             
               1, &bitmap);
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2432             for (i = 0; i < 
num_mixes; i++, bitmap >>= 1)
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2433                     
private->talkback_map[i] = bitmap & 1;
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2434     }
d5bda7e03982f6 Geoffrey D. Bennett 2021-06-23  2435  
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2436     return 0;
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2437  }
6ef9fa4a0eb4cd Geoffrey D. Bennett 2021-06-23  2438  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to