From: Stephen Hemminger <stephen@networkplumber.org>
To: John Guzik <john@shieldxnetworks.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: vmxnet3 driver - vlan offload is on end descriptor
Date: Thu, 7 Apr 2016 10:35:22 -0700 [thread overview]
Message-ID: <20160407103522.2d3d7953@xeon-e3> (raw)
In-Reply-To: <SN1PR20MB028564DE6A82A22983157757DC900@SN1PR20MB0285.namprd20.prod.outlook.com>
On Thu, 7 Apr 2016 17:11:19 +0000
John Guzik <john@shieldxnetworks.com> wrote:
> With the new jumbo frame patch a latent bug has appeared to have been uncovered: the VLAN offload is on the last rx descriptor, when rcd->eop is true, not the first rx descriptor, when rcd->sop is true and rcd->eop could be false.
> Most likely the reason this has not been seen before is that for non-jumbo frames rcd->eop has always been true when rcd->sop is true as well.
>
> The following patch should fix the problem:
>
> diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> index 4ac0456..3d4a5eb 100644
> --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c
> +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c
> @@ -587,12 +587,6 @@ vmxnet3_post_rx_bufs(vmxnet3_rx_queue_t *rxq, uint8_t ring_id)
> static void
> vmxnet3_rx_offload(const Vmxnet3_RxCompDesc *rcd, struct rte_mbuf *rxm)
> {
> - /* Check for hardware stripped VLAN tag */
> - if (rcd->ts) {
> - rxm->ol_flags |= PKT_RX_VLAN_PKT;
> - rxm->vlan_tci = rte_le_to_cpu_16((uint16_t)rcd->tci);
> - }
> -
> /* Check for RSS */
> if (rcd->rssType != VMXNET3_RCD_RSS_TYPE_NONE) {
> rxm->ol_flags |= PKT_RX_RSS_HASH;
> @@ -737,7 +731,15 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
> rxq->last_seg = rxm;
>
> if (rcd->eop) {
> - rx_pkts[nb_rx++] = rxq->start_seg;
> + struct rte_mbuf *start = rxq->start_seg;
> +
> + /* Check for hardware stripped VLAN tag */
> + if (rcd->ts) {
> + start->ol_flags |= PKT_RX_VLAN_PKT;
> + start->vlan_tci = rte_le_to_cpu_16((uint16_t)rcd->tci);
> + }
> +
> + rx_pkts[nb_rx++] = start;
> rxq->start_seg = NULL;
> }
>
>
Yes, your analysis and bug fix looks correct. The Linux driver checks for VLAN tag in the
last (eop) segment.
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
next prev parent reply other threads:[~2016-04-07 17:35 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-07 17:11 vmxnet3 driver - vlan offload is on end descriptor John Guzik
2016-04-07 17:34 ` Thomas Monjalon
2016-04-07 18:22 ` Yong Wang
2016-04-07 17:35 ` Stephen Hemminger [this message]
2016-04-12 23:08 ` [PATCH] vmxnet3: VLAN tag on end packet, not first John Guzik
2016-05-10 15:04 ` Bruce Richardson
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=20160407103522.2d3d7953@xeon-e3 \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=john@shieldxnetworks.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.