]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
gve: Check TX QPL was actually assigned
authorCatherine Sullivan <csully@google.com>
Mon, 17 May 2021 21:08:11 +0000 (14:08 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Jun 2021 06:59:14 +0000 (08:59 +0200)
[ Upstream commit 5aec55b46c6238506cdf0c60cd0e42ab77a1e5e0 ]

Correctly check the TX QPL was assigned and unassigned if
other steps in the allocation fail.

Fixes: f5cedc84a30d (gve: Add transmit and receive support)
Signed-off-by: Catherine Sullivan <csully@google.com>
Signed-off-by: David Awogbemila <awogbemila@google.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/google/gve/gve_tx.c

index d0244feb030118e857ec44155128133322c3272a..30532ee28dd3a9e5f845b52db22a98aba8e4b023 100644 (file)
@@ -207,10 +207,12 @@ static int gve_tx_alloc_ring(struct gve_priv *priv, int idx)
                goto abort_with_info;
 
        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 =
                dma_alloc_coherent(hdev,
@@ -229,6 +231,8 @@ static int gve_tx_alloc_ring(struct gve_priv *priv, int idx)
 
 abort_with_fifo:
        gve_tx_fifo_release(priv, &tx->tx_fifo);
+abort_with_qpl:
+       gve_unassign_qpl(priv, tx->tx_fifo.qpl->id);
 abort_with_desc:
        dma_free_coherent(hdev, bytes, tx->desc, tx->bus);
        tx->desc = NULL;