On Sat, Oct 28, 2023 at 8:05 AM José Pekkarinen <jose.pekkari...@foxhound.fi> wrote: > > On 2023-10-27 20:55, Deucher, Alexander wrote: > > [Public] > > > >> -----Original Message----- > >> From: José Pekkarinen <jose.pekkari...@foxhound.fi> > >> Sent: Friday, October 27, 2023 12:59 PM > >> To: Deucher, Alexander <alexander.deuc...@amd.com>; Koenig, Christian > >> <christian.koe...@amd.com>; Pan, Xinhui <xinhui....@amd.com>; > >> sk...@linuxfoundation.org > >> Cc: José Pekkarinen <jose.pekkari...@foxhound.fi>; airl...@gmail.com; > >> dan...@ffwll.ch; amd-gfx@lists.freedesktop.org; dri- > >> de...@lists.freedesktop.org; linux-ker...@vger.kernel.org; > >> linux-kernel- > >> ment...@lists.linuxfoundation.org > >> Subject: [PATCH] drm/radeon: replace 1-element arrays with > >> flexible-array > >> members > >> > >> Reported by coccinelle, the following patch will move the following 1 > >> element > >> arrays to flexible arrays. > >> > >> drivers/gpu/drm/radeon/atombios.h:5523:32-48: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:5545:32-48: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:5461:34-44: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:4447:30-40: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:4236:30-41: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7044:24-37: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7054:24-37: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7095:28-45: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7553:8-17: WARNING use > >> flexible-array > >> member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7559:8-17: WARNING use > >> flexible-array > >> member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:3896:27-37: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:5443:16-25: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:5454:34-43: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:4603:21-32: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:6299:32-44: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:4628:32-46: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:6285:29-39: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:4296:30-36: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:4756:28-36: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:4064:22-35: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7327:9-24: WARNING use > >> flexible-array > >> member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7332:32-53: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:6030:8-17: WARNING use > >> flexible-array > >> member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7362:26-41: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7369:29-44: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7349:24-32: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> drivers/gpu/drm/radeon/atombios.h:7355:27-35: WARNING use flexible- > >> array member instead > >> (https://www.kernel.org/doc/html/latest/process/deprecated.html#zero- > >> length-and-one-element-arrays) > >> > >> Signed-off-by: José Pekkarinen <jose.pekkari...@foxhound.fi> > > > > Please verify that changing these to variable sized arrays does not > > break any calculations based on the old size in the driver. More > > below. > > > >> --- > >> drivers/gpu/drm/radeon/atombios.h | 54 > >> +++++++++++++++---------------- > >> 1 file changed, 27 insertions(+), 27 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/radeon/atombios.h > >> b/drivers/gpu/drm/radeon/atombios.h > >> index 8a6621f1e82c..7fa1606be92c 100644 > >> --- a/drivers/gpu/drm/radeon/atombios.h > >> +++ b/drivers/gpu/drm/radeon/atombios.h > >> @@ -3893,7 +3893,7 @@ typedef struct _ATOM_GPIO_PIN_ASSIGNMENT > >> typedef struct _ATOM_GPIO_PIN_LUT { > >> ATOM_COMMON_TABLE_HEADER sHeader; > >> - ATOM_GPIO_PIN_ASSIGNMENT asGPIO_Pin[1]; > >> + ATOM_GPIO_PIN_ASSIGNMENT asGPIO_Pin[]; > >> }ATOM_GPIO_PIN_LUT; > >> > >> > >> /****************************************************************** > >> **********/ > >> @@ -4061,7 +4061,7 @@ typedef struct > >> _ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT //usSrcDstTableOffset > >> UCHAR ucNumberOfSrc; > >> USHORT usSrcObjectID[1]; > >> UCHAR ucNumberOfDst; > >> - USHORT usDstObjectID[1]; > >> + USHORT usDstObjectID[]; > >> }ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT; > >> > >> > >> @@ -4233,7 +4233,7 @@ typedef struct > >> _ATOM_CONNECTOR_DEVICE_TAG_RECORD > >> ATOM_COMMON_RECORD_HEADER sheader; > >> UCHAR ucNumberOfDevice; > >> UCHAR ucReserved; > >> - ATOM_CONNECTOR_DEVICE_TAG asDeviceTag[1]; //This Id is > >> same as > >> "ATOM_DEVICE_XXX_SUPPORT", 1 is only for allocation > >> + ATOM_CONNECTOR_DEVICE_TAG asDeviceTag[]; //This Id is > >> same as > >> "ATOM_DEVICE_XXX_SUPPORT", 1 is only for allocation > >> }ATOM_CONNECTOR_DEVICE_TAG_RECORD; > >> > >> > >> @@ -4293,7 +4293,7 @@ typedef struct > >> _ATOM_OBJECT_GPIO_CNTL_RECORD > >> ATOM_COMMON_RECORD_HEADER sheader; > >> UCHAR ucFlags; // Future > >> expnadibility > >> UCHAR ucNumberOfPins; // Number of > >> GPIO pins used to > >> control the object > >> - ATOM_GPIO_PIN_CONTROL_PAIR asGpio[1]; // the real > >> gpio pin pair > >> determined by number of pins ucNumberOfPins > >> + ATOM_GPIO_PIN_CONTROL_PAIR asGpio[]; // the real > >> gpio pin pair > >> determined by number of pins ucNumberOfPins > >> }ATOM_OBJECT_GPIO_CNTL_RECORD; > >> > >> //Definitions for GPIO pin state > >> @@ -4444,7 +4444,7 @@ typedef struct > >> _ATOM_BRACKET_LAYOUT_RECORD > >> UCHAR ucWidth; > >> UCHAR ucConnNum; > >> UCHAR ucReserved; > >> - ATOM_CONNECTOR_LAYOUT_INFO asConnInfo[1]; > >> + ATOM_CONNECTOR_LAYOUT_INFO asConnInfo[]; > >> }ATOM_BRACKET_LAYOUT_RECORD; > >> > >> > >> /****************************************************************** > >> **********/ > >> @@ -4600,7 +4600,7 @@ typedef struct _ATOM_I2C_VOLTAGE_OBJECT_V3 > >> UCHAR ucVoltageControlAddress; > >> UCHAR ucVoltageControlOffset; > >> ULONG ulReserved; > >> - 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 > >> @@ -4625,7 +4625,7 @@ typedef struct > >> _ATOM_LEAKAGE_VOLTAGE_OBJECT_V3 > >> UCHAR ucLeakageEntryNum; // indicate the entry number > >> of > >> LeakageId/Voltage Lut table > >> UCHAR ucReserved[2]; > >> ULONG ulMaxVoltageLevel; > >> - LEAKAGE_VOLTAGE_LUT_ENTRY_V2 asLeakageIdLut[1]; > >> + LEAKAGE_VOLTAGE_LUT_ENTRY_V2 asLeakageIdLut[]; > >> }ATOM_LEAKAGE_VOLTAGE_OBJECT_V3; > >> > >> > >> @@ -4753,7 +4753,7 @@ typedef struct _ATOM_POWER_SOURCE_INFO { > >> ATOM_COMMON_TABLE_HEADER asHeader; > >> UCHAR > >> asPwrbehave[16]; > >> - ATOM_POWER_SOURCE_OBJECT asPwrObj[1]; > >> + ATOM_POWER_SOURCE_OBJECT asPwrObj[]; > >> }ATOM_POWER_SOURCE_INFO; > >> > >> > >> @@ -5440,7 +5440,7 @@ typedef struct _ATOM_FUSION_SYSTEM_INFO_V2 > >> typedef struct _ATOM_I2C_DATA_RECORD { > >> UCHAR ucNunberOfBytes; > >> //Indicates how many > >> bytes SW needs to write to the external ASIC for one block, besides to > >> "Start" > >> and "Stop" > >> - UCHAR ucI2CData[1]; > >> //I2C data in bytes, > >> should be less than 16 bytes usually > >> + UCHAR ucI2CData[]; > >> //I2C data in bytes, should > >> be less than 16 bytes usually > >> }ATOM_I2C_DATA_RECORD; > >> > >> > >> @@ -5451,14 +5451,14 @@ typedef struct > >> _ATOM_I2C_DEVICE_SETUP_INFO > >> UCHAR ucSSChipID; > >> //SS chip being used > >> UCHAR ucSSChipSlaveAddr; > >> //Slave Address to > >> set up this SS chip > >> UCHAR ucNumOfI2CDataRecords; //number of > >> data block > >> - ATOM_I2C_DATA_RECORD asI2CData[1]; > >> + ATOM_I2C_DATA_RECORD asI2CData[]; > >> }ATOM_I2C_DEVICE_SETUP_INFO; > >> > >> > >> //================================================================= > >> ========================= > >> typedef struct _ATOM_ASIC_MVDD_INFO > >> { > >> ATOM_COMMON_TABLE_HEADER sHeader; > >> - ATOM_I2C_DEVICE_SETUP_INFO asI2CSetup[1]; > >> + ATOM_I2C_DEVICE_SETUP_INFO asI2CSetup[]; > >> }ATOM_ASIC_MVDD_INFO; > >> > >> > >> //================================================================= > >> ========================= > >> @@ -5520,7 +5520,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 @@ -5542,7 +5542,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; > >> > >> > >> @@ -6027,7 +6027,7 @@ typedef struct _ENABLE_SCALER_PARAMETERS > >> UCHAR ucScaler; // ATOM_SCALER1, ATOM_SCALER2 > >> UCHAR ucEnable; // ATOM_SCALER_DISABLE or > >> ATOM_SCALER_CENTER or ATOM_SCALER_EXPANSION > >> UCHAR ucTVStandard; // > >> - UCHAR ucPadding[1]; > >> + UCHAR ucPadding[]; > > > > This may actually be a 1 element array. It’s just padding at the end > > of the table. > > > >> }ENABLE_SCALER_PARAMETERS; > >> #define ENABLE_SCALER_PS_ALLOCATION ENABLE_SCALER_PARAMETERS > >> > >> @@ -6282,7 +6282,7 @@ typedef union > >> _ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS > >> > >> typedef struct _ATOM_MEMORY_SETTING_DATA_BLOCK{ > >> ATOM_MEMORY_SETTING_ID_CONFIG_ACCESS > >> ulMemoryID; > >> - ULONG > >> > >> aulMemData[1]; > >> + ULONG > >> > >> aulMemData[]; > >> }ATOM_MEMORY_SETTING_DATA_BLOCK; > >> > >> > >> @@ -6296,7 +6296,7 @@ typedef struct _ATOM_INIT_REG_BLOCK{ > >> USHORT > >> usRegIndexTblSize; > >> > >> //size of asRegIndexBuf > >> USHORT > >> usRegDataBlkSize; > >> > >> //size of > >> ATOM_MEMORY_SETTING_DATA_BLOCK > >> ATOM_INIT_REG_INDEX_FORMAT > >> asRegIndexBuf[1]; > >> - ATOM_MEMORY_SETTING_DATA_BLOCK asRegDataBuf[1]; > >> + ATOM_MEMORY_SETTING_DATA_BLOCK asRegDataBuf[]; > >> }ATOM_INIT_REG_BLOCK; > >> > > > > This one needs special handling as you have multiple variable sized > > arrays. > > I'm happy to add any special handling in v2, though > I may need to understand what that special handling would > be. Would you mind to elaborate? Otherwise I can just leave > the sensitive cases and the paddings untouched and resend > the patch with the rest of cases converted.
I'm not sure how we want to handle back to back variable sized arrays. I'd say just skip these cases for now. Alex > > > > >> #define END_OF_REG_INDEX_BLOCK 0x0ffff @@ -7041,7 +7041,7 @@ > >> typedef struct _ATOM_DISP_OUT_INFO > >> USHORT ptrTransmitterInfo; > >> USHORT ptrEncoderInfo; > >> ASIC_TRANSMITTER_INFO asTransmitterInfo[1]; > >> - ASIC_ENCODER_INFO asEncoderInfo[1]; > >> + ASIC_ENCODER_INFO asEncoderInfo[]; > > > > Same here. > > > >> }ATOM_DISP_OUT_INFO; > >> > >> typedef struct _ATOM_DISP_OUT_INFO_V2 > >> @@ -7051,7 +7051,7 @@ typedef struct _ATOM_DISP_OUT_INFO_V2 > >> USHORT ptrEncoderInfo; > >> USHORT ptrMainCallParserFar; // direct address of > >> main parser call > >> in VBIOS binary. > >> ASIC_TRANSMITTER_INFO asTransmitterInfo[1]; > >> - ASIC_ENCODER_INFO asEncoderInfo[1]; > >> + ASIC_ENCODER_INFO asEncoderInfo[]; > > > > Same here. > > > >> }ATOM_DISP_OUT_INFO_V2; > >> > >> > >> @@ -7092,7 +7092,7 @@ typedef struct _ATOM_DISP_OUT_INFO_V3 > >> UCHAR ucCoreRefClkSource; // value of > >> CORE_REF_CLK_SOURCE > >> UCHAR ucDispCaps; > >> UCHAR ucReserved[2]; > >> - ASIC_TRANSMITTER_INFO_V2 asTransmitterInfo[1]; // for > >> alligment only > >> + ASIC_TRANSMITTER_INFO_V2 asTransmitterInfo[]; // for > >> alligment only > >> }ATOM_DISP_OUT_INFO_V3; > >> > >> //ucDispCaps > >> @@ -7324,12 +7324,12 @@ typedef struct > >> _CLOCK_CONDITION_SETTING_ENTRY{ > >> USHORT usMaxClockFreq; > >> UCHAR ucEncodeMode; > >> UCHAR ucPhySel; > >> - ULONG ulAnalogSetting[1]; > >> + ULONG ulAnalogSetting[]; > >> }CLOCK_CONDITION_SETTING_ENTRY; > >> > >> typedef struct _CLOCK_CONDITION_SETTING_INFO{ > >> USHORT usEntrySize; > >> - CLOCK_CONDITION_SETTING_ENTRY asClkCondSettingEntry[1]; > >> + CLOCK_CONDITION_SETTING_ENTRY asClkCondSettingEntry[]; > >> }CLOCK_CONDITION_SETTING_INFO; > >> > >> typedef struct _PHY_CONDITION_REG_VAL{ > >> @@ -7346,27 +7346,27 @@ typedef struct _PHY_CONDITION_REG_VAL_V2{ > >> typedef struct _PHY_CONDITION_REG_INFO{ > >> USHORT usRegIndex; > >> USHORT usSize; > >> - PHY_CONDITION_REG_VAL asRegVal[1]; > >> + PHY_CONDITION_REG_VAL asRegVal[]; > >> }PHY_CONDITION_REG_INFO; > >> > >> typedef struct _PHY_CONDITION_REG_INFO_V2{ > >> USHORT usRegIndex; > >> USHORT usSize; > >> - PHY_CONDITION_REG_VAL_V2 asRegVal[1]; > >> + PHY_CONDITION_REG_VAL_V2 asRegVal[]; > >> }PHY_CONDITION_REG_INFO_V2; > >> > >> typedef struct _PHY_ANALOG_SETTING_INFO{ > >> UCHAR ucEncodeMode; > >> UCHAR ucPhySel; > >> USHORT usSize; > >> - PHY_CONDITION_REG_INFO asAnalogSetting[1]; > >> + PHY_CONDITION_REG_INFO asAnalogSetting[]; > >> }PHY_ANALOG_SETTING_INFO; > >> > >> typedef struct _PHY_ANALOG_SETTING_INFO_V2{ > >> UCHAR ucEncodeMode; > >> UCHAR ucPhySel; > >> USHORT usSize; > >> - PHY_CONDITION_REG_INFO_V2 asAnalogSetting[1]; > >> + PHY_CONDITION_REG_INFO_V2 asAnalogSetting[]; > >> }PHY_ANALOG_SETTING_INFO_V2; > >> > >> typedef struct _GFX_HAVESTING_PARAMETERS { @@ -7550,13 +7550,13 > >> @@ typedef struct _ATOM_TMDS_INFO typedef struct > >> _ATOM_ENCODER_ANALOG_ATTRIBUTE { > >> UCHAR ucTVStandard; //Same as TV standards defined above, > >> - UCHAR ucPadding[1]; > >> + UCHAR ucPadding[]; > > > > This may actually be a 1 element array. It’s just padding at the end > > of the table. > > > >> }ATOM_ENCODER_ANALOG_ATTRIBUTE; > >> > >> typedef struct _ATOM_ENCODER_DIGITAL_ATTRIBUTE { > >> UCHAR ucAttribute; //Same as other digital encoder attributes > >> defined > >> above > >> - UCHAR ucPadding[1]; > >> + UCHAR ucPadding[]; > > > > Same here. > > > > Alex > > > >> }ATOM_ENCODER_DIGITAL_ATTRIBUTE; > >> > >> typedef union _ATOM_ENCODER_ATTRIBUTE > >> -- > >> 2.39.2 > > Thanks for the comments! > > José.