All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: "Baicar, Tyler" <tbaicar@codeaurora.org>
Cc: linux-efi@vger.kernel.org, kvm@vger.kernel.org,
	matt@codeblueprint.co.uk, catalin.marinas@arm.com,
	will.deacon@arm.com, robert.moore@intel.com,
	paul.gortmaker@windriver.com, lv.zheng@intel.com,
	kvmarm@lists.cs.columbia.edu, fu.wei@linaro.org,
	zjzhang@codeaurora.org, linux@armlinux.org.uk,
	linux-acpi@vger.kernel.org, eun.taik.lee@samsung.com,
	shijie.huang@arm.com, labbott@redhat.com, lenb@kernel.org,
	harba@codeaurora.org, john.garry@huawei.com,
	marc.zyngier@arm.com, punit.agrawal@arm.com, rostedt@goodmis.org,
	nkaje@codeaurora.org, sandeepa.s.prabhu@gmail.com,
	linux-arm-kernel@lists.infradead.org, devel@acpica.org,
	rjw@rjwysocki.net, rruigrok@codeaurora.org,
	linux-kernel@vger.kernel.org, astone@redhat.com,
	hanjun.guo@linaro.org, joe@perches.com, pbonzini@redhat.com,
	akpm@linux-foundation.org, bristot@redhat.com,
	shiju.jose@huawei.com
Subject: Re: [PATCH V12 10/10] arm/arm64: KVM: add guest SEA support
Date: Wed, 08 Mar 2017 16:09:06 +0000	[thread overview]
Message-ID: <58C02CA2.4030601@arm.com> (raw)
In-Reply-To: <783e18ac-9495-aaf6-8fbd-5a48c0b68f5b@codeaurora.org>

On 07/03/17 17:58, Baicar, Tyler wrote:
> On 3/7/2017 4:48 AM, James Morse wrote:
>> On 06/03/17 20:45, Tyler Baicar wrote:
>>> Currently external aborts are unsupported by the guest abort
>>> handling. Add handling for SEAs so that the host kernel reports
>>> SEAs which occur in the guest kernel.

>>> diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
>>> index a5265ed..f3608c9 100644
>>> --- a/arch/arm/kvm/mmu.c
>>> +++ b/arch/arm/kvm/mmu.c
>>> @@ -1444,8 +1463,21 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu,
>>> struct kvm_run *run)
>>>         /* Check the stage-2 fault is trans. fault or write fault */
>>>       fault_status = kvm_vcpu_trap_get_fault_type(vcpu);
>>> -    if (fault_status != FSC_FAULT && fault_status != FSC_PERM &&
>>> -        fault_status != FSC_ACCESS) {
>>> +
>>> +    /* The host kernel will handle the synchronous external abort. There
>>> +     * is no need to pass the error into the guest.
>>> +     */
>>> +    if (is_abort_synchronous(fault_status)) {
>>> +        if(handle_guest_sea((unsigned long)fault_ipa,
>>> +                    kvm_vcpu_get_hsr(vcpu))) {
>>
>> ... Looking further up in this function:
>>>     is_iabt = kvm_vcpu_trap_is_iabt(vcpu);
>>>     if (unlikely(!is_iabt && kvm_vcpu_dabt_isextabt(vcpu))) {
>>>         kvm_inject_vabt(vcpu);
>>>         return 1;
>>>     }
>> ... so external data aborts will have already been 'claimed' by kvm and dealt
>> with, and we already have a helper for spotting external aborts. (sorry I didn't
>> spot it earlier).
>>
>> We need to do the handle_guest_sea() before this code.
>>
>> kvm_inject_vabt() makes an SError interrupt pending for the guest. This makes a
>> synchronous error asynchronous as the guest may have SError interrupts masked.
>>
>> I guess this was the best that could be done at the time of (4055710baca8
>> "arm/arm64: KVM: Inject virtual abort when guest exits on external abort"), but
>> in the light of this firmware-first handling, I'm not sure its the right thing
>> to do.
>>
>> Is it possible for handle_guest_sea() to return whether it actually found any
>> work to do? If there was none I think we should keep this kvm_inject_vabt() as
>> it is the existing behaviour.

> Yes, I'll move the handle_guest_sea() call above this. My testing didn't call
> into that if statement for some reason...it made it to the handle_guest_sea()
> call successfully.

I guess you're not using data aborts for testing then.


> If there is no work for the GHES code to do it will return and could still make
> the kvm_inject_vabt() call. It will also return and do that same thing if the
> error was not fatal in GHES...would that be an issue?

We might inject a superfluous SError Interrupt in that case.

For memory errors we may do the whole unmapping and signalling thing to handle
the fault. For recoverable faults, QEMU can generate its own CPER records for
the guest and do the work to notify the guest. Everything looks fine until the
guest gets the extra SError interrupt.

If there is firmware-first RAS data, we should skip the injected SError
Interrupt as the host's RAS code should choose what to do. If this Synchronous
External Abort was nothing to do with RAS, we should inject the SError interrupt
as it's the existing behaviour, and not all platforms will have this Synchronous
External Abort mechanism.

x86's APEI NMI needs to know if the NMI was due to RAS, so we can probably
borrow the same trick. ghes_notify_nmi() calls ghes_read_estatus() for each
struct ghes. If they all return an error, there was no work to do.


(I assume firmware will only generate one of these at a time, so there is no
risk of one list-walker processing two entries, then the second finding nothing
to do?)


Thanks,

James


>>> +            kvm_err("Failed to handle guest SEA, FSC: EC=%#x xFSC=%#lx
>>> ESR_EL2=%#lx\n",
>>> +                kvm_vcpu_trap_get_class(vcpu),
>>> +                (unsigned long)kvm_vcpu_trap_get_fault(vcpu),
>>> +                (unsigned long)kvm_vcpu_get_hsr(vcpu));
>>> +            return -EFAULT;
>>> +        }
>>> +    } else if (fault_status != FSC_FAULT && fault_status != FSC_PERM &&
>>> +           fault_status != FSC_ACCESS) {
>>>           kvm_err("Unsupported FSC: EC=%#x xFSC=%#lx ESR_EL2=%#lx\n",
>>>               kvm_vcpu_trap_get_class(vcpu),
>>>               (unsigned long)kvm_vcpu_trap_get_fault(vcpu),
>>

WARNING: multiple messages have this Message-ID (diff)
From: James Morse <james.morse@arm.com>
To: "Baicar, Tyler" <tbaicar@codeaurora.org>
Cc: christoffer.dall@linaro.org, marc.zyngier@arm.com,
	pbonzini@redhat.com, rkrcmar@redhat.com, linux@armlinux.org.uk,
	catalin.marinas@arm.com, will.deacon@arm.com, rjw@rjwysocki.net,
	lenb@kernel.org, matt@codeblueprint.co.uk,
	robert.moore@intel.com, lv.zheng@intel.com, nkaje@codeaurora.org,
	zjzhang@codeaurora.org, mark.rutland@arm.com,
	akpm@linux-foundation.org, eun.taik.lee@samsung.com,
	sandeepa.s.prabhu@gmail.com, labbott@redhat.com,
	shijie.huang@arm.com, rruigrok@codeaurora.org,
	paul.gortmaker@windriver.com, tn@semihalf.com, fu.wei@linaro.org,
	rostedt@goodmis.org, bristot@redhat.com,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
	linux-efi@vger.kernel.org, devel@acpica.org,
	Suzuki.Poulose@arm.com, punit.agrawal@arm.com, astone@redhat.com,
	harba@codeaurora.org, hanjun.guo@linaro.org,
	john.garry@huawei.com, shiju.jose@huawei.com, joe@perches.com
Subject: Re: [PATCH V12 10/10] arm/arm64: KVM: add guest SEA support
Date: Wed, 08 Mar 2017 16:09:06 +0000	[thread overview]
Message-ID: <58C02CA2.4030601@arm.com> (raw)
In-Reply-To: <783e18ac-9495-aaf6-8fbd-5a48c0b68f5b@codeaurora.org>

On 07/03/17 17:58, Baicar, Tyler wrote:
> On 3/7/2017 4:48 AM, James Morse wrote:
>> On 06/03/17 20:45, Tyler Baicar wrote:
>>> Currently external aborts are unsupported by the guest abort
>>> handling. Add handling for SEAs so that the host kernel reports
>>> SEAs which occur in the guest kernel.

>>> diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
>>> index a5265ed..f3608c9 100644
>>> --- a/arch/arm/kvm/mmu.c
>>> +++ b/arch/arm/kvm/mmu.c
>>> @@ -1444,8 +1463,21 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu,
>>> struct kvm_run *run)
>>>         /* Check the stage-2 fault is trans. fault or write fault */
>>>       fault_status = kvm_vcpu_trap_get_fault_type(vcpu);
>>> -    if (fault_status != FSC_FAULT && fault_status != FSC_PERM &&
>>> -        fault_status != FSC_ACCESS) {
>>> +
>>> +    /* The host kernel will handle the synchronous external abort. There
>>> +     * is no need to pass the error into the guest.
>>> +     */
>>> +    if (is_abort_synchronous(fault_status)) {
>>> +        if(handle_guest_sea((unsigned long)fault_ipa,
>>> +                    kvm_vcpu_get_hsr(vcpu))) {
>>
>> ... Looking further up in this function:
>>>     is_iabt = kvm_vcpu_trap_is_iabt(vcpu);
>>>     if (unlikely(!is_iabt && kvm_vcpu_dabt_isextabt(vcpu))) {
>>>         kvm_inject_vabt(vcpu);
>>>         return 1;
>>>     }
>> ... so external data aborts will have already been 'claimed' by kvm and dealt
>> with, and we already have a helper for spotting external aborts. (sorry I didn't
>> spot it earlier).
>>
>> We need to do the handle_guest_sea() before this code.
>>
>> kvm_inject_vabt() makes an SError interrupt pending for the guest. This makes a
>> synchronous error asynchronous as the guest may have SError interrupts masked.
>>
>> I guess this was the best that could be done at the time of (4055710baca8
>> "arm/arm64: KVM: Inject virtual abort when guest exits on external abort"), but
>> in the light of this firmware-first handling, I'm not sure its the right thing
>> to do.
>>
>> Is it possible for handle_guest_sea() to return whether it actually found any
>> work to do? If there was none I think we should keep this kvm_inject_vabt() as
>> it is the existing behaviour.

> Yes, I'll move the handle_guest_sea() call above this. My testing didn't call
> into that if statement for some reason...it made it to the handle_guest_sea()
> call successfully.

I guess you're not using data aborts for testing then.


> If there is no work for the GHES code to do it will return and could still make
> the kvm_inject_vabt() call. It will also return and do that same thing if the
> error was not fatal in GHES...would that be an issue?

We might inject a superfluous SError Interrupt in that case.

For memory errors we may do the whole unmapping and signalling thing to handle
the fault. For recoverable faults, QEMU can generate its own CPER records for
the guest and do the work to notify the guest. Everything looks fine until the
guest gets the extra SError interrupt.

If there is firmware-first RAS data, we should skip the injected SError
Interrupt as the host's RAS code should choose what to do. If this Synchronous
External Abort was nothing to do with RAS, we should inject the SError interrupt
as it's the existing behaviour, and not all platforms will have this Synchronous
External Abort mechanism.

x86's APEI NMI needs to know if the NMI was due to RAS, so we can probably
borrow the same trick. ghes_notify_nmi() calls ghes_read_estatus() for each
struct ghes. If they all return an error, there was no work to do.


(I assume firmware will only generate one of these at a time, so there is no
risk of one list-walker processing two entries, then the second finding nothing
to do?)


Thanks,

James


>>> +            kvm_err("Failed to handle guest SEA, FSC: EC=%#x xFSC=%#lx
>>> ESR_EL2=%#lx\n",
>>> +                kvm_vcpu_trap_get_class(vcpu),
>>> +                (unsigned long)kvm_vcpu_trap_get_fault(vcpu),
>>> +                (unsigned long)kvm_vcpu_get_hsr(vcpu));
>>> +            return -EFAULT;
>>> +        }
>>> +    } else if (fault_status != FSC_FAULT && fault_status != FSC_PERM &&
>>> +           fault_status != FSC_ACCESS) {
>>>           kvm_err("Unsupported FSC: EC=%#x xFSC=%#lx ESR_EL2=%#lx\n",
>>>               kvm_vcpu_trap_get_class(vcpu),
>>>               (unsigned long)kvm_vcpu_trap_get_fault(vcpu),
>>

WARNING: multiple messages have this Message-ID (diff)
From: james.morse@arm.com (James Morse)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V12 10/10] arm/arm64: KVM: add guest SEA support
Date: Wed, 08 Mar 2017 16:09:06 +0000	[thread overview]
Message-ID: <58C02CA2.4030601@arm.com> (raw)
In-Reply-To: <783e18ac-9495-aaf6-8fbd-5a48c0b68f5b@codeaurora.org>

On 07/03/17 17:58, Baicar, Tyler wrote:
> On 3/7/2017 4:48 AM, James Morse wrote:
>> On 06/03/17 20:45, Tyler Baicar wrote:
>>> Currently external aborts are unsupported by the guest abort
>>> handling. Add handling for SEAs so that the host kernel reports
>>> SEAs which occur in the guest kernel.

>>> diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
>>> index a5265ed..f3608c9 100644
>>> --- a/arch/arm/kvm/mmu.c
>>> +++ b/arch/arm/kvm/mmu.c
>>> @@ -1444,8 +1463,21 @@ int kvm_handle_guest_abort(struct kvm_vcpu *vcpu,
>>> struct kvm_run *run)
>>>         /* Check the stage-2 fault is trans. fault or write fault */
>>>       fault_status = kvm_vcpu_trap_get_fault_type(vcpu);
>>> -    if (fault_status != FSC_FAULT && fault_status != FSC_PERM &&
>>> -        fault_status != FSC_ACCESS) {
>>> +
>>> +    /* The host kernel will handle the synchronous external abort. There
>>> +     * is no need to pass the error into the guest.
>>> +     */
>>> +    if (is_abort_synchronous(fault_status)) {
>>> +        if(handle_guest_sea((unsigned long)fault_ipa,
>>> +                    kvm_vcpu_get_hsr(vcpu))) {
>>
>> ... Looking further up in this function:
>>>     is_iabt = kvm_vcpu_trap_is_iabt(vcpu);
>>>     if (unlikely(!is_iabt && kvm_vcpu_dabt_isextabt(vcpu))) {
>>>         kvm_inject_vabt(vcpu);
>>>         return 1;
>>>     }
>> ... so external data aborts will have already been 'claimed' by kvm and dealt
>> with, and we already have a helper for spotting external aborts. (sorry I didn't
>> spot it earlier).
>>
>> We need to do the handle_guest_sea() before this code.
>>
>> kvm_inject_vabt() makes an SError interrupt pending for the guest. This makes a
>> synchronous error asynchronous as the guest may have SError interrupts masked.
>>
>> I guess this was the best that could be done at the time of (4055710baca8
>> "arm/arm64: KVM: Inject virtual abort when guest exits on external abort"), but
>> in the light of this firmware-first handling, I'm not sure its the right thing
>> to do.
>>
>> Is it possible for handle_guest_sea() to return whether it actually found any
>> work to do? If there was none I think we should keep this kvm_inject_vabt() as
>> it is the existing behaviour.

> Yes, I'll move the handle_guest_sea() call above this. My testing didn't call
> into that if statement for some reason...it made it to the handle_guest_sea()
> call successfully.

I guess you're not using data aborts for testing then.


> If there is no work for the GHES code to do it will return and could still make
> the kvm_inject_vabt() call. It will also return and do that same thing if the
> error was not fatal in GHES...would that be an issue?

We might inject a superfluous SError Interrupt in that case.

For memory errors we may do the whole unmapping and signalling thing to handle
the fault. For recoverable faults, QEMU can generate its own CPER records for
the guest and do the work to notify the guest. Everything looks fine until the
guest gets the extra SError interrupt.

If there is firmware-first RAS data, we should skip the injected SError
Interrupt as the host's RAS code should choose what to do. If this Synchronous
External Abort was nothing to do with RAS, we should inject the SError interrupt
as it's the existing behaviour, and not all platforms will have this Synchronous
External Abort mechanism.

x86's APEI NMI needs to know if the NMI was due to RAS, so we can probably
borrow the same trick. ghes_notify_nmi() calls ghes_read_estatus() for each
struct ghes. If they all return an error, there was no work to do.


(I assume firmware will only generate one of these at a time, so there is no
risk of one list-walker processing two entries, then the second finding nothing
to do?)


Thanks,

James


>>> +            kvm_err("Failed to handle guest SEA, FSC: EC=%#x xFSC=%#lx
>>> ESR_EL2=%#lx\n",
>>> +                kvm_vcpu_trap_get_class(vcpu),
>>> +                (unsigned long)kvm_vcpu_trap_get_fault(vcpu),
>>> +                (unsigned long)kvm_vcpu_get_hsr(vcpu));
>>> +            return -EFAULT;
>>> +        }
>>> +    } else if (fault_status != FSC_FAULT && fault_status != FSC_PERM &&
>>> +           fault_status != FSC_ACCESS) {
>>>           kvm_err("Unsupported FSC: EC=%#x xFSC=%#lx ESR_EL2=%#lx\n",
>>>               kvm_vcpu_trap_get_class(vcpu),
>>>               (unsigned long)kvm_vcpu_trap_get_fault(vcpu),
>>

  reply	other threads:[~2017-03-08 16:09 UTC|newest]

Thread overview: 98+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-06 20:44 [PATCH V12 00/10] Add UEFI 2.6 and ACPI 6.1 updates for RAS on ARM64 Tyler Baicar
2017-03-06 20:44 ` Tyler Baicar
2017-03-06 20:44 ` Tyler Baicar
2017-03-06 20:44 ` [PATCH V12 01/10] acpi: apei: read ack upon ghes record consumption Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44 ` [PATCH V12 02/10] ras: acpi/apei: cper: generic error data entry v3 per ACPI 6.1 Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44 ` [PATCH V12 03/10] efi: parse ARM processor error Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44 ` [PATCH V12 04/10] arm64: exception: handle Synchronous External Abort Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44 ` [PATCH V12 05/10] acpi: apei: handle SEA notification type for ARMv8 Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
     [not found]   ` <1488833103-21082-6-git-send-email-tbaicar-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-03-07 11:37     ` James Morse
2017-03-07 11:37       ` James Morse
2017-03-07 11:37       ` James Morse
2017-03-07 16:40       ` Baicar, Tyler
2017-03-07 16:40         ` Baicar, Tyler
2017-03-07 16:40         ` Baicar, Tyler
2017-03-17 16:43   ` James Morse
2017-03-17 16:43     ` James Morse
2017-03-17 16:43     ` James Morse
2017-03-21 19:19     ` Baicar, Tyler
2017-03-21 19:19       ` Baicar, Tyler
2017-03-21 19:19       ` Baicar, Tyler
2017-03-06 20:44 ` [PATCH V12 06/10] acpi: apei: panic OS with fatal error status block Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:44   ` Tyler Baicar
2017-03-06 20:45 ` [PATCH V12 07/10] efi: print unrecognized CPER section Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-06 21:05   ` Joe Perches
2017-03-06 21:05     ` Joe Perches
2017-03-06 21:05     ` Joe Perches
2017-03-06 21:05     ` Joe Perches
2017-03-07 16:39     ` Baicar, Tyler
2017-03-07 16:39       ` Baicar, Tyler
2017-03-07 16:39       ` Baicar, Tyler
2017-03-07 16:39       ` Baicar, Tyler
2017-03-06 20:45 ` [PATCH V12 08/10] ras: acpi / apei: generate trace event for " Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-06 20:45 ` [PATCH V12 09/10] trace, ras: add ARM processor error trace event Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-09  9:41   ` Xie XiuQi
2017-03-09  9:41     ` Xie XiuQi
2017-03-09  9:41     ` Xie XiuQi
2017-03-09  9:41     ` Xie XiuQi
2017-03-10 18:23     ` Baicar, Tyler
2017-03-10 18:23       ` Baicar, Tyler
2017-03-10 18:23       ` Baicar, Tyler
     [not found]       ` <14545228-7ff1-b31c-1fa5-daacf89a44b9-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2017-03-13  2:31         ` Xie XiuQi
2017-03-13  2:31           ` Xie XiuQi
2017-03-13  2:31           ` Xie XiuQi
2017-03-13  2:31           ` Xie XiuQi
     [not found]           ` <58C60485.2070509-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2017-03-13  9:00             ` Xie XiuQi
2017-03-14 19:29             ` Baicar, Tyler
2017-03-14 19:29               ` Baicar, Tyler
2017-03-14 19:29               ` Baicar, Tyler
2017-03-13  9:00           ` Xie XiuQi
2017-03-13  9:00             ` Xie XiuQi
2017-03-13  9:00             ` Xie XiuQi
2017-03-13  9:00             ` Xie XiuQi
2017-03-13 13:58             ` Steven Rostedt
2017-03-13 13:58               ` Steven Rostedt
2017-03-13 13:58               ` Steven Rostedt
2017-03-13 13:58               ` Steven Rostedt
2017-03-14  9:35               ` Xie XiuQi
2017-03-14  9:35                 ` Xie XiuQi
2017-03-14  9:35                 ` Xie XiuQi
2017-03-14  9:35                 ` Xie XiuQi
2017-03-06 20:45 ` [PATCH V12 10/10] arm/arm64: KVM: add guest SEA support Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-06 20:45   ` Tyler Baicar
2017-03-07 11:48   ` James Morse
2017-03-07 11:48     ` James Morse
2017-03-07 11:48     ` James Morse
2017-03-07 17:58     ` Baicar, Tyler
2017-03-07 17:58       ` Baicar, Tyler
2017-03-07 17:58       ` Baicar, Tyler
2017-03-08 16:09       ` James Morse [this message]
2017-03-08 16:09         ` James Morse
2017-03-08 16:09         ` James Morse
2017-03-10 18:15         ` Baicar, Tyler
2017-03-10 18:15           ` Baicar, Tyler
2017-03-10 18:15           ` Baicar, Tyler
2017-03-07 11:37 ` [PATCH V12 00/10] Add UEFI 2.6 and ACPI 6.1 updates for RAS on ARM64 James Morse
2017-03-07 11:37   ` James Morse
2017-03-07 11:37   ` James Morse
2017-03-07 16:37   ` Baicar, Tyler
2017-03-07 16:37     ` Baicar, Tyler
2017-03-07 16:37     ` Baicar, Tyler

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=58C02CA2.4030601@arm.com \
    --to=james.morse@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=astone@redhat.com \
    --cc=bristot@redhat.com \
    --cc=catalin.marinas@arm.com \
    --cc=devel@acpica.org \
    --cc=eun.taik.lee@samsung.com \
    --cc=fu.wei@linaro.org \
    --cc=hanjun.guo@linaro.org \
    --cc=harba@codeaurora.org \
    --cc=joe@perches.com \
    --cc=john.garry@huawei.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=labbott@redhat.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=lv.zheng@intel.com \
    --cc=marc.zyngier@arm.com \
    --cc=matt@codeblueprint.co.uk \
    --cc=nkaje@codeaurora.org \
    --cc=paul.gortmaker@windriver.com \
    --cc=pbonzini@redhat.com \
    --cc=punit.agrawal@arm.com \
    --cc=rjw@rjwysocki.net \
    --cc=robert.moore@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=rruigrok@codeaurora.org \
    --cc=sandeepa.s.prabhu@gmail.com \
    --cc=shijie.huang@arm.com \
    --cc=shiju.jose@huawei.com \
    --cc=tbaicar@codeaurora.org \
    --cc=will.deacon@arm.com \
    --cc=zjzhang@codeaurora.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.