| From b0ba9716c56b042142bcfcdbd49ac9eeec037b11 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Fri, 31 Jan 2020 15:45:24 +0200 |
| Subject: iwlwifi: mvm: Fix thermal zone registration |
| |
| From: Andrei Otcheretianski <andrei.otcheretianski@intel.com> |
| |
| [ Upstream commit baa6cf8450b72dcab11f37c47efce7c5b9b8ad0f ] |
| |
| Use a unique name when registering a thermal zone. Otherwise, with |
| multiple NICS, we hit the following warning during the unregistration. |
| |
| WARNING: CPU: 2 PID: 3525 at fs/sysfs/group.c:255 |
| RIP: 0010:sysfs_remove_group+0x80/0x90 |
| Call Trace: |
| dpm_sysfs_remove+0x57/0x60 |
| device_del+0x5a/0x350 |
| ? sscanf+0x4e/0x70 |
| device_unregister+0x1a/0x60 |
| hwmon_device_unregister+0x4a/0xa0 |
| thermal_remove_hwmon_sysfs+0x175/0x1d0 |
| thermal_zone_device_unregister+0x188/0x1e0 |
| iwl_mvm_thermal_exit+0xe7/0x100 [iwlmvm] |
| iwl_op_mode_mvm_stop+0x27/0x180 [iwlmvm] |
| _iwl_op_mode_stop.isra.3+0x2b/0x50 [iwlwifi] |
| iwl_opmode_deregister+0x90/0xa0 [iwlwifi] |
| __exit_compat+0x10/0x2c7 [iwlmvm] |
| __x64_sys_delete_module+0x13f/0x270 |
| do_syscall_64+0x5a/0x110 |
| entry_SYSCALL_64_after_hwframe+0x44/0xa9 |
| |
| Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com> |
| Signed-off-by: Luca Coelho <luciano.coelho@intel.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c |
| index f0c539b37ea70..a630e4edd9b4d 100644 |
| --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c |
| +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c |
| @@ -731,7 +731,8 @@ static struct thermal_zone_device_ops tzone_ops = { |
| static void iwl_mvm_thermal_zone_register(struct iwl_mvm *mvm) |
| { |
| int i; |
| - char name[] = "iwlwifi"; |
| + char name[16]; |
| + static atomic_t counter = ATOMIC_INIT(0); |
| |
| if (!iwl_mvm_is_tt_in_fw(mvm)) { |
| mvm->tz_device.tzone = NULL; |
| @@ -741,6 +742,7 @@ static void iwl_mvm_thermal_zone_register(struct iwl_mvm *mvm) |
| |
| BUILD_BUG_ON(ARRAY_SIZE(name) >= THERMAL_NAME_LENGTH); |
| |
| + sprintf(name, "iwlwifi_%u", atomic_inc_return(&counter) & 0xFF); |
| mvm->tz_device.tzone = thermal_zone_device_register(name, |
| IWL_MAX_DTS_TRIPS, |
| IWL_WRITABLE_TRIPS_MSK, |
| -- |
| 2.20.1 |
| |