• Steven Rostedt's avatar
    ARM: Hide finish_arch_post_lock_switch() from modules · ef0491ea
    Steven Rostedt authored
    The introduction of switch_mm_irqs_off() brought back an old bug
    regarding the use of preempt_enable_no_resched:
    
    As part of:
    
      62b94a08 ("sched/preempt: Take away preempt_enable_no_resched() from modules")
    
    the definition of preempt_enable_no_resched() is only available in
    built-in code, not in loadable modules, so we can't generally use
    it from header files.
    
    However, the ARM version of finish_arch_post_lock_switch()
    calls preempt_enable_no_resched() and is defined as a static
    inline function in asm/mmu_context.h. This in turn means we cannot
    include asm/mmu_context.h from modules.
    
    With today's tip tree, asm/mmu_context.h gets included from
    linux/mmu_context.h, which is normally the exact pattern one would
    expect, but unfortunately, linux/mmu_context.h can be included from
    the vhost driver that is a loadable module, now causing this compile
    time error with modular configs:
    
      In file included from ../include/linux/mmu_context.h:4:0,
                       from ../drivers/vhost/vhost.c:18:
      ../arch/arm/include/asm/mmu_context.h: In function 'finish_arch_post_lock_switch':
      ../arch/arm/include/asm/mmu_context.h:88:3: error: implicit declaration of function 'preempt_enable_no_resched' [-Werror=implicit-function-declaration]
         preempt_enable_no_resched();
    
    Andy already tried to fix the bug by including linux/preempt.h
    from asm/mmu_context.h, but that didn't help. Arnd suggested reordering
    the header files, which wasn't popular, so let's use this
    workaround instead:
    
    The finish_arch_post_lock_switch() definition is now also hidden
    inside of #ifdef MODULE, so we don't see anything referencing
    preempt_enable_no_resched() from a header file. I've built a
    few hundred randconfig kernels with this, and did not see any
    new problems.
    Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Acked-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Russell King - ARM Linux <linux@armlinux.org.uk>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Cc: linux-arm-kernel@lists.infradead.org
    Fixes: f98db601 ("sched/core: Add switch_mm_irqs_off() and use it in the scheduler")
    Link: http://lkml.kernel.org/r/1463146234-161304-1-git-send-email-arnd@arndb.deSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    ef0491ea
mmu_context.h 3.92 KB