On 31-Aug-18 1:50 PM, Alejandro Lucero wrote:
Linux kernel uses a really high address as starting address for
serving mmaps calls. If there exist addressing limitations and
IOVA mode is VA, this starting address is likely too high for
those devices. However, it is possible to use a lower address in
the process virtual address space as with 64 bits there is a lot
of available space.

This patch adds an address hint as starting address for 64 bits
systems.

Signed-off-by: Alejandro Lucero <alejandro.luc...@netronome.com>
---

<snip>

mapped_addr = mmap(requested_addr, (size_t)map_sz, PROT_READ,
                                mmap_flags, -1, 0);
+
                if (mapped_addr == MAP_FAILED && allow_shrink)

Unintended whitespace change?

                        *size -= page_sz;
-       } while (allow_shrink && mapped_addr == MAP_FAILED && *size > 0);
+
+               if (mapped_addr != MAP_FAILED && addr_is_hint &&
+                   mapped_addr != requested_addr) {
+                       /* hint was not used. Try with another offset */
+                       munmap(mapped_addr, map_sz);
+                       mapped_addr = MAP_FAILED;
+                       next_baseaddr = RTE_PTR_ADD(next_baseaddr, 0x100000000);

Why not increment by page size? Sure, it could take some more time to allocate, but will result in less wasted memory.

--
Thanks,
Anatoly

Reply via email to