lkml.org 
[lkml]   [2009]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [tip:x86/urgent] x86: Fix false positive section mismatch warnings in the apic code
On Mon, Apr 20, 2009 at 10:00:24AM +0600, Rakib Mullick wrote:
> On 4/19/09, Sam Ravnborg <sam@ravnborg.org> wrote:
> > If I understand it correct we have the following:
>
> > (data) struct apic apic_es7000.acpi_madt_oem_check =>
> > (function) es7000_acpi_madt_oem_check =>
> > (function) find_unisys_acpi_oem_table
> > (__init) early_acpi_os_unmap_memory
> >
> > So the real fix is to:
> > 1) annotate find_unisys_acpi_oem_table __init
> > 2) annotate es7000_acpi_madt_oem_check __init
> > 3) teach modpost that struct apic apic_es7000 may reference __init
> >
> > Step 3 is done using __refdata
> >
> > Based on the above analysis I would assume the best fix
> > would look like this the following.
> > [I only looked at the first warning]
> >
> > Rabik/Marcin - if you agree in the analysis could you produce
> > a proper patch and send to Ingo - thanks.
> >
> > You can add my:
> > Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> > if the patch is ok.
> >
> > Sam
> Hi Sam, after applying your suggested three steps, we still have the
> following warning:
>
> WARNING: arch/x86/kernel/built-in.o(.text+0x36174): Section mismatch
> in reference from the function unmap_unisys_acpi_oem_table() to the
> function .init.text:__acpi_unmap_table()
> The function unmap_unisys_acpi_oem_table() references
> the function __init __acpi_unmap_table().
> This is often because unmap_unisys_acpi_oem_table lacks a __init
> annotation or the annotation of __acpi_unmap_table is wrong.
>
> So, I think we've to annote unmap_unisys_acpi_oem_table with __init (
> If we apply Sam's suggested steps). If anything else please notice.

Hi guys - I lost track of this so here come a late reply.

What we have is apic_es7000.acpi_madt_oem_check that references es7000_acpi_madt_oem_check

And es7000_acpi_madt_oem_check =>
unmap_unisys_acpi_oem_table =>
__acpi_unmap_table

So we may only annotate unmap_unisys_acpi_oem_table if
we know that apic_es7000.acpi_madt_oem_check is only used from __init.

Looking at probe_32.c this seems to be true - but I did not look too closely
on this.

If you can make sure apic_es7000.acpi_madt_oem_check is only used from __init
then the right fix is to annotate the relevant functions with __init.
That is es7000_acpi_madt_oem_check() and unmap_unisys_acpi_oem_table().

Sam


\
 
 \ /
  Last update: 2009-05-01 13:47    [W:0.046 / U:1.180 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site