mlx5_en: use read sequence for gettimex64
authorVadim Fedorenko <vadfed@meta.com>
Mon, 14 Oct 2024 17:01:03 +0000 (10:01 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 5 Nov 2024 23:47:14 +0000 (15:47 -0800)
The gettimex64() doesn't modify values in timecounter, that's why there
is no need to update sequence counter. Reduce the contention on sequence
lock for multi-thread PHC reading use-case.

Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
Reviewed-by: Rahul Rameshbabu <rrameshbabu@nvidia.com>
Acked-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/20241014170103.2473580-1-vadfed@meta.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c

index b306ae79bf97a6b873af042ba80e8844d83263c5..4822d01123b45d575eca40f2746b4e54408bc680 100644 (file)
@@ -402,9 +402,7 @@ static int mlx5_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
                             struct ptp_system_timestamp *sts)
 {
        struct mlx5_clock *clock = container_of(ptp, struct mlx5_clock, ptp_info);
-       struct mlx5_timer *timer = &clock->timer;
        struct mlx5_core_dev *mdev;
-       unsigned long flags;
        u64 cycles, ns;
 
        mdev = container_of(clock, struct mlx5_core_dev, clock);
@@ -413,10 +411,8 @@ static int mlx5_ptp_gettimex(struct ptp_clock_info *ptp, struct timespec64 *ts,
                goto out;
        }
 
-       write_seqlock_irqsave(&clock->lock, flags);
        cycles = mlx5_read_time(mdev, sts, false);
-       ns = timecounter_cyc2time(&timer->tc, cycles);
-       write_sequnlock_irqrestore(&clock->lock, flags);
+       ns = mlx5_timecounter_cyc2time(clock, cycles);
        *ts = ns_to_timespec64(ns);
 out:
        return 0;