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);

_______________________________________________
Adeos-main mailing list
[email protected]
https://mail.gna.org/listinfo/adeos-main

Reply via email to