Commit fbed57d8 authored by Karthikeyan Periyasamy's avatar Karthikeyan Periyasamy Committed by Kalle Valo
Browse files

ath11k: Refactor the fallback routine when peer create fails



When there is an error in peer create process from
ath11k_peer_find(), the code attempts to handle a fallback
for peer create. When this fallback fails, the driver returns
the fallback return code rather than actual error code
(-ENOENT). So refactor the fallback routine to return
the actual error code.

Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.5.0.1-01067-QCAHKSWPL_SILICONZ-1

Signed-off-by: default avatarKarthikeyan Periyasamy <periyasa@codeaurora.org>
Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/1640244819-21183-1-git-send-email-quic_periyasa@quicinc.com
parent 9f4ecacf
Loading
Loading
Loading
Loading
+23 −17
Original line number Diff line number Diff line
@@ -252,7 +252,7 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif,
{
	struct ath11k_peer *peer;
	struct ath11k_sta *arsta;
	int ret;
	int ret, fbret;

	lockdep_assert_held(&ar->conf_mutex);

@@ -291,22 +291,8 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif,
		ath11k_warn(ar->ab, "failed to find peer %pM on vdev %i after creation\n",
			    param->peer_addr, param->vdev_id);

		reinit_completion(&ar->peer_delete_done);

		ret = ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr,
						      param->vdev_id);
		if (ret) {
			ath11k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM\n",
				    param->vdev_id, param->peer_addr);
			return ret;
		}

		ret = ath11k_wait_for_peer_delete_done(ar, param->vdev_id,
						       param->peer_addr);
		if (ret)
			return ret;

		return -ENOENT;
		ret = -ENOENT;
		goto cleanup;
	}

	peer->pdev_idx = ar->pdev_idx;
@@ -335,4 +321,24 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif,
	spin_unlock_bh(&ar->ab->base_lock);

	return 0;

cleanup:
	reinit_completion(&ar->peer_delete_done);

	fbret = ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr,
						param->vdev_id);
	if (fbret) {
		ath11k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM\n",
			    param->vdev_id, param->peer_addr);
		goto exit;
	}

	fbret = ath11k_wait_for_peer_delete_done(ar, param->vdev_id,
						 param->peer_addr);
	if (fbret)
		ath11k_warn(ar->ab, "failed wait for peer %pM delete done id %d fallback ret %d\n",
			    param->peer_addr, param->vdev_id, fbret);

exit:
	return ret;
}