mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 00:24:12 +08:00
stmmac: Fix incorrect spinlock release and PTP cap detection.
This patch corrects a problem in stmmac_ptp.c, functions stmmac_adjust_time and stmmac_adjust_freq where the incorrect spinlocks were released. This patch also addresses a problem in stmmac_main, function stmmac_init_ptp where the capability detection for advanced timestamping was masked by message masking. This patch was touch tested using linuxptp, and runs without the previously observed instabilities. More extensive testing is ongoing. Vince Signed-off-by: Vince Bridgers <vbridgers2013@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
33c133cc75
commit
7cd0139923
@ -622,17 +622,15 @@ static int stmmac_init_ptp(struct stmmac_priv *priv)
|
||||
if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (netif_msg_hw(priv)) {
|
||||
if (priv->dma_cap.time_stamp) {
|
||||
pr_debug("IEEE 1588-2002 Time Stamp supported\n");
|
||||
priv->adv_ts = 0;
|
||||
}
|
||||
if (priv->dma_cap.atime_stamp && priv->extend_desc) {
|
||||
pr_debug
|
||||
("IEEE 1588-2008 Advanced Time Stamp supported\n");
|
||||
priv->adv_ts = 1;
|
||||
}
|
||||
}
|
||||
priv->adv_ts = 0;
|
||||
if (priv->dma_cap.atime_stamp && priv->extend_desc)
|
||||
priv->adv_ts = 1;
|
||||
|
||||
if (netif_msg_hw(priv) && priv->dma_cap.time_stamp)
|
||||
pr_debug("IEEE 1588-2002 Time Stamp supported\n");
|
||||
|
||||
if (netif_msg_hw(priv) && priv->adv_ts)
|
||||
pr_debug("IEEE 1588-2008 Advanced Time Stamp supported\n");
|
||||
|
||||
priv->hw->ptp = &stmmac_ptp;
|
||||
priv->hwts_tx_en = 0;
|
||||
|
@ -56,7 +56,7 @@ static int stmmac_adjust_freq(struct ptp_clock_info *ptp, s32 ppb)
|
||||
|
||||
priv->hw->ptp->config_addend(priv->ioaddr, addend);
|
||||
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
spin_unlock_irqrestore(&priv->ptp_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -91,7 +91,7 @@ static int stmmac_adjust_time(struct ptp_clock_info *ptp, s64 delta)
|
||||
|
||||
priv->hw->ptp->adjust_systime(priv->ioaddr, sec, nsec, neg_adj);
|
||||
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
spin_unlock_irqrestore(&priv->ptp_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user