1
0

qcacld-3.0: Flush pending ipa pending events

At stop adapter flush vdev's pending wlan ipa events
and also increase the ipa resources load/unload timeout
to 500ms as current timeout of 100ms which is less taking
in to account of suspending IPA pipes, WLAN FW pipes and
also waiting separately for the RX and TX suspend ack from
the FW.

Change-Id: Ia622ab84f15089826c23502f365b11e742277ca8
CRs-Fixed: 2660807
Este cometimento está contido em:
Sravan Goud
2020-04-13 10:43:55 +05:30
cometido por nshrivas
ascendente ca3b3b03fe
cometimento 146c50d37f
8 ficheiros modificados com 94 adições e 3 eliminações

Ver ficheiro

@@ -750,5 +750,16 @@ void wlan_ipa_uc_ssr_cleanup(struct wlan_ipa_priv *ipa_ctx);
*/
void wlan_ipa_fw_rejuvenate_send_msg(struct wlan_ipa_priv *ipa_ctx);
/**
* wlan_ipa_flush_pending_vdev_events() - flush pending vdev ipa events
* @ipa_ctx: IPA context
* vdev_id: vdev id
*
* This function is to flush vdev wlan ipa pending events
*
* Return: None
*/
void wlan_ipa_flush_pending_vdev_events(struct wlan_ipa_priv *ipa_ctx,
uint8_t vdev_id);
#endif /* IPA_OFFLOAD */
#endif /* _WLAN_IPA_CORE_H_ */

Ver ficheiro

@@ -455,11 +455,25 @@ uint32_t ipa_get_tx_buf_count(void);
/**
* ipa_update_tx_stats() - Update embedded tx traffic in bytes to IPA
* @pdev: pdev obj
* @sta_tx: tx in bytes on sta vdev
* @ap_tx: tx in bytes on sap vdev
*
* Return: IPA config tx buffer count
* Return: None
*/
void ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
uint64_t ap_tx);
/**
* ipa_flush_pending_vdev_events() - flush pending vdev wlan ipa events
* @pdev: pdev obj
* @vdev_id: vdev id
*
* Return: None
*/
void ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
#else /* Not IPA_OFFLOAD */
typedef QDF_STATUS (*wlan_ipa_softap_xmit)(qdf_nbuf_t nbuf, qdf_netdev_t dev);
typedef void (*wlan_ipa_send_to_nw)(qdf_nbuf_t nbuf, qdf_netdev_t dev);

Ver ficheiro

@@ -716,7 +716,7 @@ struct wlan_ipa_priv {
#define BW_GET_DIFF(_x, _y) (unsigned long)((ULONG_MAX - (_y)) + (_x) + 1)
#define IPA_RESOURCE_COMP_WAIT_TIME 100
#define IPA_RESOURCE_COMP_WAIT_TIME 500
#ifdef FEATURE_METERING
#define IPA_UC_SHARING_STATES_WAIT_TIME 500

Ver ficheiro

@@ -3749,3 +3749,23 @@ void wlan_ipa_fw_rejuvenate_send_msg(struct wlan_ipa_priv *ipa_ctx)
}
ipa_ctx->stats.num_send_msg++;
}
void wlan_ipa_flush_pending_vdev_events(struct wlan_ipa_priv *ipa_ctx,
uint8_t vdev_id)
{
struct wlan_ipa_uc_pending_event *event;
struct wlan_ipa_uc_pending_event *next_event;
qdf_mutex_acquire(&ipa_ctx->ipa_lock);
qdf_list_for_each_del(&ipa_ctx->pending_event, event, next_event,
node) {
if (event->session_id == vdev_id) {
qdf_list_remove_node(&ipa_ctx->pending_event,
&event->node);
qdf_mem_free(event);
}
}
qdf_mutex_release(&ipa_ctx->ipa_lock);
}

Ver ficheiro

@@ -675,3 +675,20 @@ void ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
wlan_ipa_update_tx_stats(ipa_obj, sta_tx, ap_tx);
}
void ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id)
{
struct wlan_ipa_priv *ipa_obj;
if (!ipa_config_is_enabled())
return;
ipa_obj = ipa_pdev_get_priv_obj(pdev);
if (!ipa_obj) {
ipa_err("IPA object is NULL");
return;
}
wlan_ipa_flush_pending_vdev_events(ipa_obj, vdev_id);
}

Ver ficheiro

@@ -374,7 +374,15 @@ uint32_t ucfg_ipa_get_tx_buf_count(void);
*/
void ucfg_ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
uint64_t ap_tx);
/**
* ucfg_ipa_flush_pending_vdev_events() - flush pending vdev wlan ipa events
* @pdev: pdev obj
* @vdev_id: vdev id
*
* Return: None
*/
void ucfg_ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
#else
static inline bool ucfg_ipa_is_present(void)
@@ -591,5 +599,11 @@ void ucfg_ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
uint64_t ap_tx)
{
}
static inline
void ucfg_ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id)
{
}
#endif /* IPA_OFFLOAD */
#endif /* _WLAN_IPA_UCFG_API_H_ */

Ver ficheiro

@@ -223,3 +223,9 @@ void ucfg_ipa_update_tx_stats(struct wlan_objmgr_pdev *pdev, uint64_t sta_tx,
{
ipa_update_tx_stats(pdev, sta_tx, ap_tx);
}
void ucfg_ipa_flush_pending_vdev_events(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id)
{
ipa_flush_pending_vdev_events(pdev, vdev_id);
}