|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 1/2] receiver: Remove dependencies on HVM_MAX_VCPUS
XenNet can simply use KeQueryMaximumProcessorCountEx(
ALL_PROCESSOR_GROUPS) instead.
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
src/xennet/receiver.c | 52 ++++++++++++++++++++++++++++++++++++++-----
1 file changed, 46 insertions(+), 6 deletions(-)
diff --git a/src/xennet/receiver.c b/src/xennet/receiver.c
index 565d31b..91e344b 100644
--- a/src/xennet/receiver.c
+++ b/src/xennet/receiver.c
@@ -33,7 +33,6 @@
#include <ndis.h>
#include <procgrp.h>
#include <tcpip.h>
-#include <xen.h>
#include <ethernet.h>
#include "util.h"
@@ -53,8 +52,9 @@ struct _XENNET_RECEIVER {
PXENNET_ADAPTER Adapter;
NDIS_HANDLE NetBufferListPool;
PNET_BUFFER_LIST PutList;
- PNET_BUFFER_LIST GetList[HVM_MAX_VCPUS];
- XENNET_RECEIVER_QUEUE Queue[HVM_MAX_VCPUS];
+ ULONG Count;
+ PNET_BUFFER_LIST *GetList;
+ XENNET_RECEIVER_QUEUE *Queue;
LONG Indicated;
LONG Returned;
XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions;
@@ -500,6 +500,20 @@ ReceiverInitialize(
RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));
(*Receiver)->Adapter = Adapter;
+ (*Receiver)->Count = KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
+
+ (*Receiver)->GetList = __AllocatePoolWithTag(NonPagedPool,
+ (*Receiver)->Count *
sizeof(PNET_BUFFER_LIST),
+ RECEIVER_POOL_TAG);
+ if ((*Receiver)->GetList == NULL)
+ goto fail2;
+
+ (*Receiver)->Queue = __AllocatePoolWithTag(NonPagedPool,
+ (*Receiver)->Count *
sizeof(XENNET_RECEIVER_QUEUE),
+ RECEIVER_POOL_TAG);
+ if ((*Receiver)->Queue == NULL)
+ goto fail3;
+
RtlZeroMemory(&Params, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));
Params.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
Params.Header.Revision = NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1;
@@ -514,9 +528,9 @@ ReceiverInitialize(
status = NDIS_STATUS_RESOURCES;
if ((*Receiver)->NetBufferListPool == NULL)
- goto fail2;
+ goto fail4;
- for (Index = 0; Index < HVM_MAX_VCPUS; Index++) {
+ for (Index = 0; Index < (*Receiver)->Count; Index++) {
PXENNET_RECEIVER_QUEUE Queue = &(*Receiver)->Queue[Index];
KeInitializeSpinLock(&Queue->Lock);
@@ -524,8 +538,28 @@ ReceiverInitialize(
return NDIS_STATUS_SUCCESS;
+fail4:
+ Error("fail4\n");
+
+ __FreePoolWithTag((*Receiver)->Queue, RECEIVER_POOL_TAG);
+ (*Receiver)->Queue = NULL;
+
+fail3:
+ Error("fail3\n");
+
+ __FreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);
+ (*Receiver)->GetList = NULL;
+
fail2:
+ Error("fail2\n");
+
+ (*Receiver)->Count = 0;
+ __FreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);
+ *Receiver = NULL;
+
fail1:
+ Error("fail1 (%08x)\n", status);
+
return status;
}
@@ -541,7 +575,7 @@ ReceiverTeardown(
ASSERT3U(Receiver->Returned, ==, Receiver->Indicated);
- for (Index = 0; Index < HVM_MAX_VCPUS; Index++) {
+ for (Index = 0; Index < Receiver->Count; Index++) {
NetBufferList = Receiver->GetList[Index];
while (NetBufferList != NULL) {
@@ -571,6 +605,12 @@ ReceiverTeardown(
NdisFreeNetBufferListPool(Receiver->NetBufferListPool);
Receiver->NetBufferListPool = NULL;
+ __FreePoolWithTag(Receiver->Queue, RECEIVER_POOL_TAG);
+ Receiver->Queue = NULL;
+
+ __FreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);
+ Receiver->GetList = NULL;
+
Receiver->Adapter = NULL;
__FreePoolWithTag(Receiver, RECEIVER_POOL_TAG);
--
2.55.0.windows.3
--
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |