Messages in this thread | | | Subject | Re: [patch 1/3] fastboot: Create a "asynchronous" initlevel | From | Daniel Walker <> | Date | Fri, 18 Jul 2008 21:28:08 -0700 |
| |
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
| |