All of lore.kernel.org
 help / color / mirror / Atom feed
* clk/clk-next boot bisection: v5.3-rc1-84-g2ced74113e7f on panda
@ 2019-08-15 21:47 kernelci.org bot
  0 siblings, 0 replies; only message in thread
From: kernelci.org bot @ 2019-08-15 21:47 UTC (permalink / raw)
  To: tomeu.vizoso, Stephen Boyd, guillaume.tucker, mgalka, broonie,
	matthew.hart, khilman, enric.balletbo, Sylwester Nawrocki
  Cc: Michael Turquette, linux-clk, linux-kernel

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* 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!                                              *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

clk/clk-next boot bisection: v5.3-rc1-84-g2ced74113e7f on panda

Summary:
  Start:      2ced74113e7f Merge branch 'clk-init-destroy' into clk-next
  Details:    https://kernelci.org/boot/id/5d55b8e459b514d41bf122b4
  Plain log:  https://storage.kernelci.org//clk/clk-next/v5.3-rc1-84-g2ced74113e7f/arm/omap2plus_defconfig/gcc-8/lab-collabora/boot-omap4-panda.txt
  HTML log:   https://storage.kernelci.org//clk/clk-next/v5.3-rc1-84-g2ced74113e7f/arm/omap2plus_defconfig/gcc-8/lab-collabora/boot-omap4-panda.html
  Result:     c82987e740d1 clk: Overwrite clk_hw::init with NULL during clk_register()

Checks:
  revert:     PASS
  verify:     PASS

Parameters:
  Tree:       clk
  URL:        https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git
  Branch:     clk-next
  Target:     panda
  CPU arch:   arm
  Lab:        lab-collabora
  Compiler:   gcc-8
  Config:     omap2plus_defconfig
  Test suite: boot

Breaking commit found:

-------------------------------------------------------------------------------
commit c82987e740d12be98b8ae8aa9221b8b9e2541271
Author: Stephen Boyd <sboyd@kernel.org>
Date:   Wed Jul 31 12:35:17 2019 -0700

    clk: Overwrite clk_hw::init with NULL during clk_register()
    
    We don't want clk provider drivers to use the init structure after clk
    registration time, but we leave a dangling reference to it by means of
    clk_hw::init. Let's overwrite the member with NULL during clk_register()
    so that this can't be used anymore after registration time.
    
    Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
    Cc: Doug Anderson <dianders@chromium.org>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Link: https://lkml.kernel.org/r/20190731193517.237136-10-sboyd@kernel.org
    Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>

diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index c0990703ce54..efac620264a2 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -3484,9 +3484,9 @@ static int clk_cpy_name(const char **dst_p, const char *src, bool must_exist)
 	return 0;
 }
 
-static int clk_core_populate_parent_map(struct clk_core *core)
+static int clk_core_populate_parent_map(struct clk_core *core,
+					const struct clk_init_data *init)
 {
-	const struct clk_init_data *init = core->hw->init;
 	u8 num_parents = init->num_parents;
 	const char * const *parent_names = init->parent_names;
 	const struct clk_hw **parent_hws = init->parent_hws;
@@ -3566,6 +3566,14 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw)
 {
 	int ret;
 	struct clk_core *core;
+	const struct clk_init_data *init = hw->init;
+
+	/*
+	 * The init data is not supposed to be used outside of registration path.
+	 * Set it to NULL so that provider drivers can't use it either and so that
+	 * we catch use of hw->init early on in the core.
+	 */
+	hw->init = NULL;
 
 	core = kzalloc(sizeof(*core), GFP_KERNEL);
 	if (!core) {
@@ -3573,17 +3581,17 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw)
 		goto fail_out;
 	}
 
-	core->name = kstrdup_const(hw->init->name, GFP_KERNEL);
+	core->name = kstrdup_const(init->name, GFP_KERNEL);
 	if (!core->name) {
 		ret = -ENOMEM;
 		goto fail_name;
 	}
 
-	if (WARN_ON(!hw->init->ops)) {
+	if (WARN_ON(!init->ops)) {
 		ret = -EINVAL;
 		goto fail_ops;
 	}
-	core->ops = hw->init->ops;
+	core->ops = init->ops;
 
 	if (dev && pm_runtime_enabled(dev))
 		core->rpm_enabled = true;
@@ -3592,13 +3600,13 @@ __clk_register(struct device *dev, struct device_node *np, struct clk_hw *hw)
 	if (dev && dev->driver)
 		core->owner = dev->driver->owner;
 	core->hw = hw;
-	core->flags = hw->init->flags;
-	core->num_parents = hw->init->num_parents;
+	core->flags = init->flags;
+	core->num_parents = init->num_parents;
 	core->min_rate = 0;
 	core->max_rate = ULONG_MAX;
 	hw->core = core;
 
-	ret = clk_core_populate_parent_map(core);
+	ret = clk_core_populate_parent_map(core, init);
 	if (ret)
 		goto fail_parents;
 
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 2ae7604783dd..214c75ed62ae 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -299,7 +299,8 @@ struct clk_init_data {
  * into the clk API
  *
  * @init: pointer to struct clk_init_data that contains the init data shared
- * with the common clock framework.
+ * with the common clock framework. This pointer will be set to NULL once
+ * a clk_register() variant is called on this clk_hw pointer.
  */
 struct clk_hw {
 	struct clk_core *core;
-------------------------------------------------------------------------------


Git bisection log:

-------------------------------------------------------------------------------
git bisect start
# good: [21a2f76849f16d5a48d205b68e923694bc93aaf3] Merge branch 'clk-fixes' into clk-next
git bisect good 21a2f76849f16d5a48d205b68e923694bc93aaf3
# bad: [2ced74113e7f0e2e7dd4c1b4c09b4020cc75fa23] Merge branch 'clk-init-destroy' into clk-next
git bisect bad 2ced74113e7f0e2e7dd4c1b4c09b4020cc75fa23
# good: [7c9dc000bd199f1f90c4e9f1b2814c0dd0ebaa2c] Merge tag 'clk-meson-v5.4-1' of https://github.com/BayLibre/clk-meson into clk-meson
git bisect good 7c9dc000bd199f1f90c4e9f1b2814c0dd0ebaa2c
# bad: [47add07b00b64d8e698e5a6fb50bf900d1e89167] clk: milbeaut: Don't reference clk_init_data after registration
git bisect bad 47add07b00b64d8e698e5a6fb50bf900d1e89167
# good: [f4bfe4fff7ecb7aea391120608cfe1d9bc1a1f49] clk: sirf: Don't reference clk_init_data after registration
git bisect good f4bfe4fff7ecb7aea391120608cfe1d9bc1a1f49
# good: [735822a8b114f73289679178ff075b73facd4571] phy: ti: am654-serdes: Don't reference clk_init_data after registration
git bisect good 735822a8b114f73289679178ff075b73facd4571
# bad: [ad8bb39501bc50ec04c88f123273f3e7ea8394ca] clk: socfpga: deindent code to proper indentation
git bisect bad ad8bb39501bc50ec04c88f123273f3e7ea8394ca
# bad: [c82987e740d12be98b8ae8aa9221b8b9e2541271] clk: Overwrite clk_hw::init with NULL during clk_register()
git bisect bad c82987e740d12be98b8ae8aa9221b8b9e2541271
# first bad commit: [c82987e740d12be98b8ae8aa9221b8b9e2541271] clk: Overwrite clk_hw::init with NULL during clk_register()
-------------------------------------------------------------------------------

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2019-08-15 21:47 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-08-15 21:47 clk/clk-next boot bisection: v5.3-rc1-84-g2ced74113e7f on panda kernelci.org bot

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.