All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] nios2: switch to NO_BOOTMEM
@ 2018-07-04 13:18 Mike Rapoport
  2018-07-04 13:18 ` [PATCH 1/3] of: ignore sub-page memory regions Mike Rapoport
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Mike Rapoport @ 2018-07-04 13:18 UTC (permalink / raw)
  To: Ley Foon Tan
  Cc: Rob Herring, Frank Rowand, Michal Hocko, nios2-dev, linux-mm,
	linux-kernel, Mike Rapoport

These patches switch nios2 boot time memory allocators from bootmem to
memblock + no_bootmem.

As nios2 uses fdt, the conversion is pretty much about actually using the
existing fdt infrastructure for the early memory management.

The first patch in the series is not strictly related to nios2. It's just
I've got really interesting memory layout without it because of 1K long
memory ranges defined in arch/nios2/boot/dts/10m50_devboard.dts.

Mike Rapoport (3):
  of: ignore sub-page memory regions
  nios2: use generic early_init_dt_add_memory_arch
  nios2: switch to NO_BOOTMEM

 arch/nios2/Kconfig        |  3 +++
 arch/nios2/kernel/prom.c  | 17 -----------------
 arch/nios2/kernel/setup.c | 39 +++++++--------------------------------
 drivers/of/fdt.c          | 11 ++++++-----
 4 files changed, 16 insertions(+), 54 deletions(-)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] of: ignore sub-page memory regions
  2018-07-04 13:18 [PATCH 0/3] nios2: switch to NO_BOOTMEM Mike Rapoport
@ 2018-07-04 13:18 ` Mike Rapoport
  2018-07-04 13:18 ` [PATCH 2/3] nios2: use generic early_init_dt_add_memory_arch Mike Rapoport
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Mike Rapoport @ 2018-07-04 13:18 UTC (permalink / raw)
  To: Ley Foon Tan
  Cc: Rob Herring, Frank Rowand, Michal Hocko, nios2-dev, linux-mm,
	linux-kernel, Mike Rapoport

Memory region size is rounded down to page boundary and with sub-page
region it becomes 0 and there is no point to add an empty region.
Moreover, when the base is less than PAGE_SIZE we get a bogus size as
(base + size - 1) evaluates to -1.

The commit 8cccffc52694 ("of: check for size < 0 after rounding in
early_init_dt_add_memory_arch") introduced a test for wrap around for the
case when base is not page aligned, the same test can be used to ignore
sub-page region sizes.

Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
---
 drivers/of/fdt.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 6da20b9..e866745 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -1134,12 +1134,13 @@ void __init __weak early_init_dt_add_memory_arch(u64 base, u64 size)
 {
 	const u64 phys_offset = MIN_MEMBLOCK_ADDR;
 
+	if (size < PAGE_SIZE - (base & ~PAGE_MASK)) {
+		pr_warn("Ignoring memory block 0x%llx - 0x%llx\n",
+			base, base + size);
+		return;
+	}
+
 	if (!PAGE_ALIGNED(base)) {
-		if (size < PAGE_SIZE - (base & ~PAGE_MASK)) {
-			pr_warn("Ignoring memory block 0x%llx - 0x%llx\n",
-				base, base + size);
-			return;
-		}
 		size -= PAGE_SIZE - (base & ~PAGE_MASK);
 		base = PAGE_ALIGN(base);
 	}
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] nios2: use generic early_init_dt_add_memory_arch
  2018-07-04 13:18 [PATCH 0/3] nios2: switch to NO_BOOTMEM Mike Rapoport
  2018-07-04 13:18 ` [PATCH 1/3] of: ignore sub-page memory regions Mike Rapoport
@ 2018-07-04 13:18 ` Mike Rapoport
  2018-08-02  7:06   ` Ley Foon Tan
  2018-07-04 13:18 ` [PATCH 3/3] nios2: switch to NO_BOOTMEM Mike Rapoport
  2018-07-30  6:14 ` [PATCH 0/3] " Mike Rapoport
  3 siblings, 1 reply; 7+ messages in thread
From: Mike Rapoport @ 2018-07-04 13:18 UTC (permalink / raw)
  To: Ley Foon Tan
  Cc: Rob Herring, Frank Rowand, Michal Hocko, nios2-dev, linux-mm,
	linux-kernel, Mike Rapoport

All we have to do is to enable memblock, the generic FDT code will take
care of the rest.

Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
---
 arch/nios2/Kconfig        |  1 +
 arch/nios2/kernel/prom.c  | 10 ----------
 arch/nios2/kernel/setup.c |  2 ++
 3 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig
index 3d4ec88..5db8fa1 100644
--- a/arch/nios2/Kconfig
+++ b/arch/nios2/Kconfig
@@ -19,6 +19,7 @@ config NIOS2
 	select SPARSE_IRQ
 	select USB_ARCH_HAS_HCD if USB_SUPPORT
 	select CPU_NO_EFFICIENT_FFS
+	select HAVE_MEMBLOCK
 
 config GENERIC_CSUM
 	def_bool y
diff --git a/arch/nios2/kernel/prom.c b/arch/nios2/kernel/prom.c
index 8d7446a..ba96a49 100644
--- a/arch/nios2/kernel/prom.c
+++ b/arch/nios2/kernel/prom.c
@@ -32,16 +32,6 @@
 
 #include <asm/sections.h>
 
-void __init early_init_dt_add_memory_arch(u64 base, u64 size)
-{
-	u64 kernel_start = (u64)virt_to_phys(_text);
-
-	if (!memory_size &&
-	    (kernel_start >= base) && (kernel_start < (base + size)))
-		memory_size = size;
-
-}
-
 int __init early_init_dt_reserve_memory_arch(phys_addr_t base, phys_addr_t size,
 					     bool nomap)
 {
diff --git a/arch/nios2/kernel/setup.c b/arch/nios2/kernel/setup.c
index 926a02b..0946840 100644
--- a/arch/nios2/kernel/setup.c
+++ b/arch/nios2/kernel/setup.c
@@ -17,6 +17,7 @@
 #include <linux/sched/task.h>
 #include <linux/console.h>
 #include <linux/bootmem.h>
+#include <linux/memblock.h>
 #include <linux/initrd.h>
 #include <linux/of_fdt.h>
 #include <linux/screen_info.h>
@@ -147,6 +148,7 @@ void __init setup_arch(char **cmdline_p)
 
 	console_verbose();
 
+	memory_size = memblock_phys_mem_size();
 	memory_start = PAGE_ALIGN((unsigned long)__pa(_end));
 	memory_end = (unsigned long) CONFIG_NIOS2_MEM_BASE + memory_size;
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] nios2: switch to NO_BOOTMEM
  2018-07-04 13:18 [PATCH 0/3] nios2: switch to NO_BOOTMEM Mike Rapoport
  2018-07-04 13:18 ` [PATCH 1/3] of: ignore sub-page memory regions Mike Rapoport
  2018-07-04 13:18 ` [PATCH 2/3] nios2: use generic early_init_dt_add_memory_arch Mike Rapoport
@ 2018-07-04 13:18 ` Mike Rapoport
  2018-08-02  7:05   ` Ley Foon Tan
  2018-07-30  6:14 ` [PATCH 0/3] " Mike Rapoport
  3 siblings, 1 reply; 7+ messages in thread
From: Mike Rapoport @ 2018-07-04 13:18 UTC (permalink / raw)
  To: Ley Foon Tan
  Cc: Rob Herring, Frank Rowand, Michal Hocko, nios2-dev, linux-mm,
	linux-kernel, Mike Rapoport

Remove bootmem bitmap initialization and replace reserve_bootmem() with
memblock_reserve().

Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
---
 arch/nios2/Kconfig        |  2 ++
 arch/nios2/kernel/prom.c  |  7 -------
 arch/nios2/kernel/setup.c | 37 +++++--------------------------------
 3 files changed, 7 insertions(+), 39 deletions(-)

diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig
index 5db8fa1..661f7f9 100644
--- a/arch/nios2/Kconfig
+++ b/arch/nios2/Kconfig
@@ -20,6 +20,8 @@ config NIOS2
 	select USB_ARCH_HAS_HCD if USB_SUPPORT
 	select CPU_NO_EFFICIENT_FFS
 	select HAVE_MEMBLOCK
+	select ARCH_DISCARD_MEMBLOCK
+	select NO_BOOTMEM
 
 config GENERIC_CSUM
 	def_bool y
diff --git a/arch/nios2/kernel/prom.c b/arch/nios2/kernel/prom.c
index ba96a49..a6d4f75 100644
--- a/arch/nios2/kernel/prom.c
+++ b/arch/nios2/kernel/prom.c
@@ -32,13 +32,6 @@
 
 #include <asm/sections.h>
 
-int __init early_init_dt_reserve_memory_arch(phys_addr_t base, phys_addr_t size,
-					     bool nomap)
-{
-	reserve_bootmem(base, size, BOOTMEM_DEFAULT);
-	return 0;
-}
-
 void __init early_init_devtree(void *params)
 {
 	__be32 *dtb = (u32 *)__dtb_start;
diff --git a/arch/nios2/kernel/setup.c b/arch/nios2/kernel/setup.c
index 0946840..2d0011d 100644
--- a/arch/nios2/kernel/setup.c
+++ b/arch/nios2/kernel/setup.c
@@ -144,10 +144,11 @@ asmlinkage void __init nios2_boot_init(unsigned r4, unsigned r5, unsigned r6,
 
 void __init setup_arch(char **cmdline_p)
 {
-	int bootmap_size;
+	int dram_start;
 
 	console_verbose();
 
+	dram_start = memblock_start_of_DRAM();
 	memory_size = memblock_phys_mem_size();
 	memory_start = PAGE_ALIGN((unsigned long)__pa(_end));
 	memory_end = (unsigned long) CONFIG_NIOS2_MEM_BASE + memory_size;
@@ -165,39 +166,11 @@ void __init setup_arch(char **cmdline_p)
 	max_low_pfn = PFN_DOWN(memory_end);
 	max_mapnr = max_low_pfn;
 
-	/*
-	 * give all the memory to the bootmap allocator,  tell it to put the
-	 * boot mem_map at the start of memory
-	 */
-	pr_debug("init_bootmem_node(?,%#lx, %#x, %#lx)\n",
-		min_low_pfn, PFN_DOWN(PHYS_OFFSET), max_low_pfn);
-	bootmap_size = init_bootmem_node(NODE_DATA(0),
-					min_low_pfn, PFN_DOWN(PHYS_OFFSET),
-					max_low_pfn);
-
-	/*
-	 * free the usable memory,  we have to make sure we do not free
-	 * the bootmem bitmap so we then reserve it after freeing it :-)
-	 */
-	pr_debug("free_bootmem(%#lx, %#lx)\n",
-		memory_start, memory_end - memory_start);
-	free_bootmem(memory_start, memory_end - memory_start);
-
-	/*
-	 * Reserve the bootmem bitmap itself as well. We do this in two
-	 * steps (first step was init_bootmem()) because this catches
-	 * the (very unlikely) case of us accidentally initializing the
-	 * bootmem allocator with an invalid RAM area.
-	 *
-	 * Arguments are start, size
-	 */
-	pr_debug("reserve_bootmem(%#lx, %#x)\n", memory_start, bootmap_size);
-	reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT);
-
+	memblock_reserve(dram_start, memory_start - dram_start);
 #ifdef CONFIG_BLK_DEV_INITRD
 	if (initrd_start) {
-		reserve_bootmem(virt_to_phys((void *)initrd_start),
-				initrd_end - initrd_start, BOOTMEM_DEFAULT);
+		memblock_reserve(virt_to_phys((void *)initrd_start),
+				initrd_end - initrd_start);
 	}
 #endif /* CONFIG_BLK_DEV_INITRD */
 
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] nios2: switch to NO_BOOTMEM
  2018-07-04 13:18 [PATCH 0/3] nios2: switch to NO_BOOTMEM Mike Rapoport
                   ` (2 preceding siblings ...)
  2018-07-04 13:18 ` [PATCH 3/3] nios2: switch to NO_BOOTMEM Mike Rapoport
@ 2018-07-30  6:14 ` Mike Rapoport
  3 siblings, 0 replies; 7+ messages in thread
From: Mike Rapoport @ 2018-07-30  6:14 UTC (permalink / raw)
  To: Ley Foon Tan
  Cc: Rob Herring, Frank Rowand, Michal Hocko, nios2-dev, linux-mm,
	linux-kernel

Any updates on this?

On Wed, Jul 04, 2018 at 04:18:12PM +0300, Mike Rapoport wrote:
> These patches switch nios2 boot time memory allocators from bootmem to
> memblock + no_bootmem.
> 
> As nios2 uses fdt, the conversion is pretty much about actually using the
> existing fdt infrastructure for the early memory management.
> 
> The first patch in the series is not strictly related to nios2. It's just
> I've got really interesting memory layout without it because of 1K long
> memory ranges defined in arch/nios2/boot/dts/10m50_devboard.dts.
> 
> Mike Rapoport (3):
>   of: ignore sub-page memory regions
>   nios2: use generic early_init_dt_add_memory_arch
>   nios2: switch to NO_BOOTMEM
> 
>  arch/nios2/Kconfig        |  3 +++
>  arch/nios2/kernel/prom.c  | 17 -----------------
>  arch/nios2/kernel/setup.c | 39 +++++++--------------------------------
>  drivers/of/fdt.c          | 11 ++++++-----
>  4 files changed, 16 insertions(+), 54 deletions(-)
> 
> -- 
> 2.7.4
> 

-- 
Sincerely yours,
Mike.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] nios2: switch to NO_BOOTMEM
  2018-07-04 13:18 ` [PATCH 3/3] nios2: switch to NO_BOOTMEM Mike Rapoport
@ 2018-08-02  7:05   ` Ley Foon Tan
  0 siblings, 0 replies; 7+ messages in thread
From: Ley Foon Tan @ 2018-08-02  7:05 UTC (permalink / raw)
  To: Mike Rapoport, Ley Foon Tan
  Cc: Rob Herring, Frank Rowand, Michal Hocko, nios2-dev, linux-mm,
	linux-kernel

On Wed, 2018-07-04 at 16:18 +0300, Mike Rapoport wrote:
> Remove bootmem bitmap initialization and replace reserve_bootmem()
> with
> memblock_reserve().
> 
> Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
> ---
>  arch/nios2/Kconfig        |  2 ++
>  arch/nios2/kernel/prom.c  |  7 -------
>  arch/nios2/kernel/setup.c | 37 +++++--------------------------------
>  3 files changed, 7 insertions(+), 39 deletions(-)
> 
> diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig
> index 5db8fa1..661f7f9 100644
> --- a/arch/nios2/Kconfig
> +++ b/arch/nios2/Kconfig
> @@ -20,6 +20,8 @@ config NIOS2
>         select USB_ARCH_HAS_HCD if USB_SUPPORT
>         select CPU_NO_EFFICIENT_FFS
>         select HAVE_MEMBLOCK
> +       select ARCH_DISCARD_MEMBLOCK
> +       select NO_BOOTMEM
> 
>  config GENERIC_CSUM
>         def_bool y
> diff --git a/arch/nios2/kernel/prom.c b/arch/nios2/kernel/prom.c
> index ba96a49..a6d4f75 100644
> --- a/arch/nios2/kernel/prom.c
> +++ b/arch/nios2/kernel/prom.c
> @@ -32,13 +32,6 @@
> 
>  #include <asm/sections.h>
> 
> -int __init early_init_dt_reserve_memory_arch(phys_addr_t base,
> phys_addr_t size,
> -                                            bool nomap)
> -{
> -       reserve_bootmem(base, size, BOOTMEM_DEFAULT);
> -       return 0;
> -}
> -
>  void __init early_init_devtree(void *params)
>  {
>         __be32 *dtb = (u32 *)__dtb_start;
> diff --git a/arch/nios2/kernel/setup.c b/arch/nios2/kernel/setup.c
> index 0946840..2d0011d 100644
> --- a/arch/nios2/kernel/setup.c
> +++ b/arch/nios2/kernel/setup.c
> @@ -144,10 +144,11 @@ asmlinkage void __init nios2_boot_init(unsigned
> r4, unsigned r5, unsigned r6,
> 
>  void __init setup_arch(char **cmdline_p)
>  {
> -       int bootmap_size;
> +       int dram_start;
> 
>         console_verbose();
> 
> +       dram_start = memblock_start_of_DRAM();
>         memory_size = memblock_phys_mem_size();
>         memory_start = PAGE_ALIGN((unsigned long)__pa(_end));
>         memory_end = (unsigned long) CONFIG_NIOS2_MEM_BASE +
> memory_size;
> @@ -165,39 +166,11 @@ void __init setup_arch(char **cmdline_p)
>         max_low_pfn = PFN_DOWN(memory_end);
>         max_mapnr = max_low_pfn;
> 
> -       /*
> -        * give all the memory to the bootmap allocator,  tell it to
> put the
> -        * boot mem_map at the start of memory
> -        */
> -       pr_debug("init_bootmem_node(?,%#lx, %#x, %#lx)\n",
> -               min_low_pfn, PFN_DOWN(PHYS_OFFSET), max_low_pfn);
> -       bootmap_size = init_bootmem_node(NODE_DATA(0),
> -                                       min_low_pfn,
> PFN_DOWN(PHYS_OFFSET),
> -                                       max_low_pfn);
> -
> -       /*
> -        * free the usable memory,  we have to make sure we do not
> free
> -        * the bootmem bitmap so we then reserve it after freeing it
> :-)
> -        */
> -       pr_debug("free_bootmem(%#lx, %#lx)\n",
> -               memory_start, memory_end - memory_start);
> -       free_bootmem(memory_start, memory_end - memory_start);
> -
> -       /*
> -        * Reserve the bootmem bitmap itself as well. We do this in
> two
> -        * steps (first step was init_bootmem()) because this catches
> -        * the (very unlikely) case of us accidentally initializing
> the
> -        * bootmem allocator with an invalid RAM area.
> -        *
> -        * Arguments are start, size
> -        */
> -       pr_debug("reserve_bootmem(%#lx, %#x)\n", memory_start,
> bootmap_size);
> -       reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT);
> -
> +       memblock_reserve(dram_start, memory_start - dram_start);
>  #ifdef CONFIG_BLK_DEV_INITRD
>         if (initrd_start) {
> -               reserve_bootmem(virt_to_phys((void *)initrd_start),
> -                               initrd_end - initrd_start,
> BOOTMEM_DEFAULT);
> +               memblock_reserve(virt_to_phys((void *)initrd_start),
> +                               initrd_end - initrd_start);
>         }
>  #endif /* CONFIG_BLK_DEV_INITRD */
> 
> --
> 2.7.4

Acked-by: Ley Foon Tan <ley.foon.tan@intel.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] nios2: use generic early_init_dt_add_memory_arch
  2018-07-04 13:18 ` [PATCH 2/3] nios2: use generic early_init_dt_add_memory_arch Mike Rapoport
@ 2018-08-02  7:06   ` Ley Foon Tan
  0 siblings, 0 replies; 7+ messages in thread
From: Ley Foon Tan @ 2018-08-02  7:06 UTC (permalink / raw)
  To: Mike Rapoport, Ley Foon Tan
  Cc: Rob Herring, Frank Rowand, Michal Hocko, nios2-dev, linux-mm,
	linux-kernel

On Wed, 2018-07-04 at 16:18 +0300, Mike Rapoport wrote:
> All we have to do is to enable memblock, the generic FDT code will
> take
> care of the rest.
> 
> Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
> ---
>  arch/nios2/Kconfig        |  1 +
>  arch/nios2/kernel/prom.c  | 10 ----------
>  arch/nios2/kernel/setup.c |  2 ++
>  3 files changed, 3 insertions(+), 10 deletions(-)
> 
> diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig
> index 3d4ec88..5db8fa1 100644
> --- a/arch/nios2/Kconfig
> +++ b/arch/nios2/Kconfig
> @@ -19,6 +19,7 @@ config NIOS2
>         select SPARSE_IRQ
>         select USB_ARCH_HAS_HCD if USB_SUPPORT
>         select CPU_NO_EFFICIENT_FFS
> +       select HAVE_MEMBLOCK
> 
>  config GENERIC_CSUM
>         def_bool y
> diff --git a/arch/nios2/kernel/prom.c b/arch/nios2/kernel/prom.c
> index 8d7446a..ba96a49 100644
> --- a/arch/nios2/kernel/prom.c
> +++ b/arch/nios2/kernel/prom.c
> @@ -32,16 +32,6 @@
> 
>  #include <asm/sections.h>
> 
> -void __init early_init_dt_add_memory_arch(u64 base, u64 size)
> -{
> -       u64 kernel_start = (u64)virt_to_phys(_text);
> -
> -       if (!memory_size &&
> -           (kernel_start >= base) && (kernel_start < (base + size)))
> -               memory_size = size;
> -
> -}
> -
>  int __init early_init_dt_reserve_memory_arch(phys_addr_t base,
> phys_addr_t size,
>                                              bool nomap)
>  {
> diff --git a/arch/nios2/kernel/setup.c b/arch/nios2/kernel/setup.c
> index 926a02b..0946840 100644
> --- a/arch/nios2/kernel/setup.c
> +++ b/arch/nios2/kernel/setup.c
> @@ -17,6 +17,7 @@
>  #include <linux/sched/task.h>
>  #include <linux/console.h>
>  #include <linux/bootmem.h>
> +#include <linux/memblock.h>
>  #include <linux/initrd.h>
>  #include <linux/of_fdt.h>
>  #include <linux/screen_info.h>
> @@ -147,6 +148,7 @@ void __init setup_arch(char **cmdline_p)
> 
>         console_verbose();
> 
> +       memory_size = memblock_phys_mem_size();
>         memory_start = PAGE_ALIGN((unsigned long)__pa(_end));
>         memory_end = (unsigned long) CONFIG_NIOS2_MEM_BASE +
> memory_size;
> 
> --
Acked-by: Ley Foon Tan <ley.foon.tan@intel.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2018-08-02  7:06 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-04 13:18 [PATCH 0/3] nios2: switch to NO_BOOTMEM Mike Rapoport
2018-07-04 13:18 ` [PATCH 1/3] of: ignore sub-page memory regions Mike Rapoport
2018-07-04 13:18 ` [PATCH 2/3] nios2: use generic early_init_dt_add_memory_arch Mike Rapoport
2018-08-02  7:06   ` Ley Foon Tan
2018-07-04 13:18 ` [PATCH 3/3] nios2: switch to NO_BOOTMEM Mike Rapoport
2018-08-02  7:05   ` Ley Foon Tan
2018-07-30  6:14 ` [PATCH 0/3] " Mike Rapoport

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.