All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Ian Campbell <ian.campbell@citrix.com>,
	Olivier Martin <olivier.martin@arm.com>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	"edk2-devel@lists.sourceforge.net"
	<edk2-devel@lists.sourceforge.net>,
	Leif Lindholm <leif.lindholm@linaro.org>,
	xen-devel@lists.xen.org, Roy Franz <roy.franz@linaro.org>,
	Ilias Biris <ilias.biris@linaro.org>,
	Anthony PERARD <anthony.perard@citrix.com>,
	Laszlo Ersek <lersek@redhat.com>,
	Christoffer Dall <christoffer.dall@linaro.org>
Subject: Re: [PATCH v1 17/21] Ovmf/Xen: add Xen PV console SerialPortLib driver
Date: Mon, 26 Jan 2015 11:22:21 +0000	[thread overview]
Message-ID: <alpine.DEB.2.02.1501261122020.13428@kaball.uk.xensource.com> (raw)
In-Reply-To: <CAKv+Gu8fE6xirv0U-T_e0SrQx_x0-STMo-rfUedO=xsnSa+X2A@mail.gmail.com>

On Fri, 23 Jan 2015, Ard Biesheuvel wrote:
> On 23 January 2015 at 18:54, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
> > On Fri, 23 Jan 2015, Ard Biesheuvel wrote:
> >> This implements a SerialPortLib instance that wires up to the
> >> PV console ring used by domU guests. Also imports the required
> >> upstream Xen io/console.h header.
> >>
> >> Contributed-under: TianoCore Contribution Agreement 1.0
> >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> >> ---
> >>  OvmfPkg/Include/IndustryStandard/Xen/io/console.h  |  51 +++++++
> >>  .../XenConsoleSerialPortLib.c                      | 147 +++++++++++++++++++++
> >>  .../XenConsoleSerialPortLib.inf                    |  34 +++++
> >>  3 files changed, 232 insertions(+)
> >>  create mode 100644 OvmfPkg/Include/IndustryStandard/Xen/io/console.h
> >>  create mode 100644 OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
> >>  create mode 100644 OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
> >>
> >> diff --git a/OvmfPkg/Include/IndustryStandard/Xen/io/console.h b/OvmfPkg/Include/IndustryStandard/Xen/io/console.h
> >> new file mode 100644
> >> index 000000000000..f1caa9765bcf
> >> --- /dev/null
> >> +++ b/OvmfPkg/Include/IndustryStandard/Xen/io/console.h
> >> @@ -0,0 +1,51 @@
> >> +/******************************************************************************
> >> + * console.h
> >> + *
> >> + * Console I/O interface for Xen guest OSes.
> >> + *
> >> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> >> + * of this software and associated documentation files (the "Software"), to
> >> + * deal in the Software without restriction, including without limitation the
> >> + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
> >> + * sell copies of the Software, and to permit persons to whom the Software is
> >> + * furnished to do so, subject to the following conditions:
> >> + *
> >> + * The above copyright notice and this permission notice shall be included in
> >> + * all copies or substantial portions of the Software.
> >> + *
> >> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> >> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> >> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> >> + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> >> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> >> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> >> + * DEALINGS IN THE SOFTWARE.
> >> + *
> >> + * Copyright (c) 2005, Keir Fraser
> >> + */
> >> +
> >> +#ifndef __XEN_PUBLIC_IO_CONSOLE_H__
> >> +#define __XEN_PUBLIC_IO_CONSOLE_H__
> >> +
> >> +typedef UINT32 XENCONS_RING_IDX;
> >> +
> >> +#define MASK_XENCONS_IDX(idx, ring) ((idx) & (sizeof(ring)-1))
> >> +
> >> +struct xencons_interface {
> >> +    char in[1024];
> >> +    char out[2048];
> >> +    XENCONS_RING_IDX in_cons, in_prod;
> >> +    XENCONS_RING_IDX out_cons, out_prod;
> >> +};
> >> +
> >> +#endif /* __XEN_PUBLIC_IO_CONSOLE_H__ */
> >> +
> >> +/*
> >> + * Local variables:
> >> + * mode: C
> >> + * c-file-style: "BSD"
> >> + * c-basic-offset: 4
> >> + * tab-width: 4
> >> + * indent-tabs-mode: nil
> >> + * End:
> >> + */
> >> diff --git a/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
> >> new file mode 100644
> >> index 000000000000..97344dc4efb0
> >> --- /dev/null
> >> +++ b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.c
> >> @@ -0,0 +1,147 @@
> >> +/** @file
> >> +  Xen console SerialPortLib instance
> >> +
> >> +  Copyright (c) 2015, Linaro Ltd. All rights reserved.<BR>
> >> +
> >> +  This program and the accompanying materials
> >> +  are licensed and made available under the terms and conditions of the BSD License
> >> +  which accompanies this distribution.  The full text of the license may be found at
> >> +  http://opensource.org/licenses/bsd-license.php
> >> +
> >> +  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> >> +  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> >> +
> >> +**/
> >> +
> >> +#include <Base.h>
> >> +#include <Uefi/UefiBaseType.h>
> >> +
> >> +#include <Library/BaseLib.h>
> >> +#include <Library/SerialPortLib.h>
> >> +#include <Library/XenHypercallLib.h>
> >> +
> >> +#include <IndustryStandard/Xen/io/console.h>
> >> +#include <IndustryStandard/Xen/hvm/params.h>
> >> +#include <IndustryStandard/Xen/event_channel.h>
> >> +
> >> +STATIC evtchn_send_t              mXenConsoleEventChain;
> >> +STATIC struct xencons_interface   *mXenConsoleInterface;
> >> +
> >> +RETURN_STATUS
> >> +EFIAPI
> >> +SerialPortInitialize (
> >> +  VOID
> >> +  )
> >> +{
> >> +  mXenConsoleEventChain.port = (UINT32)XenHypercallHvmGetParam (HVM_PARAM_CONSOLE_EVTCHN);
> >> +  mXenConsoleInterface = (struct xencons_interface *)(UINTN)
> >> +    (XenHypercallHvmGetParam (HVM_PARAM_CONSOLE_PFN) << EFI_PAGE_SHIFT);
> >> +
> >> +  //
> >> +  // No point in ASSERT'ing here as we won't be seeing the output
> >> +  //
> >> +  return RETURN_SUCCESS;
> >> +}
> >> +
> >> +/**
> >> +  Write data to serial device.
> >> +
> >> +  @param  Buffer           Point of data buffer which need to be written.
> >> +  @param  NumberOfBytes    Number of output bytes which are cached in Buffer.
> >> +
> >> +  @retval 0                Write data failed.
> >> +  @retval !0               Actual number of bytes written to serial device.
> >> +
> >> +**/
> >> +UINTN
> >> +EFIAPI
> >> +SerialPortWrite (
> >> +  IN UINT8     *Buffer,
> >> +  IN UINTN     NumberOfBytes
> >> +  )
> >> +{
> >> +  XENCONS_RING_IDX  Consumer, Producer;
> >> +  UINTN             Sent;
> >> +
> >> +  if (!mXenConsoleInterface) {
> >> +    return 0;
> >> +  }
> >> +
> >> +  Consumer = mXenConsoleInterface->out_cons;
> >> +  Producer = mXenConsoleInterface->out_prod;
> >> +
> >> +  MemoryFence ();
> >> +
> >> +  Sent = 0;
> >> +  while (Sent < NumberOfBytes && ((Producer - Consumer) < sizeof (mXenConsoleInterface->out)))
> >> +    mXenConsoleInterface->out[MASK_XENCONS_IDX(Producer++, mXenConsoleInterface->out)] = Buffer[Sent++];
> >> +
> >> +  MemoryFence ();
> >> +
> >> +  mXenConsoleInterface->out_prod = Producer;
> >> +
> >> +  if (Sent > 0) {
> >> +    XenHypercallEventChannelOp (EVTCHNOP_send, &mXenConsoleEventChain);
> >> +  }
> >> +
> >> +  return Sent;
> >> +}
> >> +
> >> +/**
> >> +  Read data from serial device and save the data in buffer.
> >> +
> >> +  @param  Buffer           Point of data buffer which need to be written.
> >> +  @param  NumberOfBytes    Size of Buffer[].
> >> +
> >> +  @retval 0                Read data failed.
> >> +  @retval !0               Actual number of bytes read from serial device.
> >> +
> >> +**/
> >> +UINTN
> >> +EFIAPI
> >> +SerialPortRead (
> >> +  OUT UINT8     *Buffer,
> >> +  IN  UINTN     NumberOfBytes
> >> +)
> >> +{
> >> +  XENCONS_RING_IDX  Consumer, Producer;
> >> +  UINTN             Received;
> >> +
> >> +  if (!mXenConsoleInterface) {
> >> +    return 0;
> >> +  }
> >> +
> >> +  Consumer = mXenConsoleInterface->in_cons;
> >> +  Producer = mXenConsoleInterface->in_prod;
> >> +
> >> +  MemoryFence ();
> >> +
> >> +  Received = 0;
> >> +  while (Received < NumberOfBytes && Consumer < Producer)
> >> +     Buffer[Received++] = mXenConsoleInterface->in[MASK_XENCONS_IDX(Consumer++, mXenConsoleInterface->in)];
> >> +
> >> +  MemoryFence ();
> >> +
> >> +  mXenConsoleInterface->in_cons = Consumer;
> >> +
> >> +  XenHypercallEventChannelOp (EVTCHNOP_send, &mXenConsoleEventChain);
> >> +
> >> +  return Received;
> >> +}
> >> +
> >> +/**
> >> +  Check to see if any data is available to be read from the debug device.
> >> +
> >> +  @retval TRUE       At least one byte of data is available to be read
> >> +  @retval FALSE      No data is available to be read
> >> +
> >> +**/
> >> +BOOLEAN
> >> +EFIAPI
> >> +SerialPortPoll (
> >> +  VOID
> >> +  )
> >> +{
> >> +  return mXenConsoleInterface &&
> >> +    mXenConsoleInterface->in_cons != mXenConsoleInterface->in_prod;
> >
> > Do you need a memory barrier after reading in_cons and in_prod and
> > before comparing them, to make sure that the view is consistent?
> >
> 
> I don't think so. The memory reads both have to complete before the
> comparison can be performed, and the comparison itself is not a memory
> access.

I think that you are right


> >
> >> +}
> >> diff --git a/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
> >> new file mode 100644
> >> index 000000000000..f7925b3e6bc3
> >> --- /dev/null
> >> +++ b/OvmfPkg/Library/XenConsoleSerialPortLib/XenConsoleSerialPortLib.inf
> >> @@ -0,0 +1,34 @@
> >> +#/** @file
> >> +#
> >> +#  Component description file for XenConsoleSerialPortLib module
> >> +#
> >> +#  Copyright (c) 2015, Linaro Ltd. All rights reserved.<BR>
> >> +#
> >> +#  This program and the accompanying materials
> >> +#  are licensed and made available under the terms and conditions of the BSD License
> >> +#  which accompanies this distribution.  The full text of the license may be found at
> >> +#  http://opensource.org/licenses/bsd-license.php
> >> +#
> >> +#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
> >> +#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
> >> +#
> >> +#**/
> >> +
> >> +[Defines]
> >> +  INF_VERSION                    = 0x00010005
> >> +  BASE_NAME                      = XenConsoleSerialPortLib
> >> +  FILE_GUID                      = 401406DD-BCAC-4B91-9F4E-72A7FEBE4762
> >> +  MODULE_TYPE                    = BASE
> >> +  VERSION_STRING                 = 1.0
> >> +  LIBRARY_CLASS                  = SerialPortLib
> >> +
> >> +[Sources.common]
> >> +  XenConsoleSerialPortLib.c
> >> +
> >> +[LibraryClasses]
> >> +  BaseLib
> >> +  XenHypercallLib
> >> +
> >> +[Packages]
> >> +  MdePkg/MdePkg.dec
> >> +  OvmfPkg/OvmfPkg.dec
> >> --
> >> 1.8.3.2
> >>
> 

  parent reply	other threads:[~2015-01-26 11:22 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1422025390-8036-1-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 15:02 ` [PATCH v1 01/21] ArmPkg: allow HYP timer interrupt to be omitted Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 02/21] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 03/21] ArmVirtualizationPkg: replace instance of FixedPcdGet() Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 04/21] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 05/21] ArmVirtualizationPkg: use a HOB to store device tree blob Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 06/21] ArmVirtualizationPkg: add padding to FDT allocation Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 07/21] ArmPlatformPkg/PrePi: factor out FixedPcdGetXX() and ArmIsMpCore() Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 08/21] ArmPlatformPkg/PrePi: add a relocatable version of PrePi Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 09/21] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Ard Biesheuvel
2015-01-23 15:02 ` [PATCH v1 10/21] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 11/21] Ovmf/Xen: move Xen interface version to <xen.h> Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 12/21] Ovmf/Xen: fix pointer to int cast in XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 13/21] Ovmf/Xen: move arch specific hypercall implementation to XenHypercallLib Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 14/21] Ovmf/Xen: allow non-PCI usage of XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 15/21] Ovmf/Xen: implement XenHypercallLib for ARM Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 16/21] Ovmf/Xen: add ARM and AArch64 support to XenBusDxe Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 17/21] Ovmf/Xen: add Xen PV console SerialPortLib driver Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 18/21] Ovmf/Xen: implement dummy RealTimeClockLib for Xen Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 19/21] Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 20/21] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Ard Biesheuvel
2015-01-23 15:03 ` [PATCH v1 21/21] ArmVirtualizationPkg: add platform description for Xen guests Ard Biesheuvel
     [not found] ` <1422025390-8036-14-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:24   ` [PATCH v1 13/21] Ovmf/Xen: move arch specific hypercall implementation to XenHypercallLib Stefano Stabellini
2015-01-24  0:02     ` Laszlo Ersek
     [not found] ` <1422025390-8036-16-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:41   ` [PATCH v1 15/21] Ovmf/Xen: implement XenHypercallLib for ARM Stefano Stabellini
2015-01-23 19:00     ` Ard Biesheuvel
     [not found] ` <1422025390-8036-18-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:54   ` [PATCH v1 17/21] Ovmf/Xen: add Xen PV console SerialPortLib driver Stefano Stabellini
2015-01-23 19:19     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu8fE6xirv0U-T_e0SrQx_x0-STMo-rfUedO=xsnSa+X2A@mail.gmail.com>
2015-01-26 11:22       ` Stefano Stabellini [this message]
     [not found] ` <1422025390-8036-21-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 19:03   ` [PATCH v1 20/21] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Stefano Stabellini
2015-01-23 19:22     ` Ard Biesheuvel
2015-01-23 19:08 ` [PATCH v1 00/21] Xen/ARM guest support Laszlo Ersek
     [not found] ` <1422025390-8036-2-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:41   ` [PATCH v1 01/21] ArmPkg: allow HYP timer interrupt to be omitted Olivier Martin
2015-01-23 19:17   ` Laszlo Ersek
     [not found] ` <1422025390-8036-3-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:41   ` [PATCH v1 02/21] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Olivier Martin
2015-01-23 19:20   ` Laszlo Ersek
     [not found] ` <1422025390-8036-4-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 16:59   ` [PATCH v1 03/21] ArmVirtualizationPkg: replace instance of FixedPcdGet() Olivier Martin
2015-01-23 19:38   ` Laszlo Ersek
     [not found]   ` <54C2A34B.8010507@redhat.com>
2015-01-26 10:57     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu_qDfxACEqoxbW2h84R4kd2Eng8oNo6J4sU=5OuH=ELEA@mail.gmail.com>
2015-01-26 11:11       ` Laszlo Ersek
     [not found] ` <1422025390-8036-10-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 20:59   ` [PATCH v1 09/21] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Laszlo Ersek
     [not found]   ` <54C2B619.7060800@redhat.com>
2015-01-26 11:35     ` Ard Biesheuvel
     [not found] ` <1422025390-8036-11-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 21:09   ` [PATCH v1 10/21] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Laszlo Ersek
     [not found] ` <1422025390-8036-12-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:07   ` [PATCH v1 11/21] Ovmf/Xen: move Xen interface version to <xen.h> Stefano Stabellini
2015-01-23 23:54   ` Laszlo Ersek
     [not found] ` <1422025390-8036-13-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 18:14   ` [PATCH v1 12/21] Ovmf/Xen: fix pointer to int cast in XenBusDxe Stefano Stabellini
2015-01-24  0:00   ` Laszlo Ersek
     [not found] ` <1422025390-8036-15-git-send-email-ard.biesheuvel@linaro.org>
2015-01-26  9:27   ` [PATCH v1 14/21] Ovmf/Xen: allow non-PCI usage of XenBusDxe Laszlo Ersek
     [not found]   ` <54C60883.8030706@redhat.com>
2015-01-26  9:46     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu9qdLjngX9j6wppT+sucCEhwDW4Cnfez2QJC5p+FAm4uw@mail.gmail.com>
2015-01-26 10:28       ` Laszlo Ersek
     [not found]       ` <54C616D7.2030407@redhat.com>
2015-01-26 13:52         ` Ard Biesheuvel
     [not found]         ` <CAKv+Gu_6zrybkQ_zFghuh8s7odSeC=swLvbx41ukd9LJdx0x8w@mail.gmail.com>
2015-01-26 14:10           ` Laszlo Ersek
     [not found]           ` <54C64AED.8030800@redhat.com>
2015-01-26 14:19             ` Ard Biesheuvel
     [not found] ` <1422025390-8036-5-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 19:44   ` [PATCH v1 04/21] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Laszlo Ersek
2015-01-26 10:54   ` Olivier Martin
     [not found] ` <1422025390-8036-6-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 20:22   ` [PATCH v1 05/21] ArmVirtualizationPkg: use a HOB to store device tree blob Laszlo Ersek
2015-01-26 11:08   ` Olivier Martin
     [not found] ` <1422025390-8036-7-git-send-email-ard.biesheuvel@linaro.org>
2015-01-23 23:52   ` [PATCH v1 06/21] ArmVirtualizationPkg: add padding to FDT allocation Laszlo Ersek
2015-01-26 11:47   ` Olivier Martin
     [not found]   ` <54c6294f.8638e50a.7237.ffffa2f5SMTPIN_ADDED_BROKEN@mx.google.com>
2015-01-26 11:48     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu9ZDwbZ+O+JPAm44_FbjEYXcTK+yn5=7U4Cn88niLqJOA@mail.gmail.com>
2015-01-26 11:51       ` Olivier Martin

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=alpine.DEB.2.02.1501261122020.13428@kaball.uk.xensource.com \
    --to=stefano.stabellini@eu.citrix.com \
    --cc=anthony.perard@citrix.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=christoffer.dall@linaro.org \
    --cc=edk2-devel@lists.sourceforge.net \
    --cc=ian.campbell@citrix.com \
    --cc=ilias.biris@linaro.org \
    --cc=leif.lindholm@linaro.org \
    --cc=lersek@redhat.com \
    --cc=olivier.martin@arm.com \
    --cc=roy.franz@linaro.org \
    --cc=xen-devel@lists.xen.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.