]> xenbits.xensource.com Git - pvdrivers/win/xenvif.git/commitdiff
Reduce xenstore churn
authorOwen Smith <owen.smith@citrix.com>
Wed, 13 Nov 2019 15:43:54 +0000 (15:43 +0000)
committerPaul Durrant <pdurrant@amazon.com>
Thu, 14 Nov 2019 09:56:06 +0000 (09:56 +0000)
Only write the complete changes to the xenstore MAC address table. There
is no need to write the complete table for each addition or removal,
when additions and removals are processed in a single update.

Pushes the responsibility for writing the MAC table to
FrontendSetMulticastAddresses() once all changes are made, instead of
for each call to MacAddMulticastAddress() or MacRemoveMulticastAddress()

Signed-off-by: Owen Smith <owen.smith@citrix.com>
src/xenvif/frontend.c
src/xenvif/mac.c
src/xenvif/mac.h

index 3e31654fad16d25a71747a471a82b3bef0053658..0ed68dfa5e2989c33b0abd79fa02cb5fbde1cea5 100644 (file)
@@ -989,6 +989,7 @@ FrontendSetMulticastAddresses(
     ULONG                   MulticastCount;
     ULONG                   MulticastIndex;
     ULONG                   Index;
+    BOOLEAN                 Change;
     NTSTATUS                status;
 
     Transmitter = FrontendGetTransmitter(Frontend);
@@ -1015,6 +1016,7 @@ FrontendSetMulticastAddresses(
     } else
         MulticastAddress = NULL;
 
+    Change = FALSE;
     for (Index = 0; Index < Count; Index++) {
         BOOLEAN Found;
 
@@ -1042,6 +1044,7 @@ FrontendSetMulticastAddresses(
             (VOID) TransmitterQueueMulticastControl(Transmitter,
                                                     &Address[Index],
                                                     TRUE);
+            Change = TRUE;
         }
     }
 
@@ -1058,11 +1061,15 @@ FrontendSetMulticastAddresses(
                                                 FALSE);
         (VOID) MacRemoveMulticastAddress(Mac,
                                          &MulticastAddress[MulticastIndex]);
+        Change = TRUE;
     }
 
     if (MulticastAddress != NULL)
         __FrontendFree(MulticastAddress);
 
+    if (Change)
+        (VOID) MacDumpAddressTable(Mac);
+
     KeLowerIrql(Irql);
 
     return STATUS_SUCCESS;
index 0b17a54d2d72f47e607e5c5f44533f9082a5ef16..19666fe8af682dde158904152127a0512d700470 100644 (file)
@@ -295,7 +295,7 @@ __MacReleaseLockShared(
     ExReleaseSpinLockSharedFromDpcLevel(&Mac->Lock);
 }
 
-static NTSTATUS
+NTSTATUS
 MacDumpAddressTable(
     IN  PXENVIF_MAC     Mac
     )
@@ -852,8 +852,6 @@ MacAddMulticastAddress(
     __MacReleaseLockExclusive(Mac);
     KeLowerIrql(Irql);
 
-    (VOID) MacDumpAddressTable(Mac);
-
     Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
           FrontendGetPrefix(Frontend),
           Address->Byte[0],
@@ -914,8 +912,6 @@ found:
     __MacReleaseLockExclusive(Mac);
     KeLowerIrql(Irql);
 
-    (VOID) MacDumpAddressTable(Mac);
-
     Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
           FrontendGetPrefix(Frontend),
           Address->Byte[0],
index 83ce5b8d3b7f0a55e2767098bcb3e1a1c892c936..9340f0189589facac2dfc826423873b5843871c8 100644 (file)
@@ -95,6 +95,11 @@ MacQueryBroadcastAddress(
     OUT PETHERNET_ADDRESS   Address                   
     );
 
+extern NTSTATUS
+MacDumpAddressTable(
+    IN  PXENVIF_MAC     Mac
+    );
+
 extern NTSTATUS
 MacAddMulticastAddress(
     IN      PXENVIF_MAC         Mac,