Skip to content

Commit f7ef7ff

Browse files
committed
[HALX86:DMA] HACK: Avoid excessive stack usage
CORE-17256
1 parent 7b1db78 commit f7ef7ff

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

hal/halx86/generic/dma.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
#define NDEBUG
7878
#include <debug.h>
7979

80-
#define MAX_SG_ELEMENTS 0x10
80+
#define MAX_SG_ELEMENTS 0x20
8181

8282
#ifndef _MINIHAL_
8383
static KEVENT HalpDmaLock;
@@ -993,13 +993,16 @@ HalpScatterGatherAdapterControl(IN PDEVICE_OBJECT DeviceObject,
993993
PSCATTER_GATHER_CONTEXT AdapterControlContext = Context;
994994
PADAPTER_OBJECT AdapterObject = AdapterControlContext->AdapterObject;
995995
PSCATTER_GATHER_LIST ScatterGatherList;
996-
SCATTER_GATHER_ELEMENT TempElements[MAX_SG_ELEMENTS];
996+
PSCATTER_GATHER_ELEMENT TempElements;
997997
ULONG ElementCount = 0, RemainingLength = AdapterControlContext->Length;
998998
PUCHAR CurrentVa = AdapterControlContext->CurrentVa;
999999

10001000
/* Store the map register base for later in HalPutScatterGatherList */
10011001
AdapterControlContext->MapRegisterBase = MapRegisterBase;
10021002

1003+
TempElements = ExAllocatePoolZero(NonPagedPool, sizeof(*TempElements) * MAX_SG_ELEMENTS, TAG_DMA);
1004+
ASSERT(TempElements);
1005+
10031006
while (RemainingLength > 0 && ElementCount < MAX_SG_ELEMENTS)
10041007
{
10051008
TempElements[ElementCount].Length = RemainingLength;
@@ -1039,6 +1042,8 @@ HalpScatterGatherAdapterControl(IN PDEVICE_OBJECT DeviceObject,
10391042
TempElements,
10401043
sizeof(SCATTER_GATHER_ELEMENT) * ElementCount);
10411044

1045+
ExFreePoolWithTag(TempElements, TAG_DMA);
1046+
10421047
DPRINT("Initiating S/G DMA with %d element(s)\n", ElementCount);
10431048

10441049
AdapterControlContext->AdapterListControlRoutine(DeviceObject,

0 commit comments

Comments
 (0)