Message ID | 1340053310-20855-1-git-send-email-swarren@wwwdotorg.org |
---|---|
State | Accepted, archived |
Headers | show |
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
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
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
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 --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 =