On Sat, Aug 01, 2026 at 12:04:25 -0500, Jaehoon Kim wrote:
Extend iothreadset to allow configuring the iothread poll-weight value
from the command line.
Add a --poll-weight option to opts_iothreadset and wire it up in
cmdIOThreadSet. The value is validated against the accepted range
[0, 63] before being passed to the backend as
VIR_DOMAIN_IOTHREAD_POLL_WEIGHT. If the option is omitted the parameter
is not added to the list and the backend leaves the value unchanged.
Document --poll-weight in the iothreadset section of the virsh manpage
and update the syntax synopsis to include the new option. Extend the
virsh test suite with an iothreadset --poll-weight 3 call followed by
a domstats check that confirms the updated value is reflected.
Signed-off-by: Jaehoon Kim <[email protected]>
---
docs/manpages/virsh.rst | 16 ++++++++++------
tests/virshtestdata/iothreads.in | 2 ++
tests/virshtestdata/iothreads.out | 14 ++++++++++++++
tools/virsh-domain.c | 17 +++++++++++++++++
4 files changed, 43 insertions(+), 6 deletions(-)
[...]
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 0f177fb69a..c5158889cc 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -8271,6 +8271,11 @@ static const vshCmdOptDef opts_iothreadset[] = {
.unwanted_positional = true,
.help = N_("set the value for reduction of the IOThread polling time")
},
+ {.name = "poll-weight",
+ .type = VSH_OT_INT,
+ .unwanted_positional = true,
As the name of the property suggests it's not wanted. This is a
compatibility for old properties that were positional but we didn't want
them to be positional. So you *must not* add any of these ever for any
new property.
And even if you would for any reason want to add a positional argument
you definitely can't add it *before* any other existing positional
argument as it breaks existing commandlines which specify it as
positional rather than with explicit flag name.
+ .help = N_("set the adaptive polling weight factor")
+ },
{.name = "thread-pool-min",
.type = VSH_OT_INT,
.unwanted_positional = true,
^^^^
@@ -8300,6 +8305,7 @@ cmdIOThreadSet(vshControl *ctl, const vshCmd *cmd)
virTypedParameterPtr par;
size_t npar = 0;
unsigned long long poll_val;
+ unsigned int poll_weight;
int thread_val;
int rc;
@@ -8336,6 +8342,17 @@ cmdIOThreadSet(vshControl *ctl, const vshCmd *cmd)
if (rc > 0)
virTypedParamListAddUnsigned(params, poll_val,
VIR_DOMAIN_IOTHREAD_POLL_SHRINK);
+ if ((rc = vshCommandOptUInt(ctl, cmd, "poll-weight", &poll_weight)) < 0)
+ return false;
+ if (rc > 0) {
+ if (poll_weight > 63) {
+ vshError(ctl, _("poll-weight value %1$u is out of range [0, 63]"),
+ poll_weight);
+ return false;
I don't think a client side check is needed here.
+ }
+ virTypedParamListAddUInt(params, poll_weight,
VIR_DOMAIN_IOTHREAD_POLL_WEIGHT);
+ }
+
if ((rc = vshCommandOptInt(ctl, cmd, "thread-pool-min", &thread_val)) < 0)
return false;
if (rc > 0)
--
2.54.0
With the 'unwanted_positional' flag removed and the client side check
removed:
Reviewed-by: Peter Krempa <[email protected]>