From: Kurt Kanzenbach <kurt@linutronix.de>
To: Russell King - ARM Linux admin <linux@armlinux.org.uk>,
Grygorii Strashko <grygorii.strashko@ti.com>
Cc: Petr Machata <petrm@mellanox.com>,
Richard Cochran <richardcochran@gmail.com>,
Andrew Lunn <andrew@lunn.ch>,
Vivien Didelot <vivien.didelot@gmail.com>,
Florian Fainelli <f.fainelli@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Jiri Pirko <jiri@mellanox.com>,
Ido Schimmel <idosch@mellanox.com>,
Heiner Kallweit <hkallweit1@gmail.com>,
Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>,
Samuel Zou <zou_wei@huawei.com>,
netdev@vger.kernel.org
Subject: Re: [PATCH v3 1/9] ptp: Add generic ptp v2 header parsing function
Date: Wed, 05 Aug 2020 11:29:32 +0200 [thread overview]
Message-ID: <875z9x1lvn.fsf@kurt> (raw)
In-Reply-To: <20200804231429.GW1551@shell.armlinux.org.uk>
[-- Attachment #1: Type: text/plain, Size: 4693 bytes --]
On Wed Aug 05 2020, Russell King - ARM Linux admin wrote:
> On Wed, Aug 05, 2020 at 01:04:31AM +0300, Grygorii Strashko wrote:
>> On 05/08/2020 00:44, Russell King - ARM Linux admin wrote:
>> > On Wed, Aug 05, 2020 at 12:34:47AM +0300, Grygorii Strashko wrote:
>> > > On 05/08/2020 00:07, Russell King - ARM Linux admin wrote:
>> > > > On Tue, Aug 04, 2020 at 11:56:12PM +0300, Grygorii Strashko wrote:
>> > > > >
>> > > > >
>> > > > > On 31/07/2020 13:06, Kurt Kanzenbach wrote:
>> > > > > > On Thu Jul 30 2020, Petr Machata wrote:
>> > > > > > > Kurt Kanzenbach <kurt@linutronix.de> writes:
>> > > > > > >
>> > > > > > > > @@ -107,6 +107,37 @@ unsigned int ptp_classify_raw(const struct sk_buff *skb)
>> > > > > > > > }
>> > > > > > > > EXPORT_SYMBOL_GPL(ptp_classify_raw);
>> > > > > > > > +struct ptp_header *ptp_parse_header(struct sk_buff *skb, unsigned int type)
>> > > > > > > > +{
>> > > > > > > > + u8 *data = skb_mac_header(skb);
>> > > > > > > > + u8 *ptr = data;
>> > > > > > >
>> > > > > > > One of the "data" and "ptr" variables is superfluous.
>> > > > > >
>> > > > > > Yeah. Can be shortened to u8 *ptr = skb_mac_header(skb);
>> > > > >
>> > > > > Actually usage of skb_mac_header(skb) breaks CPTS RX time-stamping on
>> > > > > am571x platform PATCH 6.
>> > > > >
>> > > > > The CPSW RX timestamp requested after full packet put in SKB, but
>> > > > > before calling eth_type_trans().
>> > > > >
>> > > > > So, skb->data pints on Eth header, but skb_mac_header() return garbage.
>> > > > >
>> > > > > Below diff fixes it for me.
>> > > >
>> > > > However, that's likely to break everyone else.
>> > > >
>> > > > For example, anyone calling this from the mii_timestamper rxtstamp()
>> > > > method, the skb will have been classified with the MAC header pushed
>> > > > and restored, so skb->data points at the network header.
>> > > >
>> > > > Your change means that ptp_parse_header() expects the MAC header to
>> > > > also be pushed.
>> > > >
>> > > > Is it possible to adjust CPTS?
>> > > >
>> > > > Looking at:
>> > > > drivers/net/ethernet/ti/cpsw.c... yes.
>> > > > drivers/net/ethernet/ti/cpsw_new.c... yes.
>> > > > drivers/net/ethernet/ti/netcp_core.c... unclear.
>> > > >
>> > > > If not, maybe cpts should remain unconverted - I don't see any reason
>> > > > to provide a generic function for one user.
>> > > >
>> > >
>> > > Could it be an option to pass "u8 *ptr" instead of "const struct sk_buff *skb" as
>> > > input parameter to ptp_parse_header()?
>> >
>> > It needs to read from the buffer, and in order to do that, it needs to
>> > validate that the buffer contains sufficient data. So, at minimum it
>> > needs to be a pointer and size of valid data.
>> >
>> > I was thinking about suggesting that as a core function, with a wrapper
>> > for the existing interface.
>> >
>>
>> Then length can be added.
>
> Actually, it needs more than that, because skb->data..skb->len already
> may contain the eth header or may not.
>
>> Otherwise not only CPTS can't benefit from this new API, but also
>> drivers like oki-semi/pch_gbe/pch_gbe_main.c -> pch_ptp_match()
>
> Again, this looks like it can be solved easily by swapping the position
> of these two calls:
>
> pch_rx_timestamp(adapter, skb);
>
> skb->protocol = eth_type_trans(skb, netdev);
>
>> or have to two have two APIs (name?).
>>
>> ptp_parse_header1(struct sk_buff *skb, unsigned int type)
>> {
>> u8 *data = skb_mac_header(skb);
>>
>> ptp_parse_header2(struct sk_buff *skb, unsigned int type)
>> {
>> u8 *data = skb->data;
>>
>> everything else is the same.
>
> Actually, I really don't think we want 99% of users doing:
>
> hdr = ptp_parse_header(skb_mac_header(skb), skb->data, skb->len, type)
>
> or
>
> hdr = ptp_parse_header(skb_mac_header(skb), skb->data + skb->len, type);
>
> because that is what it will take, and this is starting to look
> really very horrid.
True.
>
> So, I repeat my question again: can netcp_core.c be adjusted to
> ensure that the skb mac header field is correctly set by calling
> eth_type_trans() prior to calling the rx hooks? The other two
> cpts cases look easy to change, and the oki-semi also looks the
> same.
I think it's possible to adjust the netcp core. So, the time stamping is
done via
gbe_rxhook() -> gbe_rxtstamp() -> cpts_rx_timestamp()
The hooks are called in netcp_process_one_rx_packet(). So, moving
eth_type_trans() before executing the hooks should work. Only one hook
is registered.
What do you think about it?
Thanks,
Kurt
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
next prev parent reply other threads:[~2020-08-05 9:30 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-30 8:00 [PATCH v3 0/9] ptp: Add generic helper functions Kurt Kanzenbach
2020-07-30 8:00 ` [PATCH v3 1/9] ptp: Add generic ptp v2 header parsing function Kurt Kanzenbach
2020-07-30 10:15 ` Petr Machata
2020-07-31 10:06 ` Kurt Kanzenbach
2020-08-04 20:56 ` Grygorii Strashko
2020-08-04 21:07 ` Russell King - ARM Linux admin
2020-08-04 21:34 ` Grygorii Strashko
2020-08-04 21:44 ` Russell King - ARM Linux admin
2020-08-04 22:04 ` Grygorii Strashko
2020-08-04 23:14 ` Russell King - ARM Linux admin
2020-08-05 9:29 ` Kurt Kanzenbach [this message]
2020-08-05 12:59 ` Grygorii Strashko
2020-08-05 13:57 ` Kurt Kanzenbach
2020-08-05 19:15 ` Grygorii Strashko
2020-08-06 7:56 ` Kurt Kanzenbach
2020-08-05 15:25 ` Richard Cochran
2020-08-02 15:13 ` Richard Cochran
2020-08-02 20:20 ` Florian Fainelli
2020-07-30 8:00 ` [PATCH v3 2/9] ptp: Add generic ptp message type function Kurt Kanzenbach
2020-08-02 15:18 ` Richard Cochran
2020-08-02 20:20 ` Florian Fainelli
2020-07-30 8:00 ` [PATCH v3 3/9] net: dsa: mv88e6xxx: Use generic helper function Kurt Kanzenbach
2020-08-02 15:18 ` Richard Cochran
2020-08-02 20:21 ` Florian Fainelli
2020-07-30 8:00 ` [PATCH v3 4/9] mlxsw: spectrum_ptp: " Kurt Kanzenbach
2020-07-30 10:20 ` Petr Machata
2020-08-02 20:21 ` Florian Fainelli
2020-07-30 8:00 ` [PATCH v3 5/9] ethernet: ti: am65-cpts: " Kurt Kanzenbach
2020-07-30 9:19 ` Grygorii Strashko
2020-07-30 9:36 ` Kurt Kanzenbach
2020-07-30 10:24 ` Arnd Bergmann
2020-07-31 11:48 ` Kurt Kanzenbach
2020-07-31 12:55 ` Grygorii Strashko
2020-07-31 13:10 ` Kurt Kanzenbach
2020-07-30 8:00 ` [PATCH v3 6/9] ethernet: ti: cpts: " Kurt Kanzenbach
2020-08-02 20:22 ` Florian Fainelli
2020-08-05 18:52 ` Grygorii Strashko
2020-07-30 8:00 ` [PATCH v3 7/9] net: phy: dp83640: " Kurt Kanzenbach
2020-08-02 20:23 ` Florian Fainelli
2020-08-02 22:54 ` Richard Cochran
2020-07-30 8:00 ` [PATCH v3 8/9] ptp: ptp_ines: " Kurt Kanzenbach
2020-08-02 20:23 ` Florian Fainelli
2020-07-30 8:00 ` [PATCH v3 9/9] ptp: Remove unused macro Kurt Kanzenbach
2020-08-02 20:24 ` 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=875z9x1lvn.fsf@kurt \
--to=kurt@linutronix.de \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=grygorii.strashko@ti.com \
--cc=hkallweit1@gmail.com \
--cc=idosch@mellanox.com \
--cc=ivan.khoronzhuk@linaro.org \
--cc=jiri@mellanox.com \
--cc=kuba@kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=petrm@mellanox.com \
--cc=richardcochran@gmail.com \
--cc=vivien.didelot@gmail.com \
--cc=zou_wei@huawei.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.