iwlwifi: mvm: handle async temperature notification with unlocked mutex
Use RX_HANDLER_ASYNC_UNLOCKED instead of unlock and re-lock the mutex independently. Signed-off-by: Chaya Rachel Ivgi <chaya.rachel.ivgi@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
5d93f3a278
commit
ec77a33ee5
@ -292,7 +292,7 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = {
|
||||
RX_HANDLER(DTS_MEASUREMENT_NOTIFICATION, iwl_mvm_temp_notif,
|
||||
RX_HANDLER_ASYNC_LOCKED),
|
||||
RX_HANDLER_GRP(PHY_OPS_GROUP, DTS_MEASUREMENT_NOTIF_WIDE,
|
||||
iwl_mvm_temp_notif, RX_HANDLER_ASYNC_LOCKED),
|
||||
iwl_mvm_temp_notif, RX_HANDLER_ASYNC_UNLOCKED),
|
||||
RX_HANDLER_GRP(PHY_OPS_GROUP, CT_KILL_NOTIFICATION,
|
||||
iwl_mvm_ct_kill_notif, RX_HANDLER_SYNC),
|
||||
|
||||
|
@ -204,20 +204,11 @@ void iwl_mvm_temp_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
|
||||
if (WARN_ON(ths_crossed >= IWL_MAX_DTS_TRIPS))
|
||||
return;
|
||||
|
||||
/*
|
||||
* We are now handling a temperature notification from the firmware
|
||||
* in ASYNC and hold the mutex. thermal_notify_framework will call
|
||||
* us back through get_temp() which ought to send a SYNC command to
|
||||
* the firmware and hence to take the mutex.
|
||||
* Avoid the deadlock by unlocking the mutex here.
|
||||
*/
|
||||
if (mvm->tz_device.tzone) {
|
||||
struct iwl_mvm_thermal_device *tz_dev = &mvm->tz_device;
|
||||
|
||||
mutex_unlock(&mvm->mutex);
|
||||
thermal_notify_framework(tz_dev->tzone,
|
||||
tz_dev->fw_trips_index[ths_crossed]);
|
||||
mutex_lock(&mvm->mutex);
|
||||
}
|
||||
#endif /* CONFIG_THERMAL */
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user