• M
    qdev-monitor: Fix check for full bus · ed238ba2
    Markus Armbruster 提交于
    Property bus has always been too screwed up to be really usable for
    values other than plain bus IDs.  This just fixes a bug that crept in
    in commit 1395af6f "qdev: add a maximum device allowed field for the
    bus."
    
    It doesn't always fail when it should:
    
        $ qemu-system-x86_64 -nodefaults -device virtio-serial-pci -device virtio-rng-device,bus=pci.0/virtio-serial-pci/virtio-bus
    
    Happily plugs the virtio-rng-device into the virtio-bus provided by
    virtio-serial-pci, even though its only slot is already occupied by a
    virtio-serial-device.
    
    And sometimes fails when it shouldn't:
    
        $ qemu-system-x86_64 -nodefaults -device virtio-serial-pci -device virtserialport,bus=virtio-bus/virtio-serial-device
    
    Yes, the virtio-bus is full, but the virtio-serial-bus provided by
    virtio-serial-device isn't, and that's the one we're trying to use.
    
    Root cause: we check "bus full" when we resolve the first element of
    the path.  That's the correct one only when it's also the last one.
    
    Fix by moving the "bus full" check to right before we return a bus.
    Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: NEric Blake <eblake@redhat.com>
    ed238ba2
qdev-monitor.c 22.9 KB