linux/drivers/gpu/drm
Shayenne Moura ba420afab5 drm/vkms: Bugfix racing hrtimer vblank handle
When the vblank irq happens, kernel time subsystem executes
`vkms_vblank_simulate`. In parallel or not, it prepares all stuff
necessary to the next vblank with arm, and it must flush these stuff
before the next vblank irq. However, vblank counter is ahead when arm is
executed in parallel with handle vblank.

CPU 0:					CPU 1:
 |					 |
atomic_commit_tail is ongoing		 |
 |					 |
 |					hrtimer: vkms_vblank_simulate()
 |					 |
 |					drm_crtc_handle_vblank()
 |					 |
drm_crtc_arm_vblank()			 |
 |					 |
->get_vblank_timestamp()		 |
 |					 |
 |					hrtimer_forward_now()

Then, we should guarantee that the vblank interval time is correct (not
changed) before finish the vblank handle.

Fix the bug including the call to `hrtimer_forward_now()` in the same
lock of `drm_crtc_handle_vblank()` to ensure that the timestamp update
is correct when finish the vblank handle.

Signed-off-by: Shayenne Moura <shayenneluzmoura@gmail.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Signed-off-by: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/e2e4b8f3a5cab7b2dba75bf1930f86b0a4ee08c9.1548856186.git.shayenneluzmoura@gmail.com
2019-02-03 19:28:21 -02:00
..
amd drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
arc drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
arm drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
armada drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
ast drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
atmel-hlcdc drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
bochs drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
bridge drm/bridge: dw-hdmi: add support for YUV420 output 2019-02-01 13:15:10 +01:00
cirrus drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
etnaviv drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
exynos drm/<drivers>: Don't set FBINFO_(FLAG_)DEFAULT 2019-01-29 10:56:42 +01:00
fsl-dcu drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
gma500 drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
hisilicon drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
i2c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
i810
i915 drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
imx drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
lib
mediatek drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
meson drm/meson: add support for HDMI2.0 2160p modes 2019-02-01 13:15:09 +01:00
mga drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
mgag200 drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
msm drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
mxsfb drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
nouveau drm/<drivers>: Don't set FBINFO_(FLAG_)DEFAULT 2019-01-29 10:56:42 +01:00
omapdrm drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
panel drm/panel: simple: Add support for PDA 91-00156-A0 panel 2019-01-28 17:45:28 +01:00
pl111 drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
qxl drm/qxl: use ttm_tt 2019-01-30 10:51:35 +01:00
r128 drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
radeon drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
rcar-du drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
rockchip drm/<drivers>: Don't set FBINFO_(FLAG_)DEFAULT 2019-01-29 10:56:42 +01:00
savage drm/savage: mark expected switch fall-throughs 2019-01-30 17:35:29 +01:00
scheduler drm/scheduler: Add drm_sched_suspend/resume_timeout() 2018-12-05 17:56:16 -05:00
selftests drm/selftest: fix spelling mistake "dimention" -> "dimension" 2018-12-11 15:19:42 +01:00
shmobile drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
sis
sti drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
stm drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
sun4i drm/sun4i: Add support for A23 display pipeline 2019-01-25 10:42:07 +01:00
tdfx
tegra drm/<drivers>: Don't set FBINFO_(FLAG_)DEFAULT 2019-01-29 10:56:42 +01:00
tilcdc drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
tinydrm drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
ttm drm/ttm: Use drm_debug_printer for all ttm_bo_mem_space_debug output 2018-12-21 15:27:58 -05:00
tve200 drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
udl drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
v3d drm/v3d: Invalidate the caches from the outside in. 2018-12-07 10:56:51 -08:00
vc4 drm/irq: Don't check for DRIVER_HAVE_IRQ in drm_irq_(un)install 2019-01-29 15:45:06 +01:00
vgem dma-buf: make fence sequence numbers 64 bit v2 2018-12-07 12:44:16 +01:00
via drm/via: mark expected switch fall-throughs 2019-01-30 17:35:29 +01:00
virtio drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
vkms drm/vkms: Bugfix racing hrtimer vblank handle 2019-02-03 19:28:21 -02:00
vmwgfx drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
xen drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
zte drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
ati_pcigart.c drm/ati_pcigart: Fix error code in drm_ati_pcigart_init() 2018-12-17 10:47:17 +01:00
drm_agpsupport.c
drm_atomic_helper.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
drm_atomic_state_helper.c drm: Put damage blob when destroy plane state 2018-12-24 11:53:50 +01:00
drm_atomic_uapi.c Merge tag 'vmwgfx-next-2018-12-05' of git://people.freedesktop.org/~thomash/linux into drm-next 2018-12-06 13:43:56 +10:00
drm_atomic.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_auth.c
drm_blend.c
drm_bridge.c drm: bridge: Constify mode arguments to bridge .mode_set() operation 2019-01-14 03:51:14 +02:00
drm_bufs.c drm: un-inline drm_legacy_findmap() 2019-01-02 11:37:11 +02:00
drm_cache.c
drm_client.c
drm_color_mgmt.c
drm_connector.c drm/doc: fix VRR_ENABLED casing 2019-01-30 17:59:15 +01:00
drm_context.c drm: Fix error handling in drm_legacy_addctx 2019-01-07 11:26:31 +01:00
drm_crtc_helper_internal.h
drm_crtc_helper.c drm: Remove use of drm_mode_object 2019-01-15 13:20:56 +01:00
drm_crtc_internal.h drm: Unexport drm_crtc_force_disable 2019-01-11 15:56:40 +01:00
drm_crtc.c drm: Move the legacy kms disable_all helper to crtc helpers 2019-01-11 22:54:29 +01:00
drm_damage_helper.c drm/damage-helper: Add drm_atomic_helper_damage_merged() 2019-01-17 10:56:54 +01:00
drm_debugfs_crc.c
drm_debugfs.c
drm_dma.c
drm_dp_aux_dev.c
drm_dp_cec.c
drm_dp_dual_mode_helper.c
drm_dp_helper.c Merge drm/drm-next into drm-misc-next 2019-01-24 11:03:16 +01:00
drm_dp_mst_topology.c drm/dp/mst: Provide better debugs for NAK replies 2019-01-30 23:23:13 +02:00
drm_drv.c drm/docs: improve docs for drm_drv.c 2019-01-12 13:07:30 +01:00
drm_dsc.c
drm_dumb_buffers.c
drm_edid_load.c
drm_edid.c drm/edid: Add display_info.rgb_quant_range_selectable 2019-01-10 19:01:06 +02:00
drm_encoder_slave.c
drm_encoder.c
drm_fb_cma_helper.c drm/cma-helper: Remove unused fbdev code 2019-01-17 10:56:38 +01:00
drm_fb_helper.c drm/fb-helper: generic: Fix drm_fbdev_client_restore() 2019-01-29 10:38:44 +01:00
drm_file.c Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
drm_flip_work.c drm: move drm_can_sleep() to drm_util.h 2019-01-14 10:58:37 +01:00
drm_fourcc.c
drm_framebuffer.c drm: move EXPORT_SYMBOL_FOR_TESTS_ONLY to drm_util.h 2019-01-14 10:58:37 +01:00
drm_gem_cma_helper.c
drm_gem_framebuffer_helper.c drm/gem-fb-helper: Add drm_gem_fb_create_with_dirty() 2019-01-17 10:56:45 +01:00
drm_gem.c drm/gem: Mark pinned pages as unevictable 2019-01-09 21:24:50 +00:00
drm_hashtab.c
drm_internal.h drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_ioc32.c
drm_ioctl.c drm/ioctl: Fix Spectre v1 vulnerabilities 2018-12-20 08:13:29 +01:00
drm_irq.c drm/irq: Ditch DRIVER_IRQ_SHARED 2019-01-29 15:45:21 +01:00
drm_kms_helper_common.c
drm_lease.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_legacy.h
drm_lock.c
drm_memory.c
drm_mipi_dsi.c
drm_mm.c
drm_mode_config.c drm-misc-next for 5.1: 2019-01-10 05:58:52 +10:00
drm_mode_object.c drm: Reorder set_property_atomic to avoid returning with an active ww_ctx 2019-01-03 09:54:26 +00:00
drm_modes.c drm: Remove use of drm_mode_object 2019-01-15 13:20:56 +01:00
drm_modeset_helper.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
drm_modeset_lock.c drm/atomic: integrate modeset lock with private objects 2018-12-11 15:24:30 +01:00
drm_of.c drm/of: Fix kerneldoc 2019-01-12 13:07:58 +01:00
drm_panel_orientation_quirks.c
drm_panel.c drm/panel: Small documentation polish 2019-01-12 13:08:12 +01:00
drm_pci.c
drm_plane_helper.c
drm_plane.c drm: Auto-set allow_fb_modifiers when given modifiers at plane init 2019-01-11 16:53:55 +01:00
drm_prime.c
drm_print.c
drm_probe_helper.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
drm_property.c
drm_rect.c
drm_scatter.c
drm_scdc_helper.c
drm_simple_kms_helper.c drm: Split out drm_probe_helper.h 2019-01-24 13:20:42 +01:00
drm_syncobj.c drm/syncobj: remove drm_syncobj_cb and cleanup 2018-12-11 17:38:38 +01:00
drm_sysfs.c
drm_trace_points.c
drm_trace.h
drm_vblank.c drm/vblank: Allow dynamic per-crtc max_vblank_count 2019-01-14 21:23:55 +02:00
drm_vm.c
drm_vma_manager.c
drm_writeback.c
Kconfig drm/cma-helper: Remove unused fbdev code 2019-01-17 10:56:38 +01:00
Makefile Merge tag 'vmwgfx-next-2018-12-05' of git://people.freedesktop.org/~thomash/linux into drm-next 2018-12-06 13:43:56 +10:00