Loading components/ipa/core/inc/wlan_ipa_core.h +23 −2 Original line number Diff line number Diff line /* * Copyright (c) 2013-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2013-2019, 2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -592,9 +592,23 @@ static inline void ipa_set_rps_per_vdev(struct wlan_ipa_priv *ipa_ctx, uint8_t vdev_id, bool enable) { if (ipa_ctx->rps_enable) ipa_ctx->rps_enable(vdev_id, enable); } /** * wlan_ipa_handle_multiple_sap_evt() - Handle multiple SAP connect/disconnect * @ipa_ctx: IPA global context * @type: IPA event type. * * This function is used to disable pipes when multiple SAP are connected and * enable pipes back when only one SAP is connected. * * Return: None */ void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, qdf_ipa_wlan_event type); #else static inline void ipa_set_rps(struct wlan_ipa_priv *ipa_ctx, enum QDF_OPMODE mode, Loading @@ -607,6 +621,13 @@ void ipa_set_rps_per_vdev(struct wlan_ipa_priv *ipa_ctx, uint8_t vdev_id, bool enable) { } static inline void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, qdf_ipa_wlan_event type) { } #endif /** Loading components/ipa/core/inc/wlan_ipa_priv.h +3 −1 Original line number Diff line number Diff line /* * Copyright (c) 2013-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2013-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -353,6 +353,7 @@ struct wlan_ipa_iface_context { * @num_tx_dequeued: Number of TX dequeued * @num_max_pm_queue: Number of packets in PM queue * @num_rx_excep: Number of RX IPA exception packets * @num_rx_no_iface_eapol: No of EAPOL pkts before iface setup * @num_tx_fwd_ok: Number of TX forward packet success * @num_tx_fwd_err: Number of TX forward packet failures */ Loading @@ -373,6 +374,7 @@ struct wlan_ipa_stats { uint64_t num_tx_dequeued; uint64_t num_max_pm_queue; uint64_t num_rx_excep; uint64_t num_rx_no_iface_eapol; uint64_t num_tx_fwd_ok; uint64_t num_tx_fwd_err; }; Loading components/ipa/core/src/wlan_ipa_core.c +69 −26 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ /* Include Files */ #include "wlan_ipa_core.h" #include "wlan_ipa_main.h" #include "wlan_hdd_main.h" #include <ol_txrx.h> #include "cdp_txrx_ipa.h" #include "wal_rx_desc.h" Loading Loading @@ -895,6 +896,50 @@ wlan_ipa_rx_intrabss_fwd(struct wlan_ipa_priv *ipa_ctx, #endif /* CONFIG_IPA_WDI_UNIFIED_API */ /** * wlan_ipa_send_sta_eapol_to_nw() - Send Rx EAPOL pkt for STA to Kernel * @skb: network buffer * * Called when a EAPOL packet is received via IPA Exception path * before wlan_ipa_setup_iface is done for STA. * * Return: 0 on success, err_code for failure. */ static int wlan_ipa_send_sta_eapol_to_nw(qdf_nbuf_t skb) { struct wlan_ipa_priv *ipa_ctx = gp_ipa; struct hdd_context *hdd_ctx; struct hdd_adapter *adapter; struct ethhdr *eh; hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); if (!hdd_ctx) { ipa_err_rl("Invalid hdd_context"); return -EINVAL; } eh = (struct ethhdr *)qdf_nbuf_data(skb); adapter = hdd_get_adapter_by_macaddr(hdd_ctx, eh->h_dest); if (hdd_validate_adapter(adapter)) { ipa_err_rl("Invalid adapter"); return -EINVAL; } if (adapter->device_mode != QDF_STA_MODE) { ipa_err_rl("device_mode is not STA"); return -EINVAL; } skb->destructor = wlan_ipa_uc_rt_debug_destructor; if (ipa_ctx->send_to_nw) ipa_ctx->send_to_nw(skb, adapter->dev); ipa_ctx->ipa_rx_net_send_count++; ipa_ctx->stats.num_rx_no_iface_eapol++; return 0; } /** * wlan_ipa_send_skb_to_network() - Send skb to kernel * @skb: network buffer Loading Loading @@ -959,13 +1004,24 @@ static void __wlan_ipa_w2i_cb(void *priv, qdf_ipa_dp_evt_type_t evt, if (wlan_ipa_uc_is_enabled(ipa_ctx->config)) { session_id = (uint8_t)skb->cb[0]; iface_id = ipa_ctx->vdev_to_iface[session_id]; ipa_ctx->stats.num_rx_excep++; qdf_nbuf_pull_head(skb, WLAN_IPA_UC_WLAN_CLD_HDR_LEN); } else { iface_id = WLAN_IPA_GET_IFACE_ID(skb->data); qdf_nbuf_pull_head(skb, WLAN_IPA_WLAN_CLD_HDR_LEN); } if (iface_id >= WLAN_IPA_MAX_IFACE) { ipa_err_rl("Invalid iface_id: %u,session id: %x %x %x %x. Dropped!", ipa_err_rl("Invalid iface_id %u,session_id %x %x %x %x", iface_id, session_id, (uint8_t)skb->cb[1], (uint8_t)skb->cb[2], (uint8_t)skb->cb[3]); if (qdf_nbuf_is_ipv4_eapol_pkt(skb)) { ipa_err_rl("EAPOL pkt. Sending to NW!"); if (!wlan_ipa_send_sta_eapol_to_nw(skb)) break; } ipa_err_rl("Pkt Dropped!"); ipa_ctx->ipa_rx_internal_drop_count++; dev_kfree_skb_any(skb); return; Loading @@ -979,13 +1035,6 @@ static void __wlan_ipa_w2i_cb(void *priv, qdf_ipa_dp_evt_type_t evt, dev_kfree_skb_any(skb); return; } if (wlan_ipa_uc_is_enabled(ipa_ctx->config)) { ipa_ctx->stats.num_rx_excep++; qdf_nbuf_pull_head(skb, WLAN_IPA_UC_WLAN_CLD_HDR_LEN); } else { qdf_nbuf_pull_head(skb, WLAN_IPA_WLAN_CLD_HDR_LEN); } iface_context->stats.num_rx_ipa_excep++; /* Disable to forward Intra-BSS Rx packets when Loading Loading @@ -1617,7 +1666,7 @@ static QDF_STATUS wlan_ipa_uc_handle_first_con(struct wlan_ipa_priv *ipa_ctx) { ipa_debug("enter"); if (ipa_ctx->num_sap_connected > 1) { if (qdf_ipa_get_lan_rx_napi() && (ipa_ctx->num_sap_connected > 1)) { ipa_debug("Multiple SAP connected. Not enabling pipes. Exit"); return QDF_STATUS_E_PERM; } Loading Loading @@ -1936,17 +1985,7 @@ static QDF_STATUS wlan_ipa_send_msg(qdf_netdev_t net_dev, return QDF_STATUS_SUCCESS; } /** * wlan_ipa_handle_multiple_sap_evt() - Handle multiple SAP connect/disconnect * @ipa_ctx: IPA global context * @type: IPA event type. * * This function is used to disable pipes when multiple SAP are connected and * enable pipes back when only one SAP is connected. * * Return: None */ static inline #ifdef IPA_LAN_RX_NAPI_SUPPORT void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, qdf_ipa_wlan_event type) { Loading Loading @@ -1988,6 +2027,7 @@ void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, wlan_ipa_uc_disable_pipes(ipa_ctx, true); } } #endif /** * __wlan_ipa_wlan_evt() - IPA event handler Loading Loading @@ -2139,7 +2179,8 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, } } if (ipa_ctx->num_sap_connected == 1) { if (qdf_ipa_get_lan_rx_napi() && ipa_ctx->num_sap_connected == 1) { wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); } Loading Loading @@ -2260,12 +2301,13 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, if (wlan_ipa_uc_is_enabled(ipa_ctx->config)) { qdf_mutex_release(&ipa_ctx->event_lock); if (ipa_ctx->num_sap_connected == 1) { if (qdf_ipa_get_lan_rx_napi() && (ipa_ctx->num_sap_connected > 1)) { wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); } else { wlan_ipa_uc_offload_enable_disable(ipa_ctx, SIR_AP_RX_DATA_OFFLOAD, session_id, true); } else { wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); } qdf_mutex_acquire(&ipa_ctx->event_lock); } Loading Loading @@ -2352,7 +2394,7 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, if (iface_ctx) wlan_ipa_cleanup_iface(iface_ctx); if (qdf_ipa_get_lan_rx_napi()) if (qdf_ipa_get_lan_rx_napi() && ipa_ctx->sap_num_connected_sta) ipa_set_rps_per_vdev(ipa_ctx, session_id, false); qdf_mutex_release(&ipa_ctx->event_lock); Loading Loading @@ -2406,7 +2448,8 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, } } if (ipa_ctx->num_sap_connected == 1) if (qdf_ipa_get_lan_rx_napi() && (ipa_ctx->num_sap_connected == 1)) wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); qdf_mutex_release(&ipa_ctx->event_lock); Loading core/cds/src/cds_api.c +15 −9 Original line number Diff line number Diff line /* * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -2797,6 +2797,8 @@ void cds_incr_arp_stats_tx_tgt_delivered(void) { struct hdd_context *hdd_ctx; struct hdd_adapter *adapter, *next_adapter = NULL; wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_CDS_INCR_ARP_STATS_TX_TGT_DELIVERED; hdd_ctx = gp_cds_context->hdd_context; if (!hdd_ctx) { Loading @@ -2804,14 +2806,15 @@ void cds_incr_arp_stats_tx_tgt_delivered(void) return; } hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter) { hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter, dbgid) { if (adapter->device_mode == QDF_STA_MODE) { dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); if (next_adapter) dev_put(next_adapter->dev); hdd_adapter_dev_put_debug(next_adapter, dbgid); break; } dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); } if (adapter) Loading @@ -2827,6 +2830,8 @@ void cds_incr_arp_stats_tx_tgt_acked(void) { struct hdd_context *hdd_ctx; struct hdd_adapter *adapter, *next_adapter = NULL; wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_CDS_INCR_ARP_STATS_TX_TGT_ACKED; hdd_ctx = gp_cds_context->hdd_context; if (!hdd_ctx) { Loading @@ -2834,14 +2839,15 @@ void cds_incr_arp_stats_tx_tgt_acked(void) return; } hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter) { hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter, dbgid) { if (adapter->device_mode == QDF_STA_MODE) { dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); if (next_adapter) dev_put(next_adapter->dev); hdd_adapter_dev_put_debug(next_adapter, dbgid); break; } dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); } if (adapter) Loading core/dp/txrx/ol_rx_defrag.c +2 −2 Original line number Diff line number Diff line /* * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2011-2019,2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -868,7 +868,7 @@ ol_rx_frag_tkip_demic(ol_txrx_pdev_handle pdev, const uint8_t *key, ol_rx_defrag_copydata(msdu, pktlen - f_tkip.ic_miclen + rx_desc_len, f_tkip.ic_miclen, (caddr_t) mic0); if (!qdf_mem_cmp(mic, mic0, f_tkip.ic_miclen)) if (qdf_mem_cmp(mic, mic0, f_tkip.ic_miclen)) return OL_RX_DEFRAG_ERR; qdf_nbuf_trim_tail(msdu, f_tkip.ic_miclen); Loading Loading
components/ipa/core/inc/wlan_ipa_core.h +23 −2 Original line number Diff line number Diff line /* * Copyright (c) 2013-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2013-2019, 2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -592,9 +592,23 @@ static inline void ipa_set_rps_per_vdev(struct wlan_ipa_priv *ipa_ctx, uint8_t vdev_id, bool enable) { if (ipa_ctx->rps_enable) ipa_ctx->rps_enable(vdev_id, enable); } /** * wlan_ipa_handle_multiple_sap_evt() - Handle multiple SAP connect/disconnect * @ipa_ctx: IPA global context * @type: IPA event type. * * This function is used to disable pipes when multiple SAP are connected and * enable pipes back when only one SAP is connected. * * Return: None */ void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, qdf_ipa_wlan_event type); #else static inline void ipa_set_rps(struct wlan_ipa_priv *ipa_ctx, enum QDF_OPMODE mode, Loading @@ -607,6 +621,13 @@ void ipa_set_rps_per_vdev(struct wlan_ipa_priv *ipa_ctx, uint8_t vdev_id, bool enable) { } static inline void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, qdf_ipa_wlan_event type) { } #endif /** Loading
components/ipa/core/inc/wlan_ipa_priv.h +3 −1 Original line number Diff line number Diff line /* * Copyright (c) 2013-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2013-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -353,6 +353,7 @@ struct wlan_ipa_iface_context { * @num_tx_dequeued: Number of TX dequeued * @num_max_pm_queue: Number of packets in PM queue * @num_rx_excep: Number of RX IPA exception packets * @num_rx_no_iface_eapol: No of EAPOL pkts before iface setup * @num_tx_fwd_ok: Number of TX forward packet success * @num_tx_fwd_err: Number of TX forward packet failures */ Loading @@ -373,6 +374,7 @@ struct wlan_ipa_stats { uint64_t num_tx_dequeued; uint64_t num_max_pm_queue; uint64_t num_rx_excep; uint64_t num_rx_no_iface_eapol; uint64_t num_tx_fwd_ok; uint64_t num_tx_fwd_err; }; Loading
components/ipa/core/src/wlan_ipa_core.c +69 −26 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ /* Include Files */ #include "wlan_ipa_core.h" #include "wlan_ipa_main.h" #include "wlan_hdd_main.h" #include <ol_txrx.h> #include "cdp_txrx_ipa.h" #include "wal_rx_desc.h" Loading Loading @@ -895,6 +896,50 @@ wlan_ipa_rx_intrabss_fwd(struct wlan_ipa_priv *ipa_ctx, #endif /* CONFIG_IPA_WDI_UNIFIED_API */ /** * wlan_ipa_send_sta_eapol_to_nw() - Send Rx EAPOL pkt for STA to Kernel * @skb: network buffer * * Called when a EAPOL packet is received via IPA Exception path * before wlan_ipa_setup_iface is done for STA. * * Return: 0 on success, err_code for failure. */ static int wlan_ipa_send_sta_eapol_to_nw(qdf_nbuf_t skb) { struct wlan_ipa_priv *ipa_ctx = gp_ipa; struct hdd_context *hdd_ctx; struct hdd_adapter *adapter; struct ethhdr *eh; hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD); if (!hdd_ctx) { ipa_err_rl("Invalid hdd_context"); return -EINVAL; } eh = (struct ethhdr *)qdf_nbuf_data(skb); adapter = hdd_get_adapter_by_macaddr(hdd_ctx, eh->h_dest); if (hdd_validate_adapter(adapter)) { ipa_err_rl("Invalid adapter"); return -EINVAL; } if (adapter->device_mode != QDF_STA_MODE) { ipa_err_rl("device_mode is not STA"); return -EINVAL; } skb->destructor = wlan_ipa_uc_rt_debug_destructor; if (ipa_ctx->send_to_nw) ipa_ctx->send_to_nw(skb, adapter->dev); ipa_ctx->ipa_rx_net_send_count++; ipa_ctx->stats.num_rx_no_iface_eapol++; return 0; } /** * wlan_ipa_send_skb_to_network() - Send skb to kernel * @skb: network buffer Loading Loading @@ -959,13 +1004,24 @@ static void __wlan_ipa_w2i_cb(void *priv, qdf_ipa_dp_evt_type_t evt, if (wlan_ipa_uc_is_enabled(ipa_ctx->config)) { session_id = (uint8_t)skb->cb[0]; iface_id = ipa_ctx->vdev_to_iface[session_id]; ipa_ctx->stats.num_rx_excep++; qdf_nbuf_pull_head(skb, WLAN_IPA_UC_WLAN_CLD_HDR_LEN); } else { iface_id = WLAN_IPA_GET_IFACE_ID(skb->data); qdf_nbuf_pull_head(skb, WLAN_IPA_WLAN_CLD_HDR_LEN); } if (iface_id >= WLAN_IPA_MAX_IFACE) { ipa_err_rl("Invalid iface_id: %u,session id: %x %x %x %x. Dropped!", ipa_err_rl("Invalid iface_id %u,session_id %x %x %x %x", iface_id, session_id, (uint8_t)skb->cb[1], (uint8_t)skb->cb[2], (uint8_t)skb->cb[3]); if (qdf_nbuf_is_ipv4_eapol_pkt(skb)) { ipa_err_rl("EAPOL pkt. Sending to NW!"); if (!wlan_ipa_send_sta_eapol_to_nw(skb)) break; } ipa_err_rl("Pkt Dropped!"); ipa_ctx->ipa_rx_internal_drop_count++; dev_kfree_skb_any(skb); return; Loading @@ -979,13 +1035,6 @@ static void __wlan_ipa_w2i_cb(void *priv, qdf_ipa_dp_evt_type_t evt, dev_kfree_skb_any(skb); return; } if (wlan_ipa_uc_is_enabled(ipa_ctx->config)) { ipa_ctx->stats.num_rx_excep++; qdf_nbuf_pull_head(skb, WLAN_IPA_UC_WLAN_CLD_HDR_LEN); } else { qdf_nbuf_pull_head(skb, WLAN_IPA_WLAN_CLD_HDR_LEN); } iface_context->stats.num_rx_ipa_excep++; /* Disable to forward Intra-BSS Rx packets when Loading Loading @@ -1617,7 +1666,7 @@ static QDF_STATUS wlan_ipa_uc_handle_first_con(struct wlan_ipa_priv *ipa_ctx) { ipa_debug("enter"); if (ipa_ctx->num_sap_connected > 1) { if (qdf_ipa_get_lan_rx_napi() && (ipa_ctx->num_sap_connected > 1)) { ipa_debug("Multiple SAP connected. Not enabling pipes. Exit"); return QDF_STATUS_E_PERM; } Loading Loading @@ -1936,17 +1985,7 @@ static QDF_STATUS wlan_ipa_send_msg(qdf_netdev_t net_dev, return QDF_STATUS_SUCCESS; } /** * wlan_ipa_handle_multiple_sap_evt() - Handle multiple SAP connect/disconnect * @ipa_ctx: IPA global context * @type: IPA event type. * * This function is used to disable pipes when multiple SAP are connected and * enable pipes back when only one SAP is connected. * * Return: None */ static inline #ifdef IPA_LAN_RX_NAPI_SUPPORT void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, qdf_ipa_wlan_event type) { Loading Loading @@ -1988,6 +2027,7 @@ void wlan_ipa_handle_multiple_sap_evt(struct wlan_ipa_priv *ipa_ctx, wlan_ipa_uc_disable_pipes(ipa_ctx, true); } } #endif /** * __wlan_ipa_wlan_evt() - IPA event handler Loading Loading @@ -2139,7 +2179,8 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, } } if (ipa_ctx->num_sap_connected == 1) { if (qdf_ipa_get_lan_rx_napi() && ipa_ctx->num_sap_connected == 1) { wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); } Loading Loading @@ -2260,12 +2301,13 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, if (wlan_ipa_uc_is_enabled(ipa_ctx->config)) { qdf_mutex_release(&ipa_ctx->event_lock); if (ipa_ctx->num_sap_connected == 1) { if (qdf_ipa_get_lan_rx_napi() && (ipa_ctx->num_sap_connected > 1)) { wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); } else { wlan_ipa_uc_offload_enable_disable(ipa_ctx, SIR_AP_RX_DATA_OFFLOAD, session_id, true); } else { wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); } qdf_mutex_acquire(&ipa_ctx->event_lock); } Loading Loading @@ -2352,7 +2394,7 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, if (iface_ctx) wlan_ipa_cleanup_iface(iface_ctx); if (qdf_ipa_get_lan_rx_napi()) if (qdf_ipa_get_lan_rx_napi() && ipa_ctx->sap_num_connected_sta) ipa_set_rps_per_vdev(ipa_ctx, session_id, false); qdf_mutex_release(&ipa_ctx->event_lock); Loading Loading @@ -2406,7 +2448,8 @@ static QDF_STATUS __wlan_ipa_wlan_evt(qdf_netdev_t net_dev, uint8_t device_mode, } } if (ipa_ctx->num_sap_connected == 1) if (qdf_ipa_get_lan_rx_napi() && (ipa_ctx->num_sap_connected == 1)) wlan_ipa_handle_multiple_sap_evt(ipa_ctx, type); qdf_mutex_release(&ipa_ctx->event_lock); Loading
core/cds/src/cds_api.c +15 −9 Original line number Diff line number Diff line /* * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -2797,6 +2797,8 @@ void cds_incr_arp_stats_tx_tgt_delivered(void) { struct hdd_context *hdd_ctx; struct hdd_adapter *adapter, *next_adapter = NULL; wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_CDS_INCR_ARP_STATS_TX_TGT_DELIVERED; hdd_ctx = gp_cds_context->hdd_context; if (!hdd_ctx) { Loading @@ -2804,14 +2806,15 @@ void cds_incr_arp_stats_tx_tgt_delivered(void) return; } hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter) { hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter, dbgid) { if (adapter->device_mode == QDF_STA_MODE) { dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); if (next_adapter) dev_put(next_adapter->dev); hdd_adapter_dev_put_debug(next_adapter, dbgid); break; } dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); } if (adapter) Loading @@ -2827,6 +2830,8 @@ void cds_incr_arp_stats_tx_tgt_acked(void) { struct hdd_context *hdd_ctx; struct hdd_adapter *adapter, *next_adapter = NULL; wlan_net_dev_ref_dbgid dbgid = NET_DEV_HOLD_CDS_INCR_ARP_STATS_TX_TGT_ACKED; hdd_ctx = gp_cds_context->hdd_context; if (!hdd_ctx) { Loading @@ -2834,14 +2839,15 @@ void cds_incr_arp_stats_tx_tgt_acked(void) return; } hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter) { hdd_for_each_adapter_dev_held_safe(hdd_ctx, adapter, next_adapter, dbgid) { if (adapter->device_mode == QDF_STA_MODE) { dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); if (next_adapter) dev_put(next_adapter->dev); hdd_adapter_dev_put_debug(next_adapter, dbgid); break; } dev_put(adapter->dev); hdd_adapter_dev_put_debug(adapter, dbgid); } if (adapter) Loading
core/dp/txrx/ol_rx_defrag.c +2 −2 Original line number Diff line number Diff line /* * Copyright (c) 2011-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2011-2019,2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the Loading Loading @@ -868,7 +868,7 @@ ol_rx_frag_tkip_demic(ol_txrx_pdev_handle pdev, const uint8_t *key, ol_rx_defrag_copydata(msdu, pktlen - f_tkip.ic_miclen + rx_desc_len, f_tkip.ic_miclen, (caddr_t) mic0); if (!qdf_mem_cmp(mic, mic0, f_tkip.ic_miclen)) if (qdf_mem_cmp(mic, mic0, f_tkip.ic_miclen)) return OL_RX_DEFRAG_ERR; qdf_nbuf_trim_tail(msdu, f_tkip.ic_miclen); Loading