From: Andi Kleen <andi@firstfloor.org>
To: linux-kernel@vger.kernel.org
Cc: x86@kernel.org, mmarek@suse.cz, linux-kbuild@vger.kernel.org,
JBeulich@suse.com, akpm@linux-foundation.org,
Andi Kleen <ak@linux.intel.com>
Subject: [PATCH 19/74] x86, lto: Add missing asmlinkages and __visible
Date: Sat, 18 Aug 2012 19:56:15 -0700 [thread overview]
Message-ID: <1345345030-22211-20-git-send-email-andi@firstfloor.org> (raw)
In-Reply-To: <1345345030-22211-1-git-send-email-andi@firstfloor.org>
From: Andi Kleen <ak@linux.intel.com>
This is an arch/x86 sweep to add asmlinkage or __visible
to all functions accessed by assembler code. A lot of
functions already had it, but not all.
This is needed for the LTO kernel so that these functions are
not optimized away.
I used asmlinkage for functions without arguments, and __visible
for functions with. This prevents any problems on x86-32 with
asmlinkage changing the calling convention to regparm(0)
I kept it all in a single patch for now. Please let me know
if you want it split up.
Signed-off-by: Andi Kleen <ak@linux.intel.com>
---
arch/x86/include/asm/hw_irq.h | 118 +++++++++++++++----------------
arch/x86/include/asm/irq.h | 2 +-
arch/x86/include/asm/kprobes.h | 2 +-
arch/x86/include/asm/setup.h | 8 ++-
arch/x86/include/asm/signal.h | 2 +-
arch/x86/include/asm/switch_to.h | 4 +-
arch/x86/include/asm/syscalls.h | 22 +++---
arch/x86/kernel/apic/apic.c | 6 +-
arch/x86/kernel/cpu/mcheck/mce-inject.c | 1 +
arch/x86/kernel/head32.c | 2 +-
arch/x86/kernel/head64.c | 2 +-
arch/x86/kernel/ioport.c | 2 +-
arch/x86/kernel/irq.c | 4 +-
arch/x86/kernel/irq_work.c | 2 +-
arch/x86/kernel/kprobes.c | 2 +-
arch/x86/kernel/machine_kexec_32.c | 2 +-
arch/x86/kernel/process.c | 10 ++--
arch/x86/kernel/process_32.c | 2 +-
arch/x86/kernel/process_64.c | 2 +-
arch/x86/kernel/signal.c | 8 +-
arch/x86/kernel/smp.c | 6 +-
arch/x86/kernel/syscall_64.c | 2 +-
arch/x86/kernel/vm86_32.c | 3 +-
arch/x86/lib/usercopy_64.c | 2 +-
24 files changed, 108 insertions(+), 108 deletions(-)
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h
index eb92a6e..a7cd10e 100644
--- a/arch/x86/include/asm/hw_irq.h
+++ b/arch/x86/include/asm/hw_irq.h
@@ -26,55 +26,55 @@
#include <asm/sections.h>
/* Interrupt handlers registered during init_IRQ */
-extern void apic_timer_interrupt(void);
-extern void x86_platform_ipi(void);
-extern void error_interrupt(void);
-extern void irq_work_interrupt(void);
-
-extern void spurious_interrupt(void);
-extern void thermal_interrupt(void);
-extern void reschedule_interrupt(void);
-
-extern void invalidate_interrupt(void);
-extern void invalidate_interrupt0(void);
-extern void invalidate_interrupt1(void);
-extern void invalidate_interrupt2(void);
-extern void invalidate_interrupt3(void);
-extern void invalidate_interrupt4(void);
-extern void invalidate_interrupt5(void);
-extern void invalidate_interrupt6(void);
-extern void invalidate_interrupt7(void);
-extern void invalidate_interrupt8(void);
-extern void invalidate_interrupt9(void);
-extern void invalidate_interrupt10(void);
-extern void invalidate_interrupt11(void);
-extern void invalidate_interrupt12(void);
-extern void invalidate_interrupt13(void);
-extern void invalidate_interrupt14(void);
-extern void invalidate_interrupt15(void);
-extern void invalidate_interrupt16(void);
-extern void invalidate_interrupt17(void);
-extern void invalidate_interrupt18(void);
-extern void invalidate_interrupt19(void);
-extern void invalidate_interrupt20(void);
-extern void invalidate_interrupt21(void);
-extern void invalidate_interrupt22(void);
-extern void invalidate_interrupt23(void);
-extern void invalidate_interrupt24(void);
-extern void invalidate_interrupt25(void);
-extern void invalidate_interrupt26(void);
-extern void invalidate_interrupt27(void);
-extern void invalidate_interrupt28(void);
-extern void invalidate_interrupt29(void);
-extern void invalidate_interrupt30(void);
-extern void invalidate_interrupt31(void);
-
-extern void irq_move_cleanup_interrupt(void);
-extern void reboot_interrupt(void);
-extern void threshold_interrupt(void);
-
-extern void call_function_interrupt(void);
-extern void call_function_single_interrupt(void);
+extern asmlinkage void apic_timer_interrupt(void);
+extern asmlinkage void x86_platform_ipi(void);
+extern asmlinkage void error_interrupt(void);
+extern asmlinkage void irq_work_interrupt(void);
+
+extern asmlinkage void spurious_interrupt(void);
+extern asmlinkage void thermal_interrupt(void);
+extern asmlinkage void reschedule_interrupt(void);
+
+extern asmlinkage void invalidate_interrupt(void);
+extern asmlinkage void invalidate_interrupt0(void);
+extern asmlinkage void invalidate_interrupt1(void);
+extern asmlinkage void invalidate_interrupt2(void);
+extern asmlinkage void invalidate_interrupt3(void);
+extern asmlinkage void invalidate_interrupt4(void);
+extern asmlinkage void invalidate_interrupt5(void);
+extern asmlinkage void invalidate_interrupt6(void);
+extern asmlinkage void invalidate_interrupt7(void);
+extern asmlinkage void invalidate_interrupt8(void);
+extern asmlinkage void invalidate_interrupt9(void);
+extern asmlinkage asmlinkage void invalidate_interrupt10(void);
+extern asmlinkage void invalidate_interrupt11(void);
+extern asmlinkage void invalidate_interrupt12(void);
+extern asmlinkage void invalidate_interrupt13(void);
+extern asmlinkage void invalidate_interrupt14(void);
+extern asmlinkage void invalidate_interrupt15(void);
+extern asmlinkage void invalidate_interrupt16(void);
+extern asmlinkage void invalidate_interrupt17(void);
+extern asmlinkage void invalidate_interrupt18(void);
+extern asmlinkage void invalidate_interrupt19(void);
+extern asmlinkage void invalidate_interrupt20(void);
+extern asmlinkage void invalidate_interrupt21(void);
+extern asmlinkage void invalidate_interrupt22(void);
+extern asmlinkage void invalidate_interrupt23(void);
+extern asmlinkage void invalidate_interrupt24(void);
+extern asmlinkage void invalidate_interrupt25(void);
+extern asmlinkage void invalidate_interrupt26(void);
+extern asmlinkage void invalidate_interrupt27(void);
+extern asmlinkage void invalidate_interrupt28(void);
+extern asmlinkage void invalidate_interrupt29(void);
+extern asmlinkage void invalidate_interrupt30(void);
+extern asmlinkage void invalidate_interrupt31(void);
+
+extern asmlinkage void irq_move_cleanup_interrupt(void);
+extern asmlinkage void reboot_interrupt(void);
+extern asmlinkage void threshold_interrupt(void);
+
+extern asmlinkage void call_function_interrupt(void);
+extern asmlinkage void call_function_single_interrupt(void);
/* IOAPIC */
#define IO_APIC_IRQ(x) (((x) >= NR_IRQS_LEGACY) || ((1<<(x)) & io_apic_irqs))
@@ -143,22 +143,18 @@ extern atomic_t irq_mis_count;
extern void eisa_set_level_irq(unsigned int irq);
/* SMP */
-extern void smp_apic_timer_interrupt(struct pt_regs *);
-extern void smp_spurious_interrupt(struct pt_regs *);
-extern void smp_x86_platform_ipi(struct pt_regs *);
-extern void smp_error_interrupt(struct pt_regs *);
+extern __visible void smp_apic_timer_interrupt(struct pt_regs *);
+extern __visible void smp_spurious_interrupt(struct pt_regs *);
+extern __visible void smp_x86_platform_ipi(struct pt_regs *);
+extern __visible void smp_error_interrupt(struct pt_regs *);
#ifdef CONFIG_X86_IO_APIC
extern asmlinkage void smp_irq_move_cleanup_interrupt(void);
#endif
#ifdef CONFIG_SMP
-extern void smp_reschedule_interrupt(struct pt_regs *);
-extern void smp_call_function_interrupt(struct pt_regs *);
-extern void smp_call_function_single_interrupt(struct pt_regs *);
-#ifdef CONFIG_X86_32
-extern void smp_invalidate_interrupt(struct pt_regs *);
-#else
-extern asmlinkage void smp_invalidate_interrupt(struct pt_regs *);
-#endif
+extern __visible void smp_reschedule_interrupt(struct pt_regs *);
+extern __visible void smp_call_function_interrupt(struct pt_regs *);
+extern __visible void smp_call_function_single_interrupt(struct pt_regs *);
+extern __visible void smp_invalidate_interrupt(struct pt_regs *);
#endif
extern void (*__initconst interrupt[NR_VECTORS-FIRST_EXTERNAL_VECTOR])(void);
diff --git a/arch/x86/include/asm/irq.h b/arch/x86/include/asm/irq.h
index ba870bb..c996357 100644
--- a/arch/x86/include/asm/irq.h
+++ b/arch/x86/include/asm/irq.h
@@ -33,7 +33,7 @@ extern void (*x86_platform_ipi_callback)(void);
extern void native_init_IRQ(void);
extern bool handle_irq(unsigned irq, struct pt_regs *regs);
-extern unsigned int do_IRQ(struct pt_regs *regs);
+extern __visible unsigned int do_IRQ(struct pt_regs *regs);
/* Interrupt vector management */
extern DECLARE_BITMAP(used_vectors, NR_VECTORS);
diff --git a/arch/x86/include/asm/kprobes.h b/arch/x86/include/asm/kprobes.h
index 5478825..a967173 100644
--- a/arch/x86/include/asm/kprobes.h
+++ b/arch/x86/include/asm/kprobes.h
@@ -61,7 +61,7 @@ extern kprobe_opcode_t optprobe_template_end;
extern const int kretprobe_blacklist_size;
void arch_remove_kprobe(struct kprobe *p);
-void kretprobe_trampoline(void);
+asmlinkage void kretprobe_trampoline(void);
/* Architecture specific copy of original instruction*/
struct arch_specific_insn {
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h
index d0f19f9..4575ffb 100644
--- a/arch/x86/include/asm/setup.h
+++ b/arch/x86/include/asm/setup.h
@@ -5,6 +5,8 @@
#define COMMAND_LINE_SIZE 2048
+#include <linux/linkage.h>
+
#ifdef __i386__
#include <linux/pfn.h>
@@ -107,11 +109,11 @@ void *extend_brk(size_t size, size_t align);
extern void probe_roms(void);
#ifdef __i386__
-void __init i386_start_kernel(void);
+asmlinkage void __init i386_start_kernel(void);
#else
-void __init x86_64_start_kernel(char *real_mode);
-void __init x86_64_start_reservations(char *real_mode_data);
+asmlinkage void __init x86_64_start_kernel(char *real_mode);
+asmlinkage void __init x86_64_start_reservations(char *real_mode_data);
#endif /* __i386__ */
#endif /* _SETUP */
diff --git a/arch/x86/include/asm/signal.h b/arch/x86/include/asm/signal.h
index 598457c..4937d72 100644
--- a/arch/x86/include/asm/signal.h
+++ b/arch/x86/include/asm/signal.h
@@ -122,7 +122,7 @@ typedef unsigned long sigset_t;
#ifndef __ASSEMBLY__
# ifdef __KERNEL__
-extern void do_notify_resume(struct pt_regs *, void *, __u32);
+extern __visible void do_notify_resume(struct pt_regs *, void *, __u32);
# endif /* __KERNEL__ */
#ifdef __i386__
diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h
index 4ec45b3..a7ad95a 100644
--- a/arch/x86/include/asm/switch_to.h
+++ b/arch/x86/include/asm/switch_to.h
@@ -2,8 +2,8 @@
#define _ASM_X86_SWITCH_TO_H
struct task_struct; /* one of the stranger aspects of C forward declarations */
-struct task_struct *__switch_to(struct task_struct *prev,
- struct task_struct *next);
+__visible struct task_struct *__switch_to(struct task_struct *prev,
+ struct task_struct *next);
struct tss_struct;
void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
struct tss_struct *tss);
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h
index f1d8b44..de299c8 100644
--- a/arch/x86/include/asm/syscalls.h
+++ b/arch/x86/include/asm/syscalls.h
@@ -18,23 +18,23 @@
/* Common in X86_32 and X86_64 */
/* kernel/ioport.c */
asmlinkage long sys_ioperm(unsigned long, unsigned long, int);
-long sys_iopl(unsigned int, struct pt_regs *);
+__visible long sys_iopl(unsigned int, struct pt_regs *);
/* kernel/process.c */
-int sys_fork(struct pt_regs *);
-int sys_vfork(struct pt_regs *);
-long sys_execve(const char __user *,
+__visible int sys_fork(struct pt_regs *);
+__visible int sys_vfork(struct pt_regs *);
+__visible long sys_execve(const char __user *,
const char __user *const __user *,
const char __user *const __user *, struct pt_regs *);
-long sys_clone(unsigned long, unsigned long, void __user *,
+__visible long sys_clone(unsigned long, unsigned long, void __user *,
void __user *, struct pt_regs *);
/* kernel/ldt.c */
asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
/* kernel/signal.c */
-long sys_rt_sigreturn(struct pt_regs *);
-long sys_sigaltstack(const stack_t __user *, stack_t __user *,
+__visible long sys_rt_sigreturn(struct pt_regs *);
+__visible long sys_sigaltstack(const stack_t __user *, stack_t __user *,
struct pt_regs *);
@@ -49,17 +49,17 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *);
asmlinkage int sys_sigsuspend(int, int, old_sigset_t);
asmlinkage int sys_sigaction(int, const struct old_sigaction __user *,
struct old_sigaction __user *);
-unsigned long sys_sigreturn(struct pt_regs *);
+__visible unsigned long sys_sigreturn(struct pt_regs *);
/* kernel/vm86_32.c */
-int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
-int sys_vm86(unsigned long, unsigned long, struct pt_regs *);
+__visible int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
+__visible int sys_vm86(unsigned long, unsigned long, struct pt_regs *);
#else /* CONFIG_X86_32 */
/* X86_64 only */
/* kernel/process_64.c */
-long sys_arch_prctl(int, unsigned long);
+asmlinkage long sys_arch_prctl(int, unsigned long);
/* kernel/sys_x86_64.c */
asmlinkage long sys_mmap(unsigned long, unsigned long, unsigned long,
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 24deb30..71f1284 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -879,7 +879,7 @@ static void local_apic_timer_interrupt(void)
* [ if a single-CPU system runs an SMP kernel then we call the local
* interrupt as well. Thus we cannot inline the local irq ... ]
*/
-void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)
+__visible void __irq_entry smp_apic_timer_interrupt(struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);
@@ -1875,7 +1875,7 @@ int __init APIC_init_uniprocessor(void)
/*
* This interrupt should _never_ happen with our APIC/SMP architecture
*/
-void smp_spurious_interrupt(struct pt_regs *regs)
+__visible void smp_spurious_interrupt(struct pt_regs *regs)
{
u32 v;
@@ -1901,7 +1901,7 @@ void smp_spurious_interrupt(struct pt_regs *regs)
/*
* This interrupt should never happen with our APIC/SMP architecture
*/
-void smp_error_interrupt(struct pt_regs *regs)
+__visible void smp_error_interrupt(struct pt_regs *regs)
{
u32 v0, v1;
u32 i = 0;
diff --git a/arch/x86/kernel/cpu/mcheck/mce-inject.c b/arch/x86/kernel/cpu/mcheck/mce-inject.c
index fc4beb3..ccfcf1c 100644
--- a/arch/x86/kernel/cpu/mcheck/mce-inject.c
+++ b/arch/x86/kernel/cpu/mcheck/mce-inject.c
@@ -27,6 +27,7 @@
#include <asm/mce.h>
#include <asm/apic.h>
#include <asm/nmi.h>
+#include <asm/traps.h>
/* Update fake mce registers on current CPU. */
static void inject_mce(struct mce *m)
diff --git a/arch/x86/kernel/head32.c b/arch/x86/kernel/head32.c
index c18f59d..1b04fb8 100644
--- a/arch/x86/kernel/head32.c
+++ b/arch/x86/kernel/head32.c
@@ -28,7 +28,7 @@ static void __init i386_default_early_setup(void)
reserve_ebda_region();
}
-void __init i386_start_kernel(void)
+asmlinkage void __init i386_start_kernel(void)
{
memblock_reserve(__pa_symbol(&_text),
__pa_symbol(&__bss_stop) - __pa_symbol(&_text));
diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
index 037df57..ded14c3 100644
--- a/arch/x86/kernel/head64.c
+++ b/arch/x86/kernel/head64.c
@@ -52,7 +52,7 @@ static void __init copy_bootdata(char *real_mode_data)
}
}
-void __init x86_64_start_kernel(char * real_mode_data)
+asmlinkage void __init x86_64_start_kernel(char * real_mode_data)
{
int i;
diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
index 8c96897..e828193 100644
--- a/arch/x86/kernel/ioport.c
+++ b/arch/x86/kernel/ioport.c
@@ -93,7 +93,7 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
* on system-call entry - see also fork() and the signal handling
* code.
*/
-long sys_iopl(unsigned int level, struct pt_regs *regs)
+__visible long sys_iopl(unsigned int level, struct pt_regs *regs)
{
unsigned int old = (regs->flags >> 12) & 3;
struct thread_struct *t = ¤t->thread;
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
index 7ad683d..69c4ace 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -178,7 +178,7 @@ u64 arch_irq_stat(void)
* SMP cross-CPU interrupts have their own specific
* handlers).
*/
-unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
+__visible unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);
@@ -208,7 +208,7 @@ unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
/*
* Handler for X86_PLATFORM_IPI_VECTOR.
*/
-void smp_x86_platform_ipi(struct pt_regs *regs)
+__visible void smp_x86_platform_ipi(struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);
diff --git a/arch/x86/kernel/irq_work.c b/arch/x86/kernel/irq_work.c
index ca8f703..f95694b 100644
--- a/arch/x86/kernel/irq_work.c
+++ b/arch/x86/kernel/irq_work.c
@@ -9,7 +9,7 @@
#include <linux/hardirq.h>
#include <asm/apic.h>
-void smp_irq_work_interrupt(struct pt_regs *regs)
+__visible void smp_irq_work_interrupt(struct pt_regs *regs)
{
irq_enter();
ack_APIC_irq();
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
index e2f751e..86d828b 100644
--- a/arch/x86/kernel/kprobes.c
+++ b/arch/x86/kernel/kprobes.c
@@ -647,7 +647,7 @@ static void __used __kprobes kretprobe_trampoline_holder(void)
/*
* Called from kretprobe_trampoline
*/
-static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
+__visible __used __kprobes void *trampoline_handler(struct pt_regs *regs)
{
struct kretprobe_instance *ri = NULL;
struct hlist_head *head, empty_rp;
diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
index 5b19e4d..7048960 100644
--- a/arch/x86/kernel/machine_kexec_32.c
+++ b/arch/x86/kernel/machine_kexec_32.c
@@ -184,7 +184,7 @@ void machine_kexec(struct kimage *image)
unsigned long page_list[PAGES_NR];
void *control_page;
int save_ftrace_enabled;
- asmlinkage unsigned long
+ unsigned long
(*relocate_kernel_ptr)(unsigned long indirection_page,
unsigned long control_page,
unsigned long start_address,
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index ef6a845..0d099ca3 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -268,7 +268,7 @@ void __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p,
propagate_user_return_notify(prev_p, next_p);
}
-int sys_fork(struct pt_regs *regs)
+__visible int sys_fork(struct pt_regs *regs)
{
return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
}
@@ -283,13 +283,13 @@ int sys_fork(struct pt_regs *regs)
* do not have enough call-clobbered registers to hold all
* the information you need.
*/
-int sys_vfork(struct pt_regs *regs)
+__visible int sys_vfork(struct pt_regs *regs)
{
return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->sp, regs, 0,
NULL, NULL);
}
-long
+__visible long
sys_clone(unsigned long clone_flags, unsigned long newsp,
void __user *parent_tid, void __user *child_tid, struct pt_regs *regs)
{
@@ -303,7 +303,7 @@ sys_clone(unsigned long clone_flags, unsigned long newsp,
* function to call, and %di containing
* the "args".
*/
-extern void kernel_thread_helper(void);
+__visible extern void kernel_thread_helper(void);
/*
* Create a kernel thread
@@ -339,7 +339,7 @@ EXPORT_SYMBOL(kernel_thread);
/*
* sys_execve() executes a new program.
*/
-long sys_execve(const char __user *name,
+__visible long sys_execve(const char __user *name,
const char __user *const __user *argv,
const char __user *const __user *envp, struct pt_regs *regs)
{
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
index 516fa18..4826bd1 100644
--- a/arch/x86/kernel/process_32.c
+++ b/arch/x86/kernel/process_32.c
@@ -225,7 +225,7 @@ EXPORT_SYMBOL_GPL(start_thread);
* the task-switch, and shows up in ret_from_fork in entry.S,
* for example.
*/
-__notrace_funcgraph struct task_struct *
+__visible __notrace_funcgraph struct task_struct *
__switch_to(struct task_struct *prev_p, struct task_struct *next_p)
{
struct thread_struct *prev = &prev_p->thread,
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index 0a980c9..a5720ed 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -265,7 +265,7 @@ void start_thread_ia32(struct pt_regs *regs, u32 new_ip, u32 new_sp)
* Kprobes not supported here. Set the probe on schedule instead.
* Function graph tracer not supported too.
*/
-__notrace_funcgraph struct task_struct *
+__visible __notrace_funcgraph struct task_struct *
__switch_to(struct task_struct *prev_p, struct task_struct *next_p)
{
struct thread_struct *prev = &prev_p->thread;
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index b280908..b3c241d 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -532,7 +532,7 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
}
#endif /* CONFIG_X86_32 */
-long
+__visible long
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
struct pt_regs *regs)
{
@@ -543,7 +543,7 @@ sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
* Do a signal return; undo the signal stack.
*/
#ifdef CONFIG_X86_32
-unsigned long sys_sigreturn(struct pt_regs *regs)
+__visible unsigned long sys_sigreturn(struct pt_regs *regs)
{
struct sigframe __user *frame;
unsigned long ax;
@@ -571,7 +571,7 @@ badframe:
}
#endif /* CONFIG_X86_32 */
-long sys_rt_sigreturn(struct pt_regs *regs)
+__visible long sys_rt_sigreturn(struct pt_regs *regs)
{
struct rt_sigframe __user *frame;
unsigned long ax;
@@ -776,7 +776,7 @@ static void do_signal(struct pt_regs *regs)
* notification of userspace execution resumption
* - triggered by the TIF_WORK_MASK flags
*/
-void
+__visible void
do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags)
{
#ifdef CONFIG_X86_MCE
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index 48d2b7d..d6bfa11 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -249,7 +249,7 @@ finish:
/*
* Reschedule call back.
*/
-void smp_reschedule_interrupt(struct pt_regs *regs)
+__visible void smp_reschedule_interrupt(struct pt_regs *regs)
{
ack_APIC_irq();
inc_irq_stat(irq_resched_count);
@@ -259,7 +259,7 @@ void smp_reschedule_interrupt(struct pt_regs *regs)
*/
}
-void smp_call_function_interrupt(struct pt_regs *regs)
+__visible void smp_call_function_interrupt(struct pt_regs *regs)
{
ack_APIC_irq();
irq_enter();
@@ -268,7 +268,7 @@ void smp_call_function_interrupt(struct pt_regs *regs)
irq_exit();
}
-void smp_call_function_single_interrupt(struct pt_regs *regs)
+__visible void smp_call_function_single_interrupt(struct pt_regs *regs)
{
ack_APIC_irq();
irq_enter();
diff --git a/arch/x86/kernel/syscall_64.c b/arch/x86/kernel/syscall_64.c
index 5c7f8c2..3967318 100644
--- a/arch/x86/kernel/syscall_64.c
+++ b/arch/x86/kernel/syscall_64.c
@@ -23,7 +23,7 @@ typedef void (*sys_call_ptr_t)(void);
extern void sys_ni_syscall(void);
-const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
+asmlinkage const sys_call_ptr_t sys_call_table[__NR_syscall_max+1] = {
/*
* Smells like a compiler bug -- it doesn't work
* when the & below is removed.
diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
index 54abcc0..5c1a188 100644
--- a/arch/x86/kernel/vm86_32.c
+++ b/arch/x86/kernel/vm86_32.c
@@ -202,7 +202,7 @@ out:
static int do_vm86_irq_handling(int subfunction, int irqnumber);
static void do_sys_vm86(struct kernel_vm86_struct *info, struct task_struct *tsk);
-int sys_vm86old(struct vm86_struct __user *v86, struct pt_regs *regs)
+__visible int sys_vm86old(struct vm86_struct __user *v86, struct pt_regs *regs)
{
struct kernel_vm86_struct info; /* declare this _on top_,
* this avoids wasting of stack space.
@@ -231,6 +231,7 @@ out:
}
+__visible
int sys_vm86(unsigned long cmd, unsigned long arg, struct pt_regs *regs)
{
struct kernel_vm86_struct info; /* declare this _on top_,
diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c
index e5b130b..a28bddf 100644
--- a/arch/x86/lib/usercopy_64.c
+++ b/arch/x86/lib/usercopy_64.c
@@ -66,7 +66,7 @@ EXPORT_SYMBOL(copy_in_user);
* Since protection fault in copy_from/to_user is not a normal situation,
* it is not necessary to optimize tail handling.
*/
-unsigned long
+__visible unsigned long
copy_user_handle_tail(char *to, char *from, unsigned len, unsigned zerorest)
{
char c;
--
1.7.7.6
next prev parent reply other threads:[~2012-08-19 2:58 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-19 2:55 RFC: Link Time Optimization support for the kernel Andi Kleen
2012-08-19 2:55 ` [PATCH 01/74] Add __visible Andi Kleen
2012-08-19 2:55 ` [PATCH 02/74] sections: Make all standard section identifiers __visible Andi Kleen
2012-08-19 2:55 ` [PATCH 03/74] sections: Make external kallsyms tables __visible Andi Kleen
2012-08-19 7:53 ` Jan Beulich
2012-08-19 15:29 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 04/74] sections: Add __visible to ia64 sections Andi Kleen
2012-08-19 2:56 ` [PATCH 05/74] sections: Add __visible to m68k sections Andi Kleen
2012-08-19 2:56 ` [PATCH 06/74] sections: Add __visible to powerpc sections Andi Kleen
2012-08-19 2:56 ` [PATCH 07/74] sections: Add __visible to sh sections Andi Kleen
2012-08-19 2:56 ` [PATCH 08/74] sections: Add __visible to tile sections Andi Kleen
2012-08-19 2:56 ` [PATCH 09/74] sections: Add __visible to x86 sections Andi Kleen
2012-08-19 2:56 ` [PATCH 10/74] sections: Add __visible to drivers/{base,pci} sections Andi Kleen
2012-08-19 2:56 ` [PATCH 11/74] sections: Add __visible to rapidio sections Andi Kleen
2012-08-19 2:56 ` [PATCH 12/74] sections: Add __visible to jump_label sections Andi Kleen
2012-08-19 2:56 ` [PATCH 13/74] sections: Add __visible to init/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 14/74] sections: Add __visible to kernel/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 15/74] sections: Add __visible to kernel/trace/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 16/74] sections: Add __visible to lib/* sections Andi Kleen
2012-08-19 2:56 ` [PATCH 17/74] lto: Make asmlinkage __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 18/74] lto, wan/sbni: Make inline assembler symbols visible and assembler global Andi Kleen
2012-08-19 2:56 ` Andi Kleen [this message]
2012-08-19 2:56 ` [PATCH 20/74] x86, lto: Change dotraplinkage into __visible on 32bit Andi Kleen
2012-09-01 14:44 ` Michal Marek
2012-08-19 2:56 ` [PATCH 21/74] lto: Make lockdep_sys_exit asmlinkage Andi Kleen
2012-08-19 2:56 ` [PATCH 22/74] lto: Change kernel_execve to asmlinkage for all architectures Andi Kleen
2012-08-19 2:56 ` [PATCH 23/74] lto, mutex: Mark __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 24/74] lto: Mark do_exit asmlinkage Andi Kleen
2012-08-19 2:56 ` [PATCH 25/74] x86, lto: Fix sys_call_table type in asm/syscall.h v2 Andi Kleen
2012-08-19 2:56 ` [PATCH 26/74] lto, sound: Fix export symbols for !CONFIG_MODULES Andi Kleen
2012-08-20 8:30 ` Takashi Iwai
2012-08-20 9:45 ` Andi Kleen
2012-08-20 9:53 ` Takashi Iwai
2012-08-19 2:56 ` [PATCH 27/74] lto: Mark EXPORT_SYMBOL symbols __visible Andi Kleen
2012-08-20 6:54 ` Rusty Russell
2012-08-20 9:49 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 28/74] lto: Make ksymtab and kcrctab symbols and __this_module __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 29/74] x86, lto: Make amd.c vide visible Andi Kleen
2012-08-19 2:56 ` [PATCH 30/74] x86, lto: Fix AMD K6 indirect call check Andi Kleen
2012-08-19 2:56 ` [PATCH 31/74] x86, lto: Make various variables used by assembler code __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 32/74] lto, PNP: Fix the inline assembler to use asmlinkage symbols Andi Kleen
2012-08-19 2:56 ` [PATCH 33/74] x86, lto, apm: Make APM data structure used from assembler visible Andi Kleen
2012-08-19 2:56 ` [PATCH 34/74] x86, lto, lguest: Fix C functions used by inline assembler Andi Kleen
2012-08-19 2:56 ` [PATCH 35/74] lto, crypto, aes: mark AES tables __visible Andi Kleen
2012-08-20 8:21 ` Herbert Xu
2012-08-19 2:56 ` [PATCH 36/74] lto, crypto, camelia: Make camelia tables used by assembler __visible Andi Kleen
2012-08-20 8:21 ` Herbert Xu
2012-08-19 2:56 ` [PATCH 37/74] lto, KVM: Don't assume asm statements end up in the same assembler file Andi Kleen
2012-08-19 8:59 ` Avi Kivity
2012-08-19 15:09 ` Andi Kleen
2012-08-19 15:12 ` Avi Kivity
2012-08-19 15:20 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 38/74] lto, watchdog/hpwdt.c: Make assembler label global Andi Kleen
2012-08-22 19:25 ` Wim Van Sebroeck
2012-08-22 20:11 ` Mingarelli, Thomas
2012-08-19 2:56 ` [PATCH 39/74] x86, lto: Mark vdso variables __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 40/74] lto, powerpc: Disable LTO for the powerpc VDSO Andi Kleen
2012-08-19 2:56 ` [PATCH 41/74] x86, lto: Disable LTO for the x86 VDSO Andi Kleen
2012-08-19 2:56 ` [PATCH 42/74] lto, raid: disable LTO for the Altivec RAID code Andi Kleen
2012-08-19 2:56 ` [PATCH 43/74] lto, workaround: Disable LTO for sys_ni to work around alias bugs Andi Kleen
2012-08-19 2:56 ` [PATCH 44/74] lto: Mark functions used by the vsyscall init code visible Andi Kleen
2012-09-01 15:26 ` Michal Marek
2012-09-01 17:16 ` Andi Kleen
2012-09-01 17:26 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 45/74] lto: Mark rwsem functions that can be called from assembler asmlinkage Andi Kleen
2012-08-19 2:56 ` [PATCH 46/74] x86, lto: Disable fancy hweight optimizations for LTO Andi Kleen
2012-08-19 8:28 ` Jan Beulich
2012-08-19 15:15 ` Andi Kleen
2012-08-20 10:57 ` Jan Beulich
2012-08-20 11:18 ` Andi Kleen
2012-08-20 12:38 ` Jan Beulich
2012-08-20 9:15 ` Avi Kivity
2012-08-20 9:42 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 47/74] x86, lto: Fix kprobes " Andi Kleen
2012-08-19 2:56 ` [PATCH 48/74] x86, lto: Use inline assembler instead of global register variable to get sp Andi Kleen
2012-08-19 8:37 ` Jan Beulich
2012-08-19 15:18 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 49/74] x86, lto, paravirt: Add __visible/asmlinkage to xen paravirt ops Andi Kleen
2012-08-19 2:56 ` [PATCH 50/74] x86, lto: Make empty_zero_page __visible for LTO Andi Kleen
2012-08-19 2:56 ` [PATCH 51/74] x86, lto, efi: Mark the efi variable used from assembler __visible Andi Kleen
2012-08-19 2:56 ` [PATCH 52/74] x86, lto, paravirt: Don't rely on local assembler labels Andi Kleen
2012-08-19 8:26 ` Jeremy Fitzhardinge
2012-08-19 2:56 ` [PATCH 53/74] x86, lto, paravirt: Make paravirt thunks global Andi Kleen
2012-08-19 8:27 ` Jeremy Fitzhardinge
2012-08-19 15:25 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 54/74] x86, lto, vdso: Don't duplicate vvar address variables Andi Kleen
2012-08-20 17:47 ` Andrew Lutomirski
2012-08-19 2:56 ` [PATCH 55/74] lto, workaround: Add workaround for initcall reordering Andi Kleen
2012-08-19 8:46 ` Jan Beulich
2012-08-19 15:01 ` Andi Kleen
2012-08-20 11:00 ` Jan Beulich
2012-08-19 2:56 ` [PATCH 56/74] lto, workaround: Add workaround for missing LTO symbols in igb Andi Kleen
2012-08-22 8:43 ` Arnd Bergmann
2012-08-22 12:36 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 57/74] lto, workaround: Add workaround for LTO build problem in pvrusb2-audio Andi Kleen
2012-08-19 2:56 ` [PATCH 58/74] lto, workaround: Work around LTO compiler problem in atheros driver Andi Kleen
2012-08-19 2:56 ` [PATCH 59/74] lto: Handle LTO common symbols in module loader Andi Kleen
2012-08-19 8:53 ` Jan Beulich
2012-08-19 15:23 ` Andi Kleen
2012-08-19 2:56 ` [PATCH 60/74] lto, Kbuild, bloat-o-meter: fix static detection Andi Kleen
2012-08-19 2:56 ` [PATCH 61/74] Kbuild, lto: Drop .number postfixes in modpost Andi Kleen
2012-08-19 2:56 ` [PATCH 62/74] Kbuild, lto: add ld-version and ld-ifversion macros Andi Kleen
2012-08-19 2:56 ` [PATCH 63/74] Kbuild, lto: Print correct info messages for vmlinux link Andi Kleen
2012-08-19 2:57 ` [PATCH 64/74] Kbuild, lto: Add a gcc-ld script to let run gcc as ld Andi Kleen
2012-08-19 2:57 ` [PATCH 65/74] Kbuild, lto: Disable LTO for asm-offsets.c Andi Kleen
2012-08-19 2:57 ` [PATCH 66/74] Kbuild, lto: Handle basic LTO in modpost Andi Kleen
2012-08-19 2:57 ` [PATCH 67/74] Kbuild, lto: Add Link Time Optimization support Andi Kleen
2012-08-19 2:57 ` [PATCH 68/74] Kbuild, lto: Add LTO build Documentation Andi Kleen
2012-08-19 2:57 ` [PATCH 69/74] lto: Increase kallsyms max symbol length Andi Kleen
2012-08-19 2:57 ` [PATCH 70/74] Kbuild, lto: Handle longer symbols in kallsyms.c Andi Kleen
2012-08-19 2:57 ` [PATCH 71/74] lto, kprobes: Use KSYM_NAME_LEN to size identifier buffers Andi Kleen
2012-08-21 4:44 ` Ananth N Mavinakayanahalli
2012-08-19 2:57 ` [PATCH 72/74] lto: Mark spinlocks noinline when inline spinlocks are disabled Andi Kleen
2012-08-19 2:57 ` [PATCH 73/74] lto, module: Warn about modules that are not fully LTOed Andi Kleen
2012-08-19 2:57 ` [PATCH 74/74] lto, workaround: Mark do_futex noinline to prevent clobbering ebp Andi Kleen
2012-08-23 0:17 ` H. Peter Anvin
2012-08-23 2:14 ` H. Peter Anvin
2012-08-23 2:29 ` Andi Kleen
2012-08-23 3:14 ` H. Peter Anvin
2012-08-20 7:48 ` RFC: Link Time Optimization support for the kernel Ingo Molnar
2012-08-20 10:10 ` Andi Kleen
2012-08-21 7:49 ` Ingo Molnar
2012-08-21 14:05 ` Don Zickus
2012-08-21 14:26 ` Avi Kivity
2012-08-21 17:02 ` Andi Kleen
2012-08-23 15:02 ` Jan Hubicka
2012-08-22 8:58 ` Arnd Bergmann
2012-08-22 12:35 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1345345030-22211-20-git-send-email-andi@firstfloor.org \
--to=andi@firstfloor.org \
--cc=JBeulich@suse.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mmarek@suse.cz \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome