* [PATCH net 1/3] gve: Correct available tx qpl check
@ 2021-10-05 23:28 Jeroen de Borst
2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Jeroen de Borst @ 2021-10-05 23:28 UTC (permalink / raw)
To: netdev; +Cc: davem, kuba, Catherine Sullivan, Jeroen de Borst
From: Catherine Sullivan <csully@google.com>
The qpl_map_size is rounded up to a multiple of sizeof(long), but the
number of qpls doesn't have to be.
Fixes: f5cedc84a30d2 ("gve: Add transmit and receive support")
Signed-off-by: Catherine Sullivan <csully@google.com>
Signed-off-by: Jeroen de Borst <jeroendb@google.com>
---
drivers/net/ethernet/google/gve/gve.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h
index 1d3188e8e3b3..92dc18a4bcc4 100644
--- a/drivers/net/ethernet/google/gve/gve.h
+++ b/drivers/net/ethernet/google/gve/gve.h
@@ -780,7 +780,7 @@ struct gve_queue_page_list *gve_assign_rx_qpl(struct gve_priv *priv)
gve_num_tx_qpls(priv));
/* we are out of rx qpls */
- if (id == priv->qpl_cfg.qpl_map_size)
+ if (id == gve_num_tx_qpls(priv) + gve_num_rx_qpls(priv))
return NULL;
set_bit(id, priv->qpl_cfg.qpl_id_map);
--
2.33.0.800.g4c38ced690-goog
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH net 2/3] gve: Avoid freeing NULL pointer 2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst @ 2021-10-05 23:28 ` Jeroen de Borst 2021-10-05 23:28 ` [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl Jeroen de Borst 2021-10-06 1:18 ` [PATCH net 1/3] gve: Correct available tx qpl check Jakub Kicinski 2 siblings, 0 replies; 4+ messages in thread From: Jeroen de Borst @ 2021-10-05 23:28 UTC (permalink / raw) To: netdev; +Cc: davem, kuba, Tao Liu, Catherine Sully From: Tao Liu <xliutaox@google.com> Prevent possible crashes when cleaning up after unsuccessful initializations. Fixes: 893ce44df5658 ("gve: Add basic driver framework for Compute Engine Virtual NIC") Signed-off-by: Tao Liu <xliutaox@google.com> Signed-off-by: Catherine Sully <csully@google.com> --- drivers/net/ethernet/google/gve/gve_main.c | 27 ++++++++++++++-------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c index 099a2bc5ae67..29c5f994f92e 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -82,6 +82,9 @@ static int gve_alloc_counter_array(struct gve_priv *priv) static void gve_free_counter_array(struct gve_priv *priv) { + if (!priv->counter_array) + return; + dma_free_coherent(&priv->pdev->dev, priv->num_event_counters * sizeof(*priv->counter_array), @@ -142,6 +145,9 @@ static int gve_alloc_stats_report(struct gve_priv *priv) static void gve_free_stats_report(struct gve_priv *priv) { + if (!priv->stats_report) + return; + del_timer_sync(&priv->stats_report_timer); dma_free_coherent(&priv->pdev->dev, priv->stats_report_len, priv->stats_report, priv->stats_report_bus); @@ -370,18 +376,19 @@ static void gve_free_notify_blocks(struct gve_priv *priv) { int 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; + if (!priv->msix_vectors) + return; - 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); + /* 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); } + 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); -- 2.33.0.800.g4c38ced690-goog ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl 2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst 2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst @ 2021-10-05 23:28 ` Jeroen de Borst 2021-10-06 1:18 ` [PATCH net 1/3] gve: Correct available tx qpl check Jakub Kicinski 2 siblings, 0 replies; 4+ messages in thread From: Jeroen de Borst @ 2021-10-05 23:28 UTC (permalink / raw) To: netdev; +Cc: davem, kuba, Catherine Sullivan, Jeroen de Borst From: Catherine Sullivan <csully@google.com> Ignored errors would result in crash. Fixes: ede3fcf5ec67f ("gve: Add support for raw addressing to the rx path") Signed-off-by: Catherine Sullivan <csully@google.com> Signed-off-by: Jeroen de Borst <jeroendb@google.com> --- drivers/net/ethernet/google/gve/gve_rx.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/google/gve/gve_rx.c b/drivers/net/ethernet/google/gve/gve_rx.c index bb8261368250..94941d4e4744 100644 --- a/drivers/net/ethernet/google/gve/gve_rx.c +++ b/drivers/net/ethernet/google/gve/gve_rx.c @@ -104,8 +104,14 @@ static int gve_prefill_rx_pages(struct gve_rx_ring *rx) if (!rx->data.page_info) return -ENOMEM; - if (!rx->data.raw_addressing) + if (!rx->data.raw_addressing) { rx->data.qpl = gve_assign_rx_qpl(priv); + if (!rx->data.qpl) { + kvfree(rx->data.page_info); + rx->data.page_info = NULL; + return -ENOMEM; + } + } for (i = 0; i < slots; i++) { if (!rx->data.raw_addressing) { struct page *page = rx->data.qpl->pages[i]; -- 2.33.0.800.g4c38ced690-goog ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH net 1/3] gve: Correct available tx qpl check 2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst 2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst 2021-10-05 23:28 ` [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl Jeroen de Borst @ 2021-10-06 1:18 ` Jakub Kicinski 2 siblings, 0 replies; 4+ messages in thread From: Jakub Kicinski @ 2021-10-06 1:18 UTC (permalink / raw) To: Jeroen de Borst; +Cc: netdev, davem, Catherine Sullivan On Tue, 5 Oct 2021 16:28:21 -0700 Jeroen de Borst wrote: > Fixes: f5cedc84a30d2 ("gve: Add transmit and receive support") > > Signed-off-by: Catherine Sullivan <csully@google.com> > Signed-off-by: Jeroen de Borst <jeroendb@google.com> No empty line between Fixes and the other tags. Please fix & repost. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-10-06 1:18 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-10-05 23:28 [PATCH net 1/3] gve: Correct available tx qpl check Jeroen de Borst 2021-10-05 23:28 ` [PATCH net 2/3] gve: Avoid freeing NULL pointer Jeroen de Borst 2021-10-05 23:28 ` [PATCH net 3/3] gve: Properly handle errors in gve_assign_qpl Jeroen de Borst 2021-10-06 1:18 ` [PATCH net 1/3] gve: Correct available tx qpl check Jakub Kicinski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).