On 02/14/2017 05:41 PM, Tom St Denis wrote: > On 14/02/17 10:08 AM, Samuel Pitoiset wrote: >> Totally untested but as long as read_sensor() has been recently >> implemented for dpm based boards, amdgpu_sensors can now be >> exposed. >> >> v2: - make sure read_sensor is not NULL on dpm chips >> - keep sanity check for powerplay chips >> >> Cc: Tom St Denis <tom.stdenis at amd.com> >> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com> >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> index 6f021e70f15f..80821b436aeb 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c >> @@ -3204,6 +3204,9 @@ static ssize_t amdgpu_debugfs_sensor_read(struct >> file *f, char __user *buf, >> valuesize = sizeof(values); >> if (adev->powerplay.pp_funcs && >> adev->powerplay.pp_funcs->read_sensor) >> r = >> adev->powerplay.pp_funcs->read_sensor(adev->powerplay.pp_handle, idx, >> &values[0], &valuesize); >> + else if (adev->pm.funcs && adev->pm.funcs->read_sensor) >> + r = adev->pm.funcs->read_sensor(adev, idx, &values[0], >> + &valuesize); >> else >> return -EINVAL; >> >> > > Sorry NAK again, even with dpm=0 those function pointers are set and you > end up inside the dpm code trying to parse data structures that aren't > initialized. No worries. I thought that check was enough. Anyway, writing code without the hardware should be avoided. :) Can you try the thing suggested by Alex? Because I will need to fix up the DRM ioctl codepath as well. > > For instance, this oops on my Kaveri when trying to read SCLK. > > [ 729.616382] BUG: unable to handle kernel NULL pointer dereference at > 00000000000000c4 > [ 729.616467] IP: [<ffffffffc0e62d40>] kv_dpm_read_sensor+0xa0/0xd0 > [amdgpu] > [ 729.616619] PGD 232c58067 > [ 729.616644] PUD 232c4f067 > [ 729.616670] PMD 0 > > [ 729.616697] Oops: 0000 [#1] SMP > [ 729.616726] Modules linked in: fuse amdkfd amd_iommu_v2 amdgpu > i2c_algo_bit ttm drm_kms_helper drm xt_CHECKSUM iptable_mangle > ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat > nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack tun bridge > ebtable_filter ebtables ip6table_filter ip6_tables rpcsec_gss_krb5 nfsv4 > dns_resolver nfs fscache bnep vfat fat edac_mce_amd arc4 edac_core > kvm_amd iwlmvm snd_hda_codec_realtek mac80211 kvm snd_hda_codec_generic > snd_hda_codec_hdmi snd_hda_intel snd_hda_codec snd_hda_core btusb btrtl > btbcm btintel iwlwifi bluetooth snd_hwdep cfg80211 snd_seq > snd_seq_device snd_pcm irqbypass joydev snd_timer snd crct10dif_pclmul > crc32_pclmul pcspkr ghash_clmulni_intel rfkill fam15h_power sp5100_tco > k10temp soundcore acpi_cpufreq tpm_tis i2c_piix4 tpm_tis_core > [ 729.617499] shpchp video tpm nfsd auth_rpcgss nfs_acl lockd grace > sunrpc ata_generic pata_acpi 8021q crc32c_intel garp stp llc serio_raw > mrp pata_atiixp r8169 mii fjes > [ 729.617672] CPU: 0 PID: 1417 Comm: umr Not tainted 4.9.0+ #4 > [ 729.617720] Hardware name: Gigabyte Technology Co., Ltd. To be filled > by O.E.M./F2A88XN-WIFI, BIOS F5 04/22/2015 > [ 729.617802] task: ffff8e43ef37d880 task.stack: ffff9d7501594000 > [ 729.617852] RIP: 0010:[<ffffffffc0e62d40>] [<ffffffffc0e62d40>] > kv_dpm_read_sensor+0xa0/0xd0 [amdgpu] > [ 729.618000] RSP: 0018:ffff9d7501597d60 EFLAGS: 00010246 > [ 729.618046] RAX: 0000000000000000 RBX: ffff9d7501597d98 RCX: > 0000000000000000 > [ 729.618104] RDX: 0000000000000000 RSI: 0000000000000286 RDI: > 0000000000000286 > [ 729.618162] RBP: ffff9d7501597d80 R08: 0000000000000000 R09: > 0000000000000000 > [ 729.618221] R10: 0000000000000000 R11: ffff8e43ef37d880 R12: > ffff9d7501597d98 > [ 729.618285] R13: 0000000000000000 R14: ffff9d7501597d94 R15: > 0000000000000000 > [ 729.618344] FS: 00007f6525bfd700(0000) GS:ffff8e43fec00000(0000) > knlGS:0000000000000000 > [ 729.618411] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 729.618458] CR2: 00000000000000c4 CR3: 00000002261f6000 CR4: > 00000000000406f0 > [ 729.618515] Stack: > [ 729.618535] 0000000000000004 00007ffe1e85ca00 ffff8e43f3162100 > 0000000000000004 > [ 729.618607] ffff9d7501597df8 ffffffffc0e2c637 000000401e85ca00 > ffff9d7501597f18 > [ 729.618676] ffff9d7501597df8 ffffffffc0e2dc7d 0000000000005403 > 0000000000000000 > [ 729.618747] Call Trace: > [ 729.618826] [<ffffffffc0e2c637>] > amdgpu_debugfs_sensor_read+0xf7/0x120 [amdgpu] > [ 729.618938] [<ffffffffc0e2dc7d>] ? > amdgpu_debugfs_regs_read+0x17d/0x220 [amdgpu] > [ 729.619002] [<ffffffff8f3433e4>] full_proxy_read+0x54/0x90 > [ 729.619049] [<ffffffff8f24be67>] __vfs_read+0x37/0x150 > [ 729.619095] [<ffffffff8f35e67b>] ? security_file_permission+0x9b/0xc0 > [ 729.621382] [<ffffffff8f24cfe6>] vfs_read+0x96/0x130 > [ 729.622997] [<ffffffff8f24e4d5>] SyS_read+0x55/0xc0 > [ 729.624540] [<ffffffff8f8010b7>] entry_SYSCALL_64_fastpath+0x1a/0xa9 > [ 729.626139] Code: 24 31 c0 41 c7 06 04 00 00 00 41 5c 41 5d 41 5e 41 > 5f 5d c3 c1 e8 10 83 e0 1f 83 f8 07 77 ad 48 8d 14 c5 00 00 00 00 5b 48 > 29 c2 <41> 8b 84 95 c4 00 00 00 0f c8 41 89 04 24 41 c7 06 04 00 00 00 >