]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net/mlx5: Refactor PTP clock devcom pairing
authorMark Bloch <mbloch@nvidia.com>
Thu, 23 Oct 2025 09:16:58 +0000 (12:16 +0300)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 28 Oct 2025 10:11:27 +0000 (11:11 +0100)
Refactor PTP clock device component pairing to use the clock identity
buffer instead of casting it to a u64 key. This change leverages the new
software system image GUID infrastructure.

Changes include:
- Pass identity buffer to mlx5_shared_clock_register().
- Use memcpy for identity buffer in devcom matching attributes.
- Remove intermediate u64 key conversion.
- Add BUILD_BUG_ON to ensure identity size fits in match key.

Signed-off-by: Mark Bloch <mbloch@nvidia.com>
Reviewed-by: Shay Drori <shayd@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
Link: https://patch.msgid.link/1761211020-925651-4-git-send-email-tariqt@nvidia.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c

index 29e7fa09c32c8cd04f9225dc85dcaa11d1fec110..0ba0ef8bae4218471955a9532af5a85df1629d2d 100644 (file)
@@ -1432,15 +1432,17 @@ static int mlx5_clock_alloc(struct mlx5_core_dev *mdev, bool shared)
        return 0;
 }
 
-static void mlx5_shared_clock_register(struct mlx5_core_dev *mdev, u64 key)
+static void mlx5_shared_clock_register(struct mlx5_core_dev *mdev,
+                                      u8 identity[MLX5_RT_CLOCK_IDENTITY_SIZE])
 {
        struct mlx5_core_dev *peer_dev, *next = NULL;
-       struct mlx5_devcom_match_attr attr = {
-               .key.val = key,
-       };
+       struct mlx5_devcom_match_attr attr = {};
        struct mlx5_devcom_comp_dev *compd;
        struct mlx5_devcom_comp_dev *pos;
 
+       BUILD_BUG_ON(MLX5_RT_CLOCK_IDENTITY_SIZE > MLX5_DEVCOM_MATCH_KEY_MAX);
+       memcpy(attr.key.buf, identity, MLX5_RT_CLOCK_IDENTITY_SIZE);
+
        compd = mlx5_devcom_register_component(mdev->priv.devc,
                                               MLX5_DEVCOM_SHARED_CLOCK,
                                               &attr, NULL, mdev);
@@ -1594,7 +1596,6 @@ int mlx5_init_clock(struct mlx5_core_dev *mdev)
 {
        u8 identity[MLX5_RT_CLOCK_IDENTITY_SIZE];
        struct mlx5_clock_dev_state *clock_state;
-       u64 key;
        int err;
 
        if (!MLX5_CAP_GEN(mdev, device_frequency_khz)) {
@@ -1610,12 +1611,10 @@ int mlx5_init_clock(struct mlx5_core_dev *mdev)
        mdev->clock_state = clock_state;
 
        if (MLX5_CAP_MCAM_REG3(mdev, mrtcq) && mlx5_real_time_mode(mdev)) {
-               if (mlx5_clock_identity_get(mdev, identity)) {
+               if (mlx5_clock_identity_get(mdev, identity))
                        mlx5_core_warn(mdev, "failed to get rt clock identity, create ptp dev per function\n");
-               } else {
-                       memcpy(&key, &identity, sizeof(key));
-                       mlx5_shared_clock_register(mdev, key);
-               }
+               else
+                       mlx5_shared_clock_register(mdev, identity);
        }
 
        if (!mdev->clock) {