All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
To: Jan Kiszka <jan.kiszka@domain.hid>
Cc: Xenomai core <Xenomai-core@domain.hid>
Subject: Re: [Xenomai-core] [Xenomai-git] Jan Kiszka : Native: Work around for error code corruption in rt_cond_wait[ _until]
Date: Tue, 02 Mar 2010 16:43:56 +0100	[thread overview]
Message-ID: <4B8D323C.5050306@domain.hid> (raw)
In-Reply-To: <E1NmUAX-0004WJ-Eq@domain.hid>

GIT version control wrote:
> Module: xenomai-jki
> Branch: for-upstream
> Commit: 4b5370dce6f3a655ac104b93b032f3b639206fd5
> URL:    http://git.xenomai.org/?p=xenomai-jki.git;a=commit;h=4b5370dce6f3a655ac104b93b032f3b639206fd5
> 
> Author: Jan Kiszka <jan.kiszka@domain.hid>
> Date:   Tue Mar  2 16:24:59 2010 +0100
> 
> Native: Work around for error code corruption in rt_cond_wait[_until]
> 
> User space suffers from losing the error code of the cond wait prologue.
> We actually had to return the prologue error to user space and use that
> one after the epilogue succeeded, but the existing kernel ABI does not
> allow this, nor is existing user space prepared for this.
> 
> As a work around, keep the prologue error code in xnthread's errcode and
> restore it from there when user space re-enters the kernel for the
> epilogue. This requires no ABI changes, but suffers from potential
> overwriting if the same or some other errcode touching service is called
> from a user space signal handler in between the calls. Moreover, current
> user space also prevents that we can return -EINTR on interruption while
> blocked on the condition variable, which was possible before.
> 
> A true fix will require a new syscall and updated user space libs.
> 
> Signed-off-by: Jan Kiszka <jan.kiszka@domain.hid>
> 
> ---
> 
>  ksrc/skins/native/syscall.c |   19 +++++++++++++++----
>  1 files changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/ksrc/skins/native/syscall.c b/ksrc/skins/native/syscall.c
> index 462ee7e..930a28d 100644
> --- a/ksrc/skins/native/syscall.c
> +++ b/ksrc/skins/native/syscall.c
> @@ -1841,7 +1841,7 @@ static int __rt_cond_wait_prologue(struct pt_regs *regs)
>  	RT_MUTEX *mutex;
>  	RT_COND *cond;
>  	RTIME timeout;
> -	int err;
> +	int err, epilogue_err;
>  
>  	if (__xn_safe_copy_from_user(&cph, (void __user *)__xn_reg_arg1(regs),
>  				     sizeof(cph)))
> @@ -1868,11 +1868,15 @@ static int __rt_cond_wait_prologue(struct pt_regs *regs)
>  		return -EFAULT;
>  
>  	err = rt_cond_wait_prologue(cond, mutex, &lockcnt, timeout_mode, timeout);
> +	xnpod_current_thread()->errcode = err;
>  
>  	/* Reacquire the mutex if it was unlocked in the prologue and we were
>  	   not interrupted. */
> -	if (lockcnt && err != -EINTR)
> -		err = rt_cond_wait_epilogue(mutex, lockcnt);
> +	if (lockcnt && err != -EINTR) {
> +		epilogue_err = rt_cond_wait_epilogue(mutex, lockcnt);
> +		if (!err)
> +			err = epilogue_err;

IMO, Here should be:
		if (epilogue_err < 0)
			err = epilogue_err;

-- 
					    Gilles.



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

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <E1NmUAX-0004WJ-Eq@domain.hid>
2010-03-02 15:43 ` Gilles Chanteperdrix [this message]
2010-03-02 16:00   ` [Xenomai-core] [Xenomai-git] Jan Kiszka : Native: Work around for error code corruption in rt_cond_wait[ _until] Jan Kiszka
2010-03-02 16:02     ` Jan Kiszka

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