diff options
author | Sorin Vinturis <svinturis@cloudbasesolutions.com> | 2016-03-25 14:49:26 +0000 |
---|---|---|
committer | Ben Pfaff <blp@ovn.org> | 2016-03-25 08:24:31 -0700 |
commit | a0045b428f1e6c20fd8a31dec22d7f16ffef86f3 (patch) | |
tree | a96cba076e75a86d4a652dee3aa6612011dcdd59 | |
parent | e59a59bddcbef2597cd0279a772eb18edd748b50 (diff) | |
download | openvswitch-a0045b428f1e6c20fd8a31dec22d7f16ffef86f3.tar.gz |
datapath-windows: Percpu allocation support function
Signed-off-by: Sorin Vinturis <svinturis@cloudbasesolutions.com>
Co-authored-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
-rw-r--r-- | datapath-windows/ovsext/Util.c | 16 | ||||
-rw-r--r-- | datapath-windows/ovsext/Util.h | 1 |
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); |