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