xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Stefano Stabellini <sstabellini@kernel.org>
To: Bobby Eshleman <bobbyeshleman@gmail.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Julien Grall <julien@xen.org>, Wei Liu <wl@xen.org>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	George Dunlap <George.Dunlap@eu.citrix.com>,
	Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <ian.jackson@eu.citrix.com>,
	Bobby Eshleman <bobby.eshleman@starlab.io>,
	Dan Robertson <dan@dlrobertson.com>,
	Alistair Francis <alistair.francis@wdc.com>,
	Jan Beulich <jbeulich@suse.com>,
	xen-devel@lists.xenproject.org
Subject: Re: [RFC XEN PATCH 00/23] xen: beginning support for RISC-V
Date: Mon, 15 Jun 2020 18:03:01 -0700 (PDT)	[thread overview]
Message-ID: <alpine.DEB.2.21.2006151802470.9074@sstabellini-ThinkPad-T480s> (raw)
In-Reply-To: <cover.1579615303.git.bobbyeshleman@gmail.com>

Any updates? I am looking forward to this :-)


On Tue, 21 Jan 2020, Bobby Eshleman wrote:
> Hey everybody,
> 
> This is an RFC patchset for the very beginnings of adding RISC-V support
> to Xen.  This RFC is really just to start a dialogue about supporting
> RISC-V and align with the Xen project and community before going
> further.  For that reason, it is very rough and very incomplete. 
> 
> My name is Bobby Eshleman, I'm a software engineer at
> Star Lab / Wind River on the ARM team, mostly having worked in the Linux
> kernel.  I've also been involved a good amount with Xen on ARM here,
> mostly dealing with tooling, deployment, and testing.  A lot of this
> patchset is heavily inspired by the Xen/ARM source code (particularly
> the early setup up code).
> 
> Currently, this patchset really only sets up virtual memory for Xen and
> initializes UART to enable print output.  None of RISC-V's
> virtualization support has been implemented yet, although that is the
> next road to start going down.  Many functions only contain dummy
> implementations.  Many shortcuts have been taken and TODO's have been
> left accordingly.  It is very, very rough.  Be forewarned: you are quite
> likely to see some ungainly code here (despite my efforts to clean it up
> before sending this patchset out).  My intent with this RFC is to align
> early and gauge interest, as opposed to presenting a totally complete
> patchset.
> 
> Because the ARM and RISC-V use cases will likely bear resemblance, the
> RISC-V port should probably respect the design considerations that have
> been laid out and respected by Xen on ARM for dom0less, safety
> certification, etc...  My inclination has been to initially target or
> prioritize dom0less (without excluding dom0full) and use the ARM
> dom0less implementation as a model to follow.  I'd love feedback on this
> point and on how the Xen project might envision a RISC-V implementation.
> 
> This patchset has _some_ code for future support for 32-bit, but
> currently my focus is on 64-bit.
> 
> Again, this is a very, very rough and totally incomplete patchset.  My
> goal here is just to gauge community interest, begin discussing what Xen
> on RISC-V may look like, receive feedback, and see if I'm heading in the
> right direction.
> 
> My big questions are:
> 	Does the Xen project have interest in RISC-V?
> 	What can be done to make the RISC-V port as upstreamable as
> 		possible?
> 	Any major pitfalls?
> 
> It would be great to hear all of your feedback.
> 
> Alistair Francis (20):
>   HACK: OE Build changes
>   HACK: Makefile: Don't build Xen tools
>   riscv: makefiles and Kconfig
>   riscv: Add riscv to tools/libxc header files
>   riscv: Add asm-offsets.c
>   riscv: Add delay.c
>   riscv: Add domain.c
>   riscv: Add domctl.c
>   riscv: Add guestcopy.c
>   riscv: Add time.c
>   riscv: Add smp.c
>   riscv: Add shutdown.c
>   riscv: Add traps.c
>   riscv: Add irq.c
>   riscv: Add vm_event.c
>   riscv: Add p2m.c
>   riscv: Add the lib directory
>   riscv: Add smpboot.c
>   riscv: Add percpu.c
>   riscv: Add sysctl.c
> 
> Bobby Eshleman (3):
>   riscv: header files
>   riscv: early setup code
>   riscv: Add iommu.c
> 
>  Makefile                                 |  13 +-
>  config/StdGNU.mk                         |  12 +-
>  config/riscv64.mk                        |   7 +
>  tools/configure                          |  32 +-
>  tools/firmware/Makefile                  |  12 +-
>  tools/libxc/include/xenctrl.h            |   7 +
>  tools/libxc/xc_core.h                    |   2 +
>  tools/libxc/xc_core_riscv.h              |  57 ++
>  xen/Makefile                             |   2 +-
>  xen/Rules.mk                             |   2 +-
>  xen/arch/Kconfig                         |   1 +
>  xen/arch/riscv/Kconfig                   |  36 +
>  xen/arch/riscv/Makefile                  |  62 ++
>  xen/arch/riscv/Rules.mk                  |  55 ++
>  xen/arch/riscv/asm-offsets.c             |  38 +
>  xen/arch/riscv/configs/riscv32_defconfig |   0
>  xen/arch/riscv/configs/riscv64_defconfig |   0
>  xen/arch/riscv/delay.c                   | 114 +++
>  xen/arch/riscv/domain.c                  | 273 +++++++
>  xen/arch/riscv/domctl.c                  |  53 ++
>  xen/arch/riscv/guestcopy.c               | 158 ++++
>  xen/arch/riscv/head.S                    | 180 +++++
>  xen/arch/riscv/irq.c                     | 107 +++
>  xen/arch/riscv/lib/Makefile              |   1 +
>  xen/arch/riscv/lib/find_next_bit.c       | 284 +++++++
>  xen/arch/riscv/mm.c                      | 925 +++++++++++++++++++++++
>  xen/arch/riscv/p2m.c                     | 261 +++++++
>  xen/arch/riscv/percpu.c                  |  84 ++
>  xen/arch/riscv/platforms/Kconfig         |  31 +
>  xen/arch/riscv/setup.c                   | 122 +++
>  xen/arch/riscv/shutdown.c                |  24 +
>  xen/arch/riscv/smp.c                     |  41 +
>  xen/arch/riscv/smpboot.c                 | 114 +++
>  xen/arch/riscv/sysctl.c                  |  31 +
>  xen/arch/riscv/time.c                    |  74 ++
>  xen/arch/riscv/traps.c                   |  56 ++
>  xen/arch/riscv/vm_event.c                |  42 +
>  xen/arch/riscv/xen.lds.S                 | 262 +++++++
>  xen/drivers/passthrough/Makefile         |   1 +
>  xen/drivers/passthrough/riscv/Makefile   |   1 +
>  xen/drivers/passthrough/riscv/iommu.c    |  74 ++
>  xen/include/asm-riscv/altp2m.h           |  39 +
>  xen/include/asm-riscv/asm.h              |  76 ++
>  xen/include/asm-riscv/atomic.h           | 249 ++++++
>  xen/include/asm-riscv/bitops.h           | 331 ++++++++
>  xen/include/asm-riscv/bug.h              |  59 ++
>  xen/include/asm-riscv/byteorder.h        |  16 +
>  xen/include/asm-riscv/cache.h            |  24 +
>  xen/include/asm-riscv/cmpxchg.h          | 382 ++++++++++
>  xen/include/asm-riscv/config.h           | 203 +++++
>  xen/include/asm-riscv/csr.h              | 117 +++
>  xen/include/asm-riscv/current.h          |  50 ++
>  xen/include/asm-riscv/debugger.h         |  15 +
>  xen/include/asm-riscv/delay.h            |  28 +
>  xen/include/asm-riscv/desc.h             |  12 +
>  xen/include/asm-riscv/device.h           |  15 +
>  xen/include/asm-riscv/div64.h            |  23 +
>  xen/include/asm-riscv/domain.h           |  85 +++
>  xen/include/asm-riscv/event.h            |  42 +
>  xen/include/asm-riscv/fence.h            |  12 +
>  xen/include/asm-riscv/flushtlb.h         |  56 ++
>  xen/include/asm-riscv/grant_table.h      |  93 +++
>  xen/include/asm-riscv/guest_access.h     | 164 ++++
>  xen/include/asm-riscv/guest_atomics.h    |  62 ++
>  xen/include/asm-riscv/hardirq.h          |  27 +
>  xen/include/asm-riscv/hypercall.h        |  12 +
>  xen/include/asm-riscv/init.h             |  42 +
>  xen/include/asm-riscv/io.h               | 283 +++++++
>  xen/include/asm-riscv/iocap.h            |  16 +
>  xen/include/asm-riscv/iommu.h            |  49 ++
>  xen/include/asm-riscv/irq.h              |  58 ++
>  xen/include/asm-riscv/mem_access.h       |  35 +
>  xen/include/asm-riscv/mm.h               | 308 ++++++++
>  xen/include/asm-riscv/monitor.h          |  65 ++
>  xen/include/asm-riscv/nospec.h           |  25 +
>  xen/include/asm-riscv/numa.h             |  41 +
>  xen/include/asm-riscv/p2m.h              | 410 ++++++++++
>  xen/include/asm-riscv/page.h             | 327 ++++++++
>  xen/include/asm-riscv/paging.h           |  16 +
>  xen/include/asm-riscv/pci.h              |  31 +
>  xen/include/asm-riscv/percpu.h           |  34 +
>  xen/include/asm-riscv/pgtable-bits.h     |  53 ++
>  xen/include/asm-riscv/processor.h        |  60 ++
>  xen/include/asm-riscv/random.h           |   9 +
>  xen/include/asm-riscv/regs.h             |  42 +
>  xen/include/asm-riscv/riscv_encoding.h   | 682 +++++++++++++++++
>  xen/include/asm-riscv/setup.h            |  16 +
>  xen/include/asm-riscv/smp.h              |  50 ++
>  xen/include/asm-riscv/softirq.h          |  16 +
>  xen/include/asm-riscv/spinlock.h         |  13 +
>  xen/include/asm-riscv/string.h           |  28 +
>  xen/include/asm-riscv/sysregs.h          |  14 +
>  xen/include/asm-riscv/system.h           |  96 +++
>  xen/include/asm-riscv/time.h             |  60 ++
>  xen/include/asm-riscv/trace.h            |  12 +
>  xen/include/asm-riscv/types.h            |  73 ++
>  xen/include/asm-riscv/vm_event.h         |  61 ++
>  xen/include/asm-riscv/xenoprof.h         |  12 +
>  xen/include/public/arch-riscv.h          | 181 +++++
>  xen/include/public/arch-riscv/hvm/save.h |  39 +
>  xen/include/public/hvm/save.h            |   2 +
>  xen/include/public/pmu.h                 |   2 +
>  xen/include/public/xen.h                 |   2 +
>  103 files changed, 9064 insertions(+), 42 deletions(-)
>  create mode 100644 config/riscv64.mk
>  create mode 100644 tools/libxc/xc_core_riscv.h
>  create mode 100644 xen/arch/riscv/Kconfig
>  create mode 100644 xen/arch/riscv/Makefile
>  create mode 100644 xen/arch/riscv/Rules.mk
>  create mode 100644 xen/arch/riscv/asm-offsets.c
>  create mode 100644 xen/arch/riscv/configs/riscv32_defconfig
>  create mode 100644 xen/arch/riscv/configs/riscv64_defconfig
>  create mode 100644 xen/arch/riscv/delay.c
>  create mode 100644 xen/arch/riscv/domain.c
>  create mode 100644 xen/arch/riscv/domctl.c
>  create mode 100644 xen/arch/riscv/guestcopy.c
>  create mode 100644 xen/arch/riscv/head.S
>  create mode 100644 xen/arch/riscv/irq.c
>  create mode 100644 xen/arch/riscv/lib/Makefile
>  create mode 100644 xen/arch/riscv/lib/find_next_bit.c
>  create mode 100644 xen/arch/riscv/mm.c
>  create mode 100644 xen/arch/riscv/p2m.c
>  create mode 100644 xen/arch/riscv/percpu.c
>  create mode 100644 xen/arch/riscv/platforms/Kconfig
>  create mode 100644 xen/arch/riscv/setup.c
>  create mode 100644 xen/arch/riscv/shutdown.c
>  create mode 100644 xen/arch/riscv/smp.c
>  create mode 100644 xen/arch/riscv/smpboot.c
>  create mode 100644 xen/arch/riscv/sysctl.c
>  create mode 100644 xen/arch/riscv/time.c
>  create mode 100644 xen/arch/riscv/traps.c
>  create mode 100644 xen/arch/riscv/vm_event.c
>  create mode 100644 xen/arch/riscv/xen.lds.S
>  create mode 100644 xen/drivers/passthrough/riscv/Makefile
>  create mode 100644 xen/drivers/passthrough/riscv/iommu.c
>  create mode 100644 xen/include/asm-riscv/altp2m.h
>  create mode 100644 xen/include/asm-riscv/asm.h
>  create mode 100644 xen/include/asm-riscv/atomic.h
>  create mode 100644 xen/include/asm-riscv/bitops.h
>  create mode 100644 xen/include/asm-riscv/bug.h
>  create mode 100644 xen/include/asm-riscv/byteorder.h
>  create mode 100644 xen/include/asm-riscv/cache.h
>  create mode 100644 xen/include/asm-riscv/cmpxchg.h
>  create mode 100644 xen/include/asm-riscv/config.h
>  create mode 100644 xen/include/asm-riscv/csr.h
>  create mode 100644 xen/include/asm-riscv/current.h
>  create mode 100644 xen/include/asm-riscv/debugger.h
>  create mode 100644 xen/include/asm-riscv/delay.h
>  create mode 100644 xen/include/asm-riscv/desc.h
>  create mode 100644 xen/include/asm-riscv/device.h
>  create mode 100644 xen/include/asm-riscv/div64.h
>  create mode 100644 xen/include/asm-riscv/domain.h
>  create mode 100644 xen/include/asm-riscv/event.h
>  create mode 100644 xen/include/asm-riscv/fence.h
>  create mode 100644 xen/include/asm-riscv/flushtlb.h
>  create mode 100644 xen/include/asm-riscv/grant_table.h
>  create mode 100644 xen/include/asm-riscv/guest_access.h
>  create mode 100644 xen/include/asm-riscv/guest_atomics.h
>  create mode 100644 xen/include/asm-riscv/hardirq.h
>  create mode 100644 xen/include/asm-riscv/hypercall.h
>  create mode 100644 xen/include/asm-riscv/init.h
>  create mode 100644 xen/include/asm-riscv/io.h
>  create mode 100644 xen/include/asm-riscv/iocap.h
>  create mode 100644 xen/include/asm-riscv/iommu.h
>  create mode 100644 xen/include/asm-riscv/irq.h
>  create mode 100644 xen/include/asm-riscv/mem_access.h
>  create mode 100644 xen/include/asm-riscv/mm.h
>  create mode 100644 xen/include/asm-riscv/monitor.h
>  create mode 100644 xen/include/asm-riscv/nospec.h
>  create mode 100644 xen/include/asm-riscv/numa.h
>  create mode 100644 xen/include/asm-riscv/p2m.h
>  create mode 100644 xen/include/asm-riscv/page.h
>  create mode 100644 xen/include/asm-riscv/paging.h
>  create mode 100644 xen/include/asm-riscv/pci.h
>  create mode 100644 xen/include/asm-riscv/percpu.h
>  create mode 100644 xen/include/asm-riscv/pgtable-bits.h
>  create mode 100644 xen/include/asm-riscv/processor.h
>  create mode 100644 xen/include/asm-riscv/random.h
>  create mode 100644 xen/include/asm-riscv/regs.h
>  create mode 100644 xen/include/asm-riscv/riscv_encoding.h
>  create mode 100644 xen/include/asm-riscv/setup.h
>  create mode 100644 xen/include/asm-riscv/smp.h
>  create mode 100644 xen/include/asm-riscv/softirq.h
>  create mode 100644 xen/include/asm-riscv/spinlock.h
>  create mode 100644 xen/include/asm-riscv/string.h
>  create mode 100644 xen/include/asm-riscv/sysregs.h
>  create mode 100644 xen/include/asm-riscv/system.h
>  create mode 100644 xen/include/asm-riscv/time.h
>  create mode 100644 xen/include/asm-riscv/trace.h
>  create mode 100644 xen/include/asm-riscv/types.h
>  create mode 100644 xen/include/asm-riscv/vm_event.h
>  create mode 100644 xen/include/asm-riscv/xenoprof.h
>  create mode 100644 xen/include/public/arch-riscv.h
>  create mode 100644 xen/include/public/arch-riscv/hvm/save.h
> 
> -- 
> 2.25.0
> 
> The source code can be found on github:
> 	https://github.com/beshleman/xen/tree/port-to-risc-v
> 
> The patchset only targets the QEMU virt board and it is tested on
> Alistair Francis's patchset for QEMU with RISC-V hypervisor extensions
> v0.5, found here:
> 	https://github.com/alistair23/qemu/tree/mainline/alistair/riscv-hyp-ext-v0.5.next
> 
> QEMU is built with:
> 	git clone --single-branch --branch mainline/alistair/riscv-hyp-ext-v0.5.next \
> 		https://github.com/alistair23/qemu.git
>         cd qemu
>         mkdir build && cd build
>         ../configure --target-list=riscv64-softmmu
> 	make -j$(nproc) && make install
> 
> The bootloader used is the standard OpenSBI, built with the command:
> 	CROSS_COMPILE=riscv64-unknown-linux-gnu- PLATFORM=qemu/virt FW_PAYLOAD_PATH=../xen/xen/xen make
> 
> Xen/RISC-V is built with:
> 	XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-unknown-linux-gnu- make build
> 
> Xen may be ran with the following command:
> 	qemu-system-riscv64 -cpu rv64,x-h=true -M virt -m 512M -display none \
> 		-serial stdio -kernel \
> 		opensbi/build/platform/qemu/virt/firmware/fw_payload.elf
> 
> Also, shoutout to Alistair Francis (from Western Digital) for getting
> the ball rolling and doing a ton of the groundwork with
> Makefile/Kconfig, a ton of the RISC-V specific header files, and also
> the QEMU RISC-V H extension support, and Dan Robertson (a colleague of
> mine at Star Lab) for help in forward porting a number of patches that
> were out-of-sync with upstream.
> 
> 
> Thanks,
> Bobby Eshleman
> 


  parent reply	other threads:[~2020-06-16  1:03 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-22  1:58 [Xen-devel] [RFC XEN PATCH 00/23] xen: beginning support for RISC-V Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 01/23] HACK: OE Build changes Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 02/23] HACK: Makefile: Don't build Xen tools Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 03/23] riscv: makefiles and Kconfig Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 04/23] riscv: header files Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 05/23] riscv: early setup code Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 06/23] riscv: Add riscv to tools/libxc header files Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 07/23] riscv: Add asm-offsets.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 08/23] riscv: Add delay.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 09/23] riscv: Add domain.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 10/23] riscv: Add domctl.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 11/23] riscv: Add guestcopy.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 12/23] riscv: Add time.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 13/23] riscv: Add smp.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 14/23] riscv: Add shutdown.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 15/23] riscv: Add traps.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 16/23] riscv: Add irq.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 17/23] riscv: Add vm_event.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 18/23] riscv: Add p2m.c Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 19/23] riscv: Add the lib directory Bobby Eshleman
2020-06-22 11:38   ` Jan Beulich
2020-06-30  1:55     ` Bobby Eshleman
2020-01-22  1:58 ` [Xen-devel] [RFC XEN PATCH 20/23] riscv: Add smpboot.c Bobby Eshleman
2020-01-22  1:59 ` [Xen-devel] [RFC XEN PATCH 21/23] riscv: Add percpu.c Bobby Eshleman
2020-01-22  1:59 ` [Xen-devel] [RFC XEN PATCH 22/23] riscv: Add sysctl.c Bobby Eshleman
2020-06-22 11:43   ` Jan Beulich
2020-06-30  1:51     ` Bobby Eshleman
2020-01-22  1:59 ` [Xen-devel] [RFC XEN PATCH 23/23] riscv: Add iommu.c Bobby Eshleman
2020-01-22 14:57 ` [Xen-devel] [RFC XEN PATCH 00/23] xen: beginning support for RISC-V Andrew Cooper
2020-01-22 16:27   ` Lars Kurth
2020-01-23  5:31     ` Bobby Eshleman
2020-01-23 23:44       ` Lars Kurth
2020-01-25  1:59         ` Bobby Eshleman
2020-01-22 21:05   ` Stefano Stabellini
     [not found]     ` <20200123044527.GA5583@bobbye-pc>
2020-01-23  5:13       ` Bobby Eshleman
2020-01-23  5:19   ` Bobby Eshleman
2020-01-23 16:02     ` Andrew Cooper
2020-01-25  1:58       ` Bobby Eshleman
2020-01-23  8:25   ` Alistair Francis
2020-01-24 13:41 ` Andrew Cooper
2020-01-25  3:26   ` Bobby Eshleman
2020-01-25 17:11     ` Andrew Cooper
2020-01-28  3:37       ` Bobby Eshleman
2020-06-16  1:03 ` Stefano Stabellini [this message]
2020-06-16  1:08   ` Roman Shaposhnik
2020-06-16  1:10   ` Alistair Francis
2020-06-16  3:51     ` Bobby Eshleman
2020-06-16 20:16       ` Stefano Stabellini
2020-06-30  1:50         ` Bobby Eshleman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.21.2006151802470.9074@sstabellini-ThinkPad-T480s \
    --to=sstabellini@kernel.org \
    --cc=George.Dunlap@eu.citrix.com \
    --cc=alistair.francis@wdc.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=bobby.eshleman@starlab.io \
    --cc=bobbyeshleman@gmail.com \
    --cc=dan@dlrobertson.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien@xen.org \
    --cc=konrad.wilk@oracle.com \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).