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: db9 - 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.

Link: https://lore.kernel.org/r/20240904043104.1030257-2-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+14 -16
+14 -16
drivers/input/joystick/db9.c
··· 505 505 { 506 506 struct db9 *db9 = input_get_drvdata(dev); 507 507 struct parport *port = db9->pd->port; 508 - int err; 509 508 510 - err = mutex_lock_interruptible(&db9->mutex); 511 - if (err) 512 - return err; 513 - 514 - if (!db9->used++) { 515 - parport_claim(db9->pd); 516 - parport_write_data(port, 0xff); 517 - if (db9_modes[db9->mode].reverse) { 518 - parport_data_reverse(port); 519 - parport_write_control(port, DB9_NORMAL); 509 + scoped_guard(mutex_intr, &db9->mutex) { 510 + if (!db9->used++) { 511 + parport_claim(db9->pd); 512 + parport_write_data(port, 0xff); 513 + if (db9_modes[db9->mode].reverse) { 514 + parport_data_reverse(port); 515 + parport_write_control(port, DB9_NORMAL); 516 + } 517 + mod_timer(&db9->timer, jiffies + DB9_REFRESH_TIME); 520 518 } 521 - mod_timer(&db9->timer, jiffies + DB9_REFRESH_TIME); 519 + 520 + return 0; 522 521 } 523 522 524 - mutex_unlock(&db9->mutex); 525 - return 0; 523 + return -EINTR; 526 524 } 527 525 528 526 static void db9_close(struct input_dev *dev) ··· 528 530 struct db9 *db9 = input_get_drvdata(dev); 529 531 struct parport *port = db9->pd->port; 530 532 531 - mutex_lock(&db9->mutex); 533 + guard(mutex)(&db9->mutex); 534 + 532 535 if (!--db9->used) { 533 536 del_timer_sync(&db9->timer); 534 537 parport_write_control(port, 0x00); 535 538 parport_data_forward(port); 536 539 parport_release(db9->pd); 537 540 } 538 - mutex_unlock(&db9->mutex); 539 541 } 540 542 541 543 static void db9_attach(struct parport *pp)