Commit b3829b15 authored by Eugenia Emantayev's avatar Eugenia Emantayev Committed by Greg Kroah-Hartman

net/mlx5e: Schedule overflow check work to mlx5e workqueue


[ Upstream commit f08c39ed ]

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>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a26f9f29
...@@ -114,13 +114,14 @@ static void mlx5e_timestamp_overflow(struct work_struct *work) ...@@ -114,13 +114,14 @@ 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));
} }
int mlx5e_hwstamp_set(struct net_device *dev, struct ifreq *ifr) int mlx5e_hwstamp_set(struct net_device *dev, struct ifreq *ifr)
...@@ -578,7 +579,7 @@ void mlx5e_timestamp_init(struct mlx5e_priv *priv) ...@@ -578,7 +579,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");
...@@ -614,8 +615,6 @@ void mlx5e_timestamp_cleanup(struct mlx5e_priv *priv) ...@@ -614,8 +615,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);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment