All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@domain.hid>
To: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Cc: Xenomai core <Xenomai-core@domain.hid>
Subject: Re: [Xenomai-core] [Xenomai-git] Jan Kiszka : Native: Fix return code of in-kernel rt_cond_wait[_until]
Date: Tue, 02 Mar 2010 15:43:07 +0100	[thread overview]
Message-ID: <4B8D23FB.9090009@domain.hid> (raw)
In-Reply-To: <4B8D1FE6.50503@domain.hid>

Gilles Chanteperdrix wrote:
> Gilles Chanteperdrix wrote:
>> Jan Kiszka wrote:
>>> Gilles Chanteperdrix wrote:
>>>> Jan Kiszka wrote:
>>>>> Gilles Chanteperdrix wrote:
>>>>>> Jan Kiszka wrote:
>>>>>>> Gilles Chanteperdrix wrote:
>>>>>>>> Jan Kiszka wrote:
>>>>>>>>> Gilles Chanteperdrix wrote:
>>>>>>>>>> Ok for returning -EINTR, it is documented. Kernel-space is not so
>>>>>>>>>> different from user-space, rt_task_unblock could wake-up a kernel-space
>>>>>>>>>> task blocked in a call to rt_cond_wait.
>>>>>>>>>>
>>>>>>>>>> However, if the epilogue returns an error, we must return it.
>>>>>>>>>>
>>>>>>>>> OK for this. Pushed an update, but I also modified it further to avoid
>>>>>>>>> returning without the mutex lock unless that one is also failing. Maybe
>>>>>>>>> in-kernel POSIX requires the same fix, will check.
>>>>>>>> Still not OK. You should reacquire the mutex only if the error is 0,
>>>>>>>> -ETIMEDOUT or -EINTR. With any other error, we do not know if we can
>>>>>>>> call the epilogue safely.
>>>>>>> We _must_ reacquire the mutex - but, granted, we actually have to take
>>>>>>> care of invalid cond objects. Lot's of bugs...
>>>>>> No. If the error is another error than 0, -ETIMEDOUT, or -EINTR, it
>>>>>> means that the error was detected prior to freeing the mutex. So, we do
>>>>>> not have to re-acquire the mutex. Quoting POSIX:
>>>>>>
>>>>>> "Except in the case of [ETIMEDOUT], all these error checks shall act as
>>>>>> if they were performed immediately at the beginning of processing for
>>>>>> the function and shall cause an error return, in effect, prior to
>>>>>> modifying the state of the mutex specified by mutex or the condition
>>>>>> variable specified by cond."
>>>>>>
>>>>>> POSIX does not talk about -EINTR, because it states that in this case,
>>>>>> we should return 0 to the application.
>>>>> OK, but EIDRM was missing in your list. Will adjust both patches.
>>>> No, EIDRM is part of the "other errors than ETIMEDOUT and 0"
>>>>
>>> I interpret the spec fairly differently here: It states that we have to
>>> leave the mutex state behind *as if* the error was already detected on
>>> entry - thus we are expected to restore its state.
>> No. We must return prior to modifying its state. Not change its state
>> then restore it.
>>
>> There is no EIDRM anyway, I return 0, and the user gets EINVAL when
>> calling pthread_cond_wait again.
> 
> No, this is not even the way it works. EIDRM can not happen, because
> pthread_cond_destroy will return EBUSY as long as a thread is blocked in
> a call to pthread_cond_wait. This is allowed by POSIX.
> 

Right, POSIX is fine as is. Native is still different, though.

Jan

-- 
Siemens AG, Corporate Technology, CT T DE IT 1
Corporate Competence Center Embedded Linux


  reply	other threads:[~2010-03-02 14:43 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1NmR5I-0003k9-N5@domain.hid>
2010-03-02 12:23 ` [Xenomai-core] [Xenomai-git] Jan Kiszka : Native: Fix return code of in-kernel rt_cond_wait[_until] Gilles Chanteperdrix
2010-03-02 12:28   ` Jan Kiszka
2010-03-02 12:29     ` Jan Kiszka
2010-03-02 12:32     ` Gilles Chanteperdrix
2010-03-02 12:33       ` Gilles Chanteperdrix
2010-03-02 12:43         ` Jan Kiszka
2010-03-02 12:48           ` Gilles Chanteperdrix
2010-03-02 12:59             ` Jan Kiszka
2010-03-02 13:04               ` Gilles Chanteperdrix
2010-03-02 13:24                 ` Jan Kiszka
2010-03-02 13:30                   ` Gilles Chanteperdrix
2010-03-02 13:34                     ` Jan Kiszka
2010-03-02 13:38                       ` Gilles Chanteperdrix
2010-03-02 13:44                         ` Jan Kiszka
2010-03-02 13:46                           ` Gilles Chanteperdrix
2010-03-02 14:00                             ` Jan Kiszka
2010-03-02 14:04                               ` Gilles Chanteperdrix
2010-03-02 14:08                                 ` Jan Kiszka
2010-03-02 14:15                                   ` Gilles Chanteperdrix
2010-03-02 14:25                                 ` Gilles Chanteperdrix
2010-03-02 14:43                                   ` Jan Kiszka [this message]
2010-03-02 13:40                       ` Jan Kiszka
2010-03-02 13:44                         ` Gilles Chanteperdrix

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=4B8D23FB.9090009@domain.hid \
    --to=jan.kiszka@domain.hid \
    --cc=Xenomai-core@domain.hid \
    --cc=gilles.chanteperdrix@xenomai.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.