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 07EC63E173A for ; Mon, 1 Jun 2026 17:54:42 +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=1780336485; cv=none; b=YqEXfqzSxNddl3FS0BwYMmrD5lYU5hq+ALmTLH7HpJV4hhW8a6seMY6gZoComs3q4yJcYi/5nQZr5qpKKrboN/MIhfUpG8EoZdYXxpDRaYCzj0rq5zEncWypUp2hdewUR7ZpuveX8FG5aCpkCaxWRy7zBQ3ZTSQ9E25v3Tt7fvw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780336485; c=relaxed/simple; bh=MMXn7HOatTczl0yaHRUfk66HG8PysyTJ0l21uX9SqIs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dw1RkChqQP2bF49m+/wtcHPyVhSPvN/wpIqDpfbBt9QxC57JgmpvL0s/ivmqOA85MK/Zil1Du9XL5uTRVrYqbc9+HKuw9hZvLN5/MoQRHCJZ2aSGoDbwdVrY9YdgSwyU8YCJS4uSvkqE4i27Kkyiu3SJsQ4DpJYCuUKbd9jx0qU= 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=YOc7hRTC; 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="YOc7hRTC" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2c0b1bb53a8so16546055ad.0 for ; Mon, 01 Jun 2026 10:54:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1780336482; x=1780941282; 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=qcsqMCDpgCiw+DfwG/Pw07YsUOQT5uec12wzo19RF7s=; b=YOc7hRTCV2fKrC0DGk2pf7uksc/PGkZ9afnJuuHLPPFmdBp//3JZiFSxuXcRLPYSve BOCc/pbjRJwe/tl6eAGmkflNm/GONnAe4nmq9+CZune7Tw/mkXzSMH5lRL21kppUWCrf SmFI5AnZuumH2fAmIkefyZITz+IusceYgjXyYbGJ74+/VCE5jFvv1n3K0qvFOTVuXNAp nK0xUL6uh2WxX3lZcrf37mrsNutDOkygj6cj+3M+lGF+GK87i3EDNamcZwkEJR1T5vQn Xt41UpXsbG/PotVA5F1GLm0P9PL8fvkPH/knITonWQtFc8Jr1a05u6oCueJdQi6ygRLF 7ODA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780336482; x=1780941282; 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=qcsqMCDpgCiw+DfwG/Pw07YsUOQT5uec12wzo19RF7s=; b=htz8oF4nK6TE5AoYaM4gWyo6d6nA1UK0qZOP+CIH+e+/eQsOwFz2plP1GgKyqfuroL sE7LlZMyzmd2GsOFfg5QlnqMhBtUoq/M4S45EvZyrCretgiPs68id8JCBYuGLYAH3xV7 2awxXDYeCy0il0bTqLQPr3SrgoCmVD+qzLJ3LZ4lMLDkWlfGUHAq5PUhg6w1FHSNUrh7 9YzliLWFPJXf/A7l7wB8njCp3NsIjTG6h61ctSM2Yfvhwxk8BgVzbZYxCh7zH/Xh30U3 yiYIdNP8YhIOH7eMcnWBfABcxQ8V6dD/lyD7S/VwqSwEBk5v7o7RtXY1ag48wQ5UYloS F0IA== X-Forwarded-Encrypted: i=1; AFNElJ+NRebd6s30PwqZQGMJhDbhDiwuQdwxFvxYcN6BdupCAI/J/qXdvdnRQ/gBPKBpbKg/AEtRWE/8cWRif6s=@vger.kernel.org X-Gm-Message-State: AOJu0YyI3vqfvNfRW1CeUJ+xe1rxJ66xHHGOuAAz6uxLgwu3hDg7bWgf mSCG0pMexBY5SVfD3G5NRZmCYQDCAUG2Ly4c+eL/zNaZGPEji8LWuJryEbep8xn69tpK2CUfnsZ SIWlANbGhVV6cjA6G4iRqYEMjLg== X-Received: from plbmn8.prod.google.com ([2002:a17:903:a48:b0:2b2:3dc8:b460]) (user=hramamurthy job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2290:b0:2bf:2d0:8877 with SMTP id d9443c01a7336-2c10cced851mr3997585ad.23.1780336481764; Mon, 01 Jun 2026 10:54:41 -0700 (PDT) Date: Mon, 1 Jun 2026 17:54:25 +0000 In-Reply-To: <20260601175437.3767283-1-hramamurthy@google.com> Precedence: bulk X-Mailing-List: linux-kernel@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-4-hramamurthy@google.com> Subject: [PATCH net-next 03/15] gve: introduce gve_adminq_get_device_properties() 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" Introduce gve_adminq_get_device_properties() which executes the first two Adminq commands: VERIFY_DRIVER_COMPATIBILITY and DESCRIBE_DEVICE so that this can be called during initialization. Move these to Adminq specific files. This is just code movement, no functional change. Reviewed-by: Willem de Bruijn Reviewed-by: Jordan Rhee Signed-off-by: Harshitha Ramamurthy --- drivers/net/ethernet/google/gve/gve.h | 2 + drivers/net/ethernet/google/gve/gve_adminq.c | 66 ++++++++++++++++++-- drivers/net/ethernet/google/gve/gve_adminq.h | 5 +- drivers/net/ethernet/google/gve/gve_main.c | 59 +---------------- 4 files changed, 66 insertions(+), 66 deletions(-) diff --git a/drivers/net/ethernet/google/gve/gve.h b/drivers/net/ethernet/google/gve/gve.h index 4de3ce60060e..0980e8ecbda2 100644 --- a/drivers/net/ethernet/google/gve/gve.h +++ b/drivers/net/ethernet/google/gve/gve.h @@ -15,6 +15,8 @@ #include #include #include +#include +#include #include #include diff --git a/drivers/net/ethernet/google/gve/gve_adminq.c b/drivers/net/ethernet/google/gve/gve_adminq.c index f3227bb58ced..c102f707e284 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.c +++ b/drivers/net/ethernet/google/gve/gve_adminq.c @@ -1169,6 +1169,27 @@ int gve_adminq_describe_device(struct gve_priv *priv) return err; } +int gve_adminq_get_device_properties(struct gve_priv *priv) +{ + int err; + + err = gve_adminq_verify_driver_compatibility(priv); + if (err) { + dev_err(&priv->pdev->dev, + "Could not verify driver compatibility: err=%d\n", err); + return err; + } + + /* Get the initial information we need from the device */ + err = gve_adminq_describe_device(priv); + if (err) { + dev_err(&priv->pdev->dev, + "Could not get device information: err=%d\n", err); + return err; + } + return 0; +} + int gve_adminq_register_page_list(struct gve_priv *priv, struct gve_queue_page_list *qpl) { @@ -1231,20 +1252,53 @@ 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) +int gve_adminq_verify_driver_compatibility(struct gve_priv *priv) { + struct gve_driver_info *driver_info; union gve_adminq_command cmd; + dma_addr_t driver_info_bus; + int err; + + 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)); 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), + .driver_info_len = cpu_to_be64(sizeof(struct gve_driver_info)), + .driver_info_addr = cpu_to_be64(driver_info_bus), }; - return gve_adminq_execute_cmd(priv, &cmd); + err = gve_adminq_execute_cmd(priv, &cmd); + + /* It's ok if the device doesn't support this */ + if (err == -EOPNOTSUPP) + err = 0; + + dma_free_coherent(&priv->pdev->dev, + sizeof(struct gve_driver_info), + driver_info, driver_info_bus); + return err; } int gve_adminq_report_link_speed(struct gve_priv *priv) diff --git a/drivers/net/ethernet/google/gve/gve_adminq.h b/drivers/net/ethernet/google/gve/gve_adminq.h index 9fbea0cc6513..107c21b7b047 100644 --- a/drivers/net/ethernet/google/gve/gve_adminq.h +++ b/drivers/net/ethernet/google/gve/gve_adminq.h @@ -640,9 +640,8 @@ int gve_adminq_register_page_list(struct gve_priv *priv, int gve_adminq_unregister_page_list(struct gve_priv *priv, u32 page_list_id); 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_verify_driver_compatibility(struct gve_priv *priv); +int gve_adminq_get_device_properties(struct gve_priv *priv); int gve_adminq_report_link_speed(struct gve_priv *priv); int gve_adminq_add_flow_rule(struct gve_priv *priv, struct gve_adminq_flow_rule *rule, u32 loc); int gve_adminq_del_flow_rule(struct gve_priv *priv, u32 loc); diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c index b9542ef36b29..eb2d768e5881 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -41,49 +40,6 @@ char gve_driver_name[] = "gve"; 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 == -EOPNOTSUPP) - err = 0; - - dma_free_coherent(&priv->pdev->dev, - sizeof(struct gve_driver_info), - driver_info, driver_info_bus); - return err; -} - static netdev_features_t gve_features_check(struct sk_buff *skb, struct net_device *dev, netdev_features_t features) @@ -2461,21 +2417,10 @@ static int gve_init_priv(struct gve_priv *priv, bool skip_describe_device) if (skip_describe_device) goto setup_device; - err = gve_verify_driver_compatibility(priv); - if (err) { - dev_err(&priv->pdev->dev, - "Could not verify driver compatibility: err=%d\n", err); - goto err; - } - - /* Get the initial information we need from the device */ priv->queue_format = GVE_QUEUE_FORMAT_UNSPECIFIED; - err = gve_adminq_describe_device(priv); - if (err) { - dev_err(&priv->pdev->dev, - "Could not get device information: err=%d\n", err); + err = gve_adminq_get_device_properties(priv); + if (err) goto err; - } err = gve_set_num_ntfy_blks(priv); if (err) { -- 2.54.0.669.g59709faab0-goog