All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [Xenomai] [Xenomai-git] Jan Kiszka : cobalt/kernel: Fix invalidation of cond shadow
       [not found] <E1aJQEe-0006t5-UO@sd-51317.xenomai.org>
@ 2016-01-13 18:44 ` Philippe Gerum
  2016-01-13 19:42   ` Jan Kiszka
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Gerum @ 2016-01-13 18:44 UTC (permalink / raw)
  To: Kiszka, Jan; +Cc: xenomai

On 01/13/2016 07:33 PM, git repository hosting wrote:
> Module: xenomai-jki
> Branch: for-forge
> Commit: b7d37dab571df0c0cd42aae094c3d5d1bc71db80
> URL:    http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=b7d37dab571df0c0cd42aae094c3d5d1bc71db80
> 
> Author: Jan Kiszka <jan.kiszka@siemens.com>
> Date:   Wed Jan 13 19:31:23 2016 +0100
> 
> cobalt/kernel: Fix invalidation of cond shadow
> 
> pthread_cond_destroy fails to invalidate also the shadow object. This
> can cause spurious -EBUSY errors on re-initialization of the very same
> shadow as condition variable later on.
> 
> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
> 
> ---
> 
>  kernel/cobalt/posix/cond.c |    2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/kernel/cobalt/posix/cond.c b/kernel/cobalt/posix/cond.c
> index 7e115cf..84ae8fd 100644
> --- a/kernel/cobalt/posix/cond.c
> +++ b/kernel/cobalt/posix/cond.c
> @@ -117,6 +117,8 @@ static inline int pthread_cond_destroy(struct cobalt_cond_shadow *cnd)
>  
>  	cobalt_cond_reclaim(&cond->resnode, s); /* drops lock */
>  
> +	cobalt_mark_deleted(cnd);
> +
>  	return 0;
>  }
>  
>

cobalt_cond_reclaim() invalidates the shadow object already. Did you
observe -EBUSY already? If so, maybe a rescheduling happens early when
flushing the synchro object, before the invalidation takes place in that
routine.

i.e.

diff --git a/kernel/cobalt/posix/cond.c b/kernel/cobalt/posix/cond.c
index 7e115cf..3f81b47 100644
--- a/kernel/cobalt/posix/cond.c
+++ b/kernel/cobalt/posix/cond.c
@@ -414,8 +414,8 @@ void cobalt_cond_reclaim(struct cobalt_resnode
*node, spl_t s)
 	cond = container_of(node, struct cobalt_cond, resnode);
 	xnregistry_remove(node->handle);
 	cobalt_del_resource(node);
-	xnsynch_destroy(&cond->synchbase);
 	cobalt_mark_deleted(cond);
+	xnsynch_destroy(&cond->synchbase);
 	xnlock_put_irqrestore(&nklock, s);

 	cobalt_umm_free(&cobalt_ppd_get(cond->attr.pshared)->umm,

-- 
Philippe.


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Xenomai] [Xenomai-git] Jan Kiszka : cobalt/kernel: Fix invalidation of cond shadow
  2016-01-13 18:44 ` [Xenomai] [Xenomai-git] Jan Kiszka : cobalt/kernel: Fix invalidation of cond shadow Philippe Gerum
@ 2016-01-13 19:42   ` Jan Kiszka
  2016-01-14  8:46     ` Philippe Gerum
  0 siblings, 1 reply; 5+ messages in thread
From: Jan Kiszka @ 2016-01-13 19:42 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: xenomai

On 2016-01-13 19:44, Philippe Gerum wrote:
> On 01/13/2016 07:33 PM, git repository hosting wrote:
>> Module: xenomai-jki
>> Branch: for-forge
>> Commit: b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>> URL:    http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>>
>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>> Date:   Wed Jan 13 19:31:23 2016 +0100
>>
>> cobalt/kernel: Fix invalidation of cond shadow
>>
>> pthread_cond_destroy fails to invalidate also the shadow object. This
>> can cause spurious -EBUSY errors on re-initialization of the very same
>> shadow as condition variable later on.
>>
>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>
>> ---
>>
>>  kernel/cobalt/posix/cond.c |    2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/kernel/cobalt/posix/cond.c b/kernel/cobalt/posix/cond.c
>> index 7e115cf..84ae8fd 100644
>> --- a/kernel/cobalt/posix/cond.c
>> +++ b/kernel/cobalt/posix/cond.c
>> @@ -117,6 +117,8 @@ static inline int pthread_cond_destroy(struct cobalt_cond_shadow *cnd)
>>  
>>  	cobalt_cond_reclaim(&cond->resnode, s); /* drops lock */
>>  
>> +	cobalt_mark_deleted(cnd);
>> +
>>  	return 0;
>>  }
>>  
>>
> 
> cobalt_cond_reclaim() invalidates the shadow object already. Did you

Nope, it only invalidates cond->magic, i.e. the object itself. We also
need to invalidate cnd->magic here. See also mutex.c, it has the same
pattern.

> observe -EBUSY already? If so, maybe a rescheduling happens early when
> flushing the synchro object, before the invalidation takes place in that
> routine.

Yes, we saw -EBUSY in the field. I wasn't able to create a reproduction
case, but I debugged that pthread_mutex_destroy failed to change the
shadow object. The patch still needs validation with our field scenario,
but the issue seems to be solved under the microscope (debugger) at least.

Jan

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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Xenomai] [Xenomai-git] Jan Kiszka : cobalt/kernel: Fix invalidation of cond shadow
  2016-01-13 19:42   ` Jan Kiszka
@ 2016-01-14  8:46     ` Philippe Gerum
  2016-01-15 13:59       ` Jan Kiszka
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Gerum @ 2016-01-14  8:46 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai

On 01/13/2016 08:42 PM, Jan Kiszka wrote:
> On 2016-01-13 19:44, Philippe Gerum wrote:
>> On 01/13/2016 07:33 PM, git repository hosting wrote:
>>> Module: xenomai-jki
>>> Branch: for-forge
>>> Commit: b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>>> URL:    http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>>>
>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>> Date:   Wed Jan 13 19:31:23 2016 +0100
>>>
>>> cobalt/kernel: Fix invalidation of cond shadow
>>>
>>> pthread_cond_destroy fails to invalidate also the shadow object. This
>>> can cause spurious -EBUSY errors on re-initialization of the very same
>>> shadow as condition variable later on.
>>>
>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>
>>> ---
>>>
>>>  kernel/cobalt/posix/cond.c |    2 ++
>>>  1 file changed, 2 insertions(+)
>>>
>>> diff --git a/kernel/cobalt/posix/cond.c b/kernel/cobalt/posix/cond.c
>>> index 7e115cf..84ae8fd 100644
>>> --- a/kernel/cobalt/posix/cond.c
>>> +++ b/kernel/cobalt/posix/cond.c
>>> @@ -117,6 +117,8 @@ static inline int pthread_cond_destroy(struct cobalt_cond_shadow *cnd)
>>>  
>>>  	cobalt_cond_reclaim(&cond->resnode, s); /* drops lock */
>>>  
>>> +	cobalt_mark_deleted(cnd);
>>> +
>>>  	return 0;
>>>  }
>>>  
>>>
>>
>> cobalt_cond_reclaim() invalidates the shadow object already. Did you
> 
> Nope, it only invalidates cond->magic, i.e. the object itself. We also
> need to invalidate cnd->magic here. See also mutex.c, it has the same
> pattern.
> 

Ack, I misread the patch. This is a regression compared to 2.x, we need
both descriptors to be invalidated indeed.

-- 
Philippe.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Xenomai] [Xenomai-git] Jan Kiszka : cobalt/kernel: Fix invalidation of cond shadow
  2016-01-14  8:46     ` Philippe Gerum
@ 2016-01-15 13:59       ` Jan Kiszka
  2016-01-16 17:00         ` Philippe Gerum
  0 siblings, 1 reply; 5+ messages in thread
From: Jan Kiszka @ 2016-01-15 13:59 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: xenomai

On 2016-01-14 09:46, Philippe Gerum wrote:
> On 01/13/2016 08:42 PM, Jan Kiszka wrote:
>> On 2016-01-13 19:44, Philippe Gerum wrote:
>>> On 01/13/2016 07:33 PM, git repository hosting wrote:
>>>> Module: xenomai-jki
>>>> Branch: for-forge
>>>> Commit: b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>>>> URL:    http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>>>>
>>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>>> Date:   Wed Jan 13 19:31:23 2016 +0100
>>>>
>>>> cobalt/kernel: Fix invalidation of cond shadow
>>>>
>>>> pthread_cond_destroy fails to invalidate also the shadow object. This
>>>> can cause spurious -EBUSY errors on re-initialization of the very same
>>>> shadow as condition variable later on.
>>>>
>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>>
>>>> ---
>>>>
>>>>  kernel/cobalt/posix/cond.c |    2 ++
>>>>  1 file changed, 2 insertions(+)
>>>>
>>>> diff --git a/kernel/cobalt/posix/cond.c b/kernel/cobalt/posix/cond.c
>>>> index 7e115cf..84ae8fd 100644
>>>> --- a/kernel/cobalt/posix/cond.c
>>>> +++ b/kernel/cobalt/posix/cond.c
>>>> @@ -117,6 +117,8 @@ static inline int pthread_cond_destroy(struct cobalt_cond_shadow *cnd)
>>>>  
>>>>  	cobalt_cond_reclaim(&cond->resnode, s); /* drops lock */
>>>>  
>>>> +	cobalt_mark_deleted(cnd);
>>>> +
>>>>  	return 0;
>>>>  }
>>>>  
>>>>
>>>
>>> cobalt_cond_reclaim() invalidates the shadow object already. Did you
>>
>> Nope, it only invalidates cond->magic, i.e. the object itself. We also
>> need to invalidate cnd->magic here. See also mutex.c, it has the same
>> pattern.
>>
> 
> Ack, I misread the patch. This is a regression compared to 2.x, we need
> both descriptors to be invalidated indeed.
> 

OK, will you pull into into next and stable? BTW, it's now successfully
validated by our test scenario.

Jan

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


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Xenomai] [Xenomai-git] Jan Kiszka : cobalt/kernel: Fix invalidation of cond shadow
  2016-01-15 13:59       ` Jan Kiszka
@ 2016-01-16 17:00         ` Philippe Gerum
  0 siblings, 0 replies; 5+ messages in thread
From: Philippe Gerum @ 2016-01-16 17:00 UTC (permalink / raw)
  To: Jan Kiszka; +Cc: xenomai

On 01/15/2016 02:59 PM, Jan Kiszka wrote:
> On 2016-01-14 09:46, Philippe Gerum wrote:
>> On 01/13/2016 08:42 PM, Jan Kiszka wrote:
>>> On 2016-01-13 19:44, Philippe Gerum wrote:
>>>> On 01/13/2016 07:33 PM, git repository hosting wrote:
>>>>> Module: xenomai-jki
>>>>> Branch: for-forge
>>>>> Commit: b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>>>>> URL:    http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=b7d37dab571df0c0cd42aae094c3d5d1bc71db80
>>>>>
>>>>> Author: Jan Kiszka <jan.kiszka@siemens.com>
>>>>> Date:   Wed Jan 13 19:31:23 2016 +0100
>>>>>
>>>>> cobalt/kernel: Fix invalidation of cond shadow
>>>>>
>>>>> pthread_cond_destroy fails to invalidate also the shadow object. This
>>>>> can cause spurious -EBUSY errors on re-initialization of the very same
>>>>> shadow as condition variable later on.
>>>>>
>>>>> Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
>>>>>
>>>>> ---
>>>>>
>>>>>  kernel/cobalt/posix/cond.c |    2 ++
>>>>>  1 file changed, 2 insertions(+)
>>>>>
>>>>> diff --git a/kernel/cobalt/posix/cond.c b/kernel/cobalt/posix/cond.c
>>>>> index 7e115cf..84ae8fd 100644
>>>>> --- a/kernel/cobalt/posix/cond.c
>>>>> +++ b/kernel/cobalt/posix/cond.c
>>>>> @@ -117,6 +117,8 @@ static inline int pthread_cond_destroy(struct cobalt_cond_shadow *cnd)
>>>>>  
>>>>>  	cobalt_cond_reclaim(&cond->resnode, s); /* drops lock */
>>>>>  
>>>>> +	cobalt_mark_deleted(cnd);
>>>>> +
>>>>>  	return 0;
>>>>>  }
>>>>>  
>>>>>
>>>>
>>>> cobalt_cond_reclaim() invalidates the shadow object already. Did you
>>>
>>> Nope, it only invalidates cond->magic, i.e. the object itself. We also
>>> need to invalidate cnd->magic here. See also mutex.c, it has the same
>>> pattern.
>>>
>>
>> Ack, I misread the patch. This is a regression compared to 2.x, we need
>> both descriptors to be invalidated indeed.
>>
> 
> OK, will you pull into into next and stable? BTW, it's now successfully
> validated by our test scenario.
> 

Done, thanks.


-- 
Philippe.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-01-16 17:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <E1aJQEe-0006t5-UO@sd-51317.xenomai.org>
2016-01-13 18:44 ` [Xenomai] [Xenomai-git] Jan Kiszka : cobalt/kernel: Fix invalidation of cond shadow Philippe Gerum
2016-01-13 19:42   ` Jan Kiszka
2016-01-14  8:46     ` Philippe Gerum
2016-01-15 13:59       ` Jan Kiszka
2016-01-16 17:00         ` Philippe Gerum

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.