From: Owen Smith Date: Wed, 13 Nov 2019 15:43:54 +0000 (+0000) Subject: Reduce xenstore churn X-Git-Tag: 9.0.0-rc1~1 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=7eb3dff8bf293b499707782dba2fb17cd56f69ca;p=pvdrivers%2Fwin%2Fxenvif.git 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 --- 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,