The hypervisor expects the timeout from the hypercall to be in nanoseconds, so document this correctly. Also correctly document what happens when timeout is set to zero.
Signed-off-by: Ross Lagerwall <ross.lagerw...@citrix.com> --- docs/misc/livepatch.markdown | 13 +++++++------ tools/libxc/include/xenctrl.h | 2 +- xen/common/livepatch.c | 4 ++-- xen/include/public/sysctl.h | 5 +++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/docs/misc/livepatch.markdown b/docs/misc/livepatch.markdown index 8f0559f..54a6b85 100644 --- a/docs/misc/livepatch.markdown +++ b/docs/misc/livepatch.markdown @@ -689,9 +689,9 @@ The caller provides: payload. If the operation takes more time than the upper bound of time the `rc` in `xen_livepatch_status' retrieved via **XEN_SYSCTL_LIVEPATCH_GET** will be -XEN_EBUSY. - * `time` the upper bound of time (ms) the cmd should take. Zero means infinite. - If within the time the operation does not succeed the operation would go in - error state. + * `time` the upper bound of time (ns) the cmd should take. Zero means to use + the hypervisor default. If within the time the operation does not succeed + the operation would go in error state. * `pad` - *MUST* be zero. The return value will be zero unless the provided fields are incorrect. @@ -706,9 +706,10 @@ The structure is as follow: struct xen_sysctl_livepatch_action { xen_livepatch_name_t name; /* IN, name of the patch. */ uint32_t cmd; /* IN: LIVEPATCH_ACTION_* */ - uint32_t time; /* IN: Zero if no timeout. */ - /* Or upper bound of time (ms) */ - /* for operation to take. */ + uint32_t time; /* IN: If zero then uses */ + /* hypervisor default. */ + /* Or upper bound of time (ns) */ + /* for operation to take. */ }; </pre> diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h index 2c83544..4ab0f57 100644 --- a/tools/libxc/include/xenctrl.h +++ b/tools/libxc/include/xenctrl.h @@ -2703,7 +2703,7 @@ int xc_livepatch_list(xc_interface *xch, unsigned int max, unsigned int start, * The operations are asynchronous and the hypervisor may take a while * to complete them. The `timeout` offers an option to expire the * operation if it could not be completed within the specified time - * (in ms). Value of 0 means let hypervisor decide the best timeout. + * (in ns). Value of 0 means let hypervisor decide the best timeout. */ int xc_livepatch_apply(xc_interface *xch, char *name, uint32_t timeout); int xc_livepatch_revert(xc_interface *xch, char *name, uint32_t timeout); diff --git a/xen/common/livepatch.c b/xen/common/livepatch.c index fc8ef99..246e673 100644 --- a/xen/common/livepatch.c +++ b/xen/common/livepatch.c @@ -1227,8 +1227,8 @@ static int schedule_work(struct payload *data, uint32_t cmd, uint32_t timeout) livepatch_work.data = data; livepatch_work.timeout = timeout ?: MILLISECS(30); - dprintk(XENLOG_DEBUG, LIVEPATCH "%s: timeout is %"PRI_stime"ms\n", - data->name, livepatch_work.timeout / MILLISECS(1)); + dprintk(XENLOG_DEBUG, LIVEPATCH "%s: timeout is %"PRIu32"ns\n", + data->name, livepatch_work.timeout); atomic_set(&livepatch_work.semaphore, -1); diff --git a/xen/include/public/sysctl.h b/xen/include/public/sysctl.h index 28ac56c..00f5e77 100644 --- a/xen/include/public/sysctl.h +++ b/xen/include/public/sysctl.h @@ -1067,8 +1067,9 @@ struct xen_sysctl_livepatch_action { #define LIVEPATCH_ACTION_APPLY 3 #define LIVEPATCH_ACTION_REPLACE 4 uint32_t cmd; /* IN: LIVEPATCH_ACTION_*. */ - uint32_t timeout; /* IN: Zero if no timeout. */ - /* Or upper bound of time (ms) */ + uint32_t timeout; /* IN: If zero then uses */ + /* hypervisor default. */ + /* Or upper bound of time (ns) */ /* for operation to take. */ }; typedef struct xen_sysctl_livepatch_action xen_sysctl_livepatch_action_t; -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org https://lists.xen.org/xen-devel