]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
gve: Move gve_init_clock to after AQ CONFIGURE_DEVICE_RESOURCES call
authorTim Hostetler <thostet@google.com>
Tue, 2 Dec 2025 20:02:07 +0000 (20:02 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 5 Dec 2025 01:54:16 +0000 (17:54 -0800)
commit 46e7860ef941 ("gve: Move ptp_schedule_worker to gve_init_clock")
moved the first invocation of the AQ command REPORT_NIC_TIMESTAMP to
gve_probe(). However, gve_init_clock() invoking REPORT_NIC_TIMESTAMP is
not valid until after gve_probe() invokes the AQ command
CONFIGURE_DEVICE_RESOURCES.

Failure to do so results in the following error:

gve 0000:00:07.0: failed to read NIC clock -11

This was missed earlier because the driver under test was loaded at
runtime instead of boot-time. The boot-time driver had already
initialized the device, causing the runtime driver to successfully call
gve_init_clock() incorrectly.

Fixes: 46e7860ef941 ("gve: Move ptp_schedule_worker to gve_init_clock")
Reviewed-by: Ankit Garg <nktgrg@google.com>
Signed-off-by: Tim Hostetler <thostet@google.com>
Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20251202200207.1434749-1-hramamurthy@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/google/gve/gve_main.c

index a5a2b18d309b8c308523aa9b44e1c599d42fedf1..a7a088a77f3786caf12d87147843bc38afe5103c 100644 (file)
@@ -647,12 +647,9 @@ static int gve_setup_device_resources(struct gve_priv *priv)
        err = gve_alloc_counter_array(priv);
        if (err)
                goto abort_with_rss_config_cache;
-       err = gve_init_clock(priv);
-       if (err)
-               goto abort_with_counter;
        err = gve_alloc_notify_blocks(priv);
        if (err)
-               goto abort_with_clock;
+               goto abort_with_counter;
        err = gve_alloc_stats_report(priv);
        if (err)
                goto abort_with_ntfy_blocks;
@@ -683,10 +680,16 @@ static int gve_setup_device_resources(struct gve_priv *priv)
                }
        }
 
+       err = gve_init_clock(priv);
+       if (err) {
+               dev_err(&priv->pdev->dev, "Failed to init clock");
+               goto abort_with_ptype_lut;
+       }
+
        err = gve_init_rss_config(priv, priv->rx_cfg.num_queues);
        if (err) {
                dev_err(&priv->pdev->dev, "Failed to init RSS config");
-               goto abort_with_ptype_lut;
+               goto abort_with_clock;
        }
 
        err = gve_adminq_report_stats(priv, priv->stats_report_len,
@@ -698,6 +701,8 @@ static int gve_setup_device_resources(struct gve_priv *priv)
        gve_set_device_resources_ok(priv);
        return 0;
 
+abort_with_clock:
+       gve_teardown_clock(priv);
 abort_with_ptype_lut:
        kvfree(priv->ptype_lut_dqo);
        priv->ptype_lut_dqo = NULL;
@@ -705,8 +710,6 @@ abort_with_stats_report:
        gve_free_stats_report(priv);
 abort_with_ntfy_blocks:
        gve_free_notify_blocks(priv);
-abort_with_clock:
-       gve_teardown_clock(priv);
 abort_with_counter:
        gve_free_counter_array(priv);
 abort_with_rss_config_cache: