On 4 January 2017 at 03:28, David Gibson <da...@gibson.dropbear.id.au> wrote: > On Tue, Jan 03, 2017 at 10:02:21PM +0800, 赵小强 wrote: >> Hi,david: >> >> To my understanding,what must be put in the realize function is >> code which depends on property values. What's the benefit of >> moving memory region initialization into realize function? I can >> not figure out, can you make some explanations? > > If nothing else it's better in realize() for consistency with other > devices.
I'm not sure we're terribly consistent at all, really. My understanding was about the same as 赵小强 -- put stuff in init unless it has to go in realize because it depends on properties or might fail or has permanent effects on the simulation. Lots of existing devices do memory_region_init* calls in their init functions. We should probably write down our preferences somewhere, perhaps http://wiki.qemu.org/Documentation/QOMConventions > I'm not familiar enough with the details to be sure, but I also think > it's not safe in instance_init. Once memory regions are registered, > the device can potentially interact with other devices in the virtual > machine. realize() is sequenced to expect that, instance_init is not. Hmm, that doesn't sound right to me. The other devices will only interact with the memory regions when the calling code has finished doing the create/realize/map memory regions sequence -- an MR on its own doesn't do anything unless somebody maps it into an address space. thanks -- PMM