> From: Tyler Retzlaff [mailto:roret...@linux.microsoft.com]
> Sent: Tuesday, 13 February 2024 19.48
> 
> On Tue, Feb 13, 2024 at 05:58:21PM +0100, Morten Brørup wrote:
> > > From: Tyler Retzlaff [mailto:roret...@linux.microsoft.com]
> > > Sent: Tuesday, 13 February 2024 07.46
> > >
> > > Replace the use of RTE_MARKER<x> with C11 anonymous unions to
> improve
> > > code portability between toolchains.
> >
> > How about combining the cacheline 0 marker and padding, like this:
> 
> this seems like a good suggestion i will evaluate it. at least it gets
> rid of all the extra nesting if there are no unforseen problems.
> 
> >
> >  struct rte_mbuf {
> > -   RTE_MARKER cacheline0;
> > +   union {
> > +           char cacheline0[RTE_CACHE_LINE_MIN_SIZE];
> >
> > +           struct {
> > -   void *buf_addr;           /**< Virtual address of segment buffer.
> */
> > +                   void *buf_addr; /**< Virtual address of segment
> buffer. */
> >  #if RTE_IOVA_IN_MBUF
> >
> >
> > You could do the same with the cacheline1 marker:
> 
> yeah, i wondered if i should. i'll do it since it does seem more
> consistent to just pad out both cachelines explicitly instead of just
> doing all but the last.
> 
> we probably don't need to align struct rte_mbuf type if we do since it
> will cause it to be naturally aligned to RTE_CACHE_LINE_MIN_SIZE.

We still need to align struct rte_mbuf to cache line size.
RTE_CACHE_LINE_MIN_SIZE is 64, like the cache line size on Intel arch,
but cache line size is 128 byte on POWER architecture and Apple M2.

Reply via email to