mirror of
https://github.com/openvswitch/ovs
synced 2025-08-31 06:15:47 +00:00
netdev-dpdk: vHost IOMMU support
DPDK v17.11 introduces support for the vHost IOMMU feature. This is a security feature, which restricts the vhost memory that a virtio device may access. This feature also enables the vhost REPLY_ACK protocol, the implementation of which is known to work in newer versions of QEMU (i.e. v2.10.0), but is buggy in older versions (v2.7.0 - v2.9.0, inclusive). As such, the feature is disabled by default in (and should remain so), for the aforementioned older QEMU verions. Starting with QEMU v2.9.1, vhost-iommu-support can safely be enabled, even without having an IOMMU device, with no performance penalty. This patch adds a new global config option, vhost-iommu-support, that controls enablement of the vhost IOMMU feature: ovs-vsctl set Open_vSwitch . other_config:vhost-iommu-support=true This value defaults to false; to enable IOMMU support, this field should be set to true when setting other global parameters on init (such as "dpdk-socket-mem", for example). Changing the value at runtime is not supported, and requires restarting the vswitch daemon. Signed-off-by: Mark Kavanagh <mark.b.kavanagh@intel.com> Acked-by: Kevin Traynor <ktraynor@redhat.com> Signed-off-by: Ian Stokes <ian.stokes@intel.com>
This commit is contained in:
committed by
Ian Stokes
parent
5e925ccc2a
commit
a14d1cc8a7
@@ -3269,6 +3269,7 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev *netdev)
|
||||
{
|
||||
struct netdev_dpdk *dev = netdev_dpdk_cast(netdev);
|
||||
int err;
|
||||
uint64_t vhost_flags = 0;
|
||||
|
||||
ovs_mutex_lock(&dev->mutex);
|
||||
|
||||
@@ -3279,16 +3280,21 @@ netdev_dpdk_vhost_client_reconfigure(struct netdev *netdev)
|
||||
*/
|
||||
if (!(dev->vhost_driver_flags & RTE_VHOST_USER_CLIENT)
|
||||
&& strlen(dev->vhost_id)) {
|
||||
/* Register client-mode device */
|
||||
err = rte_vhost_driver_register(dev->vhost_id,
|
||||
RTE_VHOST_USER_CLIENT);
|
||||
/* Register client-mode device. */
|
||||
vhost_flags |= RTE_VHOST_USER_CLIENT;
|
||||
|
||||
/* Enable IOMMU support, if explicitly requested. */
|
||||
if (dpdk_vhost_iommu_enabled()) {
|
||||
vhost_flags |= RTE_VHOST_USER_IOMMU_SUPPORT;
|
||||
}
|
||||
err = rte_vhost_driver_register(dev->vhost_id, vhost_flags);
|
||||
if (err) {
|
||||
VLOG_ERR("vhost-user device setup failure for device %s\n",
|
||||
dev->vhost_id);
|
||||
goto unlock;
|
||||
} else {
|
||||
/* Configuration successful */
|
||||
dev->vhost_driver_flags |= RTE_VHOST_USER_CLIENT;
|
||||
dev->vhost_driver_flags |= vhost_flags;
|
||||
VLOG_INFO("vHost User device '%s' created in 'client' mode, "
|
||||
"using client socket '%s'",
|
||||
dev->up.name, dev->vhost_id);
|
||||
|
Reference in New Issue
Block a user