aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.14/950-0175-drm-vc4-Fix-false-positive-WARN-backtrace-on-refcoun.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708/patches-4.14/950-0175-drm-vc4-Fix-false-positive-WARN-backtrace-on-refcoun.patch')
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0175-drm-vc4-Fix-false-positive-WARN-backtrace-on-refcoun.patch41
1 files changed, 41 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0175-drm-vc4-Fix-false-positive-WARN-backtrace-on-refcoun.patch b/target/linux/brcm2708/patches-4.14/950-0175-drm-vc4-Fix-false-positive-WARN-backtrace-on-refcoun.patch
new file mode 100644
index 0000000000..0d3b4520d3
--- /dev/null
+++ b/target/linux/brcm2708/patches-4.14/950-0175-drm-vc4-Fix-false-positive-WARN-backtrace-on-refcoun.patch
@@ -0,0 +1,41 @@
+From 5537bac0e5c8f3634c5595c21c7d63f0c0263e0e Mon Sep 17 00:00:00 2001
+From: Boris Brezillon <boris.brezillon@free-electrons.com>
+Date: Wed, 22 Nov 2017 21:39:28 +0100
+Subject: [PATCH 175/454] drm/vc4: Fix false positive WARN() backtrace on
+ refcount_inc() usage
+
+With CONFIG_REFCOUNT_FULL enabled, refcount_inc() complains when it's
+passed a refcount object that has its counter set to 0. In this driver,
+this is a valid use case since we want to increment ->usecnt only when
+the BO object starts to be used by real HW components and this is
+definitely not the case when the BO is created.
+
+Fix the problem by using refcount_inc_not_zero() instead of
+refcount_inc() and fallback to refcount_set(1) when
+refcount_inc_not_zero() returns false. Note that this 2-steps operation
+is not racy here because the whole section is protected by a mutex
+which guarantees that the counter does not change between the
+refcount_inc_not_zero() and refcount_set() calls.
+
+Fixes: b9f19259b84d ("drm/vc4: Add the DRM_IOCTL_VC4_GEM_MADVISE ioctl")
+Reported-by: Stefan Wahren <stefan.wahren@i2se.com>
+Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
+Acked-by: Eric Anholt <eric@anholt.net>
+Link: https://patchwork.freedesktop.org/patch/msgid/20171122203928.28135-1-boris.brezillon@free-electrons.com
+(cherry picked from commit 5bfd40139d55790cbc8e56ad1ce4f974f1fa186d)
+---
+ drivers/gpu/drm/vc4/vc4_bo.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/vc4/vc4_bo.c
++++ b/drivers/gpu/drm/vc4/vc4_bo.c
+@@ -639,7 +639,8 @@ int vc4_bo_inc_usecnt(struct vc4_bo *bo)
+ mutex_lock(&bo->madv_lock);
+ switch (bo->madv) {
+ case VC4_MADV_WILLNEED:
+- refcount_inc(&bo->usecnt);
++ if (!refcount_inc_not_zero(&bo->usecnt))
++ refcount_set(&bo->usecnt, 1);
+ ret = 0;
+ break;
+ case VC4_MADV_DONTNEED: