This allows to modify polling parameters of existing iothread. Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> --- include/libvirt/libvirt-domain.h | 5 ++++ src/driver-hypervisor.h | 8 +++++ src/libvirt-domain.c | 65 ++++++++++++++++++++++++++++++++++++++++ src/libvirt_public.syms | 1 + src/remote/remote_driver.c | 1 + src/remote/remote_protocol.x | 16 +++++++++- src/remote_protocol-structs | 10 +++++++ 7 files changed, 105 insertions(+), 1 deletion(-) diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h index 5ce974292e..aa769760f1 100644 --- a/include/libvirt/libvirt-domain.h +++ b/include/libvirt/libvirt-domain.h @@ -1921,6 +1921,11 @@ int virDomainAddIOThreadParams(virDomainPtr domain, virTypedParameterPtr params, int nparams, unsigned int flags); +int virDomainModIOThreadParams(virDomainPtr domain, + unsigned int iothread_id, + virTypedParameterPtr params, + int nparams, + unsigned int flags); int virDomainDelIOThread(virDomainPtr domain, unsigned int iothread_id, unsigned int flags); diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h index 9c7ce83cd3..02c8e23e66 100644 --- a/src/driver-hypervisor.h +++ b/src/driver-hypervisor.h @@ -406,6 +406,13 @@ typedef int unsigned int flags); typedef int +(*virDrvDomainModIOThreadParams)(virDomainPtr domain, + unsigned int iothread_id, + virTypedParameterPtr params, + int nparams, + unsigned int flags); + +typedef int (*virDrvDomainDelIOThread)(virDomainPtr domain, unsigned int iothread_id, unsigned int flags); @@ -1342,6 +1349,7 @@ struct _virHypervisorDriver { virDrvDomainPinIOThread domainPinIOThread; virDrvDomainAddIOThread domainAddIOThread; virDrvDomainAddIOThreadParams domainAddIOThreadParams; + virDrvDomainModIOThreadParams domainModIOThreadParams; virDrvDomainDelIOThread domainDelIOThread; virDrvDomainGetSecurityLabel domainGetSecurityLabel; virDrvDomainGetSecurityLabelList domainGetSecurityLabelList; diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 691c72dedd..d661e68d5e 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -7826,6 +7826,71 @@ virDomainAddIOThreadParams(virDomainPtr domain, /** + * virDomainModIOThreadParams: + * @domain: a domain object + * @iothread_id: the specific IOThread ID value to modify + * @params: pointer to IOThread parameter objects + * @nparams: number of IOThread parameters + * @flags: bitwise-OR of virDomainModificationImpact and virTypedParameterFlags + * + * Modifies parameters of existing IOThread ID specified by @iothread_id. + * + * The combination of parameters has some limitation, + * see virDomainAddIOThreadParams for detailed description. + * + * See VIR_DOMAIN_IOTHREAD_* for detailed description of accepted IOThread + * parameters. + * + * Note that this call can fail if the underlying virtualization hypervisor + * does not support it or if growing the number of iothreads is arbitrarily + * limited. This function requires privileged access to the hypervisor. + * + * Returns 0 in case of success, -1 in case of failure. + */ +int +virDomainModIOThreadParams(virDomainPtr domain, + unsigned int iothread_id, + virTypedParameterPtr params, + int nparams, + unsigned int flags) +{ + virConnectPtr conn; + + VIR_DOMAIN_DEBUG(domain, "iothread_id=%u, params=%p, nparams=%d, flags=%x", + iothread_id, params, nparams, flags); + VIR_TYPED_PARAMS_DEBUG(params, nparams); + + virResetLastError(); + + virCheckDomainReturn(domain, -1); + conn = domain->conn; + + virCheckReadOnlyGoto(conn->flags, error); + virCheckNonNegativeArgGoto(nparams, error); + if (nparams) + virCheckNonNullArgGoto(params, error); + + if (virTypedParameterValidateSet(conn, params, nparams) < 0) + goto error; + + if (conn->driver->domainModIOThreadParams) { + int ret; + ret = conn->driver->domainModIOThreadParams(domain, iothread_id, + params, nparams, flags); + if (ret < 0) + goto error; + return ret; + } + + virReportUnsupportedError(); + + error: + virDispatchError(domain->conn); + return -1; +} + + +/** * virDomainDelIOThread: * @domain: a domain object * @iothread_id: the specific IOThread ID value to delete diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms index edf72d23aa..de7f344d0d 100644 --- a/src/libvirt_public.syms +++ b/src/libvirt_public.syms @@ -756,6 +756,7 @@ LIBVIRT_3.0.0 { LIBVIRT_3.1.0 { global: virDomainAddIOThreadParams; + virDomainModIOThreadParams; } LIBVIRT_3.0.0; # .... define new API here using predicted next version number .... diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index f9e246b8bc..5086a678eb 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -8247,6 +8247,7 @@ static virHypervisorDriver hypervisor_driver = { .domainPinIOThread = remoteDomainPinIOThread, /* 1.2.14 */ .domainAddIOThread = remoteDomainAddIOThread, /* 1.2.15 */ .domainAddIOThreadParams = remoteDomainAddIOThreadParams, /* 3.1.0 */ + .domainModIOThreadParams = remoteDomainModIOThreadParams, /* 3.1.0 */ .domainDelIOThread = remoteDomainDelIOThread, /* 1.2.15 */ .domainGetSecurityLabel = remoteDomainGetSecurityLabel, /* 0.6.1 */ .domainGetSecurityLabelList = remoteDomainGetSecurityLabelList, /* 0.10.0 */ diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index 146c38b3f4..238a29b481 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -1237,6 +1237,13 @@ struct remote_domain_add_iothread_params_args { unsigned int flags; }; +struct remote_domain_mod_iothread_params_args { + remote_nonnull_domain dom; + unsigned int iothread_id; + remote_typed_param params<REMOTE_DOMAIN_IOTHREAD_PARAMS_MAX>; + unsigned int flags; +}; + struct remote_domain_del_iothread_args { remote_nonnull_domain dom; unsigned int iothread_id; @@ -6036,6 +6043,13 @@ enum remote_procedure { * @acl: domain:save:!VIR_DOMAIN_AFFECT_CONFIG|VIR_DOMAIN_AFFECT_LIVE * @acl: domain:save:VIR_DOMAIN_AFFECT_CONFIG */ - REMOTE_PROC_DOMAIN_ADD_IOTHREAD_PARAMS = 384 + REMOTE_PROC_DOMAIN_ADD_IOTHREAD_PARAMS = 384, + /** + * @generate: both + * @acl: domain:write + * @acl: domain:save:!VIR_DOMAIN_AFFECT_CONFIG|VIR_DOMAIN_AFFECT_LIVE + * @acl: domain:save:VIR_DOMAIN_AFFECT_CONFIG + */ + REMOTE_PROC_DOMAIN_MOD_IOTHREAD_PARAMS = 385 }; diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index 2e3245322f..7672110578 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -866,6 +866,15 @@ struct remote_domain_add_iothread_params_args { } params; u_int flags; }; +struct remote_domain_mod_iothread_params_args { + remote_nonnull_domain dom; + u_int iothread_id; + struct { + u_int params_len; + remote_typed_param * params_val; + } params; + u_int flags; +}; struct remote_domain_del_iothread_args { remote_nonnull_domain dom; u_int iothread_id; @@ -3220,4 +3229,5 @@ enum remote_procedure { REMOTE_PROC_SECRET_EVENT_LIFECYCLE = 382, REMOTE_PROC_SECRET_EVENT_VALUE_CHANGED = 383, REMOTE_PROC_DOMAIN_ADD_IOTHREAD_PARAMS = 384, + REMOTE_PROC_DOMAIN_MOD_IOTHREAD_PARAMS = 385, }; -- 2.11.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list