|
@@ -721,8 +721,6 @@ static inline void spin_lock_prefetch(const void *x)
|
|
.addr_limit = KERNEL_DS, \
|
|
.addr_limit = KERNEL_DS, \
|
|
}
|
|
}
|
|
|
|
|
|
-extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* TOP_OF_KERNEL_STACK_PADDING reserves 8 bytes on top of the ring0 stack.
|
|
* TOP_OF_KERNEL_STACK_PADDING reserves 8 bytes on top of the ring0 stack.
|
|
* This is necessary to guarantee that the entire "struct pt_regs"
|
|
* This is necessary to guarantee that the entire "struct pt_regs"
|
|
@@ -773,17 +771,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
.addr_limit = KERNEL_DS, \
|
|
.addr_limit = KERNEL_DS, \
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Return saved PC of a blocked thread.
|
|
|
|
- * What is this good for? it will be always the scheduler or ret_from_fork.
|
|
|
|
- */
|
|
|
|
-#define thread_saved_pc(t) READ_ONCE_NOCHECK(*(unsigned long *)((t)->thread.sp - 8))
|
|
|
|
-
|
|
|
|
#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.sp0 - 1)
|
|
#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.sp0 - 1)
|
|
extern unsigned long KSTK_ESP(struct task_struct *task);
|
|
extern unsigned long KSTK_ESP(struct task_struct *task);
|
|
|
|
|
|
#endif /* CONFIG_X86_64 */
|
|
#endif /* CONFIG_X86_64 */
|
|
|
|
|
|
|
|
+extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
|
|
+
|
|
extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
|
|
extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
|
|
unsigned long new_sp);
|
|
unsigned long new_sp);
|
|
|
|
|