int user_mode = user_mode(regs);
 
        /* Set up new TSS. */
-       tos = (unsigned long)p->thread_info + THREAD_SIZE;
+       tos = (unsigned long)task_stack_page(p) + THREAD_SIZE;
        if (user_mode)
                childregs = (struct pt_regs*)(tos - PT_USER_SIZE);
        else
 unsigned long get_wchan(struct task_struct *p)
 {
        unsigned long sp, pc;
-       unsigned long stack_page = (unsigned long) p->thread_info;
+       unsigned long stack_page = (unsigned long) task_stack_page(p);
        int count = 0;
 
        if (!p || p == current || p->state == TASK_RUNNING)
 
                struct pt_regs *regs;
                unsigned long tmp;
 
-               regs = xtensa_pt_regs(child);
+               regs = task_pt_regs(child);
                tmp = 0;  /* Default return value. */
 
                switch(addr) {
        case PTRACE_POKEUSR:
                {
                struct pt_regs *regs;
-               regs = xtensa_pt_regs(child);
+               regs = task_pt_regs(child);
 
                switch (addr) {
                case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1:
                 * elf_gregset_t format. */
 
                xtensa_gregset_t format;
-               struct pt_regs *regs = xtensa_pt_regs(child);
+               struct pt_regs *regs = task_pt_regs(child);
 
                do_copy_regs (&format, regs, child);
 
                 * values in the elf_gregset_t format. */
 
                xtensa_gregset_t format;
-               struct pt_regs *regs = xtensa_pt_regs(child);
+               struct pt_regs *regs = task_pt_regs(child);
 
                if (copy_from_user(&format,(void *)data,sizeof(elf_gregset_t))){
                        ret = -EFAULT;
                 * elf_fpregset_t format. */
 
                elf_fpregset_t fpregs;
-               struct pt_regs *regs = xtensa_pt_regs(child);
+               struct pt_regs *regs = task_pt_regs(child);
 
                do_save_fpregs (&fpregs, regs, child);
 
                 * values in the elf_fpregset_t format.
                 */
                elf_fpregset_t fpregs;
-               struct pt_regs *regs = xtensa_pt_regs(child);
+               struct pt_regs *regs = task_pt_regs(child);
 
                ret = 0;
                if (copy_from_user(&fpregs, (void *)data, sizeof(elf_fpregset_t))) {
 
 #define release_segments(mm)   do { } while(0)
 #define forget_segments()      do { } while (0)
 
-#define thread_saved_pc(tsk)   (xtensa_pt_regs(tsk)->pc)
+#define thread_saved_pc(tsk)   (task_pt_regs(tsk)->pc)
 
 extern unsigned long get_wchan(struct task_struct *p);
 
-#define KSTK_EIP(tsk)          (xtensa_pt_regs(tsk)->pc)
-#define KSTK_ESP(tsk)          (xtensa_pt_regs(tsk)->areg[1])
+#define KSTK_EIP(tsk)          (task_pt_regs(tsk)->pc)
+#define KSTK_ESP(tsk)          (task_pt_regs(tsk)->areg[1])
 
 #define cpu_relax()  do { } while (0)
 
 
 };
 
 #ifdef __KERNEL__
-# define xtensa_pt_regs(tsk) ((struct pt_regs*) \
-  (((long)(tsk)->thread_info + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4)) - 1)
+# define task_pt_regs(tsk) ((struct pt_regs*) \
+  (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1)
 # define user_mode(regs) (((regs)->ps & 0x00000020)!=0)
 # define instruction_pointer(regs) ((regs)->pc)
 extern void show_regs(struct pt_regs *);