OSDN Git Service

drm/amdgpu: Replace one-elements array with flex-array members
authorPaulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com>
Sun, 13 Nov 2022 07:44:05 +0000 (20:44 +1300)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Nov 2022 18:35:16 +0000 (13:35 -0500)
One-element arrays are deprecated, and we are replacing them with
flexible array members instead. So, replace one-element array with
flexible-array member in structs ATOM_I2C_VOLTAGE_OBJECT_V3,
ATOM_ASIC_INTERNAL_SS_INFO_V2, ATOM_ASIC_INTERNAL_SS_INFO_V3,
and refactor the rest of the code accordingly.

Important to mention is that doing a build before/after this patch
results in no functional binary output differences.

This helps with the ongoing efforts to tighten the FORTIFY_SOURCE
routines on memcpy() and help us make progress towards globally
enabling -fstrict-flex-arrays=3 [1].

Link: https://github.com/KSPP/linux/issues/79
Link: https://github.com/KSPP/linux/issues/238
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836
Signed-off-by: Paulo Miguel Almeida <paulo.miguel.almeida.rodenas@gmail.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/bios/bios_parser.c
drivers/gpu/drm/amd/include/atombios.h

index 6b9e64c..a1a00f4 100644 (file)
@@ -665,8 +665,9 @@ static enum bp_result get_ss_info_v3_1(
        if (!DATA_TABLES(ASIC_InternalSS_Info))
                return BP_RESULT_UNSUPPORTED;
 
-       ss_table_header_include = GET_IMAGE(ATOM_ASIC_INTERNAL_SS_INFO_V3,
-               DATA_TABLES(ASIC_InternalSS_Info));
+       ss_table_header_include = ((ATOM_ASIC_INTERNAL_SS_INFO_V3 *) bios_get_image(&bp->base,
+                               DATA_TABLES(ASIC_InternalSS_Info),
+                               struct_size(ss_table_header_include, asSpreadSpectrum, 1)));
        table_size =
                (le16_to_cpu(ss_table_header_include->sHeader.usStructureSize)
                                - sizeof(ATOM_COMMON_TABLE_HEADER))
@@ -1032,8 +1033,10 @@ static enum bp_result get_ss_info_from_internal_ss_info_tbl_V2_1(
        if (!DATA_TABLES(ASIC_InternalSS_Info))
                return result;
 
-       header = GET_IMAGE(ATOM_ASIC_INTERNAL_SS_INFO_V2,
-               DATA_TABLES(ASIC_InternalSS_Info));
+       header = ((ATOM_ASIC_INTERNAL_SS_INFO_V2 *) bios_get_image(
+                               &bp->base,
+                               DATA_TABLES(ASIC_InternalSS_Info),
+                               struct_size(header, asSpreadSpectrum, 1)));
 
        memset(info, 0, sizeof(struct spread_spectrum_info));
 
@@ -1712,8 +1715,10 @@ static uint32_t get_ss_entry_number_from_internal_ss_info_tbl_v2_1(
        if (!DATA_TABLES(ASIC_InternalSS_Info))
                return 0;
 
-       header_include = GET_IMAGE(ATOM_ASIC_INTERNAL_SS_INFO_V2,
-                       DATA_TABLES(ASIC_InternalSS_Info));
+       header_include = ((ATOM_ASIC_INTERNAL_SS_INFO_V2 *) bios_get_image(
+                               &bp->base,
+                               DATA_TABLES(ASIC_InternalSS_Info),
+                               struct_size(header_include, asSpreadSpectrum, 1)));
 
        size = (le16_to_cpu(header_include->sHeader.usStructureSize)
                        - sizeof(ATOM_COMMON_TABLE_HEADER))
@@ -1749,8 +1754,9 @@ static uint32_t get_ss_entry_number_from_internal_ss_info_tbl_V3_1(
        if (!DATA_TABLES(ASIC_InternalSS_Info))
                return number;
 
-       header_include = GET_IMAGE(ATOM_ASIC_INTERNAL_SS_INFO_V3,
-                       DATA_TABLES(ASIC_InternalSS_Info));
+       header_include = ((ATOM_ASIC_INTERNAL_SS_INFO_V3 *) bios_get_image(&bp->base,
+                               DATA_TABLES(ASIC_InternalSS_Info),
+                               struct_size(header_include, asSpreadSpectrum, 1)));
        size = (le16_to_cpu(header_include->sHeader.usStructureSize) -
                        sizeof(ATOM_COMMON_TABLE_HEADER)) /
                                        sizeof(ATOM_ASIC_SS_ASSIGNMENT_V3);
index 60c44a8..4dc738c 100644 (file)
@@ -5146,7 +5146,7 @@ typedef struct  _ATOM_I2C_VOLTAGE_OBJECT_V3
    UCHAR  ucVoltageControlOffset;
    UCHAR  ucVoltageControlFlag;              // Bit0: 0 - One byte data; 1 - Two byte data
    UCHAR  ulReserved[3];
-   VOLTAGE_LUT_ENTRY asVolI2cLut[1];         // end with 0xff
+   VOLTAGE_LUT_ENTRY asVolI2cLut[];         // end with 0xff
 }ATOM_I2C_VOLTAGE_OBJECT_V3;
 
 // ATOM_I2C_VOLTAGE_OBJECT_V3.ucVoltageControlFlag
@@ -6679,7 +6679,7 @@ typedef struct _ATOM_ASIC_INTERNAL_SS_INFO
 typedef struct _ATOM_ASIC_INTERNAL_SS_INFO_V2
 {
   ATOM_COMMON_TABLE_HEADER         sHeader;
-  ATOM_ASIC_SS_ASSIGNMENT_V2        asSpreadSpectrum[1];      //this is point only.
+  ATOM_ASIC_SS_ASSIGNMENT_V2        asSpreadSpectrum[];      //this is point only.
 }ATOM_ASIC_INTERNAL_SS_INFO_V2;
 
 typedef struct _ATOM_ASIC_SS_ASSIGNMENT_V3
@@ -6701,7 +6701,7 @@ typedef struct _ATOM_ASIC_SS_ASSIGNMENT_V3
 typedef struct _ATOM_ASIC_INTERNAL_SS_INFO_V3
 {
   ATOM_COMMON_TABLE_HEADER         sHeader;
-  ATOM_ASIC_SS_ASSIGNMENT_V3        asSpreadSpectrum[1];      //this is pointer only.
+  ATOM_ASIC_SS_ASSIGNMENT_V3        asSpreadSpectrum[];      //this is pointer only.
 }ATOM_ASIC_INTERNAL_SS_INFO_V3;