]> xenbits.xensource.com Git - pvdrivers/win/xenvif.git/commitdiff
Move check for split event channels into Frontend module
authorPaul Durrant <paul.durrant@citrix.com>
Fri, 4 Dec 2015 09:12:21 +0000 (09:12 +0000)
committerPaul Durrant <paul.durrant@citrix.com>
Fri, 4 Dec 2015 12:39:11 +0000 (12:39 +0000)
Reduce code duplication and efficiency a little by checking the xenstore
key once in Frontend and then providing a function with Transmitter and
Receiver can use to grab the value.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
src/xenvif/frontend.c
src/xenvif/frontend.h
src/xenvif/receiver.c
src/xenvif/transmitter.c

index 98efee5f6ed0fd673cc8c1b75f1d240faf762652..b066d0b79f04660a531fe6425ba2af27d206acfa 100644 (file)
@@ -70,6 +70,7 @@ struct _XENVIF_FRONTEND {
     USHORT                      BackendDomain;
     ULONG                       MaxQueues;
     ULONG                       NumQueues;
+    BOOLEAN                     Split;
 
     PXENVIF_MAC                 Mac;
     PXENVIF_RECEIVER            Receiver;
@@ -1674,7 +1675,8 @@ FrontendSetNumQueues(
         BackendMaxQueues = 1;
     }
 
-    Frontend->NumQueues = __min(Frontend->MaxQueues, BackendMaxQueues);
+    Frontend->NumQueues = __min(__FrontendGetMaxQueues(Frontend),
+                                BackendMaxQueues);
 
     Info("%s: %u\n", __FrontendGetPath(Frontend), Frontend->NumQueues);
 }
@@ -1695,6 +1697,50 @@ FrontendGetNumQueues(
     return __FrontendGetNumQueues(Frontend);
 }
 
+static VOID
+FrontendSetSplit(
+    IN  PXENVIF_FRONTEND    Frontend
+    )
+{
+    PCHAR                   Buffer;
+    NTSTATUS                status;
+
+    status = XENBUS_STORE(Read,
+                          &Frontend->StoreInterface,
+                          NULL,
+                          __FrontendGetBackendPath(Frontend),
+                          "feature-split-event-channels",
+                          &Buffer);
+    if (NT_SUCCESS(status)) {
+        Frontend->Split = (BOOLEAN)strtol(Buffer, NULL, 2);
+
+        XENBUS_STORE(Free,
+                     &Frontend->StoreInterface,
+                     Buffer);
+    } else {
+        Frontend->Split = FALSE;
+    }
+
+    Info("%s: %s\n", __FrontendGetPath(Frontend),
+         (Frontend->Split) ? "TRUE" : "FALSE");
+}
+
+static FORCEINLINE BOOLEAN
+__FrontendIsSplit(
+    IN  PXENVIF_FRONTEND    Frontend
+    )
+{
+    return Frontend->Split;
+}
+
+BOOLEAN
+FrontendIsSplit(
+    IN  PXENVIF_FRONTEND    Frontend
+    )
+{
+    return __FrontendIsSplit(Frontend);
+}
+
 static NTSTATUS
 FrontendConnect(
     IN  PXENVIF_FRONTEND    Frontend
@@ -1731,6 +1777,7 @@ FrontendConnect(
         goto fail4;
 
     FrontendSetNumQueues(Frontend);
+    FrontendSetSplit(Frontend);
 
     status = ReceiverConnect(__FrontendGetReceiver(Frontend));
     if (!NT_SUCCESS(status))
index bd397679b27896e1cf4c959093179daff7e176f3..eda9e3dc53aec6d91f84d13e385c23586d534242 100644 (file)
@@ -122,6 +122,11 @@ FrontendGetNumQueues(
     IN  PXENVIF_FRONTEND    Frontend
     );
 
+extern BOOLEAN
+FrontendIsSplit(
+    IN  PXENVIF_FRONTEND    Frontend
+    );
+
 extern PCHAR
 FrontendFormatPath(
     IN  PXENVIF_FRONTEND    Frontend,
index c6f64b5ab7e31af715abd8d66d9cb3b55740e0a5..36557b747d9d91da17f50588d9b8bd3ae6bcb8c3 100644 (file)
@@ -2859,7 +2859,6 @@ ReceiverConnect(
 {
     PXENVIF_FRONTEND        Frontend;
     LONG                    Index;
-    PCHAR                   Buffer;
     NTSTATUS                status;
 
     Trace("====>\n");
@@ -2886,21 +2885,7 @@ ReceiverConnect(
     if (!NT_SUCCESS(status))
         goto fail5;
 
-    status = XENBUS_STORE(Read,
-                          &Receiver->StoreInterface,
-                          NULL,
-                          FrontendGetBackendPath(Frontend),
-                          "feature-split-event-channels",
-                          &Buffer);
-    if (!NT_SUCCESS(status)) {
-        Receiver->Split = FALSE;
-    } else {
-        Receiver->Split = (BOOLEAN)strtol(Buffer, NULL, 2);
-
-        XENBUS_STORE(Free,
-                     &Receiver->StoreInterface,
-                     Buffer);
-    }
+    Receiver->Split = FrontendIsSplit(Frontend);
 
     Receiver->NumQueues = FrontendGetNumQueues(Frontend);
     ASSERT3U(Receiver->NumQueues, <=, Receiver->MaxQueues);
@@ -3211,8 +3196,6 @@ ReceiverDisconnect(
 
     Frontend = Receiver->Frontend;
 
-    Receiver->Split = FALSE;
-
     XENBUS_DEBUG(Deregister,
                  &Receiver->DebugInterface,
                  Receiver->DebugCallback);
@@ -3226,6 +3209,7 @@ ReceiverDisconnect(
     }
 
     Receiver->NumQueues = 0;
+    Receiver->Split = FALSE;
 
     XENBUS_GNTTAB(Release, &Receiver->GnttabInterface);
 
index 5f84eb5bea95eac65adf2a0155591239cc824500..615d2d05363bd443caa4483bc8f711aa83a235dc 100644 (file)
@@ -710,6 +710,15 @@ TransmitterRingDebugCallback(
                  Ring->PacketsUnprepared,
                  Ring->PacketsSent,
                  Ring->PacketsCompleted);
+
+    if (Transmitter->Split) {
+        // Dump event channel
+        XENBUS_DEBUG(Printf,
+                     &Transmitter->DebugInterface,
+                     "Events = %lu Dpcs = %lu\n",
+                     Ring->Events,
+                     Ring->Dpcs);
+    }
 }
 
 static BOOLEAN
@@ -3618,8 +3627,6 @@ __TransmitterRingDisconnect(
     Transmitter = Ring->Transmitter;
     Frontend = Transmitter->Frontend;
 
-    Transmitter->Split = FALSE;
-
     if (Ring->Channel != NULL) {
         XENBUS_EVTCHN(Close,
                       &Transmitter->EvtchnInterface,
@@ -4185,22 +4192,6 @@ TransmitterConnect(
     if (!NT_SUCCESS(status))
         goto fail8;
 
-    status = XENBUS_STORE(Read,
-                          &Transmitter->StoreInterface,
-                          NULL,
-                          FrontendGetBackendPath(Frontend),
-                          "feature-split-event-channels",
-                          &Buffer);
-    if (!NT_SUCCESS(status)) {
-        Transmitter->Split = FALSE;
-    } else {
-        Transmitter->Split = (BOOLEAN)strtol(Buffer, NULL, 2);
-
-        XENBUS_STORE(Free,
-                     &Transmitter->StoreInterface,
-                     Buffer);
-    }
-
     status = XENBUS_STORE(Read,
                           &Transmitter->StoreInterface,
                           NULL,
@@ -4217,6 +4208,8 @@ TransmitterConnect(
                      Buffer);
     }
 
+    Transmitter->Split = FrontendIsSplit(Frontend);
+
     Transmitter->NumQueues = FrontendGetNumQueues(Frontend);
     ASSERT3U(Transmitter->NumQueues, <=, Transmitter->MaxQueues);
 
@@ -4260,6 +4253,8 @@ fail9:
     }
 
     Transmitter->NumQueues = 0;
+    Transmitter->Split = FALSE;
+    Transmitter->MulticastControl = FALSE;
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,
@@ -4401,9 +4396,6 @@ TransmitterDisconnect(
 
     Frontend = Transmitter->Frontend;
 
-    Transmitter->MulticastControl = FALSE;
-    Transmitter->Split = FALSE;
-
     XENBUS_DEBUG(Deregister,
                  &Transmitter->DebugInterface,
                  Transmitter->DebugCallback);
@@ -4417,6 +4409,8 @@ TransmitterDisconnect(
     }
 
     Transmitter->NumQueues = 0;
+    Transmitter->MulticastControl = FALSE;
+    Transmitter->Split = FALSE;
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,