All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services
@ 2012-03-02  9:30 Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 01/10] qemu-kvm: Move kvm_create_pit out of arch init code Jan Kiszka
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Now that upstream has basic irqchip support, we can make use of it for
qemu-kvm as well, removing another 700 lines of code here.

Changes in v3:
 - rebased over latest qemu-kvm (next)
 - included a trivial whitespace diff cleanup
 - improve user experience of -no-kvm[-irqchip] by not resetting machine
   options, just appending the corresponding switches

Jan Kiszka (10):
  qemu-kvm: Move kvm_create_pit out of arch init code
  qemu-kvm: Use machine options to configure qemu-kvm defaults
  qemu-kvm: Use upstream irq routing services
  qemu-kvm: Use upstream kvm_irqchip_create
  qemu-kvm: Use upstream kvm-ioapic
  qemu-kvm: Use upstream kvm-i8259
  qemu-kvm: Drop unused kvm_get/set_irqchip
  qemu-kvm: Use upstream kvm_irqchip_set_irq instead of kvm_set_irq
  qemu-kvm: Use upstream kvm-apic
  qemu-kvm: Remove some spurious whitespace diffs to upstream

 Makefile.objs          |    2 +-
 Makefile.target        |    8 +-
 hw/apic.c              |  151 +-----------------------------------
 hw/device-assignment.c |   10 +-
 hw/i8254-kvm.c         |    3 +
 hw/i8254.c             |    1 -
 hw/i8259.c             |  108 -------------------------
 hw/ioapic.c            |   75 +-----------------
 hw/isa-bus.c           |    2 +-
 hw/msi.c               |    6 +-
 hw/msix.c              |   10 +-
 hw/pc.c                |    7 +-
 hw/pc_piix.c           |   23 ++----
 kvm-all.c              |   17 +----
 kvm-stub.c             |    6 +-
 kvm.h                  |   10 +-
 qemu-kvm-x86.c         |   85 +-------------------
 qemu-kvm.c             |  204 +-----------------------------------------------
 qemu-kvm.h             |   72 +----------------
 target-i386/kvm.c      |   18 ----
 vl.c                   |   10 +--
 21 files changed, 58 insertions(+), 770 deletions(-)

-- 
1.7.3.4


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 01/10] qemu-kvm: Move kvm_create_pit out of arch init code
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 02/10] qemu-kvm: Use machine options to configure qemu-kvm defaults Jan Kiszka
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

This belongs where the PIT is created and allows us to drop another
kvm_irqchip reference.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/i8254-kvm.c    |    3 +++
 qemu-kvm-x86.c    |    4 ++--
 qemu-kvm.h        |    2 ++
 target-i386/kvm.c |    7 -------
 4 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/hw/i8254-kvm.c b/hw/i8254-kvm.c
index ba3b5c9..7316111 100644
--- a/hw/i8254-kvm.c
+++ b/hw/i8254-kvm.c
@@ -107,6 +107,9 @@ void kvm_pit_init(PITState *pit)
 {
     PITChannelState *s;
 
+    if (kvm_create_pit(kvm_state) < 0) {
+        hw_error("KVM PIT creation failed\n");
+    }
     s = &pit->channels[0];
     s->irq_timer = qemu_new_timer_ns(vm_clock, dummy_timer, s);
     vmstate_pit.pre_save = kvm_pit_pre_save;
diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index a0bfc23..6fe48a4 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -23,11 +23,11 @@
 #include "kvm.h"
 #include "hw/apic.h"
 
-static int kvm_create_pit(KVMState *s)
+int kvm_create_pit(KVMState *s)
 {
     int r;
 
-    if (kvm_irqchip) {
+    if (kvm_irqchip_in_kernel()) {
         r = kvm_vm_ioctl(s, KVM_CREATE_PIT);
         if (r < 0) {
             fprintf(stderr, "Create kernel PIC irqchip failed\n");
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 975b6fa..653370e 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -256,6 +256,8 @@ int kvm_update_ioport_access(CPUState *env);
 int kvm_arch_set_ioport_access(unsigned long start, unsigned long size,
                                bool enable);
 
+int kvm_create_pit(KVMState *s);
+
 extern int kvm_irqchip;
 extern int kvm_pit_reinject;
 extern unsigned int kvm_shadow_memory;
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index a91a18f..0954c74 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -661,8 +661,6 @@ static int kvm_get_supported_msrs(KVMState *s)
     return ret;
 }
 
-static int kvm_create_pit(KVMState *s);
-
 int kvm_arch_init(KVMState *s)
 {
     QemuOptsList *list = qemu_find_opts("machine");
@@ -714,11 +712,6 @@ int kvm_arch_init(KVMState *s)
     }
     qemu_register_reset(kvm_unpoison_all, NULL);
 
-    ret = kvm_create_pit(s);
-    if (ret < 0) {
-        return ret;
-    }
-
     if (!QTAILQ_EMPTY(&list->head)) {
         shadow_mem = qemu_opt_get_size(QTAILQ_FIRST(&list->head),
                                        "kvm_shadow_mem", -1);
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 02/10] qemu-kvm: Use machine options to configure qemu-kvm defaults
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 01/10] qemu-kvm: Move kvm_create_pit out of arch init code Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 03/10] qemu-kvm: Use upstream irq routing services Jan Kiszka
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Upstream is moving towards this mechanism, so start using it in qemu-kvm
already to configure the specific defaults: kvm enabled on, just like
in-kernel irqchips.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/pc_piix.c |    7 +++++++
 kvm-all.c    |    8 ++++++++
 vl.c         |    9 ++-------
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 778c70e..234859b 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -388,6 +388,7 @@ static QEMUMachine pc_machine_v1_1 = {
     .init = pc_init_pci,
     .max_cpus = 255,
     .is_default = 1,
+    .default_machine_opts = "accel=kvm,kernel_irqchip=on",
 };
 
 static QEMUMachine pc_machine_v1_0 = {
@@ -425,6 +426,7 @@ static QEMUMachine pc_machine_v0_14 = {
     .desc = "Standard PC",
     .init = pc_init_pci,
     .max_cpus = 255,
+    .default_machine_opts = "accel=kvm,kernel_irqchip=on",
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "qxl",
@@ -465,6 +467,7 @@ static QEMUMachine pc_machine_v0_13 = {
     .desc = "Standard PC",
     .init = pc_init_pci_no_kvmclock,
     .max_cpus = 255,
+    .default_machine_opts = "accel=kvm,kernel_irqchip=on",
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-9p-pci",
@@ -517,6 +520,7 @@ static QEMUMachine pc_machine_v0_12 = {
     .desc = "Standard PC",
     .init = pc_init_pci_no_kvmclock,
     .max_cpus = 255,
+    .default_machine_opts = "accel=kvm,kernel_irqchip=on",
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-serial-pci",
@@ -573,6 +577,7 @@ static QEMUMachine pc_machine_v0_11 = {
     .desc = "Standard PC, qemu 0.11",
     .init = pc_init_pci_no_kvmclock,
     .max_cpus = 255,
+    .default_machine_opts = "accel=kvm,kernel_irqchip=on",
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-blk-pci",
@@ -637,6 +642,7 @@ static QEMUMachine pc_machine_v0_10 = {
     .desc = "Standard PC, qemu 0.10",
     .init = pc_init_pci_no_kvmclock,
     .max_cpus = 255,
+    .default_machine_opts = "accel=kvm,kernel_irqchip=on",
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "virtio-blk-pci",
@@ -713,6 +719,7 @@ static QEMUMachine isapc_machine = {
     .desc = "ISA-only PC",
     .init = pc_init_isa,
     .max_cpus = 1,
+    .default_machine_opts = "accel=kvm,kernel_irqchip=on",
     .compat_props = (GlobalProperty[]) {
         {
             .driver   = "pc-sysfw",
diff --git a/kvm-all.c b/kvm-all.c
index 888245d..4bcda06 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -882,6 +882,7 @@ int kvm_init(void)
     const KVMCapabilityInfo *missing_cap;
     int ret;
     int i;
+    QemuOptsList *list;
 
     s = g_malloc0(sizeof(KVMState));
 
@@ -968,6 +969,13 @@ int kvm_init(void)
     s->pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2);
 #endif
 
+    list = qemu_find_opts("machine");
+    if (!QTAILQ_EMPTY(&list->head) &&
+        !qemu_opt_get_bool(QTAILQ_FIRST(&list->head),
+                           "kernel_irqchip", false)) {
+        kvm_irqchip = 0;
+    }
+
     ret = kvm_arch_init(s);
     if (ret < 0) {
         goto err;
diff --git a/vl.c b/vl.c
index dddf212..124cff1 100644
--- a/vl.c
+++ b/vl.c
@@ -2113,13 +2113,8 @@ static int configure_accelerator(void)
     }
 
     if (p == NULL) {
-#ifdef CONFIG_KVM_OPTIONS
-        /* Use the default "accelerator", kvm */
-        p = "kvm";
-#else
         /* Use the default "accelerator", tcg */
         p = "tcg";
-#endif
     }
 
     while (!accel_initialised && *p != '\0') {
@@ -2978,12 +2973,12 @@ int main(int argc, char **argv, char **envp)
                 break;
 	    case QEMU_OPTION_no_kvm:
                 olist = qemu_find_opts("machine");
-                qemu_opts_reset(olist);
                 qemu_opts_parse(olist, "accel=tcg", 0);
                 break;
 #ifdef CONFIG_KVM_OPTIONS
 	    case QEMU_OPTION_no_kvm_irqchip: {
-		kvm_irqchip = 0;
+                olist = qemu_find_opts("machine");
+                qemu_opts_parse(olist, "kernel_irqchip=off", 0);
 		break;
 	    }
 	    case QEMU_OPTION_no_kvm_pit: {
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 03/10] qemu-kvm: Use upstream irq routing services
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 01/10] qemu-kvm: Move kvm_create_pit out of arch init code Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 02/10] qemu-kvm: Use machine options to configure qemu-kvm defaults Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 04/10] qemu-kvm: Use upstream kvm_irqchip_create Jan Kiszka
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Replace qemu-kvm's versions of kvm_add_irq_route, kvm_add_routing_entry,
kvm_init_irq_routing, kvm_arch_init_irq_routing, and
kvm_commit_irq_routes with the corresponding upstream services. Until
the MSI API is refactored, we only need to export kvm_add_routing_entry
for this.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/device-assignment.c |   10 ++--
 hw/msi.c               |    4 +-
 hw/msix.c              |    8 ++--
 hw/pc.c                |    2 +-
 hw/pc_piix.c           |    4 --
 kvm-all.c              |   10 +---
 kvm-stub.c             |    4 +-
 kvm.h                  |    6 +-
 qemu-kvm-x86.c         |   50 --------------------
 qemu-kvm.c             |  117 +----------------------------------------------
 qemu-kvm.h             |   19 +-------
 target-i386/kvm.c      |    2 -
 12 files changed, 25 insertions(+), 211 deletions(-)

diff --git a/hw/device-assignment.c b/hw/device-assignment.c
index 0e2c7b5..a5f1abb 100644
--- a/hw/device-assignment.c
+++ b/hw/device-assignment.c
@@ -943,8 +943,8 @@ static void assigned_dev_update_msi(PCIDevice *pci_dev)
         }
         assigned_dev->entry->gsi = r;
 
-        kvm_add_routing_entry(assigned_dev->entry);
-        if (kvm_commit_irq_routes() < 0) {
+        kvm_add_routing_entry(kvm_state, assigned_dev->entry);
+        if (kvm_irqchip_commit_routes(kvm_state) < 0) {
             perror("assigned_dev_update_msi: kvm_commit_irq_routes");
             assigned_dev->cap.state &= ~ASSIGNED_DEVICE_MSI_ENABLED;
             return;
@@ -1028,7 +1028,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev)
         DEBUG("MSI-X vector %d, gsi %d, addr %08x_%08x, data %08x\n", i,
               r, entry->addr_hi, entry->addr_lo, entry->data);
 
-        kvm_add_routing_entry(&adev->entry[i]);
+        kvm_add_routing_entry(kvm_state, &adev->entry[i]);
 
         msix_entry.gsi = adev->entry[i].gsi;
         msix_entry.entry = i;
@@ -1039,7 +1039,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev)
         }
     }
 
-    if (r == 0 && kvm_commit_irq_routes() < 0) {
+    if (r == 0 && kvm_irqchip_commit_routes(kvm_state) < 0) {
 	    perror("assigned_dev_update_msix_mmio: kvm_commit_irq_routes");
 	    return -EINVAL;
     }
@@ -1504,7 +1504,7 @@ static void msix_mmio_write(void *opaque, target_phys_addr_t addr,
                     return;
                 }
 
-                ret = kvm_commit_irq_routes();
+                ret = kvm_irqchip_commit_routes(kvm_state);
                 if (ret) {
                     fprintf(stderr,
                             "Error committing irq routes (%d)\n", ret);
diff --git a/hw/msi.c b/hw/msi.c
index 5c179c2..3e623c2 100644
--- a/hw/msi.c
+++ b/hw/msi.c
@@ -178,7 +178,7 @@ static void kvm_msi_update(PCIDevice *dev)
     }
     dev->msi_entries_nr = nr_vectors;
     if (changed) {
-        r = kvm_commit_irq_routes();
+        r = kvm_irqchip_commit_routes(kvm_state);
         if (r) {
             fprintf(stderr, "%s: kvm_commit_irq_routes failed: %s\n", __func__,
                     strerror(-r));
@@ -196,7 +196,7 @@ static void kvm_msi_free(PCIDevice *dev)
         kvm_msi_message_del(&dev->msi_irq_entries[vector]);
     }
     if (dev->msi_entries_nr > 0) {
-        kvm_commit_irq_routes();
+        kvm_irqchip_commit_routes(kvm_state);
     }
     dev->msi_entries_nr = 0;
 }
diff --git a/hw/msix.c b/hw/msix.c
index 6e40957..55ddbf4 100644
--- a/hw/msix.c
+++ b/hw/msix.c
@@ -49,7 +49,7 @@ static void kvm_msix_free(PCIDevice *dev)
         }
     }
     if (changed) {
-        kvm_commit_irq_routes();
+        kvm_irqchip_commit_routes(kvm_state);
     }
 }
 
@@ -89,7 +89,7 @@ static void kvm_msix_update(PCIDevice *dev, int vector,
     }
     if (r > 0) {
         *entry = new_entry;
-        r = kvm_commit_irq_routes();
+        r = kvm_irqchip_commit_routes(kvm_state);
         if (r) {
             fprintf(stderr, "%s: kvm_commit_irq_routes failed: %s\n", __func__,
 		    strerror(-r));
@@ -110,7 +110,7 @@ static int kvm_msix_vector_add(PCIDevice *dev, unsigned vector)
         return r;
     }
 
-    r = kvm_commit_irq_routes();
+    r = kvm_irqchip_commit_routes(kvm_state);
     if (r < 0) {
         fprintf(stderr, "%s: kvm_commit_irq_routes failed: %s\n", __func__, strerror(-r));
         return r;
@@ -121,7 +121,7 @@ static int kvm_msix_vector_add(PCIDevice *dev, unsigned vector)
 static void kvm_msix_vector_del(PCIDevice *dev, unsigned vector)
 {
     kvm_msi_message_del(&dev->msix_irq_entries[vector]);
-    kvm_commit_irq_routes();
+    kvm_irqchip_commit_routes(kvm_state);
 }
 
 /* Add MSI-X capability to the config space for the device. */
diff --git a/hw/pc.c b/hw/pc.c
index 6ece3d5..1f0e2c4 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -1108,7 +1108,7 @@ void pc_basic_device_init(ISABus *isa_bus, qemu_irq *gsi,
 
     register_ioport_write(0xf0, 1, 1, ioportF0_write, NULL);
 
-    if (!no_hpet) {
+    if (!no_hpet && (!kvm_irqchip_in_kernel() || kvm_has_pit_state2())) {
         hpet = sysbus_try_create_simple("hpet", HPET_BASE, NULL);
 
         if (hpet) {
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 234859b..66662cf 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -57,7 +57,6 @@ static const int ide_irq[MAX_IDE_BUS] = { 14, 15 };
 
 const char *global_cpu_model; /* cpu hotadd */
 
-#ifdef UNUSED_UPSTREAM_KVM
 static void kvm_piix3_setup_irq_routing(bool pci_enabled)
 {
 #ifdef CONFIG_KVM
@@ -90,7 +89,6 @@ static void kvm_piix3_setup_irq_routing(bool pci_enabled)
     }
 #endif /* CONFIG_KVM */
 }
-#endif
 
 static void kvm_piix3_gsi_handler(void *opaque, int n, int level)
 {
@@ -194,9 +192,7 @@ static void pc_init1(MemoryRegion *system_memory,
 
     gsi_state = g_malloc0(sizeof(*gsi_state));
     if (kvm_irqchip_in_kernel()) {
-#ifdef UNUSED_UPSTREAM_KVM
         kvm_piix3_setup_irq_routing(pci_enabled);
-#endif
         gsi = qemu_allocate_irqs(kvm_piix3_gsi_handler, gsi_state,
                                  GSI_NUM_PINS);
     } else {
diff --git a/kvm-all.c b/kvm-all.c
index 4bcda06..526bb77 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -82,13 +82,9 @@ struct KVMState
 #ifdef KVM_CAP_IRQ_ROUTING
     struct kvm_irq_routing *irq_routes;
     int nr_allocated_irq_routes;
-#ifdef UNUSED_UPSTREAM_KVM
     uint32_t *used_gsi_bitmap;
     unsigned int max_gsi;
 #endif
-#endif
-    void *used_gsi_bitmap;
-    int max_gsi;
 };
 
 KVMState *kvm_state;
@@ -755,7 +751,6 @@ int kvm_irqchip_set_irq(KVMState *s, int irq, int level)
     return (s->irqchip_inject_ioctl == KVM_IRQ_LINE) ? 1 : event.status;
 }
 
-#ifdef UNUSED_UPSTREAM_KVM
 #ifdef KVM_CAP_IRQ_ROUTING
 static void set_gsi(KVMState *s, unsigned int gsi)
 {
@@ -789,8 +784,8 @@ static void kvm_init_irq_routing(KVMState *s)
     kvm_arch_init_irq_routing(s);
 }
 
-static void kvm_add_routing_entry(KVMState *s,
-                                  struct kvm_irq_routing_entry *entry)
+void kvm_add_routing_entry(KVMState *s,
+                           struct kvm_irq_routing_entry *entry)
 {
     struct kvm_irq_routing_entry *new;
     int n, size;
@@ -840,7 +835,6 @@ static void kvm_init_irq_routing(KVMState *s)
 {
 }
 #endif /* !KVM_CAP_IRQ_ROUTING */
-#endif
 
 static int kvm_irqchip_create(KVMState *s)
 {
diff --git a/kvm-stub.c b/kvm-stub.c
index 3164351..4d247d3 100644
--- a/kvm-stub.c
+++ b/kvm-stub.c
@@ -16,6 +16,8 @@
 #include "gdbstub.h"
 #include "kvm.h"
 
+KVMState *kvm_state;
+
 int kvm_pit_in_kernel(void)
 {
     return 0;
@@ -150,7 +152,7 @@ int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new)
     return -ENOSYS;
 }
 
-int kvm_commit_irq_routes(void)
+int kvm_irqchip_commit_routes(KVMState *s)
 {
     return -ENOSYS;
 }
diff --git a/kvm.h b/kvm.h
index 3baa94c..a580428 100644
--- a/kvm.h
+++ b/kvm.h
@@ -133,9 +133,7 @@ void kvm_arch_reset_vcpu(CPUState *env);
 int kvm_arch_on_sigbus_vcpu(CPUState *env, int code, void *addr);
 int kvm_arch_on_sigbus(int code, void *addr);
 
-#ifdef UNUSED_UPSTREAM_KVM
 void kvm_arch_init_irq_routing(KVMState *s);
-#endif
 
 int kvm_irqchip_set_irq(KVMState *s, int irq, int level);
 
@@ -232,7 +230,9 @@ int kvm_msi_message_add(KVMMsiMessage *msg);
 int kvm_msi_message_del(KVMMsiMessage *msg);
 int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new);
 
-int kvm_commit_irq_routes(void);
+#ifndef NEED_CPU_H
+int kvm_irqchip_commit_routes(KVMState *s);
+#endif
 
 int kvm_set_irq(int irq, int level, int *status);
 
diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index 6fe48a4..e5b94b0 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -158,53 +158,3 @@ int kvm_arch_set_ioport_access(unsigned long start, unsigned long size,
     return 0;
 }
 #endif
-
-/*
- * Setup x86 specific IRQ routing
- */
-int kvm_arch_init_irq_routing(void)
-{
-    int i, r;
-
-    if (kvm_has_gsi_routing()) {
-        kvm_clear_gsi_routes();
-        for (i = 0; i < 8; ++i) {
-            if (i == 2) {
-                continue;
-            }
-            r = kvm_add_irq_route(i, KVM_IRQCHIP_PIC_MASTER, i);
-            if (r < 0) {
-                return r;
-            }
-        }
-        for (i = 8; i < 16; ++i) {
-            r = kvm_add_irq_route(i, KVM_IRQCHIP_PIC_SLAVE, i - 8);
-            if (r < 0) {
-                return r;
-            }
-        }
-        for (i = 0; i < 24; ++i) {
-            if (i == 0) {
-                r = kvm_add_irq_route(i, KVM_IRQCHIP_IOAPIC, 2);
-            } else if (i != 2) {
-                r = kvm_add_irq_route(i, KVM_IRQCHIP_IOAPIC, i);
-            }
-            if (r < 0) {
-                return r;
-            }
-        }
-        kvm_commit_irq_routes();
-
-        if (!kvm_has_pit_state2()) {
-            no_hpet = 1;
-        }
-    } else {
-        /* If kernel can't do irq routing, interrupt source
-         * override 0->2 can not be set up as required by HPET.
-         * so we have to disable it.
-         */
-        no_hpet = 1;
-    }
-
-    return 0;
-}
diff --git a/qemu-kvm.c b/qemu-kvm.c
index b1eee80..6cfe6fe 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -30,17 +30,6 @@
 
 #define ALIGN(x, y) (((x)+(y)-1) & ~((y)-1))
 
-static inline void set_gsi(KVMState *s, unsigned int gsi)
-{
-    uint32_t *bitmap = s->used_gsi_bitmap;
-
-    if (gsi < s->max_gsi) {
-        bitmap[gsi / 32] |= 1U << (gsi % 32);
-    } else {
-        DPRINTF("Invalid GSI %u\n", gsi);
-    }
-}
-
 static inline void clear_gsi(KVMState *s, unsigned int gsi)
 {
     uint32_t *bitmap = s->used_gsi_bitmap;
@@ -52,38 +41,6 @@ static inline void clear_gsi(KVMState *s, unsigned int gsi)
     }
 }
 
-static int kvm_init_irq_routing(KVMState *s)
-{
-#ifdef KVM_CAP_IRQ_ROUTING
-    int r, gsi_count;
-
-    gsi_count = kvm_check_extension(s, KVM_CAP_IRQ_ROUTING);
-    if (gsi_count > 0) {
-        int gsi_bits, i;
-
-        /* Round up so we can search ints using ffs */
-        gsi_bits = ALIGN(gsi_count, 32);
-        s->used_gsi_bitmap = g_malloc0(gsi_bits / 8);
-        s->max_gsi = gsi_bits;
-
-        /* Mark any over-allocated bits as already in use */
-        for (i = gsi_count; i < gsi_bits; i++) {
-            set_gsi(s, i);
-        }
-    }
-
-    s->irq_routes = g_malloc0(sizeof(*s->irq_routes));
-    s->nr_allocated_irq_routes = 0;
-
-    r = kvm_arch_init_irq_routing();
-    if (r < 0) {
-        return r;
-    }
-#endif
-
-    return 0;
-}
-
 int kvm_create_irqchip(KVMState *s)
 {
 #ifdef KVM_CAP_IRQCHIP
@@ -107,10 +64,7 @@ int kvm_create_irqchip(KVMState *s)
 #endif
     kvm_kernel_irqchip = true;
 
-    r = kvm_init_irq_routing(s);
-    if (r < 0) {
-        return r;
-    }
+    kvm_init_irq_routing(s);
 #endif
 
     return 0;
@@ -248,60 +202,6 @@ int kvm_clear_gsi_routes(void)
 #endif
 }
 
-int kvm_add_routing_entry(struct kvm_irq_routing_entry *entry)
-{
-#ifdef KVM_CAP_IRQ_ROUTING
-    KVMState *s = kvm_state;
-    struct kvm_irq_routing *z;
-    struct kvm_irq_routing_entry *new;
-    int n, size;
-
-    if (s->irq_routes->nr == s->nr_allocated_irq_routes) {
-        n = s->nr_allocated_irq_routes * 2;
-        if (n < 64) {
-            n = 64;
-        }
-        size = sizeof(struct kvm_irq_routing);
-        size += n * sizeof(*new);
-        z = realloc(s->irq_routes, size);
-        if (!z) {
-            return -ENOMEM;
-        }
-        s->nr_allocated_irq_routes = n;
-        s->irq_routes = z;
-    }
-    n = s->irq_routes->nr++;
-    new = &s->irq_routes->entries[n];
-    memset(new, 0, sizeof(*new));
-    new->gsi = entry->gsi;
-    new->type = entry->type;
-    new->flags = entry->flags;
-    new->u = entry->u;
-
-    set_gsi(s, entry->gsi);
-
-    return 0;
-#else
-    return -ENOSYS;
-#endif
-}
-
-int kvm_add_irq_route(int gsi, int irqchip, int pin)
-{
-#ifdef KVM_CAP_IRQ_ROUTING
-    struct kvm_irq_routing_entry e;
-
-    e.gsi = gsi;
-    e.type = KVM_IRQ_ROUTING_IRQCHIP;
-    e.flags = 0;
-    e.u.irqchip.irqchip = irqchip;
-    e.u.irqchip.pin = pin;
-    return kvm_add_routing_entry(&e);
-#else
-    return -ENOSYS;
-#endif
-}
-
 int kvm_del_routing_entry(struct kvm_irq_routing_entry *entry)
 {
 #ifdef KVM_CAP_IRQ_ROUTING
@@ -422,18 +322,6 @@ int kvm_del_irq_route(int gsi, int irqchip, int pin)
 #endif
 }
 
-int kvm_commit_irq_routes(void)
-{
-#ifdef KVM_CAP_IRQ_ROUTING
-    KVMState *s = kvm_state;
-
-    s->irq_routes->flags = 0;
-    return kvm_vm_ioctl(s, KVM_SET_GSI_ROUTING, s->irq_routes);
-#else
-    return -ENOSYS;
-#endif
-}
-
 int kvm_get_irq_route_gsi(void)
 {
     KVMState *s = kvm_state;
@@ -477,7 +365,8 @@ int kvm_msi_message_add(KVMMsiMessage *msg)
     msg->gsi = ret;
 
     kvm_msi_routing_entry(&e, msg);
-    return kvm_add_routing_entry(&e);
+    kvm_add_routing_entry(kvm_state, &e);
+    return 0;
 }
 
 int kvm_msi_message_del(KVMMsiMessage *msg)
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 653370e..6235800 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -183,14 +183,6 @@ int kvm_deassign_pci_device(KVMState *s,
 int kvm_clear_gsi_routes(void);
 
 /*!
- * \brief Adds an irq route to the temporary irq routing table
- *
- * Adds an irq route to the temporary irq routing table.  Nothing is
- * committed to the running VM.
- */
-int kvm_add_irq_route(int gsi, int irqchip, int pin);
-
-/*!
  * \brief Removes an irq route from the temporary irq routing table
  *
  * Adds an irq route to the temporary irq routing table.  Nothing is
@@ -199,13 +191,8 @@ int kvm_add_irq_route(int gsi, int irqchip, int pin);
 int kvm_del_irq_route(int gsi, int irqchip, int pin);
 
 struct kvm_irq_routing_entry;
-/*!
- * \brief Adds a routing entry to the temporary irq routing table
- *
- * Adds a filled routing entry to the temporary irq routing table. Nothing is
- * committed to the running VM.
- */
-int kvm_add_routing_entry(struct kvm_irq_routing_entry *entry);
+
+void kvm_add_routing_entry(KVMState *s, struct kvm_irq_routing_entry *entry);
 
 /*!
  * \brief Removes a routing from the temporary irq routing table
@@ -245,8 +232,6 @@ void kvm_hpet_disable_kpit(void);
 
 void kvm_tpr_access_report(CPUState *env, uint64_t rip, int is_write);
 
-int kvm_arch_init_irq_routing(void);
-
 int kvm_add_ioport_region(unsigned long start, unsigned long size,
                           bool is_hot_plug);
 int kvm_remove_ioport_region(unsigned long start, unsigned long size,
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 0954c74..a7d9af9 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -2023,7 +2023,6 @@ bool kvm_arch_stop_on_emulation_error(CPUState *env)
            ((env->segs[R_CS].selector  & 3) != 3);
 }
 
-#ifdef UNUSED_UPSTREAM_KVM
 void kvm_arch_init_irq_routing(KVMState *s)
 {
     if (!kvm_check_extension(s, KVM_CAP_IRQ_ROUTING)) {
@@ -2034,6 +2033,5 @@ void kvm_arch_init_irq_routing(KVMState *s)
         no_hpet = 1;
     }
 }
-#endif
 
 #include "qemu-kvm-x86.c"
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 04/10] qemu-kvm: Use upstream kvm_irqchip_create
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (2 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 03/10] qemu-kvm: Use upstream irq routing services Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 05/10] qemu-kvm: Use upstream kvm-ioapic Jan Kiszka
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Drop kvm_create_irqchip in favor of the equivalent upstream version.
This also allows to drop the kvm_irqchip global variable.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 kvm-all.c  |   15 ---------------
 qemu-kvm.c |   29 -----------------------------
 qemu-kvm.h |    3 ---
 vl.c       |    1 -
 4 files changed, 0 insertions(+), 48 deletions(-)

diff --git a/kvm-all.c b/kvm-all.c
index 526bb77..7fed5c9 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -838,7 +838,6 @@ static void kvm_init_irq_routing(KVMState *s)
 
 static int kvm_irqchip_create(KVMState *s)
 {
-#ifdef UNUSED_UPSTREAM_KVM
     QemuOptsList *list = qemu_find_opts("machine");
     int ret;
 
@@ -862,7 +861,6 @@ static int kvm_irqchip_create(KVMState *s)
     kvm_kernel_irqchip = true;
 
     kvm_init_irq_routing(s);
-#endif
 
     return 0;
 }
@@ -876,7 +874,6 @@ int kvm_init(void)
     const KVMCapabilityInfo *missing_cap;
     int ret;
     int i;
-    QemuOptsList *list;
 
     s = g_malloc0(sizeof(KVMState));
 
@@ -963,13 +960,6 @@ int kvm_init(void)
     s->pit_state2 = kvm_check_extension(s, KVM_CAP_PIT_STATE2);
 #endif
 
-    list = qemu_find_opts("machine");
-    if (!QTAILQ_EMPTY(&list->head) &&
-        !qemu_opt_get_bool(QTAILQ_FIRST(&list->head),
-                           "kernel_irqchip", false)) {
-        kvm_irqchip = 0;
-    }
-
     ret = kvm_arch_init(s);
     if (ret < 0) {
         goto err;
@@ -985,11 +975,6 @@ int kvm_init(void)
 
     s->many_ioeventfds = kvm_check_many_ioeventfds();
 
-    ret = kvm_create_irqchip(s);
-    if (ret < 0) {
-        return ret;
-    }
-
     cpu_interrupt_handler = kvm_handle_interrupt;
 
     return 0;
diff --git a/qemu-kvm.c b/qemu-kvm.c
index 6cfe6fe..6c475dd 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -41,35 +41,6 @@ static inline void clear_gsi(KVMState *s, unsigned int gsi)
     }
 }
 
-int kvm_create_irqchip(KVMState *s)
-{
-#ifdef KVM_CAP_IRQCHIP
-    int r;
-
-    if (!kvm_irqchip || !kvm_check_extension(s, KVM_CAP_IRQCHIP)) {
-        return 0;
-    }
-
-    r = kvm_vm_ioctl(s, KVM_CREATE_IRQCHIP);
-    if (r < 0) {
-        fprintf(stderr, "Create kernel PIC irqchip failed\n");
-        return r;
-    }
-
-    s->irqchip_inject_ioctl = KVM_IRQ_LINE;
-#if defined(KVM_CAP_IRQ_INJECT_STATUS) && defined(KVM_IRQ_LINE_STATUS)
-    if (kvm_check_extension(s, KVM_CAP_IRQ_INJECT_STATUS)) {
-        s->irqchip_inject_ioctl = KVM_IRQ_LINE_STATUS;
-    }
-#endif
-    kvm_kernel_irqchip = true;
-
-    kvm_init_irq_routing(s);
-#endif
-
-    return 0;
-}
-
 #ifdef KVM_CAP_IRQCHIP
 
 int kvm_set_irq(int irq, int level, int *status)
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 6235800..cd5e3cc 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -32,8 +32,6 @@
 
 #include "kvm.h"
 
-int kvm_create_irqchip(KVMState *s);
-
 /*!
  * \brief Dump in kernel IRQCHIP contents
  *
@@ -243,7 +241,6 @@ int kvm_arch_set_ioport_access(unsigned long start, unsigned long size,
 
 int kvm_create_pit(KVMState *s);
 
-extern int kvm_irqchip;
 extern int kvm_pit_reinject;
 extern unsigned int kvm_shadow_memory;
 
diff --git a/vl.c b/vl.c
index 124cff1..ef765a7 100644
--- a/vl.c
+++ b/vl.c
@@ -2246,7 +2246,6 @@ static void free_and_trace(gpointer mem)
 }
 
 #ifdef CONFIG_KVM_OPTIONS
-int kvm_irqchip = 1;
 int kvm_pit_reinject = 1;
 #endif
 
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 05/10] qemu-kvm: Use upstream kvm-ioapic
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (3 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 04/10] qemu-kvm: Use upstream kvm_irqchip_create Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 06/10] qemu-kvm: Use upstream kvm-i8259 Jan Kiszka
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Drop the qemu-kvm version in favor of the equivalent upstream
implementation.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/ioapic.c  |   75 +---------------------------------------------------------
 hw/pc_piix.c |    7 +----
 2 files changed, 2 insertions(+), 80 deletions(-)

diff --git a/hw/ioapic.c b/hw/ioapic.c
index a42cb7a..3fee011 100644
--- a/hw/ioapic.c
+++ b/hw/ioapic.c
@@ -26,8 +26,6 @@
 #include "ioapic.h"
 #include "ioapic_internal.h"
 
-#include "kvm.h"
-
 //#define DEBUG_IOAPIC
 
 #ifdef DEBUG_IOAPIC
@@ -222,75 +220,6 @@ ioapic_mem_write(void *opaque, target_phys_addr_t addr, uint64_t val,
     }
 }
 
-static void kvm_kernel_ioapic_save_to_user(IOAPICCommonState *s)
-{
-#if defined(KVM_CAP_IRQCHIP) && defined(TARGET_I386)
-    struct kvm_irqchip chip;
-    struct kvm_ioapic_state *kioapic;
-    int i;
-
-    chip.chip_id = KVM_IRQCHIP_IOAPIC;
-    kvm_get_irqchip(kvm_state, &chip);
-    kioapic = &chip.chip.ioapic;
-
-    s->id = kioapic->id;
-    s->ioregsel = kioapic->ioregsel;
-    s->irr = kioapic->irr;
-    for (i = 0; i < IOAPIC_NUM_PINS; i++) {
-        s->ioredtbl[i] = kioapic->redirtbl[i].bits;
-    }
-#endif
-}
-
-static void kvm_kernel_ioapic_load_from_user(IOAPICCommonState *s)
-{
-#if defined(KVM_CAP_IRQCHIP) && defined(TARGET_I386)
-    struct kvm_irqchip chip;
-    struct kvm_ioapic_state *kioapic;
-    int i;
-
-    chip.chip_id = KVM_IRQCHIP_IOAPIC;
-    kioapic = &chip.chip.ioapic;
-
-    kioapic->id = s->id;
-    kioapic->ioregsel = s->ioregsel;
-    kioapic->base_address = s->busdev.mmio[0].addr;
-    kioapic->irr = s->irr;
-    for (i = 0; i < IOAPIC_NUM_PINS; i++) {
-        kioapic->redirtbl[i].bits = s->ioredtbl[i];
-    }
-
-    kvm_set_irqchip(kvm_state, &chip);
-#endif
-}
-
-static void kvm_ioapic_pre_save(IOAPICCommonState *s)
-{
-
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_ioapic_save_to_user(s);
-    }
-}
-
-static void kvm_ioapic_post_load(IOAPICCommonState *s)
-{
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_ioapic_load_from_user(s);
-    }
-}
-
-static void ioapic_reset(DeviceState *d)
-{
-    IOAPICCommonState *s = DO_UPCAST(IOAPICCommonState, busdev.qdev, d);
-
-    ioapic_reset_common(d);
-#ifdef KVM_CAP_IRQCHIP
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_ioapic_load_from_user(s);
-    }
-#endif
-}
-
 static const MemoryRegionOps ioapic_io_ops = {
     .read = ioapic_mem_read,
     .write = ioapic_mem_write,
@@ -312,9 +241,7 @@ static void ioapic_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
 
     k->init = ioapic_init;
-    k->pre_save = kvm_ioapic_pre_save;
-    k->post_load = kvm_ioapic_post_load;
-    dc->reset = ioapic_reset;
+    dc->reset = ioapic_reset_common;
 }
 
 static TypeInfo ioapic_info = {
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 66662cf..32acdb2 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -47,8 +47,6 @@
 #  include <xen/hvm/hvm_info_table.h>
 #endif
 
-qemu_irq *ioapic_irq_hack;
-
 #define MAX_IDE_BUS 2
 
 static const int ide_iobase[MAX_IDE_BUS] = { 0x1f0, 0x170 };
@@ -108,12 +106,9 @@ static void ioapic_init(GSIState *gsi_state)
     SysBusDevice *d;
     unsigned int i;
 
-#ifdef UNUSED_UPSTREAM_KVM
     if (kvm_irqchip_in_kernel()) {
         dev = qdev_create(NULL, "kvm-ioapic");
-    } else
-#endif
-    {
+    } else {
         dev = qdev_create(NULL, "ioapic");
     }
     qdev_init_nofail(dev);
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 06/10] qemu-kvm: Use upstream kvm-i8259
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (4 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 05/10] qemu-kvm: Use upstream kvm-ioapic Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 07/10] qemu-kvm: Drop unused kvm_get/set_irqchip Jan Kiszka
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Drop the qemu-kvm version in favor of the equivalent upstream
implementation. This allows to move the i8259 back into the hwlib.

Note that this also drops the testdev hack and restores proper
isa_get_irq. If testdev scripts exist that inject > IRQ15, they need
fixing. Testing for these interrupts on the PIIX3 makes no practical
sense anyway as those lines are unused.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 Makefile.objs   |    2 +-
 Makefile.target |    8 ++--
 hw/i8259.c      |  108 -------------------------------------------------------
 hw/isa-bus.c    |    2 +-
 hw/pc_piix.c    |    5 +--
 5 files changed, 7 insertions(+), 118 deletions(-)

diff --git a/Makefile.objs b/Makefile.objs
index e4e7e95..c33c0f2 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -229,7 +229,7 @@ hw-obj-$(CONFIG_APPLESMC) += applesmc.o
 hw-obj-$(CONFIG_SMARTCARD) += usb-ccid.o ccid-card-passthru.o
 hw-obj-$(CONFIG_SMARTCARD_NSS) += ccid-card-emulated.o
 hw-obj-$(CONFIG_USB_REDIR) += usb-redir.o
-# hw-obj-$(CONFIG_I8259) += i8259_common.o i8259.o
+hw-obj-$(CONFIG_I8259) += i8259_common.o i8259.o
 
 # PPC devices
 hw-obj-$(CONFIG_PREP_PCI) += prep_pci.o
diff --git a/Makefile.target b/Makefile.target
index 7eb07fa..a57411b 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -240,7 +240,7 @@ obj-$(CONFIG_IVSHMEM) += ivshmem.o
 obj-y += device-hotplug.o
 
 # Hardware support
-obj-i386-y += mc146818rtc.o pc.o i8259_common.o i8259.o
+obj-i386-y += mc146818rtc.o pc.o
 obj-i386-y += sga.o apic_common.o apic.o ioapic_common.o ioapic.o piix_pci.o
 obj-i386-y += vmport.o
 obj-i386-y += pci-hotplug.o smbios.o wdt_ib700.o
@@ -259,7 +259,7 @@ obj-i386-$(CONFIG_KVM_DEVICE_ASSIGNMENT) += device-assignment.o
 # shared objects
 obj-ppc-y = ppc.o ppc_booke.o
 # PREP target
-obj-ppc-y += mc146818rtc.o i8259_common.o i8259.o
+obj-ppc-y += mc146818rtc.o
 obj-ppc-y += ppc_prep.o
 # OldWorld PowerMac
 obj-ppc-y += ppc_oldworld.o
@@ -313,7 +313,7 @@ obj-mips-y = mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
 obj-mips-y += pcspk.o i8254.o
 obj-mips-y += acpi.o acpi_piix4.o
 obj-mips-y += mips_addr.o mips_timer.o mips_int.o
-obj-mips-y += gt64xxx.o mc146818rtc.o i8259_common.o i8259.o
+obj-mips-y += gt64xxx.o mc146818rtc.o
 obj-mips-$(CONFIG_FULONG) += bonito.o vt82c686.o mips_fulong2e.o
 
 obj-microblaze-y = petalogix_s3adsp1800_mmu.o
@@ -395,7 +395,7 @@ obj-m68k-y += m68k-semi.o dummy_m68k.o
 
 obj-s390x-y = s390-virtio-bus.o s390-virtio.o
 
-obj-alpha-y = mc146818rtc.o i8259_common.o i8259.o
+obj-alpha-y = mc146818rtc.o
 obj-alpha-y += alpha_pci.o alpha_dp264.o alpha_typhoon.o
 
 obj-xtensa-y += xtensa_pic.o
diff --git a/hw/i8259.c b/hw/i8259.c
index 6bf9fe3..53daf78 100644
--- a/hw/i8259.c
+++ b/hw/i8259.c
@@ -28,11 +28,6 @@
 #include "qemu-timer.h"
 #include "i8259_internal.h"
 
-#include "kvm.h"
-#include "apic_internal.h"
-
-static void kvm_i8259_set_irq(void *opaque, int irq, int level);
-
 /* debug PIC */
 //#define DEBUG_PIC
 
@@ -226,17 +221,9 @@ int pic_read_irq(DeviceState *d)
     return intno;
 }
 
-static int kvm_kernel_pic_load_from_user(PICCommonState *s);
-
 static void pic_init_reset(PICCommonState *s)
 {
     pic_reset_common(s);
-
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_pic_load_from_user(s);
-        return;
-    }
-
     pic_update_irq(s);
 }
 
@@ -393,22 +380,6 @@ static uint64_t elcr_ioport_read(void *opaque, target_phys_addr_t addr,
     return s->elcr;
 }
 
-static void kvm_kernel_pic_save_to_user(PICCommonState *s);
-
-static void kvm_pic_pre_save(PICCommonState *s)
-{
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_pic_save_to_user(s);
-    }
-}
-
-static void kvm_pic_post_load(PICCommonState *s)
-{
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_pic_load_from_user(s);
-    }
-}
-
 static const MemoryRegionOps pic_base_ioport_ops = {
     .read = pic_ioport_read,
     .write = pic_ioport_write,
@@ -498,10 +469,6 @@ qemu_irq *i8259_init(ISABus *bus, qemu_irq parent_irq)
 
     slave_pic = DO_UPCAST(PICCommonState, dev, dev);
 
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        irq_set = qemu_allocate_irqs(kvm_i8259_set_irq, NULL, 24);
-    }
-
     return irq_set;
 }
 
@@ -511,8 +478,6 @@ static void i8259_class_init(ObjectClass *klass, void *data)
     DeviceClass *dc = DEVICE_CLASS(klass);
 
     k->init = pic_init;
-    k->pre_save  = kvm_pic_pre_save;
-    k->post_load = kvm_pic_post_load;
     dc->reset = pic_reset;
 }
 
@@ -528,77 +493,4 @@ static void pic_register_types(void)
     type_register_static(&i8259_info);
 }
 
-static void kvm_kernel_pic_save_to_user(PICCommonState *s)
-{
-#ifdef KVM_CAP_IRQCHIP
-    struct kvm_irqchip chip;
-    struct kvm_pic_state *kpic;
-
-    chip.chip_id = s->master ?
-                   KVM_IRQCHIP_PIC_MASTER :
-                   KVM_IRQCHIP_PIC_SLAVE;
-    kvm_get_irqchip(kvm_state, &chip);
-    kpic = &chip.chip.pic;
-
-    s->last_irr = kpic->last_irr;
-    s->irr = kpic->irr;
-    s->imr = kpic->imr;
-    s->isr = kpic->isr;
-    s->priority_add = kpic->priority_add;
-    s->irq_base = kpic->irq_base;
-    s->read_reg_select = kpic->read_reg_select;
-    s->poll = kpic->poll;
-    s->special_mask = kpic->special_mask;
-    s->init_state = kpic->init_state;
-    s->auto_eoi = kpic->auto_eoi;
-    s->rotate_on_auto_eoi = kpic->rotate_on_auto_eoi;
-    s->special_fully_nested_mode = kpic->special_fully_nested_mode;
-    s->init4 = kpic->init4;
-    s->elcr = kpic->elcr;
-    s->elcr_mask = kpic->elcr_mask;
-#endif
-}
-
-static int kvm_kernel_pic_load_from_user(PICCommonState *s)
-{
-#ifdef KVM_CAP_IRQCHIP
-    struct kvm_irqchip chip;
-    struct kvm_pic_state *kpic;
-
-    chip.chip_id = s->master ?
-                   KVM_IRQCHIP_PIC_MASTER :
-                   KVM_IRQCHIP_PIC_SLAVE;
-    kpic = &chip.chip.pic;
-
-    kpic->last_irr = s->last_irr;
-    kpic->irr = s->irr;
-    kpic->imr = s->imr;
-    kpic->isr = s->isr;
-    kpic->priority_add = s->priority_add;
-    kpic->irq_base = s->irq_base;
-    kpic->read_reg_select = s->read_reg_select;
-    kpic->poll = s->poll;
-    kpic->special_mask = s->special_mask;
-    kpic->init_state = s->init_state;
-    kpic->auto_eoi = s->auto_eoi;
-    kpic->rotate_on_auto_eoi = s->rotate_on_auto_eoi;
-    kpic->special_fully_nested_mode = s->special_fully_nested_mode;
-    kpic->init4 = s->init4;
-    kpic->elcr = s->elcr;
-    kpic->elcr_mask = s->elcr_mask;
-
-    kvm_set_irqchip(kvm_state, &chip);
-#endif
-    return 0;
-}
-
-static void kvm_i8259_set_irq(void *opaque, int irq, int level)
-{
-    int pic_ret;
-    if (kvm_set_irq(irq, level, &pic_ret)) {
-        apic_report_irq_delivered(pic_ret);
-        return;
-    }
-}
-
 type_init(pic_register_types)
diff --git a/hw/isa-bus.c b/hw/isa-bus.c
index 070c4ab..5a43f03 100644
--- a/hw/isa-bus.c
+++ b/hw/isa-bus.c
@@ -68,7 +68,7 @@ void isa_bus_irqs(ISABus *bus, qemu_irq *irqs)
 qemu_irq isa_get_irq(ISADevice *dev, int isairq)
 {
     assert(!dev || DO_UPCAST(ISABus, qbus, dev->qdev.parent_bus) == isabus);
-    if (isairq < 0 || isairq > 23) {
+    if (isairq < 0 || isairq > 15) {
         hw_error("isa irq %d invalid", isairq);
     }
     return isabus->irqs[isairq];
diff --git a/hw/pc_piix.c b/hw/pc_piix.c
index 32acdb2..3f3984c 100644
--- a/hw/pc_piix.c
+++ b/hw/pc_piix.c
@@ -212,12 +212,9 @@ static void pc_init1(MemoryRegion *system_memory,
     }
     isa_bus_irqs(isa_bus, gsi);
 
-#ifdef UNUSED_UPSTREAM_KVM
     if (kvm_irqchip_in_kernel()) {
         i8259 = kvm_i8259_init(isa_bus);
-    } else
-#endif
-    if (xen_enabled()) {
+    } else if (xen_enabled()) {
         i8259 = xen_interrupt_controller_init();
     } else {
         cpu_irq = pc_allocate_cpu_irq();
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 07/10] qemu-kvm: Drop unused kvm_get/set_irqchip
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (5 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 06/10] qemu-kvm: Use upstream kvm-i8259 Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 08/10] qemu-kvm: Use upstream kvm_irqchip_set_irq instead of kvm_set_irq Jan Kiszka
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

No users remaining.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 qemu-kvm.c |   28 ----------------------------
 qemu-kvm.h |   23 -----------------------
 2 files changed, 0 insertions(+), 51 deletions(-)

diff --git a/qemu-kvm.c b/qemu-kvm.c
index 6c475dd..b414a41 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -71,34 +71,6 @@ int kvm_set_irq(int irq, int level, int *status)
     return 1;
 }
 
-int kvm_get_irqchip(KVMState *s, struct kvm_irqchip *chip)
-{
-    int r;
-
-    if (!kvm_irqchip_in_kernel()) {
-        return 0;
-    }
-    r = kvm_vm_ioctl(s, KVM_GET_IRQCHIP, chip);
-    if (r < 0) {
-        perror("kvm_get_irqchip\n");
-    }
-    return r;
-}
-
-int kvm_set_irqchip(KVMState *s, struct kvm_irqchip *chip)
-{
-    int r;
-
-    if (!kvm_irqchip_in_kernel()) {
-        return 0;
-    }
-    r = kvm_vm_ioctl(s, KVM_SET_IRQCHIP, chip);
-    if (r < 0) {
-        perror("kvm_set_irqchip\n");
-    }
-    return r;
-}
-
 #endif
 
 #ifdef KVM_CAP_DEVICE_ASSIGNMENT
diff --git a/qemu-kvm.h b/qemu-kvm.h
index cd5e3cc..433e2fe 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -32,29 +32,6 @@
 
 #include "kvm.h"
 
-/*!
- * \brief Dump in kernel IRQCHIP contents
- *
- * Dump one of the in kernel irq chip devices, including PIC (master/slave)
- * and IOAPIC into a kvm_irqchip structure
- *
- * \param kvm Pointer to the current kvm_context
- * \param chip The irq chip device to be dumped
- */
-int kvm_get_irqchip(KVMState *s, struct kvm_irqchip *chip);
-
-/*!
- * \brief Set in kernel IRQCHIP contents
- *
- * Write one of the in kernel irq chip devices, including PIC (master/slave)
- * and IOAPIC
- *
- *
- * \param kvm Pointer to the current kvm_context
- * \param chip THe irq chip device to be written
- */
-int kvm_set_irqchip(KVMState *s, struct kvm_irqchip *chip);
-
 #if defined(__i386__) || defined(__x86_64__)
 /*!
  * \brief Get in kernel local APIC for vcpu
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 08/10] qemu-kvm: Use upstream kvm_irqchip_set_irq instead of kvm_set_irq
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (6 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 07/10] qemu-kvm: Drop unused kvm_get/set_irqchip Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 09/10] qemu-kvm: Use upstream kvm-apic Jan Kiszka
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Functions are equivalent, let's switch.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/msi.c   |    2 +-
 hw/msix.c  |    2 +-
 kvm-stub.c |    2 +-
 kvm.h      |    3 +--
 qemu-kvm.c |   32 --------------------------------
 5 files changed, 4 insertions(+), 37 deletions(-)

diff --git a/hw/msi.c b/hw/msi.c
index 3e623c2..7bb3e2f 100644
--- a/hw/msi.c
+++ b/hw/msi.c
@@ -350,7 +350,7 @@ void msi_notify(PCIDevice *dev, unsigned int vector)
     }
 
     if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_set_irq(dev->msi_irq_entries[vector].gsi, 1, NULL);
+        kvm_irqchip_set_irq(kvm_state, dev->msi_irq_entries[vector].gsi, 1);
         return;
     }
 
diff --git a/hw/msix.c b/hw/msix.c
index 55ddbf4..7955221 100644
--- a/hw/msix.c
+++ b/hw/msix.c
@@ -494,7 +494,7 @@ void msix_notify(PCIDevice *dev, unsigned vector)
     }
 
     if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_set_irq(dev->msix_irq_entries[vector].gsi, 1, NULL);
+        kvm_irqchip_set_irq(kvm_state, dev->msix_irq_entries[vector].gsi, 1);
         return;
     }
 
diff --git a/kvm-stub.c b/kvm-stub.c
index 4d247d3..0d5d35d 100644
--- a/kvm-stub.c
+++ b/kvm-stub.c
@@ -157,7 +157,7 @@ int kvm_irqchip_commit_routes(KVMState *s)
     return -ENOSYS;
 }
 
-int kvm_set_irq(int irq, int level, int *status)
+int kvm_irqchip_set_irq(KVMState *s, int irq, int level)
 {
     assert(0);
     return -ENOSYS;
diff --git a/kvm.h b/kvm.h
index a580428..f8aebbc 100644
--- a/kvm.h
+++ b/kvm.h
@@ -231,11 +231,10 @@ int kvm_msi_message_del(KVMMsiMessage *msg);
 int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new);
 
 #ifndef NEED_CPU_H
+int kvm_irqchip_set_irq(KVMState *s, int irq, int level);
 int kvm_irqchip_commit_routes(KVMState *s);
 #endif
 
-int kvm_set_irq(int irq, int level, int *status);
-
 #ifdef NEED_CPU_H
 #include "qemu-kvm.h"
 #endif
diff --git a/qemu-kvm.c b/qemu-kvm.c
index b414a41..09a35f0 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -41,38 +41,6 @@ static inline void clear_gsi(KVMState *s, unsigned int gsi)
     }
 }
 
-#ifdef KVM_CAP_IRQCHIP
-
-int kvm_set_irq(int irq, int level, int *status)
-{
-    struct kvm_irq_level event;
-    int r;
-
-    if (!kvm_irqchip_in_kernel()) {
-        return 0;
-    }
-    event.level = level;
-    event.irq = irq;
-    r = kvm_vm_ioctl(kvm_state, kvm_state->irqchip_inject_ioctl,
-                     &event);
-    if (r < 0) {
-        perror("kvm_set_irq");
-    }
-
-    if (status) {
-#ifdef KVM_CAP_IRQ_INJECT_STATUS
-        *status = (kvm_state->irqchip_inject_ioctl == KVM_IRQ_LINE) ?
-            1 : event.status;
-#else
-        *status = 1;
-#endif
-    }
-
-    return 1;
-}
-
-#endif
-
 #ifdef KVM_CAP_DEVICE_ASSIGNMENT
 int kvm_assign_pci_device(KVMState *s,
                           struct kvm_assigned_pci_dev *assigned_dev)
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 09/10] qemu-kvm: Use upstream kvm-apic
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (7 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 08/10] qemu-kvm: Use upstream kvm_irqchip_set_irq instead of kvm_set_irq Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-02  9:30 ` [PATCH v3 10/10] qemu-kvm: Remove some spurious whitespace diffs to upstream Jan Kiszka
  2012-03-07 10:30 ` [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Avi Kivity
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Drop the qemu-kvm version in favor of the equivalent upstream
implementation.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/apic.c         |  151 +---------------------------------------------------
 hw/pc.c           |    5 +--
 qemu-kvm-x86.c    |   31 -----------
 qemu-kvm.h        |   25 ---------
 target-i386/kvm.c |    8 ---
 5 files changed, 4 insertions(+), 216 deletions(-)

diff --git a/hw/apic.c b/hw/apic.c
index 4eb0019..ff9d24e 100644
--- a/hw/apic.c
+++ b/hw/apic.c
@@ -22,7 +22,6 @@
 #include "host-utils.h"
 #include "trace.h"
 #include "pc.h"
-#include "kvm.h"
 
 #define MAX_APIC_WORDS 8
 
@@ -133,35 +132,9 @@ void apic_deliver_pic_intr(DeviceState *d, int level)
     }
 }
 
-static inline uint32_t kapic_reg(struct kvm_lapic_state *kapic, int reg_id);
-
-static void kvm_irqchip_deliver_nmi(void *p)
-{
-    APICCommonState *s = p;
-    struct kvm_lapic_state klapic;
-    uint32_t lvt;
-
-    kvm_get_lapic(s->cpu_env, &klapic);
-    lvt = kapic_reg(&klapic, 0x32 + APIC_LVT_LINT1);
-
-    if (lvt & APIC_LVT_MASKED) {
-        return;
-    }
-
-    if (((lvt >> 8) & 7) != APIC_DM_NMI) {
-        return;
-    }
-
-    kvm_vcpu_ioctl(s->cpu_env, KVM_NMI);
-}
-
 static void apic_external_nmi(APICCommonState *s)
 {
-    if (kvm_irqchip_in_kernel()) {
-        run_on_cpu(s->cpu_env, kvm_irqchip_deliver_nmi, s);
-    } else {
-        apic_local_deliver(s, APIC_LVT_LINT1);
-    }
+    apic_local_deliver(s, APIC_LVT_LINT1);
 }
 
 #define foreach_apic(apic, deliver_bitmask, code) \
@@ -254,11 +227,8 @@ void apic_deliver_irq(uint8_t dest, uint8_t dest_mode, uint8_t delivery_mode,
 
 static void apic_set_base(APICCommonState *s, uint64_t val)
 {
-    if (kvm_enabled() && kvm_irqchip_in_kernel())
-        s->apicbase = val;
-    else
-        s->apicbase = (val & 0xfffff000) |
-            (s->apicbase & (MSR_IA32_APICBASE_BSP | MSR_IA32_APICBASE_ENABLE));
+    s->apicbase = (val & 0xfffff000) |
+        (s->apicbase & (MSR_IA32_APICBASE_BSP | MSR_IA32_APICBASE_ENABLE));
     /* if disabled, cannot be enabled again */
     if (!(val & MSR_IA32_APICBASE_ENABLE)) {
         s->apicbase &= ~MSR_IA32_APICBASE_ENABLE;
@@ -270,9 +240,6 @@ static void apic_set_base(APICCommonState *s, uint64_t val)
 static void apic_set_tpr(APICCommonState *s, uint8_t val)
 {
     s->tpr = (val & 0x0f) << 4;
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        return;
-    }
     apic_update_irq(s);
 }
 
@@ -770,120 +737,8 @@ static void apic_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
     }
 }
 
-#ifdef KVM_CAP_IRQCHIP
-
-static inline uint32_t kapic_reg(struct kvm_lapic_state *kapic, int reg_id)
-{
-    return *((uint32_t *) (kapic->regs + (reg_id << 4)));
-}
-
-static inline void kapic_set_reg(struct kvm_lapic_state *kapic,
-                                 int reg_id, uint32_t val)
-{
-    *((uint32_t *) (kapic->regs + (reg_id << 4))) = val;
-}
-
-static void kvm_kernel_lapic_save_to_user(APICCommonState *s)
-{
-    struct kvm_lapic_state apic;
-    struct kvm_lapic_state *kapic = &apic;
-    int i, v;
-
-    kvm_get_lapic(s->cpu_env, kapic);
-
-    s->id = kapic_reg(kapic, 0x2) >> 24;
-    s->tpr = kapic_reg(kapic, 0x8);
-    s->arb_id = kapic_reg(kapic, 0x9);
-    s->log_dest = kapic_reg(kapic, 0xd) >> 24;
-    s->dest_mode = kapic_reg(kapic, 0xe) >> 28;
-    s->spurious_vec = kapic_reg(kapic, 0xf);
-    for (i = 0; i < 8; i++) {
-        s->isr[i] = kapic_reg(kapic, 0x10 + i);
-        s->tmr[i] = kapic_reg(kapic, 0x18 + i);
-        s->irr[i] = kapic_reg(kapic, 0x20 + i);
-    }
-    s->esr = kapic_reg(kapic, 0x28);
-    s->icr[0] = kapic_reg(kapic, 0x30);
-    s->icr[1] = kapic_reg(kapic, 0x31);
-    for (i = 0; i < APIC_LVT_NB; i++)
-	s->lvt[i] = kapic_reg(kapic, 0x32 + i);
-    s->initial_count = kapic_reg(kapic, 0x38);
-    s->divide_conf = kapic_reg(kapic, 0x3e);
-
-    v = (s->divide_conf & 3) | ((s->divide_conf >> 1) & 4);
-    s->count_shift = (v + 1) & 7;
-
-    s->initial_count_load_time = qemu_get_clock_ns(vm_clock);
-    apic_next_timer(s, s->initial_count_load_time);
-}
-
-static void kvm_kernel_lapic_load_from_user(APICCommonState *s)
-{
-    struct kvm_lapic_state apic;
-    struct kvm_lapic_state *klapic = &apic;
-    int i;
-
-    memset(klapic, 0, sizeof apic);
-    kapic_set_reg(klapic, 0x2, s->id << 24);
-    kapic_set_reg(klapic, 0x8, s->tpr);
-    kapic_set_reg(klapic, 0xd, s->log_dest << 24);
-    kapic_set_reg(klapic, 0xe, s->dest_mode << 28 | 0x0fffffff);
-    kapic_set_reg(klapic, 0xf, s->spurious_vec);
-    for (i = 0; i < 8; i++) {
-        kapic_set_reg(klapic, 0x10 + i, s->isr[i]);
-        kapic_set_reg(klapic, 0x18 + i, s->tmr[i]);
-        kapic_set_reg(klapic, 0x20 + i, s->irr[i]);
-    }
-    kapic_set_reg(klapic, 0x28, s->esr);
-    kapic_set_reg(klapic, 0x30, s->icr[0]);
-    kapic_set_reg(klapic, 0x31, s->icr[1]);
-    for (i = 0; i < APIC_LVT_NB; i++)
-        kapic_set_reg(klapic, 0x32 + i, s->lvt[i]);
-    kapic_set_reg(klapic, 0x38, s->initial_count);
-    kapic_set_reg(klapic, 0x3e, s->divide_conf);
-
-    kvm_set_lapic(s->cpu_env, klapic);
-}
-
-#endif
-
-void kvm_load_lapic(CPUState *env)
-{
-#ifdef KVM_CAP_IRQCHIP
-    APICCommonState *s =
-        DO_UPCAST(APICCommonState, busdev.qdev, env->apic_state);
-
-    if (!s) {
-        return;
-    }
-
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_lapic_load_from_user(s);
-    }
-#endif
-}
-
-void kvm_save_lapic(CPUState *env)
-{
-#ifdef KVM_CAP_IRQCHIP
-    APICCommonState *s =
-        DO_UPCAST(APICCommonState, busdev.qdev, env->apic_state);
-
-    if (!s) {
-        return;
-    }
-
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        kvm_kernel_lapic_save_to_user(s);
-    }
-#endif
-}
-
 static void apic_post_load(APICCommonState *s)
 {
-    if (kvm_enabled() && kvm_irqchip_in_kernel()) {
-        return;
-    }
     if (s->timer_expiry != -1) {
         qemu_mod_timer(s->timer, s->timer_expiry);
     } else {
diff --git a/hw/pc.c b/hw/pc.c
index 1f0e2c4..b6fdddf 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -890,12 +890,9 @@ static DeviceState *apic_init(void *env, uint8_t apic_id)
     DeviceState *dev;
     static int apic_mapped;
 
-#ifdef UNUSED_UPSTREAM_KVM
     if (kvm_irqchip_in_kernel()) {
         dev = qdev_create(NULL, "kvm-apic");
-    } else
-#endif
-    {
+    } else {
         dev = qdev_create(NULL, "apic");
     }
     qdev_prop_set_uint8(dev, "id", apic_id);
diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index e5b94b0..2dad5af 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -64,37 +64,6 @@ int kvm_enable_vapic(CPUState *env, uint64_t vapic)
     return kvm_vcpu_ioctl(env, KVM_SET_VAPIC_ADDR, &va);
 }
 
-int kvm_get_lapic(CPUState *env, struct kvm_lapic_state *s)
-{
-    int r = 0;
-
-    if (!kvm_irqchip_in_kernel()) {
-        return r;
-    }
-
-    r = kvm_vcpu_ioctl(env, KVM_GET_LAPIC, s);
-    if (r < 0) {
-        fprintf(stderr, "KVM_GET_LAPIC failed\n");
-    }
-    return r;
-}
-
-int kvm_set_lapic(CPUState *env, struct kvm_lapic_state *s)
-{
-    int r = 0;
-
-    if (!kvm_irqchip_in_kernel()) {
-        return 0;
-    }
-
-    r = kvm_vcpu_ioctl(env, KVM_SET_LAPIC, s);
-
-    if (r < 0) {
-        fprintf(stderr, "KVM_SET_LAPIC failed\n");
-    }
-    return r;
-}
-
 int kvm_get_pit(KVMState *s, struct kvm_pit_state *pit_state)
 {
     if (!kvm_irqchip_in_kernel()) {
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 433e2fe..3c4f023 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -34,28 +34,6 @@
 
 #if defined(__i386__) || defined(__x86_64__)
 /*!
- * \brief Get in kernel local APIC for vcpu
- *
- * Save the local apic state including the timer of a virtual CPU
- *
- * \param kvm Pointer to the current kvm_context
- * \param vcpu Which virtual CPU should be accessed
- * \param s Local apic state of the specific virtual CPU
- */
-int kvm_get_lapic(CPUState *env, struct kvm_lapic_state *s);
-
-/*!
- * \brief Set in kernel local APIC for vcpu
- *
- * Restore the local apic state including the timer of a virtual CPU
- *
- * \param kvm Pointer to the current kvm_context
- * \param vcpu Which virtual CPU should be accessed
- * \param s Local apic state of the specific virtual CPU
- */
-int kvm_set_lapic(CPUState *env, struct kvm_lapic_state *s);
-
-/*!
  * \brief Get in kernel PIT of the virtual domain
  *
  * Save the PIT state.
@@ -199,9 +177,6 @@ struct kvm_pit_state {
 
 #endif                          /* !CONFIG_KVM */
 
-void kvm_save_lapic(CPUState *env);
-void kvm_load_lapic(CPUState *env);
-
 void kvm_hpet_enable_kpit(void);
 void kvm_hpet_disable_kpit(void);
 
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index a7d9af9..864ed5a 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -1370,7 +1370,6 @@ static int kvm_get_mp_state(CPUState *env)
 
 static int kvm_get_apic(CPUState *env)
 {
-#ifdef UNUSED_UPSTREAM_KVM
     DeviceState *apic = env->apic_state;
     struct kvm_lapic_state kapic;
     int ret;
@@ -1383,15 +1382,11 @@ static int kvm_get_apic(CPUState *env)
 
         kvm_get_apic_state(apic, &kapic);
     }
-#else
-    kvm_save_lapic(env);
-#endif
     return 0;
 }
 
 static int kvm_put_apic(CPUState *env)
 {
-#ifdef UNUSED_UPSTREAM_KVM
     DeviceState *apic = env->apic_state;
     struct kvm_lapic_state kapic;
 
@@ -1400,9 +1395,6 @@ static int kvm_put_apic(CPUState *env)
 
         return kvm_vcpu_ioctl(env, KVM_SET_LAPIC, &kapic);
     }
-#else
-    kvm_load_lapic(env);
-#endif
     return 0;
 }
 
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 10/10] qemu-kvm: Remove some spurious whitespace diffs to upstream
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (8 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 09/10] qemu-kvm: Use upstream kvm-apic Jan Kiszka
@ 2012-03-02  9:30 ` Jan Kiszka
  2012-03-07 10:30 ` [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Avi Kivity
  10 siblings, 0 replies; 12+ messages in thread
From: Jan Kiszka @ 2012-03-02  9:30 UTC (permalink / raw)
  To: Avi Kivity, Marcelo Tosatti; +Cc: kvm

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 hw/i8254.c        |    1 -
 kvm.h             |    1 +
 target-i386/kvm.c |    1 -
 3 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/hw/i8254.c b/hw/i8254.c
index 668a217..33d94e1 100644
--- a/hw/i8254.c
+++ b/hw/i8254.c
@@ -459,7 +459,6 @@ static int pit_load_old(QEMUFile *f, void *opaque, int version_id)
             qemu_get_timer(f, s->irq_timer);
         }
     }
-
     return 0;
 }
 
diff --git a/kvm.h b/kvm.h
index f8aebbc..43d4c68 100644
--- a/kvm.h
+++ b/kvm.h
@@ -205,6 +205,7 @@ static inline void cpu_synchronize_post_init(CPUState *env)
     }
 }
 
+
 #if !defined(CONFIG_USER_ONLY)
 int kvm_physical_memory_addr_from_host(KVMState *s, void *ram_addr,
                                        target_phys_addr_t *phys_addr);
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 864ed5a..9fca9b9 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -774,7 +774,6 @@ static void get_seg(SegmentCache *lhs, const struct kvm_segment *rhs)
                  (rhs->avl * DESC_AVL_MASK);
 }
 
-
 static void kvm_getput_reg(__u64 *kvm_reg, target_ulong *qemu_reg, int set)
 {
     if (set) {
-- 
1.7.3.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services
  2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
                   ` (9 preceding siblings ...)
  2012-03-02  9:30 ` [PATCH v3 10/10] qemu-kvm: Remove some spurious whitespace diffs to upstream Jan Kiszka
@ 2012-03-07 10:30 ` Avi Kivity
  10 siblings, 0 replies; 12+ messages in thread
From: Avi Kivity @ 2012-03-07 10:30 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: Marcelo Tosatti, kvm

On 03/02/2012 11:30 AM, Jan Kiszka wrote:
> Now that upstream has basic irqchip support, we can make use of it for
> qemu-kvm as well, removing another 700 lines of code here.
>
>

Thanks, applied.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-03-07 10:30 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-02  9:30 [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 01/10] qemu-kvm: Move kvm_create_pit out of arch init code Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 02/10] qemu-kvm: Use machine options to configure qemu-kvm defaults Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 03/10] qemu-kvm: Use upstream irq routing services Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 04/10] qemu-kvm: Use upstream kvm_irqchip_create Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 05/10] qemu-kvm: Use upstream kvm-ioapic Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 06/10] qemu-kvm: Use upstream kvm-i8259 Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 07/10] qemu-kvm: Drop unused kvm_get/set_irqchip Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 08/10] qemu-kvm: Use upstream kvm_irqchip_set_irq instead of kvm_set_irq Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 09/10] qemu-kvm: Use upstream kvm-apic Jan Kiszka
2012-03-02  9:30 ` [PATCH v3 10/10] qemu-kvm: Remove some spurious whitespace diffs to upstream Jan Kiszka
2012-03-07 10:30 ` [PATCH v3 00/10] qemu-kvm: Switch to upstream irqchip services Avi Kivity

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.