On Wed 2016-04-06 11:33:56, Josh Poimboeuf wrote: > On Wed, Apr 06, 2016 at 03:06:19PM +0200, Petr Mladek wrote: > > On Fri 2016-03-25 14:34:52, Josh Poimboeuf wrote: > > > 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); ^^^^ It works even better with &size ;-) > > > > /* > > * 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. Yeah. Well this is the same approach that we use to check if a patched function is on the stack. We could even move this check into the livepatch code but then print_context_stack_reliable() will not always give reliable results. Best Regards, Petr -- To unsubscribe from this list: send the line "unsubscribe live-patching" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html