mirror of https://gitee.com/openkylin/libvirt.git
virhostcpu: Fix build with clang and newest kernel headers
The most recent environment e.g. present in our Fedora Rawhide builds fail to build the tree with clang with the following error: ../src/util/virhostcpu.c:1291:25: error: field 'header' with variable sized type 'struct kvm_msrs' not at the end of a struct or class is a GNU extension [-Werror,-Wgnu-variable-sized-type-not-at-end] struct kvm_msrs header; ^ The problem seems to be that clang doesn't like the new way the 'entries' field in struct kvm_msrs is declared. To work around the issue we can simply allocate the variable dynamically and use the 'entries' member as it was intended to to access the members. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
3c2d06d78e
commit
56b3ee7439
|
@ -1287,25 +1287,22 @@ virHostCPUGetMSRFromKVM(unsigned long index,
|
||||||
uint64_t *result)
|
uint64_t *result)
|
||||||
{
|
{
|
||||||
VIR_AUTOCLOSE fd = -1;
|
VIR_AUTOCLOSE fd = -1;
|
||||||
struct {
|
g_autofree struct kvm_msrs *msr = g_malloc0(sizeof(struct kvm_msrs) +
|
||||||
struct kvm_msrs header;
|
sizeof(struct kvm_msr_entry));
|
||||||
struct kvm_msr_entry entry;
|
msr->nmsrs = 1;
|
||||||
} msr = {
|
msr->entries[0].index = index;
|
||||||
.header = { .nmsrs = 1 },
|
|
||||||
.entry = { .index = index },
|
|
||||||
};
|
|
||||||
|
|
||||||
if ((fd = open(KVM_DEVICE, O_RDONLY)) < 0) {
|
if ((fd = open(KVM_DEVICE, O_RDONLY)) < 0) {
|
||||||
virReportSystemError(errno, _("Unable to open %s"), KVM_DEVICE);
|
virReportSystemError(errno, _("Unable to open %s"), KVM_DEVICE);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(fd, KVM_GET_MSRS, &msr) < 0) {
|
if (ioctl(fd, KVM_GET_MSRS, msr) < 0) {
|
||||||
VIR_DEBUG("Cannot get MSR 0x%lx from KVM", index);
|
VIR_DEBUG("Cannot get MSR 0x%lx from KVM", index);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
*result = msr.entry.data;
|
*result = msr->entries[0].data;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue