|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 03/10] Store maximum number of queues allowed
Read "MultiQueueMaxQueues" from parameters key to determine in-guest
limit to multi-queue support.
The maximum number of queues used will be the smallest of;
"HKLM/CurrentControlSet/Services/XENVIF/Parameters/MultiQueueMaxQueues",
"device/vif/<number>/multi-queue-max-queues" and
number of guest vCPUs
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xenvif/driver.c | 36 ++++++++++++++++++++++++++++++++++++
src/xenvif/driver.h | 5 +++++
2 files changed, 41 insertions(+)
diff --git a/src/xenvif/driver.c b/src/xenvif/driver.c
index 6f81620..b1fbb79 100644
--- a/src/xenvif/driver.c
+++ b/src/xenvif/driver.c
@@ -47,6 +47,7 @@ typedef struct _XENVIF_DRIVER {
PDRIVER_OBJECT DriverObject;
HANDLE ParametersKey;
HANDLE AddressesKey;
+ ULONG QueueMax;
} XENVIF_DRIVER, *PXENVIF_DRIVER;
static XENVIF_DRIVER Driver;
@@ -123,6 +124,33 @@ DriverGetAddressesKey(
return __DriverGetAddressesKey();
}
+static FORCEINLINE VOID
+__DriverSetQueueMax(
+ IN ULONG Count
+ )
+{
+ ULONG Processors;
+
+ Processors = KeQueryActiveProcessorCount(NULL);
+ Driver.QueueMax = Count > Processors ? Processors : Count;
+}
+
+static FORCEINLINE ULONG
+__DriverGetQueueMax(
+ VOID
+ )
+{
+ return Driver.QueueMax;
+}
+
+ULONG
+DriverGetQueueMax(
+ VOID
+ )
+{
+ return __DriverGetQueueMax();
+}
+
DRIVER_UNLOAD DriverUnload;
VOID
@@ -254,6 +282,7 @@ DriverEntry(
HANDLE ParametersKey;
HANDLE AddressesKey;
ULONG Index;
+ ULONG Queues;
NTSTATUS status;
ASSERT3P(__DriverGetDriverObject(), ==, NULL);
@@ -304,6 +333,13 @@ DriverEntry(
__DriverSetAddressesKey(AddressesKey);
+ status = RegistryQueryDwordValue(ParametersKey,
+ "MultiQueueMaxQueues",
+ &Queues);
+ if (!NT_SUCCESS(status))
+ Queues = MAXIMUM_PROCESSORS;
+ __DriverSetQueueMax(Queues);
+
RegistryCloseKey(ServiceKey);
DriverObject->DriverExtension->AddDevice = AddDevice;
diff --git a/src/xenvif/driver.h b/src/xenvif/driver.h
index cdef7d1..9375930 100644
--- a/src/xenvif/driver.h
+++ b/src/xenvif/driver.h
@@ -52,6 +52,11 @@ DriverGetAliasesKey(
VOID
);
+extern ULONG
+DriverGetQueueMax(
+ VOID
+ );
+
typedef struct _XENVIF_PDO XENVIF_PDO, *PXENVIF_PDO;
typedef struct _XENVIF_FDO XENVIF_FDO, *PXENVIF_FDO;
--
1.9.4.msysgit.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |