Re: [PATCH 0/5] staging: comedi: tests: Fix various issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 14/04/2021 11:09, Dan Carpenter wrote:
The test_ni_get_reg_value() function calls
	unittest(ni_get_reg_value_roffs(-1, O(0), T, 1) == -1,
		 "check bad direct trigger arg for first reg->dest w/offs\n");
The -1 is type promoted to a high positive value so src is greater than
NI_NAMES_BASE.  It's not clear that that was intentional.
drivers/staging/comedi/drivers/tests/../ni_routes.h:269 ni_get_reg_value_roffs() warn: 'src' possible negative type promoted to high

I agree that it appears that ni_get_reg_value_roffs() will be returning -1 as expected, but for the wrong reason. I think the intention was for ni_get_reg_value_roffs() to call route_register_is_valid() with src=0 in this case, but it actually calls ni_route_to_register() with src=-1 (because -1 gets converted to 0xffffffff in the test `if (src < NI_NAMES_BASE)` where NI_NAMES_BASE is defined as 0x8000u).


drivers/staging/comedi/drivers/ni_routes.c:61 ni_find_route_values() warn: 'device_family' sometimes too small '8,11' size = 30
     59          for (i = 0; ni_all_route_values[i]; ++i) {
     60                  if (memcmp(ni_all_route_values[i]->family, device_family,
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     61                             strnlen(device_family, 30)) == 0) {
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
This whole memcmp() is very strange.  Why not just use:

	if (strncmp(ni_all_route_values[i]->family, device_family, 30) == 0)

I think even a simple strcmp() would do as well because all the device family strings and board name strings are null terminated. I don't know why the magic number 30 is used here!

The above applies similarly to ni_find_valid_routes() too.


     62                          rv = &ni_all_route_values[i]->register_values[0][0];
     63                          break;
     64                  }
     65          }

There are a couple places where conditions could probably be deleted.
drivers/staging/comedi/drivers/ni_mio_common.c:2363 ni_ai_cmd() warn: we tested 'dev->irq' before and it was 'true'

Agreed. In fact ni_ai_cmd() shouldn't be getting called at all if dev->irq is 0.

drivers/staging/comedi/drivers/usbdux.c:1192 usbduxsub_pwm_irq() warn: we tested 'devpriv->pwm_cmd_running' before and it was 'true'

Agreed.

There is some commented out code that might be worth reviewing.
drivers/staging/comedi/drivers/ni_mio_common.c:6306 ni_E_init() warn: odd binop '0x2 & 0x0'

Yes, that can be simplified.

drivers/staging/comedi/drivers/cb_pcidas64.c:2229 use_hw_sample_counter() warn: ignoring unreachable code.

Yes, that is preceded by:

/* disable for now until I work out a race */
	return 0;

But that change dates back to 2002. Perhaps we should use `#if 0` `#endif` around the unreachable lines of code on the off-chance that it gets revisited sometime!

These places are using char for bitwise operations and there is some
sign extension going on.
drivers/staging/comedi/drivers/icp_multi.c:120 icp_multi_ai_insn_read() warn: using signed char for bitops

Agreed, range_code_analog[] ought to be unsigned char instead of plain char.

drivers/staging/comedi/drivers/usbdux.c:1290 usbdux_pwm_pattern() warn: using signed char for bitops
drivers/staging/comedi/drivers/usbdux.c:1292 usbdux_pwm_pattern() warn: using signed char for bitops

I think usbdux_pwm_pattern() should be using unsigned char throughout. Also, the initialization `char sgn_mask = (16 << chan);` seems strange because `chan` can be in the range 0 to 7 here!

--
-=( Ian Abbott <abbotti@xxxxxxxxx> || MEV Ltd. is a company  )=-
-=( registered in England & Wales.  Regd. number: 02862268.  )=-
-=( Regd. addr.: S11 & 12 Building 67, Europa Business Park, )=-
-=( Bird Hall Lane, STOCKPORT, SK3 0XA, UK. || www.mev.co.uk )=-




[Index of Archives]     [Linux Driver Development]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux