aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlauber Costa <glommer@redhat.com>2009-07-15 01:34:57 -0400
committerMarcelo Tosatti <mtosatti@redhat.com>2009-07-21 17:06:47 -0300
commite2e3b6959d9550e1e5db8ca2d8cc0bdcded4e32d (patch)
treec3a5daba3d84d591353df7b3fdaa83f5c33187f6 /qemu-kvm.c
parentreuse kvm_vm_ioctl (diff)
downloadqemu-kvm-e2e3b6959d9550e1e5db8ca2d8cc0bdcded4e32d.tar.gz
qemu-kvm-e2e3b6959d9550e1e5db8ca2d8cc0bdcded4e32d.tar.bz2
qemu-kvm-e2e3b6959d9550e1e5db8ca2d8cc0bdcded4e32d.zip
reuse kvm_ioctl
Start using kvm_ioctl's code. For type safety, delete fd from kvm_context entirely, so the compiler can play along with us helping to detect errors I might have made. Signed-off-by: Glauber Costa <glommer@redhat.com> Also, we were slightly different from qemu upstream in handling error code from ioctl, since we were always testing for -1, while kvm_vm_ioctl returns -errno. We already did this in most of the call sites, so this patch has the big advantage of simplifying call sites. Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'qemu-kvm.c')
-rw-r--r--qemu-kvm.c41
1 files changed, 20 insertions, 21 deletions
diff --git a/qemu-kvm.c b/qemu-kvm.c
index e90681f9f..98cfee071 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -227,7 +227,7 @@ static int get_free_slot(kvm_context_t kvm)
int tss_ext;
#if defined(KVM_CAP_SET_TSS_ADDR) && !defined(__s390__)
- tss_ext = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_SET_TSS_ADDR);
+ tss_ext = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_SET_TSS_ADDR);
#else
tss_ext = 0;
#endif
@@ -451,7 +451,7 @@ int kvm_init(int smp_cpus)
kvm_state = qemu_mallocz(sizeof(*kvm_state));
kvm_context = &kvm_state->kvm_context;
- kvm_context->fd = fd;
+ kvm_state->fd = fd;
kvm_state->vmfd = -1;
kvm_context->opaque = cpu_single_env;
kvm_context->dirty_pages_log_all = 0;
@@ -492,7 +492,7 @@ static void kvm_finalize(KVMState *s)
if (kvm->vm_fd != -1)
close(kvm->vm_fd);
*/
- close(s->kvm_context.fd);
+ close(s->fd);
free(s);
}
@@ -526,8 +526,8 @@ kvm_vcpu_context_t kvm_create_vcpu(CPUState *env, int id)
env->kvm_fd = r;
env->kvm_state = kvm_state;
- mmap_size = ioctl(kvm->fd, KVM_GET_VCPU_MMAP_SIZE, 0);
- if (mmap_size == -1) {
+ mmap_size = kvm_ioctl(kvm_state, KVM_GET_VCPU_MMAP_SIZE, 0);
+ if (mmap_size < 0) {
fprintf(stderr, "get vcpu mmap size: %m\n");
goto err_fd;
}
@@ -548,7 +548,7 @@ err:
static int kvm_set_boot_vcpu_id(kvm_context_t kvm, uint32_t id)
{
#ifdef KVM_CAP_SET_BOOT_CPU_ID
- int r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_SET_BOOT_CPU_ID);
+ int r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_SET_BOOT_CPU_ID);
if (r > 0)
return kvm_vm_ioctl(kvm_state, KVM_SET_BOOT_CPU_ID, id);
return -ENOSYS;
@@ -559,15 +559,14 @@ static int kvm_set_boot_vcpu_id(kvm_context_t kvm, uint32_t id)
int kvm_create_vm(kvm_context_t kvm)
{
- int fd = kvm->fd;
-
+ int fd;
#ifdef KVM_CAP_IRQ_ROUTING
kvm->irq_routes = qemu_mallocz(sizeof(*kvm->irq_routes));
kvm->nr_allocated_irq_routes = 0;
#endif
- fd = ioctl(fd, KVM_CREATE_VM, 0);
- if (fd == -1) {
+ fd = kvm_ioctl(kvm_state, KVM_CREATE_VM, 0);
+ if (fd < 0) {
fprintf(stderr, "kvm_create_vm: %m\n");
return -1;
}
@@ -580,7 +579,7 @@ static int kvm_create_default_phys_mem(kvm_context_t kvm,
void **vm_mem)
{
#ifdef KVM_CAP_USER_MEMORY
- int r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_USER_MEMORY);
+ int r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_USER_MEMORY);
if (r > 0)
return 0;
fprintf(stderr, "Hypervisor too old: KVM_CAP_USER_MEMORY extension not supported\n");
@@ -594,7 +593,7 @@ int kvm_check_extension(kvm_context_t kvm, int ext)
{
int ret;
- ret = ioctl(kvm->fd, KVM_CHECK_EXTENSION, ext);
+ ret = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, ext);
if (ret > 0)
return ret;
return 0;
@@ -607,13 +606,13 @@ void kvm_create_irqchip(kvm_context_t kvm)
kvm->irqchip_in_kernel = 0;
#ifdef KVM_CAP_IRQCHIP
if (!kvm->no_irqchip_creation) {
- r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_IRQCHIP);
+ r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_IRQCHIP);
if (r > 0) { /* kernel irqchip supported */
r = kvm_vm_ioctl(kvm_state, KVM_CREATE_IRQCHIP);
if (r >= 0) {
kvm->irqchip_inject_ioctl = KVM_IRQ_LINE;
#if defined(KVM_CAP_IRQ_INJECT_STATUS) && defined(KVM_IRQ_LINE_STATUS)
- r = ioctl(kvm->fd, KVM_CHECK_EXTENSION,
+ r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION,
KVM_CAP_IRQ_INJECT_STATUS);
if (r > 0)
kvm->irqchip_inject_ioctl = KVM_IRQ_LINE_STATUS;
@@ -942,7 +941,7 @@ int kvm_get_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
{
int r;
- r = ioctl(vcpu->kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
+ r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
if (r > 0)
return ioctl(vcpu->fd, KVM_GET_MP_STATE, mp_state);
return -ENOSYS;
@@ -952,7 +951,7 @@ int kvm_set_mpstate(kvm_vcpu_context_t vcpu, struct kvm_mp_state *mp_state)
{
int r;
- r = ioctl(vcpu->kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
+ r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_MP_STATE);
if (r > 0)
return ioctl(vcpu->fd, KVM_SET_MP_STATE, mp_state);
return -ENOSYS;
@@ -1188,7 +1187,7 @@ int kvm_has_sync_mmu(void)
{
int r = 0;
#ifdef KVM_CAP_SYNC_MMU
- r = ioctl(kvm_context->fd, KVM_CHECK_EXTENSION, KVM_CAP_SYNC_MMU);
+ r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_SYNC_MMU);
#endif
return r;
}
@@ -1207,7 +1206,7 @@ int kvm_init_coalesced_mmio(kvm_context_t kvm)
int r = 0;
kvm->coalesced_mmio = 0;
#ifdef KVM_CAP_COALESCED_MMIO
- r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_COALESCED_MMIO);
+ r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_COALESCED_MMIO);
if (r > 0) {
kvm->coalesced_mmio = r;
return 0;
@@ -1282,7 +1281,7 @@ int kvm_assign_irq(kvm_context_t kvm,
{
int ret;
- ret = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_ASSIGN_DEV_IRQ);
+ ret = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_ASSIGN_DEV_IRQ);
if (ret > 0) {
return kvm_vm_ioctl(kvm_state, KVM_ASSIGN_DEV_IRQ, assigned_irq);
}
@@ -1317,7 +1316,7 @@ int kvm_destroy_memory_region_works(kvm_context_t kvm)
int ret = 0;
#ifdef KVM_CAP_DESTROY_MEMORY_REGION_WORKS
- ret = ioctl(kvm->fd, KVM_CHECK_EXTENSION,
+ ret = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION,
KVM_CAP_DESTROY_MEMORY_REGION_WORKS);
if (ret <= 0)
ret = 0;
@@ -1333,7 +1332,7 @@ int kvm_reinject_control(kvm_context_t kvm, int pit_reinject)
control.pit_reinject = pit_reinject;
- r = ioctl(kvm->fd, KVM_CHECK_EXTENSION, KVM_CAP_REINJECT_CONTROL);
+ r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_REINJECT_CONTROL);
if (r > 0) {
return kvm_vm_ioctl(kvm_state, KVM_REINJECT_CONTROL, &control);
}