On Thu, Oct 05, 2023 at 16:05:04 -0700, Vivek Kashyap wrote:
Introduce a validation function for vf-token support in qemu
and generate vf-token device attribute in qmeu command line.
Signed-off-by: Vivek Kashyap <vivek.kashyap(a)linux.intel.com>
---
src/qemu/qemu_command.c | 27 ++++++++++++++++++++++++---
src/qemu/qemu_validate.c | 19 +++++++++++++++++++
2 files changed, 43 insertions(+), 3 deletions(-)
Missing qemuxml2argvtest and qemuxml2xmtest additions, which are
absolutely required for anything that adds/changes the commandline syntax.
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 8a7b80719f..91d7836f5c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1979,7 +1979,6 @@ qemuBuildZPCIDevProps(virDomainDeviceInfo *dev)
return props;
}
-
Spurious whitespace change. As noted we do 2 lines between functions.
static int
qemuCommandAddExtDevice(virCommand *cmd,
virDomainDeviceInfo *dev,
@@ -4729,6 +4728,8 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def,
pcisrc->addr.slot,
pcisrc->addr.function);
const char *failover_pair_id = NULL;
+ g_autofree char *token = NULL;
+ int ret = 0;
/* caller has to assign proper passthrough backend type */
switch (pcisrc->backend) {
@@ -4755,13 +4756,33 @@ qemuBuildPCIHostdevDevProps(const virDomainDef *def,
teaming->persistent)
failover_pair_id = teaming->persistent;
- if (virJSONValueObjectAdd(&props,
+ if ((dev->info->pciAddrExtFlags & VIR_PCI_ADDRESS_EXTENSION_VFTOKEN)
&&
+ pcisrc->addr.token.isSet) {
Broken alignment/code style.
+ const unsigned char *uuid = pcisrc->addr.token.uuid;
+
+ token = g_strdup_printf(VIR_PCI_DEVICE_TOKEN_FMT,
+ uuid[0], uuid[1], uuid[2], uuid[3],
+ uuid[4], uuid[5], uuid[6], uuid[7],
+ uuid[8], uuid[9], uuid[10], uuid[11],
+ uuid[12], uuid[13], uuid[14], uuid[15]);
Broken alignment/code style.
+
+ ret = virJSONValueObjectAdd(&props,
"s:driver", "vfio-pci",
"s:host", host,
+ "s:vf-token", token,
"s:id", dev->info->alias,
"p:bootindex",
dev->info->effectiveBootIndex,
"S:failover_pair_id", failover_pair_id,
- NULL) < 0)
+ NULL);
So firstly you break the code style here by your addition.
Secondly there's no need to duplicate the whole virJSONValueObjectAdd
block in the first place as we allow conditional formatting of fields.
You need to fill the 'token' field only optionally what you do, but then
you can unconditionally format it using:
"S:vf-token", token,
argument tuple in virJSONValueObjectAdd. The 'S' modifier formats the
attribute only if the string argument is non-NULL.
+ } else
Trailing whitespace, but this block is not needed ... and in fact not
desired as described above.
+ ret = virJSONValueObjectAdd(&props,
+ "s:driver", "vfio-pci",
+ "s:host", host,
+ "s:id", dev->info->alias,
+ "p:bootindex",
dev->info->effectiveBootIndex,
+ "S:failover_pair_id", failover_pair_id,
+ NULL);
+ if (ret < 0)
return NULL;
if (qemuBuildDeviceAddressProps(props, def, dev->info) < 0)