From: Philippe Gerum <rpm@xenomai.org>
To: Jan Kiszka <jan.kiszka@domain.hid>
Cc: adeos-main@gna.org, Xenomai-core@domain.hid
Subject: Re: [Xenomai-core] [Adeos-main] [PATCH] i386: switch to root domain on unhandled non-root faults
Date: Mon, 05 Nov 2007 23:28:26 +0100 [thread overview]
Message-ID: <472F990A.2030209@domain.hid> (raw)
In-Reply-To: <472F6DAD.20308@domain.hid>
[-- Attachment #1: Type: text/plain, Size: 1606 bytes --]
Jan Kiszka wrote:
> Jan Kiszka wrote:
>> This patch addresses the recently discovered issue that I-pipe actually
>> need to deal with faults over non-root domain in which the current
>> domain shows no interest in. Such faults could be triggered inside
>> copy_*_user, thus can cleanly be handled by Linux - if we only allow for
>> this. Currently, if debugging is on, we warn about a potential bug, and
>> corrupt the pipeline states otherwise.
>>
>> The new approach is to unconditionally drop to root domain in such
>> cases, but - for debugging purposes of non-fixable faults - keep track
>> of the original domain and report it on oops.
>>
>> Similar patches are required for other archs. Maybe I can look into
>> x86_64 later.
>>
Nak, this patch would not work as wanted. Again, what you need is to
always fixup, and conditionally send a bug report to the kernel log if
CONFIG_IPIPE_DEBUG is enabled, nothing more.
This patch assumes that die() is always going to be fired for any
in-kernel fault, so that all reports only need to go through this
routine, which is wrong. Kernel fixups through exception tables may fix
the fault early and silently, and this is particularly the case for
copy_to_user helpers, which do include kernel fixup code. By being
silent when fixing up things in __ipipe_handle_exception() like your
patch currently is, we would be left with no trace at all that some
unhandled fault just happened, except by looking at /proc/xenomai/faults.
By sending the report immediately when fixing up in the latter routine,
you also avoid the ugly ipipe_orig_domain stuff.
[-- Attachment #2: fixup-unhandled-fault.patch --]
[-- Type: text/x-patch, Size: 962 bytes --]
diff --git a/arch/i386/kernel/ipipe.c b/arch/i386/kernel/ipipe.c
index bf6443d..9323951 100644
--- a/arch/i386/kernel/ipipe.c
+++ b/arch/i386/kernel/ipipe.c
@@ -644,16 +644,20 @@ fastcall int __ipipe_handle_exception(struct pt_regs *regs, long error_code, int
#endif /* CONFIG_KGDB */
if (!ipipe_trap_notify(vector, regs)) {
-#ifdef CONFIG_IPIPE_DEBUG
if (!ipipe_root_domain_p) {
/* Fix up domain so that Linux can handle this. */
+#ifdef CONFIG_IPIPE_DEBUG
+ struct ipipe_domain *ipd = ipipe_current_domain;
ipipe_current_domain = ipipe_root_domain;
ipipe_trace_panic_freeze();
printk(KERN_ERR "BUG: Unhandled exception over domain"
" %s - switching to ROOT\n",
- ipipe_current_domain->name);
- }
+ ipd->name);
+ dump_stack();
+#else
+ ipipe_current_domain = ipipe_root_domain;
#endif /* CONFIG_IPIPE_DEBUG */
+ }
__ipipe_std_extable[vector](regs, error_code);
local_irq_restore(flags);
__fixup_if(regs);
next prev parent reply other threads:[~2007-11-05 22:28 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-05 19:16 [Xenomai-core] [PATCH] i386: switch to root domain on unhandled non-root faults Jan Kiszka
2007-11-05 19:23 ` [Xenomai-core] [Adeos-main] " Jan Kiszka
2007-11-05 22:28 ` Philippe Gerum [this message]
2007-11-06 6:16 ` Jan Kiszka
2007-11-06 9:01 ` Jan Kiszka
2007-11-08 13:48 ` Jan Kiszka
2007-11-08 23:31 ` Philippe Gerum
2007-11-09 13:58 ` Jan Kiszka
2007-11-09 16:46 ` Philippe Gerum
2007-11-09 17:07 ` Jan Kiszka
2007-11-09 17:31 ` Philippe Gerum
2007-11-11 18:59 ` Jan Kiszka
2007-11-13 10:28 ` Philippe Gerum
2007-11-13 17:40 ` Jan Kiszka
2007-11-19 11:59 ` Philippe Gerum
2007-11-19 12:42 ` Jan Kiszka
2007-11-13 21:32 ` 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=472F990A.2030209@domain.hid \
--to=rpm@xenomai.org \
--cc=Xenomai-core@domain.hid \
--cc=adeos-main@gna.org \
--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.