Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f08c39ed authored by Eugenia Emantayev's avatar Eugenia Emantayev Committed by Saeed Mahameed
Browse files

net/mlx5e: Schedule overflow check work to mlx5e workqueue



This is done in order to ensure that work will not run after the cleanup.

Fixes: ef9814de ('net/mlx5e: Add HW timestamping (TS) support')
Signed-off-by: default avatarEugenia Emantayev <eugenia@mellanox.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
parent d439c845
Loading
Loading
Loading
Loading
+5 −6
Original line number Original line Diff line number Diff line
@@ -114,12 +114,13 @@ static void mlx5e_timestamp_overflow(struct work_struct *work)
	struct delayed_work *dwork = to_delayed_work(work);
	struct delayed_work *dwork = to_delayed_work(work);
	struct mlx5e_tstamp *tstamp = container_of(dwork, struct mlx5e_tstamp,
	struct mlx5e_tstamp *tstamp = container_of(dwork, struct mlx5e_tstamp,
						   overflow_work);
						   overflow_work);
	struct mlx5e_priv *priv = container_of(tstamp, struct mlx5e_priv, tstamp);
	unsigned long flags;
	unsigned long flags;


	write_lock_irqsave(&tstamp->lock, flags);
	write_lock_irqsave(&tstamp->lock, flags);
	timecounter_read(&tstamp->clock);
	timecounter_read(&tstamp->clock);
	write_unlock_irqrestore(&tstamp->lock, flags);
	write_unlock_irqrestore(&tstamp->lock, flags);
	schedule_delayed_work(&tstamp->overflow_work,
	queue_delayed_work(priv->wq, &tstamp->overflow_work,
			   msecs_to_jiffies(tstamp->overflow_period * 1000));
			   msecs_to_jiffies(tstamp->overflow_period * 1000));
}
}


@@ -577,7 +578,7 @@ void mlx5e_timestamp_init(struct mlx5e_priv *priv)
	INIT_WORK(&tstamp->pps_info.out_work, mlx5e_pps_out);
	INIT_WORK(&tstamp->pps_info.out_work, mlx5e_pps_out);
	INIT_DELAYED_WORK(&tstamp->overflow_work, mlx5e_timestamp_overflow);
	INIT_DELAYED_WORK(&tstamp->overflow_work, mlx5e_timestamp_overflow);
	if (tstamp->overflow_period)
	if (tstamp->overflow_period)
		schedule_delayed_work(&tstamp->overflow_work, 0);
		queue_delayed_work(priv->wq, &tstamp->overflow_work, 0);
	else
	else
		mlx5_core_warn(priv->mdev, "invalid overflow period, overflow_work is not scheduled\n");
		mlx5_core_warn(priv->mdev, "invalid overflow period, overflow_work is not scheduled\n");


@@ -613,8 +614,6 @@ void mlx5e_timestamp_cleanup(struct mlx5e_priv *priv)
	}
	}


	cancel_work_sync(&tstamp->pps_info.out_work);
	cancel_work_sync(&tstamp->pps_info.out_work);

	kfree(tstamp->ptp_info.pin_config);

	cancel_delayed_work_sync(&tstamp->overflow_work);
	cancel_delayed_work_sync(&tstamp->overflow_work);
	kfree(tstamp->ptp_info.pin_config);
}
}