All of lore.kernel.org
 help / color / mirror / Atom feed
From: "kernelci.org bot" <bot@kernelci.org>
To: tomeu.vizoso@collabora.com, Sasha Levin <sashal@kernel.org>,
	guillaume.tucker@collabora.com,
	Niklas Cassel <niklas.cassel@linaro.org>,
	broonie@kernel.org, khilman@baylibre.com, mgalka@collabora.com,
	enric.balletbo@collabora.com,
	Viresh Kumar <viresh.kumar@linaro.org>
Cc: linux-pm@vger.kernel.org, Stephen Boyd <sboyd@codeaurora.org>,
	linux-kernel@vger.kernel.org, Nishanth Menon <nm@ti.com>,
	Len Brown <len.brown@intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Pavel Machek <pavel@ucw.cz>, Viresh Kumar <vireshk@kernel.org>
Subject: stable/linux-4.14.y bisection: boot on odroid-x2
Date: Wed, 20 Nov 2019 18:52:37 -0800 (PST)	[thread overview]
Message-ID: <5dd5fbf5.1c69fb81.0938.8061@mx.google.com> (raw)

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* This automated bisection report was sent to you on the basis  *
* that you may be involved with the breaking commit it has      *
* found.  No manual investigation has been done to verify it,   *
* and the root cause of the problem may be somewhere else.      *
*                                                               *
* If you do send a fix, please include this trailer:            *
*   Reported-by: "kernelci.org bot" <bot@kernelci.org>          *
*                                                               *
* Hope this helps!                                              *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

stable/linux-4.14.y bisection: boot on odroid-x2

Summary:
  Start:      f56f3d0e65ad Linux 4.14.155
  Details:    https://kernelci.org/boot/id/5dd5a12159b5143a10cf54c3
  Plain log:  https://storage.kernelci.org//stable/linux-4.14.y/v4.14.155/arm/exynos_defconfig/gcc-8/lab-collabora/boot-exynos4412-odroidx2.txt
  HTML log:   https://storage.kernelci.org//stable/linux-4.14.y/v4.14.155/arm/exynos_defconfig/gcc-8/lab-collabora/boot-exynos4412-odroidx2.html
  Result:     714ab224a8db OPP: Protect dev_list with opp_table lock

Checks:
  revert:     PASS
  verify:     PASS

Parameters:
  Tree:       stable
  URL:        https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
  Branch:     linux-4.14.y
  Target:     odroid-x2
  CPU arch:   arm
  Lab:        lab-collabora
  Compiler:   gcc-8
  Config:     exynos_defconfig
  Test suite: boot

Breaking commit found:

-------------------------------------------------------------------------------
commit 714ab224a8db6e8255c61a42613de9349ceb0bba
Author: Viresh Kumar <viresh.kumar@linaro.org>
Date:   Fri Aug 3 07:05:21 2018 +0530

    OPP: Protect dev_list with opp_table lock
    
    [ Upstream commit 3d2556992a878a2210d3be498416aee39e0c32aa ]
    
    The dev_list needs to be protected with a lock, else we may have
    simultaneous access (addition/removal) to it and that would be racy.
    Extend scope of the opp_table lock to protect dev_list as well.
    
    Tested-by: Niklas Cassel <niklas.cassel@linaro.org>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
index d5e7e8cc4f22..8100c8769149 100644
--- a/drivers/base/power/opp/core.c
+++ b/drivers/base/power/opp/core.c
@@ -49,9 +49,14 @@ static struct opp_device *_find_opp_dev(const struct device *dev,
 static struct opp_table *_find_opp_table_unlocked(struct device *dev)
 {
 	struct opp_table *opp_table;
+	bool found;
 
 	list_for_each_entry(opp_table, &opp_tables, node) {
-		if (_find_opp_dev(dev, opp_table)) {
+		mutex_lock(&opp_table->lock);
+		found = !!_find_opp_dev(dev, opp_table);
+		mutex_unlock(&opp_table->lock);
+
+		if (found) {
 			_get_opp_table_kref(opp_table);
 
 			return opp_table;
@@ -711,6 +716,8 @@ struct opp_device *_add_opp_dev(const struct device *dev,
 
 	/* Initialize opp-dev */
 	opp_dev->dev = dev;
+
+	mutex_lock(&opp_table->lock);
 	list_add(&opp_dev->node, &opp_table->dev_list);
 
 	/* Create debugfs entries for the opp_table */
@@ -718,6 +725,7 @@ struct opp_device *_add_opp_dev(const struct device *dev,
 	if (ret)
 		dev_err(dev, "%s: Failed to register opp debugfs (%d)\n",
 			__func__, ret);
+	mutex_unlock(&opp_table->lock);
 
 	return opp_dev;
 }
@@ -736,6 +744,7 @@ static struct opp_table *_allocate_opp_table(struct device *dev)
 	if (!opp_table)
 		return NULL;
 
+	mutex_init(&opp_table->lock);
 	INIT_LIST_HEAD(&opp_table->dev_list);
 
 	opp_dev = _add_opp_dev(dev, opp_table);
@@ -757,7 +766,6 @@ static struct opp_table *_allocate_opp_table(struct device *dev)
 
 	BLOCKING_INIT_NOTIFIER_HEAD(&opp_table->head);
 	INIT_LIST_HEAD(&opp_table->opp_list);
-	mutex_init(&opp_table->lock);
 	kref_init(&opp_table->kref);
 
 	/* Secure the device table modification */
@@ -799,6 +807,10 @@ static void _opp_table_kref_release(struct kref *kref)
 	if (!IS_ERR(opp_table->clk))
 		clk_put(opp_table->clk);
 
+	/*
+	 * No need to take opp_table->lock here as we are guaranteed that no
+	 * references to the OPP table are taken at this point.
+	 */
 	opp_dev = list_first_entry(&opp_table->dev_list, struct opp_device,
 				   node);
 
@@ -1702,6 +1714,9 @@ void _dev_pm_opp_remove_table(struct opp_table *opp_table, struct device *dev,
 {
 	struct dev_pm_opp *opp, *tmp;
 
+	/* Protect dev_list */
+	mutex_lock(&opp_table->lock);
+
 	/* Find if opp_table manages a single device */
 	if (list_is_singular(&opp_table->dev_list)) {
 		/* Free static OPPs */
@@ -1712,6 +1727,8 @@ void _dev_pm_opp_remove_table(struct opp_table *opp_table, struct device *dev,
 	} else {
 		_remove_opp_dev(_find_opp_dev(dev, opp_table), opp_table);
 	}
+
+	mutex_unlock(&opp_table->lock);
 }
 
 void _dev_pm_opp_find_and_remove_table(struct device *dev, bool remove_all)
diff --git a/drivers/base/power/opp/cpu.c b/drivers/base/power/opp/cpu.c
index 2d87bc1adf38..66e406bd4d62 100644
--- a/drivers/base/power/opp/cpu.c
+++ b/drivers/base/power/opp/cpu.c
@@ -222,8 +222,10 @@ int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask)
 	cpumask_clear(cpumask);
 
 	if (opp_table->shared_opp == OPP_TABLE_ACCESS_SHARED) {
+		mutex_lock(&opp_table->lock);
 		list_for_each_entry(opp_dev, &opp_table->dev_list, node)
 			cpumask_set_cpu(opp_dev->dev->id, cpumask);
+		mutex_unlock(&opp_table->lock);
 	} else {
 		cpumask_set_cpu(cpu_dev->id, cpumask);
 	}
diff --git a/drivers/base/power/opp/opp.h b/drivers/base/power/opp/opp.h
index 166eef990599..0a206c6b9086 100644
--- a/drivers/base/power/opp/opp.h
+++ b/drivers/base/power/opp/opp.h
@@ -124,7 +124,7 @@ enum opp_table_access {
  * @dev_list:	list of devices that share these OPPs
  * @opp_list:	table of opps
  * @kref:	for reference count of the table.
- * @lock:	mutex protecting the opp_list.
+ * @lock:	mutex protecting the opp_list and dev_list.
  * @np:		struct device_node pointer for opp's DT node.
  * @clock_latency_ns_max: Max clock latency in nanoseconds.
  * @shared_opp: OPP is shared between multiple devices.
-------------------------------------------------------------------------------


Git bisection log:

-------------------------------------------------------------------------------
git bisect start
# good: [775d01b65b5daa002a9ba60f2d2bb3b1a6ce12fb] Linux 4.14.154
git bisect good 775d01b65b5daa002a9ba60f2d2bb3b1a6ce12fb
# bad: [f56f3d0e65adb447b8b583c8ed4fbbe544c9bfde] Linux 4.14.155
git bisect bad f56f3d0e65adb447b8b583c8ed4fbbe544c9bfde
# good: [46af2022de198ebbf47141b7b33522e28733045d] arm64: dts: meson: Fix erroneous SPI bus warnings
git bisect good 46af2022de198ebbf47141b7b33522e28733045d
# bad: [0b9c70939b60221f2210ef55a325fec6dea8cde1] media: au0828: Fix incorrect error messages
git bisect bad 0b9c70939b60221f2210ef55a325fec6dea8cde1
# bad: [70c3daaa03e965d3f2bd10696be130b376f73bca] net: broadcom: fix return type of ndo_start_xmit function
git bisect bad 70c3daaa03e965d3f2bd10696be130b376f73bca
# good: [45503ce9086cabc9b3faaaed4563b2da8af1ffe2] samples/bpf: fix a compilation failure
git bisect good 45503ce9086cabc9b3faaaed4563b2da8af1ffe2
# good: [9bee4f9f4460db86c47fe01f9671af6a8951efda] powerpc: Fix duplicate const clang warning in user access code
git bisect good 9bee4f9f4460db86c47fe01f9671af6a8951efda
# bad: [b1fdcfbdb93cc899d19091a2385edb40a07420e3] power: supply: twl4030_charger: fix charging current out-of-bounds
git bisect bad b1fdcfbdb93cc899d19091a2385edb40a07420e3
# bad: [714ab224a8db6e8255c61a42613de9349ceb0bba] OPP: Protect dev_list with opp_table lock
git bisect bad 714ab224a8db6e8255c61a42613de9349ceb0bba
# good: [7dbc3efb7430abdddf0be186bd0ad2611d767d23] RDMA/i40iw: Fix incorrect iterator type
git bisect good 7dbc3efb7430abdddf0be186bd0ad2611d767d23
# first bad commit: [714ab224a8db6e8255c61a42613de9349ceb0bba] OPP: Protect dev_list with opp_table lock
-------------------------------------------------------------------------------

             reply	other threads:[~2019-11-21  2:52 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-21  2:52 kernelci.org bot [this message]
2019-11-21  6:08 ` stable/linux-4.14.y bisection: boot on odroid-x2 Viresh Kumar
2019-11-21  6:58   ` Greg Kroah-Hartman
2019-11-21  8:55     ` Viresh Kumar
2019-11-21 13:52       ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5dd5fbf5.1c69fb81.0938.8061@mx.google.com \
    --to=bot@kernelci.org \
    --cc=broonie@kernel.org \
    --cc=enric.balletbo@collabora.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=guillaume.tucker@collabora.com \
    --cc=khilman@baylibre.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mgalka@collabora.com \
    --cc=niklas.cassel@linaro.org \
    --cc=nm@ti.com \
    --cc=pavel@ucw.cz \
    --cc=rjw@rjwysocki.net \
    --cc=sashal@kernel.org \
    --cc=sboyd@codeaurora.org \
    --cc=tomeu.vizoso@collabora.com \
    --cc=viresh.kumar@linaro.org \
    --cc=vireshk@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.