From 44a0f2f0c8ff5e78c238013ed297b8fce223ac5a Mon Sep 17 00:00:00 2001 From: Boris Fiuczynski Date: Mon, 8 May 2023 19:10:46 +0200 Subject: [PATCH] nodedev: update transient mdevs Instead of updating defined mdevs only add another update for active devices as well to cover transient mdev devices as well. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2143158 Signed-off-by: Boris Fiuczynski Reviewed-by: Jonathon Jongsma --- src/node_device/node_device_driver.c | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c index 3cac25a10c..a2d0600560 100644 --- a/src/node_device/node_device_driver.c +++ b/src/node_device/node_device_driver.c @@ -1636,6 +1636,24 @@ virMdevctlListDefined(virNodeDeviceDef ***devs, char **errmsg) } +static int +virMdevctlListActive(virNodeDeviceDef ***devs, char **errmsg) +{ + int status; + g_autofree char *output = NULL; + g_autoptr(virCommand) cmd = nodeDeviceGetMdevctlListCommand(false, &output, errmsg); + + if (virCommandRun(cmd, &status) < 0 || status != 0) { + return -1; + } + + if (!output) + return -1; + + return nodeDeviceParseMdevctlJSON(output, devs); +} + + typedef struct _virMdevctlForEachData virMdevctlForEachData; struct _virMdevctlForEachData { int ndefs; @@ -1699,6 +1717,8 @@ int nodeDeviceUpdateMediatedDevices(void) { g_autofree virNodeDeviceDef **defs = NULL; + g_autofree virNodeDeviceDef **act_defs = NULL; + int act_ndefs = 0; g_autofree char *errmsg = NULL; g_autofree char *mdevctl = NULL; virMdevctlForEachData data = { 0, }; @@ -1725,6 +1745,17 @@ nodeDeviceUpdateMediatedDevices(void) if (nodeDeviceUpdateMediatedDevice(defs[i]) < 0) return -1; + /* Update active/transient mdev devices */ + if ((act_ndefs = virMdevctlListActive(&act_defs, &errmsg)) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("failed to query mdevs from mdevctl: %1$s"), errmsg); + return -1; + } + + for (i = 0; i < act_ndefs; i++) + if (nodeDeviceUpdateMediatedDevice(act_defs[i]) < 0) + return -1; + return 0; }