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

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

iwlwiif: mvm: refactor iwl_mvm_notify_rx_queue



Instead of allocating memory for which we have an upper
limit, use a small buffer on stack.

Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent c61b655a
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -776,7 +776,6 @@ struct iwl_rss_config_cmd {
	u8 indirection_table[IWL_RSS_INDIRECTION_TABLE_SIZE];
} __packed; /* RSS_CONFIG_CMD_API_S_VER_1 */

#define IWL_MULTI_QUEUE_SYNC_MSG_MAX_SIZE 128
#define IWL_MULTI_QUEUE_SYNC_SENDER_POS 0
#define IWL_MULTI_QUEUE_SYNC_SENDER_MSK 0xf

+9 −8
Original line number Diff line number Diff line
@@ -465,18 +465,20 @@ static bool iwl_mvm_is_dup(struct ieee80211_sta *sta, int queue,
int iwl_mvm_notify_rx_queue(struct iwl_mvm *mvm, u32 rxq_mask,
			    const u8 *data, u32 count)
{
	struct iwl_rxq_sync_cmd *cmd;
	u8 buf[sizeof(struct iwl_rxq_sync_cmd) +
	       sizeof(struct iwl_mvm_rss_sync_notif)];
	struct iwl_rxq_sync_cmd *cmd = (void *)buf;
	u32 data_size = sizeof(*cmd) + count;
	int ret;

	/* should be DWORD aligned */
	if (WARN_ON(count & 3 || count > IWL_MULTI_QUEUE_SYNC_MSG_MAX_SIZE))
	/*
	 * size must be a multiple of DWORD
	 * Ensure we don't overflow buf
	 */
	if (WARN_ON(count & 3 ||
		    count > sizeof(struct iwl_mvm_rss_sync_notif)))
		return -EINVAL;

	cmd = kzalloc(data_size, GFP_KERNEL);
	if (!cmd)
		return -ENOMEM;

	cmd->rxq_mask = cpu_to_le32(rxq_mask);
	cmd->count =  cpu_to_le32(count);
	cmd->flags = 0;
@@ -487,7 +489,6 @@ int iwl_mvm_notify_rx_queue(struct iwl_mvm *mvm, u32 rxq_mask,
					   TRIGGER_RX_QUEUES_NOTIF_CMD),
				   0, data_size, cmd);

	kfree(cmd);
	return ret;
}