linux_old1/drivers
John Keeping 2d078c2d04 drm/rockchip: fix VOP vblank race
We have seen a case of a bad reference count for vblanks with the
Rockchip VOP:

	------------[ cut here ]------------
	WARNING: CPU: 1 PID: 383 at drivers/gpu/drm/drm_irq.c:1198 drm_vblank_put+0x40/0xcc
	Modules linked in: brcmfmac brcmutil
	CPU: 1 PID: 383 Comm: kworker/u8:2 Not tainted 4.9.75-rt60 #1
	Hardware name: Rockchip (Device Tree)
	Workqueue: events_unbound flip_worker
	Backtrace:
	[<c010b7b0>] (dump_backtrace) from [<c010ba4c>] (show_stack+0x18/0x1c)
	 r7:c0b1b13c r6:600b0013 r5:00000000 r4:c0b1b13c
	[<c010ba34>] (show_stack) from [<c032d248>] (dump_stack+0x78/0x94)
	[<c032d1d0>] (dump_stack) from [<c011e6e8>] (__warn+0xe4/0x104)
	 r7:00000009 r6:c03cf26c r5:00000000 r4:00000000
	[<c011e604>] (__warn) from [<c011e7c0>] (warn_slowpath_null+0x28/0x30)
	 r9:eeb443a0 r8:eeb443c8 r7:ee8a5ec0 r6:ee8a5ec0 r5:edb47f00 r4:ee096200
	[<c011e798>] (warn_slowpath_null) from [<c03cf26c>] (drm_vblank_put+0x40/0xcc)
	[<c03cf22c>] (drm_vblank_put) from [<c03cf310>] (drm_crtc_vblank_put+0x18/0x1c)
	 r5:edb47f00 r4:ee3c8a80
	[<c03cf2f8>] (drm_crtc_vblank_put) from [<c03ef9b4>] (vop_fb_unref_worker+0x18/0x24)
	[<c03ef99c>] (vop_fb_unref_worker) from [<c03df194>] (flip_worker+0x98/0xb4)
	 r5:edb47f00 r4:eeb443a8
	[<c03df0fc>] (flip_worker) from [<c0134808>] (process_one_work+0x1a8/0x2fc)
	 r9:00000000 r8:ee807d00 r7:00000000 r6:ee809c00 r5:eeb443a8 r4:edfe5f80
	[<c0134660>] (process_one_work) from [<c01358ec>] (worker_thread+0x2ac/0x458)
	 r10:00000088 r9:edfe5f98 r8:ee809c2c r7:c0b04100 r6:ee809c00 r5:ee809c00
	 r4:edfe5f80
	[<c0135640>] (worker_thread) from [<c013a0bc>] (kthread+0xfc/0x10c)
	 r10:00000000 r9:00000000 r8:c0135640 r7:edfe5f80 r6:00000000 r5:edf0e240
	 r4:ee8a4000 r3:ed194e00
	[<c0139fc0>] (kthread) from [<c0107cb8>] (ret_from_fork+0x14/0x3c)
	 r8:00000000 r7:00000000 r6:00000000 r5:c0139fc0 r4:edf0e240
	---[ end trace 0000000000000002 ]---

It seems that this is caused by unfortunate timing between
vop_crtc_atomic_flush() and vop_handle_vblank() given the following
ordering:

	atomic_flush		handle_vblank
	------------		-------------

	drm_flip_work_queue
	set_bit
	     			if (test_and_clear_bit(...))
	     				drm_flip_work_commit
	drm_vblank_get

This results in vop_fb_unref_worker (called as flip work) decrementing
the vblank refcount before it has been incremented.

Signed-off-by: John Keeping <john@metanate.com>
Reviewed-by: Sandy huang <hjc@rock-chips.com>
Signed-off-by: Sandy Huang <hjc@rock-chips.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180328160351.23763-1-john@metanate.com
2018-04-17 09:18:16 +08:00
..
accessibility
acpi Merge branch 'libnvdimm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm 2018-03-22 18:37:49 -07:00
amba
android
ata libata: Modify quirks for MX100 to limit NCQ_TRIM quirk to MU01 version 2018-03-19 08:36:38 -07:00
atm
auxdisplay auxdisplay: img-ascii-lcd: Silence 2 uninitialized warnings 2018-03-13 18:16:38 +01:00
base regmap: MMIO regmap clock configuration 2018-04-11 12:35:42 +02:00
bcma
block loop: Fix lost writes caused by missing flag 2018-03-09 08:36:36 -07:00
bluetooth Bluetooth: hci_bcm: Set pulsed_host_wake flag in sleep parameters 2018-03-15 19:39:37 +01:00
bus
cdrom
char tpm: fix potential buffer overruns caused by bit glitches on the bus 2018-02-26 15:43:46 -08:00
clk clk: bcm2835: Protect sections updating shared registers 2018-03-19 09:27:37 -07:00
clocksource clocksource/atmel-st: Add 'depends on HAS_IOMEM' to fix unmet dependency 2018-03-09 11:11:58 +01:00
connector
cpufreq Merge branch 'cpufreq-scpi' 2018-03-02 10:44:44 +01:00
cpuidle
crypto s390: 2018-02-26 09:28:35 -08:00
dax dax: ->direct_access does not sleep anymore 2018-02-26 12:32:29 -08:00
dca
devfreq
dio
dma dmaengine: stm32-dmamux: fix a potential buffer overflow 2018-03-22 10:51:35 +05:30
dma-buf
edac EDAC, sb_edac: Fix out of bound writes during DIMM configuration on KNL 2018-02-23 12:05:37 +01:00
eisa
extcon
firewire
firmware Merge branch 'efi-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2018-03-18 11:56:53 -07:00
fmc
fpga
fsi
gpio gpio: rcar: Use wakeup_path i.s.o. explicit clock handling 2018-03-05 09:01:21 +01:00
gpu drm/rockchip: fix VOP vblank race 2018-04-17 09:18:16 +08:00
hid
hsi
hv Drivers: hv: vmbus: Fix ring buffer signaling 2018-03-06 09:52:59 -08:00
hwmon
hwspinlock
hwtracing
i2c i2c: octeon: Prevent error message on bus error 2018-03-02 11:11:15 +01:00
ide genhd: Rename get_disk() to get_disk_and_module() 2018-02-26 09:48:42 -07:00
idle
iio iio: st_pressure: st_accel: pass correct platform data to init 2018-03-10 16:28:05 +00:00
infiniband Fourth pull request for 4.16-rc 2018-03-20 17:39:07 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2018-03-07 17:37:32 -08:00
iommu treewide/trivial: Remove ';;$' typo noise 2018-02-22 10:59:33 +01:00
ipack
irqchip irqchip/irq-imx-gpcv2: Remove unused function 2018-03-11 13:27:12 +00:00
isdn
leds
lightnvm
macintosh
mailbox
mcb
md dm mpath: fix passing integrity data 2018-03-14 15:39:33 -04:00
media media: dvb: fix a Kconfig typo 2018-03-05 07:57:41 -05:00
memory memory: brcmstb: dpfe: support new way of passing data from the DCPU 2018-02-23 10:56:59 -08:00
memstick
message
mfd
misc powerpc fixes for 4.16 #5 2018-03-09 09:33:48 -08:00
mmc mmc: sdhci-acpi: Fix IRQ 0 2018-03-21 11:10:20 +01:00
mtd mtd: nand: fsl_ifc: Read ECCSTAT0 and ECCSTAT1 registers for IFC 2.0 2018-03-21 10:22:28 +01:00
mux
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-03-22 14:10:29 -07:00
nfc
ntb
nubus
nvdimm libnvdimm, nfit: fix persistence domain reporting 2018-03-21 15:12:07 -07:00
nvme nvme_fc: rework sqsize handling 2018-03-08 10:39:58 -07:00
nvmem
of Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
opp
oprofile
parisc
parport
pci Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
pcmcia
perf arm_pmu: Use disable_irq_nosync when disabling SPI in CPU teardown hook 2018-02-28 14:59:47 +00:00
phy phy: qcom-ufs: add MODULE_LICENSE tag 2018-03-12 15:11:59 +05:30
pinctrl pinctrl: samsung: Validate alias coming from DT 2018-03-08 13:02:26 +01:00
platform platform-drivers-x86 for v4.16-7 2018-03-14 13:01:14 -07:00
pnp
power
powercap
pps
ps3
ptp
pwm
rapidio
ras
regulator Merge remote-tracking branches 'regulator/fix/resume' and 'regulator/fix/stm32-vfrefbuf' into regulator-linus 2018-03-07 14:39:07 +00:00
remoteproc
reset
rpmsg
rtc
s390 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-03-22 14:10:29 -07:00
sbus
scsi SCSI fixes on 20180320 2018-03-20 16:59:01 -07:00
sfi
sh
siox
slimbus
sn
soc soc/fsl/qbman: fix issue in qman_delete_cgr_safe() 2018-03-14 13:16:23 -04:00
soundwire
spi
spmi
ssb
staging Merge airlied/drm-next into drm-misc-next 2018-03-30 12:35:45 -04:00
target
tc
tee
thermal
thunderbolt
tty tty: vt: fix up tabstops properly 2018-03-25 07:04:00 -10:00
uio
usb usb: musb: Fix external abort in musb_remove on omap2430 2018-03-13 16:36:59 +01:00
uwb
vfio Revert: "vfio-pci: Mask INTx if a device is not capabable of enabling it" 2018-03-21 22:50:19 -06:00
vhost vhost_net: examine pointer types during un-producing 2018-03-09 12:02:59 -05:00
video Linux 4.16-rc7 2018-03-28 14:30:41 +10:00
virt
virtio virtio_ring: fix num_free handling in error case 2018-03-01 18:53:38 +02:00
visorbus
vlynq
vme
w1
watchdog ACPI / watchdog: Fix off-by-one error at resource assignment 2018-03-19 23:17:07 +01:00
xen xen: fix for V4.16-rc5 2018-03-09 16:54:18 -08:00
zorro
Kconfig
Makefile