Skip to content

Commit c9acece

Browse files
Rasmus Villemoesdavem330
authored andcommitted
net: dsa: mv88e6xxx: introduce helpers for handling chip->reg_lock
This is a no-op that simply moves all locking and unlocking of ->reg_lock into trivial helpers. I did that to be able to easily add some ad hoc instrumentation to those helpers to get some information on contention and hold times of the mutex. Perhaps others want to do something similar at some point, so this frees them from doing the 'sed -i' yoga, and have a much smaller 'git diff' while fiddling. Signed-off-by: Rasmus Villemoes <[email protected]> Reviewed-by: Vivien Didelot <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 3e5bfb1 commit c9acece

File tree

9 files changed

+158
-148
lines changed

9 files changed

+158
-148
lines changed

drivers/net/dsa/mv88e6xxx/chip.c

Lines changed: 88 additions & 88 deletions
Large diffs are not rendered by default.

drivers/net/dsa/mv88e6xxx/chip.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,4 +580,14 @@ int mv88e6xxx_port_setup_mac(struct mv88e6xxx_chip *chip, int port, int link,
580580
phy_interface_t mode);
581581
struct mii_bus *mv88e6xxx_default_mdio_bus(struct mv88e6xxx_chip *chip);
582582

583+
static inline void mv88e6xxx_reg_lock(struct mv88e6xxx_chip *chip)
584+
{
585+
mutex_lock(&chip->reg_lock);
586+
}
587+
588+
static inline void mv88e6xxx_reg_unlock(struct mv88e6xxx_chip *chip)
589+
{
590+
mutex_unlock(&chip->reg_lock);
591+
}
592+
583593
#endif /* _MV88E6XXX_CHIP_H */

drivers/net/dsa/mv88e6xxx/global1_atu.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,7 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
317317
int err;
318318
u16 val;
319319

320-
mutex_lock(&chip->reg_lock);
320+
mv88e6xxx_reg_lock(chip);
321321

322322
err = mv88e6xxx_g1_atu_op(chip, 0,
323323
MV88E6XXX_G1_ATU_OP_GET_CLR_VIOLATION);
@@ -364,12 +364,12 @@ static irqreturn_t mv88e6xxx_g1_atu_prob_irq_thread_fn(int irq, void *dev_id)
364364
entry.mac, entry.portvec, spid);
365365
chip->ports[spid].atu_full_violation++;
366366
}
367-
mutex_unlock(&chip->reg_lock);
367+
mv88e6xxx_reg_unlock(chip);
368368

369369
return IRQ_HANDLED;
370370

371371
out:
372-
mutex_unlock(&chip->reg_lock);
372+
mv88e6xxx_reg_unlock(chip);
373373

374374
dev_err(chip->dev, "ATU problem: error %d while handling interrupt\n",
375375
err);

drivers/net/dsa/mv88e6xxx/global1_vtu.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ static irqreturn_t mv88e6xxx_g1_vtu_prob_irq_thread_fn(int irq, void *dev_id)
579579
int err;
580580
u16 val;
581581

582-
mutex_lock(&chip->reg_lock);
582+
mv88e6xxx_reg_lock(chip);
583583

584584
err = mv88e6xxx_g1_vtu_op(chip, MV88E6XXX_G1_VTU_OP_GET_CLR_VIOLATION);
585585
if (err)
@@ -607,12 +607,12 @@ static irqreturn_t mv88e6xxx_g1_vtu_prob_irq_thread_fn(int irq, void *dev_id)
607607
chip->ports[spid].vtu_miss_violation++;
608608
}
609609

610-
mutex_unlock(&chip->reg_lock);
610+
mv88e6xxx_reg_unlock(chip);
611611

612612
return IRQ_HANDLED;
613613

614614
out:
615-
mutex_unlock(&chip->reg_lock);
615+
mv88e6xxx_reg_unlock(chip);
616616

617617
dev_err(chip->dev, "VTU problem: error %d while handling interrupt\n",
618618
err);

drivers/net/dsa/mv88e6xxx/global2.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -893,20 +893,20 @@ static irqreturn_t mv88e6xxx_g2_watchdog_thread_fn(int irq, void *dev_id)
893893
struct mv88e6xxx_chip *chip = dev_id;
894894
irqreturn_t ret = IRQ_NONE;
895895

896-
mutex_lock(&chip->reg_lock);
896+
mv88e6xxx_reg_lock(chip);
897897
if (chip->info->ops->watchdog_ops->irq_action)
898898
ret = chip->info->ops->watchdog_ops->irq_action(chip, irq);
899-
mutex_unlock(&chip->reg_lock);
899+
mv88e6xxx_reg_unlock(chip);
900900

901901
return ret;
902902
}
903903

904904
static void mv88e6xxx_g2_watchdog_free(struct mv88e6xxx_chip *chip)
905905
{
906-
mutex_lock(&chip->reg_lock);
906+
mv88e6xxx_reg_lock(chip);
907907
if (chip->info->ops->watchdog_ops->irq_free)
908908
chip->info->ops->watchdog_ops->irq_free(chip);
909-
mutex_unlock(&chip->reg_lock);
909+
mv88e6xxx_reg_unlock(chip);
910910

911911
free_irq(chip->watchdog_irq, chip);
912912
irq_dispose_mapping(chip->watchdog_irq);
@@ -928,10 +928,10 @@ static int mv88e6xxx_g2_watchdog_setup(struct mv88e6xxx_chip *chip)
928928
if (err)
929929
return err;
930930

931-
mutex_lock(&chip->reg_lock);
931+
mv88e6xxx_reg_lock(chip);
932932
if (chip->info->ops->watchdog_ops->irq_setup)
933933
err = chip->info->ops->watchdog_ops->irq_setup(chip);
934-
mutex_unlock(&chip->reg_lock);
934+
mv88e6xxx_reg_unlock(chip);
935935

936936
return err;
937937
}
@@ -986,9 +986,9 @@ static irqreturn_t mv88e6xxx_g2_irq_thread_fn(int irq, void *dev_id)
986986
int err;
987987
u16 reg;
988988

989-
mutex_lock(&chip->reg_lock);
989+
mv88e6xxx_reg_lock(chip);
990990
err = mv88e6xxx_g2_int_source(chip, &reg);
991-
mutex_unlock(&chip->reg_lock);
991+
mv88e6xxx_reg_unlock(chip);
992992
if (err)
993993
goto out;
994994

@@ -1007,7 +1007,7 @@ static void mv88e6xxx_g2_irq_bus_lock(struct irq_data *d)
10071007
{
10081008
struct mv88e6xxx_chip *chip = irq_data_get_irq_chip_data(d);
10091009

1010-
mutex_lock(&chip->reg_lock);
1010+
mv88e6xxx_reg_lock(chip);
10111011
}
10121012

10131013
static void mv88e6xxx_g2_irq_bus_sync_unlock(struct irq_data *d)
@@ -1019,7 +1019,7 @@ static void mv88e6xxx_g2_irq_bus_sync_unlock(struct irq_data *d)
10191019
if (err)
10201020
dev_err(chip->dev, "failed to mask interrupts\n");
10211021

1022-
mutex_unlock(&chip->reg_lock);
1022+
mv88e6xxx_reg_unlock(chip);
10231023
}
10241024

10251025
static const struct irq_chip mv88e6xxx_g2_irq_chip = {

drivers/net/dsa/mv88e6xxx/hwtstamp.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ static int mv88e6xxx_set_hwtstamp_config(struct mv88e6xxx_chip *chip, int port,
147147
return -ERANGE;
148148
}
149149

150-
mutex_lock(&chip->reg_lock);
150+
mv88e6xxx_reg_lock(chip);
151151
if (tstamp_enable) {
152152
chip->enable_count += 1;
153153
if (chip->enable_count == 1 && ptp_ops->global_enable)
@@ -161,7 +161,7 @@ static int mv88e6xxx_set_hwtstamp_config(struct mv88e6xxx_chip *chip, int port,
161161
if (chip->enable_count == 0 && ptp_ops->global_disable)
162162
ptp_ops->global_disable(chip);
163163
}
164-
mutex_unlock(&chip->reg_lock);
164+
mv88e6xxx_reg_unlock(chip);
165165

166166
/* Once hardware has been configured, enable timestamp checks
167167
* in the RX/TX paths.
@@ -301,10 +301,10 @@ static void mv88e6xxx_get_rxts(struct mv88e6xxx_chip *chip,
301301
skb_queue_splice_tail_init(rxq, &received);
302302
spin_unlock_irqrestore(&rxq->lock, flags);
303303

304-
mutex_lock(&chip->reg_lock);
304+
mv88e6xxx_reg_lock(chip);
305305
err = mv88e6xxx_port_ptp_read(chip, ps->port_id,
306306
reg, buf, ARRAY_SIZE(buf));
307-
mutex_unlock(&chip->reg_lock);
307+
mv88e6xxx_reg_unlock(chip);
308308
if (err)
309309
pr_err("failed to get the receive time stamp\n");
310310

@@ -314,9 +314,9 @@ static void mv88e6xxx_get_rxts(struct mv88e6xxx_chip *chip,
314314
seq_id = buf[3];
315315

316316
if (status & MV88E6XXX_PTP_TS_VALID) {
317-
mutex_lock(&chip->reg_lock);
317+
mv88e6xxx_reg_lock(chip);
318318
err = mv88e6xxx_port_ptp_write(chip, ps->port_id, reg, 0);
319-
mutex_unlock(&chip->reg_lock);
319+
mv88e6xxx_reg_unlock(chip);
320320
if (err)
321321
pr_err("failed to clear the receive status\n");
322322
}
@@ -327,9 +327,9 @@ static void mv88e6xxx_get_rxts(struct mv88e6xxx_chip *chip,
327327
if (mv88e6xxx_ts_valid(status) && seq_match(skb, seq_id)) {
328328
ns = timehi << 16 | timelo;
329329

330-
mutex_lock(&chip->reg_lock);
330+
mv88e6xxx_reg_lock(chip);
331331
ns = timecounter_cyc2time(&chip->tstamp_tc, ns);
332-
mutex_unlock(&chip->reg_lock);
332+
mv88e6xxx_reg_unlock(chip);
333333
shwt = skb_hwtstamps(skb);
334334
memset(shwt, 0, sizeof(*shwt));
335335
shwt->hwtstamp = ns_to_ktime(ns);
@@ -405,12 +405,12 @@ static int mv88e6xxx_txtstamp_work(struct mv88e6xxx_chip *chip,
405405
if (!ps->tx_skb)
406406
return 0;
407407

408-
mutex_lock(&chip->reg_lock);
408+
mv88e6xxx_reg_lock(chip);
409409
err = mv88e6xxx_port_ptp_read(chip, ps->port_id,
410410
ptp_ops->dep_sts_reg,
411411
departure_block,
412412
ARRAY_SIZE(departure_block));
413-
mutex_unlock(&chip->reg_lock);
413+
mv88e6xxx_reg_unlock(chip);
414414

415415
if (err)
416416
goto free_and_clear_skb;
@@ -430,9 +430,9 @@ static int mv88e6xxx_txtstamp_work(struct mv88e6xxx_chip *chip,
430430
}
431431

432432
/* We have the timestamp; go ahead and clear valid now */
433-
mutex_lock(&chip->reg_lock);
433+
mv88e6xxx_reg_lock(chip);
434434
mv88e6xxx_port_ptp_write(chip, ps->port_id, ptp_ops->dep_sts_reg, 0);
435-
mutex_unlock(&chip->reg_lock);
435+
mv88e6xxx_reg_unlock(chip);
436436

437437
status = departure_block[0] & MV88E6XXX_PTP_TS_STATUS_MASK;
438438
if (status != MV88E6XXX_PTP_TS_STATUS_NORMAL) {
@@ -447,9 +447,9 @@ static int mv88e6xxx_txtstamp_work(struct mv88e6xxx_chip *chip,
447447

448448
memset(&shhwtstamps, 0, sizeof(shhwtstamps));
449449
time_raw = ((u32)departure_block[2] << 16) | departure_block[1];
450-
mutex_lock(&chip->reg_lock);
450+
mv88e6xxx_reg_lock(chip);
451451
ns = timecounter_cyc2time(&chip->tstamp_tc, time_raw);
452-
mutex_unlock(&chip->reg_lock);
452+
mv88e6xxx_reg_unlock(chip);
453453
shhwtstamps.hwtstamp = ns_to_ktime(ns);
454454

455455
dev_dbg(chip->dev,

drivers/net/dsa/mv88e6xxx/phy.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,15 @@ static void mv88e6xxx_phy_ppu_reenable_work(struct work_struct *ugly)
137137

138138
chip = container_of(ugly, struct mv88e6xxx_chip, ppu_work);
139139

140-
mutex_lock(&chip->reg_lock);
140+
mv88e6xxx_reg_lock(chip);
141141

142142
if (mutex_trylock(&chip->ppu_mutex)) {
143143
if (mv88e6xxx_phy_ppu_enable(chip) == 0)
144144
chip->ppu_disabled = 0;
145145
mutex_unlock(&chip->ppu_mutex);
146146
}
147147

148-
mutex_unlock(&chip->reg_lock);
148+
mv88e6xxx_reg_unlock(chip);
149149
}
150150

151151
static void mv88e6xxx_phy_ppu_reenable_timer(struct timer_list *t)

drivers/net/dsa/mv88e6xxx/ptp.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,10 @@ static void mv88e6352_tai_event_work(struct work_struct *ugly)
138138
u32 raw_ts;
139139
int err;
140140

141-
mutex_lock(&chip->reg_lock);
141+
mv88e6xxx_reg_lock(chip);
142142
err = mv88e6xxx_tai_read(chip, MV88E6XXX_TAI_EVENT_STATUS,
143143
status, ARRAY_SIZE(status));
144-
mutex_unlock(&chip->reg_lock);
144+
mv88e6xxx_reg_unlock(chip);
145145

146146
if (err) {
147147
dev_err(chip->dev, "failed to read TAI status register\n");
@@ -158,18 +158,18 @@ static void mv88e6352_tai_event_work(struct work_struct *ugly)
158158

159159
/* Clear the valid bit so the next timestamp can come in */
160160
status[0] &= ~MV88E6XXX_TAI_EVENT_STATUS_VALID;
161-
mutex_lock(&chip->reg_lock);
161+
mv88e6xxx_reg_lock(chip);
162162
err = mv88e6xxx_tai_write(chip, MV88E6XXX_TAI_EVENT_STATUS, status[0]);
163-
mutex_unlock(&chip->reg_lock);
163+
mv88e6xxx_reg_unlock(chip);
164164

165165
/* This is an external timestamp */
166166
ev.type = PTP_CLOCK_EXTTS;
167167

168168
/* We only have one timestamping channel. */
169169
ev.index = 0;
170-
mutex_lock(&chip->reg_lock);
170+
mv88e6xxx_reg_lock(chip);
171171
ev.timestamp = timecounter_cyc2time(&chip->tstamp_tc, raw_ts);
172-
mutex_unlock(&chip->reg_lock);
172+
mv88e6xxx_reg_unlock(chip);
173173

174174
ptp_clock_event(chip->ptp_clock, &ev);
175175
out:
@@ -192,12 +192,12 @@ static int mv88e6xxx_ptp_adjfine(struct ptp_clock_info *ptp, long scaled_ppm)
192192
adj *= scaled_ppm;
193193
diff = div_u64(adj, CC_MULT_DEM);
194194

195-
mutex_lock(&chip->reg_lock);
195+
mv88e6xxx_reg_lock(chip);
196196

197197
timecounter_read(&chip->tstamp_tc);
198198
chip->tstamp_cc.mult = neg_adj ? mult - diff : mult + diff;
199199

200-
mutex_unlock(&chip->reg_lock);
200+
mv88e6xxx_reg_unlock(chip);
201201

202202
return 0;
203203
}
@@ -206,9 +206,9 @@ static int mv88e6xxx_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
206206
{
207207
struct mv88e6xxx_chip *chip = ptp_to_chip(ptp);
208208

209-
mutex_lock(&chip->reg_lock);
209+
mv88e6xxx_reg_lock(chip);
210210
timecounter_adjtime(&chip->tstamp_tc, delta);
211-
mutex_unlock(&chip->reg_lock);
211+
mv88e6xxx_reg_unlock(chip);
212212

213213
return 0;
214214
}
@@ -219,9 +219,9 @@ static int mv88e6xxx_ptp_gettime(struct ptp_clock_info *ptp,
219219
struct mv88e6xxx_chip *chip = ptp_to_chip(ptp);
220220
u64 ns;
221221

222-
mutex_lock(&chip->reg_lock);
222+
mv88e6xxx_reg_lock(chip);
223223
ns = timecounter_read(&chip->tstamp_tc);
224-
mutex_unlock(&chip->reg_lock);
224+
mv88e6xxx_reg_unlock(chip);
225225

226226
*ts = ns_to_timespec64(ns);
227227

@@ -236,9 +236,9 @@ static int mv88e6xxx_ptp_settime(struct ptp_clock_info *ptp,
236236

237237
ns = timespec64_to_ns(ts);
238238

239-
mutex_lock(&chip->reg_lock);
239+
mv88e6xxx_reg_lock(chip);
240240
timecounter_init(&chip->tstamp_tc, &chip->tstamp_cc, ns);
241-
mutex_unlock(&chip->reg_lock);
241+
mv88e6xxx_reg_unlock(chip);
242242

243243
return 0;
244244
}
@@ -256,7 +256,7 @@ static int mv88e6352_ptp_enable_extts(struct mv88e6xxx_chip *chip,
256256
if (pin < 0)
257257
return -EBUSY;
258258

259-
mutex_lock(&chip->reg_lock);
259+
mv88e6xxx_reg_lock(chip);
260260

261261
if (on) {
262262
func = MV88E6352_G2_SCRATCH_GPIO_PCTL_EVREQ;
@@ -278,7 +278,7 @@ static int mv88e6352_ptp_enable_extts(struct mv88e6xxx_chip *chip,
278278
}
279279

280280
out:
281-
mutex_unlock(&chip->reg_lock);
281+
mv88e6xxx_reg_unlock(chip);
282282

283283
return err;
284284
}

0 commit comments

Comments
 (0)