From nobody Sat May 4 23:48:04 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1525429476497992.6285482598485; Fri, 4 May 2018 03:24:36 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A47A42821C; Fri, 4 May 2018 10:24:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D8997271BD; Fri, 4 May 2018 10:24:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 52BF7180BAE6; Fri, 4 May 2018 10:24:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w44AJsKI011670 for ; Fri, 4 May 2018 06:19:55 -0400 Received: by smtp.corp.redhat.com (Postfix) id C2F2E83B86; Fri, 4 May 2018 10:19:54 +0000 (UTC) Received: from katerina.brq.redhat.com (unknown [10.43.2.14]) by smtp.corp.redhat.com (Postfix) with ESMTP id 65AEE42226 for ; Fri, 4 May 2018 10:19:52 +0000 (UTC) From: Katerina Koukiou To: libvir-list@redhat.com Date: Fri, 4 May 2018 12:19:50 +0200 Message-Id: <20180504101950.16850-1-kkoukiou@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus PATCH v2] Implement SetGuestVcpus method for Domain Interface X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 04 May 2018 10:24:35 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Katerina Koukiou --- Fixed conditions since v1 was creating incorrect vcpumap. If all vcpus will be passed False the API will not work, since '' is not valid cpumap but this scenario should not be used. data/org.libvirt.Domain.xml | 7 +++++ src/domain.c | 62 +++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 69 insertions(+) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index db43b1c..eae6d97 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -463,6 +463,13 @@ + + + + + + diff --git a/src/domain.c b/src/domain.c index e305fa3..28cbe76 100644 --- a/src/domain.c +++ b/src/domain.c @@ -72,6 +72,39 @@ VIRT_DBUS_ENUM_IMPL(virtDBusDomainMetadata, "title", "element") =20 +static gchar * +virtDBusDomainConvertBoolArrayToGuestVcpumap(GVariantIter *iter) +{ + g_autoptr(GVariantIter) tmpIter =3D NULL; + gint intervalCnt =3D 0; + guint intervalStart =3D 0; + gboolean set; + gboolean setPrev =3D 0; + g_autofree GString *ret =3D NULL; + + ret =3D g_string_new(""); + for (guint i =3D 0; ; i++) { + gboolean next =3D g_variant_iter_loop(iter, "b", &set); + + if (next && set && !setPrev) + intervalStart =3D i; + else if ((!next && setPrev) || (!set && setPrev)) { + if (intervalCnt > 0) + g_string_append_printf(ret, ","); + if (intervalStart !=3D i - 1) + g_string_append_printf(ret, "%d-%d", intervalStart, i - 1); + else + g_string_append_printf(ret, "%d", intervalStart); + intervalCnt++; + } + setPrev =3D set; + if (!next) + break; + } + + return ret->str; +} + struct _virtDBusDomainFSInfoList { virDomainFSInfoPtr *info; gint count; @@ -2490,6 +2523,34 @@ virtDBusDomainSetBlockIOTune(GVariant *inArgs, } } =20 +static void +virtDBusDomainSetGuestVcpus(GVariant *inArgs, + GUnixFDList *inFDs G_GNUC_UNUSED, + const gchar *objectPath, + gpointer userData, + GVariant **outArgs G_GNUC_UNUSED, + GUnixFDList **outFDs G_GNUC_UNUSED, + GError **error) +{ + virtDBusConnect *connect =3D userData; + g_autoptr(virDomain) domain =3D NULL; + g_autoptr(GVariantIter) iter =3D NULL; + gint state; + guint flags; + g_autofree gchar *ret =3D NULL; + + g_variant_get(inArgs, "(abiu)", &iter, &state, &flags); + + domain =3D virtDBusDomainGetVirDomain(connect, objectPath, error); + if (!domain) + return; + + ret =3D virtDBusDomainConvertBoolArrayToGuestVcpumap(iter); + + if (virDomainSetGuestVcpus(domain, ret, state, flags) < 0) + virtDBusUtilSetLastVirtError(error); +} + static void virtDBusDomainSetInterfaceParameters(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -2988,6 +3049,7 @@ static virtDBusGDBusMethodTable virtDBusDomainMethodT= able[] =3D { { "SendProcessSignal", virtDBusDomainSendProcessSignal }, { "SetBlkioParameters", virtDBusDomainSetBlkioParameters }, { "SetBlockIOTune", virtDBusDomainSetBlockIOTune }, + { "SetGuestVcpus", virtDBusDomainSetGuestVcpus }, { "SetInterfaceParameters", virtDBusDomainSetInterfaceParameters }, { "SetVcpus", virtDBusDomainSetVcpus }, { "SetMemory", virtDBusDomainSetMemory }, --=20 2.15.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list