diff options
| author | Mukul Sharma <mukul@codeaurora.org> | 2016-09-12 15:39:00 +0530 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-21 17:05:09 -0700 |
| commit | c4de4ef6f83b3a975e31cf4086f261edd21d5bcf (patch) | |
| tree | 0a3e35535174bd5b430962f830c03288d8392ea4 | |
| parent | 5ff3c587fb2ea872ad9f7495d0aab72baf3fc19c (diff) | |
qcacld-3.0: Add SSR protect for ndo hard_start_xmit ops
qcacld-2.0 to qcacld-3.0 propagation
SSR should wait until ndo hard_start_xmit ops is completed.
Change-Id: Ic3148cfb655f87d22c40bca7825809648c7b4b4a
CRs-Fixed: 952660
| -rw-r--r-- | core/hdd/src/wlan_hdd_softap_tx_rx.c | 25 | ||||
| -rw-r--r-- | core/hdd/src/wlan_hdd_tx_rx.c | 25 |
2 files changed, 46 insertions, 4 deletions
diff --git a/core/hdd/src/wlan_hdd_softap_tx_rx.c b/core/hdd/src/wlan_hdd_softap_tx_rx.c index 8781ca73703f..2923e7d209e9 100644 --- a/core/hdd/src/wlan_hdd_softap_tx_rx.c +++ b/core/hdd/src/wlan_hdd_softap_tx_rx.c @@ -201,7 +201,7 @@ void hdd_softap_tx_resume_cb(void *adapter_context, bool tx_resume) #endif /* QCA_LL_LEGACY_TX_FLOW_CONTROL */ /** - * hdd_softap_hard_start_xmit() - Transmit a frame + * __hdd_softap_hard_start_xmit() - Transmit a frame * @skb: pointer to OS packet (sk_buff) * @dev: pointer to network device * @@ -211,7 +211,7 @@ void hdd_softap_tx_resume_cb(void *adapter_context, bool tx_resume) * * Return: Always returns NETDEV_TX_OK */ -int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +int __hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { sme_ac_enum_type ac = SME_AC_BE; hdd_adapter_t *pAdapter = (hdd_adapter_t *) netdev_priv(dev); @@ -372,6 +372,27 @@ drop_pkt_accounting: } /** + * hdd_softap_hard_start_xmit() - Wrapper function to protect + * __hdd_softap_hard_start_xmit from SSR + * @skb: pointer to OS packet + * @dev: pointer to net_device structure + * + * Function called by OS if any packet needs to transmit. + * + * Return: Always returns NETDEV_TX_OK + */ +int hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + int ret; + + cds_ssr_protect(__func__); + ret = __hdd_softap_hard_start_xmit(skb, dev); + cds_ssr_unprotect(__func__); + + return ret; +} + +/** * __hdd_softap_tx_timeout() - TX timeout handler * @dev: pointer to network device * diff --git a/core/hdd/src/wlan_hdd_tx_rx.c b/core/hdd/src/wlan_hdd_tx_rx.c index 0ce649b5149e..29c79e6c2c71 100644 --- a/core/hdd/src/wlan_hdd_tx_rx.c +++ b/core/hdd/src/wlan_hdd_tx_rx.c @@ -387,7 +387,7 @@ static void hdd_get_transmit_sta_id(hdd_adapter_t *adapter, } /** - * hdd_hard_start_xmit() - Transmit a frame + * __hdd_hard_start_xmit() - Transmit a frame * @skb: pointer to OS packet (sk_buff) * @dev: pointer to network device * @@ -397,7 +397,7 @@ static void hdd_get_transmit_sta_id(hdd_adapter_t *adapter, * * Return: Always returns NETDEV_TX_OK */ -int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { QDF_STATUS status; sme_ac_enum_type ac; @@ -619,6 +619,27 @@ drop_pkt_accounting: } /** + * hdd_hard_start_xmit() - Wrapper function to protect + * __hdd_hard_start_xmit from SSR + * @skb: pointer to OS packet + * @dev: pointer to net_device structure + * + * Function called by OS if any packet needs to transmit. + * + * Return: Always returns NETDEV_TX_OK + */ +int hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) +{ + int ret; + + cds_ssr_protect(__func__); + ret = __hdd_hard_start_xmit(skb, dev); + cds_ssr_unprotect(__func__); + + return ret; +} + +/** * hdd_get_peer_sta_id() - Get the StationID using the Peer Mac address * @pHddStaCtx: pointer to HDD Station Context * @pMacAddress: pointer to Peer Mac address |
