[libvirt] [PATCH V5 11/12] src/xenxs: Refactor code formating emulated devices config
Jim Fehlig
jfehlig at suse.com
Thu Aug 14 17:23:28 UTC 2014
Kiarie Kahurani wrote:
> introduce function
> xenFormatXMEmulatedHardware(virConfPtr conf,....);
>
You've also added xenFormatXMVif in this patch. It should be in a
separate patch IMO. Once removed, a better description of this patch is
"src/xenxs: Refactor code formating peripheral device config" since it
parses input devices, sound, etc.
> which formats emulated hardware config instead
>
> Signed-off-by: Kiarie Kahurani <davidkiarie4 at gmail.com>
> ---
> src/xenxs/xen_xm.c | 150 +++++++++++++++++------------
> tests/xmconfigdata/test-escape-paths.cfg | 2 +-
> tests/xmconfigdata/test-fullvirt-sound.cfg | 2 +-
> 3 files changed, 92 insertions(+), 62 deletions(-)
>
> diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
> index 4795644..9718c92 100644
> --- a/src/xenxs/xen_xm.c
> +++ b/src/xenxs/xen_xm.c
> @@ -2221,6 +2221,93 @@ xenFormatXMVfb(virConfPtr conf, virDomainDefPtr def,
>
> return 0;
> }
> +
> +
> +static int
> +xenFormatXMVif(virConfPtr conf, virConnectPtr conn,
> + virDomainDefPtr def, int xendConfigVersion)
> +{
> + virConfValuePtr netVal = NULL;
> + size_t i;
> + int hvm = STREQ(def->os.type, "hvm");
> +
> + if (VIR_ALLOC(netVal) < 0)
> + goto cleanup;
> + netVal->type = VIR_CONF_LIST;
> + netVal->list = NULL;
> +
> + for (i = 0; i < def->nnets; i++) {
> + if (xenFormatXMNet(conn, netVal, def->nets[i],
> + hvm, xendConfigVersion) < 0)
> + goto cleanup;
> + }
> +
> + if (netVal->list != NULL) {
> + int ret = virConfSetValue(conf, "vif", netVal);
> + netVal = NULL;
> + if (ret < 0)
> + goto cleanup;
> + }
> +
> + VIR_FREE(netVal);
> + return 0;
> +
> + cleanup:
> + virConfFreeValue(netVal);
> + return -1;
> +}
> +
> +
> +static int
> +xenFormatXMEmulatedHardware(virConfPtr conf, virDomainDefPtr def)
>
I've split this into xenFormatXMInputDevs and xenFormatXMSound.
> +{
> + size_t i;
> +
> + if (STREQ(def->os.type, "hvm")) {
> + if (def->sounds) {
> + virBuffer buf = VIR_BUFFER_INITIALIZER;
> + char *str = NULL;
> + int ret = xenFormatSxprSound(def, &buf);
> + str = virBufferContentAndReset(&buf);
> + if (ret == 0)
> + ret = xenXMConfigSetString(conf, "soundhw", str);
> +
> + VIR_FREE(str);
> + if (ret < 0)
> + return -1;
> + }
> +
> + for (i = 0; i < def->ninputs; i++) {
> + if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_USB) {
> + if (xenXMConfigSetInt(conf, "usb", 1) < 0)
> + return -1;
> +
> + switch (def->inputs[i]->type) {
> + case VIR_DOMAIN_INPUT_TYPE_MOUSE:
> + if (xenXMConfigSetString(conf, "usbdevice", "mouse") < 0)
> + return -1;
> +
> + break;
> + case VIR_DOMAIN_INPUT_TYPE_TABLET:
> + if (xenXMConfigSetString(conf, "usbdevice", "tablet") < 0)
> + return -1;
> +
> + break;
> + case VIR_DOMAIN_INPUT_TYPE_KBD:
> + if (xenXMConfigSetString(conf, "usbdevice", "keyboard") < 0)
> + return -1;
> +
> + break;
> + }
> + break;
> + }
> + }
> + }
> +
> + return 0;
> +}
> +
> +
> /* Computing the vcpu_avail bitmask works because MAX_VIRT_CPUS is
> either 32, or 64 on a platform where long is big enough. */
> verify(MAX_VIRT_CPUS <= sizeof(1UL) * CHAR_BIT);
> @@ -2231,9 +2318,6 @@ xenFormatXM(virConnectPtr conn,
> int xendConfigVersion)
> {
> virConfPtr conf = NULL;
> - int hvm = 0;
> - size_t i;
> - virConfValuePtr netVal = NULL;
>
> if (!(conf = virConfNew()))
> goto cleanup;
> @@ -2247,8 +2331,6 @@ xenFormatXM(virConnectPtr conn,
> if (xenFormatXMCPUFeatures(conf, def, xendConfigVersion) < 0)
> goto cleanup;
>
> - hvm = STREQ(def->os.type, "hvm");
> -
> if (xenFormatXMOS(conf, def, xendConfigVersion) < 0)
> goto cleanup;
>
> @@ -2258,29 +2340,8 @@ xenFormatXM(virConnectPtr conn,
> if (xenFormatXMEventActions(conf, def) < 0)
> goto cleanup;
>
> - if (hvm) {
> - for (i = 0; i < def->ninputs; i++) {
> - if (def->inputs[i]->bus == VIR_DOMAIN_INPUT_BUS_USB) {
> - if (xenXMConfigSetInt(conf, "usb", 1) < 0)
> - goto cleanup;
> - switch (def->inputs[i]->type) {
> - case VIR_DOMAIN_INPUT_TYPE_MOUSE:
> - if (xenXMConfigSetString(conf, "usbdevice", "mouse") < 0)
> - goto cleanup;
> - break;
> - case VIR_DOMAIN_INPUT_TYPE_TABLET:
> - if (xenXMConfigSetString(conf, "usbdevice", "tablet") < 0)
> - goto cleanup;
> - break;
> - case VIR_DOMAIN_INPUT_TYPE_KBD:
> - if (xenXMConfigSetString(conf, "usbdevice", "keyboard") < 0)
> - goto cleanup;
> - break;
> - }
> - break;
> - }
> - }
> - }
> + if (xenFormatXMEmulatedHardware(conf, def) < 0)
> + goto cleanup;
>
> if (xenFormatXMVfb(conf, def, xendConfigVersion) < 0)
> goto cleanup;
> @@ -2288,23 +2349,8 @@ xenFormatXM(virConnectPtr conn,
> if (xenFormatXMDomainDisks(conf, def, xendConfigVersion) < 0)
> goto cleanup;
>
> - if (VIR_ALLOC(netVal) < 0)
> + if (xenFormatXMVif(conf, conn, def, xendConfigVersion) < 0)
> goto cleanup;
> - netVal->type = VIR_CONF_LIST;
> - netVal->list = NULL;
> -
> - for (i = 0; i < def->nnets; i++) {
> - if (xenFormatXMNet(conn, netVal, def->nets[i],
> - hvm, xendConfigVersion) < 0)
> - goto cleanup;
> - }
> - if (netVal->list != NULL) {
> - int ret = virConfSetValue(conf, "vif", netVal);
> - netVal = NULL;
> - if (ret < 0)
> - goto cleanup;
> - }
> - VIR_FREE(netVal);
>
> if (xenFormatXMPCI(conf, def) < 0)
> goto cleanup;
> @@ -2312,25 +2358,9 @@ xenFormatXM(virConnectPtr conn,
> if (xenFormatXMCharDev(conf, def) < 0)
> goto cleanup;
>
> - if (hvm) {
> - if (def->sounds) {
> - virBuffer buf = VIR_BUFFER_INITIALIZER;
> - char *str = NULL;
> - int ret = xenFormatSxprSound(def, &buf);
> - str = virBufferContentAndReset(&buf);
> - if (ret == 0)
> - ret = xenXMConfigSetString(conf, "soundhw", str);
> -
> - VIR_FREE(str);
> - if (ret < 0)
> - goto cleanup;
> - }
> - }
> -
> return conf;
>
> cleanup:
> - virConfFreeValue(netVal);
> if (conf)
> virConfFree(conf);
> return NULL;
> diff --git a/tests/xmconfigdata/test-escape-paths.cfg b/tests/xmconfigdata/test-escape-paths.cfg
>
> index 68984da..1336ece 100644
> --- a/tests/xmconfigdata/test-escape-paths.cfg
> +++ b/tests/xmconfigdata/test-escape-paths.cfg
>
Separate functions for sound and input devices also avoids changes to
the test data files. Simplified patch below. I've also included the
trivial "11.2/12" patch for refactoring the vif formatting.
Regards,
Jim
-------------- next part --------------
A non-text attachment was scrubbed...
Name: peripheral-config.patch
Type: text/x-diff
Size: 4592 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140814/0557f31a/attachment-0002.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vif-config.patch
Type: text/x-diff
Size: 3009 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140814/0557f31a/attachment-0003.bin>
More information about the libvir-list
mailing list