While the queue count itself is not a guest visible property, libvirt
uses it to calculate the 'vectors' property of the 'virtio-net' device
which is ABI.
Since we don't expose control of 'vectors' explicitly, consider 'queues'
ABI.
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
return false;
}
+ /* The number of queues is used to calculate the value for 'vectors'
+ * (see qemuBuildNicDevProps) which is machine ABI thus we need to ensure
+ * that the number of queues is kept in sync */
+ if (virDomainNetIsVirtioModel(src) &&
+ (src->driver.virtio.queues != dst->driver.virtio.queues)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Target virtio network queue count '%1$d' does not match source '%2$d'"),
+ dst->driver.virtio.queues, src->driver.virtio.queues);
+ return false;
+ }
+
if (!virDomainVirtioOptionsCheckABIStability(src->virtio, dst->virtio))
return false;
* we should add vectors=2*N+2 where N is the vhostfdSize
*/
mq = VIR_TRISTATE_SWITCH_ON;
+ /* As 'vectors' is a guest-OS visible property and thus
+ * effectively guest ABI this formula *MUST NOT* change */
vectors = 2 * net->driver.virtio.queues + 2;
}
}