From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Jordan Justen <jordan.l.justen@intel.com>
Cc: "Tian, Feng" <feng.tian@intel.com>,
Julien Grall <julien.grall@linaro.org>,
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>,
"Kinney, Michael D" <michael.d.kinney@intel.com>,
Anthony PERARD <anthony.perard@citrix.com>,
Laszlo Ersek <lersek@redhat.com>
Subject: Re: [PATCH v4 14/29] MdePkg/BaseSynchronizationLib: implement 16-bit compare-exchange
Date: Mon, 23 Feb 2015 20:33:00 +0000 [thread overview]
Message-ID: <CAKv+Gu_Lt4y-Lxv+89H_0eqXZvbR0sx=bQvKwd-4+LQPF_L0Rg__28976.6202251942$1424723712$gmane$org@mail.gmail.com> (raw)
In-Reply-To: <CAKv+Gu8M-V4Vgf2+sHLZS+n37Qbm+TxJpFpU27qDfHt=gR3+Bw@mail.gmail.com>
On 18 February 2015 at 08:37, Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote:
> On 17 February 2015 at 18:40, Jordan Justen <jordan.l.justen@intel.com> wrote:
>> Ard,
>>
>> For the subject, I think
>> MdePkg/BaseSynchronizationLib: Add InterlockedCompareExchange16
>> would be better.
>>
>
> OK
>
>> Acked-by: Jordan Justen <jordan.l.justen@intel.com>
>>
>
> Thanks
>
>> Thanks for working to move this to a common location.
>>
>
> No problem
>
>> Mike,
>>
>> I think Anthony tested the IA32 and X64 implementations with Xen. For
>> IPF, I don't think it has been tested.
>>
>
> As mentioned in the other thread, Anthony seems to be incommunicado,
> and some other of the Xen guys have replied that Xen on OVMF/x86 is
> broken for other reasons so they cannot positively confirm that
> everything still works, even though the x86 changes other than the
> PCI/xenbus split are primarily refactoring of existing code.
>
> As far as IPF is concerned: I don't think Xen or Ovmf can be built for
> IPF anyway, but I think a build test and visual inspection of the .S
> file should be sufficient here?
>
Hello Jordan, Michael,
As I mentioned in the other thread, this series is now tested on ARM
and x86, and no regressions were reported.
The only thing holding back this series is the confirmation that the
IPF build has not been broken by introducing the
InterlockedCompareExchange16() function, which i would gladly test
myself, but I really don't have access to the required build
environment.
So please, could you have a look, or perhaps appoint someone else to
handle it in your place?
Thanks,
Ard.
>> On 2015-02-12 03:19:06, Ard Biesheuvel wrote:
>>> This implements the function InterlockedCompareExchange16 () for all
>>> architectures, using architecture and toolchain specific intrinsics
>>> or primitive assembler instructions.
>>>
>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>> Reviewed-by: Olivier Martin <olivier.martin@arm.com>
>>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
>>> ---
>>> MdePkg/Include/Library/SynchronizationLib.h | 26 ++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S | 44 ++++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S | 44 ++++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm | 44 ++++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf | 5 +++++
>>> MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLibInternals.h | 26 ++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Ebc/Synchronization.c | 31 +++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c | 42 ++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.asm | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Ipf/InterlockedCompareExchange16.s | 30 ++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/Synchronization.c | 31 +++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/SynchronizationGcc.c | 31 +++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/SynchronizationMsc.c | 31 +++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/X64/GccInline.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.asm | 42 ++++++++++++++++++++++++++++++++++++++++++
>>> MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>> 17 files changed, 622 insertions(+)
>>>
>>> diff --git a/MdePkg/Include/Library/SynchronizationLib.h b/MdePkg/Include/Library/SynchronizationLib.h
>>> index f97569739914..7b97683ca0af 100644
>>> --- a/MdePkg/Include/Library/SynchronizationLib.h
>>> +++ b/MdePkg/Include/Library/SynchronizationLib.h
>>> @@ -184,6 +184,32 @@ InterlockedDecrement (
>>>
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + If Value is NULL, then ASSERT().
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InterlockedCompareExchange16 (
>>> + IN OUT UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + );
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S b/MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S
>>> index 601b00495f26..ecb87fc12755 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/AArch64/Synchronization.S
>>> @@ -16,12 +16,56 @@
>>> .text
>>> .align 3
>>>
>>> +GCC_ASM_EXPORT(InternalSyncCompareExchange16)
>>> GCC_ASM_EXPORT(InternalSyncCompareExchange32)
>>> GCC_ASM_EXPORT(InternalSyncCompareExchange64)
>>> GCC_ASM_EXPORT(InternalSyncIncrement)
>>> GCC_ASM_EXPORT(InternalSyncDecrement)
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +//UINT16
>>> +//EFIAPI
>>> +//InternalSyncCompareExchange16 (
>>> +// IN volatile UINT16 *Value,
>>> +// IN UINT16 CompareValue,
>>> +// IN UINT16 ExchangeValue
>>> +// )
>>> +ASM_PFX(InternalSyncCompareExchange16):
>>> + uxth w1, w1
>>> + uxth w2, w2
>>> + dmb sy
>>> +
>>> +InternalSyncCompareExchange16Again:
>>> + ldxrh w3, [x0]
>>> + cmp w3, w1
>>> + bne InternalSyncCompareExchange16Fail
>>> +
>>> +InternalSyncCompareExchange16Exchange:
>>> + stxrh w4, w2, [x0]
>>> + cbnz w4, InternalSyncCompareExchange16Again
>>> +
>>> +InternalSyncCompareExchange16Fail:
>>> + dmb sy
>>> + mov w0, w3
>>> + ret
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S b/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S
>>> index 0128f8f016bd..d699eb40d2a2 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.S
>>> @@ -1,6 +1,7 @@
>>> // Implementation of synchronization functions for ARM architecture
>>> //
>>> // Copyright (c) 2012-2015, ARM Limited. All rights reserved.
>>> +// Copyright (c) 2015, Linaro Limited. All rights reserved.
>>> //
>>> // This program and the accompanying materials
>>> // are licensed and made available under the terms and conditions of the BSD License
>>> @@ -15,12 +16,55 @@
>>> .text
>>> .align 3
>>>
>>> +GCC_ASM_EXPORT(InternalSyncCompareExchange16)
>>> GCC_ASM_EXPORT(InternalSyncCompareExchange32)
>>> GCC_ASM_EXPORT(InternalSyncCompareExchange64)
>>> GCC_ASM_EXPORT(InternalSyncIncrement)
>>> GCC_ASM_EXPORT(InternalSyncDecrement)
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +//UINT16
>>> +//EFIAPI
>>> +//InternalSyncCompareExchange16 (
>>> +// IN volatile UINT16 *Value,
>>> +// IN UINT16 CompareValue,
>>> +// IN UINT16 ExchangeValue
>>> +// )
>>> +ASM_PFX(InternalSyncCompareExchange16):
>>> + dmb
>>> +
>>> +InternalSyncCompareExchange16Again:
>>> + ldrexh r3, [r0]
>>> + cmp r3, r1
>>> + bne InternalSyncCompareExchange16Fail
>>> +
>>> +InternalSyncCompareExchange16Exchange:
>>> + strexh ip, r2, [r0]
>>> + cmp ip, #0
>>> + bne InternalSyncCompareExchange16Again
>>> +
>>> +InternalSyncCompareExchange16Fail:
>>> + dmb
>>> + mov r0, r3
>>> + bx lr
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm b/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm
>>> index f9f80737774a..dbc599114093 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Arm/Synchronization.asm
>>> @@ -1,6 +1,7 @@
>>> // Implementation of synchronization functions for ARM architecture
>>> //
>>> // Copyright (c) 2012-2015, ARM Limited. All rights reserved.
>>> +// Copyright (c) 2015, Linaro Limited. All rights reserved.
>>> //
>>> // This program and the accompanying materials
>>> // are licensed and made available under the terms and conditions of the BSD License
>>> @@ -12,6 +13,7 @@
>>> //
>>> //
>>>
>>> + EXPORT InternalSyncCompareExchange16
>>> EXPORT InternalSyncCompareExchange32
>>> EXPORT InternalSyncCompareExchange64
>>> EXPORT InternalSyncIncrement
>>> @@ -20,6 +22,48 @@
>>> AREA ArmSynchronization, CODE, READONLY
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +//UINT16
>>> +//EFIAPI
>>> +//InternalSyncCompareExchange16 (
>>> +// IN volatile UINT16 *Value,
>>> +// IN UINT16 CompareValue,
>>> +// IN UINT16 ExchangeValue
>>> +// )
>>> +InternalSyncCompareExchange16
>>> + dmb
>>> +
>>> +InternalSyncCompareExchange16Again
>>> + ldrexh r3, [r0]
>>> + cmp r3, r1
>>> + bne InternalSyncCompareExchange16Fail
>>> +
>>> +InternalSyncCompareExchange16Exchange
>>> + strexh ip, r2, [r0]
>>> + cmp ip, #0
>>> + bne InternalSyncCompareExchange16Again
>>> +
>>> +InternalSyncCompareExchange16Fail
>>> + dmb
>>> + mov r0, r3
>>> + bx lr
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf b/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
>>> index 5e3b4e6b9bf2..bd1bec3fb5e7 100755
>>> --- a/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
>>> @@ -32,12 +32,14 @@
>>> [Sources.IA32]
>>> Ia32/InterlockedCompareExchange64.c | MSFT
>>> Ia32/InterlockedCompareExchange32.c | MSFT
>>> + Ia32/InterlockedCompareExchange16.c | MSFT
>>> Ia32/InterlockedDecrement.c | MSFT
>>> Ia32/InterlockedIncrement.c | MSFT
>>> SynchronizationMsc.c | MSFT
>>>
>>> Ia32/InterlockedCompareExchange64.asm | INTEL
>>> Ia32/InterlockedCompareExchange32.asm | INTEL
>>> + Ia32/InterlockedCompareExchange16.asm | INTEL
>>> Ia32/InterlockedDecrement.asm | INTEL
>>> Ia32/InterlockedIncrement.asm | INTEL
>>> Synchronization.c | INTEL
>>> @@ -48,9 +50,11 @@
>>> [Sources.X64]
>>> X64/InterlockedCompareExchange64.c | MSFT
>>> X64/InterlockedCompareExchange32.c | MSFT
>>> + X64/InterlockedCompareExchange16.c | MSFT
>>>
>>> X64/InterlockedCompareExchange64.asm | INTEL
>>> X64/InterlockedCompareExchange32.asm | INTEL
>>> + X64/InterlockedCompareExchange16.asm | INTEL
>>>
>>> X64/InterlockedDecrement.c | MSFT
>>> X64/InterlockedIncrement.c | MSFT
>>> @@ -67,6 +71,7 @@
>>> Ipf/Synchronization.c
>>> Ipf/InterlockedCompareExchange64.s
>>> Ipf/InterlockedCompareExchange32.s
>>> + Ipf/InterlockedCompareExchange16.s
>>>
>>> Synchronization.c | INTEL
>>> SynchronizationMsc.c | MSFT
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLibInternals.h b/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLibInternals.h
>>> index e42824c75d12..76f702324156 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLibInternals.h
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLibInternals.h
>>> @@ -63,6 +63,32 @@ InternalSyncDecrement (
>>>
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue A 16-bit value used in compare operation.
>>> + @param ExchangeValue A 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InternalSyncCompareExchange16 (
>>> + IN volatile UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + );
>>> +
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Ebc/Synchronization.c b/MdePkg/Library/BaseSynchronizationLib/Ebc/Synchronization.c
>>> index 9c34b9f128ed..a57860203b12 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/Ebc/Synchronization.c
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Ebc/Synchronization.c
>>> @@ -13,6 +13,37 @@
>>> **/
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit
>>> + unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit
>>> + unsigned integer specified by Value. If Value is equal to
>>> + CompareValue, then Value is set to ExchangeValue and
>>> + CompareValue is returned. If Value is not equal to
>>> + CompareValue, then Value is returned. The compare exchange
>>> + operation must be performed using MP safe mechanisms.
>>> +
>>> + @param Value A pointer to the 16-bit value for the
>>> + compare exchange operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InternalSyncCompareExchange16 (
>>> + IN volatile UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> + return *Value != CompareValue ? *Value :
>>> + ((*Value = ExchangeValue), CompareValue);
>>> +}
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit
>>> unsigned integer.
>>>
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c b/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c
>>> index b5a7827fc0e8..bd81aad6c243 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Ia32/GccInline.c
>>> @@ -88,6 +88,48 @@ InternalSyncDecrement (
>>> }
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InternalSyncCompareExchange16 (
>>> + IN OUT volatile UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> +
>>> + __asm__ __volatile__ (
>>> + " \n "
>>> + "lock \n "
>>> + "cmpxchgw %1, %2 \n "
>>> + : "=a" (CompareValue)
>>> + : "q" (ExchangeValue),
>>> + "m" (*Value),
>>> + "0" (CompareValue)
>>> + : "memory",
>>> + "cc"
>>> + );
>>> +
>>> + return CompareValue;
>>> +}
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.asm b/MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.asm
>>> new file mode 100644
>>> index 000000000000..f8705042661d
>>> --- /dev/null
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.asm
>>> @@ -0,0 +1,46 @@
>>> +;------------------------------------------------------------------------------
>>> +;
>>> +; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
>>> +; 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.
>>> +;
>>> +; Module Name:
>>> +;
>>> +; InterlockedCompareExchange16.Asm
>>> +;
>>> +; Abstract:
>>> +;
>>> +; InterlockedCompareExchange16 function
>>> +;
>>> +; Notes:
>>> +;
>>> +;------------------------------------------------------------------------------
>>> +
>>> + .486
>>> + .model flat,C
>>> + .code
>>> +
>>> +;------------------------------------------------------------------------------
>>> +; UINT16
>>> +; EFIAPI
>>> +; InternalSyncCompareExchange16 (
>>> +; IN UINT16 *Value,
>>> +; IN UINT16 CompareValue,
>>> +; IN UINT16 ExchangeValue
>>> +; );
>>> +;------------------------------------------------------------------------------
>>> +InternalSyncCompareExchange16 PROC
>>> + mov ecx, [esp + 4]
>>> + mov eax, [esp + 8]
>>> + mov edx, [esp + 12]
>>> + lock cmpxchg [ecx], dx
>>> + ret
>>> +InternalSyncCompareExchange16 ENDP
>>> +
>>> + END
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.c b/MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.c
>>> new file mode 100644
>>> index 000000000000..3d06dd9baa63
>>> --- /dev/null
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Ia32/InterlockedCompareExchange16.c
>>> @@ -0,0 +1,51 @@
>>> +/** @file
>>> + InterlockedCompareExchange16 function
>>> +
>>> + Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
>>> + 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.
>>> +
>>> +**/
>>> +
>>> +
>>> +
>>> +
>>> +/**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InternalSyncCompareExchange16 (
>>> + IN UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> + _asm {
>>> + mov ecx, Value
>>> + mov eax, CompareValue
>>> + mov edx, ExchangeValue
>>> + lock cmpxchg [ecx], dx
>>> + }
>>> +}
>>> +
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Ipf/InterlockedCompareExchange16.s b/MdePkg/Library/BaseSynchronizationLib/Ipf/InterlockedCompareExchange16.s
>>> new file mode 100644
>>> index 000000000000..1e56942a98cb
>>> --- /dev/null
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Ipf/InterlockedCompareExchange16.s
>>> @@ -0,0 +1,30 @@
>>> +/// @file
>>> +/// Contains an implementation of InterlockedCompareExchange16 on Itanium-
>>> +/// based architecture.
>>> +///
>>> +/// Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
>>> +/// 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.
>>> +///
>>> +/// Module Name: InterlockedCompareExchange16.s
>>> +///
>>> +///
>>> +
>>> +.auto
>>> +.text
>>> +
>>> +.proc InternalSyncCompareExchange16
>>> +.type InternalSyncCompareExchange16, @function
>>> +InternalSyncCompareExchange16::
>>> + zxt2 r33 = r33
>>> + mov ar.ccv = r33
>>> + cmpxchg2.rel r8 = [r32], r34
>>> + mf
>>> + br.ret.sptk.many b0
>>> +.endp InternalSyncCompareExchange16
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/Synchronization.c b/MdePkg/Library/BaseSynchronizationLib/Synchronization.c
>>> index 0eea40ba1622..4218a265a0ec 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/Synchronization.c
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/Synchronization.c
>>> @@ -277,6 +277,37 @@ InterlockedDecrement (
>>> }
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + If Value is NULL, then ASSERT().
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InterlockedCompareExchange16 (
>>> + IN OUT UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> + ASSERT (Value != NULL);
>>> + return InternalSyncCompareExchange16 (Value, CompareValue, ExchangeValue);
>>> +}
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/SynchronizationGcc.c b/MdePkg/Library/BaseSynchronizationLib/SynchronizationGcc.c
>>> index badf73c1a6ce..587f5a771c35 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/SynchronizationGcc.c
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/SynchronizationGcc.c
>>> @@ -293,6 +293,37 @@ InterlockedDecrement (
>>> }
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + If Value is NULL, then ASSERT().
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue A 16-bit value used in compare operation.
>>> + @param ExchangeValue A 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InterlockedCompareExchange16 (
>>> + IN OUT UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> + ASSERT (Value != NULL);
>>> + return InternalSyncCompareExchange16 (Value, CompareValue, ExchangeValue);
>>> +}
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/SynchronizationMsc.c b/MdePkg/Library/BaseSynchronizationLib/SynchronizationMsc.c
>>> index 9b20236acfa6..ca21f5dccee5 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/SynchronizationMsc.c
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/SynchronizationMsc.c
>>> @@ -295,6 +295,37 @@ InterlockedDecrement (
>>> }
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> + If Value is NULL, then ASSERT().
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue A 16-bit value used in a compare operation.
>>> + @param ExchangeValue A 16-bit value used in an exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InterlockedCompareExchange16 (
>>> + IN OUT UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> + ASSERT (Value != NULL);
>>> + return InternalSyncCompareExchange16 (Value, CompareValue, ExchangeValue);
>>> +}
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/X64/GccInline.c b/MdePkg/Library/BaseSynchronizationLib/X64/GccInline.c
>>> index ceb80aed94f8..6347073fee51 100644
>>> --- a/MdePkg/Library/BaseSynchronizationLib/X64/GccInline.c
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/X64/GccInline.c
>>> @@ -89,6 +89,50 @@ InternalSyncDecrement (
>>>
>>>
>>> /**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer
>>> + specified by Value. If Value is equal to CompareValue, then Value is set to
>>> + ExchangeValue and CompareValue is returned. If Value is not equal to CompareValue,
>>> + then Value is returned. The compare exchange operation must be performed using
>>> + MP safe mechanisms.
>>> +
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InternalSyncCompareExchange16 (
>>> + IN OUT volatile UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> +
>>> +
>>> + __asm__ __volatile__ (
>>> + "lock \n "
>>> + "cmpxchgw %3, %1 "
>>> + : "=a" (CompareValue),
>>> + "=m" (*Value)
>>> + : "a" (CompareValue),
>>> + "r" (ExchangeValue),
>>> + "m" (*Value)
>>> + : "memory",
>>> + "cc"
>>> + );
>>> +
>>> + return CompareValue;
>>> +}
>>> +
>>> +
>>> +/**
>>> Performs an atomic compare exchange operation on a 32-bit unsigned integer.
>>>
>>> Performs an atomic compare exchange operation on the 32-bit unsigned integer
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.asm b/MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.asm
>>> new file mode 100644
>>> index 000000000000..8fe2aae1a28b
>>> --- /dev/null
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.asm
>>> @@ -0,0 +1,42 @@
>>> +;------------------------------------------------------------------------------
>>> +;
>>> +; Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
>>> +; 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.
>>> +;
>>> +; Module Name:
>>> +;
>>> +; InterlockedCompareExchange16.Asm
>>> +;
>>> +; Abstract:
>>> +;
>>> +; InterlockedCompareExchange16 function
>>> +;
>>> +; Notes:
>>> +;
>>> +;------------------------------------------------------------------------------
>>> +
>>> + .code
>>> +
>>> +;------------------------------------------------------------------------------
>>> +; UINT16
>>> +; EFIAPI
>>> +; InterlockedCompareExchange16 (
>>> +; IN UINT16 *Value,
>>> +; IN UINT16 CompareValue,
>>> +; IN UINT16 ExchangeValue
>>> +; );
>>> +;------------------------------------------------------------------------------
>>> +InternalSyncCompareExchange16 PROC
>>> + mov eax, edx
>>> + lock cmpxchg [rcx], r8w
>>> + ret
>>> +InternalSyncCompareExchange16 ENDP
>>> +
>>> + END
>>> diff --git a/MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.c b/MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.c
>>> new file mode 100644
>>> index 000000000000..76aa6fbc0e81
>>> --- /dev/null
>>> +++ b/MdePkg/Library/BaseSynchronizationLib/X64/InterlockedCompareExchange16.c
>>> @@ -0,0 +1,54 @@
>>> +/** @file
>>> + InterlockedCompareExchange16 function
>>> +
>>> + Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
>>> + 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.
>>> +
>>> +**/
>>> +
>>> +/**
>>> + Microsoft Visual Studio 7.1 Function Prototypes for I/O Intrinsics.
>>> +**/
>>> +
>>> +__int16 _InterlockedCompareExchange16(
>>> + __int16 volatile * Destination,
>>> + __int16 Exchange,
>>> + __int16 Comperand
>>> +);
>>> +
>>> +#pragma intrinsic(_InterlockedCompareExchange16)
>>> +
>>> +/**
>>> + Performs an atomic compare exchange operation on a 16-bit unsigned integer.
>>> +
>>> + Performs an atomic compare exchange operation on the 16-bit unsigned integer specified
>>> + by Value. If Value is equal to CompareValue, then Value is set to ExchangeValue and
>>> + CompareValue is returned. If Value is not equal to CompareValue, then Value is returned.
>>> + The compare exchange operation must be performed using MP safe mechanisms.
>>> +
>>> + @param Value A pointer to the 16-bit value for the compare exchange
>>> + operation.
>>> + @param CompareValue 16-bit value used in compare operation.
>>> + @param ExchangeValue 16-bit value used in exchange operation.
>>> +
>>> + @return The original *Value before exchange.
>>> +
>>> +**/
>>> +UINT16
>>> +EFIAPI
>>> +InternalSyncCompareExchange16 (
>>> + IN UINT16 *Value,
>>> + IN UINT16 CompareValue,
>>> + IN UINT16 ExchangeValue
>>> + )
>>> +{
>>> + return _InterlockedCompareExchange16 (Value, ExchangeValue, CompareValue);
>>> +}
>>> +
>>> --
>>> 1.8.3.2
>>>
next prev parent reply other threads:[~2015-02-23 20:33 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1423739961-5945-1-git-send-email-ard.biesheuvel@linaro.org>
2015-02-12 11:18 ` [PATCH v4 01/29] ArmPkg: allow HYP timer interrupt to be omitted Ard Biesheuvel
2015-02-12 11:18 ` [PATCH v4 02/29] ArmPkg: allow patchable PCDs for memory, FD and FV addresses Ard Biesheuvel
2015-02-12 11:18 ` [PATCH v4 03/29] ArmPlatformPkg: allow patchable PCD for FD base address Ard Biesheuvel
2015-02-12 11:18 ` [PATCH v4 04/29] ArmVirtualizationPkg: add GICv3 detection to VirtFdtDxe Ard Biesheuvel
2015-02-12 11:18 ` [PATCH v4 05/29] ArmVirtualizationPkg: allow patchable PCD for device tree base address Ard Biesheuvel
2015-02-12 11:18 ` [PATCH v4 06/29] ArmVirtualizationPkg: move early UART discovery to PlatformPeim Ard Biesheuvel
2015-02-12 11:18 ` [PATCH v4 07/29] ArmVirtualizationPkg: use a HOB to store device tree blob Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 08/29] ArmVirtualizationPkg: add padding to FDT allocation Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 09/29] ArmVirtualizationPkg: add a relocatable version of PrePi Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 10/29] ArmVirtualizationPkg: implement custom MemoryInitPeiLib Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 11/29] ArmVirtualizationPkg: allow patchable PCD for FV and DT base addresses Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 12/29] ArmVirtualizationPkg: Xen/PV relocatable platformlib instance Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 13/29] MdePkg/BaseSynchronizationLib: Added proper support for ARM architecture Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 14/29] MdePkg/BaseSynchronizationLib: implement 16-bit compare-exchange Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 15/29] Ovmf/Xen: move Xen interface version to <xen.h> Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 16/29] Ovmf/Xen: fix pointer to int cast in XenBusDxe Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 17/29] Ovmf/Xen: refactor XenBusDxe hypercall implementation Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 18/29] Ovmf/Xen: move XenBusDxe hypercall code to separate library Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 19/29] Ovmf/Xen: introduce XENIO_PROTOCOL Ard Biesheuvel
2015-02-19 17:30 ` Anthony PERARD
2015-02-12 11:19 ` [PATCH v4 20/29] Ovmf/Xen: add separate driver for Xen PCI device Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 21/29] Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 22/29] Ovmf/Xen: implement XenHypercallLib for ARM Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 23/29] Ovmf/Xen: port XenBusDxe to other architectures Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 24/29] Ovmf/Xen: add Xen PV console SerialPortLib driver Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 25/29] ArmVirtualizationPkg: implement dummy RealTimeClockLib for Xen Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 26/29] Ovfm/Xen: add a Vendor Hardware device path GUID for the XenBus root Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 27/29] ArmVirtualizationPkg: add XenIoMmioLib Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 28/29] ArmVirtualizationPkg/VirtFdtDxe: wire up XenBusDxe to "xen, xen" DT node Ard Biesheuvel
2015-02-12 11:19 ` [PATCH v4 29/29] ArmVirtualizationPkg: add platform description for Xen guests Ard Biesheuvel
2015-02-12 21:18 ` [PATCH v4 00/29] Xen/ARM guest support Jordan Justen
[not found] ` <20150212211855.11478.90744@jljusten-hsw>
2015-02-13 0:18 ` Ard Biesheuvel
[not found] ` <1423739961-5945-15-git-send-email-ard.biesheuvel@linaro.org>
2015-02-17 17:40 ` [PATCH v4 14/29] MdePkg/BaseSynchronizationLib: implement 16-bit compare-exchange Jordan Justen
[not found] ` <20150217174047.8141.17529@jljusten-ivy>
2015-02-18 8:37 ` Ard Biesheuvel
[not found] ` <CAKv+Gu8M-V4Vgf2+sHLZS+n37Qbm+TxJpFpU27qDfHt=gR3+Bw@mail.gmail.com>
2015-02-23 20:33 ` Ard Biesheuvel [this message]
2015-02-25 21:56 ` Kinney, Michael D
[not found] ` <E92EE9817A31E24EB0585FDF735412F563081986@ORSMSX113.amr.corp.intel.com>
2015-02-25 22:19 ` Ard Biesheuvel
[not found] ` <1423739961-5945-16-git-send-email-ard.biesheuvel@linaro.org>
2015-02-19 15:02 ` [PATCH v4 15/29] Ovmf/Xen: move Xen interface version to <xen.h> Anthony PERARD
[not found] ` <1423739961-5945-17-git-send-email-ard.biesheuvel@linaro.org>
2015-02-19 15:31 ` [PATCH v4 16/29] Ovmf/Xen: fix pointer to int cast in XenBusDxe Anthony PERARD
[not found] ` <1423739961-5945-18-git-send-email-ard.biesheuvel@linaro.org>
2015-02-19 16:05 ` [PATCH v4 17/29] Ovmf/Xen: refactor XenBusDxe hypercall implementation Anthony PERARD
[not found] ` <1423739961-5945-19-git-send-email-ard.biesheuvel@linaro.org>
2015-02-19 17:25 ` [PATCH v4 18/29] Ovmf/Xen: move XenBusDxe hypercall code to separate library Anthony PERARD
[not found] ` <1423739961-5945-21-git-send-email-ard.biesheuvel@linaro.org>
2015-02-19 18:43 ` [PATCH v4 20/29] Ovmf/Xen: add separate driver for Xen PCI device Anthony PERARD
[not found] ` <1423739961-5945-22-git-send-email-ard.biesheuvel@linaro.org>
2015-02-20 14:10 ` [PATCH v4 21/29] Ovmf/Xen: move XenBusDxe to abstract XENIO_PROTOCOL Anthony PERARD
[not found] ` <1423739961-5945-24-git-send-email-ard.biesheuvel@linaro.org>
2015-02-23 15:16 ` [PATCH v4 23/29] Ovmf/Xen: port XenBusDxe to other architectures Anthony PERARD
[not found] ` <20150223151617.GU1345@perard.uk.xensource.com>
2015-02-23 17:54 ` Ard Biesheuvel
[not found] ` <CAKv+Gu-EA3q4z89WxSZbQ9BUjFU9tnGEQRmEBxjzqM+-_bCuVw@mail.gmail.com>
2015-02-23 18:25 ` Anthony PERARD
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='CAKv+Gu_Lt4y-Lxv+89H_0eqXZvbR0sx=bQvKwd-4+LQPF_L0Rg__28976.6202251942$1424723712$gmane$org@mail.gmail.com' \
--to=ard.biesheuvel@linaro.org \
--cc=anthony.perard@citrix.com \
--cc=edk2-devel@lists.sourceforge.net \
--cc=feng.tian@intel.com \
--cc=ian.campbell@citrix.com \
--cc=jordan.l.justen@intel.com \
--cc=julien.grall@linaro.org \
--cc=leif.lindholm@linaro.org \
--cc=lersek@redhat.com \
--cc=michael.d.kinney@intel.com \
--cc=olivier.martin@arm.com \
--cc=roy.franz@linaro.org \
--cc=stefano.stabellini@eu.citrix.com \
--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.