|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 04/10] Create a transmitter/receiver ring per max-queue
Reads "multi-queue-max-queues" from xenstore for frontend to report.
Creates a transmitter and receiver ring per queue (queues above 0 are not used)
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xenvif/frontend.c | 57 ++++++++++++++++++++++++++++++++++++++----------
src/xenvif/frontend.h | 5 +++++
src/xenvif/receiver.c | 3 +--
src/xenvif/receiver.h | 1 -
src/xenvif/transmitter.c | 3 +--
src/xenvif/transmitter.h | 1 -
6 files changed, 53 insertions(+), 17 deletions(-)
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 305faaf..9a6cbde 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -64,6 +64,7 @@ struct _XENVIF_FRONTEND {
PCHAR BackendPath;
USHORT BackendDomain;
+ ULONG MultiQueueCount;
PXENVIF_GRANTER Granter;
PXENVIF_NOTIFIER Notifier;
@@ -203,6 +204,22 @@ FrontendGetBackendDomain(
return __FrontendGetBackendDomain(Frontend);
}
+static FORCEINLINE ULONG
+__FrontendGetQueueCount(
+ IN PXENVIF_FRONTEND Frontend
+ )
+{
+ return Frontend->MultiQueueCount;
+}
+
+ULONG
+FrontendGetQueueCount(
+ IN PXENVIF_FRONTEND Frontend
+ )
+{
+ return __FrontendGetQueueCount(Frontend);
+}
+
#define DEFINE_FRONTEND_GET_FUNCTION(_Function, _Type) \
static FORCEINLINE _Type \
__FrontendGet ## _Function( \
@@ -1285,6 +1302,7 @@ __FrontendConnect(
PCHAR Path = __FrontendGetBackendPath(Frontend);
XenbusState State;
ULONG Attempt;
+ PCHAR Buffer;
NTSTATUS status;
Trace("====>\n");
@@ -1302,6 +1320,21 @@ __FrontendConnect(
if (!NT_SUCCESS(status))
goto fail2;
+ status = XENBUS_STORE(Read,
+ &Frontend->StoreInterface,
+ NULL,
+ __FrontendGetBackendPath(Frontend),
+ "multi-queue-max-queues",
+ &Buffer);
+ if (NT_SUCCESS(status)) {
+ Frontend->MultiQueueCount = (ULONG)strtol(Buffer, NULL, 10);
+ XENBUS_STORE(Free,
+ &Frontend->StoreInterface,
+ Buffer);
+ } else {
+ Frontend->MultiQueueCount = 1;
+ }
+
status = GranterConnect(__FrontendGetGranter(Frontend));
if (!NT_SUCCESS(status))
goto fail3;
@@ -1458,6 +1491,8 @@ __FrontendDisconnect(
MacDisconnect(__FrontendGetMac(Frontend));
GranterDisconnect(__FrontendGetGranter(Frontend));
+ Frontend->MultiQueueCount = 0;
+
XENBUS_DEBUG(Deregister,
&Frontend->DebugInterface,
Frontend->DebugCallback);
@@ -1894,19 +1929,19 @@ FrontendInitialize(
if (!NT_SUCCESS(status))
goto fail6;
- status = NotifierInitialize(*Frontend, &(*Frontend)->Notifier);
+ status = MacInitialize(*Frontend, &(*Frontend)->Mac);
if (!NT_SUCCESS(status))
goto fail7;
- status = MacInitialize(*Frontend, &(*Frontend)->Mac);
+ status = NotifierInitialize(*Frontend, &(*Frontend)->Notifier);
if (!NT_SUCCESS(status))
goto fail8;
- status = ReceiverInitialize(*Frontend, 1, &(*Frontend)->Receiver);
+ status = ReceiverInitialize(*Frontend, &(*Frontend)->Receiver);
if (!NT_SUCCESS(status))
goto fail9;
- status = TransmitterInitialize(*Frontend, 1, &(*Frontend)->Transmitter);
+ status = TransmitterInitialize(*Frontend, &(*Frontend)->Transmitter);
if (!NT_SUCCESS(status))
goto fail10;
@@ -1944,14 +1979,14 @@ fail10:
fail9:
Error("fail9\n");
- MacTeardown(__FrontendGetMac(*Frontend));
- (*Frontend)->Mac = NULL;
+ NotifierTeardown(__FrontendGetNotifier(*Frontend));
+ (*Frontend)->Notifier = NULL;
fail8:
Error("fail8\n");
- NotifierTeardown(__FrontendGetNotifier(*Frontend));
- (*Frontend)->Notifier = NULL;
+ MacTeardown(__FrontendGetMac(*Frontend));
+ (*Frontend)->Mac = NULL;
fail7:
Error("fail7\n");
@@ -2040,12 +2075,12 @@ FrontendTeardown(
ReceiverTeardown(__FrontendGetReceiver(Frontend));
Frontend->Receiver = NULL;
- MacTeardown(__FrontendGetMac(Frontend));
- Frontend->Mac = NULL;
-
NotifierTeardown(__FrontendGetNotifier(Frontend));
Frontend->Notifier = NULL;
+ MacTeardown(__FrontendGetMac(Frontend));
+ Frontend->Mac = NULL;
+
GranterTeardown(__FrontendGetGranter(Frontend));
Frontend->Granter = NULL;
diff --git a/src/xenvif/frontend.h b/src/xenvif/frontend.h
index 60c085a..20cd390 100644
--- a/src/xenvif/frontend.h
+++ b/src/xenvif/frontend.h
@@ -112,6 +112,11 @@ FrontendGetBackendDomain(
IN PXENVIF_FRONTEND Frontend
);
+extern ULONG
+FrontendGetQueueCount(
+ IN PXENVIF_FRONTEND Frontend
+ );
+
#include "granter.h"
extern PXENVIF_GRANTER
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 88ee07c..626feed 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -2298,7 +2298,6 @@ ReceiverDebugCallback(
NTSTATUS
ReceiverInitialize(
IN PXENVIF_FRONTEND Frontend,
- IN ULONG Count,
OUT PXENVIF_RECEIVER *Receiver
)
{
@@ -2385,7 +2384,7 @@ ReceiverInitialize(
goto fail2;
Index = 0;
- while (Index < Count) {
+ while (Index < DriverGetQueueMax()) {
PXENVIF_RECEIVER_RING Ring;
status = __ReceiverRingInitialize(*Receiver, Index, &Ring);
diff --git a/src/xenvif/receiver.h b/src/xenvif/receiver.h
index 0497c5b..8009858 100644
--- a/src/xenvif/receiver.h
+++ b/src/xenvif/receiver.h
@@ -43,7 +43,6 @@ typedef struct _XENVIF_RECEIVER XENVIF_RECEIVER,
*PXENVIF_RECEIVER;
extern NTSTATUS
ReceiverInitialize(
IN PXENVIF_FRONTEND Frontend,
- IN ULONG Count,
OUT PXENVIF_RECEIVER *Receiver
);
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 6fd542e..bea46f1 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -3308,7 +3308,6 @@ TransmitterDebugCallback(
NTSTATUS
TransmitterInitialize(
IN PXENVIF_FRONTEND Frontend,
- IN ULONG Count,
OUT PXENVIF_TRANSMITTER *Transmitter
)
{
@@ -3391,7 +3390,7 @@ TransmitterInitialize(
goto fail4;
Index = 0;
- while (Index < Count) {
+ while (Index < DriverGetQueueMax()) {
PXENVIF_TRANSMITTER_RING Ring;
status = __TransmitterRingInitialize(*Transmitter, Index, &Ring);
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index c359c20..7e10603 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -43,7 +43,6 @@ typedef struct _XENVIF_TRANSMITTER XENVIF_TRANSMITTER,
*PXENVIF_TRANSMITTER;
extern NTSTATUS
TransmitterInitialize(
IN PXENVIF_FRONTEND Frontend,
- IN ULONG Count,
OUT PXENVIF_TRANSMITTER *Transmitter
);
--
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 |