From: "Michael S. Tsirkin" <mst@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: qemu-devel@nongnu.org, Peter Maydell <peter.maydell@linaro.org>,
Hawkins Jiawei <yin31149@gmail.com>,
Jason Wang <jasowang@redhat.com>
Subject: Re: [PULL 08/83] vdpa: Restore hash calculation state
Date: Thu, 19 Oct 2023 14:07:34 -0400 [thread overview]
Message-ID: <20231019140406-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <CAJSP0QVTi2QxMdzmPoPF2w5xm-r19W_0GtTaqJzGnoibT9iDNg@mail.gmail.com>
On Thu, Oct 19, 2023 at 09:32:28AM -0700, Stefan Hajnoczi wrote:
> On Wed, 18 Oct 2023 at 08:56, Michael S. Tsirkin <mst@redhat.com> wrote:
> >
> > From: Hawkins Jiawei <yin31149@gmail.com>
> >
> > This patch introduces vhost_vdpa_net_load_rss() to restore
> > the hash calculation state at device's startup.
> >
> > Note that vhost_vdpa_net_load_rss() has `do_rss` argument,
> > which allows future code to reuse this function to restore
> > the receive-side scaling state when the VIRTIO_NET_F_RSS
> > feature is enabled in SVQ. Currently, vhost_vdpa_net_load_rss()
> > could only be invoked when `do_rss` is set to false.
> >
> > Signed-off-by: Hawkins Jiawei <yin31149@gmail.com>
> > Message-Id: <f5ffad10699001107022851e0560cb394039d6b0.1693297766.git.yin31149@gmail.com>
> > Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> > net/vhost-vdpa.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 91 insertions(+)
> >
> > diff --git a/net/vhost-vdpa.c b/net/vhost-vdpa.c
> > index 4b7c3b81b8..40d0bcbc0b 100644
> > --- a/net/vhost-vdpa.c
> > +++ b/net/vhost-vdpa.c
> > @@ -817,6 +817,88 @@ static int vhost_vdpa_net_load_mac(VhostVDPAState *s, const VirtIONet *n,
> > return 0;
> > }
> >
> > +static int vhost_vdpa_net_load_rss(VhostVDPAState *s, const VirtIONet *n,
> > + struct iovec *out_cursor,
> > + struct iovec *in_cursor, bool do_rss)
> > +{
> > + struct virtio_net_rss_config cfg;
> > + ssize_t r;
> > + g_autofree uint16_t *table = NULL;
> > +
> > + /*
> > + * According to VirtIO standard, "Initially the device has all hash
> > + * types disabled and reports only VIRTIO_NET_HASH_REPORT_NONE.".
> > + *
> > + * Therefore, there is no need to send this CVQ command if the
> > + * driver disable the all hash types, which aligns with
> > + * the device's defaults.
> > + *
> > + * Note that the device's defaults can mismatch the driver's
> > + * configuration only at live migration.
> > + */
> > + if (!n->rss_data.enabled ||
> > + n->rss_data.hash_types == VIRTIO_NET_HASH_REPORT_NONE) {
> > + return 0;
> > + }
> > +
> > + cfg.hash_types = cpu_to_le32(n->rss_data.hash_types);
> > +
> > + /*
> > + * According to VirtIO standard, "Field reserved MUST contain zeroes.
> > + * It is defined to make the structure to match the layout of
> > + * virtio_net_rss_config structure, defined in 5.1.6.5.7.".
> > + *
> > + * Therefore, we need to zero the fields in struct virtio_net_rss_config,
> > + * which corresponds the `reserved` field in
> > + * struct virtio_net_hash_config.
> > + */
> > + memset(&cfg.indirection_table_mask, 0,
> > + sizeof_field(struct virtio_net_hash_config, reserved));
>
> Please take a look at the following CI failure:
>
> In file included from /usr/include/string.h:495,
> from /home/gitlab-runner/builds/-LCfcJ2T/0/qemu-project/qemu/include/qemu/osdep.h:116,
> from ../net/vhost-vdpa.c:12:
> In function ‘memset’,
> inlined from ‘vhost_vdpa_net_load_rss’ at ../net/vhost-vdpa.c:874:9:
> /usr/include/s390x-linux-gnu/bits/string_fortified.h:71:10: error:
> ‘__builtin_memset’ offset [7, 12] from the object at ‘cfg’ is out of
> the bounds of referenced subobject ‘indirection_table_mask’ with type
> ‘short unsigned int’ at offset 4 [-Werror=array-bounds]
> 71 | return __builtin___memset_chk (__dest, __ch, __len, __bos0 (__dest));
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> cc1: all warnings being treated as errors
>
> https://gitlab.com/qemu-project/qemu/-/jobs/5329820077
Hmm yes - the trick it's trying to implement is this:
struct virtio_net_rss_config {
uint32_t hash_types;
uint16_t indirection_table_mask;
uint16_t unclassified_queue;
uint16_t indirection_table[1/* + indirection_table_mask */];
uint16_t max_tx_vq;
uint8_t hash_key_length;
uint8_t hash_key_data[/* hash_key_length */];
};
...
struct virtio_net_hash_config {
uint32_t hash_types;
/* for compatibility with virtio_net_rss_config */
uint16_t reserved[4];
uint8_t hash_key_length;
uint8_t hash_key_data[/* hash_key_length */];
};
as you see layout matches.
Using a union is probably the right way to address this.
Dropped for now, thanks!
> > +
> > + table = g_malloc_n(n->rss_data.indirections_len,
> > + sizeof(n->rss_data.indirections_table[0]));
> > + for (int i = 0; i < n->rss_data.indirections_len; ++i) {
> > + table[i] = cpu_to_le16(n->rss_data.indirections_table[i]);
> > + }
> > +
> > + /*
> > + * Consider that virtio_net_handle_rss() currently does not restore the
> > + * hash key length parsed from the CVQ command sent from the guest into
> > + * n->rss_data and uses the maximum key length in other code, so we also
> > + * employthe the maxium key length here.
> > + */
> > + cfg.hash_key_length = sizeof(n->rss_data.key);
> > +
> > + const struct iovec data[] = {
> > + {
> > + .iov_base = &cfg,
> > + .iov_len = offsetof(struct virtio_net_rss_config,
> > + indirection_table),
> > + }, {
> > + .iov_base = table,
> > + .iov_len = n->rss_data.indirections_len *
> > + sizeof(n->rss_data.indirections_table[0]),
> > + }, {
> > + .iov_base = &cfg.max_tx_vq,
> > + .iov_len = offsetof(struct virtio_net_rss_config, hash_key_data) -
> > + offsetof(struct virtio_net_rss_config, max_tx_vq),
> > + }, {
> > + .iov_base = (void *)n->rss_data.key,
> > + .iov_len = sizeof(n->rss_data.key),
> > + }
> > + };
> > +
> > + r = vhost_vdpa_net_load_cmd(s, out_cursor, in_cursor,
> > + VIRTIO_NET_CTRL_MQ,
> > + VIRTIO_NET_CTRL_MQ_HASH_CONFIG,
> > + data, ARRAY_SIZE(data));
> > + if (unlikely(r < 0)) {
> > + return r;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > static int vhost_vdpa_net_load_mq(VhostVDPAState *s,
> > const VirtIONet *n,
> > struct iovec *out_cursor,
> > @@ -842,6 +924,15 @@ static int vhost_vdpa_net_load_mq(VhostVDPAState *s,
> > return r;
> > }
> >
> > + if (!virtio_vdev_has_feature(&n->parent_obj, VIRTIO_NET_F_HASH_REPORT)) {
> > + return 0;
> > + }
> > +
> > + r = vhost_vdpa_net_load_rss(s, n, out_cursor, in_cursor, false);
> > + if (unlikely(r < 0)) {
> > + return r;
> > + }
> > +
> > return 0;
> > }
> >
> > --
> > MST
> >
> >
next prev parent reply other threads:[~2023-10-19 18:08 UTC|newest]
Thread overview: 89+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-18 15:53 [PULL 00/83] virtio,pc,pci: features, cleanups Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 01/83] vdpa: Use iovec for vhost_vdpa_net_cvq_add() Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 02/83] vdpa: Avoid using vhost_vdpa_net_load_*() outside vhost_vdpa_net_load() Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 03/83] vdpa: Check device ack in vhost_vdpa_net_load_rx_mode() Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 04/83] vdpa: Move vhost_svq_poll() to the caller of vhost_vdpa_net_cvq_add() Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 05/83] vdpa: Introduce cursors to vhost_vdpa_net_loadx() Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 06/83] vhost: Expose vhost_svq_available_slots() Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 07/83] vdpa: Send cvq state load commands in parallel Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 08/83] vdpa: Restore hash calculation state Michael S. Tsirkin
2023-10-19 16:32 ` Stefan Hajnoczi
2023-10-19 18:07 ` Michael S. Tsirkin [this message]
2023-10-20 0:58 ` Hawkins Jiawei
2023-10-19 18:34 ` Michael S. Tsirkin
2023-10-19 18:49 ` Stefan Hajnoczi
2023-10-18 15:53 ` [PULL 09/83] vdpa: Allow VIRTIO_NET_F_HASH_REPORT in SVQ Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 10/83] vdpa: Add SetSteeringEBPF method for NetClientState Michael S. Tsirkin
2023-10-18 15:53 ` [PULL 11/83] vdpa: Restore receive-side scaling state Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 12/83] vdpa: Allow VIRTIO_NET_F_RSS in SVQ Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 13/83] tests: test-smp-parse: Add the test for cores/threads per socket helpers Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 14/83] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 count test Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 15/83] tests: bios-tables-test: Add test for smbios type4 count Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 16/83] tests: bios-tables-test: Add ACPI table binaries for smbios type4 count test Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 17/83] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 core " Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 18/83] tests: bios-tables-test: Add test for smbios type4 core count Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 19/83] tests: bios-tables-test: Add ACPI table binaries for smbios type4 core count test Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 20/83] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 core count2 test Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 21/83] tests: bios-tables-test: Extend smbios core count2 test to cover general topology Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 22/83] tests: bios-tables-test: Update ACPI table binaries for smbios core count2 test Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 23/83] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 thread count test Michael S. Tsirkin
2023-10-18 15:54 ` [PULL 24/83] tests: bios-tables-test: Add test for smbios type4 thread count Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 25/83] tests: bios-tables-test: Add ACPI table binaries for smbios type4 thread count test Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 26/83] tests: bios-tables-test: Prepare the ACPI table change for smbios type4 thread count2 test Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 27/83] tests: bios-tables-test: Add test for smbios type4 thread count2 Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 28/83] tests: bios-tables-test: Add ACPI table binaries for smbios type4 thread count2 test Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 29/83] vhost-user: strip superfluous whitespace Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 30/83] vhost-user: tighten "reply_supported" scope in "set_vring_addr" Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 31/83] vhost-user: factor out "vhost_user_write_sync" Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 32/83] vhost-user: flatten "enforce_reply" into "vhost_user_write_sync" Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 33/83] vhost-user: hoist "write_sync", "get_features", "get_u64" Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 34/83] vhost-user: allow "vhost_set_vring" to wait for a reply Michael S. Tsirkin
2023-10-18 15:55 ` [PULL 35/83] vhost-user: call VHOST_USER_SET_VRING_ENABLE synchronously Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 36/83] memory: initialize 'fv' in MemoryRegionCache to make Coverity happy Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 37/83] vhost-user: do not send RESET_OWNER on device reset Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 38/83] vhost-backend: remove vhost_kernel_reset_device() Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 39/83] virtio: call ->vhost_reset_device() during reset Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 40/83] hw/i386/acpi-build: Remove build-time assertion on PIIX/ICH9 reset registers being identical Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 41/83] timer/i8254: Fix one shot PIT mode Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 42/83] hw/display: fix memleak from virtio_add_resource Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 43/83] hw/i386/pc: Merge two if statements into one Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 44/83] hw/i386/pc_piix: Allow for setting properties before realizing PIIX3 south bridge Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 45/83] hw/i386/pc_piix: Assign PIIX3's ISA interrupts before its realize() Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 46/83] hw/isa/piix3: Resolve redundant PIIX_NUM_PIC_IRQS Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 47/83] hw/i386/pc_piix: Wire PIIX3's ISA interrupts by new "isa-irqs" property Michael S. Tsirkin
2023-10-18 15:56 ` [PULL 48/83] hw/i386/pc_piix: Remove redundant "piix3" variable Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 49/83] hw/isa/piix3: Rename "pic" attribute to "isa_irqs_in" Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 50/83] hw/i386/pc_q35: Wire ICH9 LPC function's interrupts before its realize() Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 51/83] hw/isa/piix3: Wire PIC IRQs to ISA bus in host device Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 52/83] hw/i386/pc: Wire RTC ISA IRQs in south bridges Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 53/83] hw/isa/piix3: Create IDE controller in host device Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 54/83] hw/isa/piix3: Create USB " Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 55/83] hw/isa/piix3: Create power management " Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 56/83] hw/isa/piix3: Drop the "3" from PIIX base class name Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 57/83] hw/isa/piix4: Remove unused inbound ISA interrupt lines Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 58/83] hw/isa/piix4: Rename "isa" attribute to "isa_irqs_in" Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 59/83] hw/isa/piix4: Rename reset control operations to match PIIX3 Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 60/83] hw/isa/piix4: Reuse struct PIIXState from PIIX3 Michael S. Tsirkin
2023-10-18 15:57 ` [PULL 61/83] hw/isa/piix3: Merge hw/isa/piix4.c Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 62/83] hw/isa/piix: Allow for optional PIC creation in PIIX3 Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 63/83] hw/isa/piix: Allow for optional PIT " Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 64/83] hw/isa/piix: Harmonize names of reset control memory regions Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 65/83] hw/isa/piix: Share PIIX3's base class with PIIX4 Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 66/83] hw/isa/piix: Reuse PIIX3 base class' realize method in PIIX4 Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 67/83] hw/isa/piix: Rename functions to be shared for PCI interrupt triggering Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 68/83] hw/isa/piix: Reuse PIIX3's PCI interrupt triggering in PIIX4 Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 69/83] hw/isa/piix: Resolve duplicate code regarding PCI interrupt wiring Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 70/83] hw/isa/piix: Implement multi-process QEMU support also for PIIX4 Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 71/83] hw/i386/pc_piix: Make PIIX4 south bridge usable in PC machine Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 72/83] vhost-user-common: send get_inflight_fd once Michael S. Tsirkin
2023-10-18 15:58 ` [PULL 73/83] vhost: move and rename the conn retry times Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 74/83] vhost-user-scsi: support reconnect to backend Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 75/83] vhost-user-scsi: start vhost when guest kicks Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 76/83] vhost-user: fix lost reconnect Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 77/83] hw/i386/cxl: ensure maxram is greater than ram size for calculating cxl range Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 78/83] tests/acpi: Allow update of DSDT.cxl Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 79/83] hw/cxl: Add QTG _DSM support for ACPI0017 device Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 80/83] tests/acpi: Update DSDT.cxl with QTG DSM Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 81/83] vhost-user: Fix protocol feature bit conflict Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 82/83] MAINTAINERS: Add include/hw/intc/i8259.h to the PC chip section Michael S. Tsirkin
2023-10-18 15:59 ` [PULL 83/83] intel-iommu: Report interrupt remapping faults, fix return value Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231019140406-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=jasowang@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=yin31149@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.