Re: [PATCH v6 01/17] EDAC/device: Respect any driver-supplied workqueue polling value

From: Bjorn Andersson
Date: Wed Jan 18 2023 - 12:48:09 EST


On Wed, Jan 18, 2023 at 08:38:48PM +0530, Manivannan Sadhasivam wrote:
> The EDAC drivers may optionally pass the poll_msec value. Use that value
> if available, else fall back to 1000ms.
>
> [ bp: Touchups. ]
>
> Fixes: e27e3dac6517 ("drivers/edac: add edac_device class")
> Reported-by: Luca Weiss <luca.weiss@xxxxxxxxxxxxx>
> Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx>

Your S-o-b should be the last one to indicate that you are the one
certifying the origin of this patch.

> Signed-off-by: Borislav Petkov (AMD) <bp@xxxxxxxxx>

If the two of you wrote the patch, please add a Co-developed-by.

Thanks,
Bjorn

> Tested-by: Steev Klimaszewski <steev@xxxxxxxx> # Thinkpad X13s
> Tested-by: Andrew Halaney <ahalaney@xxxxxxxxxx> # sa8540p-ride
> Cc: <stable@xxxxxxxxxxxxxxx> # 4.9
> Link: https://lore.kernel.org/r/COZYL8MWN97H.MROQ391BGA09@otso
> ---
> drivers/edac/edac_device.c | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/edac/edac_device.c b/drivers/edac/edac_device.c
> index 19522c568aa5..a50b7bcfb731 100644
> --- a/drivers/edac/edac_device.c
> +++ b/drivers/edac/edac_device.c
> @@ -34,6 +34,9 @@
> static DEFINE_MUTEX(device_ctls_mutex);
> static LIST_HEAD(edac_device_list);
>
> +/* Default workqueue processing interval on this instance, in msecs */
> +#define DEFAULT_POLL_INTERVAL 1000
> +
> #ifdef CONFIG_EDAC_DEBUG
> static void edac_device_dump_device(struct edac_device_ctl_info *edac_dev)
> {
> @@ -336,7 +339,7 @@ static void edac_device_workq_function(struct work_struct *work_req)
> * whole one second to save timers firing all over the period
> * between integral seconds
> */
> - if (edac_dev->poll_msec == 1000)
> + if (edac_dev->poll_msec == DEFAULT_POLL_INTERVAL)
> edac_queue_work(&edac_dev->work, round_jiffies_relative(edac_dev->delay));
> else
> edac_queue_work(&edac_dev->work, edac_dev->delay);
> @@ -366,7 +369,7 @@ static void edac_device_workq_setup(struct edac_device_ctl_info *edac_dev,
> * timers firing on sub-second basis, while they are happy
> * to fire together on the 1 second exactly
> */
> - if (edac_dev->poll_msec == 1000)
> + if (edac_dev->poll_msec == DEFAULT_POLL_INTERVAL)
> edac_queue_work(&edac_dev->work, round_jiffies_relative(edac_dev->delay));
> else
> edac_queue_work(&edac_dev->work, edac_dev->delay);
> @@ -398,7 +401,7 @@ void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev,
> {
> unsigned long jiffs = msecs_to_jiffies(value);
>
> - if (value == 1000)
> + if (value == DEFAULT_POLL_INTERVAL)
> jiffs = round_jiffies_relative(value);
>
> edac_dev->poll_msec = value;
> @@ -443,11 +446,7 @@ int edac_device_add_device(struct edac_device_ctl_info *edac_dev)
> /* This instance is NOW RUNNING */
> edac_dev->op_state = OP_RUNNING_POLL;
>
> - /*
> - * enable workq processing on this instance,
> - * default = 1000 msec
> - */
> - edac_device_workq_setup(edac_dev, 1000);
> + edac_device_workq_setup(edac_dev, edac_dev->poll_msec ?: DEFAULT_POLL_INTERVAL);
> } else {
> edac_dev->op_state = OP_RUNNING_INTERRUPT;
> }
> --
> 2.25.1
>