Skip to content

Commit

Permalink
netdev-dpdk: Fixed netdev_dpdk structure alignment
Browse files Browse the repository at this point in the history
Currently, the code tells us we have 4 pad bytes left in cacheline0
while actually we are 8 bytes short:

struct netdev_dpdk {
	union {
		OVS_CACHE_LINE_MARKER cacheline0;        /*           1 */
		struct {
			dpdk_port_t port_id;             /*     0     2 */
			_Bool      attached;             /*     2     1 */
			struct eth_addr hwaddr;          /*     4     6 */
			int        mtu;                  /*    12     4 */
			int        socket_id;            /*    16     4 */
			int        buf_size;             /*    20     4 */
			int        max_packet_len;       /*    24     4 */
			enum dpdk_dev_type type;         /*    28     4 */
			enum netdev_flags flags;         /*    32     4 */
			char *     devargs;              /*    40     8 */
			struct dpdk_tx_queue * tx_q;     /*    48     8 */
			struct rte_eth_link link;        /*    56     8 */
			int        link_reset_cnt;       /*    64     4 */
		};                                       /*          72 */
		uint8_t            pad9[128];            /*         128 */
	};                                               /*     0   128 */
	/* --- cacheline 2 boundary (128 bytes) --- */

Re-located one member, link_reset_cnt, and now it's one cache line:

struct netdev_dpdk {
	union {
		OVS_CACHE_LINE_MARKER cacheline0;        /*           1 */
		struct {
			dpdk_port_t port_id;             /*     0     2 */
			_Bool      attached;             /*     2     1 */
			struct eth_addr hwaddr;          /*     4     6 */
			int        mtu;                  /*    12     4 */
			int        socket_id;            /*    16     4 */
			int        buf_size;             /*    20     4 */
			int        max_packet_len;       /*    24     4 */
			enum dpdk_dev_type type;         /*    28     4 */
			enum netdev_flags flags;         /*    32     4 */
			int        link_reset_cnt;       /*    36     4 */
			char *     devargs;              /*    40     8 */
			struct dpdk_tx_queue * tx_q;     /*    48     8 */
			struct rte_eth_link link;        /*    56     8 */
		};                                       /*          64 */
		uint8_t            pad9[64];             /*          64 */
	};                                               /*     0    64 */
	/* --- cacheline 1 boundary (64 bytes) --- */

Fixes: 5e925cc ("netdev-dpdk: DPDK v17.11 upgrade")
Signed-off-by: Eelco Chaudron <echaudro@redhat.com>
Acked-by: Tiago Lam <tiago.lam@intel.com>
Signed-off-by: Ian Stokes <ian.stokes@intel.com>
  • Loading branch information
chaudron authored and istokes committed May 11, 2018
1 parent db136da commit 00e56c5
Showing 1 changed file with 1 addition and 2 deletions.
3 changes: 1 addition & 2 deletions lib/netdev-dpdk.c
Expand Up @@ -387,11 +387,10 @@ struct netdev_dpdk {
int max_packet_len;
enum dpdk_dev_type type;
enum netdev_flags flags;
int link_reset_cnt;
char *devargs; /* Device arguments for dpdk ports */
struct dpdk_tx_queue *tx_q;
struct rte_eth_link link;
int link_reset_cnt;
/* 4 pad bytes here. */
);

PADDED_MEMBERS_CACHELINE_MARKER(CACHE_LINE_SIZE, cacheline1,
Expand Down

0 comments on commit 00e56c5

Please sign in to comment.