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

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

iwlwifi: mvm: track low-latency sources separately



To be able to test low-latency behaviour properly, split the
different low-latency sources so that setting any one of them,
for example from debugfs, is sufficient; this avoids getting
the debug setting overwritten by other sources.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
parent 0db056d3
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
 *
 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
 * Copyright(c) 2016        Intel Deutschland GmbH
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2 of the GNU General Public License as
@@ -33,6 +34,7 @@
 *
 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
 * Copyright(c) 2016        Intel Deutschland GmbH
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
@@ -1255,6 +1257,7 @@ static ssize_t iwl_dbgfs_low_latency_write(struct ieee80211_vif *vif, char *buf,
{
	struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
	struct iwl_mvm *mvm = mvmvif->mvm;
	bool prev;
	u8 value;
	int ret;

@@ -1265,7 +1268,9 @@ static ssize_t iwl_dbgfs_low_latency_write(struct ieee80211_vif *vif, char *buf,
		return -EINVAL;

	mutex_lock(&mvm->mutex);
	iwl_mvm_update_low_latency(mvm, vif, value);
	prev = iwl_mvm_vif_low_latency(mvmvif);
	mvmvif->low_latency_dbgfs = value;
	iwl_mvm_update_low_latency(mvm, vif, prev);
	mutex_unlock(&mvm->mutex);

	return count;
@@ -1277,11 +1282,15 @@ static ssize_t iwl_dbgfs_low_latency_read(struct file *file,
{
	struct ieee80211_vif *vif = file->private_data;
	struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
	char buf[2];
	char buf[30] = {};
	int len;

	buf[0] = mvmvif->low_latency ? '1' : '0';
	buf[1] = '\n';
	return simple_read_from_buffer(user_buf, count, ppos, buf, sizeof(buf));
	len = snprintf(buf, sizeof(buf) - 1,
		       "traffic=%d\ndbgfs=%d\nvcmd=%d\n",
		       mvmvif->low_latency_traffic,
		       mvmvif->low_latency_dbgfs,
		       mvmvif->low_latency_vcmd);
	return simple_read_from_buffer(user_buf, count, ppos, buf, len);
}

static ssize_t iwl_dbgfs_uapsd_misbehaving_read(struct file *file,
+7 −5
Original line number Diff line number Diff line
@@ -346,8 +346,9 @@ struct iwl_mvm_vif_bf_data {
 * @pm_enabled - Indicate if MAC power management is allowed
 * @monitor_active: indicates that monitor context is configured, and that the
 *	interface should get quota etc.
 * @low_latency: indicates that this interface is in low-latency mode
 *	(VMACLowLatencyMode)
 * @low_latency_traffic: indicates low latency traffic was detected
 * @low_latency_dbgfs: low latency mode set from debugfs
 * @low_latency_vcmd: low latency mode set from vendor command
 * @ps_disabled: indicates that this interface requires PS to be disabled
 * @queue_params: QoS params for this MAC
 * @bcast_sta: station used for broadcast packets. Used by the following
@@ -375,7 +376,7 @@ struct iwl_mvm_vif {
	bool ap_ibss_active;
	bool pm_enabled;
	bool monitor_active;
	bool low_latency;
	bool low_latency_traffic, low_latency_dbgfs, low_latency_vcmd;
	bool ps_disabled;
	struct iwl_mvm_vif_bf_data bf_data;

@@ -1427,8 +1428,9 @@ static inline bool iwl_mvm_vif_low_latency(struct iwl_mvm_vif *mvmvif)
	 * binding, so this has no real impact. For now, just return
	 * the current desired low-latency state.
	 */

	return mvmvif->low_latency;
	return mvmvif->low_latency_dbgfs ||
	       mvmvif->low_latency_traffic ||
	       mvmvif->low_latency_vcmd;
}

/* hw scheduler queue config */
+2 −4
Original line number Diff line number Diff line
@@ -937,18 +937,16 @@ bool iwl_mvm_rx_diversity_allowed(struct iwl_mvm *mvm)
}

int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
			       bool value)
			       bool prev)
{
	struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
	int res;

	lockdep_assert_held(&mvm->mutex);

	if (mvmvif->low_latency == value)
	if (iwl_mvm_vif_low_latency(mvmvif) == prev)
		return 0;

	mvmvif->low_latency = value;

	res = iwl_mvm_update_quotas(mvm, false, NULL);
	if (res)
		return res;