|
@@ -765,7 +765,7 @@ static int ath10k_pci_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
|
|
|
unsigned int nentries_mask;
|
|
|
unsigned int sw_index;
|
|
|
unsigned int write_index;
|
|
|
- int err, i;
|
|
|
+ int err, i = 0;
|
|
|
|
|
|
spin_lock_bh(&ar_pci->ce_lock);
|
|
|
|
|
@@ -776,7 +776,7 @@ static int ath10k_pci_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
|
|
|
if (unlikely(CE_RING_DELTA(nentries_mask,
|
|
|
write_index, sw_index - 1) < n_items)) {
|
|
|
err = -ENOBUFS;
|
|
|
- goto unlock;
|
|
|
+ goto err;
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < n_items - 1; i++) {
|
|
@@ -793,7 +793,7 @@ static int ath10k_pci_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
|
|
|
items[i].transfer_id,
|
|
|
CE_SEND_FLAG_GATHER);
|
|
|
if (err)
|
|
|
- goto unlock;
|
|
|
+ goto err;
|
|
|
}
|
|
|
|
|
|
/* `i` is equal to `n_items -1` after for() */
|
|
@@ -811,10 +811,15 @@ static int ath10k_pci_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
|
|
|
items[i].transfer_id,
|
|
|
0);
|
|
|
if (err)
|
|
|
- goto unlock;
|
|
|
+ goto err;
|
|
|
+
|
|
|
+ spin_unlock_bh(&ar_pci->ce_lock);
|
|
|
+ return 0;
|
|
|
+
|
|
|
+err:
|
|
|
+ for (; i > 0; i--)
|
|
|
+ __ath10k_ce_send_revert(ce_pipe);
|
|
|
|
|
|
- err = 0;
|
|
|
-unlock:
|
|
|
spin_unlock_bh(&ar_pci->ce_lock);
|
|
|
return err;
|
|
|
}
|