diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-12-27 11:30:05 +0100 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-12-27 11:30:05 +0100 |
| commit | 34bf5d0ff54d03f0a8ed690d47efb806ee2fffcb (patch) | |
| tree | 5465f999b2b067744220b66c89b75f0f10445d6e /drivers/edac/edac_device.c | |
| parent | bd8b96dfc216eebc72950a6c40da8d3eca8667df (diff) | |
| parent | 79a66b96c339626a3e4b226fefc0e45244cfe6ff (diff) | |
Merge branch 'x86/core' into x86/cleanups
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 5fcd3d89c75d..4041e9143283 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); |
