2024-06-07 13:14:33

by Diogo Ivo

[permalink] [raw]
Subject: [PATCH net-next v3 2/4] net: ti: icss-iep: Remove spinlock-based synchronization

As all sources of concurrency in hardware register access occur in
non-interrupt context eliminate spinlock-based synchronization and
rely on the mutex-based synchronization that is already present.

Signed-off-by: Diogo Ivo <[email protected]>
---
drivers/net/ethernet/ti/icssg/icss_iep.c | 10 ----------
1 file changed, 10 deletions(-)

diff --git a/drivers/net/ethernet/ti/icssg/icss_iep.c b/drivers/net/ethernet/ti/icssg/icss_iep.c
index 3025e9c18970..1d6ccdf2583f 100644
--- a/drivers/net/ethernet/ti/icssg/icss_iep.c
+++ b/drivers/net/ethernet/ti/icssg/icss_iep.c
@@ -110,7 +110,6 @@ struct icss_iep {
struct ptp_clock_info ptp_info;
struct ptp_clock *ptp_clock;
struct mutex ptp_clk_mutex; /* PHC access serializer */
- spinlock_t irq_lock; /* CMP IRQ vs icss_iep_ptp_enable access */
u32 def_inc;
s16 slow_cmp_inc;
u32 slow_cmp_count;
@@ -199,7 +198,6 @@ static void icss_iep_settime(struct icss_iep *iep, u64 ns)
return;
}

- spin_lock_irqsave(&iep->irq_lock, flags);
if (iep->pps_enabled || iep->perout_enabled)
writel(0, iep->base + iep->plat_data->reg_offs[ICSS_IEP_SYNC_CTRL_REG]);

@@ -210,7 +208,6 @@ static void icss_iep_settime(struct icss_iep *iep, u64 ns)
writel(IEP_SYNC_CTRL_SYNC_N_EN(0) | IEP_SYNC_CTRL_SYNC_EN,
iep->base + iep->plat_data->reg_offs[ICSS_IEP_SYNC_CTRL_REG]);
}
- spin_unlock_irqrestore(&iep->irq_lock, flags);
}

/**
@@ -559,11 +556,9 @@ static int icss_iep_perout_enable(struct icss_iep *iep,
if (iep->perout_enabled == !!on)
goto exit;

- spin_lock_irqsave(&iep->irq_lock, flags);
ret = icss_iep_perout_enable_hw(iep, req, on);
if (!ret)
iep->perout_enabled = !!on;
- spin_unlock_irqrestore(&iep->irq_lock, flags);

exit:
mutex_unlock(&iep->ptp_clk_mutex);
@@ -589,8 +584,6 @@ static int icss_iep_pps_enable(struct icss_iep *iep, int on)
if (iep->pps_enabled == !!on)
goto exit;

- spin_lock_irqsave(&iep->irq_lock, flags);
-
rq.perout.index = 0;
if (on) {
ns = icss_iep_gettime(iep, NULL);
@@ -607,8 +600,6 @@ static int icss_iep_pps_enable(struct icss_iep *iep, int on)
if (!ret)
iep->pps_enabled = !!on;

- spin_unlock_irqrestore(&iep->irq_lock, flags);
-
exit:
mutex_unlock(&iep->ptp_clk_mutex);

@@ -853,7 +844,6 @@ static int icss_iep_probe(struct platform_device *pdev)

iep->ptp_info = icss_iep_ptp_info;
mutex_init(&iep->ptp_clk_mutex);
- spin_lock_init(&iep->irq_lock);
dev_set_drvdata(dev, iep);
icss_iep_disable(iep);


--
2.45.2



2024-06-07 18:24:37

by Simon Horman

[permalink] [raw]
Subject: Re: [PATCH net-next v3 2/4] net: ti: icss-iep: Remove spinlock-based synchronization

On Fri, Jun 07, 2024 at 02:02:43PM +0100, Diogo Ivo wrote:
> As all sources of concurrency in hardware register access occur in
> non-interrupt context eliminate spinlock-based synchronization and
> rely on the mutex-based synchronization that is already present.
>
> Signed-off-by: Diogo Ivo <[email protected]>
> ---
> drivers/net/ethernet/ti/icssg/icss_iep.c | 10 ----------
> 1 file changed, 10 deletions(-)
>
> diff --git a/drivers/net/ethernet/ti/icssg/icss_iep.c b/drivers/net/ethernet/ti/icssg/icss_iep.c
> index 3025e9c18970..1d6ccdf2583f 100644
> --- a/drivers/net/ethernet/ti/icssg/icss_iep.c
> +++ b/drivers/net/ethernet/ti/icssg/icss_iep.c
> @@ -110,7 +110,6 @@ struct icss_iep {
> struct ptp_clock_info ptp_info;
> struct ptp_clock *ptp_clock;
> struct mutex ptp_clk_mutex; /* PHC access serializer */
> - spinlock_t irq_lock; /* CMP IRQ vs icss_iep_ptp_enable access */
> u32 def_inc;
> s16 slow_cmp_inc;
> u32 slow_cmp_count;
> @@ -199,7 +198,6 @@ static void icss_iep_settime(struct icss_iep *iep, u64 ns)
> return;
> }
>
> - spin_lock_irqsave(&iep->irq_lock, flags);
> if (iep->pps_enabled || iep->perout_enabled)
> writel(0, iep->base + iep->plat_data->reg_offs[ICSS_IEP_SYNC_CTRL_REG]);
>
> @@ -210,7 +208,6 @@ static void icss_iep_settime(struct icss_iep *iep, u64 ns)
> writel(IEP_SYNC_CTRL_SYNC_N_EN(0) | IEP_SYNC_CTRL_SYNC_EN,
> iep->base + iep->plat_data->reg_offs[ICSS_IEP_SYNC_CTRL_REG]);
> }
> - spin_unlock_irqrestore(&iep->irq_lock, flags);
> }
>
> /**

Hi Diogo,

This is not a full review, but flags is now unused in icss_iep_settime()
and should be removed. Likewise in icss_iep_perout_enable() and
icss_iep_pps_enable().

Flagged by W=1 builds with gcc-13 and clang-18.

...

--
pw-bot: changes-requested