From: Simon Horman <horms@kernel.org>
To: Haiyang Zhang <haiyangz@microsoft.com>
Cc: "linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
Dexuan Cui <decui@microsoft.com>,
KY Srinivasan <kys@microsoft.com>,
Paul Rosswurm <paulros@microsoft.com>,
"olaf@aepfle.de" <olaf@aepfle.de>, vkuznets <vkuznets@redhat.com>,
"davem@davemloft.net" <davem@davemloft.net>,
"wei.liu@kernel.org" <wei.liu@kernel.org>,
"edumazet@google.com" <edumazet@google.com>,
"kuba@kernel.org" <kuba@kernel.org>,
"pabeni@redhat.com" <pabeni@redhat.com>,
"leon@kernel.org" <leon@kernel.org>,
Long Li <longli@microsoft.com>,
"ssengar@linux.microsoft.com" <ssengar@linux.microsoft.com>,
"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
"daniel@iogearbox.net" <daniel@iogearbox.net>,
"john.fastabend@gmail.com" <john.fastabend@gmail.com>,
"bpf@vger.kernel.org" <bpf@vger.kernel.org>,
"ast@kernel.org" <ast@kernel.org>,
Ajay Sharma <sharmaajay@microsoft.com>,
"hawk@kernel.org" <hawk@kernel.org>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"shradhagupta@linux.microsoft.com"
<shradhagupta@linux.microsoft.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH net, 3/3] net: mana: Fix oversized sge0 for GSO packets
Date: Sat, 30 Sep 2023 20:19:46 +0200 [thread overview]
Message-ID: <20230930181946.GG92317@kernel.org> (raw)
In-Reply-To: <PH7PR21MB311698B8C2107E66890F6C7ECAC0A@PH7PR21MB3116.namprd21.prod.outlook.com>
On Fri, Sep 29, 2023 at 04:11:15PM +0000, Haiyang Zhang wrote:
...
> > > @@ -209,19 +281,6 @@ netdev_tx_t mana_start_xmit(struct sk_buff *skb,
> > struct net_device *ndev)
> > > pkg.wqe_req.client_data_unit = 0;
> > >
> > > pkg.wqe_req.num_sge = 1 + skb_shinfo(skb)->nr_frags;
> > > - WARN_ON_ONCE(pkg.wqe_req.num_sge >
> > MAX_TX_WQE_SGL_ENTRIES);
> > > -
> > > - if (pkg.wqe_req.num_sge <= ARRAY_SIZE(pkg.sgl_array)) {
> > > - pkg.wqe_req.sgl = pkg.sgl_array;
> > > - } else {
> > > - pkg.sgl_ptr = kmalloc_array(pkg.wqe_req.num_sge,
> > > - sizeof(struct gdma_sge),
> > > - GFP_ATOMIC);
> > > - if (!pkg.sgl_ptr)
> > > - goto tx_drop_count;
> > > -
> > > - pkg.wqe_req.sgl = pkg.sgl_ptr;
> > > - }
> >
> > It is unclear to me why this logic has moved from here to further
> > down in this function. Is it to avoid some cases where
> > alloation has to be unwond on error (when mana_fix_skb_head() fails) ?
> > If so, this feels more like an optimisation than a fix.
> mana_fix_skb_head() may add one more sge (success case) so the sgl
> allocation should be done later. Otherwise, we need to free / re-allocate
> the array later.
Understood, thanks for the clarification.
> > > if (skb->protocol == htons(ETH_P_IP))
> > > ipv4 = true;
> > > @@ -229,6 +288,23 @@ netdev_tx_t mana_start_xmit(struct sk_buff *skb,
> > struct net_device *ndev)
> > > ipv6 = true;
> > >
> > > if (skb_is_gso(skb)) {
> > > + gso_hs = mana_get_gso_hs(skb);
> > > +
> > > + if (mana_fix_skb_head(ndev, skb, gso_hs,
> > &pkg.wqe_req.num_sge))
> > > + goto tx_drop_count;
> > > +
> > > + if (skb->encapsulation) {
> > > + u64_stats_update_begin(&tx_stats->syncp);
> > > + tx_stats->tso_inner_packets++;
> > > + tx_stats->tso_inner_bytes += skb->len - gso_hs;
> > > + u64_stats_update_end(&tx_stats->syncp);
> > > + } else {
> > > + u64_stats_update_begin(&tx_stats->syncp);
> > > + tx_stats->tso_packets++;
> > > + tx_stats->tso_bytes += skb->len - gso_hs;
> > > + u64_stats_update_end(&tx_stats->syncp);
> > > + }
> >
> > nit: I wonder if this could be slightly more succinctly written as:
> >
> > u64_stats_update_begin(&tx_stats->syncp);
> > if (skb->encapsulation) {
> > tx_stats->tso_inner_packets++;
> > tx_stats->tso_inner_bytes += skb->len - gso_hs;
> > } else {
> > tx_stats->tso_packets++;
> > tx_stats->tso_bytes += skb->len - gso_hs;
> > }
> > u64_stats_update_end(&tx_stats->syncp);
> >
> Yes it can be written this way:)
>
> > Also, it is unclear to me why the stats logic is moved here from
> > futher down in the same block. It feels more like a clean-up than a fix
> > (as, btw, is my suggestion immediately above).
> Since we need to calculate the gso_hs and fix head earlier than the stats and
> some other work, I move it immediately after skb_is_gso(skb).
> The gso_hs calculation was part of the tx_stats block, so the tx_stats is moved
> together to remain close to the gso_hs calculation to keep readability.
I agree it is nice the way you have it.
I was mainly thinking that the diffstat could be made smaller,
which might be beneficial to a fix. But I have no strong feelings on that.
> > > +
> > > pkg.tx_oob.s_oob.is_outer_ipv4 = ipv4;
> > > pkg.tx_oob.s_oob.is_outer_ipv6 = ipv6;
> > >
...
prev parent reply other threads:[~2023-09-30 18:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-24 1:31 [PATCH net, 0/3] net: mana: Fix some TX processing bugs Haiyang Zhang
2023-09-24 1:31 ` [PATCH net, 1/3] net: mana: Fix TX CQE error handling Haiyang Zhang
2023-09-29 5:47 ` Simon Horman
2023-09-29 5:50 ` Simon Horman
2023-09-29 15:51 ` Haiyang Zhang
2023-09-30 18:16 ` Simon Horman
2023-09-24 1:31 ` [PATCH net, 2/3] net: mana: Fix the tso_bytes calculation Haiyang Zhang
2023-09-29 5:48 ` Simon Horman
2023-09-24 1:31 ` [PATCH net, 3/3] net: mana: Fix oversized sge0 for GSO packets Haiyang Zhang
2023-09-24 5:22 ` Greg KH
2023-09-24 20:20 ` Haiyang Zhang
2023-09-29 8:56 ` Simon Horman
2023-09-29 16:11 ` Haiyang Zhang
2023-09-30 18:19 ` Simon Horman [this message]
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=20230930181946.GG92317@kernel.org \
--to=horms@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=decui@microsoft.com \
--cc=edumazet@google.com \
--cc=haiyangz@microsoft.com \
--cc=hawk@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=kys@microsoft.com \
--cc=leon@kernel.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=longli@microsoft.com \
--cc=netdev@vger.kernel.org \
--cc=olaf@aepfle.de \
--cc=pabeni@redhat.com \
--cc=paulros@microsoft.com \
--cc=sharmaajay@microsoft.com \
--cc=shradhagupta@linux.microsoft.com \
--cc=ssengar@linux.microsoft.com \
--cc=tglx@linutronix.de \
--cc=vkuznets@redhat.com \
--cc=wei.liu@kernel.org \
/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.