[PATCH 32/40] drm/amdgpu: Return result fix in RAS

Alex Deucher alexdeucher at gmail.com
Thu Jun 10 21:11:01 UTC 2021


On Tue, Jun 8, 2021 at 5:41 PM Luben Tuikov <luben.tuikov at amd.com> wrote:
>
> The low level EEPROM write method, doesn't return
> 1, but the number of bytes written. Thus do not
> compare to 1, instead, compare to greater than 0
> for success.
>
> Other cleanup: if the lower layers returned
> -errno, then return that, as opposed to
> overwriting the error code with one-fits-all
> -EINVAL. For instance, some return -EAGAIN.
>
> Cc: Jean Delvare <jdelvare at suse.de>
> Cc: Alexander Deucher <Alexander.Deucher at amd.com>
> Cc: Andrey Grodzovsky <Andrey.Grodzovsky at amd.com>
> Cc: Lijo Lazar <Lijo.Lazar at amd.com>
> Cc: Stanley Yang <Stanley.Yang at amd.com>
> Cc: Hawking Zhang <Hawking.Zhang at amd.com>
> Signed-off-by: Luben Tuikov <luben.tuikov at amd.com>

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

> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c    |  3 +--
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c       | 22 +++++++++++--------
>  .../gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c    |  2 +-
>  drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c    |  3 +--
>  4 files changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> index a5a87affedabf1..a4815af111ed12 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c
> @@ -105,8 +105,7 @@ static int __amdgpu_eeprom_xfer(struct i2c_adapter *i2c_adap, u32 eeprom_addr,
>         int r;
>         u16 len;
>
> -       r = 0;
> -       for ( ; buf_size > 0;
> +       for (r = 0; buf_size > 0;
>               buf_size -= len, eeprom_addr += len, eeprom_buf += len) {
>                 /* Set the EEPROM address we want to write to/read from.
>                  */
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> index e3ad081eddd40b..66c96c65e7eeb9 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
> @@ -355,8 +355,9 @@ static int amdgpu_ras_debugfs_ctrl_parse_data(struct file *f,
>   *     to see which blocks support RAS on a particular asic.
>   *
>   */
> -static ssize_t amdgpu_ras_debugfs_ctrl_write(struct file *f, const char __user *buf,
> -               size_t size, loff_t *pos)
> +static ssize_t amdgpu_ras_debugfs_ctrl_write(struct file *f,
> +                                            const char __user *buf,
> +                                            size_t size, loff_t *pos)
>  {
>         struct amdgpu_device *adev = (struct amdgpu_device *)file_inode(f)->i_private;
>         struct ras_debug_if data;
> @@ -370,7 +371,7 @@ static ssize_t amdgpu_ras_debugfs_ctrl_write(struct file *f, const char __user *
>
>         ret = amdgpu_ras_debugfs_ctrl_parse_data(f, buf, size, pos, &data);
>         if (ret)
> -               return -EINVAL;
> +               return ret;
>
>         if (data.op == 3) {
>                 ret = amdgpu_reserve_page_direct(adev, data.inject.address);
> @@ -439,21 +440,24 @@ static ssize_t amdgpu_ras_debugfs_ctrl_write(struct file *f, const char __user *
>   * will reset EEPROM table to 0 entries.
>   *
>   */
> -static ssize_t amdgpu_ras_debugfs_eeprom_write(struct file *f, const char __user *buf,
> -               size_t size, loff_t *pos)
> +static ssize_t amdgpu_ras_debugfs_eeprom_write(struct file *f,
> +                                              const char __user *buf,
> +                                              size_t size, loff_t *pos)
>  {
>         struct amdgpu_device *adev =
>                 (struct amdgpu_device *)file_inode(f)->i_private;
>         int ret;
>
>         ret = amdgpu_ras_eeprom_reset_table(
> -                       &(amdgpu_ras_get_context(adev)->eeprom_control));
> +               &(amdgpu_ras_get_context(adev)->eeprom_control));
>
> -       if (ret == 1) {
> +       if (ret > 0) {
> +               /* Something was written to EEPROM.
> +                */
>                 amdgpu_ras_get_context(adev)->flags = RAS_DEFAULT_FLAGS;
>                 return size;
>         } else {
> -               return -EIO;
> +               return ret;
>         }
>  }
>
> @@ -1991,7 +1995,7 @@ int amdgpu_ras_recovery_init(struct amdgpu_device *adev)
>         kfree(*data);
>         con->eh_data = NULL;
>  out:
> -       dev_warn(adev->dev, "Failed to initialize ras recovery!\n");
> +       dev_warn(adev->dev, "Failed to initialize ras recovery! (%d)\n", ret);
>
>         /*
>          * Except error threshold exceeding case, other failure cases in this
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> index 17cea35275e46c..dc48c556398039 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.c
> @@ -335,7 +335,7 @@ int amdgpu_ras_eeprom_init(struct amdgpu_ras_eeprom_control *control,
>                 ret = amdgpu_ras_eeprom_reset_table(control);
>         }
>
> -       return ret == 1 ? 0 : -EIO;
> +       return ret > 0 ? 0 : -EIO;
>  }
>
>  static void __encode_table_record_to_buff(struct amdgpu_ras_eeprom_control *control,
> diff --git a/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c b/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
> index 65035256756679..7f48ee020bc03e 100644
> --- a/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
> +++ b/drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.c
> @@ -222,7 +222,7 @@ static uint32_t smu_v11_0_i2c_transmit(struct i2c_adapter *control,
>                                        u32 numbytes, u32 i2c_flag)
>  {
>         struct amdgpu_device *adev = to_amdgpu_device(control);
> -       uint32_t bytes_sent, reg, ret = 0;
> +       u32 bytes_sent, reg, ret = I2C_OK;
>         unsigned long  timeout_counter;
>
>         bytes_sent = 0;
> @@ -290,7 +290,6 @@ static uint32_t smu_v11_0_i2c_transmit(struct i2c_adapter *control,
>         }
>
>         ret = smu_v11_0_i2c_poll_tx_status(control);
> -
>  Err:
>         /* Any error, no point in proceeding */
>         if (ret != I2C_OK) {
> --
> 2.32.0
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list