From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <48FB0FEA.4040309@domain.hid> Date: Sun, 19 Oct 2008 12:46:02 +0200 From: Philippe Gerum MIME-Version: 1.0 References: <48E37266.2040006@domain.hid> In-Reply-To: <48E37266.2040006@domain.hid> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Adeos-main] [RFC][PATCH] Rework async printk conditions Reply-To: rpm@xenomai.org List-Id: General discussion about Adeos List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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.