Re: [Intel-wired-lan] [PATCH v1 1/1] igc: enable multiple TXSTMP registers reporting TX timestamp.

From: Paul Menzel
Date: Mon Apr 24 2023 - 15:08:45 EST


[Resent with corrected address linux-kernel@ from original mail]

Am 24.04.23 um 21:01 schrieb Paul Menzel:
Dear  Xiao Yan,


Am 23.04.23 um 09:53 schrieb gongxiao-intel:

Your name is incorrectly configured. Please do (please correct the spelling):

    $ git config --global user.name "Xiao Yan Gong"
    $ git commit --amend -s --author="Xiao Yan Gong <xiaoyan.gong@xxxxxxxxx>"

Also, please remove the dot/period from the end of the commit message summary.

The HW TX timestamps created by the NIC via socket options can be
requested using the current network timestamps generation capability of
SOF_TIMESTAMPING_TX_HARDWARE. The most common users of this socket flag
is PTP, however other packet applications that require tx timestamps might
also ask for it.

The problem is that, when there is a lot of traffic, there is a high chance
that the timestamps for a PTP packet will be lost if both PTP and Non-PTP

non-PTP

packets use the same SOF_TIMESTAMPING_TX_HARDWARE causing the tx timeout.

Is Linux logging this? If so, please paste such a message.

The root cause of this problem is that igc only use one TXSTMP register to

use*s*

report TX timestamp. Such implementation intensify the race of TX timestamp

intensif*ies*

query from multiple sockets.

However, Intel i225/i226 controller has 4 TXSTMP registers. This patch fully
utilizes 4 TXSTMP registers to reduce the race of TX timestamp query.

This patch dedicates TXSTMP register 0 to all PTP packets. In most case, only
one PTP sync process will run on a network port. So, one TXSTMP register is
enough for PTP stream.

For TXSTMP register 1 - 3, they are allocated to sockets round robin. And each

register*s*

socket can only occupy one register at a time. So, at least 3 sockets can requiest

request

TX timestamp simultaneously.

Please add Signed-off-by line.

How did you test your patch?

---
  drivers/net/ethernet/intel/igc/igc.h         | 24 +++--
  drivers/net/ethernet/intel/igc/igc_base.h    |  2 +-
  drivers/net/ethernet/intel/igc/igc_defines.h |  2 +-
  drivers/net/ethernet/intel/igc/igc_main.c    | 55 +++++++++--
  drivers/net/ethernet/intel/igc/igc_ptp.c     | 97 +++++++++++++-------
  drivers/net/ethernet/intel/igc/igc_regs.h    |  4 +-
  6 files changed, 129 insertions(+), 55 deletions(-)

[…]


Kind regards,

Paul