summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--datapath-windows/ovsext/Util.c16
-rw-r--r--datapath-windows/ovsext/Util.h1
2 files changed, 17 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/Util.c b/datapath-windows/ovsext/Util.c
index 65dd1327a..14c4493b0 100644
--- a/datapath-windows/ovsext/Util.c
+++ b/datapath-windows/ovsext/Util.c
@@ -116,3 +116,19 @@ OvsCompareString(PVOID string1, PVOID string2)
RtlInitString(&str2, string2);
return RtlEqualString(&str1, &str2, FALSE);
}
+
+VOID *
+OvsAllocateMemoryPerCpu(size_t size, ULONG tag)
+{
+ VOID *ptr = NULL;
+ ULONG count = KeQueryActiveProcessorCountEx(ALL_PROCESSOR_GROUPS);
+
+ ASSERT(KeQueryActiveGroupCount() == 1);
+
+ ptr = OvsAllocateMemoryWithTag(count * size, tag);
+ if (ptr) {
+ RtlZeroMemory(ptr, count * size);
+ }
+
+ return ptr;
+}
diff --git a/datapath-windows/ovsext/Util.h b/datapath-windows/ovsext/Util.h
index a81c723b0..b2ec798e0 100644
--- a/datapath-windows/ovsext/Util.h
+++ b/datapath-windows/ovsext/Util.h
@@ -40,6 +40,7 @@
VOID *OvsAllocateMemory(size_t size);
VOID *OvsAllocateMemoryWithTag(size_t size, ULONG tag);
VOID *OvsAllocateAlignedMemory(size_t size, UINT16 align);
+VOID *OvsAllocateMemoryPerCpu(size_t size, ULONG tag);
VOID OvsFreeMemory(VOID *ptr);
VOID OvsFreeMemoryWithTag(VOID *ptr, ULONG tag);
VOID OvsFreeAlignedMemory(VOID *ptr);