>
>
>> -----Original Message-----
>> From: Ola Liljedahl [mailto:ola.liljed...@arm.com]
>> Sent: Wednesday, June 21, 2017 7:31 PM
>> To: Savolainen, Petri (Nokia - FI/Espoo) <petri.savolai...@nokia.com>;
>> Brian Brooks <brian.bro...@arm.com>; lng-odp@lists.linaro.org
>> Cc: nd <n...@arm.com>
>> Subject: Re: [lng-odp] [API-NEXT PATCH v9 4/6] linux-gen: sched
>>scalable:
>> add a concurrent queue
>> 
>> 
>> 
>> 
>> 
>> On 20/06/2017, 15:12, "Savolainen, Petri (Nokia - FI/Espoo)"
>> <petri.savolai...@nokia.com> wrote:
>> 
>> >> +++ b/platform/linux-generic/include/odp_llqueue.h
>> >> @@ -0,0 +1,309 @@
>> >> +/* Copyright (c) 2017, ARM Limited.
>> >> + * All rights reserved.
>> >> + *
>> >> + * SPDX-License-Identifier:        BSD-3-Clause
>> >> + */
>> >> +
>> >> +#ifndef ODP_LLQUEUE_H_
>> >> +#define ODP_LLQUEUE_H_
>> >> +
>> >> +#include <odp/api/cpu.h>
>> >> +#include <odp/api/hints.h>
>> >> +#include <odp/api/spinlock.h>
>> >> +
>> >> +#include <odp_config_internal.h>
>> >> +#include <odp_debug_internal.h>
>> >> +#include <odp_cpu.h>
>> >> +
>> >> +#include <stdint.h>
>> >> +#include <stdlib.h>
>> >> +
>> >>
>> 
>>>>+/*********************************************************************
>>>>*
>> *
>> >>*
>> >> ******
>> >> + * Linked list queues
>> >> +
>> >>
>> 
>>>>***********************************************************************
>>>>*
>> *
>> >>*
>> >> ***/
>> >> +
>> >> +struct llqueue;
>> >> +struct llnode;
>> >> +
>> >> +static struct llnode *llq_head(struct llqueue *llq);
>> >> +static void llqueue_init(struct llqueue *llq);
>> >> +static void llq_enqueue(struct llqueue *llq, struct llnode *node);
>> >> +static struct llnode *llq_dequeue(struct llqueue *llq);
>> >> +static odp_bool_t llq_dequeue_cond(struct llqueue *llq, struct
>>llnode
>> >> *exp);
>> >> +static odp_bool_t llq_cond_rotate(struct llqueue *llq, struct llnode
>> >> *node);
>> >> +static odp_bool_t llq_on_queue(struct llnode *node);
>> >> +
>> >>
>> 
>>>>+/*********************************************************************
>>>>*
>> *
>> >>*
>> >> ******
>> >> + * The implementation(s)
>> >> +
>> >>
>> 
>>>>***********************************************************************
>>>>*
>> *
>> >>*
>> >> ***/
>> >> +
>> >> +#define SENTINEL ((void *)~(uintptr_t)0)
>> >> +
>> >> +#ifdef CONFIG_LLDSCD
>> >> +/* Implement queue operations using double-word LL/SC */
>> >
>> >> +
>> >> +#else
>> >> +/* Implement queue operations protected by a spin lock */
>> >> +
>> >
>> >There's a lot of ifdef'ed code in this file, basically two full
>>parallel
>> >implementations.
>> This horse has been flogged before on the mailing list.
>
>Nothing has changed in our ifdef policy. The less ifdef'ed code, the
>better. This patch set introduces about 60 new #ifdef/#if/#ifndefs (when
>header file guards are not calculated).
Yes but we already had agreement on how to handle this one. Now you are
disagreeing with the maintainers?

Ideally, files/definitions (on an item-by-item basis) in the arch-specific
subdirectories should override the default implementations in the
arch/default directory. Then we wouldn¹t have to put duplicate
implementations in every arch subdirectory (and ODP linux-generic would
build for any architecture, also those not explicitly recognised).
Arch/default would have an llqueue.c with the lock-based code and arch/arm
would have an llqueue.c with the lld/scd implementation.

>
>
>> 
>> > The first is built only for ARM and the second for the rest. Would
>>there
>> >be a way to build both always ?
>> For ARMv7a and ARMv8a, you could build both versions. You really want to
>> use the LL/SC version on these architectures.
>> 
>> For architectures without double-word LL/SC, only the lock-based version
>> can be built.
>
>
>You could *compile* the lock version always. It's based on locks, not on
>arch specific instructions.
Yes we could always build the lock-based code but then we would need to
refer to these functions from some other function in order to avoid the
function-not-used error (but there would most likely be some code that
would not actually be called even if it is compiled). It can be done.

>
>-Petri
>

Reply via email to