mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
arch: remove unused macro/function thread_saved_pc()
The only user of thread_saved_pc() in non-arch-specific code was removed
in commit 8243d55977
("sched/core: Remove pointless printout in
sched_show_task()"). Remove the implementations as well.
Some architectures use thread_saved_pc() in their arch-specific code.
Leave their thread_saved_pc() intact.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e547204f1f
commit
6474924e2b
@ -86,8 +86,6 @@ struct task_struct;
|
|||||||
#define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4)
|
#define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4)
|
||||||
#define TSK_K_FP(tsk) TSK_K_REG(tsk, 0)
|
#define TSK_K_FP(tsk) TSK_K_REG(tsk, 0)
|
||||||
|
|
||||||
#define thread_saved_pc(tsk) TSK_K_BLINK(tsk)
|
|
||||||
|
|
||||||
extern void start_thread(struct pt_regs * regs, unsigned long pc,
|
extern void start_thread(struct pt_regs * regs, unsigned long pc,
|
||||||
unsigned long usp);
|
unsigned long usp);
|
||||||
|
|
||||||
|
@ -75,11 +75,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
#define thread_saved_pc(tsk) (tsk->thread.pc)
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) \
|
#define KSTK_EIP(tsk) \
|
||||||
|
@ -95,11 +95,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
#define copy_segments(tsk, mm) do { } while (0)
|
#define copy_segments(tsk, mm) do { } while (0)
|
||||||
#define release_segments(mm) do { } while (0)
|
#define release_segments(mm) do { } while (0)
|
||||||
|
|
||||||
/*
|
|
||||||
* saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
#define thread_saved_pc(tsk) (task_pt_regs(tsk)->pc)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* saved kernel SP and DP of a blocked thread.
|
* saved kernel SP and DP of a blocked thread.
|
||||||
*/
|
*/
|
||||||
|
@ -69,14 +69,6 @@ void hard_reset_now (void)
|
|||||||
while(1) /* waiting for RETRIBUTION! */ ;
|
while(1) /* waiting for RETRIBUTION! */ ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *t)
|
|
||||||
{
|
|
||||||
return task_pt_regs(t)->irp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* setup the child's kernel stack with a pt_regs and switch_stack on it.
|
/* setup the child's kernel stack with a pt_regs and switch_stack on it.
|
||||||
* it will be un-nested during _resume and _ret_from_sys_call when the
|
* it will be un-nested during _resume and _ret_from_sys_call when the
|
||||||
* new thread is scheduled.
|
* new thread is scheduled.
|
||||||
|
@ -84,14 +84,6 @@ hard_reset_now(void)
|
|||||||
; /* Wait for reset. */
|
; /* Wait for reset. */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *t)
|
|
||||||
{
|
|
||||||
return task_pt_regs(t)->erp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup the child's kernel stack with a pt_regs and call switch_stack() on it.
|
* Setup the child's kernel stack with a pt_regs and call switch_stack() on it.
|
||||||
* It will be unnested during _resume and _ret_from_sys_call when the new thread
|
* It will be unnested during _resume and _ret_from_sys_call when the new thread
|
||||||
|
@ -52,8 +52,6 @@ unsigned long get_wchan(struct task_struct *p);
|
|||||||
|
|
||||||
#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp)
|
#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->thread.usp)
|
||||||
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
||||||
|
|
||||||
/* Free all resources held by a thread. */
|
/* Free all resources held by a thread. */
|
||||||
static inline void release_thread(struct task_struct *dead_task)
|
static inline void release_thread(struct task_struct *dead_task)
|
||||||
{
|
{
|
||||||
|
@ -96,11 +96,6 @@ extern asmlinkage void *restore_user_regs(const struct user_context *target, ...
|
|||||||
#define release_segments(mm) do { } while (0)
|
#define release_segments(mm) do { } while (0)
|
||||||
#define forget_segments() do { } while (0)
|
#define forget_segments() do { } while (0)
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
|
#define KSTK_EIP(tsk) ((tsk)->thread.frame0->pc)
|
||||||
|
@ -198,15 +198,6 @@ unsigned long get_wchan(struct task_struct *p)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
/* Check whether the thread is blocked in resume() */
|
|
||||||
if (in_sched_functions(tsk->thread.pc))
|
|
||||||
return ((unsigned long *)tsk->thread.fp)[2];
|
|
||||||
else
|
|
||||||
return tsk->thread.pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
int elf_check_arch(const struct elf32_hdr *hdr)
|
int elf_check_arch(const struct elf32_hdr *hdr)
|
||||||
{
|
{
|
||||||
unsigned long hsr0 = __get_HSR(0);
|
unsigned long hsr0 = __get_HSR(0);
|
||||||
|
@ -110,10 +110,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) \
|
#define KSTK_EIP(tsk) \
|
||||||
|
@ -129,11 +129,6 @@ int copy_thread(unsigned long clone_flags,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return ((struct pt_regs *)tsk->thread.esp0)->pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p)
|
unsigned long get_wchan(struct task_struct *p)
|
||||||
{
|
{
|
||||||
unsigned long fp, pc;
|
unsigned long fp, pc;
|
||||||
|
@ -33,9 +33,6 @@
|
|||||||
/* task_struct, defined elsewhere, is the "process descriptor" */
|
/* task_struct, defined elsewhere, is the "process descriptor" */
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
|
|
||||||
/* this is defined in arch/process.c */
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
||||||
|
|
||||||
extern void start_thread(struct pt_regs *, unsigned long, unsigned long);
|
extern void start_thread(struct pt_regs *, unsigned long, unsigned long);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -60,14 +60,6 @@ void arch_cpu_idle(void)
|
|||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy architecture-specific thread state
|
* Copy architecture-specific thread state
|
||||||
*/
|
*/
|
||||||
|
@ -601,23 +601,6 @@ ia64_set_unat (__u64 *unat, void *spill_addr, unsigned long nat)
|
|||||||
*unat = (*unat & ~mask) | (nat << bit);
|
*unat = (*unat & ~mask) | (nat << bit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
* Note that the only way T can block is through a call to schedule() -> switch_to().
|
|
||||||
*/
|
|
||||||
static inline unsigned long
|
|
||||||
thread_saved_pc (struct task_struct *t)
|
|
||||||
{
|
|
||||||
struct unw_frame_info info;
|
|
||||||
unsigned long ip;
|
|
||||||
|
|
||||||
unw_init_from_blocked_task(&info, t);
|
|
||||||
if (unw_unwind(&info) < 0)
|
|
||||||
return 0;
|
|
||||||
unw_get_ip(&info, &ip);
|
|
||||||
return ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the current instruction/program counter value.
|
* Get the current instruction/program counter value.
|
||||||
*/
|
*/
|
||||||
|
@ -122,8 +122,6 @@ extern void release_thread(struct task_struct *);
|
|||||||
extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
|
extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
|
||||||
extern void release_segments(struct mm_struct * mm);
|
extern void release_segments(struct mm_struct * mm);
|
||||||
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *);
|
|
||||||
|
|
||||||
/* Copy and release all segment info associated with a VM */
|
/* Copy and release all segment info associated with a VM */
|
||||||
#define copy_segments(p, mm) do { } while (0)
|
#define copy_segments(p, mm) do { } while (0)
|
||||||
#define release_segments(mm) do { } while (0)
|
#define release_segments(mm) do { } while (0)
|
||||||
|
@ -39,14 +39,6 @@
|
|||||||
|
|
||||||
#include <linux/err.h>
|
#include <linux/err.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return tsk->thread.lr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void (*pm_power_off)(void) = NULL;
|
void (*pm_power_off)(void) = NULL;
|
||||||
EXPORT_SYMBOL(pm_power_off);
|
EXPORT_SYMBOL(pm_power_off);
|
||||||
|
|
||||||
|
@ -130,8 +130,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) \
|
#define KSTK_EIP(tsk) \
|
||||||
|
@ -40,20 +40,6 @@
|
|||||||
asmlinkage void ret_from_fork(void);
|
asmlinkage void ret_from_fork(void);
|
||||||
asmlinkage void ret_from_kernel_thread(void);
|
asmlinkage void ret_from_kernel_thread(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC from a blocked thread
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
struct switch_stack *sw = (struct switch_stack *)tsk->thread.ksp;
|
|
||||||
/* Check whether the thread is blocked in resume() */
|
|
||||||
if (in_sched_functions(sw->retpc))
|
|
||||||
return ((unsigned long *)sw->a6)[1];
|
|
||||||
else
|
|
||||||
return sw->retpc;
|
|
||||||
}
|
|
||||||
|
|
||||||
void arch_cpu_idle(void)
|
void arch_cpu_idle(void)
|
||||||
{
|
{
|
||||||
#if defined(MACH_ATARI_ONLY)
|
#if defined(MACH_ATARI_ONLY)
|
||||||
|
@ -69,8 +69,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *t);
|
|
||||||
|
|
||||||
extern unsigned long get_wchan(struct task_struct *p);
|
extern unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
# define KSTK_EIP(tsk) (0)
|
# define KSTK_EIP(tsk) (0)
|
||||||
@ -121,10 +119,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return saved (kernel) PC of a blocked thread. */
|
|
||||||
# define thread_saved_pc(tsk) \
|
|
||||||
((tsk)->thread.regs ? (tsk)->thread.regs->r15 : 0)
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
/* The size allocated for kernel stacks. This _must_ be a power of two! */
|
/* The size allocated for kernel stacks. This _must_ be a power of two! */
|
||||||
|
@ -119,23 +119,6 @@ int copy_thread(unsigned long clone_flags, unsigned long usp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_MMU
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
struct cpu_context *ctx =
|
|
||||||
&(((struct thread_info *)(tsk->stack))->cpu_context);
|
|
||||||
|
|
||||||
/* Check whether the thread is blocked in resume() */
|
|
||||||
if (in_sched_functions(ctx->r15))
|
|
||||||
return (unsigned long)ctx->r15;
|
|
||||||
else
|
|
||||||
return ctx->r14;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p)
|
unsigned long get_wchan(struct task_struct *p)
|
||||||
{
|
{
|
||||||
/* TBD (used by procfs) */
|
/* TBD (used by procfs) */
|
||||||
|
@ -132,11 +132,6 @@ static inline void start_thread(struct pt_regs *regs,
|
|||||||
/* Free all resources held by a thread. */
|
/* Free all resources held by a thread. */
|
||||||
extern void release_thread(struct task_struct *);
|
extern void release_thread(struct task_struct *);
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define task_pt_regs(task) ((task)->thread.uregs)
|
#define task_pt_regs(task) ((task)->thread.uregs)
|
||||||
|
@ -39,14 +39,6 @@
|
|||||||
#include <asm/gdb-stub.h>
|
#include <asm/gdb-stub.h>
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return ((unsigned long *) tsk->thread.sp)[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* power off function, if any
|
* power off function, if any
|
||||||
*/
|
*/
|
||||||
|
@ -75,9 +75,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return saved PC of a blocked thread. */
|
|
||||||
#define thread_saved_pc(tsk) ((tsk)->thread.kregs->ea)
|
|
||||||
|
|
||||||
extern unsigned long get_wchan(struct task_struct *p);
|
extern unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define task_pt_regs(p) \
|
#define task_pt_regs(p) \
|
||||||
|
@ -84,11 +84,6 @@ void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp);
|
|||||||
void release_thread(struct task_struct *);
|
void release_thread(struct task_struct *);
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread. For now, this is the "user" PC
|
|
||||||
*/
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *t);
|
|
||||||
|
|
||||||
#define init_stack (init_thread_union.stack)
|
#define init_stack (init_thread_union.stack)
|
||||||
|
|
||||||
#define cpu_relax() barrier()
|
#define cpu_relax() barrier()
|
||||||
|
@ -110,11 +110,6 @@ void show_regs(struct pt_regs *regs)
|
|||||||
show_registers(regs);
|
show_registers(regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *t)
|
|
||||||
{
|
|
||||||
return (unsigned long)user_regs(t->stack)->pc;
|
|
||||||
}
|
|
||||||
|
|
||||||
void release_thread(struct task_struct *dead_task)
|
void release_thread(struct task_struct *dead_task)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -163,12 +163,7 @@ struct thread_struct {
|
|||||||
.flags = 0 \
|
.flags = 0 \
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread. This is used by ps mostly.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
unsigned long thread_saved_pc(struct task_struct *t);
|
|
||||||
void show_trace(struct task_struct *task, unsigned long *stack);
|
void show_trace(struct task_struct *task, unsigned long *stack);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -239,11 +239,6 @@ copy_thread(unsigned long clone_flags, unsigned long usp,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *t)
|
|
||||||
{
|
|
||||||
return t->thread.regs.kpc;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long
|
unsigned long
|
||||||
get_wchan(struct task_struct *p)
|
get_wchan(struct task_struct *p)
|
||||||
{
|
{
|
||||||
|
@ -378,12 +378,6 @@ struct thread_struct {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread. For now, this is the "user" PC
|
|
||||||
*/
|
|
||||||
#define thread_saved_pc(tsk) \
|
|
||||||
((tsk)->thread.regs? (tsk)->thread.regs->nip: 0)
|
|
||||||
|
|
||||||
#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.regs)
|
#define task_pt_regs(tsk) ((struct pt_regs *)(tsk)->thread.regs)
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
@ -221,11 +221,6 @@ extern void release_thread(struct task_struct *);
|
|||||||
/* Free guarded storage control block for current */
|
/* Free guarded storage control block for current */
|
||||||
void exit_thread_gs(void);
|
void exit_thread_gs(void);
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
*/
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *t);
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
#define task_pt_regs(tsk) ((struct pt_regs *) \
|
#define task_pt_regs(tsk) ((struct pt_regs *) \
|
||||||
(task_stack_page(tsk) + THREAD_SIZE) - 1)
|
(task_stack_page(tsk) + THREAD_SIZE) - 1)
|
||||||
|
@ -41,31 +41,6 @@
|
|||||||
|
|
||||||
asmlinkage void ret_from_fork(void) asm ("ret_from_fork");
|
asmlinkage void ret_from_fork(void) asm ("ret_from_fork");
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread. used in kernel/sched.
|
|
||||||
* resume in entry.S does not create a new stack frame, it
|
|
||||||
* just stores the registers %r6-%r15 to the frame given by
|
|
||||||
* schedule. We want to return the address of the caller of
|
|
||||||
* schedule, so we have to walk the backchain one time to
|
|
||||||
* find the frame schedule() store its return address.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
struct stack_frame *sf, *low, *high;
|
|
||||||
|
|
||||||
if (!tsk || !task_stack_page(tsk))
|
|
||||||
return 0;
|
|
||||||
low = task_stack_page(tsk);
|
|
||||||
high = (struct stack_frame *) task_pt_regs(tsk);
|
|
||||||
sf = (struct stack_frame *) tsk->thread.ksp;
|
|
||||||
if (sf <= low || sf > high)
|
|
||||||
return 0;
|
|
||||||
sf = (struct stack_frame *) sf->back_chain;
|
|
||||||
if (sf <= low || sf > high)
|
|
||||||
return 0;
|
|
||||||
return sf->gprs[8];
|
|
||||||
}
|
|
||||||
|
|
||||||
extern void kernel_thread_starter(void);
|
extern void kernel_thread_starter(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -13,7 +13,6 @@ struct task_struct;
|
|||||||
*/
|
*/
|
||||||
extern void (*cpu_wait)(void);
|
extern void (*cpu_wait)(void);
|
||||||
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *tsk);
|
|
||||||
extern void start_thread(struct pt_regs *regs,
|
extern void start_thread(struct pt_regs *regs,
|
||||||
unsigned long pc, unsigned long sp);
|
unsigned long pc, unsigned long sp);
|
||||||
extern unsigned long get_wchan(struct task_struct *p);
|
extern unsigned long get_wchan(struct task_struct *p);
|
||||||
|
@ -101,11 +101,6 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *r)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return task_pt_regs(tsk)->cp0_epc;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *task)
|
unsigned long get_wchan(struct task_struct *task)
|
||||||
{
|
{
|
||||||
if (!task || task == current || task->state == TASK_RUNNING)
|
if (!task || task == current || task->state == TASK_RUNNING)
|
||||||
|
@ -67,9 +67,6 @@ struct thread_struct {
|
|||||||
.current_ds = KERNEL_DS, \
|
.current_ds = KERNEL_DS, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return saved PC of a blocked thread. */
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *t);
|
|
||||||
|
|
||||||
/* Do necessary setup to start up a newly executed thread. */
|
/* Do necessary setup to start up a newly executed thread. */
|
||||||
static inline void start_thread(struct pt_regs * regs, unsigned long pc,
|
static inline void start_thread(struct pt_regs * regs, unsigned long pc,
|
||||||
unsigned long sp)
|
unsigned long sp)
|
||||||
|
@ -89,9 +89,7 @@ struct thread_struct {
|
|||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <asm/fpumacro.h>
|
#include <asm/fpumacro.h>
|
||||||
|
|
||||||
/* Return saved PC of a blocked thread. */
|
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
unsigned long thread_saved_pc(struct task_struct *);
|
|
||||||
|
|
||||||
/* On Uniprocessor, even in RMO processes see TSO semantics */
|
/* On Uniprocessor, even in RMO processes see TSO semantics */
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
|
@ -176,14 +176,6 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
|
|||||||
printk("\n");
|
printk("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Note: sparc64 has a pretty intricated thread_saved_pc, check it out.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
return task_thread_info(tsk)->kpc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Free current thread data structures etc..
|
* Free current thread data structures etc..
|
||||||
*/
|
*/
|
||||||
|
@ -400,25 +400,6 @@ core_initcall(sparc_sysrq_init);
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
struct thread_info *ti = task_thread_info(tsk);
|
|
||||||
unsigned long ret = 0xdeadbeefUL;
|
|
||||||
|
|
||||||
if (ti && ti->ksp) {
|
|
||||||
unsigned long *sp;
|
|
||||||
sp = (unsigned long *)(ti->ksp + STACK_BIAS);
|
|
||||||
if (((unsigned long)sp & (sizeof(long) - 1)) == 0UL &&
|
|
||||||
sp[14]) {
|
|
||||||
unsigned long *fp;
|
|
||||||
fp = (unsigned long *)(sp[14] + STACK_BIAS);
|
|
||||||
if (((unsigned long)fp & (sizeof(long) - 1)) == 0UL)
|
|
||||||
ret = fp[15];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free current thread data structures etc.. */
|
/* Free current thread data structures etc.. */
|
||||||
void exit_thread(struct task_struct *tsk)
|
void exit_thread(struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
|
@ -214,13 +214,6 @@ static inline void release_thread(struct task_struct *dead_task)
|
|||||||
|
|
||||||
extern void prepare_exit_to_usermode(struct pt_regs *regs, u32 flags);
|
extern void prepare_exit_to_usermode(struct pt_regs *regs, u32 flags);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved (kernel) PC of a blocked thread.
|
|
||||||
* Only used in a printk() in kernel/sched/core.c, so don't work too hard.
|
|
||||||
*/
|
|
||||||
#define thread_saved_pc(t) ((t)->thread.pc)
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
/* Return initial ksp value for given task. */
|
/* Return initial ksp value for given task. */
|
||||||
|
@ -58,8 +58,6 @@ static inline void release_thread(struct task_struct *task)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unsigned long thread_saved_pc(struct task_struct *t);
|
|
||||||
|
|
||||||
static inline void mm_copy_segments(struct mm_struct *from_mm,
|
static inline void mm_copy_segments(struct mm_struct *from_mm,
|
||||||
struct mm_struct *new_mm)
|
struct mm_struct *new_mm)
|
||||||
{
|
{
|
||||||
|
@ -56,12 +56,6 @@ union thread_union cpu0_irqstack
|
|||||||
__attribute__((__section__(".data..init_irqstack"))) =
|
__attribute__((__section__(".data..init_irqstack"))) =
|
||||||
{ INIT_THREAD_INFO(init_task) };
|
{ INIT_THREAD_INFO(init_task) };
|
||||||
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *task)
|
|
||||||
{
|
|
||||||
/* FIXME: Need to look up userspace_pid by cpu */
|
|
||||||
return os_process_pc(userspace_pid[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Changed in setup_arch, which is called in early boot */
|
/* Changed in setup_arch, which is called in early boot */
|
||||||
static char host_info[(__NEW_UTS_LEN + 1) * 5];
|
static char host_info[(__NEW_UTS_LEN + 1) * 5];
|
||||||
|
|
||||||
|
@ -860,8 +860,6 @@ 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);
|
||||||
|
|
||||||
|
@ -544,17 +544,6 @@ unsigned long arch_randomize_brk(struct mm_struct *mm)
|
|||||||
return randomize_page(mm->brk, 0x02000000);
|
return randomize_page(mm->brk, 0x02000000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Return saved PC of a blocked thread.
|
|
||||||
* What is this good for? it will be always the scheduler or ret_from_fork.
|
|
||||||
*/
|
|
||||||
unsigned long thread_saved_pc(struct task_struct *tsk)
|
|
||||||
{
|
|
||||||
struct inactive_task_frame *frame =
|
|
||||||
(struct inactive_task_frame *) READ_ONCE(tsk->thread.sp);
|
|
||||||
return READ_ONCE_NOCHECK(frame->ret_addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Called from fs/proc with a reference on @p to find the function
|
* Called from fs/proc with a reference on @p to find the function
|
||||||
* which called into schedule(). This needs to be done carefully
|
* which called into schedule(). This needs to be done carefully
|
||||||
|
@ -213,8 +213,6 @@ struct mm_struct;
|
|||||||
#define release_segments(mm) do { } while(0)
|
#define release_segments(mm) do { } while(0)
|
||||||
#define forget_segments() do { } while (0)
|
#define forget_segments() do { } while (0)
|
||||||
|
|
||||||
#define thread_saved_pc(tsk) (task_pt_regs(tsk)->pc)
|
|
||||||
|
|
||||||
extern unsigned long get_wchan(struct task_struct *p);
|
extern unsigned long get_wchan(struct task_struct *p);
|
||||||
|
|
||||||
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)
|
#define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc)
|
||||||
|
Loading…
Reference in New Issue
Block a user