From patchwork Fri May 13 12:14:05 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 782752 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p4DCEJ80032223 for ; Fri, 13 May 2011 12:14:36 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758929Ab1EMMOV (ORCPT ); Fri, 13 May 2011 08:14:21 -0400 Received: from goliath.siemens.de ([192.35.17.28]:30177 "EHLO goliath.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758735Ab1EMMOR (ORCPT ); Fri, 13 May 2011 08:14:17 -0400 Received: from mail1.siemens.de (localhost [127.0.0.1]) by goliath.siemens.de (8.13.6/8.13.6) with ESMTP id p4DCEBsv028884; Fri, 13 May 2011 14:14:12 +0200 Received: from mchn199C.mchp.siemens.de ([139.25.109.49]) by mail1.siemens.de (8.13.6/8.13.6) with ESMTP id p4DCEAvG019933; Fri, 13 May 2011 14:14:11 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org Subject: [PATCH 11/16] qemu-kvm: Remove kvm_context from public interfaces Date: Fri, 13 May 2011 14:14:05 +0200 Message-Id: X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Fri, 13 May 2011 12:14:36 +0000 (UTC) The goal is to remove kvm_context (and also kvm_state one day). For the few cases we currently still need kvm_context, we can perfectly derive it from kvm_state. Signed-off-by: Jan Kiszka --- hw/device-assignment.c | 21 +++++----- hw/i8254-kvm.c | 8 ++-- hw/i8259.c | 4 +- hw/ioapic.c | 4 +- hw/pcspk.c | 4 +- kvm.h | 9 +++- qemu-kvm-x86.c | 22 +++++----- qemu-kvm.c | 101 ++++++++++++++++++++++++------------------------ qemu-kvm.h | 32 +++++++-------- target-i386/kvm.c | 4 +- 10 files changed, 104 insertions(+), 105 deletions(-) diff --git a/hw/device-assignment.c b/hw/device-assignment.c index 0f7f5aa..abc38f8 100644 --- a/hw/device-assignment.c +++ b/hw/device-assignment.c @@ -967,7 +967,7 @@ static int assign_device(AssignedDevice *dev) "requests!\n"); } - r = kvm_assign_pci_device(kvm_context, &assigned_dev_data); + r = kvm_assign_pci_device(kvm_state, &assigned_dev_data); if (r < 0) { fprintf(stderr, "Failed to assign device \"%s\" : %s\n", dev->dev.qdev.id, strerror(-r)); @@ -1010,7 +1010,7 @@ static int assign_irq(AssignedDevice *dev) #ifdef KVM_CAP_ASSIGN_DEV_IRQ if (dev->irq_requested_type) { assigned_irq_data.flags = dev->irq_requested_type; - r = kvm_deassign_irq(kvm_context, &assigned_irq_data); + r = kvm_deassign_irq(kvm_state, &assigned_irq_data); /* -ENXIO means no assigned irq */ if (r && r != -ENXIO) perror("assign_irq: deassign"); @@ -1024,7 +1024,7 @@ static int assign_irq(AssignedDevice *dev) assigned_irq_data.flags |= KVM_DEV_IRQ_HOST_INTX; #endif - r = kvm_assign_irq(kvm_context, &assigned_irq_data); + r = kvm_assign_irq(kvm_state, &assigned_irq_data); if (r < 0) { fprintf(stderr, "Failed to assign irq for \"%s\": %s\n", dev->dev.qdev.id, strerror(-r)); @@ -1048,7 +1048,7 @@ static void deassign_device(AssignedDevice *dev) assigned_dev_data.assigned_dev_id = calc_assigned_dev_id(dev->h_segnr, dev->h_busnr, dev->h_devfn); - r = kvm_deassign_pci_device(kvm_context, &assigned_dev_data); + r = kvm_deassign_pci_device(kvm_state, &assigned_dev_data); if (r < 0) fprintf(stderr, "Failed to deassign device \"%s\" : %s\n", dev->dev.qdev.id, strerror(-r)); @@ -1113,7 +1113,7 @@ static void assigned_dev_update_msi(PCIDevice *pci_dev, unsigned int ctrl_pos) assigned_irq_data.flags = assigned_dev->irq_requested_type; free_dev_irq_entries(assigned_dev); - r = kvm_deassign_irq(kvm_context, &assigned_irq_data); + r = kvm_deassign_irq(kvm_state, &assigned_irq_data); /* -ENXIO means no assigned irq */ if (r && r != -ENXIO) perror("assigned_dev_update_msi: deassign irq"); @@ -1147,8 +1147,9 @@ static void assigned_dev_update_msi(PCIDevice *pci_dev, unsigned int ctrl_pos) assigned_irq_data.guest_irq = assigned_dev->entry->gsi; assigned_irq_data.flags = KVM_DEV_IRQ_HOST_MSI | KVM_DEV_IRQ_GUEST_MSI; - if (kvm_assign_irq(kvm_context, &assigned_irq_data) < 0) + if (kvm_assign_irq(kvm_state, &assigned_irq_data) < 0) { perror("assigned_dev_enable_msi: assign irq"); + } assigned_dev->girq = -1; assigned_dev->irq_requested_type = assigned_irq_data.flags; @@ -1192,7 +1193,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev) msix_nr.assigned_dev_id = calc_assigned_dev_id(adev->h_segnr, adev->h_busnr, (uint8_t)adev->h_devfn); msix_nr.entry_nr = entries_nr; - r = kvm_assign_set_msix_nr(kvm_context, &msix_nr); + r = kvm_assign_set_msix_nr(kvm_state, &msix_nr); if (r != 0) { fprintf(stderr, "fail to set MSI-X entry number for MSIX! %s\n", strerror(-r)); @@ -1231,7 +1232,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev) msix_entry.gsi = adev->entry[entries_nr].gsi; msix_entry.entry = i; - r = kvm_assign_set_msix_entry(kvm_context, &msix_entry); + r = kvm_assign_set_msix_entry(kvm_state, &msix_entry); if (r) { fprintf(stderr, "fail to set MSI-X entry! %s\n", strerror(-r)); break; @@ -1269,7 +1270,7 @@ static void assigned_dev_update_msix(PCIDevice *pci_dev, unsigned int ctrl_pos) assigned_irq_data.flags = assigned_dev->irq_requested_type; free_dev_irq_entries(assigned_dev); - r = kvm_deassign_irq(kvm_context, &assigned_irq_data); + r = kvm_deassign_irq(kvm_state, &assigned_irq_data); /* -ENXIO means no assigned irq */ if (r && r != -ENXIO) perror("assigned_dev_update_msix: deassign irq"); @@ -1285,7 +1286,7 @@ static void assigned_dev_update_msix(PCIDevice *pci_dev, unsigned int ctrl_pos) perror("assigned_dev_update_msix_mmio"); return; } - if (kvm_assign_irq(kvm_context, &assigned_irq_data) < 0) { + if (kvm_assign_irq(kvm_state, &assigned_irq_data) < 0) { perror("assigned_dev_enable_msix: assign irq"); return; } diff --git a/hw/i8254-kvm.c b/hw/i8254-kvm.c index 44ed86c..8b494d0 100644 --- a/hw/i8254-kvm.c +++ b/hw/i8254-kvm.c @@ -39,11 +39,11 @@ static void kvm_pit_pre_save(void *opaque) int i; if (kvm_has_pit_state2()) { - kvm_get_pit2(kvm_context, &pit2); + kvm_get_pit2(kvm_state, &pit2); s->flags = pit2.flags; } else { /* pit2 is superset of pit struct so just cast it and use it */ - kvm_get_pit(kvm_context, (struct kvm_pit_state *)&pit2); + kvm_get_pit(kvm_state, (struct kvm_pit_state *)&pit2); } for (i = 0; i < 3; i++) { c = &pit2.channels[i]; @@ -92,9 +92,9 @@ static int kvm_pit_post_load(void *opaque, int version_id) } if (kvm_has_pit_state2()) { - kvm_set_pit2(kvm_context, &pit2); + kvm_set_pit2(kvm_state, &pit2); } else { - kvm_set_pit(kvm_context, (struct kvm_pit_state *)&pit2); + kvm_set_pit(kvm_state, (struct kvm_pit_state *)&pit2); } return 0; } diff --git a/hw/i8259.c b/hw/i8259.c index d710ada..b892cee 100644 --- a/hw/i8259.c +++ b/hw/i8259.c @@ -590,7 +590,7 @@ static void kvm_kernel_pic_save_to_user(PicState *s) chip.chip_id = (&s->pics_state->pics[0] == s) ? KVM_IRQCHIP_PIC_MASTER : KVM_IRQCHIP_PIC_SLAVE; - kvm_get_irqchip(kvm_context, &chip); + kvm_get_irqchip(kvm_state, &chip); kpic = &chip.chip.pic; s->last_irr = kpic->last_irr; @@ -640,7 +640,7 @@ static int kvm_kernel_pic_load_from_user(PicState *s) kpic->elcr = s->elcr; kpic->elcr_mask = s->elcr_mask; - kvm_set_irqchip(kvm_context, &chip); + kvm_set_irqchip(kvm_state, &chip); #endif return 0; } diff --git a/hw/ioapic.c b/hw/ioapic.c index 084d37a..20dd8eb 100644 --- a/hw/ioapic.c +++ b/hw/ioapic.c @@ -278,7 +278,7 @@ static void kvm_kernel_ioapic_save_to_user(IOAPICState *s) int i; chip.chip_id = KVM_IRQCHIP_IOAPIC; - kvm_get_irqchip(kvm_context, &chip); + kvm_get_irqchip(kvm_state, &chip); kioapic = &chip.chip.ioapic; s->id = kioapic->id; @@ -308,7 +308,7 @@ static void kvm_kernel_ioapic_load_from_user(IOAPICState *s) kioapic->redirtbl[i].bits = s->ioredtbl[i]; } - kvm_set_irqchip(kvm_context, &chip); + kvm_set_irqchip(kvm_state, &chip); #endif } diff --git a/hw/pcspk.c b/hw/pcspk.c index e8b72c5..c70de53 100644 --- a/hw/pcspk.c +++ b/hw/pcspk.c @@ -58,7 +58,7 @@ static void kvm_get_pit_ch2(ISADevice *dev, struct kvm_pit_state pit_state; if (kvm_enabled() && kvm_pit_in_kernel()) { - kvm_get_pit(kvm_context, &pit_state); + kvm_get_pit(kvm_state, &pit_state); pit->channels[2].mode = pit_state.channels[2].mode; pit->channels[2].count = pit_state.channels[2].count; pit->channels[2].count_load_time = pit_state.channels[2].count_load_time; @@ -80,7 +80,7 @@ static void kvm_set_pit_ch2(ISADevice *dev, inkernel_state->channels[2].count_load_time = pit->channels[2].count_load_time; inkernel_state->channels[2].gate = pit->channels[2].gate; - kvm_set_pit(kvm_context, inkernel_state); + kvm_set_pit(kvm_state, inkernel_state); } } #else diff --git a/kvm.h b/kvm.h index 7d548ed..75dc7cf 100644 --- a/kvm.h +++ b/kvm.h @@ -17,9 +17,6 @@ #include #include "config-host.h" #include "qemu-queue.h" -#ifdef NEED_CPU_H -#include "qemu-kvm.h" -#endif #ifdef CONFIG_KVM #include @@ -85,6 +82,7 @@ int kvm_pit_in_kernel(void); int kvm_on_sigbus_vcpu(CPUState *env, int code, void *addr); int kvm_on_sigbus(int code, void *addr); +#endif /* NEED_CPU_H */ /* internal API */ @@ -96,6 +94,7 @@ int kvm_ioctl(KVMState *s, int type, ...); int kvm_vm_ioctl(KVMState *s, int type, ...); +#ifdef NEED_CPU_H int kvm_vcpu_ioctl(CPUState *env, int type, ...); /* Arch specific hooks */ @@ -234,4 +233,8 @@ int kvm_irqchip_in_kernel(void); int kvm_set_irq(int irq, int level, int *status); +#ifdef NEED_CPU_H +#include "qemu-kvm.h" +#endif + #endif diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c index bbdf218..2aa833f 100644 --- a/qemu-kvm-x86.c +++ b/qemu-kvm-x86.c @@ -23,19 +23,19 @@ #include "kvm.h" #include "hw/apic.h" -static int kvm_create_pit(kvm_context_t kvm) +static int kvm_create_pit(KVMState *s) { #ifdef KVM_CAP_PIT int r; if (kvm_pit_in_kernel()) { - r = kvm_vm_ioctl(kvm_state, KVM_CREATE_PIT); + r = kvm_vm_ioctl(s, KVM_CREATE_PIT); if (r < 0) { fprintf(stderr, "Create kernel PIC irqchip failed\n"); return r; } if (!kvm_pit_reinject) { - r = kvm_reinject_control(kvm_context, 0); + r = kvm_reinject_control(s, 0); if (r < 0) { fprintf(stderr, "failure to disable in-kernel PIT reinjection\n"); @@ -142,37 +142,37 @@ int kvm_set_lapic(CPUState *env, struct kvm_lapic_state *s) #ifdef KVM_CAP_PIT -int kvm_get_pit(kvm_context_t kvm, struct kvm_pit_state *s) +int kvm_get_pit(KVMState *s, struct kvm_pit_state *pit_state) { if (!kvm_pit_in_kernel()) { return 0; } - return kvm_vm_ioctl(kvm_state, KVM_GET_PIT, s); + return kvm_vm_ioctl(s, KVM_GET_PIT, pit_state); } -int kvm_set_pit(kvm_context_t kvm, struct kvm_pit_state *s) +int kvm_set_pit(KVMState *s, struct kvm_pit_state *pit_state) { if (!kvm_pit_in_kernel()) { return 0; } - return kvm_vm_ioctl(kvm_state, KVM_SET_PIT, s); + return kvm_vm_ioctl(s, KVM_SET_PIT, pit_state); } #ifdef KVM_CAP_PIT_STATE2 -int kvm_get_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2) +int kvm_get_pit2(KVMState *s, struct kvm_pit_state2 *ps2) { if (!kvm_pit_in_kernel()) { return 0; } - return kvm_vm_ioctl(kvm_state, KVM_GET_PIT2, ps2); + return kvm_vm_ioctl(s, KVM_GET_PIT2, ps2); } -int kvm_set_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2) +int kvm_set_pit2(KVMState *s, struct kvm_pit_state2 *ps2) { if (!kvm_pit_in_kernel()) { return 0; } - return kvm_vm_ioctl(kvm_state, KVM_SET_PIT2, ps2); + return kvm_vm_ioctl(s, KVM_SET_PIT2, ps2); } #endif diff --git a/qemu-kvm.c b/qemu-kvm.c index 4aa6b0f..9406fcf 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -55,7 +55,6 @@ int kvm_nested = 0; KVMState *kvm_state; -kvm_context_t kvm_context; pthread_mutex_t qemu_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t qemu_vcpu_cond = PTHREAD_COND_INITIALIZER; @@ -153,7 +152,6 @@ int kvm_init(void) goto out_close; } kvm_state = qemu_mallocz(sizeof(*kvm_state)); - kvm_context = &kvm_state->kvm_context; kvm_state->fd = fd; kvm_state->vmfd = -1; @@ -212,12 +210,13 @@ static int kvm_set_boot_vcpu_id(kvm_context_t kvm, uint32_t id) #endif } -static int kvm_init_irq_routing(kvm_context_t kvm) +static int kvm_init_irq_routing(KVMState *s) { #ifdef KVM_CAP_IRQ_ROUTING + kvm_context_t kvm = &s->kvm_context; int r, gsi_count; - gsi_count = kvm_check_extension(kvm_state, KVM_CAP_IRQ_ROUTING); + gsi_count = kvm_check_extension(s, KVM_CAP_IRQ_ROUTING); if (gsi_count > 0) { int gsi_bits, i; @@ -232,7 +231,7 @@ static int kvm_init_irq_routing(kvm_context_t kvm) } } - kvm->irq_routes = qemu_mallocz(sizeof(*kvm_context->irq_routes)); + kvm->irq_routes = qemu_mallocz(sizeof(*kvm->irq_routes)); kvm->nr_allocated_irq_routes = 0; r = kvm_arch_init_irq_routing(); @@ -244,16 +243,17 @@ static int kvm_init_irq_routing(kvm_context_t kvm) return 0; } -int kvm_create_irqchip(kvm_context_t kvm) +int kvm_create_irqchip(KVMState *s) { #ifdef KVM_CAP_IRQCHIP + kvm_context_t kvm = &s->kvm_context; int r; - if (!kvm_irqchip || !kvm_check_extension(kvm_state, KVM_CAP_IRQCHIP)) { + if (!kvm_irqchip || !kvm_check_extension(s, KVM_CAP_IRQCHIP)) { return 0; } - r = kvm_vm_ioctl(kvm_state, KVM_CREATE_IRQCHIP); + r = kvm_vm_ioctl(s, KVM_CREATE_IRQCHIP); if (r < 0) { fprintf(stderr, "Create kernel PIC irqchip failed\n"); return r; @@ -261,13 +261,13 @@ int kvm_create_irqchip(kvm_context_t kvm) kvm->irqchip_inject_ioctl = KVM_IRQ_LINE; #if defined(KVM_CAP_IRQ_INJECT_STATUS) && defined(KVM_IRQ_LINE_STATUS) - if (kvm_check_extension(kvm_state, KVM_CAP_IRQ_INJECT_STATUS)) { + if (kvm_check_extension(s, KVM_CAP_IRQ_INJECT_STATUS)) { kvm->irqchip_inject_ioctl = KVM_IRQ_LINE_STATUS; } #endif - kvm_state->irqchip_in_kernel = 1; + s->irqchip_in_kernel = 1; - r = kvm_init_irq_routing(kvm); + r = kvm_init_irq_routing(s); if (r < 0) { return r; } @@ -307,28 +307,28 @@ int kvm_set_irq(int irq, int level, int *status) return 1; } -int kvm_get_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip) +int kvm_get_irqchip(KVMState *s, struct kvm_irqchip *chip) { int r; - if (!kvm_state->irqchip_in_kernel) { + if (!s->irqchip_in_kernel) { return 0; } - r = kvm_vm_ioctl(kvm_state, KVM_GET_IRQCHIP, chip); + r = kvm_vm_ioctl(s, KVM_GET_IRQCHIP, chip); if (r < 0) { perror("kvm_get_irqchip\n"); } return r; } -int kvm_set_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip) +int kvm_set_irqchip(KVMState *s, struct kvm_irqchip *chip) { int r; - if (!kvm_state->irqchip_in_kernel) { + if (!s->irqchip_in_kernel) { return 0; } - r = kvm_vm_ioctl(kvm_state, KVM_SET_IRQCHIP, chip); + r = kvm_vm_ioctl(s, KVM_SET_IRQCHIP, chip); if (r < 0) { perror("kvm_set_irqchip\n"); } @@ -521,52 +521,52 @@ int kvm_inject_nmi(CPUState *env) } #ifdef KVM_CAP_DEVICE_ASSIGNMENT -int kvm_assign_pci_device(kvm_context_t kvm, +int kvm_assign_pci_device(KVMState *s, struct kvm_assigned_pci_dev *assigned_dev) { - return kvm_vm_ioctl(kvm_state, KVM_ASSIGN_PCI_DEVICE, assigned_dev); + return kvm_vm_ioctl(s, KVM_ASSIGN_PCI_DEVICE, assigned_dev); } -static int kvm_old_assign_irq(kvm_context_t kvm, +static int kvm_old_assign_irq(KVMState *s, struct kvm_assigned_irq *assigned_irq) { - return kvm_vm_ioctl(kvm_state, KVM_ASSIGN_IRQ, assigned_irq); + return kvm_vm_ioctl(s, KVM_ASSIGN_IRQ, assigned_irq); } #ifdef KVM_CAP_ASSIGN_DEV_IRQ -int kvm_assign_irq(kvm_context_t kvm, struct kvm_assigned_irq *assigned_irq) +int kvm_assign_irq(KVMState *s, struct kvm_assigned_irq *assigned_irq) { int ret; - ret = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_ASSIGN_DEV_IRQ); + ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_ASSIGN_DEV_IRQ); if (ret > 0) { - return kvm_vm_ioctl(kvm_state, KVM_ASSIGN_DEV_IRQ, assigned_irq); + return kvm_vm_ioctl(s, KVM_ASSIGN_DEV_IRQ, assigned_irq); } - return kvm_old_assign_irq(kvm, assigned_irq); + return kvm_old_assign_irq(s, assigned_irq); } -int kvm_deassign_irq(kvm_context_t kvm, struct kvm_assigned_irq *assigned_irq) +int kvm_deassign_irq(KVMState *s, struct kvm_assigned_irq *assigned_irq) { - return kvm_vm_ioctl(kvm_state, KVM_DEASSIGN_DEV_IRQ, assigned_irq); + return kvm_vm_ioctl(s, KVM_DEASSIGN_DEV_IRQ, assigned_irq); } #else -int kvm_assign_irq(kvm_context_t kvm, struct kvm_assigned_irq *assigned_irq) +int kvm_assign_irq(KVMState *s, struct kvm_assigned_irq *assigned_irq) { - return kvm_old_assign_irq(kvm, assigned_irq); + return kvm_old_assign_irq(s, assigned_irq); } #endif #endif #ifdef KVM_CAP_DEVICE_DEASSIGNMENT -int kvm_deassign_pci_device(kvm_context_t kvm, +int kvm_deassign_pci_device(KVMState *s, struct kvm_assigned_pci_dev *assigned_dev) { - return kvm_vm_ioctl(kvm_state, KVM_DEASSIGN_PCI_DEVICE, assigned_dev); + return kvm_vm_ioctl(s, KVM_DEASSIGN_PCI_DEVICE, assigned_dev); } #endif -int kvm_reinject_control(kvm_context_t kvm, int pit_reinject) +int kvm_reinject_control(KVMState *s, int pit_reinject) { #ifdef KVM_CAP_REINJECT_CONTROL int r; @@ -574,9 +574,9 @@ int kvm_reinject_control(kvm_context_t kvm, int pit_reinject) control.pit_reinject = pit_reinject; - r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_REINJECT_CONTROL); + r = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_REINJECT_CONTROL); if (r > 0) { - return kvm_vm_ioctl(kvm_state, KVM_REINJECT_CONTROL, &control); + return kvm_vm_ioctl(s, KVM_REINJECT_CONTROL, &control); } #endif return -ENOSYS; @@ -595,7 +595,7 @@ int kvm_has_gsi_routing(void) int kvm_clear_gsi_routes(void) { #ifdef KVM_CAP_IRQ_ROUTING - kvm_context_t kvm = kvm_context; + kvm_context_t kvm = &kvm_state->kvm_context; kvm->irq_routes->nr = 0; return 0; @@ -607,7 +607,7 @@ int kvm_clear_gsi_routes(void) int kvm_add_routing_entry(struct kvm_irq_routing_entry *entry) { #ifdef KVM_CAP_IRQ_ROUTING - kvm_context_t kvm = kvm_context; + kvm_context_t kvm = &kvm_state->kvm_context; struct kvm_irq_routing *z; struct kvm_irq_routing_entry *new; int n, size; @@ -661,7 +661,7 @@ int kvm_add_irq_route(int gsi, int irqchip, int pin) int kvm_del_routing_entry(struct kvm_irq_routing_entry *entry) { #ifdef KVM_CAP_IRQ_ROUTING - kvm_context_t kvm = kvm_context; + kvm_context_t kvm = &kvm_state->kvm_context; struct kvm_irq_routing_entry *e, *p; int i, gsi, found = 0; @@ -722,7 +722,7 @@ int kvm_update_routing_entry(struct kvm_irq_routing_entry *entry, struct kvm_irq_routing_entry *newentry) { #ifdef KVM_CAP_IRQ_ROUTING - kvm_context_t kvm = kvm_context; + kvm_context_t kvm = &kvm_state->kvm_context; struct kvm_irq_routing_entry *e; int i; @@ -781,7 +781,7 @@ int kvm_del_irq_route(int gsi, int irqchip, int pin) int kvm_commit_irq_routes(void) { #ifdef KVM_CAP_IRQ_ROUTING - kvm_context_t kvm = kvm_context; + kvm_context_t kvm = &kvm_state->kvm_context; kvm->irq_routes->flags = 0; return kvm_vm_ioctl(kvm_state, KVM_SET_GSI_ROUTING, kvm->irq_routes); @@ -792,7 +792,7 @@ int kvm_commit_irq_routes(void) int kvm_get_irq_route_gsi(void) { - kvm_context_t kvm = kvm_context; + kvm_context_t kvm = &kvm_state->kvm_context; int i, bit; uint32_t *buf = kvm->used_gsi_bitmap; @@ -867,16 +867,15 @@ int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new) #ifdef KVM_CAP_DEVICE_MSIX -int kvm_assign_set_msix_nr(kvm_context_t kvm, - struct kvm_assigned_msix_nr *msix_nr) +int kvm_assign_set_msix_nr(KVMState *s, struct kvm_assigned_msix_nr *msix_nr) { - return kvm_vm_ioctl(kvm_state, KVM_ASSIGN_SET_MSIX_NR, msix_nr); + return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_NR, msix_nr); } -int kvm_assign_set_msix_entry(kvm_context_t kvm, +int kvm_assign_set_msix_entry(KVMState *s, struct kvm_assigned_msix_entry *entry) { - return kvm_vm_ioctl(kvm_state, KVM_ASSIGN_SET_MSIX_ENTRY, entry); + return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_ENTRY, entry); } #endif @@ -1234,18 +1233,18 @@ void kvm_hpet_disable_kpit(void) { struct kvm_pit_state2 ps2; - kvm_get_pit2(kvm_context, &ps2); + kvm_get_pit2(kvm_state, &ps2); ps2.flags |= KVM_PIT_FLAGS_HPET_LEGACY; - kvm_set_pit2(kvm_context, &ps2); + kvm_set_pit2(kvm_state, &ps2); } void kvm_hpet_enable_kpit(void) { struct kvm_pit_state2 ps2; - kvm_get_pit2(kvm_context, &ps2); + kvm_get_pit2(kvm_state, &ps2); ps2.flags &= ~KVM_PIT_FLAGS_HPET_LEGACY; - kvm_set_pit2(kvm_context, &ps2); + kvm_set_pit2(kvm_state, &ps2); } #endif @@ -1397,7 +1396,7 @@ static int kvm_create_context(void) return -EINVAL; } - r = kvm_create_irqchip(kvm_context); + r = kvm_create_irqchip(kvm_state); if (r < 0) { return r; } @@ -1500,6 +1499,6 @@ void kvm_ioperm(CPUState *env, void *data) int kvm_set_boot_cpu_id(uint32_t id) { - return kvm_set_boot_vcpu_id(kvm_context, id); + return kvm_set_boot_vcpu_id(&kvm_state->kvm_context, id); } diff --git a/qemu-kvm.h b/qemu-kvm.h index dd11e32..2c67a28 100644 --- a/qemu-kvm.h +++ b/qemu-kvm.h @@ -66,7 +66,7 @@ typedef struct kvm_context *kvm_context_t; int kvm_arch_run(CPUState *env); -int kvm_create_irqchip(kvm_context_t kvm); +int kvm_create_irqchip(KVMState *s); /*! * \brief Check if a vcpu is ready for interrupt injection @@ -103,7 +103,7 @@ int kvm_inject_irq(CPUState *env, unsigned irq); * \param kvm Pointer to the current kvm_context * \param chip The irq chip device to be dumped */ -int kvm_get_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip); +int kvm_get_irqchip(KVMState *s, struct kvm_irqchip *chip); /*! * \brief Set in kernel IRQCHIP contents @@ -115,7 +115,7 @@ int kvm_get_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip); * \param kvm Pointer to the current kvm_context * \param chip THe irq chip device to be written */ -int kvm_set_irqchip(kvm_context_t kvm, struct kvm_irqchip *chip); +int kvm_set_irqchip(KVMState *s, struct kvm_irqchip *chip); #if defined(__i386__) || defined(__x86_64__) /*! @@ -166,7 +166,7 @@ int kvm_inject_nmi(CPUState *env); * \param kvm Pointer to the current kvm_context * \param s PIT state of the virtual domain */ -int kvm_get_pit(kvm_context_t kvm, struct kvm_pit_state *s); +int kvm_get_pit(KVMState *s, struct kvm_pit_state *pit_state); /*! * \brief Set in kernel PIT of the virtual domain @@ -177,9 +177,9 @@ int kvm_get_pit(kvm_context_t kvm, struct kvm_pit_state *s); * \param kvm Pointer to the current kvm_context * \param s PIT state of the virtual domain */ -int kvm_set_pit(kvm_context_t kvm, struct kvm_pit_state *s); +int kvm_set_pit(KVMState *s, struct kvm_pit_state *pit_state); -int kvm_reinject_control(kvm_context_t kvm, int pit_reinject); +int kvm_reinject_control(KVMState *s, int pit_reinject); #ifdef KVM_CAP_PIT_STATE2 /*! @@ -190,7 +190,7 @@ int kvm_reinject_control(kvm_context_t kvm, int pit_reinject); * \param ps2 PIT state2 of the virtual domain * \return 0 on success */ -int kvm_set_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2); +int kvm_set_pit2(KVMState *s, struct kvm_pit_state2 *ps2); /*! * \brief Get in kernel PIT state2 of the virtual domain @@ -200,7 +200,7 @@ int kvm_set_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2); * \param ps2 PIT state2 of the virtual domain * \return 0 on success */ -int kvm_get_pit2(kvm_context_t kvm, struct kvm_pit_state2 *ps2); +int kvm_get_pit2(KVMState *s, struct kvm_pit_state2 *ps2); #endif #endif @@ -222,7 +222,7 @@ int kvm_enable_vapic(CPUState *env, uint64_t vapic); * \param kvm Pointer to the current kvm_context * \param assigned_dev Parameters, like bus, devfn number, etc */ -int kvm_assign_pci_device(kvm_context_t kvm, +int kvm_assign_pci_device(KVMState *s, struct kvm_assigned_pci_dev *assigned_dev); /*! @@ -234,7 +234,7 @@ int kvm_assign_pci_device(kvm_context_t kvm, * \param kvm Pointer to the current kvm_context * \param assigned_irq Parameters, like dev id, host irq, guest irq, etc */ -int kvm_assign_irq(kvm_context_t kvm, struct kvm_assigned_irq *assigned_irq); +int kvm_assign_irq(KVMState *s, struct kvm_assigned_irq *assigned_irq); #ifdef KVM_CAP_ASSIGN_DEV_IRQ /*! @@ -246,7 +246,7 @@ int kvm_assign_irq(kvm_context_t kvm, struct kvm_assigned_irq *assigned_irq); * \param kvm Pointer to the current kvm_context * \param assigned_irq Parameters, like dev id, host irq, guest irq, etc */ -int kvm_deassign_irq(kvm_context_t kvm, struct kvm_assigned_irq *assigned_irq); +int kvm_deassign_irq(KVMState *s, struct kvm_assigned_irq *assigned_irq); #endif #endif @@ -260,7 +260,7 @@ int kvm_deassign_irq(kvm_context_t kvm, struct kvm_assigned_irq *assigned_irq); * \param kvm Pointer to the current kvm_context * \param assigned_dev Parameters, like bus, devfn number, etc */ -int kvm_deassign_pci_device(kvm_context_t kvm, +int kvm_deassign_pci_device(KVMState *s, struct kvm_assigned_pci_dev *assigned_dev); #endif @@ -318,16 +318,13 @@ int kvm_update_routing_entry(struct kvm_irq_routing_entry *entry, #ifdef KVM_CAP_DEVICE_MSIX -int kvm_assign_set_msix_nr(kvm_context_t kvm, - struct kvm_assigned_msix_nr *msix_nr); -int kvm_assign_set_msix_entry(kvm_context_t kvm, +int kvm_assign_set_msix_nr(KVMState *s, struct kvm_assigned_msix_nr *msix_nr); +int kvm_assign_set_msix_entry(KVMState *s, struct kvm_assigned_msix_entry *entry); #endif #else /* !CONFIG_KVM */ -typedef struct kvm_context *kvm_context_t; - struct kvm_pit_state { }; @@ -383,7 +380,6 @@ extern int kvm_irqchip; extern int kvm_pit; extern int kvm_pit_reinject; extern int kvm_nested; -extern kvm_context_t kvm_context; extern unsigned int kvm_shadow_memory; struct ioperm_data { diff --git a/target-i386/kvm.c b/target-i386/kvm.c index a8b5c6d..33239bf 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -601,7 +601,7 @@ static int kvm_get_supported_msrs(KVMState *s) return ret; } -static int kvm_create_pit(kvm_context_t kvm); +static int kvm_create_pit(KVMState *s); int kvm_arch_init(KVMState *s) { @@ -653,7 +653,7 @@ int kvm_arch_init(KVMState *s) } qemu_register_reset(kvm_unpoison_all, NULL); - ret = kvm_create_pit(&s->kvm_context); + ret = kvm_create_pit(s); if (ret < 0) { return ret; }