| From bdd20bef7639c0699686eaae3ed3da782e401cbd Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 28 Aug 2020 12:45:53 +0000 |
| Subject: drm/vkms: avoid warning in vkms_get_vblank_timestamp |
| |
| From: Sidong Yang <realwakka@gmail.com> |
| |
| [ Upstream commit 05ca530268a9d0ab3547e7b288635e35990a77c4 ] |
| |
| This patch avoid the warning in vkms_get_vblank_timestamp when vblanks |
| aren't enabled. When running igt test kms_cursor_crc just after vkms |
| module, the warning raised like below. Initial value of vblank time is |
| zero and hrtimer.node.expires is also zero if vblank aren't enabled |
| before. vkms module isn't real hardware but just virtual hardware |
| module. so vkms can't generate a resonable timestamp when hrtimer is |
| off. it's best to grab the current time. |
| |
| [106444.464503] [IGT] kms_cursor_crc: starting subtest pipe-A-cursor-size-change |
| [106444.471475] WARNING: CPU: 0 PID: 10109 at |
| vkms_get_vblank_timestamp+0x42/0x50 [vkms] |
| [106444.471511] CPU: 0 PID: 10109 Comm: kms_cursor_crc Tainted: G W OE |
| 5.9.0-rc1+ #6 |
| [106444.471514] RIP: 0010:vkms_get_vblank_timestamp+0x42/0x50 [vkms] |
| [106444.471528] Call Trace: |
| [106444.471551] drm_get_last_vbltimestamp+0xb9/0xd0 [drm] |
| [106444.471566] drm_reset_vblank_timestamp+0x63/0xe0 [drm] |
| [106444.471579] drm_crtc_vblank_on+0x85/0x150 [drm] |
| [106444.471582] vkms_crtc_atomic_enable+0xe/0x10 [vkms] |
| [106444.471592] drm_atomic_helper_commit_modeset_enables+0x1db/0x230 |
| [drm_kms_helper] |
| [106444.471594] vkms_atomic_commit_tail+0x38/0xc0 [vkms] |
| [106444.471601] commit_tail+0x97/0x130 [drm_kms_helper] |
| [106444.471608] drm_atomic_helper_commit+0x117/0x140 [drm_kms_helper] |
| [106444.471622] drm_atomic_commit+0x4a/0x50 [drm] |
| [106444.471629] drm_atomic_helper_set_config+0x63/0xb0 [drm_kms_helper] |
| [106444.471642] drm_mode_setcrtc+0x1d9/0x7b0 [drm] |
| [106444.471654] ? drm_mode_getcrtc+0x1a0/0x1a0 [drm] |
| [106444.471666] drm_ioctl_kernel+0xb6/0x100 [drm] |
| [106444.471677] drm_ioctl+0x3ad/0x470 [drm] |
| [106444.471688] ? drm_mode_getcrtc+0x1a0/0x1a0 [drm] |
| [106444.471692] ? tomoyo_file_ioctl+0x19/0x20 |
| [106444.471694] __x64_sys_ioctl+0x96/0xd0 |
| [106444.471697] do_syscall_64+0x37/0x80 |
| [106444.471699] entry_SYSCALL_64_after_hwframe+0x44/0xa9 |
| |
| Cc: Daniel Vetter <daniel@ffwll.ch> |
| Cc: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> |
| Cc: Haneen Mohammed <hamohammed.sa@gmail.com> |
| Cc: Melissa Wen <melissa.srw@gmail.com> |
| |
| Signed-off-by: Sidong Yang <realwakka@gmail.com> |
| Reviewed-by: Melissa Wen <melissa.srw@gmail.com> |
| Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20200828124553.2178-1-realwakka@gmail.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/vkms/vkms_crtc.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| diff --git a/drivers/gpu/drm/vkms/vkms_crtc.c b/drivers/gpu/drm/vkms/vkms_crtc.c |
| index ac85e17428f88..09c012d54d58f 100644 |
| --- a/drivers/gpu/drm/vkms/vkms_crtc.c |
| +++ b/drivers/gpu/drm/vkms/vkms_crtc.c |
| @@ -86,6 +86,11 @@ static bool vkms_get_vblank_timestamp(struct drm_crtc *crtc, |
| struct vkms_output *output = &vkmsdev->output; |
| struct drm_vblank_crtc *vblank = &dev->vblank[pipe]; |
| |
| + if (!READ_ONCE(vblank->enabled)) { |
| + *vblank_time = ktime_get(); |
| + return true; |
| + } |
| + |
| *vblank_time = READ_ONCE(output->vblank_hrtimer.node.expires); |
| |
| if (WARN_ON(*vblank_time == vblank->time)) |
| -- |
| 2.27.0 |
| |