On Fri, Apr 19, 2024 at 04:49 PM +0200, Marc Hartmayer <[email protected]>
wrote:
> Use a worker pool for processing the events (e.g. udev, mdevctl config
> changes)
> and the initialization instead of a separate initThread and a mdevctl-thread.
> This has the large advantage that we can leverage the job API and now this
> thread pool is responsible to do all the "costly-work" and emitting the
> libvirt
> nodedev events.
>
> Signed-off-by: Marc Hartmayer <[email protected]>
> ---
[…snip…]
>
>
> +static void nodeDeviceEventHandler(void *data, void *opaque)
> +{
> + virNodeDeviceDriverState *driver_state = opaque;
> + g_autoptr(nodeDeviceEvent) processEvent = data;
> +
> + switch (processEvent->eventType) {
> + case NODE_DEVICE_EVENT_INIT:
> + {
> + struct udev *udev = processEvent->data;
> +
> + processNodeStateInitializeEnumerate(driver_state, udev);
> + }
> + break;
> + case NODE_DEVICE_EVENT_UDEV_ADD:
> + case NODE_DEVICE_EVENT_UDEV_CHANGE:
> + {
> + struct udev_device *device = processEvent->data;
> +
> + processNodeDeviceAddAndChangeEvent(driver_state, device);
> + }
> + break;
> + case NODE_DEVICE_EVENT_UDEV_REMOVE:
> + {
> + struct udev_device *device = processEvent->data;
> + const char *path = udev_device_get_syspath(device);
> +
> + processNodeDeviceRemoveEvent(driver_state, path);
> + }
> + break;
> + case NODE_DEVICE_EVENT_UDEV_MOVE:
> + {
> + struct udev_device *device = processEvent->data;
> + const char *devpath_old = udevGetDeviceProperty(device,
> "DEVPATH_OLD");
> +
> + if (devpath_old) {
> + g_autofree char *devpath_old_fixed = g_strdup_printf("/sys%s",
> devpath_old);
> +
> + processNodeDeviceRemoveEvent(driver_state, devpath_old_fixed);
> + }
> +
> + processNodeDeviceAddAndChangeEvent(driver_state, device);
> + }
> + break;
> + case NODE_DEVICE_EVENT_MDEVCTL_CONFIG_CHANGED:
> + {
> + if (nodeDeviceUpdateMediatedDevices(driver_state) < 0)
> + VIR_WARN("mdevctl failed to update mediated devices");
> + }
> + break;
> + case NODE_DEVICE_EVENT_LAST:
> + g_assert_not_reached();
The assert statement should be replaced with:
virReportEnumRangeError(nodeDeviceEventType, processEvent->eventType);
> + break;
> + }
> +}
[…snip]
--
Kind regards / Beste Grüße
Marc Hartmayer
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Wolfgang Wendt
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294
_______________________________________________
Devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]