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.
Showing the changes to include/linux (1 of 1 file). Show all
Unified · Split
| @@ -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 | ||
| 481 | VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_rss_key); | 482 | VIRTCHNL_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 | ||
| 489 | VIRTCHNL_CHECK_STRUCT_LEN(6, virtchnl_rss_lut); | 491 | VIRTCHNL_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 | ||
| 577 | VIRTCHNL_CHECK_STRUCT_LEN(272, virtchnl_filter); | 580 | VIRTCHNL_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 | ||
| 640 | VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_iwarp_qv_info); | 645 | VIRTCHNL_CHECK_STRUCT_LEN(12, virtchnl_iwarp_qv_info); |