
On Wed, 2015-07-29 at 22:30 -0400, John Ferlan wrote:
+ online_cpus = nodeGetOnlineCPUBitmap(sysfs_prefix); + if (online_cpus == NULL) + goto cleanup; + + nonline_cpus = virBitmapSize(online_cpus); + + for (cpu = 0; cpu < nonline_cpus; cpu++) { + + /* Skip primary threads */ + if (cpu % threads_per_subcore == 0) + continue; + + /* A single online subthread is enough to make the + * configuration invalid */ + if (virBitmapIsBitSet(online_cpus, cpu)) + goto cleanup; + }
Could virBitmapNextSetBit be used? Where if the returned pos (cpu) % threads_per_subcore != 0, then jump to cleanup?
I think both work, I just didn't know how large nonline_cpus could be and since the bitmap code has a way to return 'next' bit set, we could use it.
It works, and it looks nicer too! Thanks for the tip :)
+int +nodeGetThreadsPerSubcore(virArch arch) +{ + const char *kvmpath = "/dev/kvm"; + int kvmfd;
These could move inside the if below.
I'm thinking of one particular architecture where we consistently get compilation errors when there's variables that aren't used (which would be the case if HAVE_LINUX_KVM_H or KVM_CAP_PPC_SMT were not true
Done.
+ if ((kvmfd = open(kvmpath, O_RDONLY)) < 0) { + /* This can happen when running as a regular user if + * permissions are tight enough, in which case erroring out + * is better than silently falling back and reporting + * different nodeinfo depending on the user */ + virReportSystemError(errno, + _("Failed to open '%s'"), + kvmpath); + threads_per_subcore = kvmfd;
I would just set to -1 here directly rather than the return failure from open
Done.
Beyond those - things look OK to me.
Just to be sure, did you check the rest of the series as well?
Let me know if you want to make changes... Probably should wait until DV generates the release before pushing though...
I've just sent out v11 which addresses all your remarks. It should definitely only be pushed once the new release is out. Thanks for the review :) Cheers. -- Andrea Bolognani Software Engineer - Virtualization Team