[libvirt] [PATCH 7/7] Forward Mode 'Hostdev' qemu driver implementation
Laine Stump
laine at laine.org
Mon Aug 20 02:25:29 UTC 2012
I just found this review that I had typed up and not actually sent. I've
made the small changes and pushed the series in the meantime, but
figured I should send this just for archival purposes.
On 08/16/2012 11:42 AM, Shradha Shah wrote:
> For a network with <forward mode='hostdev', there is a need to
> add the newly minted hostdev to the hostdevs array.
>
> In this case we also call qemuPrepareHostDevicesas it has already been
> called by the time we get to here and are building the qemu commandline
>
> Signed-off-by: Shradha Shah <sshah at solarflare.com>
> ---
> src/qemu/qemu_command.c | 39 +++++++++++++++++++++++++++++++++------
> 1 files changed, 33 insertions(+), 6 deletions(-)
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index 6f6c6cd..1470edd 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -24,6 +24,7 @@
> #include <config.h>
>
> #include "qemu_command.h"
> +#include "qemu_hostdev.h"
> #include "qemu_capabilities.h"
> #include "qemu_bridge_filter.h"
> #include "cpu/cpu.h"
> @@ -5221,12 +5222,38 @@ qemuBuildCommandLine(virConnectPtr conn,
>
> actualType = virDomainNetGetActualType(net);
> if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
> - /* type='hostdev' interfaces are handled in codepath
> - * for standard hostdev (NB: when there is a network
> - * with <forward mode='hostdev', there will need to be
> - * code here that adds the newly minted hostdev to the
> - * hostdevs array).
> - */
> + if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
> + virDomainHostdevDefPtr hostdev = virDomainNetGetActualHostdev(net);
> + virDomainHostdevDefPtr found;
> + /* For a network with <forward mode='hostdev', there is a need to
> + * add the newly minted hostdev to the hostdevs array.
> + */
> + if (qemuAssignDeviceHostdevAlias(def, hostdev,
> + (def->nhostdevs-1)) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Could not assign alias to Net Hostdev"));
qemuAssignDeviceHostdevAlias logs its own errors, so I'm removing this
log message.
> + goto error;
> + }
> +
> + if (virDomainHostdevFind(def, hostdev, &found) < 0) {
> + if (virDomainHostdevInsert(def, hostdev) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Hostdev not inserted into the array"));
virDomainHostdevInsert *doesn't* log its own errors. However, the only
reason it can fail is if we're out of memory, so I'm replacing this log
with virReportOOMError().
> + goto error;
> + }
> + if (qemuPrepareHostdevPCIDevices(driver, def->name, def->uuid,
> + &hostdev, 1) < 0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("Prepare Hostdev PCI Devices failed"));
This function also logs its own errors, so I'm removing this message
> + goto error;
> + }
> + }
> + else {
> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> + _("The Hostdev is being used by some other device"));
How about this instead? (by this time we're guaranteed that all of those
bits of info are valid)
virReportError(VIR_ERR_INTERNAL_ERROR,
_("PCI device %04x:%02x:%02x.%x "
"allocated from network %s is
already "
"in use by domain %s"),
hostdev->source.subsys.u.pci.domain,
hostdev->source.subsys.u.pci.bus,
hostdev->source.subsys.u.pci.slot,
hostdev->source.subsys.u.pci.function,
net->data.network.name,
def->name);
ACK with the log message changes. I'll squash them in before I push.
More information about the libvir-list
mailing list