Commit 00740c58541b6087d78418cebca1fcb86dc6077d

Authored by Borislav Petkov
1 parent b30a3f6257

amd64_edac: Fix driver module removal

f4347553b30ec66530bfe63c84530afea3803396 removed the edac polling
mechanism in favor of using a notifier chain for conveying MCE
information to edac. However, the module removal path didn't test
whether the driver had setup the polling function workqueue at all and
the rmmod process was hanging in the kernel at try_to_del_timer_sync()
in the cancel_delayed_work() path, trying to cancel an uninitialized
work struct.

Fix that by adding a balancing check to the workqueue removal path.

Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>

Showing 1 changed file with 3 additions and 0 deletions Side-by-side Diff

drivers/edac/edac_mc.c
... ... @@ -339,6 +339,9 @@
339 339 {
340 340 int status;
341 341  
  342 + if (mci->op_state != OP_RUNNING_POLL)
  343 + return;
  344 +
342 345 status = cancel_delayed_work(&mci->work);
343 346 if (status == 0) {
344 347 debugf0("%s() not canceled, flush the queue\n",