Skip to content

Commit

Permalink
net/mlx5: Register a unique thermal zone per device
Browse files Browse the repository at this point in the history
Prior to this patch only one "mlx5" thermal zone could have been
registered regardless of the number of individual mlx5 devices in the
system.

To fix this setup a unique name per device to register its own thermal
zone.

In order to not register a thermal zone for a virtual device (VF/SF) add
a check for PF device type.

The new name is a concatenation between "mlx5_" and "<PCI_DEV_BDF>", which
will also help associating a thermal zone with its PCI device.

$ lspci | grep ConnectX
00:04.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
00:05.0 Ethernet controller: Mellanox Technologies MT2892 Family [ConnectX-6 Dx]

$ cat /sys/devices/virtual/thermal/thermal_zone0/type
mlx5_0000:00:04.0
$ cat /sys/devices/virtual/thermal/thermal_zone1/type
mlx5_0000:00:05.0

Fixes: c1fef61 ("net/mlx5: Implement thermal zone")
CC: Sandipan Patra <[email protected]>
Signed-off-by: Saeed Mahameed <[email protected]>
  • Loading branch information
Saeed Mahameed committed Jul 5, 2023
1 parent 2e2d196 commit 631079e
Showing 1 changed file with 12 additions and 7 deletions.
19 changes: 12 additions & 7 deletions drivers/net/ethernet/mellanox/mlx5/core/thermal.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,19 @@ static struct thermal_zone_device_ops mlx5_thermal_ops = {

int mlx5_thermal_init(struct mlx5_core_dev *mdev)
{
char data[THERMAL_NAME_LENGTH];
struct mlx5_thermal *thermal;
struct thermal_zone_device *tzd;
const char *data = "mlx5";
int err;

tzd = thermal_zone_get_zone_by_name(data);
if (!IS_ERR(tzd))
if (!mlx5_core_is_pf(mdev) && !mlx5_core_is_ecpf(mdev))
return 0;

err = snprintf(data, sizeof(data), "mlx5_%s", dev_name(mdev->device));
if (err < 0 || err >= sizeof(data)) {
mlx5_core_err(mdev, "Failed to setup thermal zone name, %d\n", err);
return -EINVAL;
}

thermal = kzalloc(sizeof(*thermal), GFP_KERNEL);
if (!thermal)
return -ENOMEM;
Expand All @@ -89,10 +94,10 @@ int mlx5_thermal_init(struct mlx5_core_dev *mdev)
&mlx5_thermal_ops,
NULL, 0, MLX5_THERMAL_POLL_INT_MSEC);
if (IS_ERR(thermal->tzdev)) {
dev_err(mdev->device, "Failed to register thermal zone device (%s) %ld\n",
data, PTR_ERR(thermal->tzdev));
err = PTR_ERR(thermal->tzdev);
mlx5_core_err(mdev, "Failed to register thermal zone device (%s) %d\n", data, err);
kfree(thermal);
return -EINVAL;
return err;
}

mdev->thermal = thermal;
Expand Down

0 comments on commit 631079e

Please sign in to comment.