All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philippe Gerum <rpm@xenomai.org>
To: Jan Kiszka <jan.kiszka@siemens.com>, Xenomai <xenomai@xenomai.org>
Subject: Re: [Xenomai] Mayday mechanism broken on x86-64 - simpler approach feasible?
Date: Thu, 12 Feb 2015 18:01:55 +0100	[thread overview]
Message-ID: <54DCDC83.9070608@xenomai.org> (raw)
In-Reply-To: <54DCD68F.5020005@siemens.com>

On 02/12/2015 05:36 PM, Jan Kiszka wrote:
> On 2015-02-03 16:29, Philippe Gerum wrote:
>> On 12/17/2014 07:55 PM, Philippe Gerum wrote:
>>> On 12/17/2014 07:32 PM, Jan Kiszka wrote:
>>>> On 2014-12-17 19:28, Philippe Gerum wrote:
>>>>> On 12/17/2014 06:46 PM, Jan Kiszka wrote:
>>>>>> On 2014-12-17 18:52, Philippe Gerum wrote:
>>>>>>> On 12/17/2014 05:57 PM, Jan Kiszka wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> while porting the sigdebug test case to forge I noticed occasional
>>>>>>>> crashes of the test after it received a watchdog signal. It turned out
>>>>>>>> that the problem is in the way mayday works on x86-64:
>>>>>>>>
>>>>>>>> 1. sp/ip/ax of interrupted thread is saved
>>>>>>>> 2. ip is set to mayday page
>>>>>>>> 3. mayday page executes the mayday syscall via the syscall instruction
>>>>>>>> 4. the syscall restores state on original state on return
>>>>>>>>
>>>>>>>> That that's the theory. Unfortunately the syscall instructions
>>>>>>>> overwrites the cx register with the caller's instruction pointer. We
>>>>>>>> could save it but there is no way to restore it on syscall return
>>>>>>>> without significant changes to the Linux code in entry_64.S.
>>>>>>>>
>>>>>>>> x86-32 is fine as it uses the int80 path which does a full state
>>>>>>>> recovery - but that is not available for 64-bit (only via ia32 compat,
>>>>>>>> but that can be turned off).
>>>>>>>>
>>>>>>>
>>>>>>> The legacy system_call vector is available unconditionally to x86_64.
>>>>>>> Xenomai 3 is actually calling int80 unconditionally on mayday traps for
>>>>>>> these reasons, i.e. always available and not suffering the long-mode
>>>>>>> syscall registers issue.
>>>>>>
>>>>>> Only when setting CONFIG_IA32_EMULATION. That is typcially the case, but
>>>>>> not necessarily.
>>>>>>
>>>>>
>>>>> I mean: the "safe" Xenomai syscall form (the one that binds a process to
>>>>> the real-time core in dual kernel mode) depends on this. Disabling int80
>>>>> is not an option in the current Xenomai implementation, mayday feature
>>>>> put aside.
>>>>
>>>> Huh? Things worked fine here on X3 when trying out the effect of
>>>> disabling IA32 emulation. Or do you mean 2.6?
>>>>
>>>
>>> I meant to tell crap: x86_64 implies vsyscall available, so there is no
>>> "safe" binding prologue there. Only x86_32 has this, so that legacy
>>> non-NPTL libc which do not support vsyscall work. So back to the initial
>>> discussion.
>>>
>>
>> As I mentioned earlier, I'd rather fix the MAYDAY implementation for
>> x86_64 instead of forking the implementation between MMU-enabled and
>> MMU-less architectures, also affecting powerpc, arm and x86_32 in the
>> same move. Fortunately, the current implementation allows very specific
>> tweaks to be applied on a per-architecture basis. This one fixes the
>> issue for Cobalt on x86_64, and could be easily backported to 2.6.x:
>>
>> http://git.xenomai.org/xenomai-3.git/commit/?h=next&id=6db20901963d634b9786467c711c2ba526db48a2
> 
> Looks almost good - except for the detail that some bits of the
> instruction pointer are lost on return from the syscall (int vs. long
> return type). Patches in the making.
> 

There could be another issue with %rsp. I'm checking this.


-- 
Philippe.


  reply	other threads:[~2015-02-12 17:01 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-17 16:57 [Xenomai] Mayday mechanism broken on x86-64 - simpler approach feasible? Jan Kiszka
2014-12-17 17:19 ` Philippe Gerum
2014-12-17 17:17   ` Gilles Chanteperdrix
2014-12-17 17:36     ` Jan Kiszka
2014-12-17 17:45       ` Gilles Chanteperdrix
2014-12-17 17:49         ` Jan Kiszka
2014-12-17 17:37   ` Jan Kiszka
2014-12-17 17:52 ` Philippe Gerum
2014-12-17 17:46   ` Jan Kiszka
2014-12-17 18:28     ` Philippe Gerum
2014-12-17 18:32       ` Jan Kiszka
2014-12-17 18:33         ` Jan Kiszka
2014-12-17 18:55         ` Philippe Gerum
2014-12-17 18:57           ` Jan Kiszka
2015-02-03 15:29           ` Philippe Gerum
2015-02-12 16:36             ` Jan Kiszka
2015-02-12 17:01               ` Philippe Gerum [this message]
2015-02-12 17:02               ` Jan Kiszka
2015-02-12 17:07                 ` Philippe Gerum
2015-02-12 17:16                   ` Jan Kiszka
2015-02-12 17:18                     ` Philippe Gerum
2015-02-12 17:19                       ` Jan Kiszka
2015-02-12 17:45                         ` Jan Kiszka
2015-02-16 17:37                           ` Jan Kiszka
2015-02-16 17:43                             ` Philippe Gerum
2015-02-17 10:58                               ` Philippe Gerum

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=54DCDC83.9070608@xenomai.org \
    --to=rpm@xenomai.org \
    --cc=jan.kiszka@siemens.com \
    --cc=xenomai@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.