From: Christian Borntraeger <[EMAIL PROTECTED]>

This patch changes the interrupt defintions for virtio on s390. We now use
the extint number 0x2603, which is used as a host interrupt already by z/VM
for pfault and dasd_diag.
We will use subcode 0x0D to distinguish virtio from dasd and pfault.

Signed-off-by: Christian Borntraeger <[EMAIL PROTECTED]>
Signed-off-by: Carsten Otte <[EMAIL PROTECTED]>
---
 arch/s390/kvm/interrupt.c     |    6 +++++-
 drivers/s390/kvm/kvm_virtio.c |    8 +++++++-
 2 files changed, 12 insertions(+), 2 deletions(-)

Index: kvm/arch/s390/kvm/interrupt.c
===================================================================
--- kvm.orig/arch/s390/kvm/interrupt.c
+++ kvm/arch/s390/kvm/interrupt.c
@@ -162,7 +162,11 @@ static void __do_deliver_interrupt(struc
                VCPU_EVENT(vcpu, 4, "interrupt: virtio parm:%x,parm64:%lx",
                           inti->ext.ext_params, inti->ext.ext_params2);
                vcpu->stat.deliver_virtio_interrupt++;
-               rc = put_guest_u16(vcpu, __LC_EXT_INT_CODE, 0x1237);
+               rc = put_guest_u16(vcpu, __LC_EXT_INT_CODE, 0x2603);
+               if (rc == -EFAULT)
+                       exception = 1;
+
+               rc = put_guest_u16(vcpu, __LC_CPU_ADDRESS, 0x0d00);
                if (rc == -EFAULT)
                        exception = 1;
 
Index: kvm/drivers/s390/kvm/kvm_virtio.c
===================================================================
--- kvm.orig/drivers/s390/kvm/kvm_virtio.c
+++ kvm/drivers/s390/kvm/kvm_virtio.c
@@ -23,6 +23,8 @@
 #include <asm/setup.h>
 #include <asm/s390_ext.h>
 
+#define VIRTIO_SUBCODE_64 0x0D00
+
 /*
  * The pointer to our (page) of device descriptions.
  */
@@ -291,6 +293,10 @@ static void scan_devices(void)
 static void kvm_extint_handler(u16 code)
 {
        void *data = (void *) *(long *) __LC_PFAULT_INTPARM;
+       u16 subcode = S390_lowcore.cpu_addr;
+
+       if ((subcode & 0xff00) != VIRTIO_SUBCODE_64)
+               return;
 
        vring_interrupt(0, data);
 }
@@ -319,8 +325,8 @@ static int __init kvm_devices_init(void)
 
        kvm_devices  = (void *) (max_pfn << PAGE_SHIFT);
 
-       register_external_interrupt(0x1237, kvm_extint_handler);
        ctl_set_bit(0, 9);
+       register_external_interrupt(0x2603, kvm_extint_handler);
 
        scan_devices();
        return 0;



-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to