|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Reduce xenstore churn
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@xxxxxxxxxx>
---
src/xenvif/frontend.c | 7 +++++++
src/xenvif/mac.c | 6 +-----
src/xenvif/mac.h | 5 +++++
3 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 3e31654..0ed68df 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -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;
diff --git a/src/xenvif/mac.c b/src/xenvif/mac.c
index 0b17a54..19666fe 100644
--- a/src/xenvif/mac.c
+++ b/src/xenvif/mac.c
@@ -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],
diff --git a/src/xenvif/mac.h b/src/xenvif/mac.h
index 83ce5b8..9340f01 100644
--- a/src/xenvif/mac.h
+++ b/src/xenvif/mac.h
@@ -95,6 +95,11 @@ MacQueryBroadcastAddress(
OUT PETHERNET_ADDRESS Address
);
+extern NTSTATUS
+MacDumpAddressTable(
+ IN PXENVIF_MAC Mac
+ );
+
extern NTSTATUS
MacAddMulticastAddress(
IN PXENVIF_MAC Mac,
--
2.16.2.windows.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |