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

Commit 4707fde5 authored by Johannes Berg's avatar Johannes Berg Committed by Emmanuel Grumbach
Browse files

iwlwifi: mvm: use build-time assertion for fw trigger ID



The firmware debug trigger ID is always a compile-time constant,
so we can use a build-time assertion to validate that it is in
fact a valid constant.

To make that really guaranteed to work, convert this and the
inline function iwl_fw_dbg_trigger_simple_stop() to macros.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 59fd4bf6
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -311,12 +311,15 @@ iwl_fw_dbg_conf_usniffer(const struct iwl_fw *fw, u8 id)
})

static inline struct iwl_fw_dbg_trigger_tlv*
iwl_fw_dbg_get_trigger(const struct iwl_fw *fw, u8 id)
_iwl_fw_dbg_get_trigger(const struct iwl_fw *fw, enum iwl_fw_dbg_trigger id)
{
	if (WARN_ON(id >= ARRAY_SIZE(fw->dbg_trigger_tlv)))
		return NULL;

	return fw->dbg_trigger_tlv[id];
}

#define iwl_fw_dbg_get_trigger(fw, id) ({			\
	BUILD_BUG_ON(!__builtin_constant_p(id));		\
	BUILD_BUG_ON((id) >= FW_DBG_TRIGGER_MAX);		\
	_iwl_fw_dbg_get_trigger((fw), (id));			\
})

#endif  /* __iwl_fw_h__ */
+8 −7
Original line number Diff line number Diff line
@@ -1524,20 +1524,21 @@ iwl_fw_dbg_trigger_check_stop(struct iwl_mvm *mvm,
}

static inline void
iwl_fw_dbg_trigger_simple_stop(struct iwl_mvm *mvm,
_iwl_fw_dbg_trigger_simple_stop(struct iwl_mvm *mvm,
				struct ieee80211_vif *vif,
			       enum iwl_fw_dbg_trigger trig)
				struct iwl_fw_dbg_trigger_tlv *trigger)
{
	struct iwl_fw_dbg_trigger_tlv *trigger;

	if (!iwl_fw_dbg_trigger_enabled(mvm->fw, trig))
	if (!trigger)
		return;

	trigger = iwl_fw_dbg_get_trigger(mvm->fw, trig);
	if (!iwl_fw_dbg_trigger_check_stop(mvm, vif, trigger))
		return;

	iwl_mvm_fw_dbg_collect_trig(mvm, trigger, NULL);
}
#define iwl_fw_dbg_trigger_simple_stop(mvm, vif, trig)	\
	_iwl_fw_dbg_trigger_simple_stop((mvm), (vif),	\
					iwl_fw_dbg_get_trigger((mvm)->fw,\
							       (trig)))

#endif /* __IWL_MVM_H__ */