diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-12-24 20:08:26 (GMT) |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-12-24 20:08:26 (GMT) |
commit | db8862eafe8a5d030a3b02e81b8bb47447c315e3 (patch) | |
tree | 073ea7b46809bf804134cbf008a593413c02a99c /drivers/edac/edac_device.c | |
parent | c5dee6177f4bd2095aab7d9be9f6ebdddd6deee9 (diff) | |
parent | c20137fc5329eaf24093fc48c52608dc66be8e5c (diff) | |
download | linux-fsl-qoriq-db8862eafe8a5d030a3b02e81b8bb47447c315e3.tar.xz |
Merge branch 'linus' into tracing/hw-branch-tracing
Diffstat (limited to 'drivers/edac/edac_device.c')
-rw-r--r-- | drivers/edac/edac_device.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c index 5fcd3d8..4041e91 100644 --- a/drivers/edac/edac_device.c +++ b/drivers/edac/edac_device.c @@ -394,6 +394,12 @@ static void edac_device_workq_function(struct work_struct *work_req) mutex_lock(&device_ctls_mutex); + /* If we are being removed, bail out immediately */ + if (edac_dev->op_state == OP_OFFLINE) { + mutex_unlock(&device_ctls_mutex); + return; + } + /* Only poll controllers that are running polled and have a check */ if ((edac_dev->op_state == OP_RUNNING_POLL) && (edac_dev->edac_check != NULL)) { @@ -585,14 +591,14 @@ struct edac_device_ctl_info *edac_device_del_device(struct device *dev) /* mark this instance as OFFLINE */ edac_dev->op_state = OP_OFFLINE; - /* clear workq processing on this instance */ - edac_device_workq_teardown(edac_dev); - /* deregister from global list */ del_edac_device_from_global_list(edac_dev); mutex_unlock(&device_ctls_mutex); + /* clear workq processing on this instance */ + edac_device_workq_teardown(edac_dev); + /* Tear down the sysfs entries for this instance */ edac_device_remove_sysfs(edac_dev); |