On 4/28/2020 4:50 PM, Dmitry Kozlyuk wrote:
Basic memory management supports core libraries and PMDs operating in
IOVA as PA mode. It uses a kernel-mode driver, virt2phys, to obtain
IOVAs of hugepages allocated from user-mode. Multi-process mode is not
implemented and is forcefully disabled at startup.

Signed-off-by: Dmitry Kozlyuk <dmitry.kozl...@gmail.com>
---

[snip]

+void *
+eal_mem_reserve(void *requested_addr, size_t size, int flags)
+{
+       void *virt;
+
+       /* Windows requires hugepages to be committed. */
+       if (flags & EAL_RESERVE_HUGEPAGES) {
+               rte_errno = ENOTSUP;
+               return NULL;
+       }
+
+       virt = VirtualAlloc2(GetCurrentProcess(), requested_addr, size,
+               MEM_RESERVE | MEM_RESERVE_PLACEHOLDER, PAGE_NOACCESS,
+               NULL, 0);
+       if (virt == NULL) {
+               DWORD err = GetLastError();
+               RTE_LOG_WIN32_ERR("VirtualAlloc2()");
+               set_errno_from_win32_alloc_error(err);
+       }
+
+       if ((flags & EAL_RESERVE_FORCE_ADDRESS) && (virt != requested_addr)) {
+               if (!VirtualFree(virt, 0, MEM_RELEASE))

Shouldn't this be VirtualFreeEx() here?

+                       RTE_LOG_WIN32_ERR("VirtualFree()");
+               rte_errno = ENOMEM;
+               return NULL;
+       }
+
+       return virt;
+}
+

ranjit m.

Reply via email to