<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p style="margin-top:0;margin-bottom:0">We should start with full asic reset and then work back to enable soft resets for the IPs.</p>
<p style="margin-top:0;margin-bottom:0"><br>
</p>
<p style="margin-top:0;margin-bottom:0">Alex<br>
</p>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Liu, Monk <Monk.Liu@amd.com><br>
<b>Sent:</b> Monday, December 18, 2017 3:58:13 AM<br>
<b>To:</b> Grodzovsky, Andrey; Koenig, Christian; amd-gfx@lists.freedesktop.org<br>
<b>Cc:</b> maraeo@gmail.com<br>
<b>Subject:</b> RE: [PATCH] drm/amdgpu: Add gpu_recovery parameter</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">You can add my RB<br>
<br>
But to be honest, the current bare-metal GPU recover approach still look not good enough especially that soft_rest checking parts:<br>
1) not all engine/IP on all version are implemented for this, and it's very very time cost to imple them all
<br>
2) like I said before, it only shows you if the engine is busy, but busy doesn't mean hang, we should rely one time out to judge a hang, although I know even time out still cannot prove engine hang,
<br>
  But anyway we need a rule, so I vote for leveraging time out totally and kick soft check out
<br>
<br>
<br>
We can reduce all those codes of soft resets, and call whole Asic reset instead of those soft reset as long as a job hit time out (when amd_gpu_recocovery=1)<br>
<br>
BR Monk<br>
<br>
-----Original Message-----<br>
From: Grodzovsky, Andrey <br>
Sent: Friday, December 15, 2017 9:05 PM<br>
To: Koenig, Christian <Christian.Koenig@amd.com>; Liu, Monk <Monk.Liu@amd.com>; amd-gfx@lists.freedesktop.org<br>
Cc: maraeo@gmail.com<br>
Subject: Re: [PATCH] drm/amdgpu: Add gpu_recovery parameter<br>
<br>
<br>
<br>
On 12/14/2017 03:52 AM, Christian König wrote:<br>
> Am 14.12.2017 um 08:19 schrieb Liu, Monk:<br>
>>> Problem with this is that amdgpu_check_soft_reset will not be <br>
>>> called, this function which prints which IP block was hung even when <br>
>>> later we opt not to recover.<br>
>> I suggest instead to add a bool force_reset parameter to <br>
>> amdgpu_gpu_recover which will override amdgpu_gpu_recovery and we can <br>
>> set it to true from amdgpu_debugfs_gpu_recover only.<br>
>><br>
>> [ML] why you need "check_soft_reset" be called ? I think soft reset <br>
>> checking is useless totally ... because with TDR feature, the only <br>
>> thing can Tell  you if GPU hang is time out warning.<br>
><br>
> And that's exactly why we call it, we just want the warning in the logs.<br>
><br>
> Christian.<br>
<br>
Just a ping for any more comments or a RB.<br>
<br>
Thanks,<br>
Andrey<br>
<br>
><br>
>><br>
>> For soft checking, it only shows you if some IP is busy or not, but <br>
>> busy may not prove the engine is hang , it may just busy ....<br>
>><br>
>><br>
>> BR Monk<br>
>><br>
>> -----Original Message-----<br>
>> From: Grodzovsky, Andrey<br>
>> Sent: 2017年12月13日 20:53<br>
>> To: Koenig, Christian <Christian.Koenig@amd.com>; <br>
>> amd-gfx@lists.freedesktop.org<br>
>> Cc: Liu, Monk <Monk.Liu@amd.com>; maraeo@gmail.com<br>
>> Subject: Re: [PATCH] drm/amdgpu: Add gpu_recovery parameter<br>
>><br>
>><br>
>><br>
>> On 12/13/2017 07:20 AM, Christian König wrote:<br>
>>> Am 12.12.2017 um 20:16 schrieb Andrey Grodzovsky:<br>
>>>> Add new parameter to control GPU recovery procedure.<br>
>>>> Retire old way of disabling GPU recovery by setting lockup_timeout <br>
>>>> ==<br>
>>>> 0 and<br>
>>>> set default for lockup_timeout to 10s.<br>
>>>><br>
>>>> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com><br>
>>>> ---<br>
>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu.h        | 1 +<br>
>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 5 +++++<br>
>>>>    drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c    | 8 ++++++--<br>
>>>>    3 files changed, 12 insertions(+), 2 deletions(-)<br>
>>>><br>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
>>>> index 3735500..26abe03 100644<br>
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h<br>
>>>> @@ -126,6 +126,7 @@ extern int amdgpu_param_buf_per_se;<br>
>>>>    extern int amdgpu_job_hang_limit;<br>
>>>>    extern int amdgpu_lbpw;<br>
>>>>    extern int amdgpu_compute_multipipe;<br>
>>>> +extern int amdgpu_gpu_recovery;<br>
>>>>      #ifdef CONFIG_DRM_AMDGPU_SI<br>
>>>>    extern int amdgpu_si_support;<br>
>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
>>>> index 8d03baa..d84b57a 100644<br>
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c<br>
>>>> @@ -3030,6 +3030,11 @@ int amdgpu_gpu_recover(struct amdgpu_device <br>
>>>> *adev, struct amdgpu_job *job)<br>
>>>>            return 0;<br>
>>>>        }<br>
>>>>    +    if (!amdgpu_gpu_recovery) {<br>
>>>> +        DRM_INFO("GPU recovery disabled.\n");<br>
>>>> +        return 0;<br>
>>>> +    }<br>
>>>> +<br>
>>> Please move this check into the caller of amdgpu_gpu_recover().<br>
>>><br>
>>> This way we can still trigger a GPU recovery manually or from the <br>
>>> hypervisor under SRIOV.<br>
>>><br>
>>> Christian.<br>
>> Problem with this is that amdgpu_check_soft_reset will not be called, <br>
>> this function which prints which IP block was hung even when later we <br>
>> opt not to recover.<br>
>> I suggest instead to add a bool force_reset parameter to <br>
>> amdgpu_gpu_recover which will override amdgpu_gpu_recovery and we can <br>
>> set it to true from amdgpu_debugfs_gpu_recover only.<br>
>><br>
>> Thanks,<br>
>> Andrey<br>
>><br>
>>>>        dev_info(adev->dev, "GPU reset begin!\n");<br>
>>>>          mutex_lock(&adev->lock_reset); diff --git <br>
>>>> a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
>>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
>>>> index 0b039bd..5c612e9 100644<br>
>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c<br>
>>>> @@ -90,7 +90,7 @@ int amdgpu_disp_priority = 0;<br>
>>>>    int amdgpu_hw_i2c = 0;<br>
>>>>    int amdgpu_pcie_gen2 = -1;<br>
>>>>    int amdgpu_msi = -1;<br>
>>>> -int amdgpu_lockup_timeout = 0;<br>
>>>> +int amdgpu_lockup_timeout = 10000;<br>
>>>>    int amdgpu_dpm = -1;<br>
>>>>    int amdgpu_fw_load_type = -1;<br>
>>>>    int amdgpu_aspm = -1;<br>
>>>> @@ -128,6 +128,7 @@ int amdgpu_param_buf_per_se = 0;<br>
>>>>    int amdgpu_job_hang_limit = 0;<br>
>>>>    int amdgpu_lbpw = -1;<br>
>>>>    int amdgpu_compute_multipipe = -1;<br>
>>>> +int amdgpu_gpu_recovery = 1;<br>
>>>>      MODULE_PARM_DESC(vramlimit, "Restrict VRAM for testing, in <br>
>>>> megabytes");<br>
>>>>    module_param_named(vramlimit, amdgpu_vram_limit, int, 0600); @@<br>
>>>> -165,7 +166,7 @@ module_param_named(pcie_gen2, amdgpu_pcie_gen2, <br>
>>>> int, 0444);<br>
>>>>    MODULE_PARM_DESC(msi, "MSI support (1 = enable, 0 = disable, -1 <br>
>>>> = auto)");<br>
>>>>    module_param_named(msi, amdgpu_msi, int, 0444);<br>
>>>>    -MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms <br>
>>>> (default 0 = disable)");<br>
>>>> +MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms <br>
>>>> +(default<br>
>>>> 10000)");<br>
>>>>    module_param_named(lockup_timeout, amdgpu_lockup_timeout, int, <br>
>>>> 0444);<br>
>>>>      MODULE_PARM_DESC(dpm, "DPM support (1 = enable, 0 = disable, <br>
>>>> -1 = auto)"); @@ -280,6 +281,9 @@ module_param_named(lbpw, <br>
>>>> amdgpu_lbpw, int, 0444);<br>
>>>>    MODULE_PARM_DESC(compute_multipipe, "Force compute queues to be <br>
>>>> spread across pipes (1 = enable, 0 = disable, -1 = auto)");<br>
>>>>    module_param_named(compute_multipipe, amdgpu_compute_multipipe, <br>
>>>> int, 0444);<br>
>>>>    +MODULE_PARM_DESC(gpu_recovery, "Enable GPU recovery mechanism, <br>
>>>> (1 = enable (default) , 0 = disable");<br>
>>>> +module_param_named(gpu_recovery, amdgpu_gpu_recovery, int, 0444);<br>
>>>> +<br>
>>>>    #ifdef CONFIG_DRM_AMDGPU_SI<br>
>>>>      #if defined(CONFIG_DRM_RADEON) ||<br>
>>>> defined(CONFIG_DRM_RADEON_MODULE)<br>
>>> _______________________________________________<br>
>>> amd-gfx mailing list<br>
>>> amd-gfx@lists.freedesktop.org<br>
>>> <a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
>> _______________________________________________<br>
>> amd-gfx mailing list<br>
>> amd-gfx@lists.freedesktop.org<br>
>> <a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
><br>
<br>
_______________________________________________<br>
amd-gfx mailing list<br>
amd-gfx@lists.freedesktop.org<br>
<a href="https://lists.freedesktop.org/mailman/listinfo/amd-gfx">https://lists.freedesktop.org/mailman/listinfo/amd-gfx</a><br>
</div>
</span></font></div>
</body>
</html>