Further fixes for backports 3.19-rc1.

We had previously applied
http://lists.infradead.org/pipermail/ath10k/2014-April/001709.html
to our tree. This change was not accepted upstream, and at this
point it nno longer works with the current upstream tree. The
merge with 3.19-rc1 removed part of this patch, this CL removes
the rest of it.

Change-Id: Ibf7fca09efa40e785a1f589d337b526571c8fcd6
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 58ab03e..14bcf31 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -447,44 +447,26 @@
 
 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr)
 {
-	struct ath10k_peer *peer;
 	int ret;
 
 	lockdep_assert_held(&ar->conf_mutex);
 
-	peer = ath10k_peer_find(ar, vdev_id, addr);
-	if (!peer) {
-		ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n",
-			    addr, vdev_id);
-		return -ENOENT;
-	}
-
 	ret = ath10k_wmi_peer_delete(ar, vdev_id, addr);
 	if (ret) {
 		ath10k_warn(ar, "failed to request wmi peer %pM on vdev %i removal: %d\n",
 			    addr, vdev_id, ret);
-		goto out;
+		return ret;
 	}
 
 	ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr);
 	if (ret) {
 		ath10k_warn(ar, "failed to wait for wmi peer %pM on vdev %i removal: %d\n",
 			    addr, vdev_id, ret);
-		goto out;
+		return ret;
 	}
 
 	ar->num_peers--;
 
-out:
-	spin_lock_bh(&ar->data_lock);
-	list_del(&peer->list);
-	if (!bitmap_empty(peer->peer_ids, ATH10K_MAX_NUM_PEER_IDS))
-		ath10k_warn(ar, "removing peer %pM on vdev %i still being mapped in firmware\n",
-			    addr, vdev_id);
-	spin_unlock_bh(&ar->data_lock);
-
-	kfree(peer);
-
 	return 0;
 }
 
diff --git a/drivers/net/wireless/ath/ath10k/txrx.c b/drivers/net/wireless/ath/ath10k/txrx.c
index 2f774c6..00fd4b4 100644
--- a/drivers/net/wireless/ath/ath10k/txrx.c
+++ b/drivers/net/wireless/ath/ath10k/txrx.c
@@ -178,16 +178,20 @@
 	spin_lock_bh(&ar->data_lock);
 	peer = ath10k_peer_find(ar, ev->vdev_id, ev->addr);
 	if (!peer) {
-		ath10k_warn(ar, "failed to map peer %pM on vdev %i: no such entry\n",
-			    ev->addr, ev->vdev_id);
-		goto exit;
+		peer = kzalloc(sizeof(*peer), GFP_ATOMIC);
+		if (!peer)
+			goto exit;
+
+		peer->vdev_id = ev->vdev_id;
+		ether_addr_copy(peer->addr, ev->addr);
+		list_add(&peer->list, &ar->peers);
+		wake_up(&ar->peer_mapping_wq);
 	}
 
 	ath10k_dbg(ar, ATH10K_DBG_HTT, "htt peer map vdev %d peer %pM id %d\n",
 		   ev->vdev_id, ev->addr, ev->peer_id);
 
 	set_bit(ev->peer_id, peer->peer_ids);
-	wake_up(&ar->peer_mapping_wq);
 exit:
 	spin_unlock_bh(&ar->data_lock);
 }
@@ -211,8 +215,11 @@
 
 	clear_bit(ev->peer_id, peer->peer_ids);
 
-	if (bitmap_empty(peer->peer_ids, ATH10K_MAX_NUM_PEER_IDS))
+	if (bitmap_empty(peer->peer_ids, ATH10K_MAX_NUM_PEER_IDS)) {
+		list_del(&peer->list);
+		kfree(peer);
 		wake_up(&ar->peer_mapping_wq);
+	}
 
 exit:
 	spin_unlock_bh(&ar->data_lock);