On Wed, Aug 22, 2018 at 00:31:29 +0300, Roman Bolshakov wrote: > libvirt affinity wrappers don't support macOS Thread Affinity API: > https://developer.apple.com/library/archive/releasenotes/Performance/RN-AffinityAPI/index.html > > virProcessSetAffinity stub prevents libvirt from starting a qemu domain > on macOS: > > $ virsh start vm > error: Failed to start domain vm > error: Process CPU affinity is not supported on this platform: Function not implemented > > With the patch a VM can be started on macOS but some affinity-related > commands will return errors: > > $ virsh vcpuinfo vm > error: Requested operation is not valid: cpu affinity is not supported > > $ virsh vcpupin vm > VCPU: CPU Affinity > ---------------------------------- > 0: 0-7 > > $ virsh vcpupin vm --live --vcpu 0 --cpulist 7 > error: operation failed: Virt type 'qemu' does not support vCPU pinning > > $ virsh emulatorpin vm > emulator: CPU Affinity > ---------------------------------- > *: 0-7 > > $ virsh emulatorpin vm --live --cpulist 7 > error: Requested operation is not valid: cpu affinity is not supported > > The patch also fixes virmacmaptest on macOS > > Signed-off-by: Roman Bolshakov <r.bolshakov@xxxxxxxxx> > --- > src/qemu/qemu_driver.c | 6 ++++++ > src/util/virprocess.c | 2 +- > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index 21e9e87ddd..2e225b1ede 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -5245,6 +5245,12 @@ qemuDomainPinEmulator(virDomainPtr dom, > if (virDomainPinEmulatorEnsureACL(dom->conn, vm->def, flags) < 0) > goto cleanup; > > + if (!qemuDomainHasVcpuPids(vm)) { > + virReportError(VIR_ERR_OPERATION_INVALID, > + "%s", _("cpu affinity is not supported")); > + goto cleanup; > + } > + > if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0) > goto cleanup; > > diff --git a/src/util/virprocess.c b/src/util/virprocess.c > index 3988f5546c..7eaafd29f2 100644 > --- a/src/util/virprocess.c > +++ b/src/util/virprocess.c > @@ -598,7 +598,7 @@ int virProcessSetAffinity(pid_t pid ATTRIBUTE_UNUSED, > { > virReportSystemError(ENOSYS, "%s", > _("Process CPU affinity is not supported on this platform")); > - return -1; > + return 0; This is not a good idea. The caller should make sure that it does not call this function if we need to support such a code path. If you blindly return 0 here other callers might get confused. Also setting an error and returning success is generally wrong.
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list