Browse Source

qcacld-3.0: Fix DP component Rx packet drop in MLO case

Currently in MLO use case DP component interface is not
mapped to netdev registered to ip stack and also Rx packet
over nl interface is broken.

Fix these issues by attaching DP component interface
to netdevice which is registered to ip stack for TX/RX.
Fix Rx packet over nl interface by checking
corresponding ops properly.

Change-Id: Ibf9cb03565a9e2d5cd02091995259376e1069790
CRs-Fixed: 3200617
Karthik Kantamneni 2 years ago
parent
commit
5b7f718dad

+ 0 - 6
components/dp/core/inc/wlan_dp_txrx.h

@@ -38,12 +38,6 @@
 #define IS_DP_ETHERTYPE_WAI(_nbuf) (false)
 #endif
 
-#ifdef CFG80211_CTRL_FRAME_SRC_ADDR_TA_ADDR
-#define SEND_EAPOL_OVER_NL true
-#else
-#define SEND_EAPOL_OVER_NL  false
-#endif
-
 #define DP_CONNECTIVITY_CHECK_SET_ARP		1
 #define DP_CONNECTIVITY_CHECK_SET_DNS		2
 #define DP_CONNECTIVITY_CHECK_SET_TCP_HANDSHAKE	3

+ 2 - 2
components/dp/core/src/wlan_dp_bus_bandwidth.c

@@ -1690,10 +1690,10 @@ static void __dp_bus_bw_work_handler(struct wlan_dp_psoc_context *dp_ctx)
 	dp_ctx->bw_vote_time = curr_time_us;
 
 	dp_for_each_intf_held_safe(dp_ctx, dp_intf, dp_intf_next) {
-		if (is_dp_intf_valid(dp_intf))
+		vdev = dp_intf->vdev;
+		if (!vdev)
 			continue;
 
-		vdev = dp_intf->vdev;
 		if (dp_comp_vdev_get_ref(vdev))
 			continue;
 

+ 4 - 4
components/dp/core/src/wlan_dp_main.c

@@ -136,7 +136,7 @@ dp_get_intf_by_macaddr(struct wlan_dp_psoc_context *dp_ctx,
 static int validate_interface_id(uint8_t intf_id)
 {
 	if (intf_id == WLAN_UMAC_VDEV_ID_MAX) {
-		dp_err("Interface is not up");
+		dp_err("Interface is not up: %ps", QDF_RET_IP);
 		return -EINVAL;
 	}
 	if (intf_id >= WLAN_MAX_VDEVS) {
@@ -159,8 +159,8 @@ int is_dp_intf_valid(struct wlan_dp_intf *dp_intf)
 	}
 
 	if (!(dp_intf->dev->flags & IFF_UP)) {
-		dp_info_rl("DP interface '%s' is not up",
-			   dp_intf->dev->name);
+		dp_info_rl("DP interface '%s' is not up %ps",
+			   dp_intf->dev->name, QDF_RET_IP);
 		return -EAGAIN;
 	}
 
@@ -893,7 +893,7 @@ dp_vdev_obj_create_notification(struct wlan_objmgr_vdev *vdev, void *arg)
 		return QDF_STATUS_E_INVAL;
 	}
 
-	dp_intf = dp_get_intf_by_macaddr(dp_ctx, mac_addr);
+	dp_intf = dp_get_intf_by_macaddr(dp_ctx, &intf_mac);
 	if (!dp_intf) {
 		dp_err("Failed to get dp intf mac:" QDF_MAC_ADDR_FMT,
 		       QDF_MAC_ADDR_REF(mac_addr));

+ 1 - 1
components/dp/core/src/wlan_dp_softap_txrx.c

@@ -801,7 +801,7 @@ QDF_STATUS dp_softap_rx_packet_cbk(void *intf_ctx, qdf_nbuf_t rx_buf)
 
 		dp_softap_tsf_timestamp_rx(dp_ctx, nbuf);
 
-		if (is_eapol && SEND_EAPOL_OVER_NL) {
+		if (is_eapol && dp_ctx->dp_ops.dp_send_rx_pkt_over_nl) {
 			if (dp_ctx->dp_ops.dp_send_rx_pkt_over_nl(dp_intf->dev,
 					(u8 *)&dp_intf->conn_info.peer_macaddr,
 								  nbuf, false))

+ 2 - 2
components/dp/core/src/wlan_dp_txrx.c

@@ -1583,7 +1583,7 @@ static inline bool
 dp_is_gratuitous_arp_unsolicited_na(struct wlan_dp_psoc_context *dp_ctx,
 				    qdf_nbuf_t nbuf)
 {
-	if (qdf_unlikely(dp_ctx->dp_ops.dp_is_gratuitous_arp_unsolicited_na(nbuf)))
+	if (qdf_unlikely(dp_ctx->dp_ops.dp_is_gratuitous_arp_unsolicited_na))
 		return dp_ctx->dp_ops.dp_is_gratuitous_arp_unsolicited_na(nbuf);
 
 	return false;
@@ -1802,7 +1802,7 @@ QDF_STATUS dp_rx_packet_cbk(void *dp_intf_context,
 
 		dp_tsf_timestamp_rx(dp_ctx, nbuf);
 
-		if (send_over_nl && SEND_EAPOL_OVER_NL) {
+		if (send_over_nl && dp_ctx->dp_ops.dp_send_rx_pkt_over_nl) {
 			if (dp_ctx->dp_ops.dp_send_rx_pkt_over_nl(dp_intf->dev,
 					(u8 *)&dp_intf->conn_info.peer_macaddr,
 								  nbuf, false))