Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

gve: Move gve_init_clock to after AQ CONFIGURE_DEVICE_RESOURCES call

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>

authored by

Tim Hostetler and committed by
Jakub Kicinski
a479a27f dd75c723

+10 -7
+10 -7
drivers/net/ethernet/google/gve/gve_main.c
··· 647 647 err = gve_alloc_counter_array(priv); 648 648 if (err) 649 649 goto abort_with_rss_config_cache; 650 - err = gve_init_clock(priv); 651 - if (err) 652 - goto abort_with_counter; 653 650 err = gve_alloc_notify_blocks(priv); 654 651 if (err) 655 - goto abort_with_clock; 652 + goto abort_with_counter; 656 653 err = gve_alloc_stats_report(priv); 657 654 if (err) 658 655 goto abort_with_ntfy_blocks; ··· 680 683 } 681 684 } 682 685 686 + err = gve_init_clock(priv); 687 + if (err) { 688 + dev_err(&priv->pdev->dev, "Failed to init clock"); 689 + goto abort_with_ptype_lut; 690 + } 691 + 683 692 err = gve_init_rss_config(priv, priv->rx_cfg.num_queues); 684 693 if (err) { 685 694 dev_err(&priv->pdev->dev, "Failed to init RSS config"); 686 - goto abort_with_ptype_lut; 695 + goto abort_with_clock; 687 696 } 688 697 689 698 err = gve_adminq_report_stats(priv, priv->stats_report_len, ··· 701 698 gve_set_device_resources_ok(priv); 702 699 return 0; 703 700 701 + abort_with_clock: 702 + gve_teardown_clock(priv); 704 703 abort_with_ptype_lut: 705 704 kvfree(priv->ptype_lut_dqo); 706 705 priv->ptype_lut_dqo = NULL; ··· 710 705 gve_free_stats_report(priv); 711 706 abort_with_ntfy_blocks: 712 707 gve_free_notify_blocks(priv); 713 - abort_with_clock: 714 - gve_teardown_clock(priv); 715 708 abort_with_counter: 716 709 gve_free_counter_array(priv); 717 710 abort_with_rss_config_cache: