qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: qemu-devel@nongnu.org
Cc: Cornelia Huck <cornelia.huck@de.ibm.com>,
	borntraeger@de.ibm.com, jfrei@linux.vnet.ibm.com, agraf@suse.de
Subject: [Qemu-devel] [PATCH 10/10] s390x/kvm: inject via flic
Date: Tue,  3 Jun 2014 16:08:05 +0200	[thread overview]
Message-ID: <1401804485-14801-11-git-send-email-cornelia.huck@de.ibm.com> (raw)
In-Reply-To: <1401804485-14801-1-git-send-email-cornelia.huck@de.ibm.com>

Try to inject floating interrupts via the flic if it is available.
This allows us to inject the full range of floating interrupts.

Reviewed-by: Jens Freimann <jfrei@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/intc/s390_flic_kvm.c |   10 ++++++++++
 target-s390x/cpu.h      |    1 +
 target-s390x/kvm.c      |   19 ++++++++++++++++++-
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
index a734094..b471e7a 100644
--- a/hw/intc/s390_flic_kvm.c
+++ b/hw/intc/s390_flic_kvm.c
@@ -117,6 +117,16 @@ static int flic_enqueue_irqs(void *buf, uint64_t len,
     return rc ? -errno : 0;
 }
 
+int kvm_s390_inject_flic(struct kvm_s390_irq *irq)
+{
+    static KVMS390FLICState *flic;
+
+    if (unlikely(!flic)) {
+        flic = KVM_S390_FLIC(s390_get_flic());
+    }
+    return flic_enqueue_irqs(irq, sizeof(*irq), flic);
+}
+
 /**
  * __get_all_irqs - store all pending irqs in buffer
  * @flic: pointer to flic device state
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index 9982c35..b13761d 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -365,6 +365,7 @@ void kvm_s390_virtio_irq(int config_change, uint64_t token);
 void kvm_s390_service_interrupt(uint32_t parm);
 void kvm_s390_vcpu_interrupt(S390CPU *cpu, struct kvm_s390_irq *irq);
 void kvm_s390_floating_interrupt(struct kvm_s390_irq *irq);
+int kvm_s390_inject_flic(struct kvm_s390_irq *irq);
 #else
 static inline void kvm_s390_reset_vcpu(S390CPU *cpu)
 {
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index a2133ff..a1a4cc2 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -623,7 +623,7 @@ void kvm_s390_vcpu_interrupt(S390CPU *cpu, struct kvm_s390_irq *irq)
     }
 }
 
-void kvm_s390_floating_interrupt(struct kvm_s390_irq *irq)
+static void __kvm_s390_floating_interrupt(struct kvm_s390_irq *irq)
 {
     struct kvm_s390_interrupt kvmint = {};
     int r;
@@ -641,6 +641,23 @@ void kvm_s390_floating_interrupt(struct kvm_s390_irq *irq)
     }
 }
 
+void kvm_s390_floating_interrupt(struct kvm_s390_irq *irq)
+{
+    static bool use_flic = true;
+    int r;
+
+    if (use_flic) {
+        r = kvm_s390_inject_flic(irq);
+        if (r == -ENOSYS) {
+            use_flic = false;
+        }
+        if (!r) {
+            return;
+        }
+    }
+    __kvm_s390_floating_interrupt(irq);
+}
+
 void kvm_s390_virtio_irq(int config_change, uint64_t token)
 {
     struct kvm_s390_irq irq = {
-- 
1.7.9.5

      parent reply	other threads:[~2014-06-03 14:08 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-03 14:07 [Qemu-devel] [PATCH 00/10] pending s390 patches Cornelia Huck
2014-06-03 14:07 ` [Qemu-devel] [PATCH 01/10] s390x/css: handle emw correctly for tsch Cornelia Huck
2014-06-03 14:07 ` [Qemu-devel] [PATCH 02/10] s390x/kvm: make flic play well with old kernels Cornelia Huck
2014-06-03 14:07 ` [Qemu-devel] [PATCH 03/10] s390x/kvm: enable/reset cmma via vm attributes Cornelia Huck
2014-06-03 14:07 ` [Qemu-devel] [PATCH 04/10] s390x/kvm: Log unmanageable external interruptions Cornelia Huck
2014-06-03 14:08 ` [Qemu-devel] [PATCH 05/10] s390x/kvm: Log unmanageable program interruptions Cornelia Huck
2014-06-03 14:08 ` [Qemu-devel] [PATCH 06/10] s390/virtio-ccw: migration support Cornelia Huck
2014-06-03 14:08 ` [Qemu-devel] [PATCH 07/10] s390x: consolidate floating interrupts Cornelia Huck
2014-06-03 14:08 ` [Qemu-devel] [PATCH 08/10] s390x/kvm: add alternative injection interface Cornelia Huck
2014-06-03 14:08 ` [Qemu-devel] [PATCH 09/10] s390x: cleanup interrupt injection Cornelia Huck
2014-06-03 14:08 ` Cornelia Huck [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1401804485-14801-11-git-send-email-cornelia.huck@de.ibm.com \
    --to=cornelia.huck@de.ibm.com \
    --cc=agraf@suse.de \
    --cc=borntraeger@de.ibm.com \
    --cc=jfrei@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).