On Mon, Jan 21, 2008 at 05:24:58PM -0800, David Miller wrote:
> From: Sam Ravnborg <[EMAIL PROTECTED]>
> Date: Mon, 21 Jan 2008 21:22:10 +0100
> 
> > Fix following Section mismatch warning in sparc64:
> > 
> > WARNING: arch/sparc64/kernel/built-in.o(.text+0x13dec): Section mismatch: 
> > reference to .devinit.text:pci_scan_one_pbm (between 'psycho_scan_bus' and 
> > 'psycho_pbm_init')
> > WARNING: arch/sparc64/kernel/built-in.o(.text+0x14b58): Section mismatch: 
> > reference to .devinit.text:pci_scan_one_pbm (between 'sabre_scan_bus' and 
> > 'sabre_init')
> > WARNING: arch/sparc64/kernel/built-in.o(.text+0x15ea4): Section mismatch: 
> > reference to .devinit.text:pci_scan_one_pbm (between 'schizo_scan_bus' and 
> > 'schizo_pbm_init')
> > WARNING: arch/sparc64/kernel/built-in.o(.text+0x17780): Section mismatch: 
> > reference to .devinit.text:pci_scan_one_pbm (between 'pci_sun4v_scan_bus' 
> > and 'pci_sun4v_get_head')
> > WARNING: arch/sparc64/kernel/built-in.o(.text+0x17d5c): Section mismatch: 
> > reference to .devinit.text:pci_scan_one_pbm (between 'pci_fire_scan_bus' 
> > and 'pci_fire_get_head')
> > WARNING: arch/sparc64/kernel/built-in.o(.text+0x23860): Section mismatch: 
> > reference to .devinit.text:vio_dev_release (between 'vio_create_one' and 
> > 'vio_add')
> > WARNING: arch/sparc64/kernel/built-in.o(.text+0x23868): Section mismatch: 
> > reference to .devinit.text:vio_dev_release (between 'vio_create_one' and 
> > 'vio_add')
> > 
> > The pci_* were all missing __init annotations.
> > For the vio.c case it was a function with a wrong annotation which was 
> > removed.
> > 
> > Signed-off-by: Sam Ravnborg <[EMAIL PROTECTED]>
> 
> Applied, but let's discuss this ;-)
> 
> > It all looked trivial to me but plase review.
> > Note: The warnigns were generated with a more recent modpost than
> > in mainline / kbuild.git.
> > I had -fno-inline-functions-called-once added to gcc when seeing these.
> 
> pci_scan_one_pbm() is __devinit
> 
> The implementations ({psycho,sabre,schizo,pci_sun4v,pci_fire}_scan_bus())
> are now marked __init.
> 
> Furthermore, pointers to those functions get assigned to
> pci_pbm_info->scan_bus() which the modpost resolver has no way to
> follow calls of.

In eg. psycho_pbm_init() we have:
        pbm->scan_bus = psycho_scan_bus;

I found only one usage of pbm->scan_bus:
static void __init pci_scan_each_controller_bus(void)
{
        struct pci_pbm_info *pbm;

        for (pbm = pci_pbm_root; pbm; pbm = pbm->next)
                pbm->scan_bus(pbm);
}

This function is marked __init so it looks OK from this suage to
annotate the functions __init.


We have:
void __init psycho_init(struct device_node *dp, char *model_name)
        => psycho_pbm_init()
                => psycho_scan_bus()
                        => pci_scan_one_pbm()

And I did not find any usage of pci_scan_one_pbm()
from __devinit so I think we should annotate
pci_scan_one_pbm() with __init too to be consistent.
(That is with the patch applied obviously)


and psycho_init is used in:
pci_controller_table[] __initdata = {
        { "SUNW,sabre", sabre_init },
        { "pci108e,a000", sabre_init },
        { "pci108e,a001", sabre_init },
        { "SUNW,psycho", psycho_init },
        { "pci108e,8000", psycho_init },

So again a reference from __init (this time data).

So it all looks OK to me.

        Sam


-
To unsubscribe from this list: send the line "unsubscribe sparclinux" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to