Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43f48e6c authored by Eliav Farber's avatar Eliav Farber Committed by Greg Kroah-Hartman
Browse files

EDAC/device: Fix period calculation in edac_device_reset_delay_period()



commit e84077437902ec99eba0a6b516df772653f142c7 upstream.

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: c4cf3b45 ("EDAC: Rework workqueue handling")
Signed-off-by: default avatarEliav Farber <farbere@amazon.com>
Signed-off-by: default avatarBorislav Petkov (AMD) <bp@alien8.de>
Cc: <stable@kernel.org>
Link: https://lore.kernel.org/r/20221020124458.22153-1-farbere@amazon.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a5b73762
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -424,17 +424,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)
+1 −1
Original line number Diff line number Diff line
@@ -57,7 +57,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);

extern void *edac_align_ptr(void **p, unsigned size, int n_elems);