* [Adeos-main] [RFC][PATCH] Rework async printk conditions
@ 2008-10-01 12:51 Jan Kiszka
2008-10-19 10:46 ` Philippe Gerum
0 siblings, 1 reply; 2+ messages in thread
From: Jan Kiszka @ 2008-10-01 12:51 UTC (permalink / raw)
To: Philippe Gerum; +Cc: adeos-main
Some ad-hoc instrumentation of Xenomai code running over the root domain
but with the head domain stalled (nklock held) triggered the new
topmost-stalled warning for me.
So I reworked the condition for doing async (ipipe-buffered) printk as
follows:
no oops in progress AND
domain did not request sync printk AND
(domain != root OR
(domain == root AND some higher domain stalled))
Makes sense?
Jan
---
kernel/printk.c | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
Index: b/kernel/printk.c
===================================================================
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -641,17 +641,33 @@ void __ipipe_flush_printk (unsigned virq
asmlinkage int printk(const char *fmt, ...)
{
- int r, fbytes, oldcount, cs = -1;
- unsigned long flags;
+ int r, fbytes, oldcount;
+ int sprintk = 1;
+ int cs = -1;
+ unsigned long flags;
va_list args;
va_start(args, fmt);
- if (test_bit(IPIPE_SPRINTK_FLAG,&ipipe_current_domain->flags) ||
+ if (test_bit(IPIPE_SPRINTK_FLAG, &ipipe_current_domain->flags) ||
oops_in_progress)
cs = ipipe_disable_context_check(ipipe_processor_id());
+ else if (ipipe_current_domain == ipipe_root_domain) {
+ struct ipipe_domain *dom;
- if (ipipe_current_domain == ipipe_root_domain || cs != -1) {
+ local_irq_save_hw(flags);
+ list_for_each_entry(dom, &__ipipe_pipeline, p_link) {
+ if (dom == ipipe_root_domain)
+ break;
+ if (test_bit(IPIPE_STALL_FLAG,
+ &ipipe_cpudom_var(dom, status)))
+ sprintk = 0;
+ }
+ local_irq_restore_hw(flags);
+ } else
+ sprintk = 0;
+
+ if (sprintk) {
r = vprintk(fmt, args);
if (cs != -1)
ipipe_restore_context_check(ipipe_processor_id(), cs);
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [Adeos-main] [RFC][PATCH] Rework async printk conditions
2008-10-01 12:51 [Adeos-main] [RFC][PATCH] Rework async printk conditions Jan Kiszka
@ 2008-10-19 10:46 ` Philippe Gerum
0 siblings, 0 replies; 2+ messages in thread
From: Philippe Gerum @ 2008-10-19 10:46 UTC (permalink / raw)
To: Jan Kiszka; +Cc: adeos-main
Jan Kiszka wrote:
> Some ad-hoc instrumentation of Xenomai code running over the root domain
> but with the head domain stalled (nklock held) triggered the new
> topmost-stalled warning for me.
>
> So I reworked the condition for doing async (ipipe-buffered) printk as
> follows:
> no oops in progress AND
> domain did not request sync printk AND
> (domain != root OR
> (domain == root AND some higher domain stalled))
>
> Makes sense?
>
Yes it does. Merged, thanks.
> Jan
>
> ---
> kernel/printk.c | 24 ++++++++++++++++++++----
> 1 file changed, 20 insertions(+), 4 deletions(-)
>
> Index: b/kernel/printk.c
> ===================================================================
> --- a/kernel/printk.c
> +++ b/kernel/printk.c
> @@ -641,17 +641,33 @@ void __ipipe_flush_printk (unsigned virq
>
> asmlinkage int printk(const char *fmt, ...)
> {
> - int r, fbytes, oldcount, cs = -1;
> - unsigned long flags;
> + int r, fbytes, oldcount;
> + int sprintk = 1;
> + int cs = -1;
> + unsigned long flags;
> va_list args;
>
> va_start(args, fmt);
>
> - if (test_bit(IPIPE_SPRINTK_FLAG,&ipipe_current_domain->flags) ||
> + if (test_bit(IPIPE_SPRINTK_FLAG, &ipipe_current_domain->flags) ||
> oops_in_progress)
> cs = ipipe_disable_context_check(ipipe_processor_id());
> + else if (ipipe_current_domain == ipipe_root_domain) {
> + struct ipipe_domain *dom;
>
> - if (ipipe_current_domain == ipipe_root_domain || cs != -1) {
> + local_irq_save_hw(flags);
> + list_for_each_entry(dom, &__ipipe_pipeline, p_link) {
> + if (dom == ipipe_root_domain)
> + break;
> + if (test_bit(IPIPE_STALL_FLAG,
> + &ipipe_cpudom_var(dom, status)))
> + sprintk = 0;
> + }
> + local_irq_restore_hw(flags);
> + } else
> + sprintk = 0;
> +
> + if (sprintk) {
> r = vprintk(fmt, args);
> if (cs != -1)
> ipipe_restore_context_check(ipipe_processor_id(), cs);
>
> _______________________________________________
> Adeos-main mailing list
> Adeos-main@domain.hid
> https://mail.gna.org/listinfo/adeos-main
>
--
Philippe.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-10-19 10:46 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-10-01 12:51 [Adeos-main] [RFC][PATCH] Rework async printk conditions Jan Kiszka
2008-10-19 10:46 ` Philippe Gerum
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.