Re: [PATCH -next] drivers/net: Makefile, fix netconsole link order

From: Lin Ming
Date: Fri Sep 09 2011 - 22:46:22 EST


On Sat, 2011-09-10 at 08:00 +0800, Andrew Morton wrote:
> On Tue, 06 Sep 2011 16:35:29 +0800
> Lin Ming <ming.m.lin@xxxxxxxxx> wrote:
>
> > Commit 88491d8(drivers/net: Kconfig & Makefile cleanup) causes a
> > regression that netconsole does not work if netconsole and network
> > device driver are build into kernel, because netconsole is linked before
> > network device driver.
> >
> > Fixes it by moving netconsole.o after network device driver.
> >
> > Signed-off-by: Lin Ming <ming.m.lin@xxxxxxxxx>
> > ---
> > drivers/net/Makefile | 7 ++++++-
> > 1 files changed, 6 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/net/Makefile b/drivers/net/Makefile
> > index fa877cd..ec15311 100644
> > --- a/drivers/net/Makefile
> > +++ b/drivers/net/Makefile
> > @@ -14,7 +14,6 @@ obj-$(CONFIG_MACVTAP) += macvtap.o
> > obj-$(CONFIG_MII) += mii.o
> > obj-$(CONFIG_MDIO) += mdio.o
> > obj-$(CONFIG_NET) += Space.o loopback.o
> > -obj-$(CONFIG_NETCONSOLE) += netconsole.o
> > obj-$(CONFIG_PHYLIB) += phy/
> > obj-$(CONFIG_RIONET) += rionet.o
> > obj-$(CONFIG_TUN) += tun.o
> > @@ -66,3 +65,9 @@ obj-$(CONFIG_USB_USBNET) += usb/
> > obj-$(CONFIG_USB_ZD1201) += usb/
> > obj-$(CONFIG_USB_IPHETH) += usb/
> > obj-$(CONFIG_USB_CDC_PHONET) += usb/
> > +
> > +#
> > +# If netconsole and network device driver are build-in,
> > +# netconsole must be linked after network device driver
> > +#
> > +obj-$(CONFIG_NETCONSOLE) += netconsole.o
>
> It would be preferable to fix this with initcall ordering. Perhaps by
> switching init_netconsole() to subsys_initcall.

subsys_initcall is defined as __define_initcall("4",fn,4).
In !MODULE case, device driver module_int() is defined as
__define_initcall("6",fn,6)

If we use subsys_initcall for init_netconsole, it will still be called
before network device driver is initialized.

How about late_initcall?

(Not tested yet)