Loading arch/x86/include/asm/thread_info.h +11 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,17 @@ static inline struct thread_info *current_thread_info(void) return ti; } static inline unsigned long current_stack_pointer(void) { unsigned long sp; #ifdef CONFIG_X86_64 asm("mov %%rsp,%0" : "=g" (sp)); #else asm("mov %%esp,%0" : "=g" (sp)); #endif return sp; } #else /* !__ASSEMBLY__ */ /* how to get the thread information struct from ASM */ Loading arch/x86/kernel/irq_32.c +3 −10 Original line number Diff line number Diff line Loading @@ -69,16 +69,9 @@ static void call_on_stack(void *func, void *stack) : "memory", "cc", "edx", "ecx", "eax"); } /* how to get the current stack pointer from C */ #define current_stack_pointer ({ \ unsigned long sp; \ asm("mov %%esp,%0" : "=g" (sp)); \ sp; \ }) static inline void *current_stack(void) { return (void *)(current_stack_pointer & ~(THREAD_SIZE - 1)); return (void *)(current_stack_pointer() & ~(THREAD_SIZE - 1)); } static inline int Loading @@ -103,7 +96,7 @@ execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq) /* Save the next esp at the bottom of the stack */ prev_esp = (u32 *)irqstk; *prev_esp = current_stack_pointer; *prev_esp = current_stack_pointer(); if (unlikely(overflow)) call_on_stack(print_stack_overflow, isp); Loading Loading @@ -156,7 +149,7 @@ void do_softirq_own_stack(void) /* Push the previous esp onto the stack */ prev_esp = (u32 *)irqstk; *prev_esp = current_stack_pointer; *prev_esp = current_stack_pointer(); call_on_stack(__do_softirq, isp); } Loading Loading
arch/x86/include/asm/thread_info.h +11 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,17 @@ static inline struct thread_info *current_thread_info(void) return ti; } static inline unsigned long current_stack_pointer(void) { unsigned long sp; #ifdef CONFIG_X86_64 asm("mov %%rsp,%0" : "=g" (sp)); #else asm("mov %%esp,%0" : "=g" (sp)); #endif return sp; } #else /* !__ASSEMBLY__ */ /* how to get the thread information struct from ASM */ Loading
arch/x86/kernel/irq_32.c +3 −10 Original line number Diff line number Diff line Loading @@ -69,16 +69,9 @@ static void call_on_stack(void *func, void *stack) : "memory", "cc", "edx", "ecx", "eax"); } /* how to get the current stack pointer from C */ #define current_stack_pointer ({ \ unsigned long sp; \ asm("mov %%esp,%0" : "=g" (sp)); \ sp; \ }) static inline void *current_stack(void) { return (void *)(current_stack_pointer & ~(THREAD_SIZE - 1)); return (void *)(current_stack_pointer() & ~(THREAD_SIZE - 1)); } static inline int Loading @@ -103,7 +96,7 @@ execute_on_irq_stack(int overflow, struct irq_desc *desc, int irq) /* Save the next esp at the bottom of the stack */ prev_esp = (u32 *)irqstk; *prev_esp = current_stack_pointer; *prev_esp = current_stack_pointer(); if (unlikely(overflow)) call_on_stack(print_stack_overflow, isp); Loading Loading @@ -156,7 +149,7 @@ void do_softirq_own_stack(void) /* Push the previous esp onto the stack */ prev_esp = (u32 *)irqstk; *prev_esp = current_stack_pointer; *prev_esp = current_stack_pointer(); call_on_stack(__do_softirq, isp); } Loading