|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 07/10] Write queue values under <frontend>/queue-<id> and "multi-queue-num-queues"
When multi-queues are used, queue event-channel and ring-refs are written under
"device/vif/<number>/queue-<id>". When the number of active queues is 1, write
the event-channel and ring-refs inder "device/vif/<number>" as before.
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xenvif/frontend.c | 34 ++++++++++++++++++++++++++++++++++
src/xenvif/frontend.h | 8 ++++++++
src/xenvif/notifier.c | 8 +++++++-
src/xenvif/receiver.c | 6 +++++-
src/xenvif/transmitter.c | 6 +++++-
5 files changed, 59 insertions(+), 3 deletions(-)
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index 9a6cbde..846b051 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -156,6 +156,30 @@ FrontendGetPath(
return __FrontendGetPath(Frontend);
}
+PCHAR
+FrontendGetQueuePath(
+ IN PXENVIF_FRONTEND Frontend,
+ IN ULONG Index,
+ IN PCHAR Buffer,
+ IN ULONG Length
+ )
+{
+ if (Frontend->MultiQueueCount == 1) {
+ return __FrontendGetPath(Frontend);
+ } else {
+ NTSTATUS status;
+
+ status = RtlStringCbPrintfA(Buffer,
+ Length,
+ "%s/queue-%u",
+ __FrontendGetPath(Frontend),
+ Index);
+ ASSERT(NT_SUCCESS(status));
+
+ return Buffer;
+ }
+}
+
static FORCEINLINE PCHAR
__FrontendGetPrefix(
IN PXENVIF_FRONTEND Frontend
@@ -1380,6 +1404,16 @@ __FrontendConnect(
if (!NT_SUCCESS(status))
goto abort;
+ status = XENBUS_STORE(Printf,
+ &Frontend->StoreInterface,
+ Transaction,
+ __FrontendGetPath(Frontend),
+ "multi-queue-num-queues",
+ "%u",
+ __FrontendGetQueueCount(Frontend));
+ if (!NT_SUCCESS(status))
+ goto abort;
+
status = XENBUS_STORE(TransactionEnd,
&Frontend->StoreInterface,
Transaction,
diff --git a/src/xenvif/frontend.h b/src/xenvif/frontend.h
index 20cd390..75cb4a0 100644
--- a/src/xenvif/frontend.h
+++ b/src/xenvif/frontend.h
@@ -103,6 +103,14 @@ FrontendGetPath(
);
extern PCHAR
+FrontendGetQueuePath(
+ IN PXENVIF_FRONTEND Frontend,
+ IN ULONG Index,
+ IN PCHAR Buffer,
+ IN ULONG Length
+ );
+
+extern PCHAR
FrontendGetBackendPath(
IN PXENVIF_FRONTEND Frontend
);
diff --git a/src/xenvif/notifier.c b/src/xenvif/notifier.c
index 02a11d8..573ffaa 100644
--- a/src/xenvif/notifier.c
+++ b/src/xenvif/notifier.c
@@ -224,6 +224,8 @@ PKSERVICE_ROUTINE NotifierQueueEvtchnCallback[] = {
C_ASSERT(ARRAYSIZE(NotifierQueueEvtchnCallback) ==
XENVIF_NOTIFIER_EVTCHN_COUNT);
+#define MAX_BUFFER 128
+
static VOID
NotifierQueueDebugCallback(
IN PXENVIF_NOTIFIER_QUEUE Queue
@@ -346,6 +348,7 @@ NotifierQueueStoreWrite(
for (Index = 0; Index < XENVIF_NOTIFIER_EVTCHN_COUNT; Index++) {
PCHAR Node;
ULONG Port;
+ CHAR Buffer[MAX_BUFFER];
switch (Index) {
case XENVIF_NOTIFIER_EVTCHN_COMBINED:
@@ -383,7 +386,10 @@ NotifierQueueStoreWrite(
status = XENBUS_STORE(Printf,
&Notifier->StoreInterface,
Transaction,
- FrontendGetPath(Frontend),
+ FrontendGetQueuePath(Frontend,
+ Queue->Index,
+ Buffer,
+ sizeof(Buffer)),
Node,
"%u",
Port);
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 4d7f19b..01ab248 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -2101,6 +2101,7 @@ __ReceiverRingStoreWrite(
{
PXENVIF_RECEIVER Receiver;
PXENVIF_FRONTEND Frontend;
+ CHAR Buffer[MAXNAMELEN];
NTSTATUS status;
Receiver = Ring->Receiver;
@@ -2109,7 +2110,10 @@ __ReceiverRingStoreWrite(
status = XENBUS_STORE(Printf,
&Receiver->StoreInterface,
Transaction,
- FrontendGetPath(Frontend),
+ FrontendGetQueuePath(Frontend,
+ Ring->Index,
+ Buffer,
+ sizeof(Buffer)),
"rx-ring-ref",
"%u",
GranterGetReference(FrontendGetGranter(Frontend),
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index c5b05b3..f1a3e9e 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -2956,6 +2956,7 @@ __TransmitterRingStoreWrite(
{
PXENVIF_TRANSMITTER Transmitter;
PXENVIF_FRONTEND Frontend;
+ CHAR Buffer[MAXNAMELEN];
NTSTATUS status;
Transmitter = Ring->Transmitter;
@@ -2964,7 +2965,10 @@ __TransmitterRingStoreWrite(
status = XENBUS_STORE(Printf,
&Transmitter->StoreInterface,
Transaction,
- FrontendGetPath(Frontend),
+ FrontendGetQueuePath(Frontend,
+ Ring->Index,
+ Buffer,
+ sizeof(Buffer)),
"tx-ring-ref",
"%u",
GranterGetReference(FrontendGetGranter(Frontend),
--
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 |