habanalabs: unify hwmon resources clean up
authorDani Liberman <dliberman@habana.ai>
Mon, 27 Jun 2022 19:06:51 +0000 (22:06 +0300)
committerOded Gabbay <ogabbay@kernel.org>
Sun, 18 Sep 2022 10:29:51 +0000 (13:29 +0300)
Since hwmon fini code is common for all asics, unified it to common
function.

Signed-off-by: Dani Liberman <dliberman@habana.ai>
Reviewed-by: Oded Gabbay <ogabbay@kernel.org>
Signed-off-by: Oded Gabbay <ogabbay@kernel.org>
drivers/misc/habanalabs/common/habanalabs.h
drivers/misc/habanalabs/common/hwmon.c
drivers/misc/habanalabs/gaudi/gaudi.c
drivers/misc/habanalabs/gaudi2/gaudi2.c
drivers/misc/habanalabs/goya/goya.c

index ae3f583..f495a4b 100644 (file)
@@ -3529,6 +3529,7 @@ void hl_sysfs_fini(struct hl_device *hdev);
 
 int hl_hwmon_init(struct hl_device *hdev);
 void hl_hwmon_fini(struct hl_device *hdev);
+void hl_hwmon_release_resources(struct hl_device *hdev);
 
 int hl_cb_create(struct hl_device *hdev, struct hl_mem_mgr *mmg,
                        struct hl_ctx *ctx, u32 cb_size, bool internal_cb,
index 57f5d2c..8c262ae 100644 (file)
@@ -910,3 +910,24 @@ void hl_hwmon_fini(struct hl_device *hdev)
 
        hwmon_device_unregister(hdev->hwmon_dev);
 }
+
+void hl_hwmon_release_resources(struct hl_device *hdev)
+{
+       const struct hwmon_channel_info **channel_info_arr;
+       int i = 0;
+
+       if (!hdev->hl_chip_info->info)
+               return;
+
+       channel_info_arr = hdev->hl_chip_info->info;
+
+       while (channel_info_arr[i]) {
+               kfree(channel_info_arr[i]->config);
+               kfree(channel_info_arr[i]);
+               i++;
+       }
+
+       kfree(channel_info_arr);
+
+       hdev->hl_chip_info->info = NULL;
+}
index 7f52935..9602069 100644 (file)
@@ -1682,23 +1682,7 @@ disable_pci_access:
 
 static void gaudi_late_fini(struct hl_device *hdev)
 {
-       const struct hwmon_channel_info **channel_info_arr;
-       int i = 0;
-
-       if (!hdev->hl_chip_info->info)
-               return;
-
-       channel_info_arr = hdev->hl_chip_info->info;
-
-       while (channel_info_arr[i]) {
-               kfree(channel_info_arr[i]->config);
-               kfree(channel_info_arr[i]);
-               i++;
-       }
-
-       kfree(channel_info_arr);
-
-       hdev->hl_chip_info->info = NULL;
+       hl_hwmon_release_resources(hdev);
 }
 
 static int gaudi_alloc_cpu_accessible_dma_mem(struct hl_device *hdev)
index 6764199..fa806e5 100644 (file)
@@ -2711,23 +2711,7 @@ disable_pci_access:
 
 static void gaudi2_late_fini(struct hl_device *hdev)
 {
-       const struct hwmon_channel_info **channel_info_arr;
-       int i = 0;
-
-       if (!hdev->hl_chip_info->info)
-               return;
-
-       channel_info_arr = hdev->hl_chip_info->info;
-
-       while (channel_info_arr[i]) {
-               kfree(channel_info_arr[i]->config);
-               kfree(channel_info_arr[i]);
-               i++;
-       }
-
-       kfree(channel_info_arr);
-
-       hdev->hl_chip_info->info = NULL;
+       hl_hwmon_release_resources(hdev);
 }
 
 static void gaudi2_user_mapped_dec_init(struct gaudi2_device *gaudi2, u32 start_idx)
index 91429d6..87465a2 100644 (file)
@@ -916,26 +916,11 @@ int goya_late_init(struct hl_device *hdev)
  */
 void goya_late_fini(struct hl_device *hdev)
 {
-       const struct hwmon_channel_info **channel_info_arr;
        struct goya_device *goya = hdev->asic_specific;
-       int i = 0;
 
        cancel_delayed_work_sync(&goya->goya_work->work_freq);
 
-       if (!hdev->hl_chip_info->info)
-               return;
-
-       channel_info_arr = hdev->hl_chip_info->info;
-
-       while (channel_info_arr[i]) {
-               kfree(channel_info_arr[i]->config);
-               kfree(channel_info_arr[i]);
-               i++;
-       }
-
-       kfree(channel_info_arr);
-
-       hdev->hl_chip_info->info = NULL;
+       hl_hwmon_release_resources(hdev);
 }
 
 static void goya_set_pci_memory_regions(struct hl_device *hdev)