<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;
        panose-1:2 11 0 4 2 2 2 2 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle21
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="en-CN" link="#467886" vlink="#96607D" style="word-wrap:break-word">
<p style="font-family:Calibri;font-size:10pt;color:#0000FF;margin:5pt;font-style:normal;font-weight:normal;text-decoration:none;" align="Left">
[AMD Official Use Only - AMD Internal Distribution Only]<br>
</p>
<br>
<div>
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">Ping…
<a id="OWAAM40A521FF225FC54D968E2E4F371415F5" href="mailto:Christian.Koenig@amd.com">
<span style="font-family:"Aptos",sans-serif;text-decoration:none">@Koenig, Christian</span></a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">Thanks<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">Sam<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"><o:p> </o:p></span></p>
<div id="mail-editor-reference-message-container">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">From:
</span></b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">amd-gfx <amd-gfx-bounces@lists.freedesktop.org> on behalf of Zhang, GuoQing (Sam) <GuoQing.Zhang@amd.com><br>
<b>Date: </b>Wednesday, April 23, 2025 at 14:59<br>
<b>To: </b>Christian König <ckoenig.leichtzumerken@gmail.com>, amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc: </b>Zhao, Victor <Victor.Zhao@amd.com>, Chang, HaiJun <HaiJun.Chang@amd.com>, Deng, Emily <Emily.Deng@amd.com>, Zhang, Owen(SRDC) <Owen.Zhang2@amd.com><br>
<b>Subject: </b>Re: [PATCH 6/6] drm/amdgpu: fix fence fallback timer expired error<o:p></o:p></span></p>
</div>
<p style="margin:5.0pt"><span style="font-size:10.0pt;color:blue">[AMD Official Use Only - AMD Internal Distribution Only]<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p style="margin:5.0pt"><span style="font-size:10.0pt;color:blue">[AMD Official Use Only - AMD Internal Distribution Only]<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">Hi
<a id="OWAAM7B04ED50E2293946AC1575664F4D4885" href="mailto:ckoenig.leichtzumerken@gmail.com">
<span style="font-family:"Aptos",sans-serif;text-decoration:none">@Christian König</span></a>,</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">On QEMU VM environment, when request_irq() is called in guest KMD, QEMU will enable interrupt for the device on the host.</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">When hibernate and resume with a new vGPU without calling request_irq() on the new vGPU, the interrupt of the new vGPU is not enabled. The IH handler in guest KMD will not be called
 in this case.</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">This change is to ensure request_irq() is called on resume for the new vGPUs.</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">Regards</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Aptos",sans-serif">Sam</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-family:"Aptos",sans-serif"> </span><o:p></o:p></p>
<div id="mail-editor-reference-message-container">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">From:
</span></b><span style="font-size:12.0pt;font-family:"Aptos",sans-serif;color:black">Christian König <ckoenig.leichtzumerken@gmail.com><br>
<b>Date: </b>Wednesday, April 16, 2025 at 21:54<br>
<b>To: </b>Zhang, GuoQing (Sam) <GuoQing.Zhang@amd.com>, amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org><br>
<b>Cc: </b>Zhao, Victor <Victor.Zhao@amd.com>, Chang, HaiJun <HaiJun.Chang@amd.com>, Deng, Emily <Emily.Deng@amd.com><br>
<b>Subject: </b>Re: [PATCH 6/6] drm/amdgpu: fix fence fallback timer expired error</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Am 14.04.25 um 12:46 schrieb Samuel Zhang:<br>
> IH is not working after switching a new gpu index for the first time.<br>
> IH handler function need to be re-registered with kernel after switching<br>
> to new gpu index.<br>
<br>
Why?<br>
<br>
Christian.<br>
<br>
><br>
> Signed-off-by: Samuel Zhang <guoqing.zhang@amd.com><br>
> Change-Id: Idece1c8fce24032fd08f5a8b6ac23793c51e56dd<br>
> ---<br>
>  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c |  7 +++++--<br>
>  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h |  1 +<br>
>  drivers/gpu/drm/amd/amdgpu/vega20_ih.c  | 18 ++++++++++++++++--<br>
>  3 files changed, 22 insertions(+), 4 deletions(-)<br>
><br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c<br>
> index 19ce4da285e8..2292245a0c5d 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c<br>
> @@ -326,7 +326,7 @@ int amdgpu_irq_init(struct amdgpu_device *adev)<br>
>        return r;<br>
>  }<br>
>  <br>
> -void amdgpu_irq_fini_hw(struct amdgpu_device *adev)<br>
> +void amdgpu_irq_uninstall(struct amdgpu_device *adev)<br>
>  {<br>
>        if (adev->irq.installed) {<br>
>                free_irq(adev->irq.irq, adev_to_drm(adev));<br>
> @@ -334,7 +334,10 @@ void amdgpu_irq_fini_hw(struct amdgpu_device *adev)<br>
>                if (adev->irq.msi_enabled)<br>
>                        pci_free_irq_vectors(adev->pdev);<br>
>        }<br>
> -<br>
> +}<br>
> +void amdgpu_irq_fini_hw(struct amdgpu_device *adev)<br>
> +{<br>
> +     amdgpu_irq_uninstall(adev);<br>
>        amdgpu_ih_ring_fini(adev, &adev->irq.ih_soft);<br>
>        amdgpu_ih_ring_fini(adev, &adev->irq.ih);<br>
>        amdgpu_ih_ring_fini(adev, &adev->irq.ih1);<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h<br>
> index 04c0b4fa17a4..c6e6681b4f71 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.h<br>
> @@ -123,6 +123,7 @@ extern const int node_id_to_phys_map[NODEID_MAX];<br>
>  void amdgpu_irq_disable_all(struct amdgpu_device *adev);<br>
>  <br>
>  int amdgpu_irq_init(struct amdgpu_device *adev);<br>
> +void amdgpu_irq_uninstall(struct amdgpu_device *adev);<br>
>  void amdgpu_irq_fini_sw(struct amdgpu_device *adev);<br>
>  void amdgpu_irq_fini_hw(struct amdgpu_device *adev);<br>
>  int amdgpu_irq_add_id(struct amdgpu_device *adev,<br>
> diff --git a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c<br>
> index faa0dd75dd6d..ef996505e4dc 100644<br>
> --- a/drivers/gpu/drm/amd/amdgpu/vega20_ih.c<br>
> +++ b/drivers/gpu/drm/amd/amdgpu/vega20_ih.c<br>
> @@ -643,12 +643,26 @@ static int vega20_ih_hw_fini(struct amdgpu_ip_block *ip_block)<br>
>  <br>
>  static int vega20_ih_suspend(struct amdgpu_ip_block *ip_block)<br>
>  {<br>
> -     return vega20_ih_hw_fini(ip_block);<br>
> +     struct amdgpu_device *adev = ip_block->adev;<br>
> +     int r = 0;<br>
> +<br>
> +     r = vega20_ih_hw_fini(ip_block);<br>
> +     amdgpu_irq_uninstall(adev);<br>
> +     return r;<br>
>  }<br>
>  <br>
>  static int vega20_ih_resume(struct amdgpu_ip_block *ip_block)<br>
>  {<br>
> -     return vega20_ih_hw_init(ip_block);<br>
> +     struct amdgpu_device *adev = ip_block->adev;<br>
> +     int r = 0;<br>
> +<br>
> +     r = amdgpu_irq_init(adev);<br>
> +     if (r) {<br>
> +             dev_err(adev->dev, "amdgpu_irq_init failed in %s, %d\n", __func__, r);<br>
> +             return r;<br>
> +     }<br>
> +     r = vega20_ih_hw_init(ip_block);<br>
> +     return r;<br>
>  }<br>
>  <br>
>  static bool vega20_ih_is_idle(struct amdgpu_ip_block *ip_block)<o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>