• Tom Rix's avatar
    drm/amdgpu: fix amdgpu_ras_block_late_init error handler · 779596ce
    Tom Rix authored
    Clang build fails with
    amdgpu_ras.c:2416:7: error: variable 'ras_obj' is used uninitialized
      whenever 'if' condition is true
      if (adev->in_suspend || amdgpu_in_reset(adev)) {
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    amdgpu_ras.c:2453:6: note: uninitialized use occurs here
     if (ras_obj->ras_cb)
         ^~~~~~~
    
    There is a logic error in the error handler's labels.
    ex/ The sysfs: is the last goto label in the normal code but
    is the middle of error handler.  Rework the error handler.
    
    cleanup: is the first error, so it's handler should be last.
    
    interrupt: is the second error, it's handler is next.  interrupt:
    handles the failure of amdgpu_ras_interrupt_add_hander() by
    calling amdgpu_ras_interrupt_remove_handler().  This is wrong,
    remove() assumes the interrupt has been setup, not torn down by
    add().  Change the goto label to cleanup.
    
    sysfs is the last error, it's handler should be first.  sysfs:
    handles the failure of amdgpu_ras_sysfs_create() by calling
    amdgpu_ras_sysfs_remove().  But when the create() fails there
    is nothing added so there is nothing to remove.  This error
    handler is not needed. Remove the error handler and change
    goto label to interrupt.
    
    Fixes: b293e891 ("drm/amdgpu: add helper function to do common ras_late_init/fini (v3)")
    Reviewed-by: default avatarLuben Tuikov <luben.tuikov@amd.com>
    Signed-off-by: default avatarTom Rix <trix@redhat.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    779596ce
amdgpu_ras.c 72.1 KB