diff mbox

ARM: tegra: make tegra_cpu_reset_handler_enable() __init

Message ID 1340053310-20855-1-git-send-email-swarren@wwwdotorg.org
State Accepted, archived
Headers show

Commit Message

Stephen Warren June 18, 2012, 9:01 p.m. UTC
From: Stephen Warren <swarren@nvidia.com>

This solves a section mismatch warning. I hadn't noticed this before,
because my compiler was inlining tegra_cpu_reset_handler_enable() inside
tegra_cpu_reset_handler_init(), which is already __init, but I switched
compilers and it stopped doing that.

Cc: <stable@kernel.org> # v3.4
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
Arnd, Olof, do you want me to put this in a pull request, or can you apply
it directly for 3.5?

 arch/arm/mach-tegra/reset.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Olof Johansson June 18, 2012, 11:44 p.m. UTC | #1
On Mon, Jun 18, 2012 at 03:01:50PM -0600, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> This solves a section mismatch warning. I hadn't noticed this before,
> because my compiler was inlining tegra_cpu_reset_handler_enable() inside
> tegra_cpu_reset_handler_init(), which is already __init, but I switched
> compilers and it stopped doing that.
> 
> Cc: <stable@kernel.org> # v3.4
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> Arnd, Olof, do you want me to put this in a pull request, or can you apply
> it directly for 3.5?

Single patches are just fine as is, no need for a pull request.

Applied to fixes. Thanks!


-Olof
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter De Schrijver July 18, 2012, 3:01 p.m. UTC | #2
On Mon, Jun 18, 2012 at 11:01:50PM +0200, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> This solves a section mismatch warning. I hadn't noticed this before,
> because my compiler was inlining tegra_cpu_reset_handler_enable() inside
> tegra_cpu_reset_handler_init(), which is already __init, but I switched
> compilers and it stopped doing that.

Why does this generate a section mismatch warning? I see why calling a
a __init marked function from a non __init marked function is a problem, but
the opposite should be ok no?

Cheers,

Peter.

--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stephen Warren July 23, 2012, 8:09 p.m. UTC | #3
On 07/18/2012 09:01 AM, Peter De Schrijver wrote:
> On Mon, Jun 18, 2012 at 11:01:50PM +0200, Stephen Warren wrote:
>> From: Stephen Warren <swarren@nvidia.com>
>>
>> This solves a section mismatch warning. I hadn't noticed this before,
>> because my compiler was inlining tegra_cpu_reset_handler_enable() inside
>> tegra_cpu_reset_handler_init(), which is already __init, but I switched
>> compilers and it stopped doing that.
> 
> Why does this generate a section mismatch warning? I see why calling a
> a __init marked function from a non __init marked function is a problem, but
> the opposite should be ok no?

The issue is that tegra_cpu_reset_handler_enable() itself (which was not
__init but the patch made to be __init) was referencing variable
__tegra_cpu_reset_handler_{start,end}. This wasn't noticed before
because when tegra_cpu_reset_handler_enable() was inlined into
tegra_cpu_reset_handler_init(), tegra_cpu_reset_handler_enable() was
effectively __init. However, when built as a separate function, you
ended up with a non-__init function referencing other things that were
__init.

In other words, this is indeed nothing to do with __init function
tegra_cpu_reset_handler_init() calling non-__init function
tegra_cpu_reset_handler_enable().

You can get the details by reverting the patch and building:-)
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Peter De Schrijver July 24, 2012, 9:06 a.m. UTC | #4
On Mon, Jul 23, 2012 at 10:09:30PM +0200, Stephen Warren wrote:
> On 07/18/2012 09:01 AM, Peter De Schrijver wrote:
> > On Mon, Jun 18, 2012 at 11:01:50PM +0200, Stephen Warren wrote:
> >> From: Stephen Warren <swarren@nvidia.com>
> >>
> >> This solves a section mismatch warning. I hadn't noticed this before,
> >> because my compiler was inlining tegra_cpu_reset_handler_enable() inside
> >> tegra_cpu_reset_handler_init(), which is already __init, but I switched
> >> compilers and it stopped doing that.
> > 
> > Why does this generate a section mismatch warning? I see why calling a
> > a __init marked function from a non __init marked function is a problem, but
> > the opposite should be ok no?
> 
> The issue is that tegra_cpu_reset_handler_enable() itself (which was not
> __init but the patch made to be __init) was referencing variable
> __tegra_cpu_reset_handler_{start,end}. This wasn't noticed before
> because when tegra_cpu_reset_handler_enable() was inlined into
> tegra_cpu_reset_handler_init(), tegra_cpu_reset_handler_enable() was
> effectively __init. However, when built as a separate function, you
> ended up with a non-__init function referencing other things that were
> __init.
> 
> In other words, this is indeed nothing to do with __init function
> tegra_cpu_reset_handler_init() calling non-__init function
> tegra_cpu_reset_handler_enable().

Ah. That makes sense :) We need to be careful with this when introducing
system suspend support because some of this work needs to be redone on resume.

Cheers,

Peter.
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/mach-tegra/reset.c b/arch/arm/mach-tegra/reset.c
index 4d6a2ee..5beb7eb 100644
--- a/arch/arm/mach-tegra/reset.c
+++ b/arch/arm/mach-tegra/reset.c
@@ -33,7 +33,7 @@ 
 
 static bool is_enabled;
 
-static void tegra_cpu_reset_handler_enable(void)
+static void __init tegra_cpu_reset_handler_enable(void)
 {
 	void __iomem *iram_base = IO_ADDRESS(TEGRA_IRAM_RESET_BASE);
 	void __iomem *evp_cpu_reset =