sfc: fix timestamp reconstruction at 16-bit rollover points
authorAlex Maftei (amaftei) <amaftei@solarflare.com>
Wed, 26 Feb 2020 17:33:19 +0000 (17:33 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 21 Mar 2020 07:11:56 +0000 (08:11 +0100)
commit99746e92fa4c6f45e7f3eec4f4290674073059fc
tree2598f2dfec1e95dbe3f1bf428cb764fd87e4307d
parente2b8b042c98b3db81ac03c62656ee73866e62ea9
sfc: fix timestamp reconstruction at 16-bit rollover points

[ Upstream commit 23797b98909f34b75fd130369bde86f760db69d0 ]

We can't just use the top bits of the last sync event as they could be
off-by-one every 65,536 seconds, giving an error in reconstruction of
65,536 seconds.

This patch uses the difference in the bottom 16 bits (mod 2^16) to
calculate an offset that needs to be applied to the last sync event to
get to the current time.

Signed-off-by: Alexandru-Mihai Maftei <amaftei@solarflare.com>
Acked-by: Martin Habets <mhabets@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/sfc/ptp.c