To support restoring offloads state in vdpa, need to expose
the function virtio_net_supported_guest_offloads().
QEMU uses this function to get the guest supported offloads
and no needs to send the corresponding CVQ command if guest
enables all supported features.
Signed-off-by: Hawkins Jiawei <yin31149@gmail.com>
---
hw/net/virtio-net.c | 2 +-
include/hw/virtio/virtio-net.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 7b27dad6c4..7e8897a8bc 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -874,7 +874,7 @@ static uint64_t virtio_net_guest_offloads_by_features(uint32_t features)
return guest_offloads_mask & features;
}
-static inline uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n)
+uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n)
{
VirtIODevice *vdev = VIRTIO_DEVICE(n);
return virtio_net_guest_offloads_by_features(vdev->guest_features);
diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h
index ef234ffe7e..5f5dcb4572 100644
--- a/include/hw/virtio/virtio-net.h
+++ b/include/hw/virtio/virtio-net.h
@@ -227,5 +227,6 @@ size_t virtio_net_handle_ctrl_iov(VirtIODevice *vdev,
unsigned out_num);
void virtio_net_set_netclient_name(VirtIONet *n, const char *name,
const char *type);
+uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n);
#endif
--
2.25.1
On Thu, Jun 1, 2023 at 3:49 PM Hawkins Jiawei <yin31149@gmail.com> wrote:
>
> To support restoring offloads state in vdpa, need to expose
> the function virtio_net_supported_guest_offloads().
> QEMU uses this function to get the guest supported offloads
> and no needs to send the corresponding CVQ command if guest
doesn't need to send?
> enables all supported features.
>
Good! I'd add the same message as the next patch's comment, to signal
it is because the device has already enabled by default:
+ * According to VirtIO standard, "Upon feature negotiation
+ * corresponding offload gets enabled to preserve
+ * backward compatibility."
+ * So we do not need to send this CVQ command if the guest
+ * also enables all supported offloads.
Thanks!
> Signed-off-by: Hawkins Jiawei <yin31149@gmail.com>
> ---
> hw/net/virtio-net.c | 2 +-
> include/hw/virtio/virtio-net.h | 1 +
> 2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
> index 7b27dad6c4..7e8897a8bc 100644
> --- a/hw/net/virtio-net.c
> +++ b/hw/net/virtio-net.c
> @@ -874,7 +874,7 @@ static uint64_t virtio_net_guest_offloads_by_features(uint32_t features)
> return guest_offloads_mask & features;
> }
>
> -static inline uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n)
> +uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n)
> {
> VirtIODevice *vdev = VIRTIO_DEVICE(n);
> return virtio_net_guest_offloads_by_features(vdev->guest_features);
> diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h
> index ef234ffe7e..5f5dcb4572 100644
> --- a/include/hw/virtio/virtio-net.h
> +++ b/include/hw/virtio/virtio-net.h
> @@ -227,5 +227,6 @@ size_t virtio_net_handle_ctrl_iov(VirtIODevice *vdev,
> unsigned out_num);
> void virtio_net_set_netclient_name(VirtIONet *n, const char *name,
> const char *type);
> +uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n);
>
> #endif
> --
> 2.25.1
>
On 2023/6/1 22:37, Eugenio Perez Martin wrote:
> On Thu, Jun 1, 2023 at 3:49 PM Hawkins Jiawei <yin31149@gmail.com> wrote:
>>
>> To support restoring offloads state in vdpa, need to expose
>> the function virtio_net_supported_guest_offloads().
>> QEMU uses this function to get the guest supported offloads
>> and no needs to send the corresponding CVQ command if guest
>
> doesn't need to send?
I will correct it in the v4 patch.
>
>> enables all supported features.
>>
>
> Good! I'd add the same message as the next patch's comment, to signal
> it is because the device has already enabled by default:
>
> + * According to VirtIO standard, "Upon feature negotiation
> + * corresponding offload gets enabled to preserve
> + * backward compatibility."
> + * So we do not need to send this CVQ command if the guest
> + * also enables all supported offloads.
I will add these messages in the v4 patch.
Thanks!
>
> Thanks!
>
>
>> Signed-off-by: Hawkins Jiawei <yin31149@gmail.com>
>> ---
>> hw/net/virtio-net.c | 2 +-
>> include/hw/virtio/virtio-net.h | 1 +
>> 2 files changed, 2 insertions(+), 1 deletion(-)
>>
>> diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
>> index 7b27dad6c4..7e8897a8bc 100644
>> --- a/hw/net/virtio-net.c
>> +++ b/hw/net/virtio-net.c
>> @@ -874,7 +874,7 @@ static uint64_t virtio_net_guest_offloads_by_features(uint32_t features)
>> return guest_offloads_mask & features;
>> }
>>
>> -static inline uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n)
>> +uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n)
>> {
>> VirtIODevice *vdev = VIRTIO_DEVICE(n);
>> return virtio_net_guest_offloads_by_features(vdev->guest_features);
>> diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h
>> index ef234ffe7e..5f5dcb4572 100644
>> --- a/include/hw/virtio/virtio-net.h
>> +++ b/include/hw/virtio/virtio-net.h
>> @@ -227,5 +227,6 @@ size_t virtio_net_handle_ctrl_iov(VirtIODevice *vdev,
>> unsigned out_num);
>> void virtio_net_set_netclient_name(VirtIONet *n, const char *name,
>> const char *type);
>> +uint64_t virtio_net_supported_guest_offloads(const VirtIONet *n);
>>
>> #endif
>> --
>> 2.25.1
>>
>
© 2016 - 2026 Red Hat, Inc.