eal: fix type casting of value to align
authorJohn McNamara <john.mcnamara@intel.com>
Mon, 16 Mar 2015 17:05:06 +0000 (17:05 +0000)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 16 Mar 2015 23:46:01 +0000 (00:46 +0100)
Fix a warning when the rte_common.h header is included in a compilation
using  -Wbad-function-cast, such as in Open vSwitch where the
following warning is emitted repeatedly:

    ../rte_common.h: In function 'rte_is_aligned':
    ../rte_common.h:184:9: warning: cast from function call of
    type 'uintptr_t' to non-matching type 'void *' [-Wbad-function-cast]

This change fixes the issue in rte_common.h by using the RTE_ALIGN_FLOOR
macro to get the aligned floor value with generic type casting.

Also removed the rte_align_floor_int() function and replaced it with
the RTE_PTR_ALIGN_FLOOR() macro.

Signed-off-by: John McNamara <john.mcnamara@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
app/test/test_common.c
lib/librte_eal/common/include/rte_common.h
lib/librte_malloc/malloc_elem.c

index 4b71e7b..66e9109 100644 (file)
@@ -122,8 +122,8 @@ test_align(void)
 
                for (i = 1; i <= MAX_NUM; i++) {
                        /* align floor */
-                       if (rte_align_floor_int((uintptr_t)i, p) % p)
-                               FAIL_ALIGN("rte_align_floor_int", i, p);
+                       if (RTE_ALIGN_FLOOR((uintptr_t)i, p) % p)
+                               FAIL_ALIGN("RTE_ALIGN_FLOOR", i, p);
 
                        val = RTE_PTR_ALIGN_FLOOR((uintptr_t) i, p);
                        if (ERROR_FLOOR(val, i, p))
index 4971049..c0ab8b4 100644 (file)
@@ -93,25 +93,6 @@ extern "C" {
 
 /*********** Macros/static functions for doing alignment ********/
 
-/**
- * Function which rounds an unsigned int down to a given power-of-two value.
- * Takes uintptr_t types as parameters, as this type of operation is most
- * commonly done for pointer alignment. (See also RTE_ALIGN_FLOOR,
- * RTE_ALIGN_CEIL, RTE_ALIGN, RTE_PTR_ALIGN_FLOOR, RTE_PTR_ALIGN_CEL,
- * RTE_PTR_ALIGN macros)
- * @param ptr
- *   The value to be rounded down
- * @param align
- *   The power-of-two of which the result must be a multiple.
- * @return
- *   Function returns a properly aligned value where align is a power-of-two.
- *   If align is not a power-of-two, result will be incorrect.
- */
-static inline uintptr_t
-rte_align_floor_int(uintptr_t ptr, uintptr_t align)
-{
-       return (ptr & ~(align - 1));
-}
 
 /**
  * Macro to align a pointer to a given power-of-two. The resultant
@@ -120,7 +101,7 @@ rte_align_floor_int(uintptr_t ptr, uintptr_t align)
  * must be a power-of-two value.
  */
 #define RTE_PTR_ALIGN_FLOOR(ptr, align) \
-       (typeof(ptr))rte_align_floor_int((uintptr_t)ptr, align)
+       ((typeof(ptr))RTE_ALIGN_FLOOR((uintptr_t)ptr, align))
 
 /**
  * Macro to align a value to a given power-of-two. The resultant value
index fd0532e..a5e1248 100644 (file)
@@ -90,7 +90,7 @@ elem_start_pt(struct malloc_elem *elem, size_t size, unsigned align)
 {
        const uintptr_t end_pt = (uintptr_t)elem +
                        elem->size - MALLOC_ELEM_TRAILER_LEN;
-       const uintptr_t new_data_start = rte_align_floor_int((end_pt - size),align);
+       const uintptr_t new_data_start = RTE_ALIGN_FLOOR((end_pt - size), align);
        const uintptr_t new_elem_start = new_data_start - MALLOC_ELEM_HEADER_LEN;
 
        /* if the new start point is before the exist start, it won't fit */