The code was using an normal completion, but that caused stuck task errors after a while. Use an interruptible one to avoid that.
Unified · Split
| @@ -468,11 +468,13 @@ static int ipmi_ssif_thread(void *data) · 467 unmodified lines | ||
| 468 | 468 | int result; |
| 469 | 469 | |
| 470 | 470 | /* Wait for something to do */ |
| 471 | − wait_for_completion(&ssif_info->wake_thread); | |
| 472 | − init_completion(&ssif_info->wake_thread); | |
| 473 | − | |
| 471 | + result = wait_for_completion_interruptible( | |
| 472 | + &ssif_info->wake_thread); | |
| 474 | 473 | if (ssif_info->stopping) |
| 475 | 474 | break; |
| 475 | + if (result == -ERESTARTSYS) | |
| 476 | + continue; | |
| 477 | + init_completion(&ssif_info->wake_thread); | |
| 476 | 478 | |
| 477 | 479 | if (ssif_info->i2c_read_write == I2C_SMBUS_WRITE) { |
| 478 | 480 | result = i2c_smbus_write_block_data( |