On 2018-04-17 09:22, Philippe Gerum wrote:
> On 04/13/2018 07:51 PM, Jan Kiszka wrote:
>> None of the callers that run into the locks have RT requirements.
>>
>> Signed-off-by: Jan Kiszka <jan.kis...@siemens.com>
>> ---
>>
>> As noted before, I think we should even be fine with STD locks, but that
>> may require more changes.
>>
>>  lib/copperplate/registry.c | 2 --
>>  1 file changed, 2 deletions(-)
>>
>> diff --git a/lib/copperplate/registry.c b/lib/copperplate/registry.c
>> index daefa6c97..1bf0ebfea 100644
>> --- a/lib/copperplate/registry.c
>> +++ b/lib/copperplate/registry.c
>> @@ -175,7 +175,6 @@ int registry_init_file(struct fsobj *fsobj,
>>  
>>      pthread_mutexattr_init(&mattr);
>>      pthread_mutexattr_settype(&mattr, mutex_type_attribute);
>> -    pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
>>      pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_PRIVATE);
>>      ret = __bt(-__RT(pthread_mutex_init(&fsobj->lock, &mattr)));
>>      pthread_mutexattr_destroy(&mattr);
>> @@ -758,7 +757,6 @@ int __registry_pkg_init(const char *arg0, char *mountpt, 
>> int flags)
>>  
>>      pthread_mutexattr_init(&mattr);
>>      pthread_mutexattr_settype(&mattr, mutex_type_attribute);
>> -    pthread_mutexattr_setprotocol(&mattr, PTHREAD_PRIO_INHERIT);
>>      pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_PRIVATE);
>>      ret = __bt(-__RT(pthread_mutex_init(&p->lock, &mattr)));
>>      pthread_mutexattr_destroy(&mattr);
>>
> 
> This one raises an interesting issue: since commit #8e606e681,
> registry_{add, destroy}_file() use plain malloc(), therefore are subject
> to mode switches, dropping the real-time guarantee from object
> creation/deletion routines such as rt_*_{create, delete}() calls from
> the Alchemy API.
> 
> Previously to such change, some of these routines did not provide such
> guarantee anyway, e.g. rt_task_create(), but others did like
> rt_mutex_create(), rt_cond_create().
> 
> I'm now questioning those specific changes in registry_{add,
> destroy}_file(), because they might break applications assuming that rt
> mode is not lost when calling them, which is still true if the registry
> is disabled, leading to a fairly confusing inconsistency.
> 
> Merging your patch would enforce this change in behavior even more,
> carving in stone that all object creation and deletion routines which
> interface with the registry won't be rt-capable anymore.

Sure, we need to sort out the rt_*_create topic prior to being able to
decide about this one.

> 
> Would that be generally acceptable?

I would not expect a lot use cases to be affected by that. The bare
minimum would be documenting this in the 2->3 migration guide.

OTOH, given that this is the stable series, such a change (8e606e681)
may better wait for 3.1.

> 
> PS: btw, the memory allocation mess is much worse than I suspected, and
> it is globally bad: this is not only a matter of properly sizing the
> private memory heap, but a general performance issues with all
> allocators, on different aspects and usage patterns. I'll follow up on
> this later this week with details.

Is that related to 8e606e681 or does it predate it / is orthogonal to it?

Jan
-- 
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
https://xenomai.org/mailman/listinfo/xenomai

Reply via email to