lkml.org 
[lkml]   [2020]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.7 019/274] drm/amdgpu: Init data to avoid oops while reading pp_num_states.
    Date
    From: limingyu <limingyu@uniontech.com>

    [ Upstream commit 6f81b2d047c59eb77cd04795a44245d6a52cdaec ]

    For chip like CHIP_OLAND with si enabled(amdgpu.si_support=1),
    the amdgpu will expose pp_num_states to the /sys directory.
    In this moment, read the pp_num_states file will excute the
    amdgpu_get_pp_num_states func. In our case, the data hasn't
    been initialized, so the kernel will access some ilegal
    address, trigger the segmentfault and system will reboot soon:

    uos@uos-PC:~$ cat /sys/devices/pci0000\:00/0000\:00\:00.0/0000\:01\:00
    .0/pp_num_states

    Message from syslogd@uos-PC at Apr 22 09:26:20 ...
    kernel:[ 82.154129] Internal error: Oops: 96000004 [#1] SMP

    This patch aims to fix this problem, avoid that reading file
    triggers the kernel sementfault.

    Signed-off-by: limingyu <limingyu@uniontech.com>
    Signed-off-by: zhoubinbin <zhoubinbin@uniontech.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
    index abe94a55ecad..49e2e43f2e4a 100644
    --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
    +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
    @@ -444,8 +444,11 @@ static ssize_t amdgpu_get_pp_num_states(struct device *dev,
    ret = smu_get_power_num_states(&adev->smu, &data);
    if (ret)
    return ret;
    - } else if (adev->powerplay.pp_funcs->get_pp_num_states)
    + } else if (adev->powerplay.pp_funcs->get_pp_num_states) {
    amdgpu_dpm_get_pp_num_states(adev, &data);
    + } else {
    + memset(&data, 0, sizeof(data));
    + }

    pm_runtime_mark_last_busy(ddev->dev);
    pm_runtime_put_autosuspend(ddev->dev);
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-09 01:07    [W:3.466 / U:0.160 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site