[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150309140917.GB13768@linutronix.de>
Date: Mon, 9 Mar 2015 15:09:17 +0100
From: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
To: Frederic Weisbecker <fweisbec@...il.com>
Cc: linux-kernel@...r.kernel.org
Subject: full no_hz: how works arch_irq_work_raise() with tick off on generic
implementation
I just stumbled over this in -RT. The code:
87 bool irq_work_queue(struct irq_work *work)
88 {
…
96 /* If the work is "lazy", handle it from next tick if any */
97 if (work->flags & IRQ_WORK_LAZY) {
98 if (llist_add(&work->llnode, this_cpu_ptr(&lazy_list)) &&
99 tick_nohz_tick_stopped())
100 arch_irq_work_raise();
101 } else {
102 if (llist_add(&work->llnode, this_cpu_ptr(&raised_list)))
103 arch_irq_work_raise();
104 }
…
109 }
so what I asked myself: What happens if the CPU is in NO_HZ mode with
the tick off and you invoke arch_irq_work_raise() on an architecture
without a special IRQ_WORK interrupt?
And why you don't this tick_nohz_tick_stopped() check for the
raised_list?
Wouldn't it be a easier for your full NO_HZ code to simply run in the
hardirq exit path instead of using irq_work?
Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists