* [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register()
[not found] <20260116113847.1827694-1-lihaoxiang@isrc.iscas.ac.cn>
@ 2026-01-16 11:38 ` Haoxiang Li
2026-01-16 15:29 ` Brian Masney
2026-01-17 10:15 ` Markus Elfring
2026-01-16 11:38 ` [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup() Haoxiang Li
` (2 subsequent siblings)
3 siblings, 2 replies; 11+ messages in thread
From: Haoxiang Li @ 2026-01-16 11:38 UTC (permalink / raw)
To: mturquette, sboyd, bmasney; +Cc: linux-clk, linux-kernel, Haoxiang Li, stable
If clk_register_composite() fails, call kfree() to release
div and gate.
Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
Cc: stable@vger.kernel.org
Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
---
drivers/clk/st/clkgen-pll.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
index c258ff87a171..a7d605b52cf3 100644
--- a/drivers/clk/st/clkgen-pll.c
+++ b/drivers/clk/st/clkgen-pll.c
@@ -742,8 +742,11 @@ static struct clk * __init clkgen_odf_register(const char *parent_name,
&div->hw, &clk_divider_ops,
&gate->hw, &clk_gate_ops,
flags);
- if (IS_ERR(clk))
+ if (IS_ERR(clk)) {
+ kfree(div);
+ kfree(gate);
return clk;
+ }
pr_debug("%s: parent %s rate %lu\n",
__clk_get_name(clk),
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup()
[not found] <20260116113847.1827694-1-lihaoxiang@isrc.iscas.ac.cn>
2026-01-16 11:38 ` [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register() Haoxiang Li
@ 2026-01-16 11:38 ` Haoxiang Li
2026-01-16 15:40 ` Brian Masney
2026-01-17 12:57 ` Markus Elfring
2026-01-16 11:38 ` [PATCH 5/7] clk: st: clkgen-pll: Add clk_unregister for pll_clk " Haoxiang Li
2026-01-16 11:38 ` [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk " Haoxiang Li
3 siblings, 2 replies; 11+ messages in thread
From: Haoxiang Li @ 2026-01-16 11:38 UTC (permalink / raw)
To: mturquette, sboyd, bmasney; +Cc: linux-clk, linux-kernel, Haoxiang Li, stable
Add a iounmap() to release the memory allocated by
clkgen_get_register_base() in error path.
Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
Cc: stable@vger.kernel.org
Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
---
drivers/clk/st/clkgen-pll.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
index 4ff9b35fe399..0239835b4015 100644
--- a/drivers/clk/st/clkgen-pll.c
+++ b/drivers/clk/st/clkgen-pll.c
@@ -778,8 +778,8 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
pll_clk = clkgen_pll_register(parent_name, datac->data, pll_base, pll_flags,
np->name, datac->data->lock);
- return;
if (IS_ERR(pll_clk))
+ goto err_unmap;
pll_name = __clk_get_name(pll_clk);
@@ -829,7 +829,11 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
kfree(pll_name);
kfree(clk_data->clks);
kfree(clk_data);
+err_unmap:
+ if (pll_base)
+ iounmap(pll_base);
}
+
static void __init clkgen_c32_pll0_setup(struct device_node *np)
{
clkgen_c32_pll_setup(np,
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 5/7] clk: st: clkgen-pll: Add clk_unregister for pll_clk in clkgen_c32_pll_setup()
[not found] <20260116113847.1827694-1-lihaoxiang@isrc.iscas.ac.cn>
2026-01-16 11:38 ` [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register() Haoxiang Li
2026-01-16 11:38 ` [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup() Haoxiang Li
@ 2026-01-16 11:38 ` Haoxiang Li
2026-01-16 15:43 ` Brian Masney
2026-01-16 11:38 ` [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk " Haoxiang Li
3 siblings, 1 reply; 11+ messages in thread
From: Haoxiang Li @ 2026-01-16 11:38 UTC (permalink / raw)
To: mturquette, sboyd, bmasney; +Cc: linux-clk, linux-kernel, Haoxiang Li, stable
In clkgen_c32_pll_setup(), clkgen_pll_register() allocated a
clkgen_pll memory and registered a clk. Add clk_unregister()
and kfree() to release the memory if error occurs.
Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
Cc: stable@vger.kernel.org
Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
---
drivers/clk/st/clkgen-pll.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
index 0239835b4015..f748e1fce735 100644
--- a/drivers/clk/st/clkgen-pll.c
+++ b/drivers/clk/st/clkgen-pll.c
@@ -764,7 +764,7 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
int num_odfs, odf;
struct clk_onecell_data *clk_data;
unsigned long pll_flags = 0;
-
+ struct clkgen_pll *pll;
parent_name = of_clk_get_parent_name(np, 0);
if (!parent_name)
@@ -787,7 +787,7 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
clk_data = kzalloc(sizeof(*clk_data), GFP_KERNEL);
if (!clk_data)
- return;
+ goto err_pll_unregister;
clk_data->clk_num = num_odfs;
clk_data->clks = kcalloc(clk_data->clk_num, sizeof(struct clk *),
@@ -829,6 +829,10 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
kfree(pll_name);
kfree(clk_data->clks);
kfree(clk_data);
+err_pll_unregister:
+ pll = to_clkgen_pll(__clk_get_hw(pll_clk));
+ clk_unregister(pll_clk);
+ kfree(pll);
err_unmap:
if (pll_base)
iounmap(pll_base);
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk in clkgen_c32_pll_setup()
[not found] <20260116113847.1827694-1-lihaoxiang@isrc.iscas.ac.cn>
` (2 preceding siblings ...)
2026-01-16 11:38 ` [PATCH 5/7] clk: st: clkgen-pll: Add clk_unregister for pll_clk " Haoxiang Li
@ 2026-01-16 11:38 ` Haoxiang Li
2026-01-16 15:53 ` Brian Masney
2026-01-17 13:43 ` Markus Elfring
3 siblings, 2 replies; 11+ messages in thread
From: Haoxiang Li @ 2026-01-16 11:38 UTC (permalink / raw)
To: mturquette, sboyd, bmasney; +Cc: linux-clk, linux-kernel, Haoxiang Li, stable
In clkgen_c32_pll_setup(), clkgen_odf_register() allocated
clk_gate and clk_divider memory and registered a clk. Add
clk_unregister() and kfree() to release the memory if
error occurs. Initialize odf to zero for safe.
Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
Cc: stable@vger.kernel.org
Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
---
drivers/clk/st/clkgen-pll.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
index 89f0454fa72e..3fc0af4b77c6 100644
--- a/drivers/clk/st/clkgen-pll.c
+++ b/drivers/clk/st/clkgen-pll.c
@@ -761,10 +761,12 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
struct clk *pll_clk;
const char *parent_name, *pll_name;
void __iomem *pll_base;
- int num_odfs, odf;
+ int num_odfs, odf = 0;
struct clk_onecell_data *clk_data;
unsigned long pll_flags = 0;
struct clkgen_pll *pll;
+ struct clk_gate *gate;
+ struct clk_divider *div;
parent_name = of_clk_get_parent_name(np, 0);
if (!parent_name)
@@ -808,7 +810,7 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
if (of_property_read_string_index(np,
"clock-output-names",
odf, &clk_name))
- return;
+ goto err_odf_unregister;
of_clk_detect_critical(np, odf, &odf_flags);
}
@@ -816,8 +818,8 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
odf_clk = clkgen_odf_register(pll_name, pll_base, datac->data,
odf_flags, odf, &clkgena_c32_odf_lock,
clk_name);
- goto err;
if (IS_ERR(odf_clk))
+ goto err_odf_unregister;
clk_data->clks[odf] = odf_clk;
}
@@ -825,6 +827,14 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
of_clk_add_provider(np, of_clk_src_onecell_get, clk_data);
return;
+err_odf_unregister:
+ while (--odf >= 0) {
+ gate = to_clk_gate(__clk_get_hw(clk_data->clks[odf]));
+ div = to_clk_divider(__clk_get_hw(clk_data->clks[odf]));
+ clk_unregister_composite(clk_data->clks[odf]);
+ kfree(div);
+ kfree(gate);
+ }
err:
kfree(clk_data->clks);
kfree(clk_data);
--
2.25.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register()
2026-01-16 11:38 ` [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register() Haoxiang Li
@ 2026-01-16 15:29 ` Brian Masney
2026-01-17 10:15 ` Markus Elfring
1 sibling, 0 replies; 11+ messages in thread
From: Brian Masney @ 2026-01-16 15:29 UTC (permalink / raw)
To: Haoxiang Li; +Cc: mturquette, sboyd, linux-clk, linux-kernel, stable
On Fri, Jan 16, 2026 at 07:38:41PM +0800, Haoxiang Li wrote:
> If clk_register_composite() fails, call kfree() to release
> div and gate.
>
> Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
> Cc: stable@vger.kernel.org
> Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Reviewed-by: Brian Masney <bmasney@redhat.com>
Note for next time: I sent out a Reviewed-by tag on this patch on the
previous version. Please include those tags on the future versions.
The only time it's appropriate to not include the tag is if you make
changes to the patch beyond a trivial change.
Also you may want to consider using b4 for your workflow since it really
simplifies your workflow. There's some documentation available at:
https://b4.docs.kernel.org/en/latest/
Basically, here's a quick workflow of what I do:
# Start with a clean branch (say today's linux-next)
# Create a new b4-managed branch
b4 prep -n my-branch-name
# Apply your patches
b4 prep --edit-cover
b4 prep --auto-to-cc
b4 prep --check
b4 send --dry-run
# Send out your patch series for real
b4 send
Later if you need to send out a new version, just use the same b4
managed branch. It'll track the patch version number for you (the
PATCH v2 in the subject).
You can use 'b4 trailers'
(https://b4.docs.kernel.org/en/latest/contributor/trailers.html) to pick
up tags from the list.
There's also a b4 web submission endpoint you can use instead of sending
it through a SMTP server:
https://b4.docs.kernel.org/en/latest/contributor/send.html
Brian
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup()
2026-01-16 11:38 ` [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup() Haoxiang Li
@ 2026-01-16 15:40 ` Brian Masney
2026-01-17 12:57 ` Markus Elfring
1 sibling, 0 replies; 11+ messages in thread
From: Brian Masney @ 2026-01-16 15:40 UTC (permalink / raw)
To: Haoxiang Li; +Cc: mturquette, sboyd, linux-clk, linux-kernel, stable
On Fri, Jan 16, 2026 at 07:38:44PM +0800, Haoxiang Li wrote:
> Add a iounmap() to release the memory allocated by
> clkgen_get_register_base() in error path.
>
> Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
> Cc: stable@vger.kernel.org
> Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Reviewed-by: Brian Masney <bmasney@redhat.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 5/7] clk: st: clkgen-pll: Add clk_unregister for pll_clk in clkgen_c32_pll_setup()
2026-01-16 11:38 ` [PATCH 5/7] clk: st: clkgen-pll: Add clk_unregister for pll_clk " Haoxiang Li
@ 2026-01-16 15:43 ` Brian Masney
0 siblings, 0 replies; 11+ messages in thread
From: Brian Masney @ 2026-01-16 15:43 UTC (permalink / raw)
To: Haoxiang Li; +Cc: mturquette, sboyd, linux-clk, linux-kernel, stable
On Fri, Jan 16, 2026 at 07:38:45PM +0800, Haoxiang Li wrote:
> In clkgen_c32_pll_setup(), clkgen_pll_register() allocated a
> clkgen_pll memory and registered a clk. Add clk_unregister()
> and kfree() to release the memory if error occurs.
>
> Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
> Cc: stable@vger.kernel.org
> Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
Reviewed-by: Brian Masney <bmasney@redhat.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk in clkgen_c32_pll_setup()
2026-01-16 11:38 ` [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk " Haoxiang Li
@ 2026-01-16 15:53 ` Brian Masney
2026-01-17 13:43 ` Markus Elfring
1 sibling, 0 replies; 11+ messages in thread
From: Brian Masney @ 2026-01-16 15:53 UTC (permalink / raw)
To: Haoxiang Li; +Cc: mturquette, sboyd, linux-clk, linux-kernel, stable
Hi Haoxiang,
On Fri, Jan 16, 2026 at 07:38:47PM +0800, Haoxiang Li wrote:
> In clkgen_c32_pll_setup(), clkgen_odf_register() allocated
> clk_gate and clk_divider memory and registered a clk. Add
> clk_unregister() and kfree() to release the memory if
> error occurs. Initialize odf to zero for safe.
>
> Fixes: b9b8e614b580 ("clk: st: Support for PLLs inside ClockGenA(s)")
> Cc: stable@vger.kernel.org
> Signed-off-by: Haoxiang Li <lihaoxiang@isrc.iscas.ac.cn>
> ---
> drivers/clk/st/clkgen-pll.c | 16 +++++++++++++---
> 1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/clk/st/clkgen-pll.c b/drivers/clk/st/clkgen-pll.c
> index 89f0454fa72e..3fc0af4b77c6 100644
> --- a/drivers/clk/st/clkgen-pll.c
> +++ b/drivers/clk/st/clkgen-pll.c
> @@ -761,10 +761,12 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
> struct clk *pll_clk;
> const char *parent_name, *pll_name;
> void __iomem *pll_base;
> - int num_odfs, odf;
> + int num_odfs, odf = 0;
> struct clk_onecell_data *clk_data;
> unsigned long pll_flags = 0;
> struct clkgen_pll *pll;
> + struct clk_gate *gate;
> + struct clk_divider *div;
>
> parent_name = of_clk_get_parent_name(np, 0);
> if (!parent_name)
> @@ -808,7 +810,7 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
> if (of_property_read_string_index(np,
> "clock-output-names",
> odf, &clk_name))
> - return;
> + goto err_odf_unregister;
>
> of_clk_detect_critical(np, odf, &odf_flags);
> }
> @@ -816,8 +818,8 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
> odf_clk = clkgen_odf_register(pll_name, pll_base, datac->data,
> odf_flags, odf, &clkgena_c32_odf_lock,
> clk_name);
> - goto err;
> if (IS_ERR(odf_clk))
> + goto err_odf_unregister;
>
> clk_data->clks[odf] = odf_clk;
> }
> @@ -825,6 +827,14 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
> of_clk_add_provider(np, of_clk_src_onecell_get, clk_data);
> return;
>
> +err_odf_unregister:
> + while (--odf >= 0) {
I think the prefix -- is not appropriate here. If clkgen_odf_register()
fails for the first odf (ie odf=0), then when we jump to
err_odf_unregister, odf will still be set to 0, --odf will set it to -1,
the while loop will not run, and won't free anything.
What do you think about using the postfix operator instead?
while (odf-- >= 0)
Brian
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register()
2026-01-16 11:38 ` [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register() Haoxiang Li
2026-01-16 15:29 ` Brian Masney
@ 2026-01-17 10:15 ` Markus Elfring
1 sibling, 0 replies; 11+ messages in thread
From: Markus Elfring @ 2026-01-17 10:15 UTC (permalink / raw)
To: Haoxiang Li, linux-clk, Brian Masney, Michael Turquette,
Stephen Boyd
Cc: stable, LKML
> If clk_register_composite() fails, call kfree() to release
> div and gate.
You may put such information also into a single text line.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.19-rc5#n659
How do you think about to avoid a bit of duplicate source code here?
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/coding-style.rst?h=v6.19-rc5#n526
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup()
2026-01-16 11:38 ` [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup() Haoxiang Li
2026-01-16 15:40 ` Brian Masney
@ 2026-01-17 12:57 ` Markus Elfring
1 sibling, 0 replies; 11+ messages in thread
From: Markus Elfring @ 2026-01-17 12:57 UTC (permalink / raw)
To: Haoxiang Li, linux-clk, Brian Masney, Michael Turquette,
Stephen Boyd
Cc: stable, LKML, kernel-janitors
> Add a iounmap() to release the memory allocated by
an call?
> clkgen_get_register_base() in error path.
Was such an improvable implementation detail detected by any known source code
analysis approaches?
…
> +++ b/drivers/clk/st/clkgen-pll.c
…
> @@ -829,7 +829,11 @@ static void __init clkgen_c32_pll_setup(struct device_node *np,
> kfree(pll_name);
> kfree(clk_data->clks);
> kfree(clk_data);
> +err_unmap:
> + if (pll_base)
> + iounmap(pll_base);
* I find this pointer check redundant because of a previous variable check.
https://elixir.bootlin.com/linux/v6.19-rc5/source/drivers/clk/st/clkgen-pll.c#L771-L773
* I suggest to refine the goto chain a bit more.
> }
> +
> static void __init clkgen_c32_pll0_setup(struct device_node *np)
…
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk in clkgen_c32_pll_setup()
2026-01-16 11:38 ` [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk " Haoxiang Li
2026-01-16 15:53 ` Brian Masney
@ 2026-01-17 13:43 ` Markus Elfring
1 sibling, 0 replies; 11+ messages in thread
From: Markus Elfring @ 2026-01-17 13:43 UTC (permalink / raw)
To: Haoxiang Li, linux-clk, Brian Masney, Michael Turquette,
Stephen Boyd
Cc: stable, LKML
> In clkgen_c32_pll_setup(), clkgen_odf_register() allocated
> clk_gate and clk_divider memory and registered a clk. Add
> clk_unregister() and kfree() to release the memory if
You may occasionally put more than 58 characters into text lines
of such a change description.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.19-rc5#n659
> error occurs. Initialize odf to zero for safe.
data processing?
Regards,
Markus
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-01-17 13:44 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260116113847.1827694-1-lihaoxiang@isrc.iscas.ac.cn>
2026-01-16 11:38 ` [PATCH 1/7] clk: st: clkgen-pll: Fix a memory leak in clkgen_odf_register() Haoxiang Li
2026-01-16 15:29 ` Brian Masney
2026-01-17 10:15 ` Markus Elfring
2026-01-16 11:38 ` [PATCH 4/7] clk: st: clkgen-pll: Add iounmap() in clkgen_c32_pll_setup() Haoxiang Li
2026-01-16 15:40 ` Brian Masney
2026-01-17 12:57 ` Markus Elfring
2026-01-16 11:38 ` [PATCH 5/7] clk: st: clkgen-pll: Add clk_unregister for pll_clk " Haoxiang Li
2026-01-16 15:43 ` Brian Masney
2026-01-16 11:38 ` [PATCH 7/7] clk: st: clkgen-pll: Add clk_unregister for odf_clk " Haoxiang Li
2026-01-16 15:53 ` Brian Masney
2026-01-17 13:43 ` Markus Elfring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox