Merge branch 'gve-fixes'
David Awogbemila says: ==================== GVE bug fixes This patch series includes fixes to some bugs in the gve driver. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
37781fd24f
|
@ -180,7 +180,7 @@ static int gve_napi_poll(struct napi_struct *napi, int budget)
|
|||
/* Double check we have no extra work.
|
||||
* Ensure unmask synchronizes with checking for work.
|
||||
*/
|
||||
dma_rmb();
|
||||
mb();
|
||||
if (block->tx)
|
||||
reschedule |= gve_tx_poll(block, -1);
|
||||
if (block->rx)
|
||||
|
@ -220,6 +220,7 @@ static int gve_alloc_notify_blocks(struct gve_priv *priv)
|
|||
int vecs_left = new_num_ntfy_blks % 2;
|
||||
|
||||
priv->num_ntfy_blks = new_num_ntfy_blks;
|
||||
priv->mgmt_msix_idx = priv->num_ntfy_blks;
|
||||
priv->tx_cfg.max_queues = min_t(int, priv->tx_cfg.max_queues,
|
||||
vecs_per_type);
|
||||
priv->rx_cfg.max_queues = min_t(int, priv->rx_cfg.max_queues,
|
||||
|
@ -300,20 +301,22 @@ static void gve_free_notify_blocks(struct gve_priv *priv)
|
|||
{
|
||||
int i;
|
||||
|
||||
/* Free the irqs */
|
||||
for (i = 0; i < priv->num_ntfy_blks; i++) {
|
||||
struct gve_notify_block *block = &priv->ntfy_blocks[i];
|
||||
int msix_idx = i;
|
||||
if (priv->msix_vectors) {
|
||||
/* Free the irqs */
|
||||
for (i = 0; i < priv->num_ntfy_blks; i++) {
|
||||
struct gve_notify_block *block = &priv->ntfy_blocks[i];
|
||||
int msix_idx = i;
|
||||
|
||||
irq_set_affinity_hint(priv->msix_vectors[msix_idx].vector,
|
||||
NULL);
|
||||
free_irq(priv->msix_vectors[msix_idx].vector, block);
|
||||
irq_set_affinity_hint(priv->msix_vectors[msix_idx].vector,
|
||||
NULL);
|
||||
free_irq(priv->msix_vectors[msix_idx].vector, block);
|
||||
}
|
||||
free_irq(priv->msix_vectors[priv->mgmt_msix_idx].vector, priv);
|
||||
}
|
||||
dma_free_coherent(&priv->pdev->dev,
|
||||
priv->num_ntfy_blks * sizeof(*priv->ntfy_blocks),
|
||||
priv->ntfy_blocks, priv->ntfy_block_bus);
|
||||
priv->ntfy_blocks = NULL;
|
||||
free_irq(priv->msix_vectors[priv->mgmt_msix_idx].vector, priv);
|
||||
pci_disable_msix(priv->pdev);
|
||||
kvfree(priv->msix_vectors);
|
||||
priv->msix_vectors = NULL;
|
||||
|
|
|
@ -212,10 +212,11 @@ static int gve_tx_alloc_ring(struct gve_priv *priv, int idx)
|
|||
tx->dev = &priv->pdev->dev;
|
||||
if (!tx->raw_addressing) {
|
||||
tx->tx_fifo.qpl = gve_assign_tx_qpl(priv);
|
||||
|
||||
if (!tx->tx_fifo.qpl)
|
||||
goto abort_with_desc;
|
||||
/* map Tx FIFO */
|
||||
if (gve_tx_fifo_init(priv, &tx->tx_fifo))
|
||||
goto abort_with_desc;
|
||||
goto abort_with_qpl;
|
||||
}
|
||||
|
||||
tx->q_resources =
|
||||
|
@ -236,6 +237,9 @@ static int gve_tx_alloc_ring(struct gve_priv *priv, int idx)
|
|||
abort_with_fifo:
|
||||
if (!tx->raw_addressing)
|
||||
gve_tx_fifo_release(priv, &tx->tx_fifo);
|
||||
abort_with_qpl:
|
||||
if (!tx->raw_addressing)
|
||||
gve_unassign_qpl(priv, tx->tx_fifo.qpl->id);
|
||||
abort_with_desc:
|
||||
dma_free_coherent(hdev, bytes, tx->desc, tx->bus);
|
||||
tx->desc = NULL;
|
||||
|
@ -589,7 +593,7 @@ netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev)
|
|||
struct gve_tx_ring *tx;
|
||||
int nsegs;
|
||||
|
||||
WARN(skb_get_queue_mapping(skb) > priv->tx_cfg.num_queues,
|
||||
WARN(skb_get_queue_mapping(skb) >= priv->tx_cfg.num_queues,
|
||||
"skb queue index out of range");
|
||||
tx = &priv->tx[skb_get_queue_mapping(skb)];
|
||||
if (unlikely(gve_maybe_stop_tx(tx, skb))) {
|
||||
|
|
Loading…
Reference in New Issue