All of lore.kernel.org
 help / color / mirror / Atom feed
From: Grygorii Strashko <grygorii.strashko@ti.com>
To: Kurt Kanzenbach <kurt@linutronix.de>,
	Russell King - ARM Linux admin <linux@armlinux.org.uk>
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, 5 Aug 2020 15:59:46 +0300	[thread overview]
Message-ID: <4d9aeb50-e8df-369a-7e3d-87ff9ba86079@ti.com> (raw)
In-Reply-To: <875z9x1lvn.fsf@kurt>



On 05/08/2020 12:29, Kurt Kanzenbach wrote:
> 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);

Sry, it will not be so "easily", because there is ptp_classify_raw() inside.

So every such case, will require rework and adding magic like this

	__skb_push(skb, ETH_HLEN);

	type = ptp_classify_raw(skb);

	__skb_pull(skb, ETH_HLEN);

in Hot path.

>>
>>> 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?

I really do not want touch netcp, sry.
There are other internal code based on this even if there is only one hooks in LKML now.
+ my comment above.

I'll try use skb_reset_mac_header(skb);
As spectrum does:
  	skb_reset_mac_header(skb);
	mlxsw_sp1_ptp_got_packet(mlxsw_sp, skb, local_port, true);

if doesn't help PATCH 6 is to drop.

-- 
Best regards,
grygorii

  reply	other threads:[~2020-08-06 11:05 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
2020-08-05 12:59                     ` Grygorii Strashko [this message]
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=4d9aeb50-e8df-369a-7e3d-87ff9ba86079@ti.com \
    --to=grygorii.strashko@ti.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=f.fainelli@gmail.com \
    --cc=hkallweit1@gmail.com \
    --cc=idosch@mellanox.com \
    --cc=ivan.khoronzhuk@linaro.org \
    --cc=jiri@mellanox.com \
    --cc=kuba@kernel.org \
    --cc=kurt@linutronix.de \
    --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.