summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMukul Sharma <mukul@codeaurora.org>2016-09-12 15:39:00 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2016-09-21 17:05:09 -0700
commitc4de4ef6f83b3a975e31cf4086f261edd21d5bcf (patch)
tree0a3e35535174bd5b430962f830c03288d8392ea4
parent5ff3c587fb2ea872ad9f7495d0aab72baf3fc19c (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.c25
-rw-r--r--core/hdd/src/wlan_hdd_tx_rx.c25
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