From b01e9936561d827c9eba462ca194fadf48765820 Mon Sep 17 00:00:00 2001 From: Taku Izumi Date: Mon, 13 Jun 2011 23:45:29 +0800 Subject: [PATCH] vcpupin: implement the remote protocol to address the new API This patch implements the remote protocol for the new API (virDomainPinVcpuFlags). --- daemon/remote.c | 42 ++++++++++++++++++++++++++++++++++++ daemon/remote_generator.pl | 3 +++ src/remote/remote_driver.c | 1 + src/remote/remote_protocol.x | 10 ++++++++- src/remote_protocol-structs | 9 ++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) diff --git a/daemon/remote.c b/daemon/remote.c index 49058f2325..e854ed03cc 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -1276,6 +1276,48 @@ cleanup: return rv; } +static int +remoteDispatchDomainPinVcpuFlags(struct qemud_server *server ATTRIBUTE_UNUSED, + struct qemud_client *client ATTRIBUTE_UNUSED, + virConnectPtr conn, + remote_message_header *hdr ATTRIBUTE_UNUSED, + remote_error *rerr, + remote_domain_pin_vcpu_flags_args *args, + void *ret ATTRIBUTE_UNUSED) +{ + virDomainPtr dom = NULL; + int rv = -1; + + if (!conn) { + virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("connection not open")); + goto cleanup; + } + + if (!(dom = get_nonnull_domain(conn, args->dom))) + goto cleanup; + + if (args->cpumap.cpumap_len > REMOTE_CPUMAP_MAX) { + virNetError(VIR_ERR_INTERNAL_ERROR, "%s", _("cpumap_len > REMOTE_CPUMAP_MAX")); + goto cleanup; + } + + if (virDomainPinVcpuFlags(dom, + args->vcpu, + (unsigned char *) args->cpumap.cpumap_val, + args->cpumap.cpumap_len, + args->flags) < 0) + goto cleanup; + + rv = 0; + +cleanup: + if (rv < 0) + remoteDispatchError(rerr); + if (dom) + virDomainFree(dom); + return rv; +} + static int remoteDispatchDomainGetMemoryParameters(struct qemud_server *server ATTRIBUTE_UNUSED, diff --git a/daemon/remote_generator.pl b/daemon/remote_generator.pl index 632972c40a..365cf7c6cb 100755 --- a/daemon/remote_generator.pl +++ b/daemon/remote_generator.pl @@ -977,6 +977,9 @@ elsif ($opt_k) { } elsif ($call->{ProcName} eq "DomainPinVcpu") { push(@args_list, "unsigned char *$arg_name"); push(@args_list, "int ${arg_name}len"); + } elsif ($call->{ProcName} eq "DomainPinVcpuFlags") { + push(@args_list, "unsigned char *$arg_name"); + push(@args_list, "int ${arg_name}len"); } else { push(@args_list, "const char *$arg_name"); push(@args_list, "int ${arg_name}len"); diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 8335a1aed7..f439e0981e 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -6259,6 +6259,7 @@ static virDriver remote_driver = { .domainSetVcpusFlags = remoteDomainSetVcpusFlags, /* 0.8.5 */ .domainGetVcpusFlags = remoteDomainGetVcpusFlags, /* 0.8.5 */ .domainPinVcpu = remoteDomainPinVcpu, /* 0.3.0 */ + .domainPinVcpuFlags = remoteDomainPinVcpuFlags, /* 0.9.3 */ .domainGetVcpus = remoteDomainGetVcpus, /* 0.3.0 */ .domainGetMaxVcpus = remoteDomainGetMaxVcpus, /* 0.3.0 */ .domainGetSecurityLabel = remoteDomainGetSecurityLabel, /* 0.6.1 */ diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x index c9b8cff6ff..719c2352a6 100644 --- a/src/remote/remote_protocol.x +++ b/src/remote/remote_protocol.x @@ -837,6 +837,13 @@ struct remote_domain_pin_vcpu_args { opaque cpumap; }; +struct remote_domain_pin_vcpu_flags_args { + remote_nonnull_domain dom; + unsigned int vcpu; + opaque cpumap; + unsigned int flags; +}; + struct remote_domain_get_vcpus_args { remote_nonnull_domain dom; int maxinfo; @@ -2297,7 +2304,8 @@ enum remote_procedure { REMOTE_PROC_INTERFACE_CHANGE_COMMIT = 221, /* autogen autogen */ REMOTE_PROC_INTERFACE_CHANGE_ROLLBACK = 222, /* autogen autogen */ REMOTE_PROC_DOMAIN_GET_SCHEDULER_PARAMETERS_FLAGS = 223, /* skipgen autogen */ - REMOTE_PROC_DOMAIN_EVENT_CONTROL_ERROR = 224 /* skipgen skipgen */ + REMOTE_PROC_DOMAIN_EVENT_CONTROL_ERROR = 224, /* skipgen skipgen */ + REMOTE_PROC_DOMAIN_PIN_VCPU_FLAGS = 225 /* skipgen autogen */ /* * Notice how the entries are grouped in sets of 10 ? diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs index 1d90dd599d..7198bd833b 100644 --- a/src/remote_protocol-structs +++ b/src/remote_protocol-structs @@ -529,6 +529,15 @@ struct remote_domain_pin_vcpu_args { char * cpumap_val; } cpumap; }; +struct remote_domain_pin_vcpu_flags_args { + remote_nonnull_domain dom; + u_int vcpu; + struct { + u_int cpumap_len; + char * cpumap_val; + } cpumap; + u_int flags; +}; struct remote_domain_get_vcpus_args { remote_nonnull_domain dom; int maxinfo;