WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Extended PHYSDEVOP_irq_status_query to ob

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Extended PHYSDEVOP_irq_status_query to obtain sharing status
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 07 Jun 2006 17:40:11 +0000
Delivery-date: Wed, 07 Jun 2006 10:41:51 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 1a500cc4fcd5648ce52d782be30948ed9a3e28d9
# Parent  eb3d2c32a3b4de71b2eebfd0af0955dd35241c93
Extended PHYSDEVOP_irq_status_query to obtain sharing status
(bound to multiple guests?).
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 xen/arch/x86/irq.c           |   22 ++++++++++++++++++++++
 xen/arch/x86/physdev.c       |    9 ++++-----
 xen/include/asm-x86/irq.h    |    3 +++
 xen/include/public/physdev.h |    7 ++++++-
 4 files changed, 35 insertions(+), 6 deletions(-)

diff -r eb3d2c32a3b4 -r 1a500cc4fcd5 xen/arch/x86/irq.c
--- a/xen/arch/x86/irq.c        Wed Jun 07 14:38:36 2006 +0100
+++ b/xen/arch/x86/irq.c        Wed Jun 07 15:46:05 2006 +0100
@@ -400,6 +400,28 @@ int pirq_acktype(int irq)
 
     BUG();
     return 0;
+}
+
+int pirq_shared(int irq)
+{
+    unsigned int        vector;
+    irq_desc_t         *desc;
+    irq_guest_action_t *action;
+    unsigned long       flags;
+    int                 shared;
+
+    vector = irq_to_vector(irq);
+    if ( vector == 0 )
+        return 0;
+
+    desc = &irq_desc[vector];
+
+    spin_lock_irqsave(&desc->lock, flags);
+    action = (irq_guest_action_t *)desc->action;
+    shared = ((desc->status & IRQ_GUEST) && (action->nr_guests > 1));
+    spin_unlock_irqrestore(&desc->lock, flags);
+
+    return shared;
 }
 
 int pirq_guest_bind(struct vcpu *v, int irq, int will_share)
diff -r eb3d2c32a3b4 -r 1a500cc4fcd5 xen/arch/x86/physdev.c
--- a/xen/arch/x86/physdev.c    Wed Jun 07 14:38:36 2006 +0100
+++ b/xen/arch/x86/physdev.c    Wed Jun 07 15:46:05 2006 +0100
@@ -12,15 +12,12 @@
 #include <public/xen.h>
 #include <public/physdev.h>
 
-extern int
+int
 ioapic_guest_read(
     unsigned long physbase, unsigned int reg, u32 *pval);
-extern int
+int
 ioapic_guest_write(
     unsigned long physbase, unsigned int reg, u32 pval);
-extern int
-pirq_acktype(
-    int irq);
 
 long do_physdev_op(int cmd, XEN_GUEST_HANDLE(void) arg)
 {
@@ -56,6 +53,8 @@ long do_physdev_op(int cmd, XEN_GUEST_HA
         irq_status_query.flags = 0;
         if ( pirq_acktype(irq) != 0 )
             irq_status_query.flags |= XENIRQSTAT_needs_eoi;
+        if ( pirq_shared(irq) )
+            irq_status_query.flags |= XENIRQSTAT_shared;
         ret = copy_to_guest(arg, &irq_status_query, 1) ? -EFAULT : 0;
         break;
     }
diff -r eb3d2c32a3b4 -r 1a500cc4fcd5 xen/include/asm-x86/irq.h
--- a/xen/include/asm-x86/irq.h Wed Jun 07 14:38:36 2006 +0100
+++ b/xen/include/asm-x86/irq.h Wed Jun 07 15:46:05 2006 +0100
@@ -46,4 +46,7 @@ extern atomic_t irq_err_count;
 extern atomic_t irq_err_count;
 extern atomic_t irq_mis_count;
 
+int pirq_acktype(int irq);
+int pirq_shared(int irq);
+
 #endif /* _ASM_HW_IRQ_H */
diff -r eb3d2c32a3b4 -r 1a500cc4fcd5 xen/include/public/physdev.h
--- a/xen/include/public/physdev.h      Wed Jun 07 14:38:36 2006 +0100
+++ b/xen/include/public/physdev.h      Wed Jun 07 15:46:05 2006 +0100
@@ -37,7 +37,11 @@ DEFINE_XEN_GUEST_HANDLE(physdev_irq_stat
 
 /* Need to call PHYSDEVOP_eoi when the IRQ has been serviced? */
 #define _XENIRQSTAT_needs_eoi   (0)
-#define  XENIRQSTAT_needs_eoi   (1<<_XENIRQSTAT_needs_eoi)
+#define  XENIRQSTAT_needs_eoi   (1U<<_XENIRQSTAT_needs_eoi)
+
+/* Need to call PHYSDEVOP_eoi when the IRQ has been serviced? */
+#define _XENIRQSTAT_shared      (1)
+#define  XENIRQSTAT_shared      (1U<<_XENIRQSTAT_shared)
 
 /*
  * Set the current VCPU's I/O privilege level.
@@ -130,6 +134,7 @@ DEFINE_XEN_GUEST_HANDLE(physdev_op_t);
 #define PHYSDEVOP_APIC_WRITE             PHYSDEVOP_apic_write
 #define PHYSDEVOP_ASSIGN_VECTOR          PHYSDEVOP_alloc_irq_vector
 #define PHYSDEVOP_IRQ_NEEDS_UNMASK_NOTIFY XENIRQSTAT_needs_eoi
+#define PHYSDEVOP_IRQ_SHARED             XENIRQSTAT_shared
 
 #endif /* __XEN_PUBLIC_PHYSDEV_H__ */
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Extended PHYSDEVOP_irq_status_query to obtain sharing status, Xen patchbot-unstable <=