kvm: encapsulate HAS_DEVICE for vm attrs
More and more virtual machine specifics between kvm and qemu will be transferred with vm attributes. So we encapsulate the common logic in a generic function. Additionally we need only to check during initialization if kvm supports virtual machine attributes. Cc: Paolo Bonzini <pbonzini@redhat.com> Suggested-by: Thomas Huth <thuth@linux.vnet.ibm.com> Reviewed-by: Thomas Huth <thuth@linux.vnet.ibm.com> Signed-off-by: Dominik Dingel <dingel@linux.vnet.ibm.com> Signed-off-by: Jens Freimann <jfrei@linux.vnet.ibm.com> Message-Id: <1426164834-38648-2-git-send-email-jfrei@linux.vnet.ibm.com> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
This commit is contained in:
parent
7d45285fc9
commit
d0a073a186
@ -224,6 +224,18 @@ int kvm_vcpu_ioctl(CPUState *cpu, int type, ...);
|
||||
*/
|
||||
int kvm_device_ioctl(int fd, int type, ...);
|
||||
|
||||
/**
|
||||
* kvm_vm_check_attr - check for existence of a specific vm attribute
|
||||
* @s: The KVMState pointer
|
||||
* @group: the group
|
||||
* @attr: the attribute of that group to query for
|
||||
*
|
||||
* Returns: 1 if the attribute exists
|
||||
* 0 if the attribute either does not exist or if the vm device
|
||||
* interface is unavailable
|
||||
*/
|
||||
int kvm_vm_check_attr(KVMState *s, uint32_t group, uint64_t attr);
|
||||
|
||||
/**
|
||||
* kvm_create_device - create a KVM device for the device control API
|
||||
* @KVMState: The KVMState pointer
|
||||
|
21
kvm-all.c
21
kvm-all.c
@ -126,6 +126,7 @@ bool kvm_gsi_routing_allowed;
|
||||
bool kvm_gsi_direct_mapping;
|
||||
bool kvm_allowed;
|
||||
bool kvm_readonly_mem_allowed;
|
||||
bool kvm_vm_attributes_allowed;
|
||||
|
||||
static const KVMCapabilityInfo kvm_required_capabilites[] = {
|
||||
KVM_CAP_INFO(USER_MEMORY),
|
||||
@ -1598,6 +1599,9 @@ static int kvm_init(MachineState *ms)
|
||||
kvm_resamplefds_allowed =
|
||||
(kvm_check_extension(s, KVM_CAP_IRQFD_RESAMPLE) > 0);
|
||||
|
||||
kvm_vm_attributes_allowed =
|
||||
(kvm_check_extension(s, KVM_CAP_VM_ATTRIBUTES) > 0);
|
||||
|
||||
ret = kvm_arch_init(ms, s);
|
||||
if (ret < 0) {
|
||||
goto err;
|
||||
@ -1936,6 +1940,23 @@ int kvm_device_ioctl(int fd, int type, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int kvm_vm_check_attr(KVMState *s, uint32_t group, uint64_t attr)
|
||||
{
|
||||
int ret;
|
||||
struct kvm_device_attr attribute = {
|
||||
.group = group,
|
||||
.attr = attr,
|
||||
};
|
||||
|
||||
if (!kvm_vm_attributes_allowed) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = kvm_vm_ioctl(s, KVM_HAS_DEVICE_ATTR, &attribute);
|
||||
/* kvm returns 0 on success for HAS_DEVICE_ATTR */
|
||||
return ret ? 0 : 1;
|
||||
}
|
||||
|
||||
int kvm_has_sync_mmu(void)
|
||||
{
|
||||
return kvm_check_extension(kvm_state, KVM_CAP_SYNC_MMU);
|
||||
|
Loading…
Reference in New Issue
Block a user