Hi Dan, On 09/04/2018 05:40 AM, Dan Carpenter wrote:
Hello Guenter Roeck, The patch bbd8decd4123: "hwmon: (nct6775) Add support for weighted fan control" from Dec 4, 2012, leads to the following static checker warning: drivers/hwmon/nct6775.c:1562 nct6775_update_pwm() warn: dead code because of 'j == 1' and 'j < (56 / 8 + 0)' drivers/hwmon/nct6775.c 1503 static void nct6775_update_pwm(struct device *dev) 1504 { 1505 struct nct6775_data *data = dev_get_drvdata(dev); 1506 int i, j; 1507 int fanmodecfg, reg; 1508 bool duty_is_dc; 1509 1510 for (i = 0; i < data->pwm_num; i++) { 1511 if (!(data->has_pwm & BIT(i))) 1512 continue; 1513 1514 duty_is_dc = data->REG_PWM_MODE[i] && 1515 (nct6775_read_value(data, data->REG_PWM_MODE[i]) 1516 & data->PWM_MODE_MASK[i]); 1517 data->pwm_mode[i] = !duty_is_dc; 1518 1519 fanmodecfg = nct6775_read_value(data, data->REG_FAN_MODE[i]); 1520 for (j = 0; j < ARRAY_SIZE(data->REG_PWM); j++) { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ j is set to ARRAY_SIZE(data->REG_PWM) which is 7 at the end of this loop. 1521 if (data->REG_PWM[j] && data->REG_PWM[j][i]) { 1522 data->pwm[j][i] 1523 = nct6775_read_value(data, 1524 data->REG_PWM[j][i]); 1525 } 1526 } 1527 1528 data->pwm_enable[i] = reg_to_pwm_enable(data->pwm[0][i], 1529 (fanmodecfg >> 4) & 7); 1530 1531 if (!data->temp_tolerance[0][i] || 1532 data->pwm_enable[i] != speed_cruise) 1533 data->temp_tolerance[0][i] = fanmodecfg & 0x0f; 1534 if (!data->target_speed_tolerance[i] || 1535 data->pwm_enable[i] == speed_cruise) { 1536 u8 t = fanmodecfg & 0x0f; 1537 1538 if (data->REG_TOLERANCE_H) { 1539 t |= (nct6775_read_value(data, 1540 data->REG_TOLERANCE_H[i]) & 0x70) >> 1; 1541 } 1542 data->target_speed_tolerance[i] = t; 1543 } 1544 1545 data->temp_tolerance[1][i] = 1546 nct6775_read_value(data, 1547 data->REG_CRITICAL_TEMP_TOLERANCE[i]); 1548 1549 reg = nct6775_read_value(data, data->REG_TEMP_SEL[i]); 1550 data->pwm_temp_sel[i] = reg & 0x1f; 1551 /* If fan can stop, report floor as 0 */ 1552 if (reg & 0x80) 1553 data->pwm[2][i] = 0; 1554 1555 if (!data->REG_WEIGHT_TEMP_SEL[i]) 1556 continue; 1557 1558 reg = nct6775_read_value(data, data->REG_WEIGHT_TEMP_SEL[i]); 1559 data->pwm_weight_temp_sel[i] = reg & 0x1f; 1560 /* If weight is disabled, report weight source as 0 */ 1561 if (j == 1 && !(reg & 0x80)) ^^^^^^ So it can't be 1 here. Did you intend to say "i == 1"?
Nice catch. No, the condition does not depend on an index and should simply be if (!(reg & 0x80)) No idea what if anything I was thinking when I wrote the code. It would be great if you can send a patch. Thanks, Guenter
1562 data->pwm_weight_temp_sel[i] = 0; 1563 1564 /* Weight temp data */ 1565 for (j = 0; j < ARRAY_SIZE(data->weight_temp); j++) { 1566 data->weight_temp[j][i] 1567 = nct6775_read_value(data, 1568 data->REG_WEIGHT_TEMP[j][i]); 1569 } 1570 } 1571 } regards, dan carpenter