Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755463Ab3HXPVW (ORCPT ); Sat, 24 Aug 2013 11:21:22 -0400 Received: from mail-ee0-f44.google.com ([74.125.83.44]:50512 "EHLO mail-ee0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755230Ab3HXPVT (ORCPT ); Sat, 24 Aug 2013 11:21:19 -0400 From: Sylwester Nawrocki To: linux-arm-kernel@lists.infradead.org Cc: linux@arm.linux.org.uk, mturquette@linaro.org, jiada_wang@mentor.com, broonie@kernel.org, vapier@gentoo.org, ralf@linux-mips.org, kyungmin.park@samsung.com, myungjoo.ham@samsung.com, shawn.guo@linaro.org, sebastian.hesselbarth@gmail.com, LW@KARO-electronics.de, t.figa@samsung.com, g.liakhovetski@gmx.de, laurent.pinchart@ideasonboard.com, linux-kernel@vger.kernel.org, uclinux-dist-devel@blackfin.uclinux.org, linux-mips@linux-mips.org, linux-sh@vger.kernel.org, s.nawrocki@samsung.com Subject: [PATCH v4 4/5] clk: Assign module owner of a clock being registered Date: Sat, 24 Aug 2013 17:19:48 +0200 Message-Id: <1377357589-13242-5-git-send-email-s.nawrocki@samsung.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1377357589-13242-1-git-send-email-s.nawrocki@samsung.com> References: <1377357589-13242-1-git-send-email-s.nawrocki@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2307 Lines: 57 Assign module owner of a driver of a device passed to _clk_register() and __clk_register() functions so the module_{get,put} calls in __clk_get(), __clk_put() can have required effect. Signed-off-by: Sylwester Nawrocki Signed-off-by: Kyungmin Park --- Initially I had an 'owner' field added to struct clk_init_data so it can be set explicitly in clock providers. But this required modifications of all users of (devm_)clk_register() as struct clk_init_data instance was in most cases an unitialized stack variable. This would also require adding yet another argument to various clk_register_* functions registering the standard clocks. So I went for assigning clk->owner from dev->driver->owner. The disadvantages are that dereferencing dev->driver may be potentially unsafe when not holding struct device::mutex. And there might be cases where clk->owner will need to be NULL. One option is to set dev argument of clk_register_*() to NULL for that, but it predates devm_*. Presumably a requirement could be added that callers of clk_register*() must ensure dev->driver won't change during a call to these functions ? --- drivers/clk/clk.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 8ccc1cd..cf5765a 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1799,6 +1799,10 @@ struct clk *__clk_register(struct device *dev, struct clk_hw *hw) clk->flags = hw->init->flags; clk->parent_names = hw->init->parent_names; clk->num_parents = hw->init->num_parents; + if (dev && dev->driver) + clk->owner = dev->driver->owner; + else + clk->owner = NULL; ret = __clk_init(dev, clk); if (ret) @@ -1819,6 +1823,8 @@ static int _clk_register(struct device *dev, struct clk_hw *hw, struct clk *clk) goto fail_name; } clk->ops = hw->init->ops; + if (dev && dev->driver) + clk->owner = dev->driver->owner; clk->hw = hw; clk->flags = hw->init->flags; clk->num_parents = hw->init->num_parents; -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/