hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/edac/edac_device.c
....@@ -34,6 +34,9 @@
3434 static DEFINE_MUTEX(device_ctls_mutex);
3535 static LIST_HEAD(edac_device_list);
3636
37
+/* Default workqueue processing interval on this instance, in msecs */
38
+#define DEFAULT_POLL_INTERVAL 1000
39
+
3740 #ifdef CONFIG_EDAC_DEBUG
3841 static void edac_device_dump_device(struct edac_device_ctl_info *edac_dev)
3942 {
....@@ -366,7 +369,7 @@
366369 * whole one second to save timers firing all over the period
367370 * between integral seconds
368371 */
369
- if (edac_dev->poll_msec == 1000)
372
+ if (edac_dev->poll_msec == DEFAULT_POLL_INTERVAL)
370373 edac_queue_work(&edac_dev->work, round_jiffies_relative(edac_dev->delay));
371374 else
372375 edac_queue_work(&edac_dev->work, edac_dev->delay);
....@@ -396,7 +399,7 @@
396399 * timers firing on sub-second basis, while they are happy
397400 * to fire together on the 1 second exactly
398401 */
399
- if (edac_dev->poll_msec == 1000)
402
+ if (edac_dev->poll_msec == DEFAULT_POLL_INTERVAL)
400403 edac_queue_work(&edac_dev->work, round_jiffies_relative(edac_dev->delay));
401404 else
402405 edac_queue_work(&edac_dev->work, edac_dev->delay);
....@@ -424,17 +427,16 @@
424427 * Then restart the workq on the new delay
425428 */
426429 void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev,
427
- unsigned long value)
430
+ unsigned long msec)
428431 {
429
- unsigned long jiffs = msecs_to_jiffies(value);
432
+ edac_dev->poll_msec = msec;
433
+ edac_dev->delay = msecs_to_jiffies(msec);
430434
431
- if (value == 1000)
432
- jiffs = round_jiffies_relative(value);
433
-
434
- edac_dev->poll_msec = value;
435
- edac_dev->delay = jiffs;
436
-
437
- edac_mod_work(&edac_dev->work, jiffs);
435
+ /* See comment in edac_device_workq_setup() above */
436
+ if (edac_dev->poll_msec == DEFAULT_POLL_INTERVAL)
437
+ edac_mod_work(&edac_dev->work, round_jiffies_relative(edac_dev->delay));
438
+ else
439
+ edac_mod_work(&edac_dev->work, edac_dev->delay);
438440 }
439441
440442 int edac_device_alloc_index(void)
....@@ -473,11 +475,7 @@
473475 /* This instance is NOW RUNNING */
474476 edac_dev->op_state = OP_RUNNING_POLL;
475477
476
- /*
477
- * enable workq processing on this instance,
478
- * default = 1000 msec
479
- */
480
- edac_device_workq_setup(edac_dev, 1000);
478
+ edac_device_workq_setup(edac_dev, edac_dev->poll_msec ?: DEFAULT_POLL_INTERVAL);
481479 } else {
482480 edac_dev->op_state = OP_RUNNING_INTERRUPT;
483481 }