On 9/4/25 14:10, Stefan Kober wrote: > On-behalf-of: SAP stefan.ko...@sap.com > Signed-off-by: Stefan Kober <stefan.ko...@cyberus-technology.de> > --- > po/POTFILES | 1 + > src/ch/ch_hotplug.c | 85 +++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 86 insertions(+) > > diff --git a/po/POTFILES b/po/POTFILES > index 181a36f541..23da794f84 100644 > --- a/po/POTFILES > +++ b/po/POTFILES > @@ -25,6 +25,7 @@ src/ch/ch_domain.c > src/ch/ch_driver.c > src/ch/ch_events.c > src/ch/ch_hostdev.c > +src/ch/ch_hotplug.c > src/ch/ch_interface.c > src/ch/ch_monitor.c > src/ch/ch_process.c > diff --git a/src/ch/ch_hotplug.c b/src/ch/ch_hotplug.c > index c46628e7e9..7de688dc44 100644 > --- a/src/ch/ch_hotplug.c > +++ b/src/ch/ch_hotplug.c > @@ -18,10 +18,95 @@ > > #include <config.h> > > +#include "ch_alias.h" > +#include "ch_domain.h" > #include "ch_hotplug.h" >
ch_hotplug.h should be included first as it may already include other files. I mean, you correctly include ch_conf.h inside of ch_hotplug.h because of the virCHDriver type. Again, not something that is critical in this particular case, it's mostly good practice. > +#include "domain_event.h" > +#include "domain_validate.h" > +#include "virlog.h" > + > #define VIR_FROM_THIS VIR_FROM_CH > > +VIR_LOG_INIT("ch.ch_hotplug"); > + > +static int > +chDomainAddDisk(virCHMonitor *mon, virDomainObj *vm, virDomainDiskDef *disk) > +{ > + if (chAssignDeviceDiskAlias(disk) < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("Assigning disk alias failed")); > + return -1; > + } > + > + if (virCHMonitorAddDisk(mon, disk) < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", > + _("Adding disk to domain failed")); > + return -1; > + } > + > + virDomainDiskInsert(vm->def, disk); > + > + return 0; > +} > + > +G_GNUC_UNUSED > +static int > +chDomainAttachDeviceLive(virDomainObj *vm, > + virDomainDeviceDef *dev) > +{ > + int ret = -1; > + virCHDomainObjPrivate *priv = vm->privateData; > + virCHMonitor *mon = priv->monitor; > + > + switch (dev->type) { > + case VIR_DOMAIN_DEVICE_DISK: { > + if (chDomainAddDisk(mon, vm, dev->data.disk) < 0) { > + break; > + } > + > + dev->data.disk = NULL; > + ret = 0; > + break; > + } > + case VIR_DOMAIN_DEVICE_NET: > + case VIR_DOMAIN_DEVICE_LEASE: > + case VIR_DOMAIN_DEVICE_FS: > + case VIR_DOMAIN_DEVICE_INPUT: > + case VIR_DOMAIN_DEVICE_HOSTDEV: > + case VIR_DOMAIN_DEVICE_WATCHDOG: > + case VIR_DOMAIN_DEVICE_CONTROLLER: > + case VIR_DOMAIN_DEVICE_REDIRDEV: > + case VIR_DOMAIN_DEVICE_CHR: > + case VIR_DOMAIN_DEVICE_RNG: > + case VIR_DOMAIN_DEVICE_SHMEM: > + case VIR_DOMAIN_DEVICE_MEMORY: > + case VIR_DOMAIN_DEVICE_VSOCK: > + case VIR_DOMAIN_DEVICE_NONE: > + case VIR_DOMAIN_DEVICE_SOUND: > + case VIR_DOMAIN_DEVICE_VIDEO: > + case VIR_DOMAIN_DEVICE_GRAPHICS: > + case VIR_DOMAIN_DEVICE_HUB: > + case VIR_DOMAIN_DEVICE_SMARTCARD: > + case VIR_DOMAIN_DEVICE_MEMBALLOON: > + case VIR_DOMAIN_DEVICE_NVRAM: > + case VIR_DOMAIN_DEVICE_TPM: > + case VIR_DOMAIN_DEVICE_PANIC: > + case VIR_DOMAIN_DEVICE_IOMMU: > + case VIR_DOMAIN_DEVICE_AUDIO: > + case VIR_DOMAIN_DEVICE_CRYPTO: > + case VIR_DOMAIN_DEVICE_PSTORE: > + case VIR_DOMAIN_DEVICE_LAST: > + default: > + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, > + _("live attach of device '%1$s' is not supported"), > + virDomainDeviceTypeToString(dev->type)); > + break; > + } > + > + return ret; > +} > + > int > chDomainAttachDeviceLiveAndUpdateConfig(virDomainObj *vm G_GNUC_UNUSED, > virCHDriver *driver G_GNUC_UNUSED, This is great place to implement this function ^^^. IOW, just move corresponding change from the next patch here. Then you don't need to annotate a function as unused. Michal