[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH 06/10] Make auto-masking a generic event channel property



Keeping the Mask boolean in the per-type event channel parameters makes the
code needlessly complex in several places. Just make it a generic property.

Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
 src/xenbus/evtchn.c | 97 +++++++++++------------------------------------------
 1 file changed, 20 insertions(+), 77 deletions(-)

diff --git a/src/xenbus/evtchn.c b/src/xenbus/evtchn.c
index 338a90f..5a0822d 100644
--- a/src/xenbus/evtchn.c
+++ b/src/xenbus/evtchn.c
@@ -40,19 +40,13 @@
 #include "dbg_print.h"
 #include "assert.h"
 
-typedef struct _XENBUS_EVTCHN_FIXED_PARAMETERS {
-    BOOLEAN Mask;
-} XENBUS_EVTCHN_FIXED_PARAMETERS, *PXENBUS_EVTCHN_FIXED_PARAMETERS;
-
 typedef struct _XENBUS_EVTCHN_UNBOUND_PARAMETERS {
     USHORT  RemoteDomain;
-    BOOLEAN Mask;
 } XENBUS_EVTCHN_UNBOUND_PARAMETERS, *PXENBUS_EVTCHN_UNBOUND_PARAMETERS;
 
 typedef struct _XENBUS_EVTCHN_INTER_DOMAIN_PARAMETERS {
     USHORT  RemoteDomain;
     ULONG   RemotePort;
-    BOOLEAN Mask;
 } XENBUS_EVTCHN_INTER_DOMAIN_PARAMETERS, 
*PXENBUS_EVTCHN_INTER_DOMAIN_PARAMETERS;
 
 typedef struct _XENBUS_EVTCHN_VIRQ_PARAMETERS {
@@ -64,7 +58,6 @@ typedef struct _XENBUS_EVTCHN_VIRQ_PARAMETERS {
 
 typedef struct _XENBUS_EVTCHN_PARAMETERS {
     union {
-        XENBUS_EVTCHN_FIXED_PARAMETERS         Fixed;
         XENBUS_EVTCHN_UNBOUND_PARAMETERS       Unbound;
         XENBUS_EVTCHN_INTER_DOMAIN_PARAMETERS  InterDomain;
         XENBUS_EVTCHN_VIRQ_PARAMETERS          Virq;
@@ -84,6 +77,7 @@ struct _XENBUS_EVTCHN_CHANNEL {
     BOOLEAN                     Active; // Must be tested at >= DISPATCH_LEVEL
     XENBUS_EVTCHN_TYPE          Type;
     XENBUS_EVTCHN_PARAMETERS    Parameters;
+    BOOLEAN                     Mask;
     ULONG                       LocalPort;
 };
 
@@ -183,8 +177,7 @@ EvtchnOpenFixed(
     LocalPort = va_arg(Arguments, ULONG);
     Mask = va_arg(Arguments, BOOLEAN);
 
-    Channel->Parameters.Fixed.Mask = Mask;
-
+    Channel->Mask = Mask;
     Channel->LocalPort = LocalPort;
 
     return STATUS_SUCCESS;
@@ -209,8 +202,8 @@ EvtchnOpenUnbound(
         goto fail1;
 
     Channel->Parameters.Unbound.RemoteDomain = RemoteDomain;
-    Channel->Parameters.Unbound.Mask = Mask;
 
+    Channel->Mask = Mask;
     Channel->LocalPort = LocalPort;
 
     return STATUS_SUCCESS;
@@ -243,8 +236,8 @@ EvtchnOpenInterDomain(
 
     Channel->Parameters.InterDomain.RemoteDomain = RemoteDomain;
     Channel->Parameters.InterDomain.RemotePort = RemotePort;
-    Channel->Parameters.InterDomain.Mask = Mask;
 
+    Channel->Mask = Mask;
     Channel->LocalPort = LocalPort;
 
     return STATUS_SUCCESS;
@@ -426,35 +419,10 @@ EvtchnUnmask(
                                      &Context->SharedInfoInterface,
                                      Channel->LocalPort);
 
-        if (Pending) {
-            BOOLEAN Mask = FALSE;
-
-            switch (Channel->Type) {
-            case XENBUS_EVTCHN_TYPE_FIXED:
-                Mask = Channel->Parameters.Fixed.Mask;
-                break;
-
-            case XENBUS_EVTCHN_TYPE_UNBOUND:
-                Mask = Channel->Parameters.Unbound.Mask;
-                break;
-
-            case XENBUS_EVTCHN_TYPE_INTER_DOMAIN:
-                Mask = Channel->Parameters.InterDomain.Mask;
-                break;
-
-            case XENBUS_EVTCHN_TYPE_VIRQ:
-                break;
-
-            default:
-                ASSERT(FALSE);
-                break;
-            }
-
-            if (Mask)
-                XENBUS_SHARED_INFO(EvtchnMask,
-                                   &Context->SharedInfoInterface,
-                                   Channel->LocalPort);
-        }
+        if (Pending && Channel->Mask)
+            XENBUS_SHARED_INFO(EvtchnMask,
+                               &Context->SharedInfoInterface,
+                               Channel->LocalPort);
     }
 
     if (!InCallback)
@@ -620,7 +588,6 @@ EvtchnPollCallback(
 {
     PXENBUS_EVTCHN_CONTEXT  Context = Argument;
     PXENBUS_EVTCHN_CHANNEL  Channel;
-    BOOLEAN                 Mask;
     BOOLEAN                 DoneSomething;
     NTSTATUS                status;
 
@@ -639,30 +606,7 @@ EvtchnPollCallback(
         goto done;
     }
 
-    Mask = FALSE;
-
-    switch (Channel->Type) {
-    case XENBUS_EVTCHN_TYPE_FIXED:
-        Mask = Channel->Parameters.Fixed.Mask;
-        break;
-
-    case XENBUS_EVTCHN_TYPE_UNBOUND:
-        Mask = Channel->Parameters.Unbound.Mask;
-        break;
-
-    case XENBUS_EVTCHN_TYPE_INTER_DOMAIN:
-        Mask = Channel->Parameters.InterDomain.Mask;
-        break;
-
-    case XENBUS_EVTCHN_TYPE_VIRQ:
-        break;
-
-    default:
-        ASSERT(FALSE);
-        break;
-    }
-
-    if (Mask)
+    if (Channel->Mask)
         XENBUS_SHARED_INFO(EvtchnMask,
                            &Context->SharedInfoInterface,
                            LocalPort);
@@ -759,43 +703,42 @@ EvtchnDebugCallback(
             if (Name != NULL) {
                 XENBUS_DEBUG(Printf,
                              &Context->DebugInterface,
-                             "- (%04x) BY %s + %p [%s]\n",
+                             "- (%04x) BY %s + %p %s%s\n",
                              Channel->LocalPort,
                              Name,
                              (PVOID)Offset,
-                             (Channel->Active) ? "TRUE" : "FALSE");
+                             (Channel->Mask) ? "AUTO-MASK " : "",
+                             (Channel->Active) ? "ACTIVE" : "");
             } else {
                 XENBUS_DEBUG(Printf,
                              &Context->DebugInterface,
-                             "- (%04x) BY %p [%s]\n",
+                             "- (%04x) BY %p %s%s\n",
                              Channel->LocalPort,
                              (PVOID)Channel->Caller,
-                             (Channel->Active) ? "TRUE" : "FALSE");
+                             (Channel->Mask) ? "AUTO-MASK " : "",
+                             (Channel->Active) ? "ACTIVE" : "");
             }
 
             switch (Channel->Type) {
             case XENBUS_EVTCHN_TYPE_FIXED:
                 XENBUS_DEBUG(Printf,
                              &Context->DebugInterface,
-                             "FIXED: Mask = %s\n",
-                             (Channel->Parameters.Fixed.Mask) ? "TRUE" : 
"FALSE");
+                             "FIXED\n");
                 break;
 
             case XENBUS_EVTCHN_TYPE_UNBOUND:
                 XENBUS_DEBUG(Printf,
                              &Context->DebugInterface,
-                             "UNBOUND: RemoteDomain = %u Mask = %s\n",
-                             Channel->Parameters.Unbound.RemoteDomain,
-                             (Channel->Parameters.Unbound.Mask) ? "TRUE" : 
"FALSE");
+                             "UNBOUND: RemoteDomain = %u\n",
+                             Channel->Parameters.Unbound.RemoteDomain);
                 break;
 
             case XENBUS_EVTCHN_TYPE_INTER_DOMAIN:
                 XENBUS_DEBUG(Printf,
                              &Context->DebugInterface,
-                             "INTER_DOMAIN: RemoteDomain = %u RemotePort = %u 
Mask = %s\n",
+                             "INTER_DOMAIN: RemoteDomain = %u RemotePort = 
%u\n",
                              Channel->Parameters.InterDomain.RemoteDomain,
-                             Channel->Parameters.InterDomain.RemotePort,
-                             (Channel->Parameters.InterDomain.Mask) ? "TRUE" : 
"FALSE");
+                             Channel->Parameters.InterDomain.RemotePort);
                 break;
 
             case XENBUS_EVTCHN_TYPE_VIRQ:
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.