[libvirt] [RFC PATCH 5/4] qemu: detect -machine mem-merge capability
Osier Yang
jyang at redhat.com
Mon May 13 08:46:38 UTC 2013
On 30/04/13 01:44, Eric Blake wrote:
> * src/qemu/qemu_capabilities.h: New capability bit.
> * src/qemu/qemu_capabilities.c (virQEMUCapsProbeQMPCommandLine): New
> function; use it to set new capability bit.
> (virQEMUCapsInitQMP): Use new function.
> ---
>
> As promised, here is how I would set the new capability for use
> in Osier's series here:
> https://www.redhat.com/archives/libvir-list/2013-April/msg01833.html
>
> src/qemu/qemu_capabilities.c | 46 ++++++++++++++++++++++++++++++++++++++++----
> src/qemu/qemu_capabilities.h | 1 +
> 2 files changed, 43 insertions(+), 4 deletions(-)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index 2acf535..40b824c 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -222,9 +222,10 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
> "tpm-tis",
>
> "nvram", /* 140 */
> - "pci-bridge", /* 141 */
> - "vfio-pci", /* 142 */
> - "vfio-pci.bootindex", /* 143 */
> + "pci-bridge",
> + "vfio-pci",
> + "vfio-pci.bootindex",
> + "mem-merge",
> );
>
> struct _virQEMUCaps {
> @@ -1441,7 +1442,6 @@ static struct virQEMUCapsObjectTypeProps virQEMUCapsObjectProps[] = {
> ARRAY_CARDINALITY(virQEMUCapsObjectPropsUsbHost) },
> };
>
> -
> static void
> virQEMUCapsProcessStringFlags(virQEMUCapsPtr qemuCaps,
> size_t nflags,
> @@ -2225,6 +2225,42 @@ virQEMUCapsProbeQMPKVMState(virQEMUCapsPtr qemuCaps,
> }
>
>
> +struct virQEMUCapsCommandLineProps {
> + const char *option;
> + const char *param;
> + int flag;
> +};
> +
> +static struct virQEMUCapsCommandLineProps virQEMUCapsCommandLine[] = {
> + { "machine", "mem-merge", QEMU_CAPS_MEM_MERGE },
> +};
> +
> +static int
> +virQEMUCapsProbeQMPCommandLine(virQEMUCapsPtr qemuCaps,
> + qemuMonitorPtr mon)
> +{
> + int nvalues;
> + char **values;
> + size_t i, j;
> +
> + for (i = 0; i < ARRAY_CARDINALITY(virQEMUCapsCommandLine); i++) {
> + if ((nvalues = qemuMonitorGetCommandLineOptionParameters(mon,
> + virQEMUCapsCommandLine[i].option,
> + &values)) < 0)
> + return -1;
> + for (j = 0; j < nvalues; j++) {
> + if (STREQ(virQEMUCapsCommandLine[i].param, values[j])) {
> + virQEMUCapsSet(qemuCaps, virQEMUCapsCommandLine[i].flag);
> + break;
> + }
> + }
> + virStringFreeList(values);
values is leaked if the loop breaks.
ACK with this fixed, but it will need rebasing, feel free to leave it
to me, I can do it
when rebasing the mem-merge patch.
Osier
More information about the libvir-list
mailing list