#include "virbitmap.h"
#include "virnodesuspend.h"
#include "virnuma.h"
+#include "virhostcpu.h"
#include "qemu_monitor.h"
#include "virstring.h"
#include "qemu_hostdev.h"
virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virQEMUCapsPtr qemuCaps,
virFirmwarePtr *firmwares,
- size_t nfirmwares)
+ size_t nfirmwares,
+ virDomainVirtType virttype)
{
virDomainCapsOSPtr os = &domCaps->os;
virDomainCapsDeviceDiskPtr disk = &domCaps->disk;
virDomainCapsDeviceHostdevPtr hostdev = &domCaps->hostdev;
virDomainCapsDeviceGraphicsPtr graphics = &domCaps->graphics;
virDomainCapsDeviceVideoPtr video = &domCaps->video;
- int maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps, domCaps->machine);
- domCaps->maxvcpus = maxvcpus;
+ domCaps->maxvcpus = virQEMUCapsGetMachineMaxCpus(qemuCaps,
+ domCaps->machine);
+ if (virttype == VIR_DOMAIN_VIRT_KVM) {
+ int hostmaxvcpus = virHostCPUGetKVMMaxVCPUs();
+ if (hostmaxvcpus >= 0)
+ domCaps->maxvcpus = MIN(domCaps->maxvcpus, hostmaxvcpus);
+ }
if (virQEMUCapsFillDomainOSCaps(os, firmwares, nfirmwares) < 0 ||
virQEMUCapsFillDomainDeviceDiskCaps(qemuCaps,
int virQEMUCapsFillDomainCaps(virDomainCapsPtr domCaps,
virQEMUCapsPtr qemuCaps,
virFirmwarePtr *firmwares,
- size_t nfirmwares);
+ size_t nfirmwares,
+ virDomainVirtType virttype);
#endif /* __QEMU_CAPABILITIES_H__*/
goto cleanup;
if (virQEMUCapsFillDomainCaps(domCaps, qemuCaps,
- cfg->firmwares, cfg->nfirmwares) < 0)
+ cfg->firmwares, cfg->nfirmwares, virttype) < 0)
goto cleanup;
ret = virDomainCapsFormat(domCaps);
if (virQEMUCapsFillDomainCaps(domCaps, qemuCaps,
cfg->firmwares,
- cfg->nfirmwares) < 0)
+ cfg->nfirmwares,
+ VIR_DOMAIN_VIRT_QEMU) < 0)
goto cleanup;
/* The function above tries to query host's KVM & VFIO capabilities by