Re: [RFC PATCH v1.9 05/14] sched: horrible way to detect whether a task has been preempted
From: Josh Poimboeuf <hidden>
Date: 2016-04-06 16:34:00
From: Josh Poimboeuf <hidden>
Date: 2016-04-06 16:34:00
On Wed, Apr 06, 2016 at 03:06:19PM +0200, Petr Mladek wrote:
On Fri 2016-03-25 14:34:52, Josh Poimboeuf wrote:quoted
This is a horrible way to detect whether a task has been preempted. Come up with something better: task flag? or is there already an existing mechanism?What about using kallsyms_lookup_size_offset() to check the address. It is more heavyweight but less hacky. The following code seems to work for me: bool in_preempt_schedule_irq(unsigned long addr) { static unsigned long size; if (unlikely(!size)) { int ret; ret = kallsyms_lookup_size_offset( (unsigned long)preempt_schedule_irq, size, NULL); /* * Warn when the function is used without kallsyms or * when it is unable to locate preempt_schedule_irq(). * Be conservative and always return true in this case. */ if (WARN_ON(!ret)) size = -1L; } return (addr - (unsigned long)preempt_schedule_irq <= size); }
Yeah, that would definitely be better. Though still somewhat hacky. -- Josh