> > However, as things stand there is nothing (I think) that really requires > > coroutines. A simple 2-pass initialization would do, with links and > > irqs connected on the second pass. > > I'm just trying to be a little more general. For more complex setups > we may in the future want to resolve dependencies at different phases > of the machine init process.
Do you have any examples of things that are more complicated than "build everything" followed by "resolve everything"? > That and two pass is brutally ugly in code (and > in-efficient) as you need to tag passes. Not sure I follow, but I can't of course promise aesthetics without having written any code. > I'm wondering how your patch fares > > in terms of error handling for example; can you end up with > > partially-uninitialized devices or infinite loops? If so, why not? > > Deadlock looping shouldnt happen if thats what your worried about. > Each device is instantiated before its able to yield (waiting on > another) and all devices are inited before you reach that > all-threads-are-yielded point. Essentially your "first-pass" as you > suggested above is complete before before every thread is yielded, > which makes deadlock impossible with current usages. Ok, so something checks the syntax before initialization runs. Pao