Il 15/07/2012 22:25, miny...@acm.org ha scritto: > + /* Clear the property from this device so we can put it elsewhere */ > + chr = isa->chr; > + qdev_prop_set_chr(&dev->qdev, "chardev", NULL); > + > + if (chr) { > + bdev = qdev_create(NULL, "ipmi-bmc-extern"); > + qdev_prop_set_chr(bdev, "chardev", chr); > + } else { > + bdev = qdev_create(NULL, "ipmi-bmc-sim"); > + } > + snprintf(typename, sizeof(typename), "ipmi-interface-%s", > isa->interface); > + idev = qdev_create(&isa_bus->qbus, typename); > + qdev_prop_set_ptr(bdev, "ipmiif", idev); > + qdev_prop_set_uint64(idev, "iobase", isa->iobase); > + qdev_prop_set_ptr(idev, "bmc", bdev); > + qdev_prop_set_uint8(idev, "slave-addr", isa->slave_addr); > + rc = qdev_init(idev);
I think this is adding a bit of extra complication. You do not need to add explicit devices for this. If you want to make ipmi-bmc-* and ipmi-interface-* objects, you can create them with object_new, set the properties manually with the returned pointer and add the object to the parent with object_property_add_child. Otherwise, it should also be fine if you just add them as function pointers. Either way also lets you keep the ownership of the chardev in the ISA IPMI device, and avoids that "info qtree" looks strange and does not show the chardev you assigned. Paolo