net: fec: reduce spin lock time in fec_ptp_adjfreq
move below calculate out of spin lock section diff = fep->cc.mult; diff *= ppb; diff = div_u64(diff, 1000000000ULL); diff is local variable and not neccesary in spin lock Signed-off-by: Frank Li <Frank.Li@freescale.com> Acked-by: Richard Cochran <richardcochran@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0f2f7a40f9
commit
7da716aee2
@ -145,6 +145,7 @@ static int fec_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
|
||||
u64 diff;
|
||||
unsigned long flags;
|
||||
int neg_adj = 0;
|
||||
u32 mult = FEC_CC_MULT;
|
||||
|
||||
struct fec_enet_private *fep =
|
||||
container_of(ptp, struct fec_enet_private, ptp_caps);
|
||||
@ -154,6 +155,10 @@ static int fec_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
|
||||
neg_adj = 1;
|
||||
}
|
||||
|
||||
diff = mult;
|
||||
diff *= ppb;
|
||||
diff = div_u64(diff, 1000000000ULL);
|
||||
|
||||
spin_lock_irqsave(&fep->tmreg_lock, flags);
|
||||
/*
|
||||
* dummy read to set cycle_last in tc to now.
|
||||
@ -161,15 +166,8 @@ static int fec_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
|
||||
* timercounter_read.
|
||||
*/
|
||||
timecounter_read(&fep->tc);
|
||||
fep->cc.mult = FEC_CC_MULT;
|
||||
diff = fep->cc.mult;
|
||||
diff *= ppb;
|
||||
diff = div_u64(diff, 1000000000ULL);
|
||||
|
||||
if (neg_adj)
|
||||
fep->cc.mult -= diff;
|
||||
else
|
||||
fep->cc.mult += diff;
|
||||
fep->cc.mult = neg_adj ? mult - diff : mult + diff;
|
||||
|
||||
spin_unlock_irqrestore(&fep->tmreg_lock, flags);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user