History

virtchnl: Add missing explicit padding to structures

On e.g. m68k, the alignment of 32-bit values is only 2 bytes, leading to the following: ./include/linux/avf/virtchnl.h:147:36: warning: division by zero [-Wdiv-by-zero] { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ ./include/linux/avf/virtchnl.h:577:1: note: in expansion of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter); ^~~~~~~~~~~~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:577:32: error: enumerator value for ‘virtchnl_static_assert_virtchnl_filter’ is not an integer constant VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter); ^~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:147:53: note: in definition of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ ./include/linux/avf/virtchnl.h:147:36: warning: division by zero [-Wdiv-by-zero] { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ ./include/linux/avf/virtchnl.h:619:1: note: in expansion of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_pf_event); ^~~~~~~~~~~~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:619:31: error: enumerator value for ‘virtchnl_static_assert_virtchnl_pf_event’ is not an integer constant VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_pf_event); ^~~~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:147:53: note: in definition of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ ./include/linux/avf/virtchnl.h:147:36: warning: division by zero [-Wdiv-by-zero] { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ ./include/linux/avf/virtchnl.h:640:1: note: in expansion of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_iwarp_qv_info); ^~~~~~~~~~~~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:640:31: error: enumerator value for ‘virtchnl_static_assert_virtchnl_iwarp_qv_info’ is not an integer constant VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_iwarp_qv_info); ^~~~~~~~~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:147:53: note: in definition of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ ./include/linux/avf/virtchnl.h:147:36: warning: division by zero [-Wdiv-by-zero] { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ ./include/linux/avf/virtchnl.h:647:1: note: in expansion of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_iwarp_qvlist_info); ^~~~~~~~~~~~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:647:31: error: enumerator value for ‘virtchnl_static_assert_virtchnl_iwarp_qvlist_info’ is not an integer constant VIRTCHNL_CHECK_STRUCT_LEN(16, virtchnl_iwarp_qvlist_info); ^~~~~~~~~~~~~~~~~~~~~~~~~~ ./include/linux/avf/virtchnl.h:147:53: note: in definition of macro ‘VIRTCHNL_CHECK_STRUCT_LEN’ { virtchnl_static_assert_##X = (n)/((sizeof(struct X) == (n)) ? 1 : 0) } ^ Fix this by adding explicit padding to structures with holes.

Geert Uytterhoeven committed 6 years ago

Commit 65ece6d1 parent 5757cc71 file · +5 −0Browse files

Showing the changes to include/linux (1 of 1 file). Show all

Unified · Split

include/linux/avf/virtchnl.h+5−0
@@ -476,6 +476,7 @@ struct virtchnl_rss_key { · 475 unmodified lines
476 u16 vsi_id;476 u16 vsi_id;
477 u16 key_len;477 u16 key_len;
478 u8 key[1]; /* RSS hash key, packed bytes */478 u8 key[1]; /* RSS hash key, packed bytes */
479 u8 pad[1];
479};480};
480 481
481VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_rss_key);482VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_rss_key);
@@ -484,6 +485,7 @@ struct virtchnl_rss_lut { · 2 unmodified lines
484 u16 vsi_id;485 u16 vsi_id;
485 u16 lut_entries;486 u16 lut_entries;
486 u8 lut[1]; /* RSS lookup table */487 u8 lut[1]; /* RSS lookup table */
488 u8 pad[1];
487};489};
488 490
489VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_rss_lut);491VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_rss_lut);
@@ -572,6 +574,7 @@ struct virtchnl_filter { · 82 unmodified lines
572 enum virtchnl_action action;574 enum virtchnl_action action;
573 u32 action_meta;575 u32 action_meta;
574 u8 field_flags;576 u8 field_flags;
577 u8 pad[3];
575};578};
576 579
577VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter);580VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter);
@@ -610,6 +613,7 @@ struct virtchnl_pf_event { · 32 unmodified lines
610 /* link_speed provided in Mbps */613 /* link_speed provided in Mbps */
611 u32 link_speed;614 u32 link_speed;
612 u8 link_status;615 u8 link_status;
616 u8 pad[3];
613 } link_event_adv;617 } link_event_adv;
614 } event_data;618 } event_data;
615 619
@@ -635,6 +639,7 @@ struct virtchnl_iwarp_qv_info { · 19 unmodified lines
635 u16 ceq_idx;639 u16 ceq_idx;
636 u16 aeq_idx;640 u16 aeq_idx;
637 u8 itr_idx;641 u8 itr_idx;
642 u8 pad[3];
638};643};
639 644
640VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_iwarp_qv_info);645VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_iwarp_qv_info);