Go to file
Daniel Vetter 24835e442f drm: reference count event->completion
When writing the generic nonblocking commit code I assumed that
through clever lifetime management I can assure that the completion
(stored in drm_crtc_commit) only gets freed after it is completed. And
that worked.

I also wanted to make nonblocking helpers resilient against driver
bugs, by having timeouts everywhere. And that worked too.

Unfortunately taking boths things together results in oopses :( Well,
at least sometimes: What seems to happen is that the drm event hangs
around forever stuck in limbo land. The nonblocking helpers eventually
time out, move on and release it. Now the bug I tested all this
against is drivers that just entirely fail to deliver the vblank
events like they should, and in those cases the event is simply
leaked. But what seems to happen, at least sometimes, on i915 is that
the event is set up correctly, but somohow the vblank fails to fire in
time. Which means the event isn't leaked, it's still there waiting for
eventually a vblank to fire. That tends to happen when re-enabling the
pipe, and then the trap springs and the kernel oopses.

The correct fix here is simply to refcount the crtc commit to make
sure that the event sticks around even for drivers which only
sometimes fail to deliver vblanks for some arbitrary reasons. Since
crtc commits are already refcounted that's easy to do.

References: https://bugs.freedesktop.org/show_bug.cgi?id=96781
Cc: Jim Rees <rees@umich.edu>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20161221102331.31033-1-daniel.vetter@ffwll.ch
2017-01-04 11:03:06 +01:00
arch These are the documentation changes for 4.10. 2016-12-13 10:36:39 +01:00
block blk-mq: update hardware and software queues for sleeping alloc 2016-10-27 09:56:03 -06:00
certs certs: Add a secondary system keyring that can be added to dynamically 2016-04-11 22:48:09 +01:00
crypto X.509: Fix double free in x509_cert_parse() [ver #3] 2016-11-25 12:57:48 +11:00
Documentation drm/doc: Update styleguide 2016-12-30 13:35:41 +01:00
drivers drm: reference count event->completion 2017-01-04 11:03:06 +01:00
firmware WHENCE: use https://linuxtv.org for LinuxTV URLs 2015-12-04 10:35:11 -02:00
fs These are the documentation changes for 4.10. 2016-12-13 10:36:39 +01:00
include drm: reference count event->completion 2017-01-04 11:03:06 +01:00
init These are the documentation changes for 4.10. 2016-12-13 10:36:39 +01:00
ipc ipc: account for kmem usage on mqueue and msg 2016-10-27 18:43:43 -07:00
kernel Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-12-02 11:45:27 -08:00
lib lib: Add a simple prime number generator 2016-12-27 12:30:56 +01:00
mm mm, vmscan: add cond_resched() into shrink_node_memcg() 2016-12-02 18:48:03 -08:00
net net: avoid signed overflows for SO_{SND|RCV}BUFFORCE 2016-12-02 14:10:14 -05:00
samples bpf/samples: Fix PT_REGS_IP on s390x and use it 2016-11-28 16:26:46 -05:00
scripts These are the documentation changes for 4.10. 2016-12-13 10:36:39 +01:00
security apparmor: fix change_hat not finding hat after policy replacement 2016-11-21 18:01:28 +11:00
sound Linux 4.9-rc8 2016-12-05 17:11:48 +10:00
tools drm: Add some kselftests for the DRM range manager (struct drm_mm) 2016-12-27 12:34:39 +01:00
usr usr/Kconfig: make initrd compression algorithm selection not expert 2014-12-13 12:42:52 -08:00
virt KVM: use after free in kvm_ioctl_create_device() 2016-12-01 16:10:50 +01:00
.cocciconfig scripts: add Linux .cocciconfig for coccinelle 2016-07-22 12:13:39 +02:00
.get_maintainer.ignore Add hch to .get_maintainer.ignore 2015-08-21 14:30:10 -07:00
.gitattributes .gitattributes: set git diff driver for C source code files 2016-10-07 18:46:30 -07:00
.gitignore Merge branch 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild 2016-08-02 16:48:52 -04:00
.mailmap Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2016-10-15 09:26:12 -07:00
COPYING [PATCH] update FSF address in COPYING 2005-09-10 10:06:29 -07:00
CREDITS Fix up a couple of field names in the CREDITS file 2016-12-02 10:48:50 -08:00
Kbuild scripts/gdb: provide linux constants 2016-05-23 17:04:14 -07:00
Kconfig kbuild: migrate all arch to the kconfig mainmenu upgrade 2010-09-19 22:54:11 -04:00
MAINTAINERS Main pull request for drm for 4.10 kernel 2016-12-13 22:23:18 +01:00
Makefile Linux 4.9-rc8 2016-12-04 12:50:51 -08:00
README README: add a new README file, pointing to the Documentation/ 2016-10-24 08:12:35 -02:00

Linux kernel
============

This file was moved to Documentation/admin-guide/README.rst

Please notice that there are several guides for kernel developers and users.
These guides can be rendered in a number of formats, like HTML and PDF.

In order to build the documentation, use ``make htmldocs`` or
``make pdfdocs``.

There are various text files in the Documentation/ subdirectory,
several of them using the Restructured Text markup notation.
See Documentation/00-INDEX for a list of what is contained in each file.

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.