From patchwork Wed Nov 16 18:17:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeroen de Borst X-Patchwork-Id: 13045624 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 DB2C5C433FE for ; Wed, 16 Nov 2022 18:17:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239130AbiKPSRt (ORCPT ); Wed, 16 Nov 2022 13:17:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55700 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238983AbiKPSRd (ORCPT ); Wed, 16 Nov 2022 13:17:33 -0500 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B1A2663BA1 for ; Wed, 16 Nov 2022 10:17:30 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id 186-20020a6301c3000000b0046fa202f720so9833138pgb.20 for ; Wed, 16 Nov 2022 10:17:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=oz6HTb0GmeHKdPOEGIc2FZFneoAch14jOz3al27JPt4=; b=YkDszNNkJDITrWxhFFswWuREWMqc0BcMJWQcWfo3p3i4ZZaAdfHqAXpdQ3oUz3hgbo Voq5+Sf4boQQbpNSqaUvqT9UfNS+Y/mfh2NJXfyxfvilHrMVfZyiOoWWUMijN8h0495k pyu+y9I0Km298KKa3eSE3fCkfv1/crv5vPMUym66fq0HlbJsFQHZSGI8+cNtQAjxCY4Y EQwNjyuvgaMV1F0kBrFjcCkQWTY04IBUTekR2W1y3l/a9YDc8dfYFnYkANWF1kRv0a8W zg8ywhffLcj10KArNIwOEZZSM+xb1oN+SLbVG63VCZB3EtmRYl7A3c6cDvm0OvXYebse J1+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=oz6HTb0GmeHKdPOEGIc2FZFneoAch14jOz3al27JPt4=; b=2jXdV6ZJAnf6gYGRk2mhxvM+3xeD9HFQAJiX9jvx4unMWZD6fMXXWdA5q7gaT6d/Ke 5dEWwgeauPIoYXnVbrZRAZfj/PjwSvICW/DopsJ3MU07TbONeQahJhV6vpEBYxTBqEMR 5/PaAMK6KEVqwvk5UWKkUHaXFvJ4gZyqKJawUwytHFzMJnvvE5UyDwr74XlPZPi1gqLb fFsV3XUM1ahnT37ajG0Z4VZDN6BqK0wIJobPrw2Ut0g7GWVBAjS7sEc1d0m+fVNQMPwy c3AAznVPBJVLR3tz0/GKWENwFWFMR2HgSCsaZqEGV5TcrbSnOL/JLo+byMPPxgxsAq4n /VjA== X-Gm-Message-State: ANoB5pmp5FgBcSHDHiADSOT0p5sfHp+uJFsCjTtrIH9a31k4t047sLcM aVuF+zu/ovyYHxAGUAW3byYc4FRMYi9C/pmmD5rHYcFA3GhJgxEwIWtU33PZuIt/68EnfkJ0YqP LzCIyXiEarMp4bgN69fRW1VgNYPQEtOTLt2pWeJKWeAG/Yk9gx4teZrFsMmUi7p86jqk= X-Google-Smtp-Source: AA0mqf7uK1xXJ/MbPSz2BQF+b4hHBJbTWKHfPThulD1YZCNRT4XbB1eRPIDPgC+15jpdPapXjRGIqnUvvztDyA== X-Received: from jeroendb9128802.sea.corp.google.com ([2620:15c:100:202:131e:f4f:919b:71c5]) (user=jeroendb job=sendgmr) by 2002:a05:6a00:1143:b0:56d:91d1:a903 with SMTP id b3-20020a056a00114300b0056d91d1a903mr24662220pfm.61.1668622650155; Wed, 16 Nov 2022 10:17:30 -0800 (PST) Date: Wed, 16 Nov 2022 10:17:24 -0800 In-Reply-To: <20221116181725.2207544-1-jeroendb@google.com> Mime-Version: 1.0 References: <20221116181725.2207544-1-jeroendb@google.com> X-Mailer: git-send-email 2.38.1.431.g37b22c650d-goog Message-ID: <20221116181725.2207544-2-jeroendb@google.com> Subject: [PATCH net-next v4 1/2] gve: Adding a new AdminQ command to verify driver From: Jeroen de Borst To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, jesse.brandeburg@intel.com, Jeroen de Borst Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Check whether the driver is compatible with the device presented. Signed-off-by: Jeroen de Borst Reviewed-by: Jesse Brandeburg --- drivers/net/ethernet/google/gve/gve.h | 1 + drivers/net/ethernet/google/gve/gve_adminq.c | 19 +++++++ drivers/net/ethernet/google/gve/gve_adminq.h | 49 ++++++++++++++++++ drivers/net/ethernet/google/gve/gve_main.c | 52 ++++++++++++++++++++ 4 files changed, 121 insertions(+) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h index 5655da9cd236..64eb0442c82f 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -563,6 +563,7 @@ struct gve_priv { u32 adminq_report_stats_cnt; u32 adminq_report_link_speed_cnt; u32 adminq_get_ptype_map_cnt; + u32 adminq_verify_driver_compatibility_cnt; /* Global stats */ u32 interface_up_cnt; /* count of times interface turned up since last reset */ diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/ethernet/google/gve/gve_adminq.c index f7621ab672b9..6a12b30a9f87 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -407,6 +407,9 @@ static int gve_adminq_issue_cmd(struct gve_priv *priv, case GVE_ADMINQ_GET_PTYPE_MAP: priv->adminq_get_ptype_map_cnt++; break; + case GVE_ADMINQ_VERIFY_DRIVER_COMPATIBILITY: + priv->adminq_verify_driver_compatibility_cnt++; + break; default: dev_err(&priv->pdev->dev, "unknown AQ command opcode %d\n", opcode); } @@ -878,6 +881,22 @@ int gve_adminq_report_stats(struct gve_priv *priv, u64 stats_report_len, return gve_adminq_execute_cmd(priv, &cmd); } +int gve_adminq_verify_driver_compatibility(struct gve_priv *priv, + u64 driver_info_len, + dma_addr_t driver_info_addr) +{ + union gve_adminq_command cmd; + + memset(&cmd, 0, sizeof(cmd)); + cmd.opcode = cpu_to_be32(GVE_ADMINQ_VERIFY_DRIVER_COMPATIBILITY); + cmd.verify_driver_compatibility = (struct gve_adminq_verify_driver_compatibility) { + .driver_info_len = cpu_to_be64(driver_info_len), + .driver_info_addr = cpu_to_be64(driver_info_addr), + }; + + return gve_adminq_execute_cmd(priv, &cmd); +} + int gve_adminq_report_link_speed(struct gve_priv *priv) { union gve_adminq_command gvnic_cmd; diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/ethernet/google/gve/gve_adminq.h index 83c0b40cd2d9..b9ee8be73f96 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -24,6 +24,7 @@ enum gve_adminq_opcodes { GVE_ADMINQ_REPORT_STATS = 0xC, GVE_ADMINQ_REPORT_LINK_SPEED = 0xD, GVE_ADMINQ_GET_PTYPE_MAP = 0xE, + GVE_ADMINQ_VERIFY_DRIVER_COMPATIBILITY = 0xF, }; /* Admin queue status codes */ @@ -146,6 +147,49 @@ enum gve_sup_feature_mask { #define GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING 0x0 +#define GVE_VERSION_STR_LEN 128 + +enum gve_driver_capbility { + gve_driver_capability_gqi_qpl = 0, + gve_driver_capability_gqi_rda = 1, + gve_driver_capability_dqo_qpl = 2, /* reserved for future use */ + gve_driver_capability_dqo_rda = 3, +}; + +#define GVE_CAP1(a) BIT((int)a) +#define GVE_CAP2(a) BIT(((int)a) - 64) +#define GVE_CAP3(a) BIT(((int)a) - 128) +#define GVE_CAP4(a) BIT(((int)a) - 192) + +#define GVE_DRIVER_CAPABILITY_FLAGS1 \ + (GVE_CAP1(gve_driver_capability_gqi_qpl) | \ + GVE_CAP1(gve_driver_capability_gqi_rda) | \ + GVE_CAP1(gve_driver_capability_dqo_rda)) + +#define GVE_DRIVER_CAPABILITY_FLAGS2 0x0 +#define GVE_DRIVER_CAPABILITY_FLAGS3 0x0 +#define GVE_DRIVER_CAPABILITY_FLAGS4 0x0 + +struct gve_driver_info { + u8 os_type; /* 0x01 = Linux */ + u8 driver_major; + u8 driver_minor; + u8 driver_sub; + __be32 os_version_major; + __be32 os_version_minor; + __be32 os_version_sub; + __be64 driver_capability_flags[4]; + u8 os_version_str1[GVE_VERSION_STR_LEN]; + u8 os_version_str2[GVE_VERSION_STR_LEN]; +}; + +struct gve_adminq_verify_driver_compatibility { + __be64 driver_info_len; + __be64 driver_info_addr; +}; + +static_assert(sizeof(struct gve_adminq_verify_driver_compatibility) == 16); + struct gve_adminq_configure_device_resources { __be64 counter_array; __be64 irq_db_addr; @@ -345,6 +389,8 @@ union gve_adminq_command { struct gve_adminq_report_stats report_stats; struct gve_adminq_report_link_speed report_link_speed; struct gve_adminq_get_ptype_map get_ptype_map; + struct gve_adminq_verify_driver_compatibility + verify_driver_compatibility; }; }; u8 reserved[64]; @@ -372,6 +418,9 @@ int gve_adminq_unregister_page_list(struct gve_priv *priv, u32 page_list_id); int gve_adminq_set_mtu(struct gve_priv *priv, u64 mtu); int gve_adminq_report_stats(struct gve_priv *priv, u64 stats_report_len, dma_addr_t stats_report_addr, u64 interval); +int gve_adminq_verify_driver_compatibility(struct gve_priv *priv, + u64 driver_info_len, + dma_addr_t driver_info_addr); int gve_adminq_report_link_speed(struct gve_priv *priv); struct gve_ptype_lut; diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c index 5a229a01f49d..6a9af9c86ab2 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include #include "gve.h" #include "gve_dqo.h" @@ -30,6 +32,49 @@ const char gve_version_str[] = GVE_VERSION; static const char gve_version_prefix[] = GVE_VERSION_PREFIX; +static int gve_verify_driver_compatibility(struct gve_priv *priv) +{ + int err; + struct gve_driver_info *driver_info; + dma_addr_t driver_info_bus; + + driver_info = dma_alloc_coherent(&priv->pdev->dev, + sizeof(struct gve_driver_info), + &driver_info_bus, GFP_KERNEL); + if (!driver_info) + return -ENOMEM; + + *driver_info = (struct gve_driver_info) { + .os_type = 1, /* Linux */ + .os_version_major = cpu_to_be32(LINUX_VERSION_MAJOR), + .os_version_minor = cpu_to_be32(LINUX_VERSION_SUBLEVEL), + .os_version_sub = cpu_to_be32(LINUX_VERSION_PATCHLEVEL), + .driver_capability_flags = { + cpu_to_be64(GVE_DRIVER_CAPABILITY_FLAGS1), + cpu_to_be64(GVE_DRIVER_CAPABILITY_FLAGS2), + cpu_to_be64(GVE_DRIVER_CAPABILITY_FLAGS3), + cpu_to_be64(GVE_DRIVER_CAPABILITY_FLAGS4), + }, + }; + strscpy(driver_info->os_version_str1, utsname()->release, + sizeof(driver_info->os_version_str1)); + strscpy(driver_info->os_version_str2, utsname()->version, + sizeof(driver_info->os_version_str2)); + + err = gve_adminq_verify_driver_compatibility(priv, + sizeof(struct gve_driver_info), + driver_info_bus); + + /* It's ok if the device doesn't support this */ + if (err == -ENOTSUPP) + err = 0; + + dma_free_coherent(&priv->pdev->dev, + sizeof(struct gve_driver_info), + driver_info, driver_info_bus); + return err; +} + static netdev_tx_t gve_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct gve_priv *priv = netdev_priv(dev); @@ -1368,6 +1413,13 @@ static int gve_init_priv(struct gve_priv *priv, bool skip_describe_device) return err; } + err = gve_verify_driver_compatibility(priv); + if (err) { + dev_err(&priv->pdev->dev, + "Could not verify driver compatibility: err=%d\n", err); + goto err; + } + if (skip_describe_device) goto setup_device; From patchwork Wed Nov 16 18:17:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeroen de Borst X-Patchwork-Id: 13045625 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 52403C4332F for ; Wed, 16 Nov 2022 18:17:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239139AbiKPSRu (ORCPT ); Wed, 16 Nov 2022 13:17:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239082AbiKPSRe (ORCPT ); Wed, 16 Nov 2022 13:17:34 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4242E63BB2 for ; Wed, 16 Nov 2022 10:17:33 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-36810cfa61fso167569297b3.6 for ; Wed, 16 Nov 2022 10:17:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=lTj0ksf4ppybxX4gsUR6ETSTB3xeDENh0IfC2jQuJbc=; b=ZfskacRb9uB3e96hPH9MhM/c1vhF+A+VH1yiFLPZ1ecqvsWh446IM223GR2POMYMM/ rq+P3D5kyRZL+vOVpRXWeQtgUmDtZlX+zYIfxeVQBvytgbNP/Lmbwn8M13DjMwY2f/dr RYw5dtNiDbjGJU1lvrYrn/uRHsuMzTaFzkz2fr5OwlubS721aP1Z7UFSNo2By9qYPjMV Nez8Jx6JVICFK0AQfexKM8zOV593fWCQgVmfP6CIxh1xHeq8aPaET7YG247yYzf7crDW gXTDzZkI6ezEAn2jmuiW6kqMQwKD/RDmcN6i8/Sl+uZDshe7HbxG9951cfdXwOpx0JHu LkXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=lTj0ksf4ppybxX4gsUR6ETSTB3xeDENh0IfC2jQuJbc=; b=ZLWR6w0VT7+uYCpHHHMoKTm3kS7FMs9q+2WBbUOKvvswXiTsrGVA2F3smKqaowspz5 f5QHP5pjPELB5kFti+vh0DGsySMuUGyE83JhXdFTBR6iI5Q4CfKmXb3JiYWTJnZ4+oGf 5k1DZ/nZFui6E+V4vKtBpYLfRb+TDiukmN+Z62Q9orVS0yX/HpNi8mZuIPAXKfwqTRxd MVsN38P+/WOMhMpoEsL2plL0MsjZT31CBnjLEw9LJYp879A4PbGarffV/fT9XeVqiEZt /7zF/bpgyFGgsOn4r1hxpRm9M+JPOt5vgWQOdp+YuxVMpgyit0F74TWH5xhIDWHEIPlc FD9w== X-Gm-Message-State: ACrzQf24OrY4ZNBbAfoN8LR28JH0GlP6yzF8++cTo3xNv7UEkLHuDrWc NfCcsF6SS53NtO5vKWZnko87MBLnHy88E6e0E8kOFaWcUx3u0RQLcLuyu/oAITMtrQQ/Nvy4YA3 Ae7NjxIxD9w//Gg4SVPVzmiqGFPT7irA6FWmAOp4tJAKuxBeOJAF47kByYM7akoAUO/8= X-Google-Smtp-Source: AMsMyM5xXzQfEwMYhlv8X61BFsCRT/+s8TU0Y7d5JcRMmz0MPM45o93sIlnSoBYyoQQMmGRbqK6sR4NigPMBgg== X-Received: from jeroendb9128802.sea.corp.google.com ([2620:15c:100:202:131e:f4f:919b:71c5]) (user=jeroendb job=sendgmr) by 2002:a81:a241:0:b0:373:5ede:1fec with SMTP id z1-20020a81a241000000b003735ede1fecmr41230333ywg.399.1668622651705; Wed, 16 Nov 2022 10:17:31 -0800 (PST) Date: Wed, 16 Nov 2022 10:17:25 -0800 In-Reply-To: <20221116181725.2207544-1-jeroendb@google.com> Mime-Version: 1.0 References: <20221116181725.2207544-1-jeroendb@google.com> X-Mailer: git-send-email 2.38.1.431.g37b22c650d-goog Message-ID: <20221116181725.2207544-3-jeroendb@google.com> Subject: [PATCH net-next v4 2/2] gve: Handle alternate miss completions From: Jeroen de Borst To: netdev@vger.kernel.org Cc: davem@davemloft.net, kuba@kernel.org, jesse.brandeburg@intel.com, Jeroen de Borst Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org The virtual NIC has 2 ways of indicating a miss-path completion. This handles the alternate. Signed-off-by: Jeroen de Borst Reviewed-by: Jesse Brandeburg --- drivers/net/ethernet/google/gve/gve_adminq.h | 4 +++- drivers/net/ethernet/google/gve/gve_desc_dqo.h | 5 +++++ drivers/net/ethernet/google/gve/gve_tx_dqo.c | 18 ++++++++++++------ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/ethernet/google/gve/gve_adminq.h index b9ee8be73f96..cf29662e6ad1 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -154,6 +154,7 @@ enum gve_driver_capbility { gve_driver_capability_gqi_rda = 1, gve_driver_capability_dqo_qpl = 2, /* reserved for future use */ gve_driver_capability_dqo_rda = 3, + gve_driver_capability_alt_miss_compl = 4, }; #define GVE_CAP1(a) BIT((int)a) @@ -164,7 +165,8 @@ enum gve_driver_capbility { #define GVE_DRIVER_CAPABILITY_FLAGS1 \ (GVE_CAP1(gve_driver_capability_gqi_qpl) | \ GVE_CAP1(gve_driver_capability_gqi_rda) | \ - GVE_CAP1(gve_driver_capability_dqo_rda)) + GVE_CAP1(gve_driver_capability_dqo_rda) | \ + GVE_CAP1(gve_driver_capability_alt_miss_compl)) #define GVE_DRIVER_CAPABILITY_FLAGS2 0x0 #define GVE_DRIVER_CAPABILITY_FLAGS3 0x0 diff --git a/drivers/net/ethernet/google/gve/gve_desc_dqo.h b/drivers/net/ethernet/google/gve/gve_desc_dqo.h index e8fe9adef7f2..f79cd0591110 100644 --- a/drivers/net/ethernet/google/gve/gve_desc_dqo.h +++ b/drivers/net/ethernet/google/gve/gve_desc_dqo.h @@ -176,6 +176,11 @@ static_assert(sizeof(struct gve_tx_compl_desc) == 8); #define GVE_COMPL_TYPE_DQO_MISS 0x1 /* Miss path completion */ #define GVE_COMPL_TYPE_DQO_REINJECTION 0x3 /* Re-injection completion */ +/* The most significant bit in the completion tag can change the completion + * type from packet completion to miss path completion. + */ +#define GVE_ALT_MISS_COMPL_BIT BIT(15) + /* Descriptor to post buffers to HW on buffer queue. */ struct gve_rx_desc_dqo { __le16 buf_id; /* ID returned in Rx completion descriptor */ diff --git a/drivers/net/ethernet/google/gve/gve_tx_dqo.c b/drivers/net/ethernet/google/gve/gve_tx_dqo.c index 588d64819ed5..762915c6063b 100644 --- a/drivers/net/ethernet/google/gve/gve_tx_dqo.c +++ b/drivers/net/ethernet/google/gve/gve_tx_dqo.c @@ -953,12 +953,18 @@ int gve_clean_tx_done_dqo(struct gve_priv *priv, struct gve_tx_ring *tx, atomic_set_release(&tx->dqo_compl.hw_tx_head, tx_head); } else if (type == GVE_COMPL_TYPE_DQO_PKT) { u16 compl_tag = le16_to_cpu(compl_desc->completion_tag); - - gve_handle_packet_completion(priv, tx, !!napi, - compl_tag, - &pkt_compl_bytes, - &pkt_compl_pkts, - /*is_reinjection=*/false); + if (compl_tag & GVE_ALT_MISS_COMPL_BIT) { + compl_tag &= ~GVE_ALT_MISS_COMPL_BIT; + gve_handle_miss_completion(priv, tx, compl_tag, + &miss_compl_bytes, + &miss_compl_pkts); + } else { + gve_handle_packet_completion(priv, tx, !!napi, + compl_tag, + &pkt_compl_bytes, + &pkt_compl_pkts, + /*is_reinjection=*/false); + } } else if (type == GVE_COMPL_TYPE_DQO_MISS) { u16 compl_tag = le16_to_cpu(compl_desc->completion_tag);