• O
    qemu: Restore the original states of PCI device when restarting daemon · d84b3626
    Osier Yang 提交于
    To support "managed" mode of host PCI device, we record the original
    states (unbind_from_stub, remove_slot, and reprobe) so that could
    reattach the device to host with original driver. But there is no XML
    for theses attrs, and thus after daemon is restarted, we lose the
    original states. It's easy to reproduce:
    
        1) virsh start domain
        2) virsh attach-device dom hostpci.xml (in 'managed' mode)
        3) service libvirtd restart
        4) virsh destroy domain
    
        You will see the device won't be bound to the original driver
    if there was one.
    
    This patch is to solve the problem by introducing internal XML
    (won't be dumped to user, only dumped to status XML). The XML is:
        <origstates>
          <unbind/>
          <remove_slot/>
          <reprobe/>
        </origstates>
    
    Which will be child node of <hostdev><source>...</souce></hostdev>.
    (only for PCI device).
    
    A new struct "virDomainHostdevOrigStates" is introduced for the XML,
    and the according members are updated when preparing the PCI device.
    And function "qemuUpdateActivePciHostdevs" is modified to honor
    the original states. Use of qemuGetPciHostDeviceList is removed
    in function "qemuUpdateActivePciHostdevs", and the "managed" value of
    the device config is honored by the change. This fixes another problem
    alongside:
    
        qemuGetPciHostDeviceList set the device as "managed" force
        regardless of whether the device is configured as "managed='yes'"
        or not in XML, which is not right.
    d84b3626
pci.h 4.4 KB