|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Provide registry override for disabling RSS
For diagnostic purposes it is useful to be able to simulate the situation
where XENVIF does not support RSS (because the backend does not support
it).
This patch adds code to check a REG_DWORD value called
'FrontendDisableToeplitz' and will not allow the Toeplitz hash algorithm
to be configured if the value is non-zero. This prevents XENNET from
advertizing the RSS capability to the network stack.
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xenvif/frontend.c | 24 +++++++++++++++++++++++-
src/xenvif/receiver.c | 8 ++++----
2 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 27796a1..b510cc1 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -81,6 +81,7 @@ struct _XENVIF_FRONTEND {
ULONG MaxQueues;
ULONG NumQueues;
BOOLEAN Split;
+ ULONG DisableToeplitz;
PXENVIF_MAC Mac;
PXENVIF_RECEIVER Receiver;
@@ -1932,10 +1933,15 @@ FrontendSetHashAlgorithm(
switch (Algorithm) {
case XENVIF_PACKET_HASH_ALGORITHM_NONE:
case XENVIF_PACKET_HASH_ALGORITHM_UNSPECIFIED:
- case XENVIF_PACKET_HASH_ALGORITHM_TOEPLITZ:
status = STATUS_SUCCESS;
break;
+ case XENVIF_PACKET_HASH_ALGORITHM_TOEPLITZ:
+ status = (Frontend->DisableToeplitz != 0) ?
+ STATUS_NOT_SUPPORTED :
+ STATUS_SUCCESS;
+ break;
+
default:
status = STATUS_NOT_SUPPORTED;
break;
@@ -2773,6 +2779,8 @@ FrontendInitialize(
ULONG Length;
PCHAR Path;
PCHAR Prefix;
+ HANDLE ParametersKey;
+ ULONG FrontendDisableToeplitz;
NTSTATUS status;
Trace("====>\n");
@@ -2831,6 +2839,16 @@ FrontendInitialize(
FrontendSetMaxQueues(*Frontend);
(*Frontend)->Hash.Algorithm = XENVIF_PACKET_HASH_ALGORITHM_UNSPECIFIED;
+ (*Frontend)->DisableToeplitz = 0;
+
+ ParametersKey = DriverGetParametersKey();
+
+ status = RegistryQueryDwordValue(ParametersKey,
+ "FrontendDisableToeplitz",
+ &FrontendDisableToeplitz);
+ if (NT_SUCCESS(status))
+ (*Frontend)->DisableToeplitz = FrontendDisableToeplitz;
+
status = MacInitialize(*Frontend, &(*Frontend)->Mac);
if (!NT_SUCCESS(status))
goto fail6;
@@ -2910,6 +2928,8 @@ fail7:
fail6:
Error("fail6\n");
+ (*Frontend)->DisableToeplitz = 0;
+
RtlZeroMemory(&(*Frontend)->Hash, sizeof (XENVIF_FRONTEND_HASH));
(*Frontend)->MaxQueues = 0;
@@ -3005,6 +3025,8 @@ FrontendTeardown(
MacTeardown(__FrontendGetMac(Frontend));
Frontend->Mac = NULL;
+ Frontend->DisableToeplitz = 0;
+
RtlZeroMemory(&Frontend->Hash, sizeof (XENVIF_FRONTEND_HASH));
Frontend->MaxQueues = 0;
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index f54d368..99c113e 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -3751,6 +3751,10 @@ ReceiverSetHashAlgorithm(
Frontend = Receiver->Frontend;
+ status = FrontendSetHashAlgorithm(Frontend, Algorithm);
+ if (!NT_SUCCESS(status))
+ goto fail1;
+
KeRaiseIrql(DISPATCH_LEVEL, &Irql);
for (Index = 0;
@@ -3769,10 +3773,6 @@ ReceiverSetHashAlgorithm(
KeLowerIrql(Irql);
- status = FrontendSetHashAlgorithm(Frontend, Algorithm);
- if (!NT_SUCCESS(status))
- goto fail1;
-
return STATUS_SUCCESS;
fail1:
--
2.5.3
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |