From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: Alistair Francis <alistair23@gmail.com>, <qemu-devel@nongnu.org>,
<linuxarm@huawei.com>, <linux-cxl@vger.kernel.org>
Subject: Re: [PATCH 066/147] include/exec: Move TLB_MMIO, TLB_DISCARD_WRITE to slow flags
Date: Thu, 8 May 2025 14:29:18 +0100 [thread overview]
Message-ID: <20250508142918.0000248d@huawei.com> (raw)
In-Reply-To: <04875ca2-781b-4000-b74c-fc338bc6ec4d@linaro.org>
On Tue, 29 Apr 2025 19:43:05 -0700
Richard Henderson <richard.henderson@linaro.org> wrote:
> On 4/29/25 14:35, Alistair Francis wrote:
> > On Sat, Apr 26, 2025 at 3:36 AM Jonathan Cameron via
> > <qemu-devel@nongnu.org> wrote:
> >>
> >> On Tue, 22 Apr 2025 12:26:55 -0700
> >> Richard Henderson <richard.henderson@linaro.org> wrote:
> >>
> >>> Recover two bits from the inline flags.
> >>
> >>
> >> Hi Richard,
> >>
> >> Early days but something (I'm fairly sure in this patch) is tripping up my favourite
> >> TCG corner case of running code out of MMIO memory (interleaved CXL memory).
> >>
> >> Only seeing it on arm64 tests so far which isn't upstream yet..
> >> (guess what I was getting ready to post today)
> >>
> >> Back trace is:
> >>
> >> #0 0x0000555555fd4296 in cpu_atomic_fetch_andq_le_mmu (env=0x555557ee19b0, addr=18442241572520067072, val=18446744073701163007, oi=8244, retaddr=<optimized out>) at ../../accel/tcg/atomic_template.h:140
> >> #1 0x00007fffb6894125 in code_gen_buffer ()
> >> #2 0x0000555555fc4c46 in cpu_tb_exec (cpu=cpu@entry=0x555557ededf0, itb=itb@entry=0x7fffb6894000 <code_gen_buffer+200511443>, tb_exit=tb_exit@entry=0x7ffff4bfb744) at ../../accel/tcg/cpu-exec.c:455
> >> #3 0x0000555555fc51c2 in cpu_loop_exec_tb (tb_exit=0x7ffff4bfb744, last_tb=<synthetic pointer>, pc=<optimized out>, tb=0x7fffb6894000 <code_gen_buffer+200511443>, cpu=0x555557ededf0) at ../../accel/tcg/cpu-exec.c:904
> >> #4 cpu_exec_loop (cpu=cpu@entry=0x555557ededf0, sc=sc@entry=0x7ffff4bfb7f0) at ../../accel/tcg/cpu-exec.c:1018
> >> #5 0x0000555555fc58f1 in cpu_exec_setjmp (cpu=cpu@entry=0x555557ededf0, sc=sc@entry=0x7ffff4bfb7f0) at ../../accel/tcg/cpu-exec.c:1035
> >> #6 0x0000555555fc5f6c in cpu_exec (cpu=cpu@entry=0x555557ededf0) at ../../accel/tcg/cpu-exec.c:1061
> >> #7 0x0000555556146ac3 in tcg_cpu_exec (cpu=cpu@entry=0x555557ededf0) at ../../accel/tcg/tcg-accel-ops.c:81
> >> #8 0x0000555556146ee3 in mttcg_cpu_thread_fn (arg=arg@entry=0x555557ededf0) at ../../accel/tcg/tcg-accel-ops-mttcg.c:94
> >> #9 0x00005555561f6450 in qemu_thread_start (args=0x555557f8f430) at ../../util/qemu-thread-posix.c:541
> >> #10 0x00007ffff7750aa4 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:447
> >> #11 0x00007ffff77ddc3c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
> >>
> >> I haven't pushed out the rebased tree yet making this a truly awful bug report.
> >>
> >> The pull request you sent with this in wasn't bisectable so this was a bit of a guessing
> >> game. I see the seg fault only after this patch.
> >
> > I see the same thing with some RISC-V tests. I can provide the test
> > images if you want as well
>
>
> Yes please.
>
>
> r~
I'm guessing Alastair is busy.
I got around to testing this on x86 and indeed blow up is the same.
0x0000555555e3dd77 in cpu_atomic_add_fetchl_le_mmu (env=0x55555736bef0, addr=140271756837240, val=1, oi=34, retaddr=<optimized out>) at ../../accel/tcg/atomic_template.h:143
143 GEN_ATOMIC_HELPER(add_fetch)
(gdb) bt
#0 0x0000555555e3dd77 in cpu_atomic_add_fetchl_le_mmu (env=0x55555736bef0, addr=140271756837240, val=1, oi=34, retaddr=<optimized out>) at ../../accel/tcg/atomic_template.h:143
#1 0x00007fffbc31c6f0 in code_gen_buffer ()
#2 0x0000555555e23aa6 in cpu_tb_exec (cpu=cpu@entry=0x555557369330, itb=itb@entry=0x7fffbc31c600 <code_gen_buffer+295441875>, tb_exit=tb_exit@entry=0x7ffff4bfd6ec) at ../../accel/tcg/cpu-exec.c:438
#3 0x0000555555e24025 in cpu_loop_exec_tb (tb_exit=0x7ffff4bfd6ec, last_tb=<synthetic pointer>, pc=<optimized out>, tb=0x7fffbc31c600 <code_gen_buffer+295441875>, cpu=0x555557369330) at ../../accel/tcg/cpu-exec.c:872
#4 cpu_exec_loop (cpu=cpu@entry=0x555557369330, sc=sc@entry=0x7ffff4bfd7b0) at ../../accel/tcg/cpu-exec.c:982
#5 0x0000555555e247a1 in cpu_exec_setjmp (cpu=cpu@entry=0x555557369330, sc=sc@entry=0x7ffff4bfd7b0) at ../../accel/tcg/cpu-exec.c:999
#6 0x0000555555e24e2c in cpu_exec (cpu=cpu@entry=0x555557369330) at ../../accel/tcg/cpu-exec.c:1025
#7 0x0000555555e42c73 in tcg_cpu_exec (cpu=cpu@entry=0x555557369330) at ../../accel/tcg/tcg-accel-ops.c:81
#8 0x0000555555e43093 in mttcg_cpu_thread_fn (arg=arg@entry=0x555557369330) at ../../accel/tcg/tcg-accel-ops-mttcg.c:94
#9 0x0000555555ef2250 in qemu_thread_start (args=0x5555573e6e20) at ../../util/qemu-thread-posix.c:541
#10 0x00007ffff7750aa4 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:447
#11 0x00007ffff77ddc3c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
Need one patch for my particular setup to work around some DMA buffer issues in virtio (similar to
a patch for pci space last year). I've been meaning to post an RFC to get feedback on how
to handle this but not gotten to it yet!
From 801e47897c5959a22ed050d7e7feebbbd3a12588 Mon Sep 17 00:00:00 2001
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date: Mon, 22 Apr 2024 13:54:37 +0100
Subject: [PATCH] physmem: Increase bounce buffers for "memory" address space.
Doesn't need to be this big and should be configurable.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
system/physmem.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/system/physmem.c b/system/physmem.c
index 3f4fd69d9a..651b875827 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -2798,6 +2798,7 @@ static void memory_map_init(void)
memory_region_init(system_memory, NULL, "system", UINT64_MAX);
address_space_init(&address_space_memory, system_memory, "memory");
+ address_space_memory.max_bounce_buffer_size = 1024 * 1024 * 1024;
system_io = g_malloc(sizeof(*system_io));
memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
65536);
--
2.43.0
Anyhow, other than that you need any random distro image (I tend to use debian nocloud images)
and a recent kernel build (mainline is fine).
Then a config along the lines of (obviously this isn't minimal)
qemu-system-x86_64 -M q35,cxl=on,sata=off,smbus=off -m 4g,maxmem=8G,slots=4 -cpu max -smp 4 \
-kernel bzImage \
-bios bios \
-drive if=none,file=/mnt/d/images/x86-full-big.qcow2,format=qcow2,id=hd \
-device ioh3420,id=root_port1 -device virtio-blk-pci,drive=hd,bus=root_port1 \
-netdev user,id=mynet,hostfwd=tcp::5553-:22 -device virtio-net-pci,netdev=mynet,id=bob \
-nographic -no-reboot -append 'earlycon console=ttyS0 root=/dev/vda3 fsck.mode=skip tp_printk maxcpus=4' \
-monitor telnet:127.0.0.1:1235,server,nowait \
-object memory-backend-ram,size=4G,id=mem0 \
-numa node,nodeid=0,cpus=0-3,memdev=mem0 \
-numa node,nodeid=1 \
-serial mon:stdio \
-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-mem2,share=on,mem-path=/tmp/cxltest2.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=1M,align=1M \
-object memory-backend-file,id=cxl-mem3,share=on,mem-path=/tmp/cxltest3.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-mem4,share=on,mem-path=/tmp/cxltest4.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-lsa2,share=on,mem-path=/tmp/lsa2.raw,size=1M,align=1M \
-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
-device cxl-rp,port=0,bus=cxl.1,id=root_port0,chassis=0,slot=2 \
-device cxl-rp,port=1,bus=cxl.1,id=root_port2,chassis=0,slot=3 \
-device cxl-type3,bus=root_port0,volatile-memdev=cxl-mem1,id=cxl-pmem0,lsa=cxl-lsa1,sn=3 \
-device cxl-type3,bus=root_port2,volatile-memdev=cxl-mem3,id=cxl-pmem1,lsa=cxl-lsa2,sn=4 \
-machine cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G,cxl-fmw.0.interleave-granularity=1k
Then after booting into linux, bring up a cxl region with:
cd /sys/bus/cxl/devices/decoder0.0/
cat create_ram_region
echo region0 > create_ram_region
echo ram > /sys/bus/cxl/devices/decoder2.0/mode
echo $((256 << 20)) > /sys/bus/cxl/devices/decoder2.0/dpa_size
cd /sys/bus/cxl/devices/region0/
echo 256 > interleave_granularity
echo 1 > interleave_ways
echo $((256 << 20)) > size
echo decoder2.0 > target0
echo 1 > commit
echo region0 > /sys/bus/cxl/drivers/cxl_region/bind
That should bring up a small amount of memory in node 2. Interleaving isn't actually
in use here but we haven't upstreamed the bypass optimizations so this is still
mmio space to QEMU.
Then numactl -m 2 ls
boom.
A few relevant bits of kernel config (also not minimal)
//dax stuff to ensure we get memory as normal ram.
CONFIG_DAX=y
CONFIG_DEV_DAX=m
CONFIG_DEV_DAX_PMEM=m
CONFIG_DEV_DAX_HMEM=y
CONFIG_DEV_DAX_CXL=m
CONFIG_DEV_DAX_HMEM_DEVICES=y
CONFIG_DEV_DAX_KMEM=m
//memory hotplug
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
CONFIG_MEMORY_HOTPLUG=y
CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE=y
Any hints welcome! Also happy to provide any additional info as necessary.
Jonathan
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: Alistair Francis <alistair23@gmail.com>, <qemu-devel@nongnu.org>,
<linuxarm@huawei.com>, <linux-cxl@vger.kernel.org>
Subject: Re: [PATCH 066/147] include/exec: Move TLB_MMIO, TLB_DISCARD_WRITE to slow flags
Date: Thu, 8 May 2025 14:29:18 +0100 [thread overview]
Message-ID: <20250508142918.0000248d@huawei.com> (raw)
In-Reply-To: <04875ca2-781b-4000-b74c-fc338bc6ec4d@linaro.org>
On Tue, 29 Apr 2025 19:43:05 -0700
Richard Henderson <richard.henderson@linaro.org> wrote:
> On 4/29/25 14:35, Alistair Francis wrote:
> > On Sat, Apr 26, 2025 at 3:36 AM Jonathan Cameron via
> > <qemu-devel@nongnu.org> wrote:
> >>
> >> On Tue, 22 Apr 2025 12:26:55 -0700
> >> Richard Henderson <richard.henderson@linaro.org> wrote:
> >>
> >>> Recover two bits from the inline flags.
> >>
> >>
> >> Hi Richard,
> >>
> >> Early days but something (I'm fairly sure in this patch) is tripping up my favourite
> >> TCG corner case of running code out of MMIO memory (interleaved CXL memory).
> >>
> >> Only seeing it on arm64 tests so far which isn't upstream yet..
> >> (guess what I was getting ready to post today)
> >>
> >> Back trace is:
> >>
> >> #0 0x0000555555fd4296 in cpu_atomic_fetch_andq_le_mmu (env=0x555557ee19b0, addr=18442241572520067072, val=18446744073701163007, oi=8244, retaddr=<optimized out>) at ../../accel/tcg/atomic_template.h:140
> >> #1 0x00007fffb6894125 in code_gen_buffer ()
> >> #2 0x0000555555fc4c46 in cpu_tb_exec (cpu=cpu@entry=0x555557ededf0, itb=itb@entry=0x7fffb6894000 <code_gen_buffer+200511443>, tb_exit=tb_exit@entry=0x7ffff4bfb744) at ../../accel/tcg/cpu-exec.c:455
> >> #3 0x0000555555fc51c2 in cpu_loop_exec_tb (tb_exit=0x7ffff4bfb744, last_tb=<synthetic pointer>, pc=<optimized out>, tb=0x7fffb6894000 <code_gen_buffer+200511443>, cpu=0x555557ededf0) at ../../accel/tcg/cpu-exec.c:904
> >> #4 cpu_exec_loop (cpu=cpu@entry=0x555557ededf0, sc=sc@entry=0x7ffff4bfb7f0) at ../../accel/tcg/cpu-exec.c:1018
> >> #5 0x0000555555fc58f1 in cpu_exec_setjmp (cpu=cpu@entry=0x555557ededf0, sc=sc@entry=0x7ffff4bfb7f0) at ../../accel/tcg/cpu-exec.c:1035
> >> #6 0x0000555555fc5f6c in cpu_exec (cpu=cpu@entry=0x555557ededf0) at ../../accel/tcg/cpu-exec.c:1061
> >> #7 0x0000555556146ac3 in tcg_cpu_exec (cpu=cpu@entry=0x555557ededf0) at ../../accel/tcg/tcg-accel-ops.c:81
> >> #8 0x0000555556146ee3 in mttcg_cpu_thread_fn (arg=arg@entry=0x555557ededf0) at ../../accel/tcg/tcg-accel-ops-mttcg.c:94
> >> #9 0x00005555561f6450 in qemu_thread_start (args=0x555557f8f430) at ../../util/qemu-thread-posix.c:541
> >> #10 0x00007ffff7750aa4 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:447
> >> #11 0x00007ffff77ddc3c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
> >>
> >> I haven't pushed out the rebased tree yet making this a truly awful bug report.
> >>
> >> The pull request you sent with this in wasn't bisectable so this was a bit of a guessing
> >> game. I see the seg fault only after this patch.
> >
> > I see the same thing with some RISC-V tests. I can provide the test
> > images if you want as well
>
>
> Yes please.
>
>
> r~
I'm guessing Alastair is busy.
I got around to testing this on x86 and indeed blow up is the same.
0x0000555555e3dd77 in cpu_atomic_add_fetchl_le_mmu (env=0x55555736bef0, addr=140271756837240, val=1, oi=34, retaddr=<optimized out>) at ../../accel/tcg/atomic_template.h:143
143 GEN_ATOMIC_HELPER(add_fetch)
(gdb) bt
#0 0x0000555555e3dd77 in cpu_atomic_add_fetchl_le_mmu (env=0x55555736bef0, addr=140271756837240, val=1, oi=34, retaddr=<optimized out>) at ../../accel/tcg/atomic_template.h:143
#1 0x00007fffbc31c6f0 in code_gen_buffer ()
#2 0x0000555555e23aa6 in cpu_tb_exec (cpu=cpu@entry=0x555557369330, itb=itb@entry=0x7fffbc31c600 <code_gen_buffer+295441875>, tb_exit=tb_exit@entry=0x7ffff4bfd6ec) at ../../accel/tcg/cpu-exec.c:438
#3 0x0000555555e24025 in cpu_loop_exec_tb (tb_exit=0x7ffff4bfd6ec, last_tb=<synthetic pointer>, pc=<optimized out>, tb=0x7fffbc31c600 <code_gen_buffer+295441875>, cpu=0x555557369330) at ../../accel/tcg/cpu-exec.c:872
#4 cpu_exec_loop (cpu=cpu@entry=0x555557369330, sc=sc@entry=0x7ffff4bfd7b0) at ../../accel/tcg/cpu-exec.c:982
#5 0x0000555555e247a1 in cpu_exec_setjmp (cpu=cpu@entry=0x555557369330, sc=sc@entry=0x7ffff4bfd7b0) at ../../accel/tcg/cpu-exec.c:999
#6 0x0000555555e24e2c in cpu_exec (cpu=cpu@entry=0x555557369330) at ../../accel/tcg/cpu-exec.c:1025
#7 0x0000555555e42c73 in tcg_cpu_exec (cpu=cpu@entry=0x555557369330) at ../../accel/tcg/tcg-accel-ops.c:81
#8 0x0000555555e43093 in mttcg_cpu_thread_fn (arg=arg@entry=0x555557369330) at ../../accel/tcg/tcg-accel-ops-mttcg.c:94
#9 0x0000555555ef2250 in qemu_thread_start (args=0x5555573e6e20) at ../../util/qemu-thread-posix.c:541
#10 0x00007ffff7750aa4 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:447
#11 0x00007ffff77ddc3c in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
Need one patch for my particular setup to work around some DMA buffer issues in virtio (similar to
a patch for pci space last year). I've been meaning to post an RFC to get feedback on how
to handle this but not gotten to it yet!
From 801e47897c5959a22ed050d7e7feebbbd3a12588 Mon Sep 17 00:00:00 2001
From: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Date: Mon, 22 Apr 2024 13:54:37 +0100
Subject: [PATCH] physmem: Increase bounce buffers for "memory" address space.
Doesn't need to be this big and should be configurable.
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
---
system/physmem.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/system/physmem.c b/system/physmem.c
index 3f4fd69d9a..651b875827 100644
--- a/system/physmem.c
+++ b/system/physmem.c
@@ -2798,6 +2798,7 @@ static void memory_map_init(void)
memory_region_init(system_memory, NULL, "system", UINT64_MAX);
address_space_init(&address_space_memory, system_memory, "memory");
+ address_space_memory.max_bounce_buffer_size = 1024 * 1024 * 1024;
system_io = g_malloc(sizeof(*system_io));
memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
65536);
--
2.43.0
Anyhow, other than that you need any random distro image (I tend to use debian nocloud images)
and a recent kernel build (mainline is fine).
Then a config along the lines of (obviously this isn't minimal)
qemu-system-x86_64 -M q35,cxl=on,sata=off,smbus=off -m 4g,maxmem=8G,slots=4 -cpu max -smp 4 \
-kernel bzImage \
-bios bios \
-drive if=none,file=/mnt/d/images/x86-full-big.qcow2,format=qcow2,id=hd \
-device ioh3420,id=root_port1 -device virtio-blk-pci,drive=hd,bus=root_port1 \
-netdev user,id=mynet,hostfwd=tcp::5553-:22 -device virtio-net-pci,netdev=mynet,id=bob \
-nographic -no-reboot -append 'earlycon console=ttyS0 root=/dev/vda3 fsck.mode=skip tp_printk maxcpus=4' \
-monitor telnet:127.0.0.1:1235,server,nowait \
-object memory-backend-ram,size=4G,id=mem0 \
-numa node,nodeid=0,cpus=0-3,memdev=mem0 \
-numa node,nodeid=1 \
-serial mon:stdio \
-object memory-backend-file,id=cxl-mem1,share=on,mem-path=/tmp/cxltest.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-mem2,share=on,mem-path=/tmp/cxltest2.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-lsa1,share=on,mem-path=/tmp/lsa.raw,size=1M,align=1M \
-object memory-backend-file,id=cxl-mem3,share=on,mem-path=/tmp/cxltest3.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-mem4,share=on,mem-path=/tmp/cxltest4.raw,size=256M,align=256M \
-object memory-backend-file,id=cxl-lsa2,share=on,mem-path=/tmp/lsa2.raw,size=1M,align=1M \
-device pxb-cxl,bus_nr=12,bus=pcie.0,id=cxl.1 \
-device cxl-rp,port=0,bus=cxl.1,id=root_port0,chassis=0,slot=2 \
-device cxl-rp,port=1,bus=cxl.1,id=root_port2,chassis=0,slot=3 \
-device cxl-type3,bus=root_port0,volatile-memdev=cxl-mem1,id=cxl-pmem0,lsa=cxl-lsa1,sn=3 \
-device cxl-type3,bus=root_port2,volatile-memdev=cxl-mem3,id=cxl-pmem1,lsa=cxl-lsa2,sn=4 \
-machine cxl-fmw.0.targets.0=cxl.1,cxl-fmw.0.size=4G,cxl-fmw.0.interleave-granularity=1k
Then after booting into linux, bring up a cxl region with:
cd /sys/bus/cxl/devices/decoder0.0/
cat create_ram_region
echo region0 > create_ram_region
echo ram > /sys/bus/cxl/devices/decoder2.0/mode
echo $((256 << 20)) > /sys/bus/cxl/devices/decoder2.0/dpa_size
cd /sys/bus/cxl/devices/region0/
echo 256 > interleave_granularity
echo 1 > interleave_ways
echo $((256 << 20)) > size
echo decoder2.0 > target0
echo 1 > commit
echo region0 > /sys/bus/cxl/drivers/cxl_region/bind
That should bring up a small amount of memory in node 2. Interleaving isn't actually
in use here but we haven't upstreamed the bypass optimizations so this is still
mmio space to QEMU.
Then numactl -m 2 ls
boom.
A few relevant bits of kernel config (also not minimal)
//dax stuff to ensure we get memory as normal ram.
CONFIG_DAX=y
CONFIG_DEV_DAX=m
CONFIG_DEV_DAX_PMEM=m
CONFIG_DEV_DAX_HMEM=y
CONFIG_DEV_DAX_CXL=m
CONFIG_DEV_DAX_HMEM_DEVICES=y
CONFIG_DEV_DAX_KMEM=m
//memory hotplug
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
CONFIG_MEMORY_HOTPLUG=y
CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE=y
Any hints welcome! Also happy to provide any additional info as necessary.
Jonathan
next prev parent reply other threads:[~2025-05-08 13:29 UTC|newest]
Thread overview: 218+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-22 19:25 [PATCH 000/147] single-binary patch queue Richard Henderson
2025-04-22 19:25 ` [PATCH 001/147] exec/tswap: target code can use TARGET_BIG_ENDIAN instead of target_words_bigendian() Richard Henderson
2025-04-23 10:48 ` Philippe Mathieu-Daudé
2025-04-22 19:25 ` [PATCH 002/147] exec/tswap: implement {ld, st}.*_p as functions instead of macros Richard Henderson
2025-04-22 19:25 ` [PATCH 003/147] exec/memory_ldst: extract memory_ldst declarations from cpu-all.h Richard Henderson
2025-04-22 19:25 ` [PATCH 004/147] exec/memory_ldst_phys: extract memory_ldst_phys " Richard Henderson
2025-04-22 19:25 ` [PATCH 005/147] exec/memory.h: make devend_memop "target defines" agnostic Richard Henderson
2025-04-23 11:10 ` Philippe Mathieu-Daudé
2025-04-22 19:25 ` [PATCH 006/147] codebase: prepare to remove cpu.h from exec/exec-all.h Richard Henderson
2025-04-22 19:25 ` [PATCH 007/147] exec/exec-all: remove dependency on cpu.h Richard Henderson
2025-04-22 19:25 ` [PATCH 008/147] exec/memory-internal: " Richard Henderson
2025-04-22 19:25 ` [PATCH 009/147] exec/ram_addr: " Richard Henderson
2025-04-23 11:11 ` Philippe Mathieu-Daudé
2025-04-22 19:25 ` [PATCH 010/147] system/kvm: make kvm_flush_coalesced_mmio_buffer() accessible for common code Richard Henderson
2025-04-22 19:26 ` [PATCH 011/147] exec/ram_addr: call xen_hvm_modified_memory only if xen is enabled Richard Henderson
2025-04-23 9:21 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 012/147] hw/xen: add stubs for various functions Richard Henderson
2025-04-22 19:26 ` [PATCH 013/147] system/xen: remove inline stubs Richard Henderson
2025-04-23 9:22 ` Philippe Mathieu-Daudé
2025-04-23 15:58 ` Pierrick Bouvier
2025-04-23 20:50 ` Richard Henderson
2025-04-22 19:26 ` [PATCH 014/147] system/physmem: compilation unit is now common to all targets Richard Henderson
2025-04-22 19:26 ` [PATCH 015/147] include/exec/memory: extract devend_big_endian from devend_memop Richard Henderson
2025-04-22 19:26 ` [PATCH 016/147] include/exec/memory: move devend functions to memory-internal.h Richard Henderson
2025-04-22 19:26 ` [PATCH 017/147] system/memory: make compilation unit common Richard Henderson
2025-04-23 9:25 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 018/147] system/ioport: " Richard Henderson
2025-04-23 9:25 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 019/147] accel/tcg: Build user-exec-stub.c once Richard Henderson
2025-04-22 19:26 ` [PATCH 020/147] accel/tcg: Build plugin-gen.c once Richard Henderson
2025-04-23 9:26 ` Philippe Mathieu-Daudé
2025-04-23 21:02 ` Richard Henderson
2025-04-22 19:26 ` [PATCH 021/147] accel/tcg: Fix cpu_ld*_code_mmu for user mode Richard Henderson
2025-04-22 19:26 ` [PATCH 022/147] include/exec: Use vaddr for *_mmu guest memory access routines Richard Henderson
2025-04-22 19:26 ` [PATCH 023/147] include/exec: Split out cpu-ldst-common.h Richard Henderson
2025-04-22 19:26 ` [PATCH 024/147] include/exec: Split out accel/tcg/cpu-mmu-index.h Richard Henderson
2025-04-22 19:26 ` [PATCH 025/147] include/exec: Inline *_mmuidx_ra memory operations Richard Henderson
2025-04-22 19:26 ` [PATCH 026/147] include/exec: Inline *_data_ra " Richard Henderson
2025-04-22 19:26 ` [PATCH 027/147] include/exec: Inline *_data " Richard Henderson
2025-04-22 19:26 ` [PATCH 028/147] include/exec: Inline *_code " Richard Henderson
2025-04-22 19:26 ` [PATCH 029/147] accel/tcg: Perform aligned atomic reads in translator_ld Richard Henderson
2025-04-22 19:26 ` [PATCH 030/147] accel/tcg: Use cpu_ld*_code_mmu in translator.c Richard Henderson
2025-04-22 20:42 ` Pierrick Bouvier
2025-04-22 19:26 ` [PATCH 031/147] accel/tcg: Implement translator_ld*_end Richard Henderson
2025-04-23 9:30 ` Philippe Mathieu-Daudé
2025-11-27 4:41 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 032/147] accel/tcg: Remove mmap_lock/unlock from watchpoint.c Richard Henderson
2025-04-22 19:26 ` [PATCH 033/147] include/exec: Split out mmap-lock.h Richard Henderson
2025-04-23 9:31 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 034/147] include/system: Move exec/memory.h to system/memory.h Richard Henderson
2025-04-22 19:26 ` [PATCH 035/147] include/system: Move exec/address-spaces.h to system/address-spaces.h Richard Henderson
2025-04-22 19:26 ` [PATCH 036/147] include/system: Move exec/ioport.h to system/ioport.h Richard Henderson
2025-04-23 9:32 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 037/147] include/system: Move exec/ram_addr.h to system/ram_addr.h Richard Henderson
2025-04-23 9:33 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 038/147] include/system: Move exec/ramblock.h to system/ramblock.h Richard Henderson
2025-04-23 9:33 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 039/147] accel/tcg: Remove unnecesary inclusion of memory-internal.h in cputlb.c Richard Henderson
2025-04-22 19:26 ` [PATCH 040/147] exec: Restrict memory-internal.h to system/ Richard Henderson
2025-04-22 19:26 ` [PATCH 041/147] meson: Introduce top-level libuser_ss and libsystem_ss Richard Henderson
2025-04-22 19:26 ` [PATCH 042/147] gdbstub: Move syscalls.c out of common_ss Richard Henderson
2025-04-22 19:26 ` [PATCH 043/147] accel/tcg: Use libuser_ss and libsystem_ss Richard Henderson
2025-04-22 19:26 ` [PATCH 044/147] target/mips: Restrict semihosting tests to system mode Richard Henderson
2025-04-23 9:34 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 045/147] target/xtensa: " Richard Henderson
2025-04-22 19:26 ` [PATCH 046/147] semihosting: Move user-only implementation out-of-line Richard Henderson
2025-04-22 19:26 ` [PATCH 047/147] semihosting: Assert is_user in user-only semihosting_enabled Richard Henderson
2025-04-22 20:42 ` Pierrick Bouvier
2025-04-23 9:35 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 048/147] include/exec: Split out watchpoint.h Richard Henderson
2025-04-22 20:43 ` Pierrick Bouvier
2025-04-23 9:37 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 049/147] hw/core: Move unconditional files to libsystem_ss, libuser_ss Richard Henderson
2025-04-22 19:26 ` [PATCH 050/147] system: Move most files to libsystem_ss Richard Henderson
2025-04-22 19:26 ` [PATCH 051/147] plugins: Move api.c, core.c to libuser_ss, libsystem_ss Richard Henderson
2025-04-22 19:26 ` [PATCH 052/147] include/exec: Drop ifndef CONFIG_USER_ONLY from cpu-common.h Richard Henderson
2025-04-22 19:26 ` [PATCH 053/147] include/hw/core: Drop ifndef CONFIG_USER_ONLY from cpu.h Richard Henderson
2025-04-22 19:26 ` [PATCH 054/147] include/hw/intc: Remove ifndef CONFIG_USER_ONLY from armv7m_nvic.h Richard Henderson
2025-04-23 9:55 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 055/147] include/hw/s390x: Remove ifndef CONFIG_USER_ONLY in css.h Richard Henderson
2025-04-22 19:26 ` [PATCH 056/147] include/exec: Split out icount.h Richard Henderson
2025-04-22 20:44 ` Pierrick Bouvier
2025-04-23 9:42 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 057/147] include/exec: Protect icount_enabled from poisoned symbols Richard Henderson
2025-04-22 20:45 ` Pierrick Bouvier
2025-04-22 19:26 ` [PATCH 058/147] include/system: Remove ifndef CONFIG_USER_ONLY in qtest.h Richard Henderson
2025-04-22 19:26 ` [PATCH 059/147] include/qemu: Remove ifndef CONFIG_USER_ONLY from accel.h Richard Henderson
2025-04-22 19:26 ` [PATCH 060/147] target/riscv: Remove ifndef CONFIG_USER_ONLY from cpu_cfg.h Richard Henderson
2025-04-22 19:26 ` [PATCH 061/147] meson: Only allow CONFIG_USER_ONLY from certain source sets Richard Henderson
2025-04-23 9:57 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 062/147] exec/cpu-all: extract tlb flags defines to exec/tlb-flags.h Richard Henderson
2025-04-22 19:26 ` [PATCH 063/147] accel/tcg: Fix argument types of tlb_reset_dirty Richard Henderson
2025-04-22 20:46 ` Pierrick Bouvier
2025-04-23 9:59 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 064/147] accel/tcg: Pass CPUTLBEntryFull to tlb_reset_dirty_range_locked Richard Henderson
2025-04-22 20:51 ` Pierrick Bouvier
2025-04-23 10:03 ` Philippe Mathieu-Daudé
2025-04-23 21:07 ` Richard Henderson
2025-04-23 21:34 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 065/147] accel/tcg: Rebuild full flags in tlb_reset_dirty_range_locked Richard Henderson
2025-04-22 20:52 ` Pierrick Bouvier
2025-04-22 19:26 ` [PATCH 066/147] include/exec: Move TLB_MMIO, TLB_DISCARD_WRITE to slow flags Richard Henderson
2025-04-22 20:54 ` Pierrick Bouvier
2025-04-25 17:35 ` Jonathan Cameron via
2025-04-29 21:35 ` Alistair Francis
2025-04-30 2:43 ` Richard Henderson
2025-05-08 13:29 ` Jonathan Cameron [this message]
2025-05-08 13:29 ` Jonathan Cameron via
2025-05-20 17:01 ` Jonathan Cameron
2025-05-20 17:01 ` Jonathan Cameron via
2025-05-24 14:41 ` Richard Henderson
2025-04-22 19:26 ` [PATCH 067/147] include/exec: Move tb_{, set_}page_addr[01] to translation-block.h Richard Henderson
2025-04-22 19:26 ` [PATCH 068/147] accel/tcg: Move get_page_addr_code* declarations Richard Henderson
2025-04-23 10:05 ` Philippe Mathieu-Daudé
2025-04-22 19:26 ` [PATCH 069/147] accel/tcg: Remove page_protect Richard Henderson
2025-04-22 19:26 ` [PATCH 070/147] accel/tcg: Remove cpu-all.h, exec-all.h from tb-internal.h Richard Henderson
2025-04-23 10:07 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 071/147] target/rx: Fix copy/paste typo (riscv -> rx) Richard Henderson
2025-04-22 19:27 ` [PATCH 072/147] hw/core/cpu: Update CPUClass::mmu_index docstring Richard Henderson
2025-04-22 19:27 ` [PATCH 073/147] accel/tcg: Introduce TCGCPUOps::mmu_index() callback Richard Henderson
2025-04-22 19:27 ` [PATCH 074/147] target/alpha: Restrict SoftMMU mmu_index() to TCG Richard Henderson
2025-04-22 19:27 ` [PATCH 075/147] target/arm: " Richard Henderson
2025-04-22 19:27 ` [PATCH 076/147] target/avr: " Richard Henderson
2025-04-22 19:27 ` [PATCH 077/147] target/hppa: " Richard Henderson
2025-04-22 19:27 ` [PATCH 078/147] target/i386: Remove unused cpu_(ldub, stb)_kernel macros Richard Henderson
2025-04-22 19:27 ` [PATCH 079/147] target/i386: Restrict cpu_mmu_index_kernel() to TCG Richard Henderson
2025-04-22 19:27 ` [PATCH 080/147] target/i386: Restrict SoftMMU mmu_index() " Richard Henderson
2025-04-22 19:27 ` [PATCH 081/147] target/loongarch: " Richard Henderson
2025-04-22 19:27 ` [PATCH 082/147] target/m68k: " Richard Henderson
2025-04-22 19:27 ` [PATCH 083/147] target/microblaze: " Richard Henderson
2025-04-22 19:27 ` [PATCH 084/147] target/mips: " Richard Henderson
2025-04-22 19:27 ` [PATCH 085/147] target/openrisc: " Richard Henderson
2025-04-22 19:27 ` [PATCH 086/147] target/ppc: " Richard Henderson
2025-04-22 19:27 ` [PATCH 087/147] target/riscv: " Richard Henderson
2025-04-22 19:27 ` [PATCH 088/147] target/rx: " Richard Henderson
2025-04-22 19:27 ` [PATCH 089/147] target/s390x: " Richard Henderson
2025-04-22 19:27 ` [PATCH 090/147] target/sh4: " Richard Henderson
2025-04-22 19:27 ` [PATCH 091/147] target/sparc: " Richard Henderson
2025-04-22 19:27 ` [PATCH 092/147] target/tricore: " Richard Henderson
2025-04-22 19:27 ` [PATCH 093/147] target/xtensa: " Richard Henderson
2025-04-22 19:27 ` [PATCH 094/147] target/hexagon: Implement TCGCPUOps.mmu_index Richard Henderson
2025-04-22 19:27 ` [PATCH 095/147] hw/core/cpu: Remove CPUClass::mmu_index() Richard Henderson
2025-04-22 19:27 ` [PATCH 096/147] accel/tcg: Build translator.c twice Richard Henderson
2025-04-22 19:27 ` [PATCH 097/147] accel/tcg: Split out tlb-bounds.h Richard Henderson
2025-04-22 19:27 ` [PATCH 098/147] include/exec: Redefine tlb-flags with absolute values Richard Henderson
2025-04-23 10:09 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 099/147] page-vary: Move and rename qemu_target_page_bits_min Richard Henderson
2025-04-23 10:21 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 100/147] page-vary: Restrict scope of TARGET_PAGE_BITS_MIN Richard Henderson
2025-04-22 19:27 ` [PATCH 101/147] exec/cpu-all: move cpu_copy to linux-user/qemu.h Richard Henderson
2025-04-23 10:23 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 102/147] include/exec/cpu-all: move compile time check for CPUArchState to cpu-target.c Richard Henderson
2025-04-23 10:31 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 103/147] exec/cpu-all: remove system/memory include Richard Henderson
2025-04-22 19:27 ` [PATCH 104/147] exec/cpu-all: remove exec/page-protection include Richard Henderson
2025-04-22 19:27 ` [PATCH 105/147] exec/cpu-all: remove tswap include Richard Henderson
2025-04-23 10:27 ` Philippe Mathieu-Daudé
2025-04-23 16:09 ` Pierrick Bouvier
2025-04-23 16:17 ` Philippe Mathieu-Daudé
2025-04-23 16:22 ` Pierrick Bouvier
2025-04-22 19:27 ` [PATCH 106/147] exec/cpu-all: remove exec/cpu-interrupt include Richard Henderson
2025-04-22 19:27 ` [PATCH 107/147] accel/tcg: fix missing includes for TCG_GUEST_DEFAULT_MO Richard Henderson
2025-04-22 19:27 ` [PATCH 108/147] accel/tcg: fix missing includes for TARGET_HAS_PRECISE_SMC Richard Henderson
2025-04-22 19:27 ` [PATCH 109/147] exec/cpu-all: remove cpu include Richard Henderson
2025-04-22 19:27 ` [PATCH 110/147] exec/cpu-all: remove exec/target_page include Richard Henderson
2025-04-22 19:27 ` [PATCH 111/147] exec/cpu-all: transfer exec/cpu-common include to cpu.h headers Richard Henderson
2025-04-23 10:29 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 112/147] exec/cpu-all: remove this header Richard Henderson
2025-04-23 11:02 ` Philippe Mathieu-Daudé
2025-04-23 16:21 ` Pierrick Bouvier
2025-04-22 19:27 ` [PATCH 113/147] accel/kvm: move KVM_HAVE_MCE_INJECTION define to kvm-all.c Richard Henderson
2025-04-22 19:27 ` [PATCH 114/147] exec/poison: KVM_HAVE_MCE_INJECTION can now be poisoned Richard Henderson
2025-04-22 19:27 ` [PATCH 115/147] target/arm/cpu: always define kvm related registers Richard Henderson
2025-04-22 19:27 ` [PATCH 116/147] target/arm/cpu: flags2 is always uint64_t Richard Henderson
2025-04-23 10:33 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 117/147] target/arm/cpu: define same set of registers for aarch32 and aarch64 Richard Henderson
2025-04-22 19:27 ` [PATCH 118/147] target/arm/cpu: remove inline stubs for aarch32 emulation Richard Henderson
2025-04-23 10:35 ` Philippe Mathieu-Daudé
2025-04-23 16:26 ` Pierrick Bouvier
2025-04-23 16:38 ` Philippe Mathieu-Daudé
2025-04-23 21:23 ` Richard Henderson
2025-04-22 19:27 ` [PATCH 119/147] meson: add common hw files Richard Henderson
2025-04-22 19:27 ` [PATCH 120/147] hw/arm/boot: make compilation unit hw common Richard Henderson
2025-04-22 19:27 ` [PATCH 121/147] hw/arm/digic_boards: prepare compilation unit to be common Richard Henderson
2025-04-22 19:27 ` [PATCH 122/147] hw/arm/xlnx-zynqmp: " Richard Henderson
2025-04-23 10:39 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 123/147] hw/arm/xlnx-versal: " Richard Henderson
2025-04-23 10:40 ` Philippe Mathieu-Daudé
2025-04-22 19:27 ` [PATCH 124/147] hw/arm: make most of the compilation units common Richard Henderson
2025-04-22 19:27 ` [PATCH 125/147] target/riscv: Do not expose rv128 CPU on user mode emulation Richard Henderson
2025-04-22 19:27 ` [PATCH 126/147] tcg: Include missing 'cpu.h' in translate-all.c Richard Henderson
2025-04-22 19:27 ` [PATCH 127/147] tcg: Declare TARGET_INSN_START_EXTRA_WORDS in 'cpu-param.h' Richard Henderson
2025-04-22 19:27 ` [PATCH 128/147] tcg: Always define TARGET_INSN_START_EXTRA_WORDS Richard Henderson
2025-04-22 19:27 ` [PATCH 129/147] exec: Restrict 'cpu-ldst-common.h' to accel/tcg/ Richard Henderson
2025-04-22 19:27 ` [PATCH 130/147] exec: Restrict 'cpu_ldst.h' " Richard Henderson
2025-04-22 19:28 ` [PATCH 131/147] exec: Do not include 'accel/tcg/cpu-ldst.h' in 'exec-all.h' Richard Henderson
2025-04-22 19:28 ` [PATCH 132/147] tcg: Always define TCG_GUEST_DEFAULT_MO Richard Henderson
2025-04-22 19:28 ` [PATCH 133/147] tcg: Simplify tcg_req_mo() macro Richard Henderson
2025-04-22 19:28 ` [PATCH 134/147] tcg: Define guest_default_memory_order in TCGCPUOps Richard Henderson
2025-04-22 19:28 ` [PATCH 135/147] tcg: Remove use of TCG_GUEST_DEFAULT_MO in tb_gen_code() Richard Henderson
2025-04-22 19:28 ` [PATCH 136/147] tcg: Propagate CPUState argument to cpu_req_mo() Richard Henderson
2025-04-22 19:28 ` [PATCH 137/147] tcg: Have tcg_req_mo() use TCGCPUOps::guest_default_memory_order Richard Henderson
2025-04-22 19:28 ` [PATCH 138/147] tcg: Remove the TCG_GUEST_DEFAULT_MO definition globally Richard Henderson
2025-04-22 19:28 ` [PATCH 139/147] tcg: Move cpu_req_mo() macro to target-agnostic 'backend-ldst.h' Richard Henderson
2025-04-22 19:28 ` [PATCH 140/147] tcg: Pass max_threads not max_cpus to tcg_init Richard Henderson
2025-04-22 20:59 ` Pierrick Bouvier
2025-04-23 10:43 ` Philippe Mathieu-Daudé
2025-04-22 19:28 ` [PATCH 141/147] tcg: Move qemu_tcg_mttcg_enabled() to 'system/tcg.h' Richard Henderson
2025-04-22 19:28 ` [PATCH 142/147] accel/tcg: Remove mttcg_enabled Richard Henderson
2025-04-22 20:56 ` Pierrick Bouvier
2025-04-22 19:28 ` [PATCH 143/147] tcg: Convert TCGState::mttcg_enabled to TriState Richard Henderson
2025-04-22 19:28 ` [PATCH 144/147] accel/tcg: Move mttcg warning to tcg_init_machine Richard Henderson
2025-04-22 20:57 ` Pierrick Bouvier
2025-04-23 10:45 ` Philippe Mathieu-Daudé
2025-04-22 19:28 ` [PATCH 145/147] target/riscv: Remove AccelCPUClass::cpu_class_init need Richard Henderson
2025-04-22 19:28 ` [PATCH 146/147] target/i386: " Richard Henderson
2025-04-22 19:28 ` [PATCH 147/147] tcg: Convert TARGET_SUPPORTS_MTTCG to TCGCPUOps::mttcg_supported field Richard Henderson
2025-04-23 10:47 ` Philippe Mathieu-Daudé
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=20250508142918.0000248d@huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=alistair23@gmail.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.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 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.