mem: do not advertise physical address when no hugepages
authorOlivier Matz <olivier.matz@6wind.com>
Mon, 3 Jul 2017 10:04:07 +0000 (12:04 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 4 Jul 2017 15:51:22 +0000 (17:51 +0200)
commitad10c178210e11bfa468f7f5ecca597644d2eb34
tree746ae25ac6aeab0fa590fb3f474e1b5569609c5d
parent5df1c51033506513a2e7a318bb2aec641ff0b53a
mem: do not advertise physical address when no hugepages

When populating a mempool with a virtual memory area, the mempool
library expects to be able to get the physical address of each page.

When started with --no-huge, the physical addresses may not be available
because the pages are not locked in memory. It sometimes returns
RTE_BAD_PHYS_ADDR, which makes the mempool_populate() function to fail.

This was working before the commit cdc242f260e7 ("eal/linux: support
running as unprivileged user"), because rte_mem_virt2phy() was returning
0 instead of RTE_BAD_PHYS_ADDR, which was seen as a valid physical
address.

Since --no-huge is a debug function that breaks the support of physical
drivers, always set physical addresses to RTE_BAD_PHYS_ADDR in memzones
or in rte_mem_virt2phy(), and ensure that mempool won't complain in that
case.

Fixes: cdc242f260e7 ("eal/linux: support running as unprivileged user")
Cc: stable@dpdk.org
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Reviewed-by: Jan Blunck <jblunck@infradead.org>
lib/librte_eal/common/include/rte_malloc.h
lib/librte_eal/common/rte_malloc.c
lib/librte_eal/linuxapp/eal/eal_memory.c
lib/librte_mempool/rte_mempool.c