* [PATCH net-next v3 1/3] net: stmmac: Add generic suspend/resume helper for PCI-based controllers
2025-11-04 15:16 [PATCH net-next v3 0/3] Unify platform suspend/resume routines for PCI DWMAC glue Yao Zi
@ 2025-11-04 15:16 ` Yao Zi
2025-11-04 17:20 ` Russell King (Oracle)
2025-11-04 15:16 ` [PATCH net-next v3 2/3] net: stmmac: loongson: Use generic PCI suspend/resume routines Yao Zi
2025-11-04 15:16 ` [PATCH net-next v3 3/3] net: stmmac: pci: " Yao Zi
2 siblings, 1 reply; 8+ messages in thread
From: Yao Zi @ 2025-11-04 15:16 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Yanteng Si, Huacai Chen, Russell King (Oracle),
Philipp Stanner, Tiezhu Yang, Qunqin Zhao, Yao Zi,
Vladimir Oltean, Furong Xu, Kunihiko Hayashi, Jacob Keller
Cc: netdev, linux-kernel
Most glue driver for PCI-based DWMAC controllers utilize similar
platform suspend/resume routines. Add a generic implementation to reduce
duplicated code.
Signed-off-by: Yao Zi <ziyao@disroot.org>
---
drivers/net/ethernet/stmicro/stmmac/Kconfig | 8 ++++
drivers/net/ethernet/stmicro/stmmac/Makefile | 1 +
.../ethernet/stmicro/stmmac/stmmac_libpci.c | 48 +++++++++++++++++++
.../ethernet/stmicro/stmmac/stmmac_libpci.h | 12 +++++
4 files changed, 69 insertions(+)
create mode 100644 drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c
create mode 100644 drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 87c5bea6c2a2..1350f16f7138 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -349,6 +349,14 @@ config DWMAC_VISCONTI
endif
+config STMMAC_LIBPCI
+ tristate "STMMAC PCI helper library"
+ depends on PCI
+ default y
+ help
+ This selects the PCI bus helpers for the stmmac driver. If you
+ have a controller with PCI interface, say Y or M here.
+
config DWMAC_INTEL
tristate "Intel GMAC support"
default X86
diff --git a/drivers/net/ethernet/stmicro/stmmac/Makefile b/drivers/net/ethernet/stmicro/stmmac/Makefile
index 1681a8a28313..7bf528731034 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Makefile
+++ b/drivers/net/ethernet/stmicro/stmmac/Makefile
@@ -44,6 +44,7 @@ obj-$(CONFIG_DWMAC_VISCONTI) += dwmac-visconti.o
stmmac-platform-objs:= stmmac_platform.o
dwmac-altr-socfpga-objs := dwmac-socfpga.o
+obj-$(CONFIG_STMMAC_LIBPCI) += stmmac_libpci.o
obj-$(CONFIG_STMMAC_PCI) += stmmac-pci.o
obj-$(CONFIG_DWMAC_INTEL) += dwmac-intel.o
obj-$(CONFIG_DWMAC_LOONGSON) += dwmac-loongson.o
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c
new file mode 100644
index 000000000000..5c5dd502f79a
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.c
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * PCI bus helpers for STMMAC driver
+ * Copyright (C) 2025 Yao Zi <ziyao@disroot.org>
+ */
+
+#include <linux/device.h>
+#include <linux/pci.h>
+
+#include "stmmac_libpci.h"
+
+int stmmac_pci_plat_suspend(struct device *dev, void *bsp_priv)
+{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ int ret;
+
+ ret = pci_save_state(pdev);
+ if (ret)
+ return ret;
+
+ pci_disable_device(pdev);
+ pci_wake_from_d3(pdev, true);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(stmmac_pci_plat_suspend);
+
+int stmmac_pci_plat_resume(struct device *dev, void *bsp_priv)
+{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ int ret;
+
+ pci_restore_state(pdev);
+ pci_set_power_state(pdev, PCI_D0);
+
+ ret = pci_enable_device(pdev);
+ if (ret)
+ return ret;
+
+ pci_set_master(pdev);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(stmmac_pci_plat_resume);
+
+MODULE_DESCRIPTION("STMMAC PCI helper library");
+MODULE_AUTHOR("Yao Zi <ziyao@disroot.org>");
+MODULE_LICENSE("GPL");
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h b/drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h
new file mode 100644
index 000000000000..71553184f982
--- /dev/null
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_libpci.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2025 Yao Zi <ziyao@disroot.org>
+ */
+
+#ifndef __STMMAC_LIBPCI_H__
+#define __STMMAC_LIBPCI_H__
+
+int stmmac_pci_plat_suspend(struct device *dev, void *bsp_priv);
+int stmmac_pci_plat_resume(struct device *dev, void *bsp_priv);
+
+#endif /* __STMMAC_LIBPCI_H__ */
--
2.51.2
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH net-next v3 1/3] net: stmmac: Add generic suspend/resume helper for PCI-based controllers
2025-11-04 15:16 ` [PATCH net-next v3 1/3] net: stmmac: Add generic suspend/resume helper for PCI-based controllers Yao Zi
@ 2025-11-04 17:20 ` Russell King (Oracle)
0 siblings, 0 replies; 8+ messages in thread
From: Russell King (Oracle) @ 2025-11-04 17:20 UTC (permalink / raw)
To: Yao Zi
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Yanteng Si, Huacai Chen, Philipp Stanner,
Tiezhu Yang, Qunqin Zhao, Vladimir Oltean, Furong Xu,
Kunihiko Hayashi, Jacob Keller, netdev, linux-kernel
On Tue, Nov 04, 2025 at 03:16:45PM +0000, Yao Zi wrote:
> Most glue driver for PCI-based DWMAC controllers utilize similar
> platform suspend/resume routines. Add a generic implementation to reduce
> duplicated code.
>
> Signed-off-by: Yao Zi <ziyao@disroot.org>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thanks!
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next v3 2/3] net: stmmac: loongson: Use generic PCI suspend/resume routines
2025-11-04 15:16 [PATCH net-next v3 0/3] Unify platform suspend/resume routines for PCI DWMAC glue Yao Zi
2025-11-04 15:16 ` [PATCH net-next v3 1/3] net: stmmac: Add generic suspend/resume helper for PCI-based controllers Yao Zi
@ 2025-11-04 15:16 ` Yao Zi
2025-11-04 17:22 ` Russell King (Oracle)
2025-11-04 15:16 ` [PATCH net-next v3 3/3] net: stmmac: pci: " Yao Zi
2 siblings, 1 reply; 8+ messages in thread
From: Yao Zi @ 2025-11-04 15:16 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Yanteng Si, Huacai Chen, Russell King (Oracle),
Philipp Stanner, Tiezhu Yang, Qunqin Zhao, Yao Zi,
Vladimir Oltean, Furong Xu, Kunihiko Hayashi, Jacob Keller
Cc: netdev, linux-kernel
Convert glue driver for Loongson DWMAC controller to use the generic
platform suspend/resume routines for PCI controllers, instead of
implementing its own one.
Signed-off-by: Yao Zi <ziyao@disroot.org>
---
drivers/net/ethernet/stmicro/stmmac/Kconfig | 4 +++
.../ethernet/stmicro/stmmac/dwmac-loongson.c | 36 ++-----------------
2 files changed, 7 insertions(+), 33 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 1350f16f7138..7ec7c7630c41 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -367,6 +367,8 @@ config DWMAC_INTEL
This selects the Intel platform specific bus support for the
stmmac driver. This driver is used for Intel Quark/EHL/TGL.
+if STMMAC_LIBPCI
+
config DWMAC_LOONGSON
tristate "Loongson PCI DWMAC support"
default MACH_LOONGSON64
@@ -376,6 +378,8 @@ config DWMAC_LOONGSON
This selects the LOONGSON PCI bus support for the stmmac driver,
Support for ethernet controller on Loongson-2K1000 SoC and LS7A1000 bridge.
+endif
+
config STMMAC_PCI
tristate "STMMAC PCI bus support"
depends on STMMAC_ETH && PCI
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
index 2a3ac0136cdb..584dc4ff8320 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
@@ -8,6 +8,7 @@
#include <linux/device.h>
#include <linux/of_irq.h>
#include "stmmac.h"
+#include "stmmac_libpci.h"
#include "dwmac_dma.h"
#include "dwmac1000.h"
@@ -525,37 +526,6 @@ static int loongson_dwmac_fix_reset(struct stmmac_priv *priv, void __iomem *ioad
10000, 2000000);
}
-static int loongson_dwmac_suspend(struct device *dev, void *bsp_priv)
-{
- struct pci_dev *pdev = to_pci_dev(dev);
- int ret;
-
- ret = pci_save_state(pdev);
- if (ret)
- return ret;
-
- pci_disable_device(pdev);
- pci_wake_from_d3(pdev, true);
- return 0;
-}
-
-static int loongson_dwmac_resume(struct device *dev, void *bsp_priv)
-{
- struct pci_dev *pdev = to_pci_dev(dev);
- int ret;
-
- pci_restore_state(pdev);
- pci_set_power_state(pdev, PCI_D0);
-
- ret = pci_enable_device(pdev);
- if (ret)
- return ret;
-
- pci_set_master(pdev);
-
- return 0;
-}
-
static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id *id)
{
struct plat_stmmacenet_data *plat;
@@ -600,8 +570,8 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
plat->bsp_priv = ld;
plat->setup = loongson_dwmac_setup;
plat->fix_soc_reset = loongson_dwmac_fix_reset;
- plat->suspend = loongson_dwmac_suspend;
- plat->resume = loongson_dwmac_resume;
+ plat->suspend = stmmac_pci_plat_suspend;
+ plat->resume = stmmac_pci_plat_resume;
ld->dev = &pdev->dev;
ld->loongson_id = readl(res.addr + GMAC_VERSION) & 0xff;
--
2.51.2
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH net-next v3 2/3] net: stmmac: loongson: Use generic PCI suspend/resume routines
2025-11-04 15:16 ` [PATCH net-next v3 2/3] net: stmmac: loongson: Use generic PCI suspend/resume routines Yao Zi
@ 2025-11-04 17:22 ` Russell King (Oracle)
2025-11-05 3:21 ` Yao Zi
0 siblings, 1 reply; 8+ messages in thread
From: Russell King (Oracle) @ 2025-11-04 17:22 UTC (permalink / raw)
To: Yao Zi
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Yanteng Si, Huacai Chen, Philipp Stanner,
Tiezhu Yang, Qunqin Zhao, Vladimir Oltean, Furong Xu,
Kunihiko Hayashi, Jacob Keller, netdev, linux-kernel
On Tue, Nov 04, 2025 at 03:16:46PM +0000, Yao Zi wrote:
> --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
> +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
> @@ -367,6 +367,8 @@ config DWMAC_INTEL
> This selects the Intel platform specific bus support for the
> stmmac driver. This driver is used for Intel Quark/EHL/TGL.
>
> +if STMMAC_LIBPCI
> +
> config DWMAC_LOONGSON
> tristate "Loongson PCI DWMAC support"
> default MACH_LOONGSON64
As the next line is:
depends on (MACH_LOONGSON64 || COMPILE_TEST) && STMMAC_ETH && PCI
where STMMAC_LIBPCI depends on PCI, and the whole lot is surrounded by
if STMMAC_ETH ... endif, shouldn't this become:
depends on MACH_LOONGSON64 || COMPILE_TEST
?
Otherwise, looks good, thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH net-next v3 2/3] net: stmmac: loongson: Use generic PCI suspend/resume routines
2025-11-04 17:22 ` Russell King (Oracle)
@ 2025-11-05 3:21 ` Yao Zi
0 siblings, 0 replies; 8+ messages in thread
From: Yao Zi @ 2025-11-05 3:21 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Yanteng Si, Huacai Chen, Philipp Stanner,
Tiezhu Yang, Qunqin Zhao, Vladimir Oltean, Furong Xu,
Kunihiko Hayashi, Jacob Keller, netdev, linux-kernel
On Tue, Nov 04, 2025 at 05:22:53PM +0000, Russell King (Oracle) wrote:
> On Tue, Nov 04, 2025 at 03:16:46PM +0000, Yao Zi wrote:
> > --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
> > +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
> > @@ -367,6 +367,8 @@ config DWMAC_INTEL
> > This selects the Intel platform specific bus support for the
> > stmmac driver. This driver is used for Intel Quark/EHL/TGL.
> >
> > +if STMMAC_LIBPCI
> > +
> > config DWMAC_LOONGSON
> > tristate "Loongson PCI DWMAC support"
> > default MACH_LOONGSON64
>
> As the next line is:
>
> depends on (MACH_LOONGSON64 || COMPILE_TEST) && STMMAC_ETH && PCI
>
> where STMMAC_LIBPCI depends on PCI, and the whole lot is surrounded by
> if STMMAC_ETH ... endif, shouldn't this become:
>
> depends on MACH_LOONGSON64 || COMPILE_TEST
>
> ?
>
> Otherwise, looks good, thanks.
I was originally planning to send a separate patch to remove the
redundant depends on STMMAC_ETH, since STMMAC_SELFTESTS,
STMMAC_PLATFORM, DWMAC_INTEL have similar issues. But yes PCI could be
removed from the depends as well with this series applied, so I'm not
sure whether it's better to do the simplication for DWMAC_LOONGSON and
STMMAC_PCI while adding STMMAC_LIBPCI dependency to them, or separate a
patch with a clear topic "removing redundant depends".
I prefer a separate patch to do all the Kconfig clean-up, but am willing
to simplify the depends lines in this series, too if you consider it's
better.
By the way, if I need to send v4 of the series with your proposed
simplification, should I apply your Reviewed-by tag for PATCH 2 and 3?
Thanks,
Yao Zi
> --
> RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
> FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH net-next v3 3/3] net: stmmac: pci: Use generic PCI suspend/resume routines
2025-11-04 15:16 [PATCH net-next v3 0/3] Unify platform suspend/resume routines for PCI DWMAC glue Yao Zi
2025-11-04 15:16 ` [PATCH net-next v3 1/3] net: stmmac: Add generic suspend/resume helper for PCI-based controllers Yao Zi
2025-11-04 15:16 ` [PATCH net-next v3 2/3] net: stmmac: loongson: Use generic PCI suspend/resume routines Yao Zi
@ 2025-11-04 15:16 ` Yao Zi
2025-11-04 17:23 ` Russell King (Oracle)
2 siblings, 1 reply; 8+ messages in thread
From: Yao Zi @ 2025-11-04 15:16 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Yanteng Si, Huacai Chen, Russell King (Oracle),
Philipp Stanner, Tiezhu Yang, Qunqin Zhao, Yao Zi,
Vladimir Oltean, Furong Xu, Kunihiko Hayashi, Jacob Keller
Cc: netdev, linux-kernel
Convert STMMAC PCI glue driver to use the generic platform
suspend/resume routines for PCI controllers, instead of implementing its
own one.
Signed-off-by: Yao Zi <ziyao@disroot.org>
---
drivers/net/ethernet/stmicro/stmmac/Kconfig | 5 +--
.../net/ethernet/stmicro/stmmac/stmmac_pci.c | 36 ++-----------------
2 files changed, 6 insertions(+), 35 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 7ec7c7630c41..59aa04e71aab 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -378,8 +378,6 @@ config DWMAC_LOONGSON
This selects the LOONGSON PCI bus support for the stmmac driver,
Support for ethernet controller on Loongson-2K1000 SoC and LS7A1000 bridge.
-endif
-
config STMMAC_PCI
tristate "STMMAC PCI bus support"
depends on STMMAC_ETH && PCI
@@ -392,4 +390,7 @@ config STMMAC_PCI
If you have a controller with this interface, say Y or M here.
If unsure, say N.
+
+endif
+
endif
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
index 94b3a3b27270..fa92be672c54 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_pci.c
@@ -14,6 +14,7 @@
#include <linux/dmi.h>
#include "stmmac.h"
+#include "stmmac_libpci.h"
struct stmmac_pci_info {
int (*setup)(struct pci_dev *pdev, struct plat_stmmacenet_data *plat);
@@ -139,37 +140,6 @@ static const struct stmmac_pci_info snps_gmac5_pci_info = {
.setup = snps_gmac5_default_data,
};
-static int stmmac_pci_suspend(struct device *dev, void *bsp_priv)
-{
- struct pci_dev *pdev = to_pci_dev(dev);
- int ret;
-
- ret = pci_save_state(pdev);
- if (ret)
- return ret;
-
- pci_disable_device(pdev);
- pci_wake_from_d3(pdev, true);
- return 0;
-}
-
-static int stmmac_pci_resume(struct device *dev, void *bsp_priv)
-{
- struct pci_dev *pdev = to_pci_dev(dev);
- int ret;
-
- pci_restore_state(pdev);
- pci_set_power_state(pdev, PCI_D0);
-
- ret = pci_enable_device(pdev);
- if (ret)
- return ret;
-
- pci_set_master(pdev);
-
- return 0;
-}
-
/**
* stmmac_pci_probe
*
@@ -249,8 +219,8 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
plat->safety_feat_cfg->prtyen = 1;
plat->safety_feat_cfg->tmouten = 1;
- plat->suspend = stmmac_pci_suspend;
- plat->resume = stmmac_pci_resume;
+ plat->suspend = stmmac_pci_plat_suspend;
+ plat->resume = stmmac_pci_plat_resume;
return stmmac_dvr_probe(&pdev->dev, plat, &res);
}
--
2.51.2
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH net-next v3 3/3] net: stmmac: pci: Use generic PCI suspend/resume routines
2025-11-04 15:16 ` [PATCH net-next v3 3/3] net: stmmac: pci: " Yao Zi
@ 2025-11-04 17:23 ` Russell King (Oracle)
0 siblings, 0 replies; 8+ messages in thread
From: Russell King (Oracle) @ 2025-11-04 17:23 UTC (permalink / raw)
To: Yao Zi
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Yanteng Si, Huacai Chen, Philipp Stanner,
Tiezhu Yang, Qunqin Zhao, Vladimir Oltean, Furong Xu,
Kunihiko Hayashi, Jacob Keller, netdev, linux-kernel
On Tue, Nov 04, 2025 at 03:16:47PM +0000, Yao Zi wrote:
> Convert STMMAC PCI glue driver to use the generic platform
> suspend/resume routines for PCI controllers, instead of implementing its
> own one.
>
> Signed-off-by: Yao Zi <ziyao@disroot.org>
> ---
> drivers/net/ethernet/stmicro/stmmac/Kconfig | 5 +--
> .../net/ethernet/stmicro/stmmac/stmmac_pci.c | 36 ++-----------------
> 2 files changed, 6 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
> index 7ec7c7630c41..59aa04e71aab 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
> +++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
> @@ -378,8 +378,6 @@ config DWMAC_LOONGSON
> This selects the LOONGSON PCI bus support for the stmmac driver,
> Support for ethernet controller on Loongson-2K1000 SoC and LS7A1000 bridge.
>
> -endif
> -
> config STMMAC_PCI
> tristate "STMMAC PCI bus support"
> depends on STMMAC_ETH && PCI
As per patch 2, this line can be removed.
Otherwise, looks good, thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 8+ messages in thread