[PATCH 2/2] drm/amd/pm: powerplay: Add `__counted_by` attribute for flexible arrays

Alex Deucher alexdeucher at gmail.com
Fri Jun 14 17:46:30 UTC 2024


On Fri, Jun 14, 2024 at 1:42 PM Mario Limonciello
<mario.limonciello at amd.com> wrote:
>
> This attribute is used to hint the length of flexible arrays to
> compiler and sanitizers.
>
> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>

Acked-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  .../drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h | 36 +++++++++---------
>  drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h  | 38 +++++++++----------
>  2 files changed, 37 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h
> index 2cf2a7b12623..7711e892c31f 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h
> +++ b/drivers/gpu/drm/amd/pm/powerplay/hwmgr/pptable_v1_0.h
> @@ -163,8 +163,8 @@ typedef struct _ATOM_Tonga_State {
>
>  typedef struct _ATOM_Tonga_State_Array {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;             /* Number of entries. */
> -       ATOM_Tonga_State entries[];     /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Tonga_State entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_State_Array;
>
>  typedef struct _ATOM_Tonga_MCLK_Dependency_Record {
> @@ -178,8 +178,8 @@ typedef struct _ATOM_Tonga_MCLK_Dependency_Record {
>
>  typedef struct _ATOM_Tonga_MCLK_Dependency_Table {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;                                                                             /* Number of entries. */
> -       ATOM_Tonga_MCLK_Dependency_Record entries[];                            /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Tonga_MCLK_Dependency_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_MCLK_Dependency_Table;
>
>  typedef struct _ATOM_Tonga_SCLK_Dependency_Record {
> @@ -193,8 +193,8 @@ typedef struct _ATOM_Tonga_SCLK_Dependency_Record {
>
>  typedef struct _ATOM_Tonga_SCLK_Dependency_Table {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;                                                                             /* Number of entries. */
> -       ATOM_Tonga_SCLK_Dependency_Record entries[];                             /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Tonga_SCLK_Dependency_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_SCLK_Dependency_Table;
>
>  typedef struct _ATOM_Polaris_SCLK_Dependency_Record {
> @@ -209,8 +209,8 @@ typedef struct _ATOM_Polaris_SCLK_Dependency_Record {
>
>  typedef struct _ATOM_Polaris_SCLK_Dependency_Table {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;                                                     /* Number of entries. */
> -       ATOM_Polaris_SCLK_Dependency_Record entries[];                           /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Polaris_SCLK_Dependency_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Polaris_SCLK_Dependency_Table;
>
>  typedef struct _ATOM_Tonga_PCIE_Record {
> @@ -221,8 +221,8 @@ typedef struct _ATOM_Tonga_PCIE_Record {
>
>  typedef struct _ATOM_Tonga_PCIE_Table {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;                                                                             /* Number of entries. */
> -       ATOM_Tonga_PCIE_Record entries[];                                                       /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Tonga_PCIE_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_PCIE_Table;
>
>  typedef struct _ATOM_Polaris10_PCIE_Record {
> @@ -234,8 +234,8 @@ typedef struct _ATOM_Polaris10_PCIE_Record {
>
>  typedef struct _ATOM_Polaris10_PCIE_Table {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;                                         /* Number of entries. */
> -       ATOM_Polaris10_PCIE_Record entries[];                      /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Polaris10_PCIE_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Polaris10_PCIE_Table;
>
>
> @@ -251,8 +251,8 @@ typedef struct _ATOM_Tonga_MM_Dependency_Record {
>
>  typedef struct _ATOM_Tonga_MM_Dependency_Table {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;                                                                             /* Number of entries. */
> -       ATOM_Tonga_MM_Dependency_Record entries[];                         /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Tonga_MM_Dependency_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_MM_Dependency_Table;
>
>  typedef struct _ATOM_Tonga_Voltage_Lookup_Record {
> @@ -264,8 +264,8 @@ typedef struct _ATOM_Tonga_Voltage_Lookup_Record {
>
>  typedef struct _ATOM_Tonga_Voltage_Lookup_Table {
>         UCHAR ucRevId;
> -       UCHAR ucNumEntries;                                                                             /* Number of entries. */
> -       ATOM_Tonga_Voltage_Lookup_Record entries[];                             /* Dynamically allocate entries. */
> +       UCHAR ucNumEntries;
> +       ATOM_Tonga_Voltage_Lookup_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_Voltage_Lookup_Table;
>
>  typedef struct _ATOM_Tonga_Fan_Table {
> @@ -367,7 +367,7 @@ typedef struct _ATOM_Tonga_VCE_State_Record {
>  typedef struct _ATOM_Tonga_VCE_State_Table {
>         UCHAR ucRevId;
>         UCHAR ucNumEntries;
> -       ATOM_Tonga_VCE_State_Record entries[];
> +       ATOM_Tonga_VCE_State_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_VCE_State_Table;
>
>  typedef struct _ATOM_Tonga_PowerTune_Table {
> @@ -481,7 +481,7 @@ typedef struct _ATOM_Tonga_Hard_Limit_Record {
>  typedef struct _ATOM_Tonga_Hard_Limit_Table {
>         UCHAR ucRevId;
>         UCHAR ucNumEntries;
> -       ATOM_Tonga_Hard_Limit_Record entries[];
> +       ATOM_Tonga_Hard_Limit_Record entries[] __counted_by(ucNumEntries);
>  } ATOM_Tonga_Hard_Limit_Table;
>
>  typedef struct _ATOM_Tonga_GPIO_Table {
> diff --git a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
> index 69928a4a074b..9118fcddbf11 100644
> --- a/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
> +++ b/drivers/gpu/drm/amd/pm/powerplay/inc/hwmgr.h
> @@ -60,7 +60,7 @@ struct vi_dpm_level {
>
>  struct vi_dpm_table {
>         uint32_t count;
> -       struct vi_dpm_level dpm_level[];
> +       struct vi_dpm_level dpm_level[] __counted_by(count);
>  };
>
>  #define PCIE_PERF_REQ_REMOVE_REGISTRY   0
> @@ -91,7 +91,7 @@ struct phm_set_power_state_input {
>
>  struct phm_clock_array {
>         uint32_t count;
> -       uint32_t values[];
> +       uint32_t values[] __counted_by(count);
>  };
>
>  struct phm_clock_voltage_dependency_record {
> @@ -122,8 +122,8 @@ struct phm_acpclock_voltage_dependency_record {
>  };
>
>  struct phm_clock_voltage_dependency_table {
> -       uint32_t count;                                                 /* Number of entries. */
> -       struct phm_clock_voltage_dependency_record entries[];           /* Dynamically allocate count entries. */
> +       uint32_t count;
> +       struct phm_clock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_phase_shedding_limits_record {
> @@ -140,7 +140,7 @@ struct phm_uvd_clock_voltage_dependency_record {
>
>  struct phm_uvd_clock_voltage_dependency_table {
>         uint8_t count;
> -       struct phm_uvd_clock_voltage_dependency_record entries[];
> +       struct phm_uvd_clock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_acp_clock_voltage_dependency_record {
> @@ -150,7 +150,7 @@ struct phm_acp_clock_voltage_dependency_record {
>
>  struct phm_acp_clock_voltage_dependency_table {
>         uint32_t count;
> -       struct phm_acp_clock_voltage_dependency_record entries[];
> +       struct phm_acp_clock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_vce_clock_voltage_dependency_record {
> @@ -160,33 +160,33 @@ struct phm_vce_clock_voltage_dependency_record {
>  };
>
>  struct phm_phase_shedding_limits_table {
> -       uint32_t                           count;
> -       struct phm_phase_shedding_limits_record  entries[];
> +       uint32_t count;
> +       struct phm_phase_shedding_limits_record  entries[] __counted_by(count);
>  };
>
>  struct phm_vceclock_voltage_dependency_table {
> -       uint8_t count;                                    /* Number of entries. */
> -       struct phm_vceclock_voltage_dependency_record entries[1]; /* Dynamically allocate count entries. */
> +       uint8_t count;
> +       struct phm_vceclock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_uvdclock_voltage_dependency_table {
> -       uint8_t count;                                    /* Number of entries. */
> -       struct phm_uvdclock_voltage_dependency_record entries[1]; /* Dynamically allocate count entries. */
> +       uint8_t count;
> +       struct phm_uvdclock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_samuclock_voltage_dependency_table {
> -       uint8_t count;                                    /* Number of entries. */
> -       struct phm_samuclock_voltage_dependency_record entries[1]; /* Dynamically allocate count entries. */
> +       uint8_t count;
> +       struct phm_samuclock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_acpclock_voltage_dependency_table {
> -       uint32_t count;                                    /* Number of entries. */
> -       struct phm_acpclock_voltage_dependency_record entries[1]; /* Dynamically allocate count entries. */
> +       uint32_t count;
> +       struct phm_acpclock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_vce_clock_voltage_dependency_table {
>         uint8_t count;
> -       struct phm_vce_clock_voltage_dependency_record entries[];
> +       struct phm_vce_clock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>
> @@ -393,7 +393,7 @@ union phm_cac_leakage_record {
>
>  struct phm_cac_leakage_table {
>         uint32_t count;
> -       union phm_cac_leakage_record entries[];
> +       union phm_cac_leakage_record entries[] __counted_by(count);
>  };
>
>  struct phm_samu_clock_voltage_dependency_record {
> @@ -404,7 +404,7 @@ struct phm_samu_clock_voltage_dependency_record {
>
>  struct phm_samu_clock_voltage_dependency_table {
>         uint8_t count;
> -       struct phm_samu_clock_voltage_dependency_record entries[];
> +       struct phm_samu_clock_voltage_dependency_record entries[] __counted_by(count);
>  };
>
>  struct phm_cac_tdp_table {
> --
> 2.43.0
>


More information about the amd-gfx mailing list