Commit 00740c58 authored by Borislav Petkov's avatar Borislav Petkov

amd64_edac: Fix driver module removal

f4347553 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: default avatarBorislav Petkov <borislav.petkov@amd.com>
parent b30a3f62
...@@ -339,6 +339,9 @@ static void edac_mc_workq_teardown(struct mem_ctl_info *mci) ...@@ -339,6 +339,9 @@ static void edac_mc_workq_teardown(struct mem_ctl_info *mci)
{ {
int status; int status;
if (mci->op_state != OP_RUNNING_POLL)
return;
status = cancel_delayed_work(&mci->work); status = cancel_delayed_work(&mci->work);
if (status == 0) { if (status == 0) {
debugf0("%s() not canceled, flush the queue\n", debugf0("%s() not canceled, flush the queue\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment