[dpdk-dev] ring: fix build with icc
Checks
Commit Message
build error:
In file included from .../lib/librte_ring/rte_ring.c(90):
.../lib/librte_ring/rte_ring.h(162):
error #1366: a reduction in alignment without the "packed" attribute
is ignored
} __rte_cache_aligned;
^
Alignment attribute moved to first element of the struct
Fixes: a6619414e0a9 ("ring: make struct and macros type agnostic")
Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
lib/librte_ring/rte_ring.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Comments
2017-04-05 16:03, Ferruh Yigit:
> build error:
> In file included from .../lib/librte_ring/rte_ring.c(90):
> .../lib/librte_ring/rte_ring.h(162):
> error #1366: a reduction in alignment without the "packed" attribute
> is ignored
> } __rte_cache_aligned;
> ^
>
> Alignment attribute moved to first element of the struct
The fix is surprising.
Is it really doing the same thing as
} __rte_cache_aligned;
at the end of the struct?
On Wed, Apr 05, 2017 at 05:29:48PM +0200, Thomas Monjalon wrote:
> 2017-04-05 16:03, Ferruh Yigit:
> > build error:
> > In file included from .../lib/librte_ring/rte_ring.c(90):
> > .../lib/librte_ring/rte_ring.h(162):
> > error #1366: a reduction in alignment without the "packed" attribute
> > is ignored
> > } __rte_cache_aligned;
> > ^
> >
> > Alignment attribute moved to first element of the struct
>
> The fix is surprising.
> Is it really doing the same thing as
> } __rte_cache_aligned;
> at the end of the struct?
>
It should be. Aligning the whole structure to start on a cache-line
boundary should be exactly the same as telling the compiler to put
the first field of the structure on a cacheline boundary.
/Bruce
On Wed, Apr 05, 2017 at 04:03:12PM +0100, Ferruh Yigit wrote:
> build error:
> In file included from .../lib/librte_ring/rte_ring.c(90):
> .../lib/librte_ring/rte_ring.h(162):
> error #1366: a reduction in alignment without the "packed" attribute
> is ignored
> } __rte_cache_aligned;
> ^
>
> Alignment attribute moved to first element of the struct
>
> Fixes: a6619414e0a9 ("ring: make struct and macros type agnostic")
>
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
Patch looks ok to me
Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
2017-04-05 17:13, Bruce Richardson:
> On Wed, Apr 05, 2017 at 04:03:12PM +0100, Ferruh Yigit wrote:
> > build error:
> > In file included from .../lib/librte_ring/rte_ring.c(90):
> > .../lib/librte_ring/rte_ring.h(162):
> > error #1366: a reduction in alignment without the "packed" attribute
> > is ignored
> > } __rte_cache_aligned;
> > ^
> >
> > Alignment attribute moved to first element of the struct
> >
> > Fixes: a6619414e0a9 ("ring: make struct and macros type agnostic")
> >
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> > ---
> Patch looks ok to me
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Applied, thanks
@@ -147,7 +147,7 @@ struct rte_ring {
* compatibility requirements, it could be changed to RTE_RING_NAMESIZE
* next time the ABI changes
*/
- char name[RTE_MEMZONE_NAMESIZE]; /**< Name of the ring. */
+ char name[RTE_MEMZONE_NAMESIZE] __rte_cache_aligned; /**< Name of the ring. */
int flags; /**< Flags supplied at creation. */
const struct rte_memzone *memzone;
/**< Memzone, if any, containing the rte_ring */
@@ -159,7 +159,7 @@ struct rte_ring {
/** Ring consumer status. */
struct rte_ring_headtail cons __rte_aligned(CONS_ALIGN);
-} __rte_cache_aligned;
+};
#define RING_F_SP_ENQ 0x0001 /**< The default enqueue is "single-producer". */
#define RING_F_SC_DEQ 0x0002 /**< The default dequeue is "single-consumer". */