On 13-Jun-18 8:08 PM, Dariusz Stojaczyk wrote:
Although the alignment mechanism works as intended, the `no_align` bool flag was set incorrectly. We were aligning buffers that didn't need extra alignment, and weren't aligning ones that really needed it.Fixes: b7cc54187ea4 ("mem: move virtual area function in common directory") Cc: [email protected] Cc: [email protected] Signed-off-by: Dariusz Stojaczyk <[email protected]> --- lib/librte_eal/common/eal_common_memory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c index 4f0688f..a7c89f0 100644 --- a/lib/librte_eal/common/eal_common_memory.c +++ b/lib/librte_eal/common/eal_common_memory.c @@ -70,7 +70,7 @@ eal_get_virtual_area(void *requested_addr, size_t *size, * system page size is the same as requested page size. */ no_align = (requested_addr != NULL && - ((uintptr_t)requested_addr & (page_sz - 1)) == 0) || + ((uintptr_t)requested_addr & (page_sz - 1))) || page_sz == system_page_sz;do {
This patch is wrong - no alignment should be performed if address is already alighed, e.g. if requested_addr & (page_sz - 1) == 0. The original code was correct.
Thomas, could you please revert this patch? -- Thanks, Anatoly

