From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> To: Lai Jiangshan <laijs@cn.fujitsu.com> Cc: Lai Jiangshan <eag0628@gmail.com>, Michel Lespinasse <walken@google.com>, linux-doc@vger.kernel.org, peterz@infradead.org, fweisbec@gmail.com, linux-kernel@vger.kernel.org, namhyung@kernel.org, mingo@kernel.org, linux-arch@vger.kernel.org, linux@arm.linux.org.uk, xiaoguangrong@linux.vnet.ibm.com, wangyun@linux.vnet.ibm.com, paulmck@linux.vnet.ibm.com, nikunj@linux.vnet.ibm.com, linux-pm@vger.kernel.org, rusty@rustcorp.com.au, rostedt@goodmis.org, rjw@sisk.pl, vincent.guittot@linaro.org, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, oleg@redhat.com, sbw@mit.edu, tj@kernel.org, akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH v6 04/46] percpu_rwlock: Implement the core design of Per-CPU Reader-Writer Locks Date: Tue, 05 Mar 2013 23:57:44 +0530 [thread overview] Message-ID: <51363920.3040906@linux.vnet.ibm.com> (raw) In-Reply-To: <51361C71.5060502@cn.fujitsu.com> Hi Lai, On 03/05/2013 09:55 PM, Lai Jiangshan wrote: > Hi, Srivatsa, > > I'm sorry again, I delayed your works. > No, you didn't :-) I have been busy with some internal work lately, so I haven't been able to go through the recent discussions and review the new code carefully.. I'll get to it as soon as I can. > I have some thinkings about the way how to get this work done. > > First step: (2~3 patches) > Use preempt_disable() to implement get_online_cpu_atomic(), and add lockdep for it. > > Second step: > Conversion patches. > > We can send the patchset of the above steps at first. > { > It does not change any behavior of the kernel. > and it is annotation(instead of direct preempt_diable() without comments sometimes), > so I expected they can be merged very early. > } > > Third step: > After all people confide the conversion patches covered all cases and cpuhotplug site is ready for it, > we will implement get_online_cpu_atomic() via locks and remove stop_machine() from cpuhotplug. > > Any thought? > That sounds like a good plan. It might involve slightly more churn than just directly changing the locking scheme, but it is safer. And the extra churn is anyway limited only to the implementation of get/put_online_cpus_atomic().. so that should be fine IMHO. > > If I have time, I will help you for the patches of the first step. > (I was assigned bad job in office-time, I can only do kernel-dev work in night.) > > And for step2, I will write a checklist or spatch-script. > Do look at the conversion already done in this v6 as well. In addition to that, we will have to account for the new kernel code that went in recently. I'll get back to working on the above mentioned aspects soon. Regards, Srivatsa S. Bhat
WARNING: multiple messages have this Message-ID (diff)
From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> To: Lai Jiangshan <laijs@cn.fujitsu.com> Cc: Lai Jiangshan <eag0628@gmail.com>, Michel Lespinasse <walken@google.com>, linux-doc@vger.kernel.org, peterz@infradead.org, fweisbec@gmail.com, linux-kernel@vger.kernel.org, namhyung@kernel.org, mingo@kernel.org, linux-arch@vger.kernel.org, linux@arm.linux.org.uk, xiaoguangrong@linux.vnet.ibm.com, wangyun@linux.vnet.ibm.com, paulmck@linux.vnet.ibm.com, nikunj@linux.vnet.ibm.com, linux-pm@vger.kernel.org, rusty@rustcorp.com.au, rostedt@goodmis.org, rjw@sisk.pl, vincent.guittot@linaro.org, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, netdev@vger.kernel.org, oleg@redhat.com, sbw@mit.edu, tj@kernel.org, akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org Subject: Re: [PATCH v6 04/46] percpu_rwlock: Implement the core design of Per-CPU Reader-Writer Locks Date: Tue, 05 Mar 2013 23:57:44 +0530 [thread overview] Message-ID: <51363920.3040906@linux.vnet.ibm.com> (raw) Message-ID: <20130305182744.kAllTUcZGAfHvoIiwVhbsUbJIKDgQig7mAQJ91cvUmY@z> (raw) In-Reply-To: <51361C71.5060502@cn.fujitsu.com> Hi Lai, On 03/05/2013 09:55 PM, Lai Jiangshan wrote: > Hi, Srivatsa, > > I'm sorry again, I delayed your works. > No, you didn't :-) I have been busy with some internal work lately, so I haven't been able to go through the recent discussions and review the new code carefully.. I'll get to it as soon as I can. > I have some thinkings about the way how to get this work done. > > First step: (2~3 patches) > Use preempt_disable() to implement get_online_cpu_atomic(), and add lockdep for it. > > Second step: > Conversion patches. > > We can send the patchset of the above steps at first. > { > It does not change any behavior of the kernel. > and it is annotation(instead of direct preempt_diable() without comments sometimes), > so I expected they can be merged very early. > } > > Third step: > After all people confide the conversion patches covered all cases and cpuhotplug site is ready for it, > we will implement get_online_cpu_atomic() via locks and remove stop_machine() from cpuhotplug. > > Any thought? > That sounds like a good plan. It might involve slightly more churn than just directly changing the locking scheme, but it is safer. And the extra churn is anyway limited only to the implementation of get/put_online_cpus_atomic().. so that should be fine IMHO. > > If I have time, I will help you for the patches of the first step. > (I was assigned bad job in office-time, I can only do kernel-dev work in night.) > > And for step2, I will write a checklist or spatch-script. > Do look at the conversion already done in this v6 as well. In addition to that, we will have to account for the new kernel code that went in recently. I'll get back to working on the above mentioned aspects soon. Regards, Srivatsa S. Bhat
next prev parent reply other threads:[~2013-03-05 18:27 UTC|newest] Thread overview: 215+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-02-18 12:38 [PATCH v6 00/46] CPU hotplug: stop_machine()-free CPU hotplug Srivatsa S. Bhat 2013-02-18 12:38 ` Srivatsa S. Bhat 2013-02-18 12:38 ` [PATCH v6 01/46] percpu_rwlock: Introduce the global reader-writer lock backend Srivatsa S. Bhat 2013-02-18 12:38 ` Srivatsa S. Bhat 2013-02-18 12:38 ` [PATCH v6 02/46] percpu_rwlock: Introduce per-CPU variables for the reader and the writer Srivatsa S. Bhat 2013-02-18 12:38 ` Srivatsa S. Bhat 2013-02-18 12:38 ` [PATCH v6 03/46] percpu_rwlock: Provide a way to define and init percpu-rwlocks at compile time Srivatsa S. Bhat 2013-02-18 12:38 ` Srivatsa S. Bhat 2013-02-18 12:38 ` [PATCH v6 04/46] percpu_rwlock: Implement the core design of Per-CPU Reader-Writer Locks Srivatsa S. Bhat 2013-02-18 12:38 ` Srivatsa S. Bhat 2013-02-18 15:45 ` Michel Lespinasse 2013-02-18 15:45 ` Michel Lespinasse 2013-02-18 16:21 ` Srivatsa S. Bhat 2013-02-18 16:21 ` Srivatsa S. Bhat 2013-02-18 16:31 ` Steven Rostedt 2013-02-18 16:31 ` Steven Rostedt 2013-02-18 16:46 ` Srivatsa S. Bhat 2013-02-18 16:46 ` Srivatsa S. Bhat 2013-02-18 17:56 ` Srivatsa S. Bhat 2013-02-18 17:56 ` Srivatsa S. Bhat 2013-02-18 18:07 ` Michel Lespinasse 2013-02-18 18:14 ` Srivatsa S. Bhat 2013-02-18 18:14 ` Srivatsa S. Bhat 2013-02-25 15:53 ` Lai Jiangshan 2013-02-25 19:26 ` Srivatsa S. Bhat 2013-02-26 0:17 ` Lai Jiangshan 2013-02-26 0:17 ` Lai Jiangshan 2013-02-26 0:19 ` Lai Jiangshan 2013-02-26 0:19 ` Lai Jiangshan 2013-02-26 9:02 ` Srivatsa S. Bhat 2013-02-26 9:02 ` Srivatsa S. Bhat 2013-02-26 12:59 ` Lai Jiangshan 2013-02-26 12:59 ` Lai Jiangshan 2013-02-26 14:22 ` Srivatsa S. Bhat 2013-02-26 14:22 ` Srivatsa S. Bhat 2013-02-26 16:25 ` Lai Jiangshan 2013-02-26 16:25 ` Lai Jiangshan 2013-02-26 19:30 ` Srivatsa S. Bhat 2013-02-26 19:30 ` Srivatsa S. Bhat 2013-02-27 0:33 ` Lai Jiangshan 2013-02-27 0:33 ` Lai Jiangshan 2013-02-27 21:19 ` Srivatsa S. Bhat 2013-02-27 21:19 ` Srivatsa S. Bhat 2013-03-01 17:44 ` [PATCH] lglock: add read-preference local-global rwlock Lai Jiangshan 2013-03-01 17:44 ` Lai Jiangshan 2013-03-01 17:53 ` Tejun Heo 2013-03-01 17:53 ` Tejun Heo 2013-03-01 20:06 ` Srivatsa S. Bhat 2013-03-01 20:06 ` Srivatsa S. Bhat 2013-03-01 18:28 ` Oleg Nesterov 2013-03-01 18:28 ` Oleg Nesterov 2013-03-02 12:13 ` Michel Lespinasse 2013-03-02 13:14 ` [PATCH V2] " Lai Jiangshan 2013-03-02 13:14 ` Lai Jiangshan 2013-03-02 17:11 ` Srivatsa S. Bhat 2013-03-02 17:11 ` Srivatsa S. Bhat 2013-03-05 15:41 ` Lai Jiangshan 2013-03-05 15:41 ` Lai Jiangshan 2013-03-05 17:55 ` Srivatsa S. Bhat 2013-03-05 17:55 ` Srivatsa S. Bhat 2013-03-02 17:20 ` Oleg Nesterov 2013-03-02 17:20 ` Oleg Nesterov 2013-03-03 17:40 ` Oleg Nesterov 2013-03-03 17:40 ` Oleg Nesterov 2013-03-05 1:37 ` Michel Lespinasse 2013-03-05 1:37 ` Michel Lespinasse 2013-03-05 15:27 ` Lai Jiangshan 2013-03-05 15:27 ` Lai Jiangshan 2013-03-05 16:19 ` Michel Lespinasse 2013-03-05 16:19 ` Michel Lespinasse 2013-03-05 16:41 ` Oleg Nesterov 2013-03-05 16:41 ` Oleg Nesterov 2013-03-02 17:06 ` [PATCH] " Oleg Nesterov 2013-03-02 17:06 ` Oleg Nesterov 2013-03-05 15:54 ` Lai Jiangshan 2013-03-05 15:54 ` Lai Jiangshan 2013-03-05 16:32 ` Michel Lespinasse 2013-03-05 16:35 ` Oleg Nesterov 2013-03-05 16:35 ` Oleg Nesterov 2013-03-02 13:42 ` Lai Jiangshan 2013-03-02 13:42 ` Lai Jiangshan 2013-03-02 17:01 ` Oleg Nesterov 2013-03-02 17:01 ` Oleg Nesterov 2013-03-01 17:50 ` [PATCH v6 04/46] percpu_rwlock: Implement the core design of Per-CPU Reader-Writer Locks Lai Jiangshan 2013-03-01 17:50 ` Lai Jiangshan 2013-03-01 19:47 ` Srivatsa S. Bhat 2013-03-01 19:47 ` Srivatsa S. Bhat 2013-03-05 16:25 ` Lai Jiangshan 2013-03-05 16:25 ` Lai Jiangshan 2013-03-05 18:27 ` Srivatsa S. Bhat [this message] 2013-03-05 18:27 ` Srivatsa S. Bhat 2013-03-01 18:10 ` Tejun Heo 2013-03-01 18:10 ` Tejun Heo 2013-03-01 19:59 ` Srivatsa S. Bhat 2013-03-01 19:59 ` Srivatsa S. Bhat 2013-02-27 11:11 ` Michel Lespinasse 2013-02-27 11:11 ` Michel Lespinasse 2013-02-27 19:25 ` Oleg Nesterov 2013-02-27 19:25 ` Oleg Nesterov 2013-02-28 11:34 ` Michel Lespinasse 2013-02-28 18:00 ` Oleg Nesterov 2013-02-28 18:20 ` Oleg Nesterov 2013-02-26 13:34 ` Lai Jiangshan 2013-02-26 15:17 ` Srivatsa S. Bhat 2013-02-26 15:17 ` Srivatsa S. Bhat 2013-02-26 14:17 ` Lai Jiangshan 2013-02-26 14:17 ` Lai Jiangshan 2013-02-26 14:37 ` Srivatsa S. Bhat 2013-02-26 14:37 ` Srivatsa S. Bhat 2013-02-18 12:39 ` [PATCH v6 05/46] percpu_rwlock: Make percpu-rwlocks IRQ-safe, optimally Srivatsa S. Bhat 2013-02-18 12:39 ` Srivatsa S. Bhat 2013-02-18 12:39 ` [PATCH v6 06/46] percpu_rwlock: Rearrange the read-lock code to fastpath nested percpu readers Srivatsa S. Bhat 2013-02-18 12:39 ` Srivatsa S. Bhat 2013-02-18 12:39 ` [PATCH v6 07/46] percpu_rwlock: Allow writers to be readers, and add lockdep annotations Srivatsa S. Bhat 2013-02-18 12:39 ` Srivatsa S. Bhat 2013-02-18 15:51 ` Michel Lespinasse 2013-02-18 15:51 ` Michel Lespinasse 2013-02-18 16:31 ` Srivatsa S. Bhat 2013-02-18 12:39 ` [PATCH v6 08/46] CPU hotplug: Provide APIs to prevent CPU offline from atomic context Srivatsa S. Bhat 2013-02-18 12:39 ` Srivatsa S. Bhat 2013-02-18 16:23 ` Michel Lespinasse 2013-02-18 16:23 ` Michel Lespinasse 2013-02-18 16:43 ` Srivatsa S. Bhat 2013-02-18 16:43 ` Srivatsa S. Bhat 2013-02-18 17:21 ` Michel Lespinasse 2013-02-18 17:21 ` Michel Lespinasse 2013-02-18 18:50 ` Srivatsa S. Bhat 2013-02-18 18:50 ` Srivatsa S. Bhat 2013-02-19 9:40 ` Michel Lespinasse 2013-02-19 9:40 ` Michel Lespinasse 2013-02-19 9:55 ` Srivatsa S. Bhat 2013-02-19 9:55 ` Srivatsa S. Bhat 2013-02-19 10:42 ` David Laight 2013-02-19 10:58 ` Srivatsa S. Bhat 2013-02-19 10:58 ` Srivatsa S. Bhat 2013-02-18 12:39 ` [PATCH v6 09/46] CPU hotplug: Convert preprocessor macros to static inline functions Srivatsa S. Bhat 2013-02-18 12:39 ` Srivatsa S. Bhat 2013-02-18 12:39 ` [PATCH v6 10/46] smp, cpu hotplug: Fix smp_call_function_*() to prevent CPU offline properly Srivatsa S. Bhat 2013-02-18 12:39 ` Srivatsa S. Bhat 2013-02-18 12:39 ` [PATCH v6 11/46] smp, cpu hotplug: Fix on_each_cpu_*() " Srivatsa S. Bhat 2013-02-18 12:39 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 12/46] sched/timer: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 13/46] sched/migration: Use raw_spin_lock/unlock since interrupts are already disabled Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 14/46] sched/rt: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 15/46] tick: " Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 16/46] time/clocksource: " Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 17/46] clockevents: Use get/put_online_cpus_atomic() in clockevents_notify() Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 18/46] softirq: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:40 ` [PATCH v6 19/46] irq: " Srivatsa S. Bhat 2013-02-18 12:40 ` Srivatsa S. Bhat 2013-02-18 12:41 ` [PATCH v6 20/46] net: " Srivatsa S. Bhat 2013-02-18 12:41 ` Srivatsa S. Bhat 2013-02-18 12:41 ` [PATCH v6 21/46] block: " Srivatsa S. Bhat 2013-02-18 12:41 ` Srivatsa S. Bhat 2013-02-18 12:41 ` [PATCH v6 22/46] crypto: pcrypt - Protect access to cpu_online_mask with get/put_online_cpus() Srivatsa S. Bhat 2013-02-18 12:41 ` [PATCH v6 23/46] infiniband: ehca: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat 2013-02-18 12:41 ` Srivatsa S. Bhat 2013-02-18 12:41 ` [PATCH v6 24/46] [SCSI] fcoe: " Srivatsa S. Bhat 2013-02-18 12:41 ` Srivatsa S. Bhat 2013-02-18 12:41 ` [PATCH v6 25/46] staging: octeon: " Srivatsa S. Bhat 2013-02-18 12:41 ` [PATCH v6 26/46] x86: " Srivatsa S. Bhat 2013-02-18 12:41 ` Srivatsa S. Bhat 2013-02-18 12:42 ` [PATCH v6 27/46] perf/x86: " Srivatsa S. Bhat 2013-02-18 12:42 ` Srivatsa S. Bhat 2013-02-18 12:42 ` [PATCH v6 28/46] KVM: Use get/put_online_cpus_atomic() to prevent CPU offline from atomic context Srivatsa S. Bhat 2013-02-18 12:42 ` Srivatsa S. Bhat 2013-02-18 12:42 ` [PATCH v6 29/46] kvm/vmx: Use get/put_online_cpus_atomic() to prevent CPU offline Srivatsa S. Bhat 2013-02-18 12:42 ` Srivatsa S. Bhat 2013-02-18 12:42 ` [PATCH v6 30/46] x86/xen: " Srivatsa S. Bhat 2013-02-18 12:42 ` Srivatsa S. Bhat 2013-02-18 12:42 ` [PATCH v6 31/46] alpha/smp: " Srivatsa S. Bhat 2013-02-18 12:42 ` Srivatsa S. Bhat 2013-02-18 12:42 ` [PATCH v6 32/46] blackfin/smp: " Srivatsa S. Bhat 2013-02-18 12:42 ` Srivatsa S. Bhat 2013-02-18 12:42 ` [PATCH v6 33/46] cris/smp: " Srivatsa S. Bhat 2013-02-18 12:42 ` Srivatsa S. Bhat 2013-02-18 13:07 ` Jesper Nilsson 2013-02-18 13:07 ` Jesper Nilsson 2013-02-18 12:43 ` [PATCH v6 34/46] hexagon/smp: " Srivatsa S. Bhat 2013-02-18 12:43 ` Srivatsa S. Bhat 2013-02-18 12:43 ` [PATCH v6 35/46] ia64: " Srivatsa S. Bhat 2013-02-18 12:43 ` Srivatsa S. Bhat 2013-02-18 12:43 ` [PATCH v6 36/46] m32r: " Srivatsa S. Bhat 2013-02-18 12:43 ` Srivatsa S. Bhat 2013-02-18 12:43 ` [PATCH v6 37/46] MIPS: " Srivatsa S. Bhat 2013-02-18 12:43 ` Srivatsa S. Bhat 2013-02-18 12:43 ` [PATCH v6 38/46] mn10300: " Srivatsa S. Bhat 2013-02-18 12:43 ` [PATCH v6 39/46] parisc: " Srivatsa S. Bhat 2013-02-18 12:43 ` Srivatsa S. Bhat 2013-02-18 12:43 ` [PATCH v6 40/46] powerpc: " Srivatsa S. Bhat 2013-02-18 12:43 ` Srivatsa S. Bhat 2013-02-18 12:44 ` [PATCH v6 41/46] sh: " Srivatsa S. Bhat 2013-02-18 12:44 ` Srivatsa S. Bhat 2013-02-18 12:44 ` [PATCH v6 42/46] sparc: " Srivatsa S. Bhat 2013-02-18 12:44 ` Srivatsa S. Bhat 2013-02-18 12:44 ` [PATCH v6 43/46] tile: " Srivatsa S. Bhat 2013-02-18 12:44 ` Srivatsa S. Bhat 2013-02-18 12:44 ` [PATCH v6 44/46] cpu: No more __stop_machine() in _cpu_down() Srivatsa S. Bhat 2013-02-18 12:44 ` Srivatsa S. Bhat 2013-02-18 12:44 ` [PATCH v6 45/46] CPU hotplug, stop_machine: Decouple CPU hotplug from stop_machine() in Kconfig Srivatsa S. Bhat 2013-02-18 12:44 ` Srivatsa S. Bhat 2013-02-18 12:44 ` [PATCH v6 46/46] Documentation/cpu-hotplug: Remove references to stop_machine() Srivatsa S. Bhat 2013-02-22 0:31 ` [PATCH v6 00/46] CPU hotplug: stop_machine()-free CPU hotplug Rusty Russell 2013-02-22 0:31 ` Rusty Russell 2013-02-25 21:45 ` Srivatsa S. Bhat 2013-02-25 21:45 ` Srivatsa S. Bhat 2013-03-01 12:05 ` Vincent Guittot 2013-03-01 12:05 ` Vincent Guittot
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=51363920.3040906@linux.vnet.ibm.com \ --to=srivatsa.bhat@linux.vnet.ibm.com \ --cc=akpm@linux-foundation.org \ --cc=eag0628@gmail.com \ --cc=fweisbec@gmail.com \ --cc=laijs@cn.fujitsu.com \ --cc=linux-arch@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-doc@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux@arm.linux.org.uk \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mingo@kernel.org \ --cc=namhyung@kernel.org \ --cc=netdev@vger.kernel.org \ --cc=nikunj@linux.vnet.ibm.com \ --cc=oleg@redhat.com \ --cc=paulmck@linux.vnet.ibm.com \ --cc=peterz@infradead.org \ --cc=rjw@sisk.pl \ --cc=rostedt@goodmis.org \ --cc=rusty@rustcorp.com.au \ --cc=sbw@mit.edu \ --cc=tglx@linutronix.de \ --cc=tj@kernel.org \ --cc=vincent.guittot@linaro.org \ --cc=walken@google.com \ --cc=wangyun@linux.vnet.ibm.com \ --cc=xiaoguangrong@linux.vnet.ibm.com \ /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: linkBe 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).