[libvirt] [PATCH 06/13] Rewrite way QEMU PCI addresses are allocated
Daniel Veillard
veillard at redhat.com
Tue Feb 2 14:34:16 UTC 2010
On Mon, Feb 01, 2010 at 06:39:35PM +0000, Daniel P. Berrange wrote:
> The current QEMU code allocates PCI addresses incrementally starting
> at 4. This is not satisfactory because the user may have given some
> addresses in their XML config, which need to be skipped over when
> allocating addresses to remaining devices.
Ah, right !
> It is thus neccessary to maintain a list of already allocated PCI
> addresses and then only allocate ones that remain unused. This is
> also required for domain device hotplug to work properly later.
>
> * src/qemu/qemu_conf.c, src/qemu/qemu_conf.h: Add APIs for creating
> list of existing PCI addresses, and allocating new addresses.
> Refactor address assignment to use this code
> * src/qemu/qemu_driver.c: Pull PCI address assignment up into the
> qemuStartVMDaemon() method, as a prelude to moving it into the
> 'define' method. Update list of allocated addresses when connecting
> to a running VM at daemon startup.
> * tests/qemuxml2argvtest.c, tests/qemuargv2xmltest.c,
> tests/qemuxml2xmltest.c: Remove USB product test since all
> passthrough is done based on address
> * tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-product.args,
> tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-product.xml: Kil
> unused data files
[...]
> + addr = qemuPCIAddressAsString(&dev);
> + if (!addr)
> + return -1;
> +
> + if (virHashLookup(addrs->used, addr)) {
> + qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> + _("unable to reserve PCI address %s"), addr);
> + VIR_FREE(addr);
> + return -1;
> + }
> +
> + if (virHashAddEntry(addrs->used, addr, addr)) {
> + VIR_FREE(addr);
> + return -1;
> + }
is using a hash table really that simpler in that case ? I doubt we
need an optimized lookup, and this mean always saving to a standardized
string to then do string comparisons instead of directly checking
domain/bus/slot values. But that's a minor point.
ACK,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list