> From: Mattias Rönnblom [mailto:hof...@lysator.liu.se] > Sent: Friday, 26 January 2024 11.05 > > On 2024-01-25 23:53, Morten Brørup wrote: > >> From: Tyler Retzlaff [mailto:roret...@linux.microsoft.com] > >> Sent: Thursday, 25 January 2024 19.37 > >> > >> ping. > >> > >> Please review this thread if you have time, the main point of > >> discussion > >> I would like to receive consensus on the following questions. > >> > >> 1. Should we continue to expand common alignments behind an > __rte_macro > >> > >> i.e. what do we prefer to appear in code > >> > >> alignas(RTE_CACHE_LINE_MIN_SIZE) > >> > >> -- or -- > >> > >> __rte_cache_aligned > >> > >> One of the benefits of dropping the macro is it provides a clear > visual > >> indicator that it is not placed in the same location or get applied > >> to types as is done with __attribute__((__aligned__(n))). > > > > We don't want our own proprietary variant of something that already > exists in the C standard. Now that we have moved to C11, the __rte > alignment macros should be considered obsolete. > > Making so something cache-line aligned is not in C11.
We are talking about the __rte_aligned() macro, not the cache alignment macro. > > __rte_cache_aligned is shorter, provides a tiny bit of abstraction, and > is already an established DPDK standard. So just keep the macro. If it > would change, I would argue for it to be changed to rte_cache_aligned > (i.e., just moving it out of __ namespace, and maybe making it > all-uppercase). > > Non-trivial C programs wrap things all the time, standard or not. It's > not something to be overly concerned about, imo. Using the cache alignment macro was obviously a bad example for discussing the __rte_aligned() macro. FYI, Tyler later agreed to introducing the RTE_CACHE_ALIGNAS you had proposed in an earlier correspondence. > > > > > Note: I don't mind convenience macros for common use cases, so we > could also introduce the macro suggested by Mattias [1]: > > > > #define RTE_CACHE_ALIGNAS alignas(RTE_CACHE_LINE_SIZE) > > > > [1]: https://inbox.dpdk.org/dev/dc3f3131-38e6-4219-861e- > b31ec10c0...@lysator.liu.se/ > > > >> > >> 2. where should we place alignas(n) or __rte_macro (if we use a > macro) > >> > >> Should it be on the same line as the variable or field or on the > >> preceeding line? > >> > >> /* same line example struct */ > >> struct T { > >> /* alignas(64) applies to field0 *not* struct T type > declaration > >> */ > >> alignas(64) void *field0; > >> void *field1; > >> > >> ... other fields ... > >> > >> alignas(64) uint64_t field5; > >> uint32_t field6; > >> > >> ... more fields ... > >> > >> }; > >> > >> /* same line example array */ > >> alignas(64) static const uint32_t array[4] = { ... }; > >> > >> -- or -- > >> > >> /* preceeding line example struct */ > >> struct T { > >> /* alignas(64) applies to field0 *not* struct T type > declaration > >> */ > >> alignas(64) > >> void *field0; > >> void *field1; > >> > >> ... other fields ... > >> > >> alignas(64) > >> uint64_t field5; > >> uint32_t field6; > >> > >> ... more fields ... > >> > >> }; > >> > >> /* preceeding line example array */ > >> alignas(64) > >> static const uint32_t array[4] = { ... }; > >> > > > > Searching the net for what other projects do, I came across this > required placement [2]: > > > > uint64_t alignas(64) field5; > > > > [2]: > https://lore.kernel.org/buildroot/20230730000851.6faa3391@windsurf/T/ > > > > So let's follow the standard's intention and put them on the same > line. > > On an case-by-case basis, we can wrap lines if it improves > readability, like we do with function headers that have a lot of > attributes. > > > >> > >> I'll submit patches for lib/* once the discussion is concluded. > >> > >> thanks folks > >