On 8/20/2026 10:11 AM, Peter Krempa via Devel wrote:
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]>

Thanks for the review and for applying the fixes directly, Peter.
I'll keep those two points in mind for future patches.

Thanks,
Jaehoon.


Reply via email to