Hi Alistair and Peter, On Mon, Apr 24, 2017 at 11:28 PM, Peter Maydell <peter.mayd...@linaro.org> wrote: > On 24 April 2017 at 18:44, Alistair Francis <alistai...@gmail.com> wrote: >> Basically the simple explanation is that init is called when the >> object is created and realize is called when the object is realized. >> >> Generally for devices it will go something like this: >> 1. init >> 2. Set properties >> 3. Connect things >> 4. realize >> 5. Map to memory >> >>> Don't we need to use realize function for new models? >> >> AFAIK we still put things like: sysbus_init_irq(), >> memory_region_init_io() and sysbus_init_mmio() in the init function. >> >> I don't think we are at a stage yet to not use init functions. > > Two-phase init is here to stay -- some things must be done in > init, some must be done in realize, and some can be done in > either. Some simple devices may find they can do everything > in only one function. > > Must be done in init: > * creating properties (for the cases where that is done "by hand" > by calling object_property_add_*()) > * calling init on child objects which you want to pass through > alias properties for > > Must be done in realize: > * anything that can fail such that we need to report the > error and abandon creation of the device > * anything which depends on the values of QOM properties that > the caller might have set > > We should probably sit down and write up some guidelines for > how we recommend dealing with the various things that could > be called in either function -- this is basically a code > style and consistency question.
Thanks for the brief. It makes sense for me now. I will make changes and send the patches. Thanks, Sundeep > > thanks > -- PMM