[dpdk-dev] ring: fix build with icc

Message ID 20170405150312.20960-1-ferruh.yigit@intel.com (mailing list archive)
State Accepted, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Ferruh Yigit April 5, 2017, 3:03 p.m. UTC
  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

Thomas Monjalon April 5, 2017, 3:29 p.m. UTC | #1
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?
  
Bruce Richardson April 5, 2017, 3:56 p.m. UTC | #2
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
  
Bruce Richardson April 5, 2017, 4:13 p.m. UTC | #3
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>
  
Thomas Monjalon April 5, 2017, 4:15 p.m. UTC | #4
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
  

Patch

diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h
index 6642e18..28b7b2a 100644
--- a/lib/librte_ring/rte_ring.h
+++ b/lib/librte_ring/rte_ring.h
@@ -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". */