drivers/hv/hv_balloon.c | 9 +++++---- drivers/hv/hv_kvp.c | 4 ++-- drivers/hv/hv_snapshot.c | 6 ++++-- drivers/hv/vmbus_drv.c | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-)
We have several places where timeouts are open-coded as N (seconds) * HZ,
but best practice is to use msecs_to_jiffies(). Convert the timeouts to
make them HZ invariant.
Signed-off-by: Easwar Hariharan <eahariha@linux.microsoft.com>
---
drivers/hv/hv_balloon.c | 9 +++++----
drivers/hv/hv_kvp.c | 4 ++--
drivers/hv/hv_snapshot.c | 6 ++++--
drivers/hv/vmbus_drv.c | 2 +-
4 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c
index c38dcdfcb914d..3017d41f12681 100644
--- a/drivers/hv/hv_balloon.c
+++ b/drivers/hv/hv_balloon.c
@@ -756,7 +756,7 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size,
* adding succeeded, it is ok to proceed even if the memory was
* not onlined in time.
*/
- wait_for_completion_timeout(&dm_device.ol_waitevent, 5 * HZ);
+ wait_for_completion_timeout(&dm_device.ol_waitevent, msecs_to_jiffies(5 * 1000));
post_status(&dm_device);
}
}
@@ -1373,7 +1373,8 @@ static int dm_thread_func(void *dm_dev)
struct hv_dynmem_device *dm = dm_dev;
while (!kthread_should_stop()) {
- wait_for_completion_interruptible_timeout(&dm_device.config_event, 1 * HZ);
+ wait_for_completion_interruptible_timeout(&dm_device.config_event,
+ msecs_to_jiffies(1 * 1000));
/*
* The host expects us to post information on the memory
* pressure every second.
@@ -1748,7 +1749,7 @@ static int balloon_connect_vsp(struct hv_device *dev)
if (ret)
goto out;
- t = wait_for_completion_timeout(&dm_device.host_event, 5 * HZ);
+ t = wait_for_completion_timeout(&dm_device.host_event, msecs_to_jiffies(5 * 1000));
if (t == 0) {
ret = -ETIMEDOUT;
goto out;
@@ -1806,7 +1807,7 @@ static int balloon_connect_vsp(struct hv_device *dev)
if (ret)
goto out;
- t = wait_for_completion_timeout(&dm_device.host_event, 5 * HZ);
+ t = wait_for_completion_timeout(&dm_device.host_event, msecs_to_jiffies(5 * 1000));
if (t == 0) {
ret = -ETIMEDOUT;
goto out;
diff --git a/drivers/hv/hv_kvp.c b/drivers/hv/hv_kvp.c
index d35b60c061148..8d9ae1b0e8788 100644
--- a/drivers/hv/hv_kvp.c
+++ b/drivers/hv/hv_kvp.c
@@ -655,7 +655,7 @@ void hv_kvp_onchannelcallback(void *context)
if (host_negotiatied == NEGO_NOT_STARTED) {
host_negotiatied = NEGO_IN_PROGRESS;
schedule_delayed_work(&kvp_host_handshake_work,
- HV_UTIL_NEGO_TIMEOUT * HZ);
+ msecs_to_jiffies(HV_UTIL_NEGO_TIMEOUT * 1000));
}
return;
}
@@ -724,7 +724,7 @@ void hv_kvp_onchannelcallback(void *context)
*/
schedule_work(&kvp_sendkey_work);
schedule_delayed_work(&kvp_timeout_work,
- HV_UTIL_TIMEOUT * HZ);
+ msecs_to_jiffies(HV_UTIL_TIMEOUT * 1000));
return;
diff --git a/drivers/hv/hv_snapshot.c b/drivers/hv/hv_snapshot.c
index 0d2184be16912..be4955613db35 100644
--- a/drivers/hv/hv_snapshot.c
+++ b/drivers/hv/hv_snapshot.c
@@ -192,8 +192,10 @@ static void vss_send_op(void)
vss_transaction.state = HVUTIL_USERSPACE_REQ;
- schedule_delayed_work(&vss_timeout_work, op == VSS_OP_FREEZE ?
- VSS_FREEZE_TIMEOUT * HZ : HV_UTIL_TIMEOUT * HZ);
+ schedule_delayed_work(&vss_timeout_work,
+ op == VSS_OP_FREEZE ?
+ msecs_to_jiffies(VSS_FREEZE_TIMEOUT * 1000) :
+ msecs_to_jiffies(HV_UTIL_TIMEOUT * 1000));
rc = hvutil_transport_send(hvt, vss_msg, sizeof(*vss_msg), NULL);
if (rc) {
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 9b15f7daf5059..e35e0a615cb58 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -2507,7 +2507,7 @@ static int vmbus_bus_resume(struct device *dev)
vmbus_request_offers();
if (wait_for_completion_timeout(
- &vmbus_connection.ready_for_resume_event, 10 * HZ) == 0)
+ &vmbus_connection.ready_for_resume_event, msecs_to_jiffies(10 * 1000)) == 0)
pr_err("Some vmbus device is missing after suspending?\n");
/* Reset the event for the next suspend. */
--
2.43.0
On 10/17/2024 4:07 AM, Easwar Hariharan wrote: > We have several places where timeouts are open-coded as N (seconds) * HZ, > but best practice is to use msecs_to_jiffies(). Convert the timeouts to > make them HZ invariant. > > Signed-off-by: Easwar Hariharan <eahariha@linux.microsoft.com> > --- > drivers/hv/hv_balloon.c | 9 +++++---- > drivers/hv/hv_kvp.c | 4 ++-- > drivers/hv/hv_snapshot.c | 6 ++++-- > drivers/hv/vmbus_drv.c | 2 +- > 4 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c > index c38dcdfcb914d..3017d41f12681 100644 > --- a/drivers/hv/hv_balloon.c <.> > if (wait_for_completion_timeout( > - &vmbus_connection.ready_for_resume_event, 10 * HZ) == 0) > + &vmbus_connection.ready_for_resume_event, msecs_to_jiffies(10 * 1000)) == 0) > pr_err("Some vmbus device is missing after suspending?\n"); > > /* Reset the event for the next suspend. */ Looks good to me. There can be different ways of passing arg to msecs_to_jiffies though- for 10 seconds * 10000 * 10 * 1000 * 10 * MSEC_PER_SEC I don't have any strong opinion on this, and you can probably choose whichever feels better. Even the current implementation with x * HZ works fine, with different HZ values. But, yes, I agree that using msecs_to_jiffies is better. Regards, Naman
On 17-10-2024 04:07, Easwar Hariharan wrote: > We have several places where timeouts are open-coded as N (seconds) * HZ, > but best practice is to use msecs_to_jiffies(). Convert the timeouts to > make them HZ invariant. > > Signed-off-by: Easwar Hariharan <eahariha@linux.microsoft.com> > --- > drivers/hv/hv_balloon.c | 9 +++++---- > drivers/hv/hv_kvp.c | 4 ++-- > drivers/hv/hv_snapshot.c | 6 ++++-- > drivers/hv/vmbus_drv.c | 2 +- > 4 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c > index c38dcdfcb914d..3017d41f12681 100644 > --- a/drivers/hv/hv_balloon.c > +++ b/drivers/hv/hv_balloon.c > @@ -756,7 +756,7 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size, > * adding succeeded, it is ok to proceed even if the memory was > * not onlined in time. > */ > - wait_for_completion_timeout(&dm_device.ol_waitevent, 5 * HZ); > + wait_for_completion_timeout(&dm_device.ol_waitevent, msecs_to_jiffies(5 * 1000)); Is it correct to convert HZ to 1000 ? Also, how are you testing these changes ? Regards, ~Praveen.
On 10/18/2024 12:54 AM, Praveen Kumar wrote: > On 17-10-2024 04:07, Easwar Hariharan wrote: >> We have several places where timeouts are open-coded as N (seconds) * HZ, >> but best practice is to use msecs_to_jiffies(). Convert the timeouts to >> make them HZ invariant. >>> Signed-off-by: Easwar Hariharan <eahariha@linux.microsoft.com> >> --- >> drivers/hv/hv_balloon.c | 9 +++++---- >> drivers/hv/hv_kvp.c | 4 ++-- >> drivers/hv/hv_snapshot.c | 6 ++++-- >> drivers/hv/vmbus_drv.c | 2 +- >> 4 files changed, 12 insertions(+), 9 deletions(-) >> >> diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c >> index c38dcdfcb914d..3017d41f12681 100644 >> --- a/drivers/hv/hv_balloon.c >> +++ b/drivers/hv/hv_balloon.c >> @@ -756,7 +756,7 @@ static void hv_mem_hot_add(unsigned long start, unsigned long size, >> * adding succeeded, it is ok to proceed even if the memory was >> * not onlined in time. >> */ >> - wait_for_completion_timeout(&dm_device.ol_waitevent, 5 * HZ); >> + wait_for_completion_timeout(&dm_device.ol_waitevent, msecs_to_jiffies(5 * 1000)); > > Is it correct to convert HZ to 1000 ? > Also, how are you testing these changes ? > It's a conversion of milliseconds to seconds, rather than HZ to 1000. :) msecs_to_jiffies() handles the conversion to jiffies with HZ. As Naman mentioned, this could be equivalently written as 5 * MSECS_PER_SEC, and would probably be more readable. On testing, this is only compile-tested, and that's part of the reason why it's an RFC, since I'm not 100% sure every one of these timeouts is measured in seconds. Hoping for folks more familiar with the code to take a look. Thanks, Easwar
© 2016 - 2024 Red Hat, Inc.