]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
habanalabs: modify the return values of hl_read/write routines
authorMoti Haimovski <mhaimovski@habana.ai>
Thu, 23 Jan 2020 16:03:04 +0000 (18:03 +0200)
committerOded Gabbay <oded.gabbay@gmail.com>
Tue, 24 Mar 2020 08:54:16 +0000 (10:54 +0200)
The hl read and write routines implement the hwmon_ops read and write
interface routines respectively.
These routines are expected to return a completion status when called,
which was not the case until this commit.
This commit modifies these routines to return 0 upon success and a
negative error value upon failure.

Signed-off-by: Moti Haimovski <mhaimovski@habana.ai>
Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
drivers/misc/habanalabs/habanalabs.h
drivers/misc/habanalabs/hwmon.c

index 4de12d3ff8360a5e886286d65328dc5b423b44c7..9472da3ef84788ccac2d690734703f0b77f86b4e 100644 (file)
@@ -1609,13 +1609,18 @@ int hl_pci_set_dma_mask(struct hl_device *hdev, u8 dma_mask);
 
 long hl_get_frequency(struct hl_device *hdev, u32 pll_index, bool curr);
 void hl_set_frequency(struct hl_device *hdev, u32 pll_index, u64 freq);
-long hl_get_temperature(struct hl_device *hdev, int sensor_index, u32 attr);
+int hl_get_temperature(struct hl_device *hdev,
+                      int sensor_index, u32 attr, long *value);
 int hl_set_temperature(struct hl_device *hdev,
-                       int sensor_index, u32 attr, long value);
-long hl_get_voltage(struct hl_device *hdev, int sensor_index, u32 attr);
-long hl_get_current(struct hl_device *hdev, int sensor_index, u32 attr);
-long hl_get_fan_speed(struct hl_device *hdev, int sensor_index, u32 attr);
-long hl_get_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr);
+                      int sensor_index, u32 attr, long value);
+int hl_get_voltage(struct hl_device *hdev,
+                  int sensor_index, u32 attr, long *value);
+int hl_get_current(struct hl_device *hdev,
+                  int sensor_index, u32 attr, long *value);
+int hl_get_fan_speed(struct hl_device *hdev,
+                    int sensor_index, u32 attr, long *value);
+int hl_get_pwm_info(struct hl_device *hdev,
+                   int sensor_index, u32 attr, long *value);
 void hl_set_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr,
                        long value);
 u64 hl_get_max_power(struct hl_device *hdev);
index 70088fdb0a5bd6cbef57ad436749fc081d22b67f..3539190b1caaeccb96f72b5879fca24ec8a7bfe1 100644 (file)
@@ -113,6 +113,7 @@ static int hl_read(struct device *dev, enum hwmon_sensor_types type,
                        u32 attr, int channel, long *val)
 {
        struct hl_device *hdev = dev_get_drvdata(dev);
+       int rc;
 
        if (hl_device_disabled_or_in_reset(hdev))
                return -ENODEV;
@@ -131,7 +132,7 @@ static int hl_read(struct device *dev, enum hwmon_sensor_types type,
                        return -EINVAL;
                }
 
-               *val = hl_get_temperature(hdev, channel, attr);
+               rc = hl_get_temperature(hdev, channel, attr, val);
                break;
        case hwmon_in:
                switch (attr) {
@@ -143,7 +144,7 @@ static int hl_read(struct device *dev, enum hwmon_sensor_types type,
                        return -EINVAL;
                }
 
-               *val = hl_get_voltage(hdev, channel, attr);
+               rc = hl_get_voltage(hdev, channel, attr, val);
                break;
        case hwmon_curr:
                switch (attr) {
@@ -155,7 +156,7 @@ static int hl_read(struct device *dev, enum hwmon_sensor_types type,
                        return -EINVAL;
                }
 
-               *val = hl_get_current(hdev, channel, attr);
+               rc = hl_get_current(hdev, channel, attr, val);
                break;
        case hwmon_fan:
                switch (attr) {
@@ -166,7 +167,7 @@ static int hl_read(struct device *dev, enum hwmon_sensor_types type,
                default:
                        return -EINVAL;
                }
-               *val = hl_get_fan_speed(hdev, channel, attr);
+               rc = hl_get_fan_speed(hdev, channel, attr, val);
                break;
        case hwmon_pwm:
                switch (attr) {
@@ -176,12 +177,12 @@ static int hl_read(struct device *dev, enum hwmon_sensor_types type,
                default:
                        return -EINVAL;
                }
-               *val = hl_get_pwm_info(hdev, channel, attr);
+               rc = hl_get_pwm_info(hdev, channel, attr, val);
                break;
        default:
                return -EINVAL;
        }
-       return 0;
+       return rc;
 }
 
 static int hl_write(struct device *dev, enum hwmon_sensor_types type,
@@ -277,10 +278,10 @@ static const struct hwmon_ops hl_hwmon_ops = {
        .write = hl_write
 };
 
-long hl_get_temperature(struct hl_device *hdev, int sensor_index, u32 attr)
+int hl_get_temperature(struct hl_device *hdev,
+                       int sensor_index, u32 attr, long *value)
 {
        struct armcp_packet pkt;
-       long result;
        int rc;
 
        memset(&pkt, 0, sizeof(pkt));
@@ -291,16 +292,16 @@ long hl_get_temperature(struct hl_device *hdev, int sensor_index, u32 attr)
        pkt.type = __cpu_to_le16(attr);
 
        rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt),
-                       SENSORS_PKT_TIMEOUT, &result);
+                       SENSORS_PKT_TIMEOUT, value);
 
        if (rc) {
                dev_err(hdev->dev,
                        "Failed to get temperature from sensor %d, error %d\n",
                        sensor_index, rc);
-               result = 0;
+               *value = 0;
        }
 
-       return result;
+       return rc;
 }
 
 int hl_set_temperature(struct hl_device *hdev,
@@ -328,10 +329,10 @@ int hl_set_temperature(struct hl_device *hdev,
        return rc;
 }
 
-long hl_get_voltage(struct hl_device *hdev, int sensor_index, u32 attr)
+int hl_get_voltage(struct hl_device *hdev,
+                       int sensor_index, u32 attr, long *value)
 {
        struct armcp_packet pkt;
-       long result;
        int rc;
 
        memset(&pkt, 0, sizeof(pkt));
@@ -342,22 +343,22 @@ long hl_get_voltage(struct hl_device *hdev, int sensor_index, u32 attr)
        pkt.type = __cpu_to_le16(attr);
 
        rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt),
-                                       SENSORS_PKT_TIMEOUT, &result);
+                                       SENSORS_PKT_TIMEOUT, value);
 
        if (rc) {
                dev_err(hdev->dev,
                        "Failed to get voltage from sensor %d, error %d\n",
                        sensor_index, rc);
-               result = 0;
+               *value = 0;
        }
 
-       return result;
+       return rc;
 }
 
-long hl_get_current(struct hl_device *hdev, int sensor_index, u32 attr)
+int hl_get_current(struct hl_device *hdev,
+                       int sensor_index, u32 attr, long *value)
 {
        struct armcp_packet pkt;
-       long result;
        int rc;
 
        memset(&pkt, 0, sizeof(pkt));
@@ -368,22 +369,22 @@ long hl_get_current(struct hl_device *hdev, int sensor_index, u32 attr)
        pkt.type = __cpu_to_le16(attr);
 
        rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt),
-                                       SENSORS_PKT_TIMEOUT, &result);
+                                       SENSORS_PKT_TIMEOUT, value);
 
        if (rc) {
                dev_err(hdev->dev,
                        "Failed to get current from sensor %d, error %d\n",
                        sensor_index, rc);
-               result = 0;
+               *value = 0;
        }
 
-       return result;
+       return rc;
 }
 
-long hl_get_fan_speed(struct hl_device *hdev, int sensor_index, u32 attr)
+int hl_get_fan_speed(struct hl_device *hdev,
+                       int sensor_index, u32 attr, long *value)
 {
        struct armcp_packet pkt;
-       long result;
        int rc;
 
        memset(&pkt, 0, sizeof(pkt));
@@ -394,22 +395,22 @@ long hl_get_fan_speed(struct hl_device *hdev, int sensor_index, u32 attr)
        pkt.type = __cpu_to_le16(attr);
 
        rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt),
-                                       SENSORS_PKT_TIMEOUT, &result);
+                                       SENSORS_PKT_TIMEOUT, value);
 
        if (rc) {
                dev_err(hdev->dev,
                        "Failed to get fan speed from sensor %d, error %d\n",
                        sensor_index, rc);
-               result = 0;
+               *value = 0;
        }
 
-       return result;
+       return rc;
 }
 
-long hl_get_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr)
+int hl_get_pwm_info(struct hl_device *hdev,
+                       int sensor_index, u32 attr, long *value)
 {
        struct armcp_packet pkt;
-       long result;
        int rc;
 
        memset(&pkt, 0, sizeof(pkt));
@@ -420,16 +421,16 @@ long hl_get_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr)
        pkt.type = __cpu_to_le16(attr);
 
        rc = hdev->asic_funcs->send_cpu_message(hdev, (u32 *) &pkt, sizeof(pkt),
-                                       SENSORS_PKT_TIMEOUT, &result);
+                                       SENSORS_PKT_TIMEOUT, value);
 
        if (rc) {
                dev_err(hdev->dev,
                        "Failed to get pwm info from sensor %d, error %d\n",
                        sensor_index, rc);
-               result = 0;
+               *value = 0;
        }
 
-       return result;
+       return rc;
 }
 
 void hl_set_pwm_info(struct hl_device *hdev, int sensor_index, u32 attr,