From 0f1631be24bd72a512ca39eb4b8b49580ab4983a Mon Sep 17 00:00:00 2001 From: Anatoly Burakov Date: Fri, 27 Apr 2018 17:38:21 +0100 Subject: [PATCH] mem: fix page fault trigger Coverity reports these lines as having no effect. Technically, we do want for those lines to have no effect, however they would've likely been optimized out. Add volatile qualifiers to ensure the code has effects. Coverity issue: 272608 Fixes: 582bed1e1d1d ("mem: support mapping hugepages at runtime") Signed-off-by: Anatoly Burakov Acked-by: Bruce Richardson --- lib/librte_eal/linuxapp/eal/eal_memalloc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c index 559e3f29c0..f94f3885d0 100644 --- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c +++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c @@ -504,7 +504,12 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id, if (!internal_config.single_file_segments) close(fd); - *(int *)addr = *(int *)addr; + /* we need to trigger a write to the page to enforce page fault and + * ensure that page is accessible to us, but we can't overwrite value + * that is already there, so read the old value, and write itback. + * kernel populates the page with zeroes initially. + */ + *(volatile int *)addr = *(volatile int *)addr; ms->addr = addr; ms->hugepage_sz = alloc_sz; -- 2.20.1