[Intel-wired-lan] [jkirsher-next-queue:dev-queue 49/49] drivers/net/ethernet/intel/igc/igc_diag.c:161 igc_reg_test() error: uninitialized symbol 'b'.

Vitaly Lifshits vitaly.lifshits at intel.com
Mon Mar 23 10:19:46 UTC 2020


Hello Dan,

On 3/23/2020 09:42, Dan Carpenter wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git dev-queue
> head:   a6017405fcd0cda0cd9f35b34cae92400cf9e3e3
> commit: a6017405fcd0cda0cd9f35b34cae92400cf9e3e3 [49/49] igc: add support to interrupt, eeprom, registers and link self-tests
> 
> If you fix the issue, kindly add following tag
> Reported-by: kbuild test robot <lkp at intel.com>
> Reported-by: Dan Carpenter <dan.carpenter at oracle.com>
> 
> smatch warnings:
> drivers/net/ethernet/intel/igc/igc_diag.c:161 igc_reg_test() error: uninitialized symbol 'b'.
> 
> # https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git/commit/?id=a6017405fcd0cda0cd9f35b34cae92400cf9e3e3
> git remote add jkirsher-next-queue https://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/next-queue.git
> git remote update jkirsher-next-queue
> git checkout a6017405fcd0cda0cd9f35b34cae92400cf9e3e3
> vim +/b +161 drivers/net/ethernet/intel/igc/igc_diag.c
> 
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   90  bool igc_reg_test(struct igc_adapter *adapter, u64 *data)
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   91  {
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   92  	struct igc_reg_test *test = reg_test;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   93  	struct igc_hw *hw = &adapter->hw;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   94  	u32 value, before, after;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   95  	u32 i, toggle, b;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   96
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   97  	if (IGC_REMOVED(hw->hw_addr)) {
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   98  		dev_err(&adapter->pdev->dev, "Adapter removed - register test blocked\n");
> a6017405fcd0cd Vitaly Lifshits 2020-03-17   99  		*data = 1;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  100  		return true;
> 
> This function returns true on failure and false on success?
Yes, since this is what needed from ethtool self-test.
1 means fail and 0 means pass
> 
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  101  	}
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  102
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  103  	/* Because the status register is such a special case,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  104  	 * we handle it separately from the rest of the register
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  105  	 * tests.  Some bits are read-only, some toggle, and some
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  106  	 * are writeable.
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  107  	 */
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  108
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  109  	toggle = 0x6800D3;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  110  	before = rd32(IGC_STATUS);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  111  	value = before & toggle;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  112  	wr32(IGC_STATUS, toggle);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  113  	after = rd32(IGC_STATUS) & toggle;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  114  	if (value != after) {
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  115  		dev_err(&adapter->pdev->dev,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  116  			"failed STATUS register test got: 0x%08X expected: 0x%08X\n",
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  117  			after, value);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  118  		*data = 1;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  119  		return 1;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  120  	}
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  121  	/* restore previous status */
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  122  	wr32(IGC_STATUS, before);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  123
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  124  	/* Perform the remainder of the register test, looping through
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  125  	 * the test table until we either fail or reach the null entry.
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  126  	 */
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  127  	while (test->reg) {
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  128  		for (i = 0; i < test->array_len; i++) {
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  129  			switch (test->test_type) {
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  130  			case PATTERN_TEST:
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  131  				b = reg_pattern_test(adapter, data,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  132  						     test->reg + (i * 0x40),
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  133  						     test->mask,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  134  						     test->write);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  135  				break;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  136  			case SET_READ_TEST:
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  137  				b = reg_set_and_check(adapter, data,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  138  						      test->reg + (i * 0x40),
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  139  						      test->mask,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  140  						      test->write);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  141  				break;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  142  			case TABLE64_TEST_LO:
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  143  				b = reg_pattern_test(adapter, data,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  144  						     test->reg + (i * 8),
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  145  						     test->mask,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  146  						     test->write);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  147  				break;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  148  			case TABLE64_TEST_HI:
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  149  				b = reg_pattern_test(adapter, data,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  150  						     test->reg + 4 + (i * 8),
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  151  						     test->mask,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  152  						     test->write);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  153  				break;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  154  			case TABLE32_TEST:
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  155  				b = reg_pattern_test(adapter, data,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  156  						     test->reg + (i * 4),
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  157  						     test->mask,
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  158  						     test->write);
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  159  				break;
> 
> No default case.  Eventually GCC will fix its bug and start warning
> about uninitialized variables again so you may as well fix it.
> 
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  160  			}
> a6017405fcd0cd Vitaly Lifshits 2020-03-17 @161  			if (b)
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  162  				return true;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  163  		}
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  164  		test++;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  165  	}
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  166  	*data = 0;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  167  	return false;
> a6017405fcd0cd Vitaly Lifshits 2020-03-17  168  }
> 
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
> 

First of all thank you for all your comments.
Yesterday I send V3 to my patch, when it will be added to dev-queue I'll 
gather more comments and add your fixes as well to V4.


More information about the Intel-wired-lan mailing list