[v2,2/2] vhost: force vIOMMU enablement with VDUSE
Checks
Commit Message
Unlike Vhost-user, VDUSE requires vIOMMU support.
This patch ignores whether RTE_VHOST_USER_IOMMU_SUPPORT
flag is passed at register time to avoid having application
to pass it for having working VDUSE device creation.
Fixes: 0adb8eccc6a6 ("vhost: add VDUSE device creation and destruction")
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
---
lib/vhost/socket.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
Comments
On 13/07/2023 12:29, Maxime Coquelin wrote:
> Unlike Vhost-user, VDUSE requires vIOMMU support.
> This patch ignores whether RTE_VHOST_USER_IOMMU_SUPPORT
> flag is passed at register time to avoid having application
> to pass it for having working VDUSE device creation.
>
> Fixes: 0adb8eccc6a6 ("vhost: add VDUSE device creation and destruction")
>
> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
> ---
> lib/vhost/socket.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c
> index 57dfe3d2fe..79f2138f60 100644
> --- a/lib/vhost/socket.c
> +++ b/lib/vhost/socket.c
> @@ -932,7 +932,10 @@ rte_vhost_driver_register(const char *path, uint64_t flags)
> vsocket->async_copy = flags & RTE_VHOST_USER_ASYNC_COPY;
> vsocket->net_compliant_ol_flags = flags & RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS;
> vsocket->stats_enabled = flags & RTE_VHOST_USER_NET_STATS_ENABLE;
> - vsocket->iommu_support = flags & RTE_VHOST_USER_IOMMU_SUPPORT;
> + if (vsocket->is_vduse)
> + vsocket->iommu_support = true;
> + else
> + vsocket->iommu_support = flags & RTE_VHOST_USER_IOMMU_SUPPORT;
>
> if (vsocket->async_copy &&
> (flags & (RTE_VHOST_USER_IOMMU_SUPPORT |
^^^ do you need to update this check ?
> @@ -986,7 +989,7 @@ rte_vhost_driver_register(const char *path, uint64_t flags)
> vsocket->features &= ~seg_offload_features;
> }
>
> - if (!(flags & RTE_VHOST_USER_IOMMU_SUPPORT)) {
> + if (!vsocket->iommu_support) {
> vsocket->supported_features &= ~(1ULL << VIRTIO_F_IOMMU_PLATFORM);
> vsocket->features &= ~(1ULL << VIRTIO_F_IOMMU_PLATFORM);
> }
On 7/13/23 14:47, Kevin Traynor wrote:
> On 13/07/2023 12:29, Maxime Coquelin wrote:
>> Unlike Vhost-user, VDUSE requires vIOMMU support.
>> This patch ignores whether RTE_VHOST_USER_IOMMU_SUPPORT
>> flag is passed at register time to avoid having application
>> to pass it for having working VDUSE device creation.
>>
>> Fixes: 0adb8eccc6a6 ("vhost: add VDUSE device creation and destruction")
>>
>> Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
>> ---
>> lib/vhost/socket.c | 7 +++++--
>> 1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/lib/vhost/socket.c b/lib/vhost/socket.c
>> index 57dfe3d2fe..79f2138f60 100644
>> --- a/lib/vhost/socket.c
>> +++ b/lib/vhost/socket.c
>> @@ -932,7 +932,10 @@ rte_vhost_driver_register(const char *path,
>> uint64_t flags)
>> vsocket->async_copy = flags & RTE_VHOST_USER_ASYNC_COPY;
>> vsocket->net_compliant_ol_flags = flags &
>> RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS;
>> vsocket->stats_enabled = flags & RTE_VHOST_USER_NET_STATS_ENABLE;
>> - vsocket->iommu_support = flags & RTE_VHOST_USER_IOMMU_SUPPORT;
>> + if (vsocket->is_vduse)
>> + vsocket->iommu_support = true;
>> + else
>> + vsocket->iommu_support = flags & RTE_VHOST_USER_IOMMU_SUPPORT;
>> if (vsocket->async_copy &&
>> (flags & (RTE_VHOST_USER_IOMMU_SUPPORT |
> ^^^ do you need to update this check ?
Good catch.
Yes, it would be better to replace with vsocket->iommu_support.
V3 on its way.
Thanks!
Maxime
>> @@ -986,7 +989,7 @@ rte_vhost_driver_register(const char *path,
>> uint64_t flags)
>> vsocket->features &= ~seg_offload_features;
>> }
>> - if (!(flags & RTE_VHOST_USER_IOMMU_SUPPORT)) {
>> + if (!vsocket->iommu_support) {
>> vsocket->supported_features &= ~(1ULL <<
>> VIRTIO_F_IOMMU_PLATFORM);
>> vsocket->features &= ~(1ULL << VIRTIO_F_IOMMU_PLATFORM);
>> }
>
@@ -932,7 +932,10 @@ rte_vhost_driver_register(const char *path, uint64_t flags)
vsocket->async_copy = flags & RTE_VHOST_USER_ASYNC_COPY;
vsocket->net_compliant_ol_flags = flags & RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS;
vsocket->stats_enabled = flags & RTE_VHOST_USER_NET_STATS_ENABLE;
- vsocket->iommu_support = flags & RTE_VHOST_USER_IOMMU_SUPPORT;
+ if (vsocket->is_vduse)
+ vsocket->iommu_support = true;
+ else
+ vsocket->iommu_support = flags & RTE_VHOST_USER_IOMMU_SUPPORT;
if (vsocket->async_copy &&
(flags & (RTE_VHOST_USER_IOMMU_SUPPORT |
@@ -986,7 +989,7 @@ rte_vhost_driver_register(const char *path, uint64_t flags)
vsocket->features &= ~seg_offload_features;
}
- if (!(flags & RTE_VHOST_USER_IOMMU_SUPPORT)) {
+ if (!vsocket->iommu_support) {
vsocket->supported_features &= ~(1ULL << VIRTIO_F_IOMMU_PLATFORM);
vsocket->features &= ~(1ULL << VIRTIO_F_IOMMU_PLATFORM);
}