drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-)
Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
a flexible structure where the size of the flexible-array member
is known at compile-time, and refactor the rest of the code,
accordingly.
So, with this, fix the following warning:
drivers/gpu/drm/nouveau/dispnv50/disp.c:779:47: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
---
drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
index eed579a6c858..ddddc69640be 100644
--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
+++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
@@ -774,11 +774,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
struct drm_hdmi_info *hdmi = &nv_connector->base.display_info.hdmi;
union hdmi_infoframe infoframe = { 0 };
const u8 rekey = 56; /* binary driver, and tegra, constant */
+ DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, 17);
+ const u8 data_len = 17; /* same length as in DEFINE_RAW_FLEX above. */
u32 max_ac_packet;
- struct {
- struct nvif_outp_infoframe_v0 infoframe;
- u8 data[17];
- } args = { 0 };
int ret, size;
max_ac_packet = mode->htotal - mode->hdisplay;
@@ -815,29 +813,29 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
return;
/* AVI InfoFrame. */
- args.infoframe.version = 0;
- args.infoframe.head = nv_crtc->index;
+ args->version = 0;
+ args->head = nv_crtc->index;
if (!drm_hdmi_avi_infoframe_from_display_mode(&infoframe.avi, &nv_connector->base, mode)) {
drm_hdmi_avi_infoframe_quant_range(&infoframe.avi, &nv_connector->base, mode,
HDMI_QUANTIZATION_RANGE_FULL);
- size = hdmi_infoframe_pack(&infoframe, args.data, ARRAY_SIZE(args.data));
+ size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
} else {
size = 0;
}
- nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, &args.infoframe, size);
+ nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, args, size);
/* Vendor InfoFrame. */
- memset(&args.data, 0, sizeof(args.data));
+ memset(args->data, 0, data_len);
if (!drm_hdmi_vendor_infoframe_from_display_mode(&infoframe.vendor.hdmi,
&nv_connector->base, mode))
- size = hdmi_infoframe_pack(&infoframe, args.data, ARRAY_SIZE(args.data));
+ size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
else
size = 0;
- nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, &args.infoframe, size);
+ nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, args, size);
nv_encoder->hdmi.enabled = true;
}
--
2.34.1
Hi all,
Friendly ping: who can take this, please? 🙂
Thanks
-Gustavo
On 21/08/24 22:16, Gustavo A. R. Silva wrote:
> Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
> a flexible structure where the size of the flexible-array member
> is known at compile-time, and refactor the rest of the code,
> accordingly.
>
> So, with this, fix the following warning:
>
> drivers/gpu/drm/nouveau/dispnv50/disp.c:779:47: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>
> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
> ---
> drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++-----------
> 1 file changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> index eed579a6c858..ddddc69640be 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> @@ -774,11 +774,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
> struct drm_hdmi_info *hdmi = &nv_connector->base.display_info.hdmi;
> union hdmi_infoframe infoframe = { 0 };
> const u8 rekey = 56; /* binary driver, and tegra, constant */
> + DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, 17);
> + const u8 data_len = 17; /* same length as in DEFINE_RAW_FLEX above. */
> u32 max_ac_packet;
> - struct {
> - struct nvif_outp_infoframe_v0 infoframe;
> - u8 data[17];
> - } args = { 0 };
> int ret, size;
>
> max_ac_packet = mode->htotal - mode->hdisplay;
> @@ -815,29 +813,29 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
> return;
>
> /* AVI InfoFrame. */
> - args.infoframe.version = 0;
> - args.infoframe.head = nv_crtc->index;
> + args->version = 0;
> + args->head = nv_crtc->index;
>
> if (!drm_hdmi_avi_infoframe_from_display_mode(&infoframe.avi, &nv_connector->base, mode)) {
> drm_hdmi_avi_infoframe_quant_range(&infoframe.avi, &nv_connector->base, mode,
> HDMI_QUANTIZATION_RANGE_FULL);
>
> - size = hdmi_infoframe_pack(&infoframe, args.data, ARRAY_SIZE(args.data));
> + size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
> } else {
> size = 0;
> }
>
> - nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, &args.infoframe, size);
> + nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, args, size);
>
> /* Vendor InfoFrame. */
> - memset(&args.data, 0, sizeof(args.data));
> + memset(args->data, 0, data_len);
> if (!drm_hdmi_vendor_infoframe_from_display_mode(&infoframe.vendor.hdmi,
> &nv_connector->base, mode))
> - size = hdmi_infoframe_pack(&infoframe, args.data, ARRAY_SIZE(args.data));
> + size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
> else
> size = 0;
>
> - nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, &args.infoframe, size);
> + nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, args, size);
>
> nv_encoder->hdmi.enabled = true;
> }
Hi,
On 9/13/24 10:09 AM, Gustavo A. R. Silva wrote:
> Hi all,
>
> Friendly ping: who can take this, please? 🙂
Usually, that's me. But I thought you might want to send a v2 based on Kees'
comments?
- Danilo
>
> Thanks
> -Gustavo
>
> On 21/08/24 22:16, Gustavo A. R. Silva wrote:
>> Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
>> a flexible structure where the size of the flexible-array member
>> is known at compile-time, and refactor the rest of the code,
>> accordingly.
>>
>> So, with this, fix the following warning:
>>
>> drivers/gpu/drm/nouveau/dispnv50/disp.c:779:47: warning: structure containing
>> a flexible array member is not at the end of another structure
>> [-Wflex-array-member-not-at-end]
>>
>> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
>> ---
>> drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++-----------
>> 1 file changed, 9 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> b/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> index eed579a6c858..ddddc69640be 100644
>> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> @@ -774,11 +774,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct
>> nouveau_crtc *nv_crtc,
>> struct drm_hdmi_info *hdmi = &nv_connector->base.display_info.hdmi;
>> union hdmi_infoframe infoframe = { 0 };
>> const u8 rekey = 56; /* binary driver, and tegra, constant */
>> + DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, 17);
>> + const u8 data_len = 17; /* same length as in DEFINE_RAW_FLEX above. */
>> u32 max_ac_packet;
>> - struct {
>> - struct nvif_outp_infoframe_v0 infoframe;
>> - u8 data[17];
>> - } args = { 0 };
>> int ret, size;
>> max_ac_packet = mode->htotal - mode->hdisplay;
>> @@ -815,29 +813,29 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct
>> nouveau_crtc *nv_crtc,
>> return;
>> /* AVI InfoFrame. */
>> - args.infoframe.version = 0;
>> - args.infoframe.head = nv_crtc->index;
>> + args->version = 0;
>> + args->head = nv_crtc->index;
>> if (!drm_hdmi_avi_infoframe_from_display_mode(&infoframe.avi,
>> &nv_connector->base, mode)) {
>> drm_hdmi_avi_infoframe_quant_range(&infoframe.avi,
>> &nv_connector->base, mode,
>> HDMI_QUANTIZATION_RANGE_FULL);
>> - size = hdmi_infoframe_pack(&infoframe, args.data,
>> ARRAY_SIZE(args.data));
>> + size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
>> } else {
>> size = 0;
>> }
>> - nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI,
>> &args.infoframe, size);
>> + nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, args,
>> size);
>> /* Vendor InfoFrame. */
>> - memset(&args.data, 0, sizeof(args.data));
>> + memset(args->data, 0, data_len);
>> if (!drm_hdmi_vendor_infoframe_from_display_mode(&infoframe.vendor.hdmi,
>> &nv_connector->base, mode))
>> - size = hdmi_infoframe_pack(&infoframe, args.data,
>> ARRAY_SIZE(args.data));
>> + size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
>> else
>> size = 0;
>> - nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI,
>> &args.infoframe, size);
>> + nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, args,
>> size);
>> nv_encoder->hdmi.enabled = true;
>> }
>
On 9/13/24 12:23 PM, Danilo Krummrich wrote:
> Hi,
>
> On 9/13/24 10:09 AM, Gustavo A. R. Silva wrote:
>> Hi all,
>>
>> Friendly ping: who can take this, please? 🙂
>
> Usually, that's me. But I thought you might want to send a v2 based on Kees'
> comments?
Do you plan to follow up on this? I'd prefer if we could get rid of the open-
coded "17". So, maybe just go with the define until we have something like
STACK_FLEX_COUNT()?
>
> - Danilo
>
>>
>> Thanks
>> -Gustavo
>>
>> On 21/08/24 22:16, Gustavo A. R. Silva wrote:
>>> Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
>>> a flexible structure where the size of the flexible-array member
>>> is known at compile-time, and refactor the rest of the code,
>>> accordingly.
>>>
>>> So, with this, fix the following warning:
>>>
>>> drivers/gpu/drm/nouveau/dispnv50/disp.c:779:47: warning: structure containing
>>> a flexible array member is not at the end of another structure [-Wflex-array-
>>> member-not-at-end]
>>>
>>> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
>>> ---
>>> drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++-----------
>>> 1 file changed, 9 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/
>>> nouveau/dispnv50/disp.c
>>> index eed579a6c858..ddddc69640be 100644
>>> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
>>> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
>>> @@ -774,11 +774,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct
>>> nouveau_crtc *nv_crtc,
>>> struct drm_hdmi_info *hdmi = &nv_connector->base.display_info.hdmi;
>>> union hdmi_infoframe infoframe = { 0 };
>>> const u8 rekey = 56; /* binary driver, and tegra, constant */
>>> + DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, 17);
>>> + const u8 data_len = 17; /* same length as in DEFINE_RAW_FLEX above. */
>>> u32 max_ac_packet;
>>> - struct {
>>> - struct nvif_outp_infoframe_v0 infoframe;
>>> - u8 data[17];
>>> - } args = { 0 };
>>> int ret, size;
>>> max_ac_packet = mode->htotal - mode->hdisplay;
>>> @@ -815,29 +813,29 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct
>>> nouveau_crtc *nv_crtc,
>>> return;
>>> /* AVI InfoFrame. */
>>> - args.infoframe.version = 0;
>>> - args.infoframe.head = nv_crtc->index;
>>> + args->version = 0;
>>> + args->head = nv_crtc->index;
>>> if (!drm_hdmi_avi_infoframe_from_display_mode(&infoframe.avi,
>>> &nv_connector->base, mode)) {
>>> drm_hdmi_avi_infoframe_quant_range(&infoframe.avi, &nv_connector-
>>> >base, mode,
>>> HDMI_QUANTIZATION_RANGE_FULL);
>>> - size = hdmi_infoframe_pack(&infoframe, args.data,
>>> ARRAY_SIZE(args.data));
>>> + size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
>>> } else {
>>> size = 0;
>>> }
>>> - nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI,
>>> &args.infoframe, size);
>>> + nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_AVI, args,
>>> size);
>>> /* Vendor InfoFrame. */
>>> - memset(&args.data, 0, sizeof(args.data));
>>> + memset(args->data, 0, data_len);
>>> if (!drm_hdmi_vendor_infoframe_from_display_mode(&infoframe.vendor.hdmi,
>>> &nv_connector->base, mode))
>>> - size = hdmi_infoframe_pack(&infoframe, args.data,
>>> ARRAY_SIZE(args.data));
>>> + size = hdmi_infoframe_pack(&infoframe, args->data, data_len);
>>> else
>>> size = 0;
>>> - nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI,
>>> &args.infoframe, size);
>>> + nvif_outp_infoframe(&nv_encoder->outp, NVIF_OUTP_INFOFRAME_V0_VSI, args,
>>> size);
>>> nv_encoder->hdmi.enabled = true;
>>> }
>>
On 03/10/24 12:36, Danilo Krummrich wrote:
> On 9/13/24 12:23 PM, Danilo Krummrich wrote:
>> Hi,
>>
>> On 9/13/24 10:09 AM, Gustavo A. R. Silva wrote:
>>> Hi all,
>>>
>>> Friendly ping: who can take this, please? 🙂
>>
>> Usually, that's me. But I thought you might want to send a v2 based on Kees'
>> comments?
>
> Do you plan to follow up on this? I'd prefer if we could get rid of the open-
> coded "17". So, maybe just go with the define until we have something like
> STACK_FLEX_COUNT()?
Do you mean the following define...?
nv50_hdmi_enable(...)
{
...
#define data_len 17
DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, data_len);
...rest of function...
#undef data_len
}
Thanks
--
Gustavo
>On 03/10/24 12:36, Danilo Krummrich wrote: >> On 9/13/24 12:23 PM, Danilo Krummrich wrote: I am reminded that I should check all my MUAs to render the date as YYYY-MM-DD so my brain doesn't explode when I see people "time traveling". ;) (BTW, what MUAs do you both use? I use Mutt and K-9 Mail, and I need to check the quote prefix settings in both...) -Kees -- Kees Cook
On Sat, Oct 05, 2024 at 09:04:11AM -0700, Kees Cook wrote: > > > > >On 03/10/24 12:36, Danilo Krummrich wrote: > >> On 9/13/24 12:23 PM, Danilo Krummrich wrote: > > I am reminded that I should check all my MUAs to render the date as YYYY-MM-DD so my brain doesn't explode when I see people "time traveling". ;) > > (BTW, what MUAs do you both use? I use Mutt and K-9 Mail, and I need to check the quote prefix settings in both...) Mutt, and (unfortunately) Thunderbird for HTML stuff and a few other rare cases. > > -Kees > > -- > Kees Cook >
On 10/3/24 8:44 PM, Gustavo A. R. Silva wrote:
>
>
> On 03/10/24 12:36, Danilo Krummrich wrote:
>> On 9/13/24 12:23 PM, Danilo Krummrich wrote:
>>> Hi,
>>>
>>> On 9/13/24 10:09 AM, Gustavo A. R. Silva wrote:
>>>> Hi all,
>>>>
>>>> Friendly ping: who can take this, please? 🙂
>>>
>>> Usually, that's me. But I thought you might want to send a v2 based on Kees'
>>> comments?
>>
>> Do you plan to follow up on this? I'd prefer if we could get rid of the open-
>> coded "17". So, maybe just go with the define until we have something like
>> STACK_FLEX_COUNT()?
>
> Do you mean the following define...?>
> nv50_hdmi_enable(...)
> {
> ...
> #define data_len 17
> DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, data_len);
> ...rest of function...
> #undef data_len
> }
Yes, it's not great, but I think it's better than having the length in two
places.
>
> Thanks
> --
> Gustavo
>
> > Yes, it's not great, but I think it's better than having the length in two > places. Agreed. I'll respin. :) Thanks -- Gustavo
On Wed, Aug 21, 2024 at 02:16:21PM -0600, Gustavo A. R. Silva wrote:
> Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
> a flexible structure where the size of the flexible-array member
> is known at compile-time, and refactor the rest of the code,
> accordingly.
>
> So, with this, fix the following warning:
>
> drivers/gpu/drm/nouveau/dispnv50/disp.c:779:47: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>
> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
> ---
> drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++-----------
> 1 file changed, 9 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> index eed579a6c858..ddddc69640be 100644
> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
> @@ -774,11 +774,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
> struct drm_hdmi_info *hdmi = &nv_connector->base.display_info.hdmi;
> union hdmi_infoframe infoframe = { 0 };
> const u8 rekey = 56; /* binary driver, and tegra, constant */
> + DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, 17);
> + const u8 data_len = 17; /* same length as in DEFINE_RAW_FLEX above. */
To avoid repeating the open-coded "17", this could either be a define:
nv50_hdmi_enable(...)
{
...
#define data_len 17
DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, data_len);
...rest of function...
#undef data_len
}
or an ungainly but compile-time calculated value that exposes some
DEFINE_FLEX internals:
const u8 data_len = (sizeof(args_u) - sizeof(*args)) / sizeof(*args->data);
(Maybe a helper is needed for that?)
#define STACK_FLEX_COUNT(name, member) \
((sizeof(name##_u) = sizeof(*(name))) / sizeof(*(name)->member))
> @@ -815,29 +813,29 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
> return;
>
> /* AVI InfoFrame. */
> - args.infoframe.version = 0;
> - args.infoframe.head = nv_crtc->index;
> + args->version = 0;
> + args->head = nv_crtc->index;
The stack variable (was before and is again) already zero-initialized,
so the "= 0" line shouldn't be needed.
But neither of these comments are show-stoppers, IMO.
Reviewed-by: Kees Cook <kees@kernel.org>
--
Kees Cook
On 22/08/24 11:27, Kees Cook wrote:
> On Wed, Aug 21, 2024 at 02:16:21PM -0600, Gustavo A. R. Silva wrote:
>> Use the `DEFINE_RAW_FLEX()` helper for an on-stack definition of
>> a flexible structure where the size of the flexible-array member
>> is known at compile-time, and refactor the rest of the code,
>> accordingly.
>>
>> So, with this, fix the following warning:
>>
>> drivers/gpu/drm/nouveau/dispnv50/disp.c:779:47: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
>>
>> Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
>> ---
>> drivers/gpu/drm/nouveau/dispnv50/disp.c | 20 +++++++++-----------
>> 1 file changed, 9 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> index eed579a6c858..ddddc69640be 100644
>> --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
>> @@ -774,11 +774,9 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
>> struct drm_hdmi_info *hdmi = &nv_connector->base.display_info.hdmi;
>> union hdmi_infoframe infoframe = { 0 };
>> const u8 rekey = 56; /* binary driver, and tegra, constant */
>> + DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, 17);
>> + const u8 data_len = 17; /* same length as in DEFINE_RAW_FLEX above. */
>
> To avoid repeating the open-coded "17", this could either be a define:
>
> nv50_hdmi_enable(...)
> {
> ...
> #define data_len 17
> DEFINE_RAW_FLEX(struct nvif_outp_infoframe_v0, args, data, data_len);
> ...rest of function...
> #undef data_len
> }
>
> or an ungainly but compile-time calculated value that exposes some
> DEFINE_FLEX internals:
>
> const u8 data_len = (sizeof(args_u) - sizeof(*args)) / sizeof(*args->data);
Yeah, I actually thought of something more like just __struct_size(args) - sizeof(*args),
as the flex array member is `__u8 data[]`.
>
> (Maybe a helper is needed for that?)
>
> #define STACK_FLEX_COUNT(name, member) \
> ((sizeof(name##_u) = sizeof(*(name))) / sizeof(*(name)->member))
I don't like this `sizeof(name##_u)` part as it is detached from the DEFINE_RAW_FLEX()
internals. Probably use `__struct_size(args)` instead, as in the example above.
>
>> @@ -815,29 +813,29 @@ nv50_hdmi_enable(struct drm_encoder *encoder, struct nouveau_crtc *nv_crtc,
>> return;
>>
>> /* AVI InfoFrame. */
>> - args.infoframe.version = 0;
>> - args.infoframe.head = nv_crtc->index;
>> + args->version = 0;
>> + args->head = nv_crtc->index;
>
> The stack variable (was before and is again) already zero-initialized,
> so the "= 0" line shouldn't be needed.
>
> But neither of these comments are show-stoppers, IMO.
>
> Reviewed-by: Kees Cook <kees@kernel.org>
>
Thanks!
--
Gustavo
© 2016 - 2026 Red Hat, Inc.