<html xmlns:v="urn:schemas-microsoft-com:vml" 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=utf-8">
<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:Aptos;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 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:0in;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle21
        {mso-style-type:personal-compose;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p><o:p> </o:p></p>
<div>
<p class="MsoNormal">On 2024/6/19 12:53, Huang Rui wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>On Wed, Jun 19, 2024 at 12:46:25PM +0800, Huang Rui wrote:<o:p></o:p></pre>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>On Wed, Jun 19, 2024 at 12:29:24PM +0800, Zhang, Julia wrote:<o:p></o:p></pre>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre>Instead of using state->fb->obj[0] directly, get object from framebuffer<o:p></o:p></pre>
<pre>by calling drm_gem_fb_get_obj() and return error code when object is<o:p></o:p></pre>
<pre>null to avoid using null object of framebuffer.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>v2: Call drm_gem_fb_get_obj after check old_state->fb for NULL.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Signed-off-by: Julia Zhang <a href="mailto:Julia.Zhang@amd.com"><Julia.Zhang@amd.com></a><o:p></o:p></pre>
<pre>---<o:p></o:p></pre>
</blockquote>
<pre><o:p> </o:p></pre>
<pre>Julia, you can add my RB during V1 in the next submission.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Reviewed-by: Huang Rui <a href="mailto:ray.huang@amd.com"><ray.huang@amd.com></a><o:p></o:p></pre>
</blockquote>
<pre><o:p> </o:p></pre>
<pre>CC Fusheng who reported the issue.<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>Fusheng, may we have your reported-by?<o:p></o:p></pre>
</blockquote>
<p>Hi Fusheng,<o:p></o:p></p>
<p>Can you help to review this patch and may we have you reported-by? Thank you.<o:p></o:p></p>
<p>Julia<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<pre><o:p> </o:p></pre>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre><o:p> </o:p></pre>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<pre> drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 18 ++++++++++++++++--<o:p></o:p></pre>
<pre> 1 file changed, 16 insertions(+), 2 deletions(-)<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
<pre>diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c<o:p></o:p></pre>
<pre>index d60c4a2eeb0c..212f6522859d 100644<o:p></o:p></pre>
<pre>--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c<o:p></o:p></pre>
<pre>+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c<o:p></o:p></pre>
<pre>@@ -2,6 +2,7 @@<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> #include <drm/drm_atomic_helper.h><o:p></o:p></pre>
<pre> #include <drm/drm_simple_kms_helper.h><o:p></o:p></pre>
<pre>+#include <drm/drm_gem_framebuffer_helper.h><o:p></o:p></pre>
<pre> #include <drm/drm_vblank.h><o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre> #include "amdgpu.h"<o:p></o:p></pre>
<pre>@@ -311,7 +312,13 @@ static int amdgpu_vkms_prepare_fb(struct drm_plane *plane,<o:p></o:p></pre>
<pre>             return 0;<o:p></o:p></pre>
<pre>     }<o:p></o:p></pre>
<pre>     afb = to_amdgpu_framebuffer(new_state->fb);<o:p></o:p></pre>
<pre>-    obj = new_state->fb->obj[0];<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+    obj = drm_gem_fb_get_obj(new_state->fb, 0);<o:p></o:p></pre>
<pre>+    if (!obj) {<o:p></o:p></pre>
<pre>+        DRM_ERROR("Failed to get obj from framebuffer\n");<o:p></o:p></pre>
<pre>+            return -EINVAL;<o:p></o:p></pre>
<pre>+    }<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>     rbo = gem_to_amdgpu_bo(obj);<o:p></o:p></pre>
<pre>     adev = amdgpu_ttm_adev(rbo->tbo.bdev);<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>@@ -365,12 +372,19 @@ static void amdgpu_vkms_cleanup_fb(struct drm_plane *plane,<o:p></o:p></pre>
<pre>                               struct drm_plane_state *old_state)<o:p></o:p></pre>
<pre> {<o:p></o:p></pre>
<pre>     struct amdgpu_bo *rbo;<o:p></o:p></pre>
<pre>+    struct drm_gem_object *obj;<o:p></o:p></pre>
<pre>     int r;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>     if (!old_state->fb)<o:p></o:p></pre>
<pre>             return;<o:p></o:p></pre>
<pre> <o:p></o:p></pre>
<pre>-    rbo = gem_to_amdgpu_bo(old_state->fb->obj[0]);<o:p></o:p></pre>
<pre>+    obj = drm_gem_fb_get_obj(old_state->fb, 0);<o:p></o:p></pre>
<pre>+    if (!obj) {<o:p></o:p></pre>
<pre>+        DRM_ERROR("Failed to get obj from framebuffer\n");<o:p></o:p></pre>
<pre>+            return;<o:p></o:p></pre>
<pre>+    }<o:p></o:p></pre>
<pre>+<o:p></o:p></pre>
<pre>+    rbo = gem_to_amdgpu_bo(obj);<o:p></o:p></pre>
<pre>     r = amdgpu_bo_reserve(rbo, false);<o:p></o:p></pre>
<pre>     if (unlikely(r)) {<o:p></o:p></pre>
<pre>         DRM_ERROR("failed to reserve rbo before unpin\n");<o:p></o:p></pre>
<pre>-- <o:p></o:p></pre>
<pre>2.34.1<o:p></o:p></pre>
<pre><o:p> </o:p></pre>
</blockquote>
</blockquote>
</blockquote>
</div>
</body>
</html>