diff options
author | Frank Li <Frank.Li@freescale.com> | 2012-11-06 15:14:49 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-07 18:52:12 -0500 |
commit | 7da716aee2532399e213a14f656d304098f67a11 (patch) | |
tree | 7d294e94fc51a1b7e7ab1d9f7822d50e74670f6d | |
parent | 0f2f7a40f9ae91b9e837c3cd2cacd7f46c168eb1 (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.c | 14 |
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 | ||