Any EAL memory allocation often goes through eal_get_virtual_area()
function, which will print a warning whenever the resulting allocation
didn't match the specified address requirements. This is useful for
when we have requested a specific base virtual address, to let the user
know that the mapping has deviated from that address.

However, on Linux, we also have a default base address that's there to
ensure better chances of successful secondary process initialization,
as well as higher likelihood of the virtual areas to fit inside the
IOMMU address width. Because of this default base address, there are
warnings printed even when no base address was explicitly requested,
which can be confusing to the user.

Emit this warning with debug level unless base address was explicitly
requested by the user.

Cc: Damjan Marion <damar...@cisco.com>

Signed-off-by: Anatoly Burakov <anatoly.bura...@intel.com>
---

Notes:
    v2:
    - Fix the condition to not update the address incorrectly
    - Instead of removing the warning, let it have debug level unless base 
address
      was explicitly specified by the user
    
    I'm not entirely sure the trade off between user confusion and helpful debug
    information is worth it, but in my experience, i've stopped getting any 
emails
    about secondary processes a long time ago and this isn't a widely used 
feature,
    so i believe this is worth it.

 lib/librte_eal/common/eal_common_memory.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_memory.c 
b/lib/librte_eal/common/eal_common_memory.c
index 33917fa835..1b50c2099d 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -140,9 +140,19 @@ eal_get_virtual_area(void *requested_addr, size_t *size,
                return NULL;
        } else if (requested_addr != NULL && addr_is_hint &&
                        aligned_addr != requested_addr) {
-               RTE_LOG(WARNING, EAL, "WARNING! Base virtual address hint (%p 
!= %p) not respected!\n",
-                       requested_addr, aligned_addr);
-               RTE_LOG(WARNING, EAL, "   This may cause issues with mapping 
memory into secondary processes\n");
+               /*
+                * demote this warning to debug if we did not explicitly request
+                * a base virtual address.
+                */
+               if (internal_conf->base_virtaddr != 0) {
+                       RTE_LOG(WARNING, EAL, "WARNING! Base virtual address 
hint (%p != %p) not respected!\n",
+                               requested_addr, aligned_addr);
+                       RTE_LOG(WARNING, EAL, "   This may cause issues with 
mapping memory into secondary processes\n");
+               } else {
+                       RTE_LOG(DEBUG, EAL, "WARNING! Base virtual address hint 
(%p != %p) not respected!\n",
+                               requested_addr, aligned_addr);
+                       RTE_LOG(DEBUG, EAL, "   This may cause issues with 
mapping memory into secondary processes\n");
+               }
        } else if (next_baseaddr != NULL) {
                next_baseaddr = RTE_PTR_ADD(aligned_addr, *size);
        }
-- 
2.17.1

Reply via email to