On 18 December 2014 at 22:25, Maxim Uvarov <[email protected]> wrote:
> On 12/19/2014 12:18 AM, Ola Liljedahl wrote:
>>
>> On 18 December 2014 at 22:16, Maxim Uvarov <[email protected]>
>> wrote:
>>>
>>> On 12/18/2014 09:02 PM, Mike Holmes wrote:
>>>>
>>>> Maxim is this scheduled for 0.7 ? I think the tests from Yan,Barry,Mario
>>>> require it
>>>>
>>> If it's ready I think we don't need to wait and include it. Working on
>>> validation / merge...
>>
>> The patch is ready (including reviewed).
>> As it is a pure addition, it cannot break anything.
>
>
> As Linus said never never trust to "it cannot break anything" and always
> test patches before inclusion.
> Even in odp I found several times that one line patch may not compile for
> non x86.
I test on x86-64 (but not 32-bit x86) and ARMv7 using GCC 4.8. If it
breaks on some other architecture or with some other compiler it has
to be detected elsewhere and someone post a patch.


>
> Maxim.
>
>>
>>> Maxim.
>>>
>>>
>>>> On 10 December 2014 at 08:29, Bill Fischofer <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>>
>>>>
>>>>
>>>>      On Wed, Dec 10, 2014 at 4:55 AM, Ola Liljedahl
>>>>      <[email protected] <mailto:[email protected]>> wrote:
>>>>
>>>>          Signed-off-by: Ola Liljedahl <[email protected]
>>>>          <mailto:[email protected]>>
>>>>
>>>>
>>>>      Reviewed-by: Bill Fischofer <[email protected]
>>>>      <mailto:[email protected]>>
>>>>
>>>>
>>>>          ---
>>>>          (This document/code contribution attached is provided under
>>>>          the terms of
>>>>          agreement LES-LTM-21309)
>>>>          Implemented the missing odp_ticketlock_trylock().
>>>>
>>>>           platform/linux-generic/odp_ticketlock.c | 30
>>>>          ++++++++++++++++++++++++++++++
>>>>           1 file changed, 30 insertions(+)
>>>>
>>>>          diff --git a/platform/linux-generic/odp_ticketlock.c
>>>>          b/platform/linux-generic/odp_ticketlock.c
>>>>          index 682b01b..6525786 100644
>>>>          --- a/platform/linux-generic/odp_ticketlock.c
>>>>          +++ b/platform/linux-generic/odp_ticketlock.c
>>>>          @@ -34,6 +34,36 @@ void odp_ticketlock_lock(odp_ticketlock_t
>>>>          *ticketlock)
>>>>                          odp_spin();
>>>>           }
>>>>
>>>>          +int odp_ticketlock_trylock(odp_ticketlock_t *tklock)
>>>>          +{
>>>>          +       /* We read 'next_ticket' and 'cur_ticket'
>>>>          non-atomically which should
>>>>          +        * not be a problem as they are not independent of
>>>>          each other.
>>>>          +        * 'cur_ticket' is always <= to 'next_ticket' and if
>>>>          we see an
>>>>          +        * older value of 'cur_ticket', this only means the
>>>>          lock will
>>>>          +        * look busy and trylock will fail. */
>>>>          +       uint32_t next =
>>>> odp_atomic_load_u32(&tklock->next_ticket);
>>>>          +       uint32_t cur =
>>>> odp_atomic_load_u32(&tklock->cur_ticket);
>>>>          +       /* First check that lock is available and possible to
>>>>          take without
>>>>          +        * spinning. */
>>>>          +       if (next == cur) {
>>>>          +               /* Then try to take the lock by incrementing
>>>>          'next_ticket'
>>>>          +                * but only if it still has the original value
>>>>          which is
>>>>          +                * equal to 'cur_ticket'.
>>>>          +                * We don't have to include 'cur_ticket' in
>>>>          the comparison
>>>>          +                * because it cannot be larger than
>>>>          'next_ticket' (only
>>>>          +                * smaller if the lock is busy).
>>>>          +                * If CAS fails, it means some other thread
>>>>          intercepted and
>>>>          +                * took a ticket which means the lock is not
>>>>          available
>>>>          +                * anymore */
>>>>          +               if
>>>>          (_odp_atomic_u32_cmp_xchg_strong_mm(&tklock->next_ticket,
>>>>          +       &next,
>>>>          +       next + 1,
>>>>          +       _ODP_MEMMODEL_ACQ,
>>>>          +       _ODP_MEMMODEL_RLX))
>>>>          +                       return 1;
>>>>          +       }
>>>>          +       return 0;
>>>>          +}
>>>>
>>>>           void odp_ticketlock_unlock(odp_ticketlock_t *ticketlock)
>>>>           {
>>>>          --
>>>>          1.9.1
>>>>
>>>>
>>>>          _______________________________________________
>>>>          lng-odp mailing list
>>>>          [email protected] <mailto:[email protected]>
>>>>          http://lists.linaro.org/mailman/listinfo/lng-odp
>>>>
>>>>
>>>>
>>>>      _______________________________________________
>>>>      lng-odp mailing list
>>>>      [email protected] <mailto:[email protected]>
>>>>      http://lists.linaro.org/mailman/listinfo/lng-odp
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> *Mike Holmes*
>>>> Linaro  Sr Technical Manager
>>>> LNG - ODP
>>>>
>>>>
>>>> _______________________________________________
>>>> lng-odp mailing list
>>>> [email protected]
>>>> http://lists.linaro.org/mailman/listinfo/lng-odp
>>>
>>>
>>>
>>> _______________________________________________
>>> lng-odp mailing list
>>> [email protected]
>>> http://lists.linaro.org/mailman/listinfo/lng-odp
>
>

_______________________________________________
lng-odp mailing list
[email protected]
http://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to