From: Marc Zyngier <marc.zyngier@arm.com> To: Christopher Covington <cov@codeaurora.org> Cc: "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org>, "kvm@vger.kernel.org" <kvm@vger.kernel.org>, "kvmarm@lists.cs.columbia.edu" <kvmarm@lists.cs.columbia.edu>, Catalin Marinas <Catalin.Marinas@arm.com> Subject: Re: [PATCH 04/29] arm64: KVM: system register definitions for 64bit guests Date: Tue, 12 Mar 2013 13:50:42 +0000 [thread overview] Message-ID: <513F32B2.6070700@arm.com> (raw) In-Reply-To: <513F2BA7.6020004@codeaurora.org> On 12/03/13 13:20, Christopher Covington wrote: Hi Christopher, > Here are a few minor questions and suggestions. > > On 03/04/2013 10:47 PM, Marc Zyngier wrote: >> Define the saved/restored registers for 64bit guests. >> >> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> >> --- >> arch/arm64/include/asm/kvm_asm.h | 68 ++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 68 insertions(+) >> create mode 100644 arch/arm64/include/asm/kvm_asm.h > > [...] > >> +/* >> + * 0 is reserved as an invalid value. >> + * Order *must* be kept in sync with the hyp switch code. >> + */ >> +#define MPIDR_EL1 1 /* MultiProcessor Affinity Register */ >> +#define CSSELR_EL1 2 /* Cache Size Selection Register */ >> +#define SCTLR_EL1 3 /* System Control Register */ >> +#define ACTLR_EL1 4 /* Auxilliary Control Register */ >> +#define CPACR_EL1 5 /* Coprocessor Access Control */ >> +#define TTBR0_EL1 6 /* Translation Table Base Register 0 */ >> +#define TTBR1_EL1 7 /* Translation Table Base Register 1 */ >> +#define TCR_EL1 8 /* Translation Control Register */ >> +#define ESR_EL1 9 /* Exception Syndrome Register */ >> +#define AFSR0_EL1 10 /* Auxilary Fault Status Register 0 */ >> +#define AFSR1_EL1 11 /* Auxilary Fault Status Register 1 */ >> +#define FAR_EL1 12 /* Fault Address Register */ >> +#define MAIR_EL1 13 /* Memory Attribute Indirection Register */ >> +#define VBAR_EL1 14 /* Vector Base Address Register */ >> +#define CONTEXTIDR_EL1 15 /* Context ID Register */ >> +#define TPIDR_EL0 16 /* Thread ID, User R/W */ >> +#define TPIDRRO_EL0 17 /* Thread ID, User R/O */ >> +#define TPIDR_EL1 18 /* Thread ID, Privileged */ >> +#define AMAIR_EL1 19 /* Aux Memory Attribute Indirection Register */ >> +#define CNTKCTL_EL1 20 /* Timer Control Register (EL1) */ > > Any particular reason to have CNTKCTL_EL1 enumerated here and handled by > (dump|load)_sysregs, but all the other timer registers handled by > (save|restore)_timer_state in hyp.S? This one is a bit of an odd one, as it controls the guest kernel decision to expose its timer/counter to its own userspace. It is not directly involved into the timekeeping itself. As such, my choice was to make it part of the CPU state rather than the timer state. But I admit this may not be the most obvious choice. >> +#define NR_SYS_REGS 21 > > [...] > >> +/* Hyp Syndrome Register (HSR) bits */ >> +#define ESR_EL2_EC_SHIFT (26) >> +#define ESR_EL2_EC (0x3fU << ESR_EL2_EC_SHIFT) >> +#define ESR_EL2_IL (1U << 25) >> +#define ESR_EL2_ISS (ESR_EL2_IL - 1) >> +#define ESR_EL2_ISV_SHIFT (24) >> +#define ESR_EL2_ISV (1U << ESR_EL2_ISV_SHIFT) >> +#define ESR_EL2_SAS_SHIFT (22) >> +#define ESR_EL2_SAS (3U << ESR_EL2_SAS_SHIFT) >> +#define ESR_EL2_SSE (1 << 21) >> +#define ESR_EL2_SRT_SHIFT (16) >> +#define ESR_EL2_SRT_MASK (0x1f << ESR_EL2_SRT_SHIFT) >> +#define ESR_EL2_SF (1 << 15) >> +#define ESR_EL2_AR (1 << 14) >> +#define ESR_EL2_EA (1 << 9) >> +#define ESR_EL2_CM (1 << 8) >> +#define ESR_EL2_S1PTW (1 << 7) >> +#define ESR_EL2_WNR (1 << 6) >> +#define ESR_EL2_FSC (0x3f) >> +#define ESR_EL2_FSC_TYPE (0x3c) >> + >> +#define ESR_EL2_CV_SHIFT (24) >> +#define ESR_EL2_CV (1U << ESR_EL2_CV_SHIFT) >> +#define ESR_EL2_COND_SHIFT (20) >> +#define ESR_EL2_COND (0xfU << ESR_EL2_COND_SHIFT) > > [...] > >> +#define ESR_EL2_EC_UNKNOWN (0x00) >> +#define ESR_EL2_EC_WFI (0x01) >> +#define ESR_EL2_EC_CP15_32 (0x03) >> +#define ESR_EL2_EC_CP15_64 (0x04) >> +#define ESR_EL2_EC_CP14_MR (0x05) >> +#define ESR_EL2_EC_CP14_LS (0x06) >> +#define ESR_EL2_EC_SIMD_FP (0x07) >> +#define ESR_EL2_EC_CP10_ID (0x08) >> +#define ESR_EL2_EC_CP14_64 (0x0C) >> +#define ESR_EL2_EC_ILL_ISS (0x0E) >> +#define ESR_EL2_EC_SVC32 (0x11) >> +#define ESR_EL2_EC_HVC32 (0x12) >> +#define ESR_EL2_EC_SMC32 (0x13) >> +#define ESR_EL2_EC_SVC64 (0x14) >> +#define ESR_EL2_EC_HVC64 (0x16) >> +#define ESR_EL2_EC_SMC64 (0x17) >> +#define ESR_EL2_EC_SYS64 (0x18) >> +#define ESR_EL2_EC_IABT (0x20) >> +#define ESR_EL2_EC_IABT_HYP (0x21) >> +#define ESR_EL2_EC_PC_ALIGN (0x22) >> +#define ESR_EL2_EC_DABT (0x24) >> +#define ESR_EL2_EC_DABT_HYP (0x25) >> +#define ESR_EL2_EC_SP_ALIGN (0x26) >> +#define ESR_EL2_EC_FP32 (0x28) >> +#define ESR_EL2_EC_FP64 (0x2C) >> +#define ESR_EL2_EC_SERRROR (0x2F) >> +#define ESR_EL2_EC_BREAKPT (0x30) >> +#define ESR_EL2_EC_BREAKPT_HYP (0x31) >> +#define ESR_EL2_EC_SOFTSTP (0x32) >> +#define ESR_EL2_EC_SOFTSTP_HYP (0x33) >> +#define ESR_EL2_EC_WATCHPT (0x34) >> +#define ESR_EL2_EC_WATCHPT_HYP (0x35) >> +#define ESR_EL2_EC_BKPT32 (0x38) >> +#define ESR_EL2_EC_VECTOR32 (0x3A) >> +#define ESR_EL2_EC_BKPT64 (0x3C) > > Is there any functional difference between these fields and bits at EL2 and > these fields at other exception levels? If not, you could consider omitting > "_EL2". > > [...] A few values here are EL2 specific (ESR_EL2_EC_*_HYP, ESR_EL2_EC_HVC{32,64}, ESR_EL2_EC_CP1*...). The fields themselves should be broadly compatible (I should go and verify this though). Now, what I want to avoid is any sort of confusion between exception levels, and make clear which level we're operating on. If I can be sure we always operate in a non-ambiguous context, then _EL2 can go indeed. M. -- Jazz is not dead. It just smells funny...
WARNING: multiple messages have this Message-ID (diff)
From: marc.zyngier@arm.com (Marc Zyngier) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 04/29] arm64: KVM: system register definitions for 64bit guests Date: Tue, 12 Mar 2013 13:50:42 +0000 [thread overview] Message-ID: <513F32B2.6070700@arm.com> (raw) In-Reply-To: <513F2BA7.6020004@codeaurora.org> On 12/03/13 13:20, Christopher Covington wrote: Hi Christopher, > Here are a few minor questions and suggestions. > > On 03/04/2013 10:47 PM, Marc Zyngier wrote: >> Define the saved/restored registers for 64bit guests. >> >> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> >> --- >> arch/arm64/include/asm/kvm_asm.h | 68 ++++++++++++++++++++++++++++++++++++++++ >> 1 file changed, 68 insertions(+) >> create mode 100644 arch/arm64/include/asm/kvm_asm.h > > [...] > >> +/* >> + * 0 is reserved as an invalid value. >> + * Order *must* be kept in sync with the hyp switch code. >> + */ >> +#define MPIDR_EL1 1 /* MultiProcessor Affinity Register */ >> +#define CSSELR_EL1 2 /* Cache Size Selection Register */ >> +#define SCTLR_EL1 3 /* System Control Register */ >> +#define ACTLR_EL1 4 /* Auxilliary Control Register */ >> +#define CPACR_EL1 5 /* Coprocessor Access Control */ >> +#define TTBR0_EL1 6 /* Translation Table Base Register 0 */ >> +#define TTBR1_EL1 7 /* Translation Table Base Register 1 */ >> +#define TCR_EL1 8 /* Translation Control Register */ >> +#define ESR_EL1 9 /* Exception Syndrome Register */ >> +#define AFSR0_EL1 10 /* Auxilary Fault Status Register 0 */ >> +#define AFSR1_EL1 11 /* Auxilary Fault Status Register 1 */ >> +#define FAR_EL1 12 /* Fault Address Register */ >> +#define MAIR_EL1 13 /* Memory Attribute Indirection Register */ >> +#define VBAR_EL1 14 /* Vector Base Address Register */ >> +#define CONTEXTIDR_EL1 15 /* Context ID Register */ >> +#define TPIDR_EL0 16 /* Thread ID, User R/W */ >> +#define TPIDRRO_EL0 17 /* Thread ID, User R/O */ >> +#define TPIDR_EL1 18 /* Thread ID, Privileged */ >> +#define AMAIR_EL1 19 /* Aux Memory Attribute Indirection Register */ >> +#define CNTKCTL_EL1 20 /* Timer Control Register (EL1) */ > > Any particular reason to have CNTKCTL_EL1 enumerated here and handled by > (dump|load)_sysregs, but all the other timer registers handled by > (save|restore)_timer_state in hyp.S? This one is a bit of an odd one, as it controls the guest kernel decision to expose its timer/counter to its own userspace. It is not directly involved into the timekeeping itself. As such, my choice was to make it part of the CPU state rather than the timer state. But I admit this may not be the most obvious choice. >> +#define NR_SYS_REGS 21 > > [...] > >> +/* Hyp Syndrome Register (HSR) bits */ >> +#define ESR_EL2_EC_SHIFT (26) >> +#define ESR_EL2_EC (0x3fU << ESR_EL2_EC_SHIFT) >> +#define ESR_EL2_IL (1U << 25) >> +#define ESR_EL2_ISS (ESR_EL2_IL - 1) >> +#define ESR_EL2_ISV_SHIFT (24) >> +#define ESR_EL2_ISV (1U << ESR_EL2_ISV_SHIFT) >> +#define ESR_EL2_SAS_SHIFT (22) >> +#define ESR_EL2_SAS (3U << ESR_EL2_SAS_SHIFT) >> +#define ESR_EL2_SSE (1 << 21) >> +#define ESR_EL2_SRT_SHIFT (16) >> +#define ESR_EL2_SRT_MASK (0x1f << ESR_EL2_SRT_SHIFT) >> +#define ESR_EL2_SF (1 << 15) >> +#define ESR_EL2_AR (1 << 14) >> +#define ESR_EL2_EA (1 << 9) >> +#define ESR_EL2_CM (1 << 8) >> +#define ESR_EL2_S1PTW (1 << 7) >> +#define ESR_EL2_WNR (1 << 6) >> +#define ESR_EL2_FSC (0x3f) >> +#define ESR_EL2_FSC_TYPE (0x3c) >> + >> +#define ESR_EL2_CV_SHIFT (24) >> +#define ESR_EL2_CV (1U << ESR_EL2_CV_SHIFT) >> +#define ESR_EL2_COND_SHIFT (20) >> +#define ESR_EL2_COND (0xfU << ESR_EL2_COND_SHIFT) > > [...] > >> +#define ESR_EL2_EC_UNKNOWN (0x00) >> +#define ESR_EL2_EC_WFI (0x01) >> +#define ESR_EL2_EC_CP15_32 (0x03) >> +#define ESR_EL2_EC_CP15_64 (0x04) >> +#define ESR_EL2_EC_CP14_MR (0x05) >> +#define ESR_EL2_EC_CP14_LS (0x06) >> +#define ESR_EL2_EC_SIMD_FP (0x07) >> +#define ESR_EL2_EC_CP10_ID (0x08) >> +#define ESR_EL2_EC_CP14_64 (0x0C) >> +#define ESR_EL2_EC_ILL_ISS (0x0E) >> +#define ESR_EL2_EC_SVC32 (0x11) >> +#define ESR_EL2_EC_HVC32 (0x12) >> +#define ESR_EL2_EC_SMC32 (0x13) >> +#define ESR_EL2_EC_SVC64 (0x14) >> +#define ESR_EL2_EC_HVC64 (0x16) >> +#define ESR_EL2_EC_SMC64 (0x17) >> +#define ESR_EL2_EC_SYS64 (0x18) >> +#define ESR_EL2_EC_IABT (0x20) >> +#define ESR_EL2_EC_IABT_HYP (0x21) >> +#define ESR_EL2_EC_PC_ALIGN (0x22) >> +#define ESR_EL2_EC_DABT (0x24) >> +#define ESR_EL2_EC_DABT_HYP (0x25) >> +#define ESR_EL2_EC_SP_ALIGN (0x26) >> +#define ESR_EL2_EC_FP32 (0x28) >> +#define ESR_EL2_EC_FP64 (0x2C) >> +#define ESR_EL2_EC_SERRROR (0x2F) >> +#define ESR_EL2_EC_BREAKPT (0x30) >> +#define ESR_EL2_EC_BREAKPT_HYP (0x31) >> +#define ESR_EL2_EC_SOFTSTP (0x32) >> +#define ESR_EL2_EC_SOFTSTP_HYP (0x33) >> +#define ESR_EL2_EC_WATCHPT (0x34) >> +#define ESR_EL2_EC_WATCHPT_HYP (0x35) >> +#define ESR_EL2_EC_BKPT32 (0x38) >> +#define ESR_EL2_EC_VECTOR32 (0x3A) >> +#define ESR_EL2_EC_BKPT64 (0x3C) > > Is there any functional difference between these fields and bits at EL2 and > these fields at other exception levels? If not, you could consider omitting > "_EL2". > > [...] A few values here are EL2 specific (ESR_EL2_EC_*_HYP, ESR_EL2_EC_HVC{32,64}, ESR_EL2_EC_CP1*...). The fields themselves should be broadly compatible (I should go and verify this though). Now, what I want to avoid is any sort of confusion between exception levels, and make clear which level we're operating on. If I can be sure we always operate in a non-ambiguous context, then _EL2 can go indeed. M. -- Jazz is not dead. It just smells funny...
next prev parent reply other threads:[~2013-03-12 13:50 UTC|newest] Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-03-05 3:47 [PATCH 00/29] Port of KVM to arm64 Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 01/29] arm64: KVM: define HYP and Stage-2 translation page flags Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 02/29] arm64: KVM: HYP mode idmap support Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 03/29] arm64: KVM: EL2 register definitions Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 04/29] arm64: KVM: system register definitions for 64bit guests Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-07 10:33 ` [kvmarm] " Alexander Graf 2013-03-07 10:33 ` Alexander Graf 2013-03-08 3:23 ` Marc Zyngier 2013-03-08 3:23 ` Marc Zyngier 2013-03-12 13:20 ` Christopher Covington 2013-03-12 13:20 ` Christopher Covington 2013-03-12 13:41 ` Christopher Covington 2013-03-12 13:41 ` Christopher Covington 2013-03-12 13:50 ` Marc Zyngier [this message] 2013-03-12 13:50 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 05/29] arm64: KVM: Basic ESR_EL2 helpers and vcpu register access Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-16 0:55 ` Geoff Levand 2013-03-16 0:55 ` Geoff Levand 2013-03-05 3:47 ` [PATCH 06/29] arm64: KVM: fault injection into a guest Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-12 13:20 ` Christopher Covington 2013-03-12 13:20 ` Christopher Covington 2013-03-12 14:25 ` Marc Zyngier 2013-03-12 14:25 ` Marc Zyngier 2013-03-16 1:03 ` Geoff Levand 2013-03-16 1:03 ` Geoff Levand 2013-03-05 3:47 ` [PATCH 07/29] arm64: KVM: architecture specific MMU backend Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 08/29] arm64: KVM: user space interface Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-07 8:09 ` Michael S. Tsirkin 2013-03-07 8:09 ` Michael S. Tsirkin 2013-03-08 3:46 ` [kvmarm] " Marc Zyngier 2013-03-08 3:46 ` Marc Zyngier 2013-03-10 9:23 ` Michael S. Tsirkin 2013-03-10 9:23 ` Michael S. Tsirkin 2013-03-05 3:47 ` [PATCH 09/29] arm64: KVM: system register handling Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-07 10:30 ` [kvmarm] " Alexander Graf 2013-03-07 10:30 ` Alexander Graf 2013-03-08 3:29 ` Marc Zyngier 2013-03-08 3:29 ` Marc Zyngier 2013-03-25 8:19 ` Marc Zyngier 2013-03-25 8:19 ` Marc Zyngier 2013-04-23 23:07 ` Christoffer Dall 2013-04-23 23:07 ` Christoffer Dall 2013-03-05 3:47 ` [PATCH 10/29] arm64: KVM: Cortex-A57 specific system registers handling Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-13 18:30 ` Christopher Covington 2013-03-13 18:30 ` Christopher Covington 2013-03-14 10:26 ` Marc Zyngier 2013-03-14 10:26 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 11/29] arm64: KVM: virtual CPU reset Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 12/29] arm64: KVM: kvm_arch and kvm_vcpu_arch definitions Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-12 17:30 ` Christopher Covington 2013-03-12 17:30 ` Christopher Covington 2013-03-05 3:47 ` [PATCH 13/29] arm64: KVM: MMIO access backend Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 14/29] arm64: KVM: guest one-reg interface Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-12 17:31 ` Christopher Covington 2013-03-12 17:31 ` Christopher Covington 2013-03-12 18:05 ` Marc Zyngier 2013-03-12 18:05 ` Marc Zyngier 2013-03-12 22:07 ` Christopher Covington 2013-03-12 22:07 ` Christopher Covington 2013-03-13 7:48 ` Marc Zyngier 2013-03-13 7:48 ` Marc Zyngier 2013-03-13 20:34 ` Christopher Covington 2013-03-13 20:34 ` Christopher Covington 2013-03-14 8:57 ` [kvmarm] " Peter Maydell 2013-03-14 8:57 ` Peter Maydell 2013-03-20 20:06 ` Christopher Covington 2013-03-20 20:06 ` Christopher Covington 2013-03-05 3:47 ` [PATCH 15/29] arm64: KVM: hypervisor initialization code Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 16/29] arm64: KVM: HYP mode world switch implementation Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-13 19:59 ` Christopher Covington 2013-03-13 19:59 ` Christopher Covington 2013-03-20 20:04 ` Christopher Covington 2013-03-20 20:04 ` Christopher Covington 2013-03-21 11:54 ` Marc Zyngier 2013-03-21 11:54 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 17/29] arm64: KVM: Exit handling Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 18/29] arm64: KVM: Plug the VGIC Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 19/29] arm64: KVM: Plug the arch timer Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 20/29] arm64: KVM: PSCI implementation Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 21/29] arm64: KVM: Build system integration Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 22/29] arm64: KVM: define 32bit specific registers Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-18 17:03 ` Christopher Covington 2013-03-18 17:03 ` Christopher Covington 2013-03-05 3:47 ` [PATCH 23/29] arm64: KVM: 32bit GP register access Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-16 0:24 ` Geoff Levand 2013-03-16 0:24 ` Geoff Levand 2013-03-05 3:47 ` [PATCH 24/29] arm64: KVM: 32bit conditional execution emulation Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-18 17:04 ` Christopher Covington 2013-03-18 17:04 ` Christopher Covington 2013-03-05 3:47 ` [PATCH 25/29] arm64: KVM: 32bit handling of coprocessor traps Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 26/29] arm64: KVM: 32bit coprocessor access for Cortex-A57 Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 27/29] arm64: KVM: 32bit specific register world switch Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-05 3:47 ` [PATCH 28/29] arm64: KVM: 32bit guest fault injection Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-18 18:45 ` Christopher Covington 2013-03-18 18:45 ` Christopher Covington 2013-03-05 3:47 ` [PATCH 29/29] arm64: KVM: enable initialization of a 32bit vcpu Marc Zyngier 2013-03-05 3:47 ` Marc Zyngier 2013-03-18 18:56 ` Christopher Covington 2013-03-18 18:56 ` Christopher Covington
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=513F32B2.6070700@arm.com \ --to=marc.zyngier@arm.com \ --cc=Catalin.Marinas@arm.com \ --cc=cov@codeaurora.org \ --cc=kvm@vger.kernel.org \ --cc=kvmarm@lists.cs.columbia.edu \ --cc=linux-arm-kernel@lists.infradead.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: linkBe 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.