/* edac_mc_workq_function performs the operation scheduled by a workq request  */
static void edac_mc_workq_function(struct work_struct *work_req)
/* edac_mc_workq_function performs the operation scheduled by a workq request  */
static void edac_mc_workq_function(struct work_struct *work_req)
{
	struct delayed_work *d_work = to_delayed_work(work_req);
	struct mem_ctl_info *mci = to_edac_mem_ctl_work(d_work);
	mutex_lock(&mem_ctls_mutex);
	if (mci->op_state == OP_OFFLINE) {
		mutex_unlock(&mem_ctls_mutex);
		return;
	}
	if (edac_mc_assert_error_check_and_clear() && (mci->edac_check != NULL))
		mci->edac_check(mci);
	mutex_unlock(&mem_ctls_mutex);
	queue_delayed_work(edac_workqueue, &mci->work,
			msecs_to_jiffies(edac_mc_get_poll_msec()));
}