From: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
To: Jan Kiszka <jan.kiszka@domain.hid>
Cc: xenomai-core <xenomai@xenomai.org>
Subject: Re: [Xenomai-core] x86: Endless minor faults
Date: Tue, 30 Jun 2009 10:42:24 +0200 [thread overview]
Message-ID: <4A49CFF0.7070202@domain.hid> (raw)
In-Reply-To: <4A49CD81.4060706@domain.hid>
Jan Kiszka wrote:
> Jan Kiszka wrote:
>> Hi all,
>>
>> seen such loops before? This particular trace is from a 2.6.29.3 kernel
>> with ipipe-2.3-01 (SMP/PREEMPT_VOLUNTARY), but the same happens with
>> 2.6.29.5/2.3-03:
>>
>> :| +func -653 0.084 __ipipe_handle_exception+0x11 (page_fault+0x26)
>> :| +func -653 0.096 ipipe_check_context+0xd (__ipipe_handle_exception+0x71)
>> :| #end 0x80000000 -653 0.069 do_page_fault+0x33 (__ipipe_handle_exception+0x1ff)
>> : #func -653 0.078 __ipipe_unstall_root+0x9 (do_page_fault+0x3cb)
>> :| #begin 0x80000000 -653 0.068 __ipipe_unstall_root+0x34 (do_page_fault+0x3cb)
>> :| +end 0x80000000 -653 0.069 __ipipe_unstall_root+0x59 (do_page_fault+0x3cb)
>> : +func -653 0.060 down_read_trylock+0x4 (do_page_fault+0x424)
>> : +func -653 0.068 _spin_lock_irqsave+0x9 (__down_read_trylock+0x16)
>> : +func -653 0.108 ipipe_check_context+0xd (_spin_lock_irqsave+0x1d)
>> : #func -652 0.066 _spin_unlock_irqrestore+0x4 (__down_read_trylock+0x3f)
>> : #func -652 0.069 __ipipe_restore_root+0x4 (_spin_unlock_irqrestore+0x21)
>> : #func -652 0.074 __ipipe_unstall_root+0x9 (__ipipe_restore_root+0x2c)
>> :| #begin 0x80000000 -652 0.066 __ipipe_unstall_root+0x34 (__ipipe_restore_root+0x2c)
>> :| +end 0x80000000 -652 0.069 __ipipe_unstall_root+0x59 (__ipipe_restore_root+0x2c)
>> : +func -652 0.096 find_vma+0x4 (do_page_fault+0x465)
>> : +func -652 0.150 ltt_run_filter_default+0x4 (_ltt_specialized_trace+0xc1)
>> : +func -652 0.098 handle_mm_fault+0x11 (do_page_fault+0x537)
>> : +func -652 0.090 _spin_lock+0x4 (handle_mm_fault+0x680)
>> : +func -652 0.063 ptep_set_access_flags+0x9 (handle_mm_fault+0x6d1)
>> : +func -652 0.282 flush_tlb_page+0xd (handle_mm_fault+0x6e7)
>> : +func -651 0.162 ltt_run_filter_default+0x4 (_ltt_specialized_trace+0xc1)
>> : +func -651 0.062 up_read+0x4 (do_page_fault+0x5a9)
>> : +func -651 0.072 _spin_lock_irqsave+0x9 (__up_read+0x1c)
>> : +func -651 0.117 ipipe_check_context+0xd (_spin_lock_irqsave+0x1d)
>> : #func -651 0.074 _spin_unlock_irqrestore+0x4 (__up_read+0x92)
>> : #func -651 0.069 __ipipe_restore_root+0x4 (_spin_unlock_irqrestore+0x21)
>> : #func -651 0.060 __ipipe_unstall_root+0x9 (__ipipe_restore_root+0x2c)
>> :| #begin 0x80000000 -651 0.056 __ipipe_unstall_root+0x34 (__ipipe_restore_root+0x2c)
>> :| +end 0x80000000 -651 0.420 __ipipe_unstall_root+0x59 (__ipipe_restore_root+0x2c)
>> :| +func -650 0.084 __ipipe_handle_exception+0x11 (page_fault+0x26)
>>
>> and again and again...
>>
>> We are looping over a minor fault here (according to /proc/PID/stat),
>> the context is a Xenomai task in secondary mode. As the task no longer
>> processes signals in this state, the whole system is more or less
>> broken. Tomorrow I will try to find out the faulting address with an
>> instrumented kernel, but maybe you already have some ideas.
>
> The fault is apparently triggered by __xn_put_user(XNRELAX,
> thread->u_mode) in xnshadow_relax. thread->u_mode is pointing to an
> invalid region ATM. The questions are now: Who corrupted this, user
> space on init (not that likely) or kernel space later on (unpleasant
> thought)? Moreover: Why can't we recover from a fault on u_mode?
I already investigated such an issue, and my conclusion was that there
are some places in the code where we can not cope with a fault.
xnshadow_relax being such a place, because, if relax faults, then what
will the fault handler do? Call relax again. Fortunately, mlockall and
the nocow stuff fixes this.
Another way to implement the u_mode thing would be to use the shared
heaps we use for fast mutexes.
--
Gilles
next prev parent reply other threads:[~2009-06-30 8:42 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-29 17:35 [Xenomai-core] x86: Endless minor faults Jan Kiszka
2009-06-29 18:09 ` Philippe Gerum
2009-06-29 18:20 ` Jan Kiszka
2009-06-30 8:32 ` Jan Kiszka
2009-06-30 8:36 ` Gilles Chanteperdrix
2009-06-30 8:44 ` Jan Kiszka
2009-06-30 8:42 ` Gilles Chanteperdrix [this message]
2009-06-30 8:56 ` Jan Kiszka
2009-06-30 9:20 ` Philippe Gerum
2009-06-30 9:21 ` Gilles Chanteperdrix
2009-06-30 9:25 ` Philippe Gerum
2009-06-30 9:26 ` Gilles Chanteperdrix
2009-06-30 9:27 ` Philippe Gerum
2009-06-30 9:34 ` Gilles Chanteperdrix
2009-06-30 16:11 ` Jan Kiszka
2009-07-01 11:56 ` Jan Kiszka
2009-07-01 12:05 ` Jan Kiszka
2009-07-01 12:24 ` Gilles Chanteperdrix
2009-07-01 12:39 ` Jan Kiszka
2009-07-01 12:41 ` Gilles Chanteperdrix
2009-07-01 12:41 ` Jan Kiszka
2009-07-01 15:51 ` Gilles Chanteperdrix
2009-07-01 16:01 ` Jan Kiszka
2009-07-01 16:04 ` Jan Kiszka
2009-07-01 17:56 ` Jan Kiszka
2009-07-01 18:15 ` Philippe Gerum
2009-07-01 18:27 ` Philippe Gerum
2009-07-01 18:58 ` Jan Kiszka
2009-07-01 19:14 ` Jan Kiszka
2009-07-02 2:05 ` Gilles Chanteperdrix
2009-07-02 6:24 ` Jan Kiszka
2009-07-02 6:59 ` Gilles Chanteperdrix
2009-07-02 7:16 ` Jan Kiszka
2009-07-02 7:44 ` Gilles Chanteperdrix
2009-07-01 18:56 ` Jan Kiszka
2009-07-02 7:11 ` Philippe Gerum
2009-07-02 17:14 ` Jan Kiszka
2009-07-03 14:54 ` Gilles Chanteperdrix
2009-07-03 15:06 ` Jan Kiszka
2009-07-04 16:39 ` Gilles Chanteperdrix
2009-07-05 12:01 ` Jan Kiszka
2009-07-05 14:56 ` Gilles Chanteperdrix
2009-07-05 17:12 ` Jan Kiszka
2009-07-06 7:54 ` Gilles Chanteperdrix
2009-07-07 18:45 ` 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=4A49CFF0.7070202@domain.hid \
--to=gilles.chanteperdrix@xenomai.org \
--cc=jan.kiszka@domain.hid \
--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.