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] Allow EVTCHNOP_bind_{ipi, virq} to specify the vcpu to

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Allow EVTCHNOP_bind_{ipi, virq} to specify the vcpu to
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 04 Oct 2005 14:16:11 +0000
Delivery-date: Tue, 04 Oct 2005 14:14:50 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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 ec84b119e4ed1f69bd91ec9233c2c3feab464b2e
# Parent  f13b4b7306050106951f248adfb1a856437571e7
Allow EVTCHNOP_bind_{ipi,virq} to specify the vcpu to
bind to. Previously the alloacted port was implicitly
bound to the calling vcpu.

Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>

diff -r f13b4b730605 -r ec84b119e4ed 
linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c
--- a/linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c     Tue Oct  4 14:02:35 2005
+++ b/linux-2.6-xen-sparse/arch/xen/kernel/evtchn.c     Tue Oct  4 14:02:51 2005
@@ -189,6 +189,7 @@
        if ((irq = per_cpu(virq_to_irq, cpu)[virq]) == -1) {
                op.cmd              = EVTCHNOP_bind_virq;
                op.u.bind_virq.virq = virq;
+               op.u.bind_virq.vcpu = cpu;
                BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
                evtchn = op.u.bind_virq.port;
 
@@ -252,6 +253,7 @@
 
        if ((evtchn = per_cpu(ipi_to_evtchn, cpu)[ipi]) == -1) {
                op.cmd = EVTCHNOP_bind_ipi;
+               op.u.bind_ipi.vcpu = cpu;
                BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
                evtchn = op.u.bind_ipi.port;
 
@@ -666,6 +668,7 @@
                /* Get a new binding from Xen. */
                op.cmd              = EVTCHNOP_bind_virq;
                op.u.bind_virq.virq = virq;
+               op.u.bind_virq.vcpu = 0;
                BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
                evtchn = op.u.bind_virq.port;
         
@@ -687,6 +690,7 @@
 
                /* Get a new binding from Xen. */
                op.cmd = EVTCHNOP_bind_ipi;
+               op.u.bind_ipi.vcpu = 0;
                BUG_ON(HYPERVISOR_event_channel_op(&op) != 0);
                evtchn = op.u.bind_ipi.port;
         
diff -r f13b4b730605 -r ec84b119e4ed tools/libxc/xc_evtchn.c
--- a/tools/libxc/xc_evtchn.c   Tue Oct  4 14:02:35 2005
+++ b/tools/libxc/xc_evtchn.c   Tue Oct  4 14:02:51 2005
@@ -90,7 +90,8 @@
 
     op.cmd = EVTCHNOP_bind_virq;
     op.u.bind_virq.virq = (u32)virq;
-   
+    op.u.bind_virq.vcpu = 0;
+
     if ( (rc = do_evtchn_op(xc_handle, &op)) == 0 )
     {
         if ( port != NULL )
diff -r f13b4b730605 -r ec84b119e4ed xen/common/event_channel.c
--- a/xen/common/event_channel.c        Tue Oct  4 14:02:35 2005
+++ b/xen/common/event_channel.c        Tue Oct  4 14:02:51 2005
@@ -244,15 +244,15 @@
 static long evtchn_bind_virq(evtchn_bind_virq_t *bind)
 {
     struct evtchn *chn;
-    struct vcpu   *v = current;
-    struct domain *d = v->domain;
+    struct vcpu   *v;
+    struct domain *d = current->domain;
     int            port, virq = bind->virq;
 
     if ( virq >= ARRAY_SIZE(v->virq_to_evtchn) )
         return -EINVAL;
 
-    if ( d->domain_id == 0 && virq >= VIRQ_CONSOLE )
-        v = d->vcpu[0];
+    if ( (v = d->vcpu[bind->vcpu]) == NULL )
+        return -ENOENT;
 
     spin_lock(&d->evtchn_lock);
 
@@ -288,13 +288,16 @@
     struct domain *d = current->domain;
     int            port;
 
+    if ( d->vcpu[bind->vcpu] == NULL )
+        return -ENOENT;
+
     spin_lock(&d->evtchn_lock);
 
     if ( (port = get_free_port(d)) >= 0 )
     {
         chn = evtchn_from_port(d, port);
         chn->state          = ECS_IPI;
-        chn->notify_vcpu_id = current->vcpu_id;
+        chn->notify_vcpu_id = bind->vcpu;
     }
 
     spin_unlock(&d->evtchn_lock);
diff -r f13b4b730605 -r ec84b119e4ed xen/include/public/event_channel.h
--- a/xen/include/public/event_channel.h        Tue Oct  4 14:02:35 2005
+++ b/xen/include/public/event_channel.h        Tue Oct  4 14:02:51 2005
@@ -51,22 +51,24 @@
 } evtchn_bind_interdomain_t;
 
 /*
- * EVTCHNOP_bind_virq: Bind a local event channel to IRQ <irq> on calling vcpu.
+ * EVTCHNOP_bind_virq: Bind a local event channel to VIRQ <irq> on specified
+ * vcpu.
  * NOTES:
  *  1. A virtual IRQ may be bound to at most one event channel per vcpu.
- *  2. The allocated event channel is bound to the calling vcpu. The binding
+ *  2. The allocated event channel is bound to the specified vcpu. The binding
  *     may not be changed.
  */
 #define EVTCHNOP_bind_virq        1
 typedef struct evtchn_bind_virq {
     /* IN parameters. */
     u32 virq;
+    u32 vcpu;
     /* OUT parameters. */
     u32 port;
 } evtchn_bind_virq_t;
 
 /*
- * EVTCHNOP_bind_pirq: Bind a local event channel to IRQ <irq>.
+ * EVTCHNOP_bind_pirq: Bind a local event channel to PIRQ <irq>.
  * NOTES:
  *  1. A physical IRQ may be bound to at most one event channel per domain.
  *  2. Only a sufficiently-privileged domain may bind to a physical IRQ.
@@ -84,11 +86,12 @@
 /*
  * EVTCHNOP_bind_ipi: Bind a local event channel to receive events.
  * NOTES:
- *  1. The allocated event channel is bound to the calling vcpu. The binding
+ *  1. The allocated event channel is bound to the specified vcpu. The binding
  *     may not be changed.
  */
 #define EVTCHNOP_bind_ipi         7
 typedef struct evtchn_bind_ipi {
+    u32 vcpu;
     /* OUT parameters. */
     u32 port;
 } evtchn_bind_ipi_t;

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Allow EVTCHNOP_bind_{ipi, virq} to specify the vcpu to, Xen patchbot -unstable <=