aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Li <Frank.Li@freescale.com>2012-11-06 15:14:49 -0500
committerDavid S. Miller <davem@davemloft.net>2012-11-07 18:52:12 -0500
commit7da716aee2532399e213a14f656d304098f67a11 (patch)
tree7d294e94fc51a1b7e7ab1d9f7822d50e74670f6d
parent0f2f7a40f9ae91b9e837c3cd2cacd7f46c168eb1 (diff)
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>
-rw-r--r--drivers/net/ethernet/freescale/fec_ptp.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c
index 5352140468ce..c40526c78c20 100644
--- a/drivers/net/ethernet/freescale/fec_ptp.c
+++ b/drivers/net/ethernet/freescale/fec_ptp.c
@@ -145,6 +145,7 @@ static int fec_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
145 u64 diff; 145 u64 diff;
146 unsigned long flags; 146 unsigned long flags;
147 int neg_adj = 0; 147 int neg_adj = 0;
148 u32 mult = FEC_CC_MULT;
148 149
149 struct fec_enet_private *fep = 150 struct fec_enet_private *fep =
150 container_of(ptp, struct fec_enet_private, ptp_caps); 151 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)
154 neg_adj = 1; 155 neg_adj = 1;
155 } 156 }
156 157
158 diff = mult;
159 diff *= ppb;
160 diff = div_u64(diff, 1000000000ULL);
161
157 spin_lock_irqsave(&fep->tmreg_lock, flags); 162 spin_lock_irqsave(&fep->tmreg_lock, flags);
158 /* 163 /*
159 * dummy read to set cycle_last in tc to now. 164 * 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)
161 * timercounter_read. 166 * timercounter_read.
162 */ 167 */
163 timecounter_read(&fep->tc); 168 timecounter_read(&fep->tc);
164 fep->cc.mult = FEC_CC_MULT;
165 diff = fep->cc.mult;
166 diff *= ppb;
167 diff = div_u64(diff, 1000000000ULL);
168 169
169 if (neg_adj) 170 fep->cc.mult = neg_adj ? mult - diff : mult + diff;
170 fep->cc.mult -= diff;
171 else
172 fep->cc.mult += diff;
173 171
174 spin_unlock_irqrestore(&fep->tmreg_lock, flags); 172 spin_unlock_irqrestore(&fep->tmreg_lock, flags);
175 173