Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Input: iqs269a - use guard notation when acquiring mutex

Using guard notation makes the code more compact and error handling
more robust by ensuring that mutexes are released in all code paths
when control leaves critical section.

Reviewed-by: Jeff LaBundy <jeff@labundy.com>
Link: https://lore.kernel.org/r/20240904044756.1047629-1-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+16 -30
+16 -30
drivers/input/misc/iqs269a.c
··· 365 365 if (mode > IQS269_CHx_ENG_A_ATI_MODE_MAX) 366 366 return -EINVAL; 367 367 368 - mutex_lock(&iqs269->lock); 368 + guard(mutex)(&iqs269->lock); 369 369 370 370 engine_a = be16_to_cpu(ch_reg[ch_num].engine_a); 371 371 ··· 374 374 375 375 ch_reg[ch_num].engine_a = cpu_to_be16(engine_a); 376 376 iqs269->ati_current = false; 377 - 378 - mutex_unlock(&iqs269->lock); 379 377 380 378 return 0; 381 379 } ··· 387 389 if (ch_num >= IQS269_NUM_CH) 388 390 return -EINVAL; 389 391 390 - mutex_lock(&iqs269->lock); 392 + guard(mutex)(&iqs269->lock); 393 + 391 394 engine_a = be16_to_cpu(ch_reg[ch_num].engine_a); 392 - mutex_unlock(&iqs269->lock); 393 395 394 396 engine_a &= IQS269_CHx_ENG_A_ATI_MODE_MASK; 395 397 *mode = (engine_a >> IQS269_CHx_ENG_A_ATI_MODE_SHIFT); ··· 427 429 return -EINVAL; 428 430 } 429 431 430 - mutex_lock(&iqs269->lock); 432 + guard(mutex)(&iqs269->lock); 431 433 432 434 engine_b = be16_to_cpu(ch_reg[ch_num].engine_b); 433 435 ··· 436 438 437 439 ch_reg[ch_num].engine_b = cpu_to_be16(engine_b); 438 440 iqs269->ati_current = false; 439 - 440 - mutex_unlock(&iqs269->lock); 441 441 442 442 return 0; 443 443 } ··· 449 453 if (ch_num >= IQS269_NUM_CH) 450 454 return -EINVAL; 451 455 452 - mutex_lock(&iqs269->lock); 456 + guard(mutex)(&iqs269->lock); 457 + 453 458 engine_b = be16_to_cpu(ch_reg[ch_num].engine_b); 454 - mutex_unlock(&iqs269->lock); 455 459 456 460 switch (engine_b & IQS269_CHx_ENG_B_ATI_BASE_MASK) { 457 461 case IQS269_CHx_ENG_B_ATI_BASE_75: ··· 487 491 if (target > IQS269_CHx_ENG_B_ATI_TARGET_MAX) 488 492 return -EINVAL; 489 493 490 - mutex_lock(&iqs269->lock); 494 + guard(mutex)(&iqs269->lock); 491 495 492 496 engine_b = be16_to_cpu(ch_reg[ch_num].engine_b); 493 497 ··· 496 500 497 501 ch_reg[ch_num].engine_b = cpu_to_be16(engine_b); 498 502 iqs269->ati_current = false; 499 - 500 - mutex_unlock(&iqs269->lock); 501 503 502 504 return 0; 503 505 } ··· 509 515 if (ch_num >= IQS269_NUM_CH) 510 516 return -EINVAL; 511 517 512 - mutex_lock(&iqs269->lock); 513 - engine_b = be16_to_cpu(ch_reg[ch_num].engine_b); 514 - mutex_unlock(&iqs269->lock); 518 + guard(mutex)(&iqs269->lock); 515 519 520 + engine_b = be16_to_cpu(ch_reg[ch_num].engine_b); 516 521 *target = (engine_b & IQS269_CHx_ENG_B_ATI_TARGET_MASK) * 32; 517 522 518 523 return 0; ··· 1192 1199 { 1193 1200 int error; 1194 1201 1195 - mutex_lock(&iqs269->lock); 1202 + guard(mutex)(&iqs269->lock); 1196 1203 1197 1204 /* 1198 1205 * Early revisions of silicon require the following workaround in order ··· 1203 1210 error = regmap_multi_reg_write(iqs269->regmap, iqs269_tws_init, 1204 1211 ARRAY_SIZE(iqs269_tws_init)); 1205 1212 if (error) 1206 - goto err_mutex; 1213 + return error; 1207 1214 } 1208 1215 1209 1216 error = regmap_update_bits(iqs269->regmap, IQS269_HALL_UI, 1210 1217 IQS269_HALL_UI_ENABLE, 1211 1218 iqs269->hall_enable ? ~0 : 0); 1212 1219 if (error) 1213 - goto err_mutex; 1220 + return error; 1214 1221 1215 1222 error = regmap_raw_write(iqs269->regmap, IQS269_SYS_SETTINGS, 1216 1223 &iqs269->sys_reg, sizeof(iqs269->sys_reg)); 1217 1224 if (error) 1218 - goto err_mutex; 1225 + return error; 1219 1226 1220 1227 /* 1221 1228 * The following delay gives the device time to deassert its RDY output ··· 1225 1232 1226 1233 iqs269->ati_current = true; 1227 1234 1228 - err_mutex: 1229 - mutex_unlock(&iqs269->lock); 1230 - 1231 - return error; 1235 + return 0; 1232 1236 } 1233 1237 1234 1238 static int iqs269_input_init(struct iqs269_private *iqs269) ··· 1570 1580 if (error) 1571 1581 return error; 1572 1582 1573 - mutex_lock(&iqs269->lock); 1583 + guard(mutex)(&iqs269->lock); 1574 1584 1575 1585 iqs269->hall_enable = val; 1576 1586 iqs269->ati_current = false; 1577 - 1578 - mutex_unlock(&iqs269->lock); 1579 1587 1580 1588 return count; 1581 1589 } ··· 1631 1643 if (val > 0xFF) 1632 1644 return -EINVAL; 1633 1645 1634 - mutex_lock(&iqs269->lock); 1646 + guard(mutex)(&iqs269->lock); 1635 1647 1636 1648 ch_reg[iqs269->ch_num].rx_enable = val; 1637 1649 iqs269->ati_current = false; 1638 - 1639 - mutex_unlock(&iqs269->lock); 1640 1650 1641 1651 return count; 1642 1652 }