LKML Archive on lore.kernel.org
 help / color / Atom feed
* Re: [PATCH] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
       [not found] <20180803195344.22271-1-palmer@sifive.com>
@ 2018-08-04  8:54 ` Christoph Hellwig
  2018-08-06 20:42   ` Palmer Dabbelt
  2018-08-09 13:26 ` [PATCH] " Guenter Roeck
  1 sibling, 1 reply; 10+ messages in thread
From: Christoph Hellwig @ 2018-08-04  8:54 UTC (permalink / raw)
  To: Palmer Dabbelt; +Cc: linux-riscv, Marcus Comstedt, linux-kernel, aou

> index 818655b0d535..882a6aa09a33 100644
> --- a/arch/riscv/include/uapi/asm/syscalls.h
> +++ b/arch/riscv/include/uapi/asm/syscalls.h
> @@ -1,10 +1,11 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> +// SPDX-License-Identifier: GPL-2.0

/* */ is the required style for headers, // is only for other files.

> +/* There is explicitly no include guard here because this file is expected to
> + * be included multiple times in order to define the syscall macros via
> + * __SYSCALL. */

Normal Linux comment style would be:

/*
 * There is explicitly no include guard here because this file is expected to
 * be included multiple times in order to define the syscall macros via
 * __SYSCALL.
 */

Also syscalls.h isn't included directly anywhere, but through
<asm/unistd.h>, so we'll probably need a similar comment there as well.

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

* Re: RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-04  8:54 ` [PATCH] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h Christoph Hellwig
@ 2018-08-06 20:42   ` Palmer Dabbelt
  2018-08-06 20:42     ` [PATCH v2] " Palmer Dabbelt
  0 siblings, 1 reply; 10+ messages in thread
From: Palmer Dabbelt @ 2018-08-06 20:42 UTC (permalink / raw)
  To: linux-riscv, Christoph Hellwig
  Cc: Palmer Dabbelt, aou, Arnd Bergmann, tklauser, linux-kernel

On Sat, 04 Aug 2018 01:54:38 PDT (-0700), Christoph Hellwig wrote:
>> index 818655b0d535..882a6aa09a33 100644
>> --- a/arch/riscv/include/uapi/asm/syscalls.h
>> +++ b/arch/riscv/include/uapi/asm/syscalls.h
>> @@ -1,10 +1,11 @@
>> -/* SPDX-License-Identifier: GPL-2.0 */
>> +// SPDX-License-Identifier: GPL-2.0
>
> /* */ is the required style for headers, // is only for other files.
>
>> +/* There is explicitly no include guard here because this file is expected to
>> + * be included multiple times in order to define the syscall macros via
>> + * __SYSCALL. */
>
> Normal Linux comment style would be:
>
> /*
>  * There is explicitly no include guard here because this file is expected to
>  * be included multiple times in order to define the syscall macros via
>  * __SYSCALL.
>  */
>
> Also syscalls.h isn't included directly anywhere, but through
> <asm/unistd.h>, so we'll probably need a similar comment there as well.

I've attached a v2 with both of these fixed.  Thanks!

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

* [PATCH v2] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-06 20:42   ` Palmer Dabbelt
@ 2018-08-06 20:42     ` " Palmer Dabbelt
  2018-08-06 21:00       ` Randy Dunlap
                         ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Palmer Dabbelt @ 2018-08-06 20:42 UTC (permalink / raw)
  To: linux-riscv, Christoph Hellwig
  Cc: Palmer Dabbelt, aou, Arnd Bergmann, tklauser, linux-kernel,
	Marcus Comstedt

This file is expected to be included multiple times in the same file in
order to allow the __SYSCALL macro to generate system call tables.  With
a global include guard we end up missing __NR_riscv_flush_icache in the
syscall table, which results in icache flushes that escape the vDSO call
to not actually do anything.

The fix is to move to per-#define include guards, which allows the
system call tables to actually be populated.  Thanks to Macrus Comstedt
for finding and fixing the bug!

I also went ahead and fixed the SPDX header to use a //-style comment,
which I've been told is the canonical way to do it.

Cc: Marcus Comstedt <marcus@mc.pp.se>
Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
---
 arch/riscv/include/asm/unistd.h        |  5 +++++
 arch/riscv/include/uapi/asm/syscalls.h | 15 +++++++++------
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/arch/riscv/include/asm/unistd.h b/arch/riscv/include/asm/unistd.h
index 080fb28061de..508be1780323 100644
--- a/arch/riscv/include/asm/unistd.h
+++ b/arch/riscv/include/asm/unistd.h
@@ -11,6 +11,11 @@
  *   GNU General Public License for more details.
  */
 
+/*
+ * There is explicitly no include guard here because this file is expected to
+ * included multiple times.  See uapi/asm/syscalls.h for more info.
+ */
+
 #define __ARCH_WANT_SYS_CLONE
 #include <uapi/asm/unistd.h>
 #include <uapi/asm/syscalls.h>
diff --git a/arch/riscv/include/uapi/asm/syscalls.h b/arch/riscv/include/uapi/asm/syscalls.h
index 818655b0d535..690beb002d1d 100644
--- a/arch/riscv/include/uapi/asm/syscalls.h
+++ b/arch/riscv/include/uapi/asm/syscalls.h
@@ -1,10 +1,13 @@
-/* SPDX-License-Identifier: GPL-2.0 */
+// SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (C) 2017 SiFive
+ * Copyright (C) 2017-2018 SiFive
  */
 
-#ifndef _ASM__UAPI__SYSCALLS_H
-#define _ASM__UAPI__SYSCALLS_H
+/*
+ * There is explicitly no include guard here because this file is expected to
+ * be included multiple times in order to define the syscall macros via
+ * __SYSCALL.
+ */
 
 /*
  * Allows the instruction cache to be flushed from userspace.  Despite RISC-V
@@ -20,7 +23,7 @@
  * caller.  We don't currently do anything with the address range, that's just
  * in there for forwards compatibility.
  */
+#ifndef __NR_riscv_flush_icache
 #define __NR_riscv_flush_icache (__NR_arch_specific_syscall + 15)
-__SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
-
 #endif
+__SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
-- 
2.16.4


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

* Re: [PATCH v2] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-06 20:42     ` [PATCH v2] " Palmer Dabbelt
@ 2018-08-06 21:00       ` Randy Dunlap
  2018-08-07  0:11         ` Palmer Dabbelt
  2018-08-07 12:45       ` Christoph Hellwig
  2018-08-09  5:58       ` Christoph Hellwig
  2 siblings, 1 reply; 10+ messages in thread
From: Randy Dunlap @ 2018-08-06 21:00 UTC (permalink / raw)
  To: Palmer Dabbelt, linux-riscv, Christoph Hellwig
  Cc: aou, Arnd Bergmann, tklauser, linux-kernel, Marcus Comstedt

On 08/06/2018 01:42 PM, Palmer Dabbelt wrote:
> This file is expected to be included multiple times in the same file in
> order to allow the __SYSCALL macro to generate system call tables.  With
> a global include guard we end up missing __NR_riscv_flush_icache in the
> syscall table, which results in icache flushes that escape the vDSO call
> to not actually do anything.
> 
> The fix is to move to per-#define include guards, which allows the
> system call tables to actually be populated.  Thanks to Macrus Comstedt
> for finding and fixing the bug!
> 
> I also went ahead and fixed the SPDX header to use a //-style comment,
> which I've been told is the canonical way to do it.
> 
> Cc: Marcus Comstedt <marcus@mc.pp.se>
> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
> ---
>  arch/riscv/include/asm/unistd.h        |  5 +++++
>  arch/riscv/include/uapi/asm/syscalls.h | 15 +++++++++------
>  2 files changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/riscv/include/asm/unistd.h b/arch/riscv/include/asm/unistd.h
> index 080fb28061de..508be1780323 100644
> --- a/arch/riscv/include/asm/unistd.h
> +++ b/arch/riscv/include/asm/unistd.h
> @@ -11,6 +11,11 @@
>   *   GNU General Public License for more details.
>   */
>  
> +/*
> + * There is explicitly no include guard here because this file is expected to

to .. be .. included

> + * included multiple times.  See uapi/asm/syscalls.h for more info.
> + */
> +
>  #define __ARCH_WANT_SYS_CLONE
>  #include <uapi/asm/unistd.h>
>  #include <uapi/asm/syscalls.h>
> diff --git a/arch/riscv/include/uapi/asm/syscalls.h b/arch/riscv/include/uapi/asm/syscalls.h
> index 818655b0d535..690beb002d1d 100644
> --- a/arch/riscv/include/uapi/asm/syscalls.h
> +++ b/arch/riscv/include/uapi/asm/syscalls.h
> @@ -1,10 +1,13 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> +// SPDX-License-Identifier: GPL-2.0
>  /*
> - * Copyright (C) 2017 SiFive
> + * Copyright (C) 2017-2018 SiFive
>   */
>  
> -#ifndef _ASM__UAPI__SYSCALLS_H
> -#define _ASM__UAPI__SYSCALLS_H
> +/*
> + * There is explicitly no include guard here because this file is expected to
> + * be included multiple times in order to define the syscall macros via

like that one :)

> + * __SYSCALL.
> + */
>  
>  /*
>   * Allows the instruction cache to be flushed from userspace.  Despite RISC-V


-- 
~Randy

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

* Re: [PATCH v2] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-06 21:00       ` Randy Dunlap
@ 2018-08-07  0:11         ` Palmer Dabbelt
  0 siblings, 0 replies; 10+ messages in thread
From: Palmer Dabbelt @ 2018-08-07  0:11 UTC (permalink / raw)
  To: rdunlap
  Cc: linux-riscv, Christoph Hellwig, aou, Arnd Bergmann, tklauser,
	linux-kernel, marcus

On Mon, 06 Aug 2018 14:00:53 PDT (-0700), rdunlap@infradead.org wrote:
> On 08/06/2018 01:42 PM, Palmer Dabbelt wrote:
>> This file is expected to be included multiple times in the same file in
>> order to allow the __SYSCALL macro to generate system call tables.  With
>> a global include guard we end up missing __NR_riscv_flush_icache in the
>> syscall table, which results in icache flushes that escape the vDSO call
>> to not actually do anything.
>>
>> The fix is to move to per-#define include guards, which allows the
>> system call tables to actually be populated.  Thanks to Macrus Comstedt
>> for finding and fixing the bug!
>>
>> I also went ahead and fixed the SPDX header to use a //-style comment,
>> which I've been told is the canonical way to do it.
>>
>> Cc: Marcus Comstedt <marcus@mc.pp.se>
>> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
>> ---
>>  arch/riscv/include/asm/unistd.h        |  5 +++++
>>  arch/riscv/include/uapi/asm/syscalls.h | 15 +++++++++------
>>  2 files changed, 14 insertions(+), 6 deletions(-)
>>
>> diff --git a/arch/riscv/include/asm/unistd.h b/arch/riscv/include/asm/unistd.h
>> index 080fb28061de..508be1780323 100644
>> --- a/arch/riscv/include/asm/unistd.h
>> +++ b/arch/riscv/include/asm/unistd.h
>> @@ -11,6 +11,11 @@
>>   *   GNU General Public License for more details.
>>   */
>>
>> +/*
>> + * There is explicitly no include guard here because this file is expected to
>
> to .. be .. included

Thanks.  I'm not going to spin a v3 unless there's more feedback, but I'll 
include it in the PR.

>
>> + * included multiple times.  See uapi/asm/syscalls.h for more info.
>> + */
>> +
>>  #define __ARCH_WANT_SYS_CLONE
>>  #include <uapi/asm/unistd.h>
>>  #include <uapi/asm/syscalls.h>
>> diff --git a/arch/riscv/include/uapi/asm/syscalls.h b/arch/riscv/include/uapi/asm/syscalls.h
>> index 818655b0d535..690beb002d1d 100644
>> --- a/arch/riscv/include/uapi/asm/syscalls.h
>> +++ b/arch/riscv/include/uapi/asm/syscalls.h
>> @@ -1,10 +1,13 @@
>> -/* SPDX-License-Identifier: GPL-2.0 */
>> +// SPDX-License-Identifier: GPL-2.0
>>  /*
>> - * Copyright (C) 2017 SiFive
>> + * Copyright (C) 2017-2018 SiFive
>>   */
>>
>> -#ifndef _ASM__UAPI__SYSCALLS_H
>> -#define _ASM__UAPI__SYSCALLS_H
>> +/*
>> + * There is explicitly no include guard here because this file is expected to
>> + * be included multiple times in order to define the syscall macros via
>
> like that one :)
>
>> + * __SYSCALL.
>> + */
>>
>>  /*
>>   * Allows the instruction cache to be flushed from userspace.  Despite RISC-V

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

* Re: [PATCH v2] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-06 20:42     ` [PATCH v2] " Palmer Dabbelt
  2018-08-06 21:00       ` Randy Dunlap
@ 2018-08-07 12:45       ` Christoph Hellwig
  2018-08-09  5:58       ` Christoph Hellwig
  2 siblings, 0 replies; 10+ messages in thread
From: Christoph Hellwig @ 2018-08-07 12:45 UTC (permalink / raw)
  To: Palmer Dabbelt
  Cc: linux-riscv, Christoph Hellwig, aou, Arnd Bergmann, tklauser,
	linux-kernel, Marcus Comstedt

Looks fine (modulo any typos):

Reviewed-by: Christoph Hellwig <hch@lst.de>

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

* Re: [PATCH v2] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-06 20:42     ` [PATCH v2] " Palmer Dabbelt
  2018-08-06 21:00       ` Randy Dunlap
  2018-08-07 12:45       ` Christoph Hellwig
@ 2018-08-09  5:58       ` Christoph Hellwig
  2018-08-09 20:58         ` Palmer Dabbelt
  2 siblings, 1 reply; 10+ messages in thread
From: Christoph Hellwig @ 2018-08-09  5:58 UTC (permalink / raw)
  To: Palmer Dabbelt
  Cc: linux-riscv, Christoph Hellwig, aou, Arnd Bergmann, linux-kernel,
	tklauser, Marcus Comstedt

This actually seems to break the compilation for me in for-next:

hch@carbon:~/work/linux$ make ARCH=riscv
  CALL    scripts/checksyscalls.sh
<stdin>:1335:2: warning: #warning syscall rseq not implemented [-Wcpp]
  CHK     include/generated/compile.h
  CC      arch/riscv/kernel/syscall_table.o
./arch/riscv/include/uapi/asm/syscalls.h:29:36: error: 'sys_riscv_flush_icache' undeclared here (not in a function); did you mean '__NR_riscv_flush_icache'?
 __SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
                                    ^
arch/riscv/kernel/syscall_table.c:21:37: note: in definition of macro '__SYSCALL'
 #define __SYSCALL(nr, call) [nr] = (call),
                                     ^~~~
make[1]: *** [scripts/Makefile.build:318: arch/riscv/kernel/syscall_table.o] Error 1
make: *** [Makefile:1029: arch/riscv/kernel] Error 2

Reverting it for now, but I guess this might hit others too..

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

* Re: [PATCH] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
       [not found] <20180803195344.22271-1-palmer@sifive.com>
  2018-08-04  8:54 ` [PATCH] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h Christoph Hellwig
@ 2018-08-09 13:26 ` " Guenter Roeck
  2018-08-09 20:58   ` Palmer Dabbelt
  1 sibling, 1 reply; 10+ messages in thread
From: Guenter Roeck @ 2018-08-09 13:26 UTC (permalink / raw)
  To: Palmer Dabbelt; +Cc: linux-riscv, aou, linux-kernel, Marcus Comstedt

On Fri, Aug 03, 2018 at 12:53:44PM -0700, Palmer Dabbelt wrote:
> This file is expected to be included multiple times in the same file in
> order to allow the __SYSCALL macro to generate system call tables.  With
> a global include guard we end up missing __NR_riscv_flush_icache in the
> syscall table, which results in icache flushes that escape the vDSO call
> to not actually do anything.
> 
> The fix is to move to per-#define include guards, which allows the
> system call tables to actually be populated.  Thanks to Macrus Comstedt
> for finding and fixing the bug!
> 
> I also went ahead and fixed the SPDX header to use a //-style comment,
> which I've been told is the canonical way to do it.
> 
> Cc: Marcus Comstedt <marcus@mc.pp.se>
> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>

Fails to build riscv:allnoconfig.

CC      arch/riscv/kernel/syscall_table.o
./arch/riscv/include/uapi/asm/syscalls.h:29:36: error:
‘sys_riscv_flush_icache’ undeclared here (not in a function); did you mean ‘__NR_riscv_flush_icache’?

Guenter

> ---
>  arch/riscv/include/uapi/asm/syscalls.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/riscv/include/uapi/asm/syscalls.h b/arch/riscv/include/uapi/asm/syscalls.h
> index 818655b0d535..882a6aa09a33 100644
> --- a/arch/riscv/include/uapi/asm/syscalls.h
> +++ b/arch/riscv/include/uapi/asm/syscalls.h
> @@ -1,10 +1,11 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> +// SPDX-License-Identifier: GPL-2.0
>  /*
> - * Copyright (C) 2017 SiFive
> + * Copyright (C) 2017-2018 SiFive
>   */
>  
> -#ifndef _ASM__UAPI__SYSCALLS_H
> -#define _ASM__UAPI__SYSCALLS_H
> +/* There is explicitly no include guard here because this file is expected to
> + * be included multiple times in order to define the syscall macros via
> + * __SYSCALL. */
>  
>  /*
>   * Allows the instruction cache to be flushed from userspace.  Despite RISC-V
> @@ -20,7 +21,7 @@
>   * caller.  We don't currently do anything with the address range, that's just
>   * in there for forwards compatibility.
>   */
> +#ifndef __NR_riscv_flush_icache
>  #define __NR_riscv_flush_icache (__NR_arch_specific_syscall + 15)
> -__SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
> -
>  #endif
> +__SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)

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

* Re: [PATCH v2] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-09  5:58       ` Christoph Hellwig
@ 2018-08-09 20:58         ` Palmer Dabbelt
  0 siblings, 0 replies; 10+ messages in thread
From: Palmer Dabbelt @ 2018-08-09 20:58 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: linux-riscv, Christoph Hellwig, aou, Arnd Bergmann, linux-kernel,
	tklauser, marcus

On Wed, 08 Aug 2018 22:58:30 PDT (-0700), Christoph Hellwig wrote:
> This actually seems to break the compilation for me in for-next:
>
> hch@carbon:~/work/linux$ make ARCH=riscv
>   CALL    scripts/checksyscalls.sh
> <stdin>:1335:2: warning: #warning syscall rseq not implemented [-Wcpp]
>   CHK     include/generated/compile.h
>   CC      arch/riscv/kernel/syscall_table.o
> ./arch/riscv/include/uapi/asm/syscalls.h:29:36: error: 'sys_riscv_flush_icache' undeclared here (not in a function); did you mean '__NR_riscv_flush_icache'?
>  __SYSCALL(__NR_riscv_flush_icache, sys_riscv_flush_icache)
>                                     ^
> arch/riscv/kernel/syscall_table.c:21:37: note: in definition of macro '__SYSCALL'
>  #define __SYSCALL(nr, call) [nr] = (call),
>                                      ^~~~
> make[1]: *** [scripts/Makefile.build:318: arch/riscv/kernel/syscall_table.o] Error 1
> make: *** [Makefile:1029: arch/riscv/kernel] Error 2
>
> Reverting it for now, but I guess this might hit others too..

Thanks.  I dropped this from for-next and just sent out a replacement.

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

* Re: [PATCH] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h
  2018-08-09 13:26 ` [PATCH] " Guenter Roeck
@ 2018-08-09 20:58   ` Palmer Dabbelt
  0 siblings, 0 replies; 10+ messages in thread
From: Palmer Dabbelt @ 2018-08-09 20:58 UTC (permalink / raw)
  To: linux; +Cc: linux-riscv, aou, linux-kernel, marcus

On Thu, 09 Aug 2018 06:26:12 PDT (-0700), linux@roeck-us.net wrote:
> On Fri, Aug 03, 2018 at 12:53:44PM -0700, Palmer Dabbelt wrote:
>> This file is expected to be included multiple times in the same file in
>> order to allow the __SYSCALL macro to generate system call tables.  With
>> a global include guard we end up missing __NR_riscv_flush_icache in the
>> syscall table, which results in icache flushes that escape the vDSO call
>> to not actually do anything.
>>
>> The fix is to move to per-#define include guards, which allows the
>> system call tables to actually be populated.  Thanks to Macrus Comstedt
>> for finding and fixing the bug!
>>
>> I also went ahead and fixed the SPDX header to use a //-style comment,
>> which I've been told is the canonical way to do it.
>>
>> Cc: Marcus Comstedt <marcus@mc.pp.se>
>> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
>
> Fails to build riscv:allnoconfig.
>
> CC      arch/riscv/kernel/syscall_table.o
> ./arch/riscv/include/uapi/asm/syscalls.h:29:36: error:
> ‘sys_riscv_flush_icache’ undeclared here (not in a function); did you mean ‘__NR_riscv_flush_icache’?

Thanks.  I added you to another patch set.

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

end of thread, back to index

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20180803195344.22271-1-palmer@sifive.com>
2018-08-04  8:54 ` [PATCH] RISC-V: Don't use a global include guard for uapi/asm/syscalls.h Christoph Hellwig
2018-08-06 20:42   ` Palmer Dabbelt
2018-08-06 20:42     ` [PATCH v2] " Palmer Dabbelt
2018-08-06 21:00       ` Randy Dunlap
2018-08-07  0:11         ` Palmer Dabbelt
2018-08-07 12:45       ` Christoph Hellwig
2018-08-09  5:58       ` Christoph Hellwig
2018-08-09 20:58         ` Palmer Dabbelt
2018-08-09 13:26 ` [PATCH] " Guenter Roeck
2018-08-09 20:58   ` Palmer Dabbelt

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org linux-kernel@archiver.kernel.org
	public-inbox-index lkml


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox