On Fri, Mar 08, 2024 at 01:06:34PM +0100, Michal Prívozník wrote: > On 2/20/24 23:06, Praveen K Paladugu wrote: > > From: Praveen K Paladugu <prapal@xxxxxxxxxxxxxxxxxxx> > > > > Cloud-Hypervisor is capable of running VMs with kvm or mshv as the > > hypervisor on Linux Host. Guest to hypevisor ABI with mshv hypervisor is > > the same as in the case of VIR_DOMAIN_VIRT_HYPERV. So, VIR_DOMAIN_VIRT_HYPERV > > type will be reused to represent the config with Linux Host and mshv as the > > hypervisor. > > > > While initializing ch driver, check if either of /dev/kvm or /dev/mshv > > device is present on the host. Before starting ch domains, check if the > > requested hypervisor device is present on the host. > > > > Users can specify hypervisor in ch guests's domain definitions like > > below: > > > > <domain type='kvm'> > > > > _or_ > > > > <domain type='hyperv'> > > > > Signed-off-by: Praveen K Paladugu <prapal@xxxxxxxxxxxxxxxxxxx> > > Signed-off-by: Praveen K Paladugu <praveenkpaladugu@xxxxxxxxx> > > --- > > src/ch/ch_conf.c | 2 ++ > > src/ch/ch_driver.c | 7 +++++++ > > src/ch/ch_process.c | 35 +++++++++++++++++++++++++++++++++++ > > 3 files changed, 44 insertions(+) > > > > diff --git a/src/ch/ch_conf.c b/src/ch/ch_conf.c > > index f421af5121..1911ae8f8b 100644 > > --- a/src/ch/ch_conf.c > > +++ b/src/ch/ch_conf.c > > @@ -69,6 +69,8 @@ virCaps *virCHDriverCapsInit(void) > > > > virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_KVM, > > NULL, NULL, 0, NULL); > > + virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_HYPERV, > > + NULL, NULL, 0, NULL); > > 1: This sets support for both virtTypes unconditionally even though only > one might be supported. Problem with this approach is: I, as an user, > check for supported virtTypes (e.g. via 'virsh capabilities') find > hyperv supported only to get an error when trying to start such domain. > > > return g_steal_pointer(&caps); > > } > > > > diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c > > index 96de5044ac..d6294c76ee 100644 > > --- a/src/ch/ch_driver.c > > +++ b/src/ch/ch_driver.c > > @@ -32,6 +32,7 @@ > > #include "viraccessapicheck.h" > > #include "virchrdev.h" > > #include "virerror.h" > > +#include "virfile.h" > > #include "virlog.h" > > #include "virobject.h" > > #include "virtypedparam.h" > > @@ -876,6 +877,12 @@ static int chStateInitialize(bool privileged, > > return -1; > > } > > > > + if (!(virFileExists("/dev/kvm") || virFileExists("/dev/mshv"))) { > > + virReportError(VIR_ERR_DEVICE_MISSING, "%s", > > VIR_ERR_DEVICE_MISSING code should be used for cases where a device is > looked up in domain config but it's not found (e.g. on hotunplug). > Though it's used in one other (unrelated?) case too: > virMediatedDeviceNew() - which is transitively called from domain > handling code. > > But more importantly, this check needs to go to caps init [1] and here > we should merely check whether caps has at least one of the virtTypes > set (e.g. via virCapabilitiesDomainSupported()). Also we should return 'VIR_DRV_STATE_INIT_SKIP' rather than 'ERROR'. THe latter is for a fatal non-recoverable problem on a host that has the supported features. The former is for when a host does not support the features needed for the driver. > > > > + _("/dev/kvm and /dev/mshv. ch driver failed to initialize.")); > > + return VIR_DRV_STATE_INIT_ERROR; > > + } > > + > > ch_driver = g_new0(virCHDriver, 1); With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx