All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
@ 2025-12-12  6:44 Gustavo A. R. Silva
  2025-12-15 18:47 ` Wei Liu
  2025-12-18 19:42 ` Wei Liu
  0 siblings, 2 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2025-12-12  6:44 UTC (permalink / raw)
  To: K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Long Li
  Cc: linux-hyperv, linux-kernel, Gustavo A. R. Silva, linux-hardening

-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.

Use the new __TRAILING_OVERLAP() helper to fix the following warning:

include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]

This helper creates a union between a flexible-array member (FAM) and a
set of MEMBERS that would otherwise follow it.

This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
the FAM and the start of MEMBER aligned.

The static_assert() ensures this alignment remains, and it's
intentionally placed inmediately after the related structure --no
blank line in between.

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
---
 include/hyperv/hvgdk_mini.h | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
index 04b18d0e37af..30fbbde81c5c 100644
--- a/include/hyperv/hvgdk_mini.h
+++ b/include/hyperv/hvgdk_mini.h
@@ -578,9 +578,12 @@ struct hv_tlb_flush {	 /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
 struct hv_tlb_flush_ex {
 	u64 address_space;
 	u64 flags;
-	struct hv_vpset hv_vp_set;
-	u64 gva_list[];
+	__TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
+		u64 gva_list[];
+	);
 } __packed;
+static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
+	      offsetof(struct hv_tlb_flush_ex, gva_list));
 
 struct ms_hyperv_tsc_page {	 /* HV_REFERENCE_TSC_PAGE */
 	volatile u32 tsc_sequence;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
  2025-12-12  6:44 [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
@ 2025-12-15 18:47 ` Wei Liu
  2025-12-16  2:59   ` Gustavo A. R. Silva
  2025-12-18 19:42 ` Wei Liu
  1 sibling, 1 reply; 5+ messages in thread
From: Wei Liu @ 2025-12-15 18:47 UTC (permalink / raw)
  To: Gustavo A. R. Silva
  Cc: K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Long Li,
	linux-hyperv, linux-kernel, linux-hardening

On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
> getting ready to enable it, globally.
> 
> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
> 
> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
> 
> This helper creates a union between a flexible-array member (FAM) and a
> set of MEMBERS that would otherwise follow it.
> 
> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
> the FAM and the start of MEMBER aligned.
> 
> The static_assert() ensures this alignment remains, and it's
> intentionally placed inmediately after the related structure --no
> blank line in between.
> 
> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Gustavo, what is your build command? I would like to incorporate that
into my own build tests.

Thanks,
Wei

> ---
>  include/hyperv/hvgdk_mini.h | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
> index 04b18d0e37af..30fbbde81c5c 100644
> --- a/include/hyperv/hvgdk_mini.h
> +++ b/include/hyperv/hvgdk_mini.h
> @@ -578,9 +578,12 @@ struct hv_tlb_flush {	 /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
>  struct hv_tlb_flush_ex {
>  	u64 address_space;
>  	u64 flags;
> -	struct hv_vpset hv_vp_set;
> -	u64 gva_list[];
> +	__TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
> +		u64 gva_list[];
> +	);
>  } __packed;
> +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
> +	      offsetof(struct hv_tlb_flush_ex, gva_list));
>  
>  struct ms_hyperv_tsc_page {	 /* HV_REFERENCE_TSC_PAGE */
>  	volatile u32 tsc_sequence;
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
  2025-12-15 18:47 ` Wei Liu
@ 2025-12-16  2:59   ` Gustavo A. R. Silva
  0 siblings, 0 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2025-12-16  2:59 UTC (permalink / raw)
  To: Wei Liu, Gustavo A. R. Silva
  Cc: K. Y. Srinivasan, Haiyang Zhang, Dexuan Cui, Long Li,
	linux-hyperv, linux-kernel, linux-hardening



On 12/16/25 03:47, Wei Liu wrote:
> On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
>> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
>> getting ready to enable it, globally.
>>
>> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
>>
>> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>>
>> This helper creates a union between a flexible-array member (FAM) and a
>> set of MEMBERS that would otherwise follow it.
>>
>> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
>> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
>> the FAM and the start of MEMBER aligned.
>>
>> The static_assert() ensures this alignment remains, and it's
>> intentionally placed inmediately after the related structure --no
>> blank line in between.
>>
>> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
> 
> Gustavo, what is your build command? I would like to incorporate that
> into my own build tests.

I'm using the following patch (which is the one I'll actually submit
upstream once all these warnings are fixed).

diff --git a/Makefile b/Makefile
index e404e4767944..0d6a0d8f791b 100644
--- a/Makefile
+++ b/Makefile
@@ -1086,6 +1086,8 @@ KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
  # Allow including a tagged struct or union anonymously in another struct/union.
  KBUILD_CFLAGS += -fms-extensions

+KBUILD_CFLAGS += $(call cc-option, -Wflex-array-member-not-at-end)
+
  # disable invalid "can't wrap" optimizations for signed / pointers
  KBUILD_CFLAGS  += -fno-strict-overflow


Thanks
-Gustavo

> 
> Thanks,
> Wei
> 
>> ---
>>   include/hyperv/hvgdk_mini.h | 7 +++++--
>>   1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
>> index 04b18d0e37af..30fbbde81c5c 100644
>> --- a/include/hyperv/hvgdk_mini.h
>> +++ b/include/hyperv/hvgdk_mini.h
>> @@ -578,9 +578,12 @@ struct hv_tlb_flush {	 /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
>>   struct hv_tlb_flush_ex {
>>   	u64 address_space;
>>   	u64 flags;
>> -	struct hv_vpset hv_vp_set;
>> -	u64 gva_list[];
>> +	__TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
>> +		u64 gva_list[];
>> +	);
>>   } __packed;
>> +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
>> +	      offsetof(struct hv_tlb_flush_ex, gva_list));
>>   
>>   struct ms_hyperv_tsc_page {	 /* HV_REFERENCE_TSC_PAGE */
>>   	volatile u32 tsc_sequence;
>> -- 
>> 2.43.0
>>


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
  2025-12-12  6:44 [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
  2025-12-15 18:47 ` Wei Liu
@ 2025-12-18 19:42 ` Wei Liu
  2025-12-19  2:53   ` Gustavo A. R. Silva
  1 sibling, 1 reply; 5+ messages in thread
From: Wei Liu @ 2025-12-18 19:42 UTC (permalink / raw)
  To: Gustavo A. R. Silva
  Cc: K. Y. Srinivasan, Haiyang Zhang, Wei Liu, Dexuan Cui, Long Li,
	linux-hyperv, linux-kernel, linux-hardening

On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
> getting ready to enable it, globally.
> 
> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
> 
> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
> 
> This helper creates a union between a flexible-array member (FAM) and a
> set of MEMBERS that would otherwise follow it.
> 
> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
> the FAM and the start of MEMBER aligned.
> 
> The static_assert() ensures this alignment remains, and it's
> intentionally placed inmediately after the related structure --no
> blank line in between.
> 
> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>

Applied. I fixed a typo in the commit message ("inmediately" ->
"immediately").

Wei

> ---
>  include/hyperv/hvgdk_mini.h | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
> index 04b18d0e37af..30fbbde81c5c 100644
> --- a/include/hyperv/hvgdk_mini.h
> +++ b/include/hyperv/hvgdk_mini.h
> @@ -578,9 +578,12 @@ struct hv_tlb_flush {	 /* HV_INPUT_FLUSH_VIRTUAL_ADDRESS_LIST */
>  struct hv_tlb_flush_ex {
>  	u64 address_space;
>  	u64 flags;
> -	struct hv_vpset hv_vp_set;
> -	u64 gva_list[];
> +	__TRAILING_OVERLAP(struct hv_vpset, hv_vp_set, bank_contents, __packed,
> +		u64 gva_list[];
> +	);
>  } __packed;
> +static_assert(offsetof(struct hv_tlb_flush_ex, hv_vp_set.bank_contents) ==
> +	      offsetof(struct hv_tlb_flush_ex, gva_list));
>  
>  struct ms_hyperv_tsc_page {	 /* HV_REFERENCE_TSC_PAGE */
>  	volatile u32 tsc_sequence;
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning
  2025-12-18 19:42 ` Wei Liu
@ 2025-12-19  2:53   ` Gustavo A. R. Silva
  0 siblings, 0 replies; 5+ messages in thread
From: Gustavo A. R. Silva @ 2025-12-19  2:53 UTC (permalink / raw)
  To: Wei Liu, Gustavo A. R. Silva
  Cc: K. Y. Srinivasan, Haiyang Zhang, Dexuan Cui, Long Li,
	linux-hyperv, linux-kernel, linux-hardening



On 12/19/25 04:42, Wei Liu wrote:
> On Fri, Dec 12, 2025 at 03:44:50PM +0900, Gustavo A. R. Silva wrote:
>> -Wflex-array-member-not-at-end was introduced in GCC-14, and we are
>> getting ready to enable it, globally.
>>
>> Use the new __TRAILING_OVERLAP() helper to fix the following warning:
>>
>> include/hyperv/hvgdk_mini.h:581:25: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>>
>> This helper creates a union between a flexible-array member (FAM) and a
>> set of MEMBERS that would otherwise follow it.
>>
>> This overlays the trailing MEMBER u64 gva_list[]; onto the FAM
>> struct hv_tlb_flush_ex::hv_vp_set.bank_contents[], while keeping
>> the FAM and the start of MEMBER aligned.
>>
>> The static_assert() ensures this alignment remains, and it's
>> intentionally placed inmediately after the related structure --no
>> blank line in between.
>>
>> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
> 
> Applied. I fixed a typo in the commit message ("inmediately" ->
> "immediately").

Awesome. :)

Thanks
-Gustavo

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2025-12-19  2:53 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-12  6:44 [PATCH][next] hyperv: Avoid -Wflex-array-member-not-at-end warning Gustavo A. R. Silva
2025-12-15 18:47 ` Wei Liu
2025-12-16  2:59   ` Gustavo A. R. Silva
2025-12-18 19:42 ` Wei Liu
2025-12-19  2:53   ` Gustavo A. R. Silva

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.