diff mbox series

[9/9] ice: stop destroying and reinitalizing Tx tracker during reset

Message ID 20230807103624.468230-10-karol.kolacinski@intel.com
State Changes Requested
Headers show
Series ice: fix timestamping in reset process | expand

Commit Message

Karol Kolacinski Aug. 7, 2023, 10:36 a.m. UTC
The ice driver currently attempts to destroy and re-initialize the Tx
timestamp tracker during the reset flow. The release of the Tx tracker
only happened during CORE reset or GLOBAL reset. The ice_ptp_rebuild()
function always calls the ice_ptp_init_tx function which will allocate
a new tracker data structure, resulting in memory leaks during PF reset.

Certainly the driver should not be allocating a new tracker without
removing the old tracker data, as this results in a memory leak.
Additionally, there's no reason to remove the tracker memory during a
reset. Remove this logic from the reset and rebuild flow. Instead of
releasing the Tx tracker, flush outstanding timestamps just before we
reset the PHY timestamp block in ice_ptp_cfg_phy_interrupt().

Change-type: ImplementationChange
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_ptp.c | 12 ------------
 1 file changed, 12 deletions(-)

Comments

Przemek Kitszel Aug. 7, 2023, 12:20 p.m. UTC | #1
On 8/7/23 12:36, Karol Kolacinski wrote:
> The ice driver currently attempts to destroy and re-initialize the Tx
> timestamp tracker during the reset flow. The release of the Tx tracker
> only happened during CORE reset or GLOBAL reset. The ice_ptp_rebuild()
> function always calls the ice_ptp_init_tx function which will allocate
> a new tracker data structure, resulting in memory leaks during PF reset.
> 
> Certainly the driver should not be allocating a new tracker without
> removing the old tracker data, as this results in a memory leak.
> Additionally, there's no reason to remove the tracker memory during a
> reset. Remove this logic from the reset and rebuild flow. Instead of
> releasing the Tx tracker, flush outstanding timestamps just before we
> reset the PHY timestamp block in ice_ptp_cfg_phy_interrupt().

Looks like you are missing some part of this patch or it went into other 
(perhaps 4/9, ice_ptp_flush_all_tx_tracker)

Anyway, either fix wording here or bring it back here.

> 
> Change-type: ImplementationChange

Haha, sure :)

> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> ---
>   drivers/net/ethernet/intel/ice/ice_ptp.c | 12 ------------
>   1 file changed, 12 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index 5dc0c9a27180..d10c43f9266b 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -2629,18 +2629,6 @@ void ice_ptp_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
>   	if (ice_pf_src_tmr_owned(pf) && reset_type != ICE_RESET_PFR)
>   		ice_ptp_rebuild_owner(pf);
>   
> -	/* Init Tx structures */
> -	if (ice_is_e810(&pf->hw)) {
> -		err = ice_ptp_init_tx_e810(pf, &ptp->port.tx);
> -	} else {
> -		kthread_init_delayed_work(&ptp->port.ov_work,
> -					  ice_ptp_wait_for_offsets);
> -		err = ice_ptp_init_tx_e822(pf, &ptp->port.tx,
> -					   ptp->port.port_num);
> -	}
> -	if (err)
> -		goto err;
> -
>   	ptp->state = ICE_PTP_READY;
>   
>   	/* Start periodic work going */
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
index 5dc0c9a27180..d10c43f9266b 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -2629,18 +2629,6 @@  void ice_ptp_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
 	if (ice_pf_src_tmr_owned(pf) && reset_type != ICE_RESET_PFR)
 		ice_ptp_rebuild_owner(pf);
 
-	/* Init Tx structures */
-	if (ice_is_e810(&pf->hw)) {
-		err = ice_ptp_init_tx_e810(pf, &ptp->port.tx);
-	} else {
-		kthread_init_delayed_work(&ptp->port.ov_work,
-					  ice_ptp_wait_for_offsets);
-		err = ice_ptp_init_tx_e822(pf, &ptp->port.tx,
-					   ptp->port.port_num);
-	}
-	if (err)
-		goto err;
-
 	ptp->state = ICE_PTP_READY;
 
 	/* Start periodic work going */