Skip to content

Commit 89e602e

Browse files
pmachatadavem330
authored andcommitted
mlxsw: spectrum: PTP: Disable BH when working with PHC
Up until now, the PTP hardware clock code was only invoked in the process context (SYS_clock_adjtime -> do_clock_adjtime -> k_clock::clock_adj -> pc_clock_adjtime -> posix_clock_operations::clock_adjtime -> ptp_clock_info::adjtime -> mlxsw_spectrum). In order to enable HW timestamping, which is tied into trap handling, it will be necessary to take the clock lock from the PCI queue handler tasklets as well. Therefore use the _bh variants when handling the clock lock. Incidentally, Documentation/ptp/ptp.txt recommends _irqsave variants, but that's unnecessarily strong for our needs. Signed-off-by: Petr Machata <[email protected]> Acked-by: Jiri Pirko <[email protected]> Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 810256c commit 89e602e

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ mlxsw_sp1_ptp_phc_settime(struct mlxsw_sp_ptp_clock *clock, u64 nsec)
117117
next_sec = div_u64(nsec, NSEC_PER_SEC) + 1;
118118
next_sec_in_nsec = next_sec * NSEC_PER_SEC;
119119

120-
spin_lock(&clock->lock);
120+
spin_lock_bh(&clock->lock);
121121
cycles = mlxsw_sp1_ptp_ns2cycles(&clock->tc, next_sec_in_nsec);
122-
spin_unlock(&clock->lock);
122+
spin_unlock_bh(&clock->lock);
123123

124124
mlxsw_reg_mtpps_vpin_pack(mtpps_pl, cycles);
125125
err = mlxsw_reg_write(mlxsw_core, MLXSW_REG(mtpps), mtpps_pl);
@@ -152,11 +152,11 @@ static int mlxsw_sp1_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
152152
adj *= ppb;
153153
diff = div_u64(adj, NSEC_PER_SEC);
154154

155-
spin_lock(&clock->lock);
155+
spin_lock_bh(&clock->lock);
156156
timecounter_read(&clock->tc);
157157
clock->cycles.mult = neg_adj ? clock->nominal_c_mult - diff :
158158
clock->nominal_c_mult + diff;
159-
spin_unlock(&clock->lock);
159+
spin_unlock_bh(&clock->lock);
160160

161161
return mlxsw_sp1_ptp_phc_adjfreq(clock, neg_adj ? -ppb : ppb);
162162
}
@@ -167,10 +167,10 @@ static int mlxsw_sp1_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
167167
container_of(ptp, struct mlxsw_sp_ptp_clock, ptp_info);
168168
u64 nsec;
169169

170-
spin_lock(&clock->lock);
170+
spin_lock_bh(&clock->lock);
171171
timecounter_adjtime(&clock->tc, delta);
172172
nsec = timecounter_read(&clock->tc);
173-
spin_unlock(&clock->lock);
173+
spin_unlock_bh(&clock->lock);
174174

175175
return mlxsw_sp1_ptp_phc_settime(clock, nsec);
176176
}
@@ -183,10 +183,10 @@ static int mlxsw_sp1_ptp_gettimex(struct ptp_clock_info *ptp,
183183
container_of(ptp, struct mlxsw_sp_ptp_clock, ptp_info);
184184
u64 cycles, nsec;
185185

186-
spin_lock(&clock->lock);
186+
spin_lock_bh(&clock->lock);
187187
cycles = __mlxsw_sp1_ptp_read_frc(clock, sts);
188188
nsec = timecounter_cyc2time(&clock->tc, cycles);
189-
spin_unlock(&clock->lock);
189+
spin_unlock_bh(&clock->lock);
190190

191191
*ts = ns_to_timespec64(nsec);
192192

@@ -200,10 +200,10 @@ static int mlxsw_sp1_ptp_settime(struct ptp_clock_info *ptp,
200200
container_of(ptp, struct mlxsw_sp_ptp_clock, ptp_info);
201201
u64 nsec = timespec64_to_ns(ts);
202202

203-
spin_lock(&clock->lock);
203+
spin_lock_bh(&clock->lock);
204204
timecounter_init(&clock->tc, &clock->cycles, nsec);
205205
nsec = timecounter_read(&clock->tc);
206-
spin_unlock(&clock->lock);
206+
spin_unlock_bh(&clock->lock);
207207

208208
return mlxsw_sp1_ptp_phc_settime(clock, nsec);
209209
}
@@ -225,9 +225,9 @@ static void mlxsw_sp1_ptp_clock_overflow(struct work_struct *work)
225225

226226
clock = container_of(dwork, struct mlxsw_sp_ptp_clock, overflow_work);
227227

228-
spin_lock(&clock->lock);
228+
spin_lock_bh(&clock->lock);
229229
timecounter_read(&clock->tc);
230-
spin_unlock(&clock->lock);
230+
spin_unlock_bh(&clock->lock);
231231
mlxsw_core_schedule_dw(&clock->overflow_work, clock->overflow_period);
232232
}
233233

0 commit comments

Comments
 (0)