@@ -2064,6 +2064,10 @@ static inline void __wil_update_net_queues(struct wil6210_priv *wil,
wil_dbg_txrx(wil, "check_stop=%d, mid=%d, stopped=%d",
check_stop, vif->mid, vif->net_queue_stopped);
+ if (ring && wil->config.drop_if_ring_full)
+ /* no need to stop/wake net queues */
+ return;
+
if (ring && WIL_Q_PER_STA_USED(vif)) {
__wil_update_net_queues_per_sta(wil, vif, ring, check_stop);
return;
@@ -2227,6 +2231,8 @@ netdev_tx_t wil_start_xmit(struct sk_buff *skb, struct net_device *ndev)
dev_kfree_skb_any(skb);
return NETDEV_TX_OK;
case -ENOMEM:
+ if (wil->config.drop_if_ring_full)
+ goto drop;
return NETDEV_TX_BUSY;
default:
break; /* goto drop; */
@@ -64,6 +64,8 @@ struct wil_platform_config {
u8 ac_queues;
/* enable allocating tx queue(s) per station, default - no */
u8 q_per_sta;
+ /* drop Tx packets in case tx ring is full, default - no */
+ u8 drop_if_ring_full;
};
/**