Re: [patch 1/3] fastboot: Create a "asynchronous" initlevel

Daniel Walker
2008-07-19T04:28:18Z

On Fri, 2008-07-18 at 20:44 -0700, Arjan van de Ven wrote:
> On Fri, 18 Jul 2008 18:22:20 -0700
> Daniel Walker <dwalker@mvista.com> wrote:
>
> > On Fri, 2008-07-18 at 15:16 -0700, Arjan van de Ven wrote:
> > > +static void __init do_initcalls(void)
> > > +{
> > > + initcall_t *call;
> > > + static DECLARE_WORK(async_work, do_async_initcalls);
> > > + int phase = 0; /* 0 = levels 0 - 6, 1 = level 6a, 2 = after
> > > level 6a */
> > > +
> > > + async_init_wq = create_singlethread_workqueue("kasyncinit");
> > > +
> >
> > Could you spawning one thread per cpu, and queuing the work evenly?
>
> not without loosing the ordering.....
>

Your right .. You would think there wouldn't be expectations on the
ordering, but certain sub-systems do have dependencies .. I think it's
really a problem in our initcall system where I've seen lots of initcall
problems popup when drivers select "module_init()" but when the driver
is built in they loose the mandatory module load ordering (shows up in
allyesconfig). Then if the ordering gets mixed in the initcall you end
up with failures.

Daniel