]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mlxsw: pci: Use napi_consume_skb() to free SKB as part of Tx completion
authorAmit Cohen <amcohen@nvidia.com>
Tue, 18 Jun 2024 11:34:46 +0000 (13:34 +0200)
committerJakub Kicinski <kuba@kernel.org>
Thu, 20 Jun 2024 00:38:11 +0000 (17:38 -0700)
Currently, as part of Tx completion, the driver calls dev_kfree_skb_any()
to free the SKB. For this flow, the correct function is napi_consume_skb().
This function and dev_consume_skb_any() were added to be used for consumed
SKBs, which were not dropped, so the skb:kfree_skb tracepoint is not
triggered, and we can get better diagnostics about dropped packets.

Signed-off-by: Amit Cohen <amcohen@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Signed-off-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Link: https://lore.kernel.org/r/a9f9f3dc884c0d1be4bd4c9d72030c88c7ac004f.1718709196.git.petrm@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlxsw/pci.c

index b530b6a80ab7458677f9793ed52b4059763252f0..cb043379c01c7c77def9542c5e2d5b705b9976c3 100644 (file)
@@ -541,7 +541,7 @@ static void mlxsw_pci_cqe_sdq_handle(struct mlxsw_pci *mlxsw_pci,
                                     struct mlxsw_pci_queue *q,
                                     u16 consumer_counter_limit,
                                     enum mlxsw_pci_cqe_v cqe_v,
-                                    char *cqe)
+                                    char *cqe, int budget)
 {
        struct pci_dev *pdev = mlxsw_pci->pdev;
        struct mlxsw_pci_queue_elem_info *elem_info;
@@ -567,7 +567,7 @@ static void mlxsw_pci_cqe_sdq_handle(struct mlxsw_pci *mlxsw_pci,
        }
 
        if (skb)
-               dev_kfree_skb_any(skb);
+               napi_consume_skb(skb, budget);
        elem_info->sdq.skb = NULL;
 
        if (q->consumer_counter++ != consumer_counter_limit)
@@ -819,7 +819,7 @@ static int mlxsw_pci_napi_poll_cq_tx(struct napi_struct *napi, int budget)
                mlxsw_pci_queue_doorbell_consumer_ring(mlxsw_pci, q);
 
                mlxsw_pci_cqe_sdq_handle(mlxsw_pci, sdq,
-                                        wqe_counter, q->u.cq.v, ncqe);
+                                        wqe_counter, q->u.cq.v, ncqe, budget);
 
                work_done++;
        }