mirror of https://gitee.com/openkylin/linux.git
05103ea9a3
DRM_WAIT_ON() is from the deprecated drm_os_linux header and the modern replacement is the wait_event_*. The return values differ, so a conversion is needed to keep the original interface towards userspace. Introduced a switch/case to make code obvious. Analysis from Michel Dänzer: The waiting condition rely on all relevant places where vblank_count is modified calls wake_up(&vblank->queue). drm_handle_vblank(): - Calls wake_up(&vblank->queue) drm_vblank_enable(): - There is no need here because there can be no sleeping waiters in the queue, because vblank->enabled == false immediately terminates any waits. drm_crtc_accurate_vblank_count(): - This is called from interrupt handlers, at least from amdgpu_dm.c:dm_pflip_high_irq(). Not sure it needs to wake up the queue though, the driver should call drm_(crtc_)_handle_vblank anyway. drm_vblank_disable_and_save(): - It can be called from an interrupt, via drm_handle_vblank -> vblank_disable_fn. However, the only place where drm_vblank_disable_and_save can be called with sleeping waiters in the queue is in drm_crtc_vblank_off, which wakes up the queue afterwards (which terminates all waits, because vblank->enabled == false at this point). v3: - Added analysis to changelog from Michel Dänzer - Moved return result handling inside if (req_seq != seq) (Daniel V) - Reused more of the former logic - resulting in simpler code - Dropped Reviewed-by from Sean Paul as this is a new implementation v2: - Fix so the case where req_seq equals seq was handled properly - quick hack to check if IGT became happy - Only sent to igt, not to dri-devel Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Cc: Sean Paul <sean@poorly.run> Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Maxime Ripard <maxime.ripard@bootlin.com> Cc: David Airlie <airlied@linux.ie> Cc: Daniel Vetter <daniel@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20190726210658.GA6299@ravnborg.org |
||
---|---|---|
Documentation | ||
LICENSES | ||
arch | ||
block | ||
certs | ||
crypto | ||
drivers | ||
fs | ||
include | ||
init | ||
ipc | ||
kernel | ||
lib | ||
mm | ||
net | ||
samples | ||
scripts | ||
security | ||
sound | ||
tools | ||
usr | ||
virt | ||
.clang-format | ||
.cocciconfig | ||
.get_maintainer.ignore | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
COPYING | ||
CREDITS | ||
Kbuild | ||
Kconfig | ||
MAINTAINERS | ||
Makefile | ||
README |
README
Linux kernel ============ There are several guides for kernel developers and users. These guides can be rendered in a number of formats, like HTML and PDF. Please read Documentation/admin-guide/README.rst first. In order to build the documentation, use ``make htmldocs`` or ``make pdfdocs``. The formatted documentation can also be read online at: https://www.kernel.org/doc/html/latest/ There are various text files in the Documentation/ subdirectory, several of them using the Restructured Text markup notation. Please read the Documentation/process/changes.rst file, as it contains the requirements for building and running the kernel, and information about the problems which may result by upgrading your kernel.