* [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
@ 2024-08-30 3:33 Yuesong Li
2024-09-02 8:00 ` kernel test robot
` (3 more replies)
0 siblings, 4 replies; 7+ messages in thread
From: Yuesong Li @ 2024-08-30 3:33 UTC (permalink / raw)
To: p.zabel; +Cc: linux-kernel, opensource.kernel, Yuesong Li
When a driver wants to get reset control and deassert it,this
helper will handle the return value of these function, also it
will register a devres so that when the device been detached, the
reset control will be assert.
Signed-off-by: Yuesong Li <liyuesong@vivo.com>
---
include/linux/reset.h | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/include/linux/reset.h b/include/linux/reset.h
index 514ddf003efc..d7e02968b63b 100644
--- a/include/linux/reset.h
+++ b/include/linux/reset.h
@@ -806,6 +806,35 @@ devm_reset_control_get_shared_by_index(struct device *dev, int index)
return __devm_reset_control_get(dev, NULL, index, true, false, false);
}
+/**
+ * devm_reset_control_get_deassert - resource managed
+ * @dev: device to be reset by the controller
+ * @index: index of the reset controller
+ *
+ * A helper function to automatically handle return value of
+ * devm_reset_control_get_exclusive() and reset_control_deassert().
+ */
+static struct reset_control *devm_reset_control_get_deassert(
+ struct device *dev, const char *id)
+{
+ int ret;
+ struct reset_control *reset;
+
+ reset = devm_reset_control_get_exclusive(dev, id);
+ if (IS_ERR(reset))
+ return reset;
+
+ ret = reset_control_deassert(reset);
+ if (ret)
+ return ERR_PTR(ret);
+
+ ret = devm_add_action_or_reset(dev, (void *)reset_control_assert, (void *)reset);
+ if (ret)
+ return ERR_PTR(ret);
+
+ return reset;
+}
+
/*
* TEMPORARY calls to use during transition:
*
--
2.34.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
2024-08-30 3:33 [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control Yuesong Li
@ 2024-09-02 8:00 ` kernel test robot
2024-09-02 8:20 ` kernel test robot
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2024-09-02 8:00 UTC (permalink / raw)
To: Yuesong Li; +Cc: llvm, oe-kbuild-all
Hi Yuesong,
[This is a private test report for your RFC patch.]
kernel test robot noticed the following build errors:
[auto build test ERROR on pza/reset/next]
[also build test ERROR on pza/imx-drm/next linus/master v6.11-rc6 next-20240830]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Yuesong-Li/reset-Provide-new-devm_reset-helpers-for-get-and-deassert-reset-control/20240830-113607
base: https://git.pengutronix.de/git/pza/linux reset/next
patch link: https://lore.kernel.org/r/20240830033351.233263-1-liyuesong%40vivo.com
patch subject: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
config: i386-buildonly-randconfig-003-20240902 (https://download.01.org/0day-ci/archive/20240902/202409021514.2tmkFIei-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240902/202409021514.2tmkFIei-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409021514.2tmkFIei-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/gpu/ipu-v3/ipu-common.c:9:
>> include/linux/reset.h:831:8: error: call to undeclared function 'devm_add_action_or_reset'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
831 | ret = devm_add_action_or_reset(dev, (void *)reset_control_assert, (void *)reset);
| ^
In file included from drivers/gpu/ipu-v3/ipu-common.c:26:
In file included from include/video/imx-ipu-v3.h:18:
In file included from include/linux/fb.h:5:
In file included from include/uapi/linux/fb.h:6:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:17:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:98:11: warning: array index 3 is past the end of the array (that has type 'unsigned long[2]') [-Warray-bounds]
98 | return (set->sig[3] | set->sig[2] |
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/gpu/ipu-v3/ipu-common.c:26:
In file included from include/video/imx-ipu-v3.h:18:
In file included from include/linux/fb.h:5:
In file included from include/uapi/linux/fb.h:6:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:17:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:98:25: warning: array index 2 is past the end of the array (that has type 'unsigned long[2]') [-Warray-bounds]
98 | return (set->sig[3] | set->sig[2] |
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/gpu/ipu-v3/ipu-common.c:26:
In file included from include/video/imx-ipu-v3.h:18:
In file included from include/linux/fb.h:5:
In file included from include/uapi/linux/fb.h:6:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:17:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:114:11: warning: array index 3 is past the end of the array (that has type 'const unsigned long[2]') [-Warray-bounds]
114 | return (set1->sig[3] == set2->sig[3]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/gpu/ipu-v3/ipu-common.c:26:
In file included from include/video/imx-ipu-v3.h:18:
In file included from include/linux/fb.h:5:
In file included from include/uapi/linux/fb.h:6:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:17:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:114:27: warning: array index 3 is past the end of the array (that has type 'const unsigned long[2]') [-Warray-bounds]
114 | return (set1->sig[3] == set2->sig[3]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/gpu/ipu-v3/ipu-common.c:26:
In file included from include/video/imx-ipu-v3.h:18:
In file included from include/linux/fb.h:5:
In file included from include/uapi/linux/fb.h:6:
In file included from include/linux/i2c.h:19:
In file included from include/linux/regulator/consumer.h:35:
In file included from include/linux/suspend.h:5:
In file included from include/linux/swap.h:9:
In file included from include/linux/memcontrol.h:13:
In file included from include/linux/cgroup.h:17:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:115:5: warning: array index 2 is past the end of the array (that has type 'const unsigned long[2]') [-Warray-bounds]
115 | (set1->sig[2] == set2->sig[2]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
vim +/devm_add_action_or_reset +831 include/linux/reset.h
808
809 /**
810 * devm_reset_control_get_deassert - resource managed
811 * @dev: device to be reset by the controller
812 * @index: index of the reset controller
813 *
814 * A helper function to automatically handle return value of
815 * devm_reset_control_get_exclusive() and reset_control_deassert().
816 */
817 static struct reset_control *devm_reset_control_get_deassert(
818 struct device *dev, const char *id)
819 {
820 int ret;
821 struct reset_control *reset;
822
823 reset = devm_reset_control_get_exclusive(dev, id);
824 if (IS_ERR(reset))
825 return reset;
826
827 ret = reset_control_deassert(reset);
828 if (ret)
829 return ERR_PTR(ret);
830
> 831 ret = devm_add_action_or_reset(dev, (void *)reset_control_assert, (void *)reset);
832 if (ret)
833 return ERR_PTR(ret);
834
835 return reset;
836 }
837
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
2024-08-30 3:33 [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control Yuesong Li
2024-09-02 8:00 ` kernel test robot
@ 2024-09-02 8:20 ` kernel test robot
2024-09-02 9:22 ` kernel test robot
2024-09-02 9:52 ` Yuesong Li
3 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2024-09-02 8:20 UTC (permalink / raw)
To: Yuesong Li; +Cc: oe-kbuild-all
Hi Yuesong,
[This is a private test report for your RFC patch.]
kernel test robot noticed the following build warnings:
[auto build test WARNING on pza/reset/next]
[also build test WARNING on pza/imx-drm/next linus/master v6.11-rc6 next-20240830]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Yuesong-Li/reset-Provide-new-devm_reset-helpers-for-get-and-deassert-reset-control/20240830-113607
base: https://git.pengutronix.de/git/pza/linux reset/next
patch link: https://lore.kernel.org/r/20240830033351.233263-1-liyuesong%40vivo.com
patch subject: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
config: i386-buildonly-randconfig-001-20240902 (https://download.01.org/0day-ci/archive/20240902/202409021604.4gaJkwG2-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240902/202409021604.4gaJkwG2-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409021604.4gaJkwG2-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from drivers/ata/libahci_platform.c:25:
>> include/linux/reset.h:817:30: warning: 'devm_reset_control_get_deassert' defined but not used [-Wunused-function]
817 | static struct reset_control *devm_reset_control_get_deassert(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/devm_reset_control_get_deassert +817 include/linux/reset.h
808
809 /**
810 * devm_reset_control_get_deassert - resource managed
811 * @dev: device to be reset by the controller
812 * @index: index of the reset controller
813 *
814 * A helper function to automatically handle return value of
815 * devm_reset_control_get_exclusive() and reset_control_deassert().
816 */
> 817 static struct reset_control *devm_reset_control_get_deassert(
818 struct device *dev, const char *id)
819 {
820 int ret;
821 struct reset_control *reset;
822
823 reset = devm_reset_control_get_exclusive(dev, id);
824 if (IS_ERR(reset))
825 return reset;
826
827 ret = reset_control_deassert(reset);
828 if (ret)
829 return ERR_PTR(ret);
830
831 ret = devm_add_action_or_reset(dev, (void *)reset_control_assert, (void *)reset);
832 if (ret)
833 return ERR_PTR(ret);
834
835 return reset;
836 }
837
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
2024-08-30 3:33 [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control Yuesong Li
2024-09-02 8:00 ` kernel test robot
2024-09-02 8:20 ` kernel test robot
@ 2024-09-02 9:22 ` kernel test robot
2024-09-02 9:52 ` Yuesong Li
3 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2024-09-02 9:22 UTC (permalink / raw)
To: Yuesong Li; +Cc: oe-kbuild-all
Hi Yuesong,
[This is a private test report for your RFC patch.]
kernel test robot noticed the following build errors:
[auto build test ERROR on pza/reset/next]
[also build test ERROR on pza/imx-drm/next linus/master v6.11-rc6 next-20240830]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Yuesong-Li/reset-Provide-new-devm_reset-helpers-for-get-and-deassert-reset-control/20240830-113607
base: https://git.pengutronix.de/git/pza/linux reset/next
patch link: https://lore.kernel.org/r/20240830033351.233263-1-liyuesong%40vivo.com
patch subject: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
config: i386-buildonly-randconfig-005-20240902 (https://download.01.org/0day-ci/archive/20240902/202409021638.nWWDOU2d-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240902/202409021638.nWWDOU2d-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409021638.nWWDOU2d-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from drivers/gpu/drm/renesas/rcar-du/rzg2l_mipi_dsi.c:16:
>> include/linux/reset.h:817:30: error: 'devm_reset_control_get_deassert' defined but not used [-Werror=unused-function]
817 | static struct reset_control *devm_reset_control_get_deassert(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
--
In file included from sound/soc/codecs/sti-sas.c:11:
include/linux/reset.h: In function 'devm_reset_control_get_deassert':
>> include/linux/reset.h:831:15: error: implicit declaration of function 'devm_add_action_or_reset' [-Werror=implicit-function-declaration]
831 | ret = devm_add_action_or_reset(dev, (void *)reset_control_assert, (void *)reset);
| ^~~~~~~~~~~~~~~~~~~~~~~~
include/linux/reset.h: At top level:
include/linux/reset.h:817:30: warning: 'devm_reset_control_get_deassert' defined but not used [-Wunused-function]
817 | static struct reset_control *devm_reset_control_get_deassert(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
vim +/devm_reset_control_get_deassert +817 include/linux/reset.h
808
809 /**
810 * devm_reset_control_get_deassert - resource managed
811 * @dev: device to be reset by the controller
812 * @index: index of the reset controller
813 *
814 * A helper function to automatically handle return value of
815 * devm_reset_control_get_exclusive() and reset_control_deassert().
816 */
> 817 static struct reset_control *devm_reset_control_get_deassert(
818 struct device *dev, const char *id)
819 {
820 int ret;
821 struct reset_control *reset;
822
823 reset = devm_reset_control_get_exclusive(dev, id);
824 if (IS_ERR(reset))
825 return reset;
826
827 ret = reset_control_deassert(reset);
828 if (ret)
829 return ERR_PTR(ret);
830
> 831 ret = devm_add_action_or_reset(dev, (void *)reset_control_assert, (void *)reset);
832 if (ret)
833 return ERR_PTR(ret);
834
835 return reset;
836 }
837
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
2024-08-30 3:33 [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control Yuesong Li
` (2 preceding siblings ...)
2024-09-02 9:22 ` kernel test robot
@ 2024-09-02 9:52 ` Yuesong Li
2024-09-02 10:44 ` Philipp Zabel
3 siblings, 1 reply; 7+ messages in thread
From: Yuesong Li @ 2024-09-02 9:52 UTC (permalink / raw)
To: p.zabel; +Cc: linux-kernel, opensource.kernel
On 2024/8/30 11:33, Yuesong Li wrote:
> When a driver wants to get reset control and deassert it,this
> helper will handle the return value of these function, also it
> will register a devres so that when the device been detached, the
> reset control will be assert.
>
> Signed-off-by: Yuesong Li <liyuesong@vivo.com>
> ---
> include/linux/reset.h | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
> diff --git a/include/linux/reset.h b/include/linux/reset.h
> index 514ddf003efc..d7e02968b63b 100644
> --- a/include/linux/reset.h
> +++ b/include/linux/reset.h
> @@ -806,6 +806,35 @@ devm_reset_control_get_shared_by_index(struct device *dev, int index)
> return __devm_reset_control_get(dev, NULL, index, true, false, false);
> }
>
> +/**
> + * devm_reset_control_get_deassert - resource managed
> + * @dev: device to be reset by the controller
> + * @index: index of the reset controller
> + *
> + * A helper function to automatically handle return value of
> + * devm_reset_control_get_exclusive() and reset_control_deassert().
> + */
> +static struct reset_control *devm_reset_control_get_deassert(
> + struct device *dev, const char *id)
> +{
> + int ret;
> + struct reset_control *reset;
> +
> + reset = devm_reset_control_get_exclusive(dev, id);
> + if (IS_ERR(reset))
> + return reset;
> +
> + ret = reset_control_deassert(reset);
> + if (ret)
> + return ERR_PTR(ret);
> +
> + ret = devm_add_action_or_reset(dev, (void *)reset_control_assert, (void *)reset);
> + if (ret)
> + return ERR_PTR(ret);
> +
> + return reset;
> +}
> +
> /*
> * TEMPORARY calls to use during transition:
> *
Please ignore this patch, I did not use clang to check the compile
process. This patch is meant to simplify a common pattern appears in
more than 10 files. For example in
"drivers/thermal/sun8i_thermal.c" line 393-401
But to pass the complier test, we need to include other header which
does not make sense. So drop this patch.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
2024-09-02 9:52 ` Yuesong Li
@ 2024-09-02 10:44 ` Philipp Zabel
2024-09-03 3:17 ` Yuesong Li
0 siblings, 1 reply; 7+ messages in thread
From: Philipp Zabel @ 2024-09-02 10:44 UTC (permalink / raw)
To: Yuesong Li; +Cc: linux-kernel, opensource.kernel
On Mo, 2024-09-02 at 17:52 +0800, Yuesong Li wrote:
>
> On 2024/8/30 11:33, Yuesong Li wrote:
> > When a driver wants to get reset control and deassert it,this
> > helper will handle the return value of these function, also it
> > will register a devres so that when the device been detached, the
> > reset control will be assert.
> >
> > Signed-off-by: Yuesong Li <liyuesong@vivo.com>
Could you have a look at the pre-deasserted / auto-reasserting reset
control series [1] and see if that would fit your use case?
[1] https://lore.kernel.org/all/20240621-reset-get-deasserted-v1-0-94ee76fb7b7d@pengutronix.de/
regards
Philipp
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control
2024-09-02 10:44 ` Philipp Zabel
@ 2024-09-03 3:17 ` Yuesong Li
0 siblings, 0 replies; 7+ messages in thread
From: Yuesong Li @ 2024-09-03 3:17 UTC (permalink / raw)
To: Philipp Zabel; +Cc: linux-kernel, opensource.kernel
On 2024/9/2 18:44, Philipp Zabel wrote:
> On Mo, 2024-09-02 at 17:52 +0800, Yuesong Li wrote:
>>
>> On 2024/8/30 11:33, Yuesong Li wrote:
>>> When a driver wants to get reset control and deassert it,this
>>> helper will handle the return value of these function, also it
>>> will register a devres so that when the device been detached, the
>>> reset control will be assert.
>>>
>>> Signed-off-by: Yuesong Li <liyuesong@vivo.com>
>
> Could you have a look at the pre-deasserted / auto-reasserting reset
> control series [1] and see if that would fit your use case?
>
> [1] https://lore.kernel.org/all/20240621-reset-get-deasserted-v1-0-94ee76fb7b7d@pengutronix.de/
>
> regards
> Philipp
Thanks for reaching out, this patch fit my case exactly.
Best regards,
Yuesong
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-09-03 3:17 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-30 3:33 [PATCH RFC] reset: Provide new devm_reset helpers for get and deassert reset control Yuesong Li
2024-09-02 8:00 ` kernel test robot
2024-09-02 8:20 ` kernel test robot
2024-09-02 9:22 ` kernel test robot
2024-09-02 9:52 ` Yuesong Li
2024-09-02 10:44 ` Philipp Zabel
2024-09-03 3:17 ` Yuesong Li
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.