qcacmn: Tx desc alloc: remove default wakeup action

When the status is FLOW_POOL_ACTIVE_PAUSED, all queues are expected to
be paused. Still some on the fly packet can make it to the driver. In
such a case, the function dp_tx_desc_alloc takes a default action of
WLAN_WAKE_NON_PRIORITY_QUEUE. This is incorrect, since it will wake all
non priority queues, when they should be paused.
Make default action as WLAN_NETIF_ACTION_TYPE_NONE. If this is the
action to be taken, donot call the pause_cb from dp_tx_desc_alloc.

Rate limit log levels in case dp_tx_desc_alloc fails.

Change-Id: I1ef3018e90576d2c3aaa0d10d56e9b155681271b
CRs-Fixed: 2421813
Tento commit je obsažen v:
Mohit Khanna
2019-04-06 22:51:26 -07:00
odevzdal nshrivas
rodič 3d91d4d32c
revize 6d22eeb468
3 změnil soubory, kde provedl 33 přidání a 29 odebrání

Zobrazit soubor

@@ -84,24 +84,25 @@
* @WLAN_STOP_NON_PRIORITY_QUEUE: stop non priority netif queues
*/
enum netif_action_type {
WLAN_NETIF_ACTION_TYPE_NONE = 0,
WLAN_STOP_ALL_NETIF_QUEUE = 1,
WLAN_START_ALL_NETIF_QUEUE,
WLAN_WAKE_ALL_NETIF_QUEUE,
WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER,
WLAN_START_ALL_NETIF_QUEUE_N_CARRIER,
WLAN_NETIF_TX_DISABLE,
WLAN_NETIF_TX_DISABLE_N_CARRIER,
WLAN_NETIF_CARRIER_ON,
WLAN_NETIF_CARRIER_OFF,
WLAN_NETIF_PRIORITY_QUEUE_ON,
WLAN_NETIF_PRIORITY_QUEUE_OFF,
WLAN_NETIF_VO_QUEUE_ON,
WLAN_NETIF_VO_QUEUE_OFF,
WLAN_NETIF_VI_QUEUE_ON,
WLAN_NETIF_VI_QUEUE_OFF,
WLAN_NETIF_BE_BK_QUEUE_OFF,
WLAN_WAKE_NON_PRIORITY_QUEUE,
WLAN_STOP_NON_PRIORITY_QUEUE,
WLAN_START_ALL_NETIF_QUEUE = 2,
WLAN_WAKE_ALL_NETIF_QUEUE = 3,
WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER = 4,
WLAN_START_ALL_NETIF_QUEUE_N_CARRIER = 5,
WLAN_NETIF_TX_DISABLE = 6,
WLAN_NETIF_TX_DISABLE_N_CARRIER = 7,
WLAN_NETIF_CARRIER_ON = 8,
WLAN_NETIF_CARRIER_OFF = 9,
WLAN_NETIF_PRIORITY_QUEUE_ON = 10,
WLAN_NETIF_PRIORITY_QUEUE_OFF = 11,
WLAN_NETIF_VO_QUEUE_ON = 12,
WLAN_NETIF_VO_QUEUE_OFF = 13,
WLAN_NETIF_VI_QUEUE_ON = 14,
WLAN_NETIF_VI_QUEUE_OFF = 15,
WLAN_NETIF_BE_BK_QUEUE_OFF = 16,
WLAN_WAKE_NON_PRIORITY_QUEUE = 17,
WLAN_STOP_NON_PRIORITY_QUEUE = 18,
WLAN_NETIF_ACTION_TYPE_MAX,
};

Zobrazit soubor

@@ -1431,9 +1431,8 @@ static qdf_nbuf_t dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
tx_desc = dp_tx_prepare_desc_single(vdev, nbuf, tx_q->desc_pool_id,
msdu_info, tx_exc_metadata);
if (!tx_desc) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
"%s Tx_desc prepare Fail vdev %pK queue %d",
__func__, vdev, tx_q->desc_pool_id);
dp_err_rl("Tx_desc prepare Fail vdev %pK queue %d",
vdev, tx_q->desc_pool_id);
dp_tx_get_tid(vdev, nbuf, msdu_info);
tid_stats = &pdev->stats.tid_stats.tid_tx_stats[msdu_info->tid];
tid_stats->swdrop_cnt[TX_DESC_ERR]++;

Zobrazit soubor

@@ -217,7 +217,7 @@ dp_tx_desc_alloc(struct dp_soc *soc, uint8_t desc_pool_id)
struct dp_tx_desc_s *tx_desc = NULL;
struct dp_tx_desc_pool_s *pool = &soc->tx_desc[desc_pool_id];
bool is_pause = false;
enum netif_action_type act = WLAN_WAKE_NON_PRIORITY_QUEUE;
enum netif_action_type act = WLAN_NETIF_ACTION_TYPE_NONE;
enum dp_fl_ctrl_threshold level = DP_TH_BE_BK;
if (qdf_likely(pool)) {
@@ -255,18 +255,22 @@ dp_tx_desc_alloc(struct dp_soc *soc, uint8_t desc_pool_id)
level = DP_TH_HI;
pool->status = FLOW_POOL_ACTIVE_PAUSED;
break;
case FLOW_POOL_ACTIVE_PAUSED:
act = WLAN_NETIF_ACTION_TYPE_NONE;
break;
default:
QDF_TRACE(QDF_MODULE_ID_DP,
QDF_TRACE_LEVEL_ERROR,
"%s %d pool is %d status!",
__func__, __LINE__,
dp_err_rl("pool status is %d!",
pool->status);
break;
}
pool->latest_pause_time[level] =
qdf_get_system_timestamp();
soc->pause_cb(desc_pool_id,
act, WLAN_DATA_FLOW_CONTROL);
if (act != WLAN_NETIF_ACTION_TYPE_NONE) {
pool->latest_pause_time[level] =
qdf_get_system_timestamp();
soc->pause_cb(desc_pool_id,
act,
WLAN_DATA_FLOW_CONTROL);
}
}
} else {
pool->pkt_drop_no_desc++;