• T
    hw/timer/mc146818rtc: Fix introspection problem · 29551fdc
    Thomas Huth 提交于
    There is currently a funny problem with the "mc146818rtc" device:
    1) Start QEMU like this:
       qemu-system-ppc64 -M pseries -S
    2) At the HMP monitor, enter "info qom-tree". Note that there is an
       entry for "/rtc (spapr-rtc)".
    3) Introspect the mc146818rtc device like this:
       device_add mc146818rtc,help
    4) Run "info qom-tree" again. The "/rtc" entry is gone now!
    
    The rtc_finalize() function of the mc146818rtc device has two bugs: First,
    it tries to remove a "rtc" property, while the rtc_realizefn() added a
    "rtc-time" property instead. And second, it should have been done in an
    unrealize function, not in a finalize function, to avoid that this causes
    problems during introspection.
    
    But since adding aliases to the global machine state should not be done
    from a device's realize function anyway, let's rather fix this issue
    by moving the creation of the alias to the code that creates the device
    (and thus is run from the machine init functions instead), i.e. the
    mc146818_rtc_init() function for most machines. The prep machines are
    special, since the mc146818rtc device is created here in the realize
    function of the i82378 device. Since we certainly don't want to add the
    alias there, we add it to some code that is called from the ibm_40p_init()
    machine init function instead.
    Since the alias is now only created during the machine init, we can remove
    the object_property_del() completely.
    
    Fixes: 654a36d8Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
    Signed-off-by: NThomas Huth <thuth@redhat.com>
    Message-Id: <1534419358-10932-5-git-send-email-thuth@redhat.com>
    Reviewed-by: NJuan Quintela <quintela@redhat.com>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    29551fdc
prep.c 27.7 KB