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:

cometido por
nshrivas

ascendente
ca3b3b03fe
cometimento
146c50d37f
@@ -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_ */
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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_ */
|
||||
|
@@ -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);
|
||||
}
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador