From: Greg Kroah-Hartman Date: Fri, 2 Feb 2024 01:44:21 +0000 (-0800) Subject: drop net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch from 5.15 and 6.1 X-Git-Tag: v6.1.77~58 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7266e2c44f988a3d80c44b1e87c9ed4a52273be2;p=thirdparty%2Fkernel%2Fstable-queue.git drop net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch from 5.15 and 6.1 Breaks the build. --- diff --git a/queue-5.15/net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch b/queue-5.15/net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch deleted file mode 100644 index 8b51e941f22..00000000000 --- a/queue-5.15/net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch +++ /dev/null @@ -1,139 +0,0 @@ -From f9a8748805ecba96a51e3ef86976482309006e7e Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 4 Dec 2023 11:08:10 +0100 -Subject: net: mvmdio: Avoid excessive sleeps in polled mode - -From: Tobias Waldekranz - -[ Upstream commit 7dd12fe34686d89c332b1a05104d18d728591f0a ] - -Before this change, when operating in polled mode, i.e. no IRQ is -available, every individual C45 access would be hit with a 150us sleep -after the bus access. - -For example, on a board with a CN9130 SoC connected to an MV88X3310 -PHY, a single C45 read would take around 165us: - - root@infix:~$ mdio f212a600.mdio-mii mmd 4:1 bench 0xc003 - Performed 1000 reads in 165ms - -By replacing the long sleep with a tighter poll loop, we observe a 10x -increase in bus throughput: - - root@infix:~$ mdio f212a600.mdio-mii mmd 4:1 bench 0xc003 - Performed 1000 reads in 15ms - -Signed-off-by: Tobias Waldekranz -Reviewed-by: Andrew Lunn -Tested-by: Andrew Lunn -Link: https://lore.kernel.org/r/20231204100811.2708884-3-tobias@waldekranz.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/marvell/mvmdio.c | 53 ++++++++------------------- - 1 file changed, 16 insertions(+), 37 deletions(-) - -diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c -index ef878973b859..b4c576e79a95 100644 ---- a/drivers/net/ethernet/marvell/mvmdio.c -+++ b/drivers/net/ethernet/marvell/mvmdio.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -58,11 +59,6 @@ - * - Armada 370 (Globalscale Mirabox): 41us to 43us (Polled) - */ - #define MVMDIO_SMI_TIMEOUT 1000 /* 1000us = 1ms */ --#define MVMDIO_SMI_POLL_INTERVAL_MIN 45 --#define MVMDIO_SMI_POLL_INTERVAL_MAX 55 -- --#define MVMDIO_XSMI_POLL_INTERVAL_MIN 150 --#define MVMDIO_XSMI_POLL_INTERVAL_MAX 160 - - struct orion_mdio_dev { - void __iomem *regs; -@@ -84,8 +80,6 @@ enum orion_mdio_bus_type { - - struct orion_mdio_ops { - int (*is_done)(struct orion_mdio_dev *); -- unsigned int poll_interval_min; -- unsigned int poll_interval_max; - }; - - /* Wait for the SMI unit to be ready for another operation -@@ -94,34 +88,23 @@ static int orion_mdio_wait_ready(const struct orion_mdio_ops *ops, - struct mii_bus *bus) - { - struct orion_mdio_dev *dev = bus->priv; -- unsigned long timeout = usecs_to_jiffies(MVMDIO_SMI_TIMEOUT); -- unsigned long end = jiffies + timeout; -- int timedout = 0; -+ unsigned long timeout; -+ int done; - -- while (1) { -- if (ops->is_done(dev)) -+ if (dev->err_interrupt <= 0) { -+ if (!read_poll_timeout_atomic(ops->is_done, done, done, 2, -+ MVMDIO_SMI_TIMEOUT, false, dev)) -+ return 0; -+ } else { -+ /* wait_event_timeout does not guarantee a delay of at -+ * least one whole jiffie, so timeout must be no less -+ * than two. -+ */ -+ timeout = max(usecs_to_jiffies(MVMDIO_SMI_TIMEOUT), 2); -+ -+ if (wait_event_timeout(dev->smi_busy_wait, -+ ops->is_done(dev), timeout)) - return 0; -- else if (timedout) -- break; -- -- if (dev->err_interrupt <= 0) { -- usleep_range(ops->poll_interval_min, -- ops->poll_interval_max); -- -- if (time_is_before_jiffies(end)) -- ++timedout; -- } else { -- /* wait_event_timeout does not guarantee a delay of at -- * least one whole jiffie, so timeout must be no less -- * than two. -- */ -- if (timeout < 2) -- timeout = 2; -- wait_event_timeout(dev->smi_busy_wait, -- ops->is_done(dev), timeout); -- -- ++timedout; -- } - } - - dev_err(bus->parent, "Timeout: SMI busy for too long\n"); -@@ -135,8 +118,6 @@ static int orion_mdio_smi_is_done(struct orion_mdio_dev *dev) - - static const struct orion_mdio_ops orion_mdio_smi_ops = { - .is_done = orion_mdio_smi_is_done, -- .poll_interval_min = MVMDIO_SMI_POLL_INTERVAL_MIN, -- .poll_interval_max = MVMDIO_SMI_POLL_INTERVAL_MAX, - }; - - static int orion_mdio_smi_read(struct mii_bus *bus, int mii_id, -@@ -200,8 +181,6 @@ static int orion_mdio_xsmi_is_done(struct orion_mdio_dev *dev) - - static const struct orion_mdio_ops orion_mdio_xsmi_ops = { - .is_done = orion_mdio_xsmi_is_done, -- .poll_interval_min = MVMDIO_XSMI_POLL_INTERVAL_MIN, -- .poll_interval_max = MVMDIO_XSMI_POLL_INTERVAL_MAX, - }; - - static int orion_mdio_xsmi_read(struct mii_bus *bus, int mii_id, --- -2.43.0 - diff --git a/queue-5.15/series b/queue-5.15/series index 265c3c39fc7..92cf883fe74 100644 --- a/queue-5.15/series +++ b/queue-5.15/series @@ -183,7 +183,6 @@ wifi-ath9k-fix-potential-array-index-out-of-bounds-r.patch bpf-add-map-and-need_defer-parameters-to-.map_fd_put.patch scsi-libfc-don-t-schedule-abort-twice.patch scsi-libfc-fix-up-timeout-error-in-fc_fcp_rec_error.patch -net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch bpf-set-uattr-batch.count-as-zero-before-batched-upd.patch arm-dts-rockchip-fix-rk3036-hdmi-ports-node.patch arm-dts-imx25-27-eukrea-fix-rtc-node-name.patch diff --git a/queue-6.1/net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch b/queue-6.1/net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch deleted file mode 100644 index 4c77f3d65ab..00000000000 --- a/queue-6.1/net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch +++ /dev/null @@ -1,139 +0,0 @@ -From e809ecb6a2323dc7d3d124ceba1d2ce839aea15c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 4 Dec 2023 11:08:10 +0100 -Subject: net: mvmdio: Avoid excessive sleeps in polled mode - -From: Tobias Waldekranz - -[ Upstream commit 7dd12fe34686d89c332b1a05104d18d728591f0a ] - -Before this change, when operating in polled mode, i.e. no IRQ is -available, every individual C45 access would be hit with a 150us sleep -after the bus access. - -For example, on a board with a CN9130 SoC connected to an MV88X3310 -PHY, a single C45 read would take around 165us: - - root@infix:~$ mdio f212a600.mdio-mii mmd 4:1 bench 0xc003 - Performed 1000 reads in 165ms - -By replacing the long sleep with a tighter poll loop, we observe a 10x -increase in bus throughput: - - root@infix:~$ mdio f212a600.mdio-mii mmd 4:1 bench 0xc003 - Performed 1000 reads in 15ms - -Signed-off-by: Tobias Waldekranz -Reviewed-by: Andrew Lunn -Tested-by: Andrew Lunn -Link: https://lore.kernel.org/r/20231204100811.2708884-3-tobias@waldekranz.com -Signed-off-by: Jakub Kicinski -Signed-off-by: Sasha Levin ---- - drivers/net/ethernet/marvell/mvmdio.c | 53 ++++++++------------------- - 1 file changed, 16 insertions(+), 37 deletions(-) - -diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c -index ef878973b859..b4c576e79a95 100644 ---- a/drivers/net/ethernet/marvell/mvmdio.c -+++ b/drivers/net/ethernet/marvell/mvmdio.c -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -58,11 +59,6 @@ - * - Armada 370 (Globalscale Mirabox): 41us to 43us (Polled) - */ - #define MVMDIO_SMI_TIMEOUT 1000 /* 1000us = 1ms */ --#define MVMDIO_SMI_POLL_INTERVAL_MIN 45 --#define MVMDIO_SMI_POLL_INTERVAL_MAX 55 -- --#define MVMDIO_XSMI_POLL_INTERVAL_MIN 150 --#define MVMDIO_XSMI_POLL_INTERVAL_MAX 160 - - struct orion_mdio_dev { - void __iomem *regs; -@@ -84,8 +80,6 @@ enum orion_mdio_bus_type { - - struct orion_mdio_ops { - int (*is_done)(struct orion_mdio_dev *); -- unsigned int poll_interval_min; -- unsigned int poll_interval_max; - }; - - /* Wait for the SMI unit to be ready for another operation -@@ -94,34 +88,23 @@ static int orion_mdio_wait_ready(const struct orion_mdio_ops *ops, - struct mii_bus *bus) - { - struct orion_mdio_dev *dev = bus->priv; -- unsigned long timeout = usecs_to_jiffies(MVMDIO_SMI_TIMEOUT); -- unsigned long end = jiffies + timeout; -- int timedout = 0; -+ unsigned long timeout; -+ int done; - -- while (1) { -- if (ops->is_done(dev)) -+ if (dev->err_interrupt <= 0) { -+ if (!read_poll_timeout_atomic(ops->is_done, done, done, 2, -+ MVMDIO_SMI_TIMEOUT, false, dev)) -+ return 0; -+ } else { -+ /* wait_event_timeout does not guarantee a delay of at -+ * least one whole jiffie, so timeout must be no less -+ * than two. -+ */ -+ timeout = max(usecs_to_jiffies(MVMDIO_SMI_TIMEOUT), 2); -+ -+ if (wait_event_timeout(dev->smi_busy_wait, -+ ops->is_done(dev), timeout)) - return 0; -- else if (timedout) -- break; -- -- if (dev->err_interrupt <= 0) { -- usleep_range(ops->poll_interval_min, -- ops->poll_interval_max); -- -- if (time_is_before_jiffies(end)) -- ++timedout; -- } else { -- /* wait_event_timeout does not guarantee a delay of at -- * least one whole jiffie, so timeout must be no less -- * than two. -- */ -- if (timeout < 2) -- timeout = 2; -- wait_event_timeout(dev->smi_busy_wait, -- ops->is_done(dev), timeout); -- -- ++timedout; -- } - } - - dev_err(bus->parent, "Timeout: SMI busy for too long\n"); -@@ -135,8 +118,6 @@ static int orion_mdio_smi_is_done(struct orion_mdio_dev *dev) - - static const struct orion_mdio_ops orion_mdio_smi_ops = { - .is_done = orion_mdio_smi_is_done, -- .poll_interval_min = MVMDIO_SMI_POLL_INTERVAL_MIN, -- .poll_interval_max = MVMDIO_SMI_POLL_INTERVAL_MAX, - }; - - static int orion_mdio_smi_read(struct mii_bus *bus, int mii_id, -@@ -200,8 +181,6 @@ static int orion_mdio_xsmi_is_done(struct orion_mdio_dev *dev) - - static const struct orion_mdio_ops orion_mdio_xsmi_ops = { - .is_done = orion_mdio_xsmi_is_done, -- .poll_interval_min = MVMDIO_XSMI_POLL_INTERVAL_MIN, -- .poll_interval_max = MVMDIO_XSMI_POLL_INTERVAL_MAX, - }; - - static int orion_mdio_xsmi_read(struct mii_bus *bus, int mii_id, --- -2.43.0 - diff --git a/queue-6.1/series b/queue-6.1/series index 096906d1839..9ff66f7d080 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -63,7 +63,6 @@ wifi-ath11k-fix-race-due-to-setting-ath11k_flag_ext_.patch bpf-check-rcu_read_lock_trace_held-before-calling-bp.patch scsi-libfc-don-t-schedule-abort-twice.patch scsi-libfc-fix-up-timeout-error-in-fc_fcp_rec_error.patch -net-mvmdio-avoid-excessive-sleeps-in-polled-mode.patch bpf-set-uattr-batch.count-as-zero-before-batched-upd.patch wifi-wfx-fix-possible-null-pointer-dereference-in-wf.patch arm-dts-rockchip-fix-rk3036-hdmi-ports-node.patch