diff options
Diffstat (limited to 'drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c')
| -rw-r--r-- | drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c | 9 | 
1 files changed, 8 insertions, 1 deletions
| diff --git a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c index 502e72b7cdcc..69131965a298 100644 --- a/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c +++ b/drivers/net/wireless/quantenna/qtnfmac/pearl/pcie.c @@ -661,14 +661,18 @@ static int qtnf_pcie_data_tx(struct qtnf_bus *bus, struct sk_buff *skb)  	struct qtnf_pcie_bus_priv *priv = (void *)get_bus_priv(bus);  	dma_addr_t txbd_paddr, skb_paddr;  	struct qtnf_tx_bd *txbd; +	unsigned long flags;  	int len, i;  	u32 info;  	int ret = 0; +	spin_lock_irqsave(&priv->tx0_lock, flags); +  	if (!qtnf_tx_queue_ready(priv)) {  		if (skb->dev)  			netif_stop_queue(skb->dev); +		spin_unlock_irqrestore(&priv->tx0_lock, flags);  		return NETDEV_TX_BUSY;  	} @@ -717,8 +721,10 @@ tx_done:  		dev_kfree_skb_any(skb);  	} -	qtnf_pcie_data_tx_reclaim(priv);  	priv->tx_done_count++; +	spin_unlock_irqrestore(&priv->tx0_lock, flags); + +	qtnf_pcie_data_tx_reclaim(priv);  	return NETDEV_TX_OK;  } @@ -1247,6 +1253,7 @@ static int qtnf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id)  	strcpy(bus->fwname, QTN_PCI_PEARL_FW_NAME);  	init_completion(&bus->request_firmware_complete);  	mutex_init(&bus->bus_lock); +	spin_lock_init(&pcie_priv->tx0_lock);  	spin_lock_init(&pcie_priv->irq_lock);  	spin_lock_init(&pcie_priv->tx_reclaim_lock); |