Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec77a33e authored by Chaya Rachel Ivgi's avatar Chaya Rachel Ivgi Committed by Emmanuel Grumbach
Browse files

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: default avatarChaya Rachel Ivgi <chaya.rachel.ivgi@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 5d93f3a2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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),

+0 −9
Original line number Diff line number Diff line
@@ -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 */
}