All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Oltean <olteanv@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: George McCollister <george.mccollister@gmail.com>,
	Vivien Didelot <vivien.didelot@gmail.com>,
	Florian Fainelli <f.fainelli@gmail.com>,
	"David S . Miller " <davem@davemloft.net>,
	netdev@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH net-next v2 1/3] dsa: add support for Arrow XRS700x tag trailer
Date: Thu, 26 Nov 2020 16:28:12 +0200	[thread overview]
Message-ID: <20201126142812.4jr3kskwqf76cx5d@skbuf> (raw)
In-Reply-To: <20201126140126.GL2075216@lunn.ch>

On Thu, Nov 26, 2020 at 03:01:26PM +0100, Andrew Lunn wrote:
> On Thu, Nov 26, 2020 at 03:50:04PM +0200, Vladimir Oltean wrote:
> > On Wed, Nov 25, 2020 at 09:34:29PM +0100, Andrew Lunn wrote:
> > > > +static struct sk_buff *xrs700x_rcv(struct sk_buff *skb, struct net_device *dev,
> > > > +				   struct packet_type *pt)
> > > > +{
> > > > +	int source_port;
> > > > +	u8 *trailer;
> > > > +
> > > > +	if (skb_linearize(skb))
> > > > +		return NULL;
> > >
> > > Something for Vladimir:
> > >
> > > Could this linearise be moved into the core, depending on the
> > > tail_tag?
> > 
> > Honestly I believe that the skb_linearize is not needed at all.
> 
> Humm
> 
> I'm assuming this is here in case the frame is in fragments, and the
> trailer could be spread over two fragments? If so, you cannot access
> the trailer using straight pointers. Linearize should copy it into one
> buffer.
> 
> For the normal case of a 1500 byte frame, i doubt we have hardware
> which uses multiple scatter/gather buffers. But for jumbo frames?

In this particular case, I don't think that one byte can be in multiple
fragments at once, unless it is a quantum byte. So skb_linearize should
still be removed.

Are you saying that we should do something like this? I would need to
performance-test it:

diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c
index a1b1dc8a4d87..4c2065bec8d5 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -212,6 +212,13 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev,
 	if (!skb)
 		return 0;
 
+	if (cpu_dp->tag_ops->tail_tag && cpu_dp->tag_ops->overhead > 1) {
+		if (unlikely(skb_linearize(skb))) {
+			dev_kfree_skb_any(skb);
+			return 0;
+		}
+	}
+
 	nskb = cpu_dp->rcv(skb, dev, pt);
 	if (!nskb) {
 		kfree_skb(skb);

Also, since we are now finally touching the cacheline with tag_ops,
maybe we could remove the copy of rcv() from struct dsa_port? Although
there is a chance that this might destabilize things and could need a
bit of tweaking to get right.

> > > > +	if (pskb_trim_rcsum(skb, skb->len - 1))
> > > > +		return NULL;
> > >
> > > And the overhead is also in dsa_devlink_ops, so maybe this can be
> > > moved as well?
> > 
> > Sorry, I don't understand this comment.
> 
> I'm meaning, could that also be moved into the core? We seem to have
> the needed information to do it in the core.

Ok, I got confused by the devlink reference.
Currently the tag is always stripped by the tagger driver, because there
are 3 cases:
- tag is before Ethernet MAC DA
- tag is before Ethernet Type
- tag is before FCS
We do not have a way to distinguish between cases 1 and 2 such that DSA
could strip the tag in all cases and provide a uniform interface to all
types of taggers.

  reply	other threads:[~2020-11-26 14:28 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-25 19:37 [PATCH net-next v2 0/3] Arrow SpeedChips XRS700x DSA Driver George McCollister
2020-11-25 19:37 ` [PATCH net-next v2 1/3] dsa: add support for Arrow XRS700x tag trailer George McCollister
2020-11-25 20:34   ` Andrew Lunn
2020-11-26 13:50     ` Vladimir Oltean
2020-11-26 14:01       ` Andrew Lunn
2020-11-26 14:28         ` Vladimir Oltean [this message]
2020-11-25 20:34   ` Andrew Lunn
2020-11-26  1:31   ` Florian Fainelli
2020-11-25 19:37 ` [PATCH net-next v2 2/3] net: dsa: add Arrow SpeedChips XRS700x driver George McCollister
2020-11-26  1:42   ` Jakub Kicinski
2020-11-26  2:25     ` George McCollister
2020-11-26 13:24       ` Vladimir Oltean
2020-11-26 17:56         ` Vladimir Oltean
2020-11-26 19:07           ` George McCollister
2020-11-26 22:05             ` Vladimir Oltean
2020-11-27 18:35               ` Jakub Kicinski
     [not found]                 ` <CAFSKS=MAdnR2jzmkQfTnSQZ7GY5x5KJE=oeqPCQdbZdf5n=4ZQ@mail.gmail.com>
2020-11-27 19:50                   ` Vladimir Oltean
2020-11-27 20:58                     ` George McCollister
2020-11-27 21:37                       ` Jakub Kicinski
2020-11-27 22:42                         ` Vladimir Oltean
2020-11-27 23:21                         ` Vladimir Oltean
2020-11-27 23:51                           ` Jakub Kicinski
2020-11-27 23:30                         ` Andrew Lunn
2020-11-27 23:39                           ` Vladimir Oltean
2020-11-27 23:56                             ` Jakub Kicinski
2020-11-28  1:45                               ` Vladimir Oltean
2020-11-28  0:02                             ` Vladimir Oltean
2020-11-28  0:39                               ` Andrew Lunn
2020-11-28  1:41                                 ` Vladimir Oltean
2020-11-28  2:15                                   ` Jakub Kicinski
2020-11-30 16:52                                     ` George McCollister
2020-11-30 23:50                                       ` Vladimir Oltean
2020-11-30 23:58                                         ` George McCollister
2020-12-01  0:19                                           ` Vladimir Oltean
2020-11-27 20:47                 ` Andrew Lunn
2020-11-27 21:13                   ` Jakub Kicinski
2020-11-27 21:23                     ` Vladimir Oltean
2020-11-27 21:36                       ` Andrew Lunn
2020-12-02  0:28                         ` Vladimir Oltean
2020-12-02  0:54                           ` Jakub Kicinski
2020-11-27 22:03                       ` Jakub Kicinski
2020-11-27 21:32                     ` Andrew Lunn
2020-11-27 22:14                       ` Jakub Kicinski
2020-11-27 22:46                         ` Andrew Lunn
2020-11-25 19:37 ` [PATCH net-next v2 3/3] dt-bindings: net: dsa: add bindings for xrs700x switches George McCollister
2020-11-26  1:30   ` Florian Fainelli

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=20201126142812.4jr3kskwqf76cx5d@skbuf \
    --to=olteanv@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=f.fainelli@gmail.com \
    --cc=george.mccollister@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=vivien.didelot@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.