<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<meta content="text/html; charset=UTF-8">
<style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="x_divtagdefaultwrapper" dir="ltr" style="font-size:12pt; color:#000000; font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Reviewed-by: Ken Wang<Qingqing.Wang@amd.com><br>
</p>
</div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>发件人:</b> amd-gfx <amd-gfx-bounces@lists.freedesktop.org> 代表 Huang Rui <ray.huang@amd.com><br>
<b>发送时间:</b> 2017年4月11日 10:58:21<br>
<b>收件人:</b> amd-gfx@lists.freedesktop.org; Deucher, Alexander<br>
<b>抄送:</b> Huang, Ray<br>
<b>主题:</b> [PATCH] drm/amdgpu: fix to add buffer funcs check</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">This patch fixes the case when buffer funcs is empty and bo evict is<br>
executing. It must double check buffer funcs, otherwise, a NULL<br>
pointer dereference kernel panic will be encountered.<br>
<br>
 BUG: unable to handle kernel NULL pointer dereference at 00000000000001a4<br>
 IP: [<ffffffffa067b6cd>] amdgpu_evict_flags+0x3d/0xf0 [amdgpu]<br>
 PGD 0<br>
<br>
 Oops: 0000 [#1] SMP<br>
 Modules linked in: amdgpu(OE) ttm drm_kms_helper drm i2c_algo_bit fb_sys_fops syscopyarea sysfillrect sysimgblt fmem(OE) physmem_drv(OE) rpcsec_gss_krb5 nfsv4 nfs fscache intel_rapl x86_pkg_temp_thermal intel_powerclamp snd_hda_codec_realtek snd_hda_codec_hdmi
 snd_hda_codec_generic kvm_intel snd_hda_intel snd_hda_codec kvm snd_hda_core joydev eeepc_wmi asus_wmi sparse_keymap snd_hwdep snd_pcm irqbypass crct10dif_pclmul snd_seq_midi snd_seq_midi_event snd_rawmidi snd_seq crc32_pclmul snd_seq_device ghash_clmulni_intel
 aesni_intel aes_x86_64 snd_timer lrw gf128mul mei_me snd glue_helper ablk_helper cryptd tpm_infineon mei lpc_ich serio_raw soundcore shpchp mac_hid nfsd auth_rpcgss nfs_acl lockd grace coretemp sunrpc parport_pc ppdev lp parport autofs4 hid_generic mxm_wmi
 r8169 usbhid ahci<br>
  psmouse libahci nvme mii hid nvme_core wmi video<br>
 CPU: 3 PID: 1627 Comm: kworker/u8:17 Tainted: G           OE   4.9.0-custom #1<br>
 Hardware name: ASUS All Series/Z87-A, BIOS 1802 01/28/2014<br>
 Workqueue: events_unbound async_run_entry_fn<br>
 task: ffff88021e7057c0 task.stack: ffffc9000262c000<br>
 RIP: 0010:[<ffffffffa067b6cd>]  [<ffffffffa067b6cd>] amdgpu_evict_flags+0x3d/0xf0 [amdgpu]<br>
 RSP: 0018:ffffc9000262fb30  EFLAGS: 00010246<br>
 RAX: 0000000000000000 RBX: ffff88021e8a5858 RCX: 0000000000000000<br>
 RDX: 0000000000000001 RSI: ffffc9000262fb58 RDI: ffff88021e8a5800<br>
 RBP: ffffc9000262fb48 R08: 0000000000000000 R09: ffff88021e8a5814<br>
 R10: 000000001def8f01 R11: ffff88021def8c80 R12: ffffc9000262fb58<br>
 R13: ffff88021d2b1990 R14: 0000000000000000 R15: ffff88021e8a5858<br>
 FS:  0000000000000000(0000) GS:ffff88022ed80000(0000) knlGS:0000000000000000<br>
 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033<br>
 CR2: 00000000000001a4 CR3: 0000000001c07000 CR4: 00000000001406e0<br>
 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000<br>
 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400<br>
<br>
Signed-off-by: Huang Rui <ray.huang@amd.com><br>
---<br>
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +++-<br>
 1 file changed, 3 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c<br>
index e00f66a..bbbdf50 100644<br>
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c<br>
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c<br>
@@ -221,7 +221,9 @@ static void amdgpu_evict_flags(struct ttm_buffer_object *bo,<br>
         switch (bo->mem.mem_type) {<br>
         case TTM_PL_VRAM:<br>
         case AMDGPU_PL_DGMA:<br>
-               if (adev->mman.buffer_funcs_ring->ready == false) {<br>
+               if (adev->mman.buffer_funcs &&<br>
+                       adev->mman.buffer_funcs_ring &&<br>
+                       adev->mman.buffer_funcs_ring->ready == false) {<br>
                         amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_CPU);<br>
                 } else {<br>
                         amdgpu_ttm_placement_from_domain(abo, AMDGPU_GEM_DOMAIN_GTT);<br>
-- <br>
2.7.4<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>
</body>
</html>