From patchwork Wed Oct 5 08:31:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 12999036 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5CCC5C433F5 for ; Wed, 5 Oct 2022 08:32:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230009AbiJEIcn (ORCPT ); Wed, 5 Oct 2022 04:32:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230006AbiJEIck (ORCPT ); Wed, 5 Oct 2022 04:32:40 -0400 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DA42171BE1 for ; Wed, 5 Oct 2022 01:32:39 -0700 (PDT) Received: by mail-pj1-x102b.google.com with SMTP id a5-20020a17090aa50500b002008eeb040eso2623150pjq.1 for ; Wed, 05 Oct 2022 01:32:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date; bh=KYs5i1UtSKwff4LZqDYKTEYs6XamWF2jUJRPKUQ5EPA=; b=BNpQVvhEgCIekoG+t0cPqZeXurSlQZRXpEwPW8enJ92DBNA0QI4277kT1cO1fEJR/0 b3GLCRn3d3x34ITuilfh48b1uO2erhW6yFJlzyj6F+puarqJPa0G7TQtEz308oFKzkMi DTNWQc6KBRHqjUVKmtk+dcsjciI3D6zVRGM98= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date; bh=KYs5i1UtSKwff4LZqDYKTEYs6XamWF2jUJRPKUQ5EPA=; b=1TE+jzS2Kibnpof8/vUlrppSERcrcQ2nvqbvhd8CcOdGFD1ea/ivxisjxeshuiMuVu tHwToQnQZRtUqZ0jmLdFgOGJRiNs88JEhz5Z+vFcvvRF+6NXH0tJZ4KHJrhNpkzETLhK NbUftrF7H/CTam1yx0CTOyV6lbAkR8sKkZdP0i52kt+MwlIh3krl1eoBYI/T/RftMNLz KwqBJlYyP0PaDAhBwnYZSW15COypQ5O1H/oKBYW2ei7UNZwHXWFba2aIjnzgb5Yo77ao mhhrBqb4L0g/QNGX25gVWlVysFJWRfByig/ldp5giEWbJnA4KvKFaLRWfb+ZNmT4yWGe 783A== X-Gm-Message-State: ACrzQf0PxLEeSVUvKCoRdtnh4+LJhl37QEZfCsB7GKg+D1h64tXx/Dq1 GUueVQIF4GbuCIXHzuwKM6MDDg== X-Google-Smtp-Source: AMsMyM5uvV2N+z8o7Lps/R5jdrkwdk2pbiCEvdcvFm3zqeAqi/0UM8OGHPa6MZ/YEzKEVyK9Rq3/Vw== X-Received: by 2002:a17:90a:ea95:b0:20a:f65b:143b with SMTP id h21-20020a17090aea9500b0020af65b143bmr167924pjz.230.1664958759422; Wed, 05 Oct 2022 01:32:39 -0700 (PDT) Received: from localhost.localdomain (c-73-223-190-181.hsd1.ca.comcast.net. [73.223.190.181]) by smtp.gmail.com with ESMTPSA id jj9-20020a170903048900b0017ec1b1bf9fsm5899320plb.217.2022.10.05.01.32.38 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Oct 2022 01:32:39 -0700 (PDT) From: Joe Damato To: intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, anthony.l.nguyen@intel.com, jesse.brandeburg@intel.com, Joe Damato Subject: [next-queue 1/3] i40e: Store the irq number in i40e_q_vector Date: Wed, 5 Oct 2022 01:31:41 -0700 Message-Id: <1664958703-4224-2-git-send-email-jdamato@fastly.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1664958703-4224-1-git-send-email-jdamato@fastly.com> References: <1664958703-4224-1-git-send-email-jdamato@fastly.com> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Make it easy to figure out the IRQ number for a particular i40e_q_vector by storing the assigned IRQ in the structure itself. Signed-off-by: Joe Damato --- drivers/net/ethernet/intel/i40e/i40e.h | 1 + drivers/net/ethernet/intel/i40e/i40e_main.c | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h index 9926c4e..8e1f395 100644 --- a/drivers/net/ethernet/intel/i40e/i40e.h +++ b/drivers/net/ethernet/intel/i40e/i40e.h @@ -992,6 +992,7 @@ struct i40e_q_vector { struct rcu_head rcu; /* to avoid race with update stats on free */ char name[I40E_INT_NAME_STR_LEN]; bool arm_wb_state; + int irq_num; /* IRQ assigned to this q_vector */ } ____cacheline_internodealigned_in_smp; /* lan device */ diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c index 6b7535a..6efe130 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c @@ -4123,6 +4123,7 @@ static int i40e_vsi_request_irq_msix(struct i40e_vsi *vsi, char *basename) } /* register for affinity change notifications */ + q_vector->irq_num = irq_num; q_vector->affinity_notify.notify = i40e_irq_affinity_notify; q_vector->affinity_notify.release = i40e_irq_affinity_release; irq_set_affinity_notifier(irq_num, &q_vector->affinity_notify); From patchwork Wed Oct 5 08:31:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 12999037 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E46A1C43219 for ; Wed, 5 Oct 2022 08:32:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230036AbiJEIco (ORCPT ); Wed, 5 Oct 2022 04:32:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60536 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230004AbiJEIcm (ORCPT ); Wed, 5 Oct 2022 04:32:42 -0400 Received: from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com [IPv6:2607:f8b0:4864:20::1031]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 264926D563 for ; Wed, 5 Oct 2022 01:32:41 -0700 (PDT) Received: by mail-pj1-x1031.google.com with SMTP id x32-20020a17090a38a300b00209dced49cfso1145091pjb.0 for ; Wed, 05 Oct 2022 01:32:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date; bh=5c69IeZzfgTGXU/R5PtSxXzBkuWCA8qXZSyfdvVPThc=; b=L0TCBdGPIONDu+M+x4v6NGulAoiFhyZLsQnUfFRZr1/uzq1c3yxaZ1dVzdpWzySKv8 pRIiox9HBzsKp+XlESc/nv1EpxhvjDtLrSMxCGkPvdpUe3yHHTgrSHX6smI2ayRUAE4G dqPTD6y1eyB3293o2JoIleOzVfuptLQGDeVN8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date; bh=5c69IeZzfgTGXU/R5PtSxXzBkuWCA8qXZSyfdvVPThc=; b=ycXttoOHx3vqOM8G/MmZKDjVYB3pQBmxHKjACMnflgctGs7JbKoMUP0XUchifSgaDW 4kaIvOnC30zRcNMTKGwS292v6QpdPiF+wYxn25qdgtIjoZOCLw/BnixjeXIqaki+SByo vdXyZSftvVO6hg4SiVflTkEBuiVm9QGl0ubQVmim388YvDguKISt9mLFfcpttXw5NLL8 cXuFwJo9I0i0TmUw+ydz7ioBTjml0Eo58W0wOapI7MI+xc3sAp8eC3rpMnQP5jBUz8ZC ZP8CVj1iVNt0WeYGnivDN0q7D3OG8iGANiDnQiWSy8CtZnN+l+1YHCp+vVN48DqZpJm4 oscg== X-Gm-Message-State: ACrzQf24ydZeKDn38mBttLwMIB8GvOMtn3+Fe9MDg/SjK590V9gDg86O SgOezWTwC8DkVwVJXzA/n+2lzQ== X-Google-Smtp-Source: AMsMyM5UeKKnC3PGanLBov9NeVY79Ss7qMxRT/gIE5zVzi9U8iCKOISbqaBnpa6GtqdJxMv+Ni151Q== X-Received: by 2002:a17:903:2441:b0:178:4f51:1f78 with SMTP id l1-20020a170903244100b001784f511f78mr30089335pls.82.1664958760583; Wed, 05 Oct 2022 01:32:40 -0700 (PDT) Received: from localhost.localdomain (c-73-223-190-181.hsd1.ca.comcast.net. [73.223.190.181]) by smtp.gmail.com with ESMTPSA id jj9-20020a170903048900b0017ec1b1bf9fsm5899320plb.217.2022.10.05.01.32.39 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Oct 2022 01:32:40 -0700 (PDT) From: Joe Damato To: intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, anthony.l.nguyen@intel.com, jesse.brandeburg@intel.com, Joe Damato Subject: [next-queue 2/3] i40e: i40e_clean_tx_irq returns work done Date: Wed, 5 Oct 2022 01:31:42 -0700 Message-Id: <1664958703-4224-3-git-send-email-jdamato@fastly.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1664958703-4224-1-git-send-email-jdamato@fastly.com> References: <1664958703-4224-1-git-send-email-jdamato@fastly.com> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Adjust i40e_clean_tx_irq to return the actual number of packets cleaned and adjust the logic in i40e_napi_poll to check this value. Signed-off-by: Joe Damato --- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 24 +++++++++++++----------- drivers/net/ethernet/intel/i40e/i40e_xsk.c | 12 ++++++------ drivers/net/ethernet/intel/i40e/i40e_xsk.h | 2 +- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c index b97c95f..ed88309 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c @@ -924,10 +924,10 @@ void i40e_detect_recover_hung(struct i40e_vsi *vsi) * @tx_ring: Tx ring to clean * @napi_budget: Used to determine if we are in netpoll * - * Returns true if there's any budget left (e.g. the clean is finished) + * Returns the number of packets cleaned **/ -static bool i40e_clean_tx_irq(struct i40e_vsi *vsi, - struct i40e_ring *tx_ring, int napi_budget) +static int i40e_clean_tx_irq(struct i40e_vsi *vsi, + struct i40e_ring *tx_ring, int napi_budget) { int i = tx_ring->next_to_clean; struct i40e_tx_buffer *tx_buf; @@ -1026,7 +1026,7 @@ static bool i40e_clean_tx_irq(struct i40e_vsi *vsi, i40e_arm_wb(tx_ring, vsi, budget); if (ring_is_xdp(tx_ring)) - return !!budget; + return total_packets; /* notify netdev of completed buffers */ netdev_tx_completed_queue(txring_txq(tx_ring), @@ -1048,7 +1048,7 @@ static bool i40e_clean_tx_irq(struct i40e_vsi *vsi, } } - return !!budget; + return total_packets; } /** @@ -2689,10 +2689,12 @@ int i40e_napi_poll(struct napi_struct *napi, int budget) container_of(napi, struct i40e_q_vector, napi); struct i40e_vsi *vsi = q_vector->vsi; struct i40e_ring *ring; + bool tx_clean_complete = true; bool clean_complete = true; bool arm_wb = false; int budget_per_ring; int work_done = 0; + int tx_wd = 0; if (test_bit(__I40E_VSI_DOWN, vsi->state)) { napi_complete(napi); @@ -2703,12 +2705,12 @@ int i40e_napi_poll(struct napi_struct *napi, int budget) * budget and be more aggressive about cleaning up the Tx descriptors. */ i40e_for_each_ring(ring, q_vector->tx) { - bool wd = ring->xsk_pool ? - i40e_clean_xdp_tx_irq(vsi, ring) : - i40e_clean_tx_irq(vsi, ring, budget); + tx_wd = ring->xsk_pool ? + i40e_clean_xdp_tx_irq(vsi, ring) : + i40e_clean_tx_irq(vsi, ring, budget); - if (!wd) { - clean_complete = false; + if (tx_wd >= budget) { + tx_clean_complete = false; continue; } arm_wb |= ring->arm_wb; @@ -2742,7 +2744,7 @@ int i40e_napi_poll(struct napi_struct *napi, int budget) } /* If work not completed, return budget and polling will return */ - if (!clean_complete) { + if (!clean_complete || !tx_clean_complete) { int cpu_id = smp_processor_id(); /* It is possible that the interrupt affinity has changed but, diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c index 790aaeff..925682c 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c +++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c @@ -531,9 +531,9 @@ static void i40e_set_rs_bit(struct i40e_ring *xdp_ring) * @xdp_ring: XDP Tx ring * @budget: NAPI budget * - * Returns true if the work is finished. + * Returns number of packets cleaned **/ -static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget) +static int i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget) { struct xdp_desc *descs = xdp_ring->xsk_pool->tx_descs; u32 nb_pkts, nb_processed = 0; @@ -541,7 +541,7 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget) nb_pkts = xsk_tx_peek_release_desc_batch(xdp_ring->xsk_pool, budget); if (!nb_pkts) - return true; + return 0; if (xdp_ring->next_to_use + nb_pkts >= xdp_ring->count) { nb_processed = xdp_ring->count - xdp_ring->next_to_use; @@ -558,7 +558,7 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget) i40e_update_tx_stats(xdp_ring, nb_pkts, total_bytes); - return nb_pkts < budget; + return nb_pkts; } /** @@ -582,9 +582,9 @@ static void i40e_clean_xdp_tx_buffer(struct i40e_ring *tx_ring, * @vsi: Current VSI * @tx_ring: XDP Tx ring * - * Returns true if cleanup/tranmission is done. + * Returns number of packets cleaned **/ -bool i40e_clean_xdp_tx_irq(struct i40e_vsi *vsi, struct i40e_ring *tx_ring) +int i40e_clean_xdp_tx_irq(struct i40e_vsi *vsi, struct i40e_ring *tx_ring) { struct xsk_buff_pool *bp = tx_ring->xsk_pool; u32 i, completed_frames, xsk_frames = 0; diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.h b/drivers/net/ethernet/intel/i40e/i40e_xsk.h index 821df24..4e810c2 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_xsk.h +++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.h @@ -30,7 +30,7 @@ int i40e_xsk_pool_setup(struct i40e_vsi *vsi, struct xsk_buff_pool *pool, bool i40e_alloc_rx_buffers_zc(struct i40e_ring *rx_ring, u16 cleaned_count); int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int budget); -bool i40e_clean_xdp_tx_irq(struct i40e_vsi *vsi, struct i40e_ring *tx_ring); +int i40e_clean_xdp_tx_irq(struct i40e_vsi *vsi, struct i40e_ring *tx_ring); int i40e_xsk_wakeup(struct net_device *dev, u32 queue_id, u32 flags); int i40e_realloc_rx_bi_zc(struct i40e_vsi *vsi, bool zc); void i40e_clear_rx_bi_zc(struct i40e_ring *rx_ring); From patchwork Wed Oct 5 08:31:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Damato X-Patchwork-Id: 12999038 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D3D06C433F5 for ; Wed, 5 Oct 2022 08:32:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230037AbiJEIcp (ORCPT ); Wed, 5 Oct 2022 04:32:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230006AbiJEIcn (ORCPT ); Wed, 5 Oct 2022 04:32:43 -0400 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 52A2E6D9E5 for ; Wed, 5 Oct 2022 01:32:42 -0700 (PDT) Received: by mail-pj1-x102a.google.com with SMTP id lx7so15019897pjb.0 for ; Wed, 05 Oct 2022 01:32:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fastly.com; s=google; h=references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date; bh=bJlYpEHuGteSJYoWYcuqwtV+VIvtgUlEz8rUGsVoQjk=; b=wL1DDtBFmuHQUdMOTWtEGr0NdsA1syEXxHDCRSlaru+nrpvnw2185xhFEOryfFV6PE tOSy/dhkvaGgyBx3uq9EijGtk4UmLdlVfGfKGvGvqESqHPlfU3pjKF1KE0D2HS2AuXVu u7xCv/30ioB94QCjdL1B8zHa1TnRVTe8lP/CU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=references:in-reply-to:message-id:date:subject:cc:to:from :x-gm-message-state:from:to:cc:subject:date; bh=bJlYpEHuGteSJYoWYcuqwtV+VIvtgUlEz8rUGsVoQjk=; b=hGXS0Yqk3rtpywVWwvQZSeRdW4A+uiXcZJT+M31VQJKTBm1x2VmPUuVb/f3gz1GMNw HzP2ty29DmPiSZn3LGV2hNgUkonvJUFv3GNx+wDI0XEjx7AhmuGC3cfTWszlj7nBJniM GOPcajwzEkI9Lfv7DfP3ojy/Hg5G9GSoTdSdxBARXo4FVSq6lR58fXdvAg2gF9M+J7BI c7bZb9+yIOoKoBuf83bQzTUgaVxhFX4z4lodJzSySdy0lnYEOc417p2ez6MiSBwgqEc3 3oB/U/j4o+FbJQAQBYH+1GEyNXOuBAz4UpojZVXW3dpxRKx4J7LqLkKJBk7mZ7rei0mc zS/Q== X-Gm-Message-State: ACrzQf2sPwgU0pZK2EdtXm7Mj1eHQBhYHbvvGIL0bdJPf6WyiS0nSJcc BltLt/pDScnKk/FF6ba1qhGh0mUCj0KrGw== X-Google-Smtp-Source: AMsMyM4e1IgzBSwzbAN1NcOz9z3wDCw8ret5SbCIH1oL8oONRg/y/frZr3ZBmUJdWAEWfiRySb0Obg== X-Received: by 2002:a17:902:6546:b0:17f:7888:58b with SMTP id d6-20020a170902654600b0017f7888058bmr5318982pln.140.1664958761819; Wed, 05 Oct 2022 01:32:41 -0700 (PDT) Received: from localhost.localdomain (c-73-223-190-181.hsd1.ca.comcast.net. [73.223.190.181]) by smtp.gmail.com with ESMTPSA id jj9-20020a170903048900b0017ec1b1bf9fsm5899320plb.217.2022.10.05.01.32.40 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Oct 2022 01:32:41 -0700 (PDT) From: Joe Damato To: intel-wired-lan@lists.osuosl.org Cc: netdev@vger.kernel.org, kuba@kernel.org, davem@davemloft.net, anthony.l.nguyen@intel.com, jesse.brandeburg@intel.com, Joe Damato Subject: [next-queue 3/3] i40e: Add i40e_napi_poll tracepoint Date: Wed, 5 Oct 2022 01:31:43 -0700 Message-Id: <1664958703-4224-4-git-send-email-jdamato@fastly.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1664958703-4224-1-git-send-email-jdamato@fastly.com> References: <1664958703-4224-1-git-send-email-jdamato@fastly.com> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Add a tracepoint for i40e_napi_poll that allows users to get detailed information about the amount of work done. This information can help users better tune the correct NAPI parameters (like weight and budget), as well as debug NIC settings like rx-usecs and tx-usecs, etc. An example of the output from this tracepoint: [...snip...] 1029.268 :0/0 i40e:i40e_napi_poll(i40e_napi_poll on dev eth1 q i40e-eth1-TxRx-30 irq 172 irq_mask 00000000,00000000,00000000,00000010,00000000,00000000 curr_cpu 68 budget 64 bpr 64 work_done 0 tx_work_done 2 clean_complete 1 tx_clean_complete 1) i40e_napi_poll ([i40e]) i40e_napi_poll ([i40e]) __napi_poll ([kernel.kallsyms]) net_rx_action ([kernel.kallsyms]) __do_softirq ([kernel.kallsyms]) common_interrupt ([kernel.kallsyms]) asm_common_interrupt ([kernel.kallsyms]) intel_idle_irq ([kernel.kallsyms]) cpuidle_enter_state ([kernel.kallsyms]) cpuidle_enter ([kernel.kallsyms]) do_idle ([kernel.kallsyms]) cpu_startup_entry ([kernel.kallsyms]) [0x243fd8] ([kernel.kallsyms]) secondary_startup_64_no_verify ([kernel.kallsyms]) Signed-off-by: Joe Damato --- drivers/net/ethernet/intel/i40e/i40e_trace.h | 50 ++++++++++++++++++++++++++++ drivers/net/ethernet/intel/i40e/i40e_txrx.c | 3 ++ 2 files changed, 53 insertions(+) diff --git a/drivers/net/ethernet/intel/i40e/i40e_trace.h b/drivers/net/ethernet/intel/i40e/i40e_trace.h index b5b1229..779d046 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_trace.h +++ b/drivers/net/ethernet/intel/i40e/i40e_trace.h @@ -55,6 +55,56 @@ * being built from shared code. */ +#define NO_DEV "(i40e no_device)" + +TRACE_EVENT(i40e_napi_poll, + + TP_PROTO(struct napi_struct *napi, struct i40e_q_vector *q, int budget, + int budget_per_ring, int work_done, int tx_work_done, bool clean_complete, + bool tx_clean_complete), + + TP_ARGS(napi, q, budget, budget_per_ring, work_done, tx_work_done, + clean_complete, tx_clean_complete), + + TP_STRUCT__entry( + __field(int, budget) + __field(int, budget_per_ring) + __field(int, work_done) + __field(int, tx_work_done) + __field(int, clean_complete) + __field(int, tx_clean_complete) + __field(int, irq_num) + __field(int, curr_cpu) + __string(qname, q->name) + __string(dev_name, napi->dev ? napi->dev->name : NO_DEV) + __bitmask(irq_affinity, nr_cpumask_bits) + ), + + TP_fast_assign( + __entry->budget = budget; + __entry->budget_per_ring = budget_per_ring; + __entry->work_done = work_done; + __entry->tx_work_done = tx_work_done; + __entry->clean_complete = clean_complete; + __entry->tx_clean_complete = tx_clean_complete; + __entry->irq_num = q->irq_num; + __entry->curr_cpu = get_cpu(); + __assign_str(qname, q->name); + __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV); + __assign_bitmask(irq_affinity, cpumask_bits(&q->affinity_mask), + nr_cpumask_bits); + ), + + TP_printk("i40e_napi_poll on dev %s q %s irq %d irq_mask %s curr_cpu %d " + "budget %d bpr %d work_done %d tx_work_done %d " + "clean_complete %d tx_clean_complete %d", + __get_str(dev_name), __get_str(qname), __entry->irq_num, + __get_bitmask(irq_affinity), __entry->curr_cpu, __entry->budget, + __entry->budget_per_ring, __entry->work_done, + __entry->tx_work_done, + __entry->clean_complete, __entry->tx_clean_complete) +); + /* Events related to a vsi & ring */ DECLARE_EVENT_CLASS( i40e_tx_template, diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c index ed88309..8b72f1b 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c @@ -2743,6 +2743,9 @@ int i40e_napi_poll(struct napi_struct *napi, int budget) clean_complete = false; } + trace_i40e_napi_poll(napi, q_vector, budget, budget_per_ring, work_done, tx_wd, + clean_complete, tx_clean_complete); + /* If work not completed, return budget and polling will return */ if (!clean_complete || !tx_clean_complete) { int cpu_id = smp_processor_id();