From: Greg Kroah-Hartman Date: Tue, 13 Sep 2022 16:13:00 +0000 (+0200) Subject: drop net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch from everywhere X-Git-Tag: v5.19.9~5 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5893a44b20d86942d459a7ffc36f30ccdac114c7;p=thirdparty%2Fkernel%2Fstable-queue.git drop net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch from everywhere --- diff --git a/queue-5.10/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch b/queue-5.10/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch deleted file mode 100644 index baa71dc7ddf..00000000000 --- a/queue-5.10/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch +++ /dev/null @@ -1,194 +0,0 @@ -From cfe5ba8bd867d2ff8f1c43f17e923614981c85dd Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Sep 2022 16:04:03 +0200 -Subject: net: fec: Use a spinlock to guard `fep->ptp_clk_on` -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Csókás Bence - -[ Upstream commit b353b241f1eb9b6265358ffbe2632fdcb563354f ] - -Mutexes cannot be taken in a non-preemptible context, -causing a panic in `fec_ptp_save_state()`. Replacing -`ptp_clk_mutex` by `tmreg_lock` fixes this. - -Fixes: 6a4d7234ae9a ("net: fec: ptp: avoid register access when ipg clock is disabled") -Fixes: f79959220fa5 ("fec: Restart PPS after link state change") -Reported-by: Marc Kleine-Budde -Link: https://lore.kernel.org/all/20220827160922.642zlcd5foopozru@pengutronix.de/ -Signed-off-by: Csókás Bence -Tested-by: Francesco Dolcini # Toradex Apalis iMX6 -Link: https://lore.kernel.org/r/20220901140402.64804-1-csokas.bence@prolan.hu -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/freescale/fec.h | 1 - - drivers/net/ethernet/freescale/fec_main.c | 17 +++++++------- - drivers/net/ethernet/freescale/fec_ptp.c | 28 ++++++++--------------- - 3 files changed, 19 insertions(+), 27 deletions(-) - -diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h -index 6ea98af63b341..e7b23d4a22d0a 100644 ---- a/drivers/net/ethernet/freescale/fec.h -+++ b/drivers/net/ethernet/freescale/fec.h -@@ -523,7 +523,6 @@ struct fec_enet_private { - struct clk *clk_ptp; - - bool ptp_clk_on; -- struct mutex ptp_clk_mutex; - unsigned int num_tx_queues; - unsigned int num_rx_queues; - -diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c -index d8bdaf2e5365c..674591751a676 100644 ---- a/drivers/net/ethernet/freescale/fec_main.c -+++ b/drivers/net/ethernet/freescale/fec_main.c -@@ -1937,6 +1937,7 @@ static void fec_enet_phy_reset_after_clk_enable(struct net_device *ndev) - static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - { - struct fec_enet_private *fep = netdev_priv(ndev); -+ unsigned long flags; - int ret; - - if (enable) { -@@ -1945,15 +1946,15 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - return ret; - - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - ret = clk_prepare_enable(fep->clk_ptp); - if (ret) { -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - goto failed_clk_ptp; - } else { - fep->ptp_clk_on = true; - } -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - - ret = clk_prepare_enable(fep->clk_ref); -@@ -1964,10 +1965,10 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - } else { - clk_disable_unprepare(fep->clk_enet_out); - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - clk_disable_unprepare(fep->clk_ptp); - fep->ptp_clk_on = false; -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - clk_disable_unprepare(fep->clk_ref); - } -@@ -1976,10 +1977,10 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - - failed_clk_ref: - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - clk_disable_unprepare(fep->clk_ptp); - fep->ptp_clk_on = false; -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - failed_clk_ptp: - clk_disable_unprepare(fep->clk_enet_out); -@@ -3665,7 +3666,7 @@ fec_probe(struct platform_device *pdev) - fep->clk_enet_out = NULL; - - fep->ptp_clk_on = false; -- mutex_init(&fep->ptp_clk_mutex); -+ spin_lock_init(&fep->tmreg_lock); - - /* clk_ref is optional, depends on board */ - fep->clk_ref = devm_clk_get(&pdev->dev, "enet_clk_ref"); -diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c -index c5ae673005908..99bd67d3befd0 100644 ---- a/drivers/net/ethernet/freescale/fec_ptp.c -+++ b/drivers/net/ethernet/freescale/fec_ptp.c -@@ -366,21 +366,19 @@ 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; - -- mutex_lock(&adapter->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - /* Check the ptp clock */ -- if (!adapter->ptp_clk_on) { -- mutex_unlock(&adapter->ptp_clk_mutex); -+ if (!fep->ptp_clk_on) { -+ spin_unlock_irqrestore(&fep->tmreg_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); -+ ns = timecounter_read(&fep->tc); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - - *ts = ns_to_timespec64(ns); - -@@ -405,10 +403,10 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp, - unsigned long flags; - u32 counter; - -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - /* Check the ptp clock */ - if (!fep->ptp_clk_on) { -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - return -EINVAL; - } - -@@ -418,11 +416,9 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp, - */ - counter = ns & fep->cc.mask; - -- spin_lock_irqsave(&fep->tmreg_lock, flags); - writel(counter, fep->hwp + FEC_ATIME); - timecounter_init(&fep->tc, &fep->cc, ns); - spin_unlock_irqrestore(&fep->tmreg_lock, flags); -- mutex_unlock(&fep->ptp_clk_mutex); - return 0; - } - -@@ -523,13 +519,11 @@ static void fec_time_keep(struct work_struct *work) - struct fec_enet_private *fep = container_of(dwork, struct fec_enet_private, time_keep); - unsigned long flags; - -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - if (fep->ptp_clk_on) { -- spin_lock_irqsave(&fep->tmreg_lock, flags); - timecounter_read(&fep->tc); -- spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - - schedule_delayed_work(&fep->time_keep, HZ); - } -@@ -604,8 +598,6 @@ void fec_ptp_init(struct platform_device *pdev, int irq_idx) - } - fep->ptp_inc = NSEC_PER_SEC / fep->cycle_speed; - -- spin_lock_init(&fep->tmreg_lock); -- - fec_ptp_start_cyclecounter(ndev); - - INIT_DELAYED_WORK(&fep->time_keep, fec_time_keep); --- -2.35.1 - diff --git a/queue-5.10/series b/queue-5.10/series index 7102973ee1b..ae54e9f4ee2 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -56,7 +56,6 @@ sch_sfb-don-t-assume-the-skb-is-still-around-after-e.patch tipc-fix-shift-wrapping-bug-in-map_get.patch ice-use-bitmap_free-instead-of-devm_kfree.patch i40e-fix-kernel-crash-during-module-removal.patch -net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch xen-netback-only-remove-hotplug-status-when-the-vif-.patch rdma-siw-pass-a-pointer-to-virt_to_page.patch ipv6-sr-fix-out-of-bounds-read-when-setting-hmac-dat.patch diff --git a/queue-5.15/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch b/queue-5.15/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch deleted file mode 100644 index 266dec701d3..00000000000 --- a/queue-5.15/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch +++ /dev/null @@ -1,194 +0,0 @@ -From 70a28e4ba3e1b22fb6108b21a9d937ec5e0ee476 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Sep 2022 16:04:03 +0200 -Subject: net: fec: Use a spinlock to guard `fep->ptp_clk_on` -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Csókás Bence - -[ Upstream commit b353b241f1eb9b6265358ffbe2632fdcb563354f ] - -Mutexes cannot be taken in a non-preemptible context, -causing a panic in `fec_ptp_save_state()`. Replacing -`ptp_clk_mutex` by `tmreg_lock` fixes this. - -Fixes: 6a4d7234ae9a ("net: fec: ptp: avoid register access when ipg clock is disabled") -Fixes: f79959220fa5 ("fec: Restart PPS after link state change") -Reported-by: Marc Kleine-Budde -Link: https://lore.kernel.org/all/20220827160922.642zlcd5foopozru@pengutronix.de/ -Signed-off-by: Csókás Bence -Tested-by: Francesco Dolcini # Toradex Apalis iMX6 -Link: https://lore.kernel.org/r/20220901140402.64804-1-csokas.bence@prolan.hu -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/freescale/fec.h | 1 - - drivers/net/ethernet/freescale/fec_main.c | 17 +++++++------- - drivers/net/ethernet/freescale/fec_ptp.c | 28 ++++++++--------------- - 3 files changed, 19 insertions(+), 27 deletions(-) - -diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h -index ed7301b691694..939720a75f87c 100644 ---- a/drivers/net/ethernet/freescale/fec.h -+++ b/drivers/net/ethernet/freescale/fec.h -@@ -557,7 +557,6 @@ struct fec_enet_private { - struct clk *clk_2x_txclk; - - bool ptp_clk_on; -- struct mutex ptp_clk_mutex; - unsigned int num_tx_queues; - unsigned int num_rx_queues; - -diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c -index 67eb9b671244b..7561524e7c361 100644 ---- a/drivers/net/ethernet/freescale/fec_main.c -+++ b/drivers/net/ethernet/freescale/fec_main.c -@@ -1984,6 +1984,7 @@ static void fec_enet_phy_reset_after_clk_enable(struct net_device *ndev) - static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - { - struct fec_enet_private *fep = netdev_priv(ndev); -+ unsigned long flags; - int ret; - - if (enable) { -@@ -1992,15 +1993,15 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - return ret; - - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - ret = clk_prepare_enable(fep->clk_ptp); - if (ret) { -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - goto failed_clk_ptp; - } else { - fep->ptp_clk_on = true; - } -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - - ret = clk_prepare_enable(fep->clk_ref); -@@ -2015,10 +2016,10 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - } else { - clk_disable_unprepare(fep->clk_enet_out); - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - clk_disable_unprepare(fep->clk_ptp); - fep->ptp_clk_on = false; -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - clk_disable_unprepare(fep->clk_ref); - clk_disable_unprepare(fep->clk_2x_txclk); -@@ -2031,10 +2032,10 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - clk_disable_unprepare(fep->clk_ref); - failed_clk_ref: - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - clk_disable_unprepare(fep->clk_ptp); - fep->ptp_clk_on = false; -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - failed_clk_ptp: - clk_disable_unprepare(fep->clk_enet_out); -@@ -3866,7 +3867,7 @@ fec_probe(struct platform_device *pdev) - fep->clk_enet_out = NULL; - - fep->ptp_clk_on = false; -- mutex_init(&fep->ptp_clk_mutex); -+ spin_lock_init(&fep->tmreg_lock); - - /* clk_ref is optional, depends on board */ - fep->clk_ref = devm_clk_get(&pdev->dev, "enet_clk_ref"); -diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c -index c5ae673005908..99bd67d3befd0 100644 ---- a/drivers/net/ethernet/freescale/fec_ptp.c -+++ b/drivers/net/ethernet/freescale/fec_ptp.c -@@ -366,21 +366,19 @@ 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; - -- mutex_lock(&adapter->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - /* Check the ptp clock */ -- if (!adapter->ptp_clk_on) { -- mutex_unlock(&adapter->ptp_clk_mutex); -+ if (!fep->ptp_clk_on) { -+ spin_unlock_irqrestore(&fep->tmreg_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); -+ ns = timecounter_read(&fep->tc); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - - *ts = ns_to_timespec64(ns); - -@@ -405,10 +403,10 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp, - unsigned long flags; - u32 counter; - -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - /* Check the ptp clock */ - if (!fep->ptp_clk_on) { -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - return -EINVAL; - } - -@@ -418,11 +416,9 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp, - */ - counter = ns & fep->cc.mask; - -- spin_lock_irqsave(&fep->tmreg_lock, flags); - writel(counter, fep->hwp + FEC_ATIME); - timecounter_init(&fep->tc, &fep->cc, ns); - spin_unlock_irqrestore(&fep->tmreg_lock, flags); -- mutex_unlock(&fep->ptp_clk_mutex); - return 0; - } - -@@ -523,13 +519,11 @@ static void fec_time_keep(struct work_struct *work) - struct fec_enet_private *fep = container_of(dwork, struct fec_enet_private, time_keep); - unsigned long flags; - -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - if (fep->ptp_clk_on) { -- spin_lock_irqsave(&fep->tmreg_lock, flags); - timecounter_read(&fep->tc); -- spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - - schedule_delayed_work(&fep->time_keep, HZ); - } -@@ -604,8 +598,6 @@ void fec_ptp_init(struct platform_device *pdev, int irq_idx) - } - fep->ptp_inc = NSEC_PER_SEC / fep->cycle_speed; - -- spin_lock_init(&fep->tmreg_lock); -- - fec_ptp_start_cyclecounter(ndev); - - INIT_DELAYED_WORK(&fep->time_keep, fec_time_keep); --- -2.35.1 - diff --git a/queue-5.15/series b/queue-5.15/series index f8b95865f04..54beaac5e94 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -81,7 +81,6 @@ tcp-tx-zerocopy-should-not-sense-pfmemalloc-status.patch ice-use-bitmap_free-instead-of-devm_kfree.patch i40e-fix-kernel-crash-during-module-removal.patch iavf-detach-device-during-reset-task.patch -net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch xen-netback-only-remove-hotplug-status-when-the-vif-.patch rdma-siw-pass-a-pointer-to-virt_to_page.patch ipv6-sr-fix-out-of-bounds-read-when-setting-hmac-dat.patch diff --git a/queue-5.19/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch b/queue-5.19/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch deleted file mode 100644 index bd8db145132..00000000000 --- a/queue-5.19/net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch +++ /dev/null @@ -1,194 +0,0 @@ -From 230da0d4c35127b68ae16945271ac4270ce5d096 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 1 Sep 2022 16:04:03 +0200 -Subject: net: fec: Use a spinlock to guard `fep->ptp_clk_on` -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Csókás Bence - -[ Upstream commit b353b241f1eb9b6265358ffbe2632fdcb563354f ] - -Mutexes cannot be taken in a non-preemptible context, -causing a panic in `fec_ptp_save_state()`. Replacing -`ptp_clk_mutex` by `tmreg_lock` fixes this. - -Fixes: 6a4d7234ae9a ("net: fec: ptp: avoid register access when ipg clock is disabled") -Fixes: f79959220fa5 ("fec: Restart PPS after link state change") -Reported-by: Marc Kleine-Budde -Link: https://lore.kernel.org/all/20220827160922.642zlcd5foopozru@pengutronix.de/ -Signed-off-by: Csókás Bence -Tested-by: Francesco Dolcini # Toradex Apalis iMX6 -Link: https://lore.kernel.org/r/20220901140402.64804-1-csokas.bence@prolan.hu -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/freescale/fec.h | 1 - - drivers/net/ethernet/freescale/fec_main.c | 17 +++++++------- - drivers/net/ethernet/freescale/fec_ptp.c | 28 ++++++++--------------- - 3 files changed, 19 insertions(+), 27 deletions(-) - -diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h -index ed7301b691694..939720a75f87c 100644 ---- a/drivers/net/ethernet/freescale/fec.h -+++ b/drivers/net/ethernet/freescale/fec.h -@@ -557,7 +557,6 @@ struct fec_enet_private { - struct clk *clk_2x_txclk; - - bool ptp_clk_on; -- struct mutex ptp_clk_mutex; - unsigned int num_tx_queues; - unsigned int num_rx_queues; - -diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c -index a90275143d873..8538ea31ca803 100644 ---- a/drivers/net/ethernet/freescale/fec_main.c -+++ b/drivers/net/ethernet/freescale/fec_main.c -@@ -1994,6 +1994,7 @@ static void fec_enet_phy_reset_after_clk_enable(struct net_device *ndev) - static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - { - struct fec_enet_private *fep = netdev_priv(ndev); -+ unsigned long flags; - int ret; - - if (enable) { -@@ -2002,15 +2003,15 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - return ret; - - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - ret = clk_prepare_enable(fep->clk_ptp); - if (ret) { -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - goto failed_clk_ptp; - } else { - fep->ptp_clk_on = true; - } -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - - ret = clk_prepare_enable(fep->clk_ref); -@@ -2025,10 +2026,10 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - } else { - clk_disable_unprepare(fep->clk_enet_out); - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - clk_disable_unprepare(fep->clk_ptp); - fep->ptp_clk_on = false; -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - clk_disable_unprepare(fep->clk_ref); - clk_disable_unprepare(fep->clk_2x_txclk); -@@ -2041,10 +2042,10 @@ static int fec_enet_clk_enable(struct net_device *ndev, bool enable) - clk_disable_unprepare(fep->clk_ref); - failed_clk_ref: - if (fep->clk_ptp) { -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - clk_disable_unprepare(fep->clk_ptp); - fep->ptp_clk_on = false; -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } - failed_clk_ptp: - clk_disable_unprepare(fep->clk_enet_out); -@@ -3873,7 +3874,7 @@ fec_probe(struct platform_device *pdev) - } - - fep->ptp_clk_on = false; -- mutex_init(&fep->ptp_clk_mutex); -+ spin_lock_init(&fep->tmreg_lock); - - /* clk_ref is optional, depends on board */ - fep->clk_ref = devm_clk_get_optional(&pdev->dev, "enet_clk_ref"); -diff --git a/drivers/net/ethernet/freescale/fec_ptp.c b/drivers/net/ethernet/freescale/fec_ptp.c -index 3dc3c0b626c21..af20aa2379640 100644 ---- a/drivers/net/ethernet/freescale/fec_ptp.c -+++ b/drivers/net/ethernet/freescale/fec_ptp.c -@@ -365,21 +365,19 @@ 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; - -- mutex_lock(&adapter->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - /* Check the ptp clock */ -- if (!adapter->ptp_clk_on) { -- mutex_unlock(&adapter->ptp_clk_mutex); -+ if (!fep->ptp_clk_on) { -+ spin_unlock_irqrestore(&fep->tmreg_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); -+ ns = timecounter_read(&fep->tc); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - - *ts = ns_to_timespec64(ns); - -@@ -404,10 +402,10 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp, - unsigned long flags; - u32 counter; - -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - /* Check the ptp clock */ - if (!fep->ptp_clk_on) { -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - return -EINVAL; - } - -@@ -417,11 +415,9 @@ static int fec_ptp_settime(struct ptp_clock_info *ptp, - */ - counter = ns & fep->cc.mask; - -- spin_lock_irqsave(&fep->tmreg_lock, flags); - writel(counter, fep->hwp + FEC_ATIME); - timecounter_init(&fep->tc, &fep->cc, ns); - spin_unlock_irqrestore(&fep->tmreg_lock, flags); -- mutex_unlock(&fep->ptp_clk_mutex); - return 0; - } - -@@ -518,13 +514,11 @@ static void fec_time_keep(struct work_struct *work) - struct fec_enet_private *fep = container_of(dwork, struct fec_enet_private, time_keep); - unsigned long flags; - -- mutex_lock(&fep->ptp_clk_mutex); -+ spin_lock_irqsave(&fep->tmreg_lock, flags); - if (fep->ptp_clk_on) { -- spin_lock_irqsave(&fep->tmreg_lock, flags); - timecounter_read(&fep->tc); -- spin_unlock_irqrestore(&fep->tmreg_lock, flags); - } -- mutex_unlock(&fep->ptp_clk_mutex); -+ spin_unlock_irqrestore(&fep->tmreg_lock, flags); - - schedule_delayed_work(&fep->time_keep, HZ); - } -@@ -599,8 +593,6 @@ void fec_ptp_init(struct platform_device *pdev, int irq_idx) - } - fep->ptp_inc = NSEC_PER_SEC / fep->cycle_speed; - -- spin_lock_init(&fep->tmreg_lock); -- - fec_ptp_start_cyclecounter(ndev); - - INIT_DELAYED_WORK(&fep->time_keep, fec_time_keep); --- -2.35.1 - diff --git a/queue-5.19/series b/queue-5.19/series index 854268a3722..9fff93c1afd 100644 --- a/queue-5.19/series +++ b/queue-5.19/series @@ -120,7 +120,6 @@ ice-fix-dma-mappings-leak.patch ice-use-bitmap_free-instead-of-devm_kfree.patch i40e-fix-kernel-crash-during-module-removal.patch iavf-detach-device-during-reset-task.patch -net-fec-use-a-spinlock-to-guard-fep-ptp_clk_on.patch xen-netback-only-remove-hotplug-status-when-the-vif-.patch block-don-t-add-partitions-if-gd_suppress_part_scan-.patch rdma-siw-pass-a-pointer-to-virt_to_page.patch