|
@@ -583,8 +583,6 @@ static void edac_mc_workq_setup(struct mem_ctl_info *mci, unsigned msec)
|
|
*/
|
|
*/
|
|
static void edac_mc_workq_teardown(struct mem_ctl_info *mci)
|
|
static void edac_mc_workq_teardown(struct mem_ctl_info *mci)
|
|
{
|
|
{
|
|
- mci->op_state = OP_OFFLINE;
|
|
|
|
-
|
|
|
|
edac_stop_work(&mci->work);
|
|
edac_stop_work(&mci->work);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -772,7 +770,7 @@ int edac_mc_add_mc_with_groups(struct mem_ctl_info *mci,
|
|
}
|
|
}
|
|
|
|
|
|
/* If there IS a check routine, then we are running POLLED */
|
|
/* If there IS a check routine, then we are running POLLED */
|
|
- if (mci->edac_check != NULL) {
|
|
|
|
|
|
+ if (mci->edac_check) {
|
|
/* This instance is NOW RUNNING */
|
|
/* This instance is NOW RUNNING */
|
|
mci->op_state = OP_RUNNING_POLL;
|
|
mci->op_state = OP_RUNNING_POLL;
|
|
|
|
|
|
@@ -823,15 +821,16 @@ struct mem_ctl_info *edac_mc_del_mc(struct device *dev)
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /* mark MCI offline: */
|
|
|
|
+ mci->op_state = OP_OFFLINE;
|
|
|
|
+
|
|
if (!del_mc_from_global_list(mci))
|
|
if (!del_mc_from_global_list(mci))
|
|
edac_mc_owner = NULL;
|
|
edac_mc_owner = NULL;
|
|
- mutex_unlock(&mem_ctls_mutex);
|
|
|
|
|
|
|
|
- /* flush workq processes */
|
|
|
|
- edac_mc_workq_teardown(mci);
|
|
|
|
|
|
+ mutex_unlock(&mem_ctls_mutex);
|
|
|
|
|
|
- /* marking MCI offline */
|
|
|
|
- mci->op_state = OP_OFFLINE;
|
|
|
|
|
|
+ if (mci->edac_check)
|
|
|
|
+ edac_mc_workq_teardown(mci);
|
|
|
|
|
|
/* remove from sysfs */
|
|
/* remove from sysfs */
|
|
edac_remove_sysfs_mci_device(mci);
|
|
edac_remove_sysfs_mci_device(mci);
|