[ snip]
>>> Yes, you will always get aligned addressess on your x86 Linux system
>>> that supports
>>> posix_memalign() call. The comment says what it says because it will
>>> make some memory allocation tricks in case posix_memalign() is not
>>> available (Windows, some MacOS, maybe some Linux systems (not sure))
>>> and the address will not be aligned it this case.
>>
>> I also verified the other case when posix_memalign isn't available and
>> even in that case it returns the address aligned on CACHE_LINE_SIZE
>> boundary. I will send out a patch to use  xzalloc_cacheline for allocating 
>> the
>memory.
>
>I don't know how you tested this, because it is impossible:
>
>       1. OVS allocates some memory:
>               base = xmalloc(...);
>
>       2. Rounds it up to the cache line start:
>               payload = (void **) ROUND_UP((uintptr_t) base,
>CACHE_LINE_SIZE);
>
>       3. Returns the pointer increased by 8 bytes:
>               return (char *) payload + MEM_ALIGN;
>
>So, unless you redefined MEM_ALIGN to zero, you will never get aligned
>memory address while allocating by xmalloc_cacheline() on system without
>posix_memalign().
>

Hmmm, I didn't set MEM_ALIGN to zero instead used below test code to get 
aligned addresses
when posix_memalign() isn't available.  We can't set MEM_ALIGN to zero so have 
to do this
hack to get aligned address and store the initial address (original address 
allocated by malloc) in a place before the
aligned location so that it can be freed  by later  call to free(). (I should 
have mentioned in my previous mail). 

-------------------------------------------------------------------------------------------------
    void **payload;
    void *base;

    base = xmalloc(CACHE_LINE_SIZE + size + MEM_ALIGN);
    /* Address aligned on CACHE_LINE_SIZE boundary. */
    payload = (void**)(((uintptr_t) base + CACHE_LINE_SIZE + MEM_ALIGN) &
                            ~(CACHE_LINE_SIZE - 1));
    /* Store the original address so it can be freed later. */
    payload[-1] = base;
    return (char *)payload;
-------------------------------------------------------------------------------------------------

- Bhanuprakash.
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to