Skip to content

Commit

Permalink
EDAC/device: Fix period calculation in edac_device_reset_delay_period()
Browse files Browse the repository at this point in the history
Fix period calculation in case user sets a value of 1000.  The input of
round_jiffies_relative() should be in jiffies and not in milli-seconds.

  [ bp: Use the same code pattern as in edac_device_workq_setup() for
    clarity. ]

Fixes: c4cf3b4 ("EDAC: Rework workqueue handling")
Signed-off-by: Eliav Farber <farbere@amazon.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Cc: <stable@kernel.org>
Link: https://lore.kernel.org/r/20221020124458.22153-1-farbere@amazon.com
  • Loading branch information
Eliav Farber authored and Borislav Petkov (AMD) committed Dec 30, 2022
1 parent 1b929c0 commit e840774
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 10 deletions.
17 changes: 8 additions & 9 deletions drivers/edac/edac_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -394,17 +394,16 @@ static void edac_device_workq_teardown(struct edac_device_ctl_info *edac_dev)
* Then restart the workq on the new delay
*/
void edac_device_reset_delay_period(struct edac_device_ctl_info *edac_dev,
unsigned long value)
unsigned long msec)
{
unsigned long jiffs = msecs_to_jiffies(value);

if (value == 1000)
jiffs = round_jiffies_relative(value);

edac_dev->poll_msec = value;
edac_dev->delay = jiffs;
edac_dev->poll_msec = msec;
edac_dev->delay = msecs_to_jiffies(msec);

edac_mod_work(&edac_dev->work, jiffs);
/* See comment in edac_device_workq_setup() above */
if (edac_dev->poll_msec == 1000)
edac_mod_work(&edac_dev->work, round_jiffies_relative(edac_dev->delay));
else
edac_mod_work(&edac_dev->work, edac_dev->delay);
}

int edac_device_alloc_index(void)
Expand Down
2 changes: 1 addition & 1 deletion drivers/edac/edac_module.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ bool edac_stop_work(struct delayed_work *work);
bool edac_mod_work(struct delayed_work *work, unsigned long delay);

extern void edac_device_reset_delay_period(struct edac_device_ctl_info
*edac_dev, unsigned long value);
*edac_dev, unsigned long msec);
extern void edac_mc_reset_delay_period(unsigned long value);

/*
Expand Down

0 comments on commit e840774

Please sign in to comment.