e1000e: PTP lock in e1000e_phc_adjustfreq
Add lock in e1000e_phc_adjfreq to prevent concurrent changes to TIMINCA and SYSTIMH/L. Signed-off-by: Todd Fujinaka <todd.fujinaka@intel.com> Tested-by: Jeff Pieper <jeffrey.e.pieper@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
37147652cf
commit
6c2ed39c1c
@ -47,6 +47,7 @@ static int e1000e_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta)
|
|||||||
ptp_clock_info);
|
ptp_clock_info);
|
||||||
struct e1000_hw *hw = &adapter->hw;
|
struct e1000_hw *hw = &adapter->hw;
|
||||||
bool neg_adj = false;
|
bool neg_adj = false;
|
||||||
|
unsigned long flags;
|
||||||
u64 adjustment;
|
u64 adjustment;
|
||||||
u32 timinca, incvalue;
|
u32 timinca, incvalue;
|
||||||
s32 ret_val;
|
s32 ret_val;
|
||||||
@ -64,6 +65,8 @@ static int e1000e_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta)
|
|||||||
if (ret_val)
|
if (ret_val)
|
||||||
return ret_val;
|
return ret_val;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&adapter->systim_lock, flags);
|
||||||
|
|
||||||
incvalue = timinca & E1000_TIMINCA_INCVALUE_MASK;
|
incvalue = timinca & E1000_TIMINCA_INCVALUE_MASK;
|
||||||
|
|
||||||
adjustment = incvalue;
|
adjustment = incvalue;
|
||||||
@ -77,6 +80,8 @@ static int e1000e_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta)
|
|||||||
|
|
||||||
ew32(TIMINCA, timinca);
|
ew32(TIMINCA, timinca);
|
||||||
|
|
||||||
|
spin_unlock_irqrestore(&adapter->systim_lock, flags);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user