From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9DCD3E958F for ; Mon, 1 Jun 2026 17:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780336494; cv=none; b=O/0qEZdv0Qg+x3B0oYxpXuPAQ6GY9iBwDm0tzpZScCFVup0mGq7A//ULxcYglsLoaAJe2tVtPfmFrwQ/C2+ZiKOXV/HQRDextjp3RGVk6+GAuh08JJadtPc1nLPjYbglzJ7xhYF0iSdk3ZNAJuVxMD7njoPG5HgutG46Y/1Uhws= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780336494; c=relaxed/simple; bh=3nzR0RPgLc2OQP6PE5bQxNNqLKM+b7Gh0DKZU4wrHB0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Djn3ezWA7jISsXvQE66Jea6WpuvSZektLmUtVzmdF9Xi1VEDJnfCIPeQDqKuSAKZ8HL3gJ8oCo1f1+QWXRs6vradE5DvpPJTkllejQXMjQawk3Sp0RgUOhRzObqEy0IxZjWQdxUYebwR4AxU4zbKnJRjDQtyXFgNU/sYpM0WAhw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OEjcnNp9; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--hramamurthy.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OEjcnNp9" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2bd04e4fe3dso164163865ad.3 for ; Mon, 01 Jun 2026 10:54:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780336491; x=1780941291; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=TLKzZRRRojDjqZtSuZs3O799GeA/EKRkHpD9U9xVQuo=; b=OEjcnNp9BO4l6Jt2VKG6aNSZgZYuF5K459X/8LQSDlswnbjGSjrYZkDmMsfMYCFIt2 aulGK5ZqZotlwoUc9gXbTdGaMXJ4IC4H1KGb+jyh9/Gb3PaMEYIWJik2Weixr6hm6fwZ 5bANIqRPFZRp7HjIsoX2/gZn+y7iI3LG9qBBnWvl31/Bnzni4WtUfV1Cemxl2YD6olWU jfrOKcmlFDP6HRBpvP7VFKCIBnRjvbs3GYqziMcCsNWrdcrhnfx+8QD8FEddI0HVakdw RnXbPHK15RNfWy9Ua22XDDDMsqcxdi85TuvGroDYo80zvuz+an4nywtZ1KyIiAOygKJ9 am5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780336491; x=1780941291; 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=TLKzZRRRojDjqZtSuZs3O799GeA/EKRkHpD9U9xVQuo=; b=Hn2e6gmbh6Irt44z5STWHpo0+JnjPsVa08vdpPgUafxaPwrwlsdHf9qm1pyz2Lhm0T T+SWddqfc0KX3fNaNjdKDyevwsBkmodjkI6UujAkaDZd6/HSexsZXi7mPyldX7QgPjVm rQ2dQceX6dDqIIuSJJOklWwG9a5ILq+GadvC++wv1ggZ6lOOxIJiyU1eSL+TYtk1gIGA kyRjOiwzGMRi/f1DPv2s4o+DWpJLIdj5ubhzQy9a20p92wPoiHTTXjhck4CUXnCu2kle XV45gLVWtA/AmUvtXtpG2Zra8M4wPRIYc8WfZ3yC/UMHNjTme5XjKNVSb6sw9bhoWT9N b8NQ== X-Gm-Message-State: AOJu0YwbJ0j+OzYGQE+9jrrXc+o/Yh1xI7m/GrmMa1MVU5mk+yDluzzH 77fsayLWST+mBdP6PfI+TgOPEpb9iKooHUkCqrnq4y06mqb0a6rlPCIOH7QOo5cZkgbHQdr8YU5 MbQE+rj8WtjcBiCyzcOpS2Xy2dZruywGbir2GCmwa0VZeiAdXMo6FKABUogd9O7o4cz0ipLxu64 tujlxhPRzGGRGKhvuoK5kNhchgyakExdgeD6ISMJ3VZdqxTDOzYhF3FSiDQ0AdQuI= X-Received: from plbmi12.prod.google.com ([2002:a17:902:fccc:b0:2b0:51f0:272d]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:8d0:b0:2bd:c5f8:504f with SMTP id d9443c01a7336-2bf368d9ee5mr133687865ad.40.1780336490834; Mon, 01 Jun 2026 10:54:50 -0700 (PDT) Date: Mon, 1 Jun 2026 17:54:36 +0000 In-Reply-To: <20260601175437.3767283-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260601175437.3767283-1-hramamurthy@google.com> X-Mailer: git-send-email 2.54.0.1013.g208068f2d8-goog Message-ID: <20260601175437.3767283-15-hramamurthy@google.com> Subject: [PATCH net-next 14/15] gve: add ctrl ops to for queue operations From: Harshitha Ramamurthy To: netdev@vger.kernel.org Cc: joshwash@google.com, hramamurthy@google.com, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me, willemb@google.com, jordanrhee@google.com, jfraker@google.com, nktgrg@google.com, bpf@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Add the next few control ops to - create queues - destroy queues These changes are just moving exisiting code into ops, no functional change. Reviewed-by: Willem de Bruijn Reviewed-by: Jordan Rhee Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 4 ++ drivers/net/ethernet/google/gve/gve_adminq.c | 50 ++++++++++++++++++++ drivers/net/ethernet/google/gve/gve_adminq.h | 3 +- drivers/net/ethernet/google/gve/gve_main.c | 41 ++++------------ 4 files changed, 65 insertions(+), 33 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h index b2e578b3d450..4283cb9b49de 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -841,6 +841,8 @@ struct gve_device_info { * @configure_rss: Set up default RSS configuration * @setup_stats_report: Set up DMA region for stats report (AdminQ only) * @reset_flow_rules: Flush all flow rules from device + * @create_queues: Sends commands to the device to create TX/RX queues. + * @destroy_queues: Sends commands to the device to destroy TX/RX queues. */ struct gve_ctrl_ops { int (*map_db_bar)(struct gve_priv *priv); @@ -859,6 +861,8 @@ struct gve_ctrl_ops { dma_addr_t stats_report_addr, u64 interval_ms); /* AQ-specific */ int (*reset_flow_rules)(struct gve_priv *priv); + int (*create_queues)(struct gve_priv *priv); + int (*destroy_queues)(struct gve_priv *priv); }; struct gve_priv { diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/ethernet/google/gve/gve_adminq.c index 5dc5c63cee32..799381d24c71 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -941,6 +941,30 @@ static void gve_set_default_rss_sizes(struct gve_priv *priv) } } +int gve_adminq_destroy_queues(struct gve_priv *priv) +{ + int num_tx_queues = gve_num_tx_queues(priv); + int err; + + err = gve_adminq_destroy_tx_queues(priv, 0, num_tx_queues); + if (err) { + netif_err(priv, drv, priv->dev, + "failed to destroy tx queues\n"); + /* This failure will trigger a reset - no need to clean up */ + return err; + } + netif_dbg(priv, drv, priv->dev, "destroyed tx queues\n"); + err = gve_adminq_destroy_rx_queues(priv, priv->rx_cfg.num_queues); + if (err) { + netif_err(priv, drv, priv->dev, + "failed to destroy rx queues\n"); + /* This failure will trigger a reset - no need to clean up */ + return err; + } + netif_dbg(priv, drv, priv->dev, "destroyed rx queues\n"); + return err; +} + static void gve_enable_supported_features(struct gve_priv *priv, u32 supported_features_mask, const struct gve_device_option_jumbo_frames @@ -1822,3 +1846,29 @@ void gve_adminq_teardown_mgmt_irq(struct gve_priv *priv) priv->mgmt_irq_requested = false; } } + +int gve_adminq_create_queues(struct gve_priv *priv) +{ + int num_tx_queues = gve_num_tx_queues(priv); + int err; + + err = gve_adminq_create_tx_queues(priv, 0, num_tx_queues); + if (err) { + netif_err(priv, drv, priv->dev, "failed to create %d tx queues\n", + num_tx_queues); + return err; + } + netif_dbg(priv, drv, priv->dev, "created %d tx queues\n", + num_tx_queues); + + err = gve_adminq_create_rx_queues(priv, priv->rx_cfg.num_queues); + if (err) { + netif_err(priv, drv, priv->dev, "failed to create %d rx queues\n", + priv->rx_cfg.num_queues); + return err; + } + netif_dbg(priv, drv, priv->dev, "created %d rx queues\n", + priv->rx_cfg.num_queues); + + return err; +} diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/ethernet/google/gve/gve_adminq.h index ff656fb4f113..03e8318f7327 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -628,6 +628,8 @@ int gve_adminq_configure_device_resources(struct gve_priv *priv, dma_addr_t db_array_bus_addr, u32 num_ntfy_blks); int gve_adminq_deconfigure_device_resources(struct gve_priv *priv); +int gve_adminq_create_queues(struct gve_priv *priv); +int gve_adminq_destroy_queues(struct gve_priv *priv); int gve_adminq_create_tx_queues(struct gve_priv *priv, u32 start_id, u32 num_queues); int gve_adminq_destroy_tx_queues(struct gve_priv *priv, u32 start_id, u32 num_queues); int gve_adminq_create_single_rx_queue(struct gve_priv *priv, u32 queue_index); @@ -661,5 +663,4 @@ int gve_adminq_request_db_info(struct gve_priv *priv); void gve_adminq_free_db_resources(struct gve_priv *priv); int gve_adminq_setup_mgmt_irq(struct gve_priv *priv); void gve_adminq_teardown_mgmt_irq(struct gve_priv *priv); - #endif /* _GVE_ADMINQ_H */ diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c index 9d00093826e3..dfc734d8bec9 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -841,33 +841,18 @@ static int gve_unregister_qpls(struct gve_priv *priv) static int gve_create_rings(struct gve_priv *priv) { - int num_tx_queues = gve_num_tx_queues(priv); int err; int i; - err = gve_adminq_create_tx_queues(priv, 0, num_tx_queues); + err = priv->ctrl_ops->create_queues(priv); if (err) { - netif_err(priv, drv, priv->dev, "failed to create %d tx queues\n", - num_tx_queues); - /* This failure will trigger a reset - no need to clean - * up - */ - return err; - } - netif_dbg(priv, drv, priv->dev, "created %d tx queues\n", - num_tx_queues); - - err = gve_adminq_create_rx_queues(priv, priv->rx_cfg.num_queues); - if (err) { - netif_err(priv, drv, priv->dev, "failed to create %d rx queues\n", - priv->rx_cfg.num_queues); + netif_err(priv, drv, priv->dev, + "failed to create queues\n"); /* This failure will trigger a reset - no need to clean * up */ return err; } - netif_dbg(priv, drv, priv->dev, "created %d rx queues\n", - priv->rx_cfg.num_queues); if (gve_is_gqi(priv)) { /* Rx data ring has been prefilled with packet buffers at queue @@ -1022,26 +1007,16 @@ static int gve_queues_mem_alloc(struct gve_priv *priv, static int gve_destroy_rings(struct gve_priv *priv) { - int num_tx_queues = gve_num_tx_queues(priv); int err; - err = gve_adminq_destroy_tx_queues(priv, 0, num_tx_queues); + err = priv->ctrl_ops->destroy_queues(priv); + if (err) { - netif_err(priv, drv, priv->dev, - "failed to destroy tx queues\n"); /* This failure will trigger a reset - no need to clean up */ - return err; - } - netif_dbg(priv, drv, priv->dev, "destroyed tx queues\n"); - err = gve_adminq_destroy_rx_queues(priv, priv->rx_cfg.num_queues); - if (err) { netif_err(priv, drv, priv->dev, - "failed to destroy rx queues\n"); - /* This failure will trigger a reset - no need to clean up */ - return err; + "failed to destroy queues\n"); } - netif_dbg(priv, drv, priv->dev, "destroyed rx queues\n"); - return 0; + return err; } static void gve_queues_mem_free(struct gve_priv *priv, @@ -2450,6 +2425,8 @@ static const struct gve_ctrl_ops gve_adminq_ops = { .free_db_resources = gve_adminq_free_db_resources, .setup_mgmt_irq = gve_adminq_setup_mgmt_irq, .teardown_mgmt_irq = gve_adminq_teardown_mgmt_irq, + .create_queues = gve_adminq_create_queues, + .destroy_queues = gve_adminq_destroy_queues, }; static int gve_init_priv(struct gve_priv *priv) -- 2.54.0.794.g4f17f83d09-goog