> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf Of
> Jesse Brandeburg
> Sent: Tuesday, April 8, 2025 1:20 AM
> To: [email protected]
> Cc: [email protected]; Nguyen, Anthony L
> <[email protected]>; Kitszel, Przemyslaw
> <[email protected]>; Andrew Lunn <[email protected]>;
> David S. Miller <[email protected]>; Dumazet, Eric
> <[email protected]>; Jakub Kicinski <[email protected]>; Paolo Abeni
> <[email protected]>; Richard Cochran <[email protected]>;
> Brandeburg, Jesse <[email protected]>
> Subject: [Intel-wired-lan] [PATCH intel-next v1] ice: be consistent around PTP
> de-registration
>
> From: Jesse Brandeburg <[email protected]>
>
> The driver was being inconsistent when de-registering its PTP clock. Make sure
> to NULL out the pointer once it is freed in all cases. The driver was mostly
> already doing so, but a couple spots were missed.
>
> Signed-off-by: Jesse Brandeburg <[email protected]>
Reviewed-by: Aleksandr Loktionov <[email protected]>
> ---
> NOTE: we saw some odd behavior on one or two machines where the ports
> completed init, PTP completed init, then port 0 was "hot removed" via sysfs,
> and later panics on ptp->index being 1 while being called by ethtool. This
> caused me to look over this area and see this inconsistency.
> I wasn't able to confirm any for-sure bug.
> ---
> drivers/net/ethernet/intel/ice/ice_main.c | 5 ++++-
> drivers/net/ethernet/intel/ice/ice_ptp.c | 4 ++--
> 2 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c
> b/drivers/net/ethernet/intel/ice/ice_main.c
> index 049edeb60104..8c1b496e84ef 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -3968,8 +3968,11 @@ static void ice_deinit_pf(struct ice_pf *pf)
> pf->avail_rxqs = NULL;
> }
>
> - if (pf->ptp.clock)
> + if (pf->ptp.clock) {
> ptp_clock_unregister(pf->ptp.clock);
> + pf->ptp.clock = NULL;
> + }
> + pf->ptp.state = ICE_PTP_UNINIT;
>
> xa_destroy(&pf->dyn_ports);
> xa_destroy(&pf->sf_nums);
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c
> b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index 1fd1ae03eb90..d7a5c3fb7948 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -3407,9 +3407,9 @@ void ice_ptp_init(struct ice_pf *pf)
>
> err_exit:
> /* If we registered a PTP clock, release it */
> - if (pf->ptp.clock) {
> + if (ptp->clock) {
> ptp_clock_unregister(ptp->clock);
> - pf->ptp.clock = NULL;
> + ptp->clock = NULL;
> }
> ptp->state = ICE_PTP_ERROR;
> dev_err(ice_pf_to_dev(pf), "PTP failed %d\n", err);
> --
> 2.43.0