* SUCH DAMAGE.
*/
-#include <ndis.h>
-#include <procgrp.h>
#include "receiver.h"
#include "adapter.h"
#include <util.h>
PXENNET_ADAPTER Adapter;
NDIS_HANDLE NetBufferListPool;
PNET_BUFFER_LIST PutList;
- PNET_BUFFER_LIST *GetList;
- ULONG GetListCount;
+ PNET_BUFFER_LIST GetList[MAXIMUM_PROCESSORS];
LONG InNDIS;
LONG InNDISMax;
XENVIF_VIF_OFFLOAD_OPTIONS OffloadOptions;
IN ULONG Length
)
{
- ULONG Index;
+ ULONG Cpu;
PNET_BUFFER_LIST NetBufferList;
- Index = KeGetCurrentProcessorNumberEx(NULL);
- ASSERT3U(Index, <, Receiver->GetListCount);
+ Cpu = KeGetCurrentProcessorNumber();
- NetBufferList = Receiver->GetList[Index];
+ NetBufferList = Receiver->GetList[Cpu];
- if (NetBufferList == NULL) {
- Receiver->GetList[Index] = InterlockedExchangePointer(&Receiver->PutList, NULL);
- NetBufferList = Receiver->GetList[Index];
- }
+ if (NetBufferList == NULL)
+ Receiver->GetList[Cpu] = InterlockedExchangePointer(&Receiver->PutList, NULL);
+
+ NetBufferList = Receiver->GetList[Cpu];
if (NetBufferList != NULL) {
PNET_BUFFER NetBuffer;
- Receiver->GetList[Index] = NET_BUFFER_LIST_NEXT_NBL(NetBufferList);
+ Receiver->GetList[Cpu] = NET_BUFFER_LIST_NEXT_NBL(NetBufferList);
NET_BUFFER_LIST_NEXT_NBL(NetBufferList) = NULL;
NetBuffer = NET_BUFFER_LIST_FIRST_NB(NetBufferList);
RtlZeroMemory(*Receiver, sizeof(XENNET_RECEIVER));
(*Receiver)->Adapter = Adapter;
- (*Receiver)->GetListCount = KeQueryActiveProcessorCountEx(ALL_PROCESSOR_GROUPS);
- (*Receiver)->GetList = ExAllocatePoolWithTag(NonPagedPool,
- sizeof(PNET_BUFFER_LIST) *
- (*Receiver)->GetListCount,
- RECEIVER_POOL_TAG);
-
- status = NDIS_STATUS_RESOURCES;
- if ((*Receiver)->GetList == NULL)
- goto fail2;
-
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;
status = NDIS_STATUS_RESOURCES;
if ((*Receiver)->NetBufferListPool == NULL)
- goto fail3;
+ goto fail2;
return NDIS_STATUS_SUCCESS;
-fail3:
- ExFreePoolWithTag((*Receiver)->GetList, RECEIVER_POOL_TAG);
- (*Receiver)->GetListCount = 0;
-
fail2:
- ExFreePoolWithTag(*Receiver, RECEIVER_POOL_TAG);
- *Receiver = NULL;
-
fail1:
return status;
}
IN PXENNET_RECEIVER Receiver
)
{
- ULONG Index;
- PNET_BUFFER_LIST NetBufferList;
+ ULONG Cpu;
+ PNET_BUFFER_LIST NetBufferList;
ASSERT(Receiver != NULL);
- for (Index = 0; Index < Receiver->GetListCount; Index++) {
- NetBufferList = Receiver->GetList[Index];
-
+ for (Cpu = 0; Cpu < MAXIMUM_PROCESSORS; Cpu++) {
+ NetBufferList = Receiver->GetList[Cpu];
while (NetBufferList != NULL) {
PNET_BUFFER_LIST Next;
NdisFreeNetBufferListPool(Receiver->NetBufferListPool);
Receiver->NetBufferListPool = NULL;
- ExFreePoolWithTag(Receiver->GetList, RECEIVER_POOL_TAG);
- Receiver->GetListCount = 0;
-
Receiver->Adapter = NULL;
ExFreePoolWithTag(Receiver, RECEIVER_POOL_TAG);
<Inputs>..\..\src\xennet.inf;..\..\include\version.hx</Inputs>
</CustomBuildStep>
<ClCompile>
- <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>EnableAllWarnings</WarningLevel>
<DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- <AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
</Link>
<Inf>
<Inputs>..\..\src\xennet.inf;..\..\include\version.hx</Inputs>
</CustomBuildStep>
<ClCompile>
- <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<WarningLevel>EnableAllWarnings</WarningLevel>
<DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
- <AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;$(DDK_LIB_PATH)\procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies>$(DDK_LIB_PATH)\ndis.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
</Link>
<Inf>