summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/edac/edac_core.h1
-rw-r--r--drivers/edac/edac_device.c6
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/edac/edac_core.h b/drivers/edac/edac_core.h
index 67691a6d0708..1fa7a36f417b 100644
--- a/drivers/edac/edac_core.h
+++ b/drivers/edac/edac_core.h
@@ -227,6 +227,7 @@ struct edac_device_ctl_info {
int panic_on_ue; /* boolean for panic'ing on an UE */
unsigned poll_msec; /* number of milliseconds to poll interval */
unsigned long delay; /* number of jiffies for poll_msec */
+ bool defer_work; /* Create a deferrable work for polling */
/* Additional top controller level attributes, but specified
* by the low level driver.
diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c
index dc786c26a1e4..27884ff645d8 100644
--- a/drivers/edac/edac_device.c
+++ b/drivers/edac/edac_device.c
@@ -414,7 +414,11 @@ void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
edac_dev->poll_msec = msec;
edac_dev->delay = msecs_to_jiffies(msec);
- INIT_DELAYED_WORK(&edac_dev->work, edac_device_workq_function);
+ if (edac_dev->defer_work)
+ INIT_DEFERRABLE_WORK(&edac_dev->work,
+ edac_device_workq_function);
+ else
+ INIT_DELAYED_WORK(&edac_dev->work, edac_device_workq_function);
/* optimize here for the 1 second case, which will be normal value, to
* fire ON the 1 second time event. This helps reduce all sorts of