Re: [PATCH] Use a spinlock to guard `fep->ptp_clk_on`
From: Richard Cochran <richardcochran@gmail.com>
Date: 2022-08-31 13:54:13
On Wed, Aug 31, 2022 at 02:56:31PM +0200, Csókás Bence wrote:
quoted hunk ↗ jump to hunk
diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c index c74d04f4b2fd..dc8564a1f2d2 100644 --- a/drivers/net/ethernet/freescale/fec_ptp.c +++ b/drivers/net/ethernet/freescale/fec_ptp.c@@ -365,21 +365,21 @@ static int fec_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta) */ static int fec_ptp_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts) { - struct fec_enet_private *adapter = + struct fec_enet_private *fep = container_of(ptp, struct fec_enet_private, ptp_caps); u64 ns; - unsigned long flags; + unsigned long flags, flags2; - mutex_lock(&adapter->ptp_clk_mutex); + spin_lock_irqsave(&fep->ptp_clk_lock, flags); /* Check the ptp clock */ - if (!adapter->ptp_clk_on) { - mutex_unlock(&adapter->ptp_clk_mutex); + if (!fep->ptp_clk_on) {
BTW This test is silly. If functionality isn't available then the code should simply not register the clock in the first place.
+ spin_unlock_irqrestore(&fep->ptp_clk_lock, flags); return -EINVAL; } - spin_lock_irqsave(&adapter->tmreg_lock, flags); - ns = timecounter_read(&adapter->tc); - spin_unlock_irqrestore(&adapter->tmreg_lock, flags); - mutex_unlock(&adapter->ptp_clk_mutex); + spin_lock_irqsave(&fep->tmreg_lock, flags2); + ns = timecounter_read(&fep->tc); + spin_unlock_irqrestore(&fep->tmreg_lock, flags2); + spin_unlock_irqrestore(&fep->ptp_clk_lock, flags);
Two spin locks? Why not just use one? Thanks, Richard