ARC: low Level ISR tweaks - Simplify branch for in-kernel preemption

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
ARC: pt_regs cleanup #1: Align pt_regs to bottom of kernel stack page

Historically, pt_regs would end at offset of 1 word from end of stack
page. This required special considerations in low level code.

        -----------------  -> start of page (task->stack)
        |               |
        | thread_info   |
        -----------------
        |               | -->  (END of kernel stack)
   ^    ~               ~
   |    ~               ~
   |    |               |
   |    |               | <---- pt_regs used to END here
        -----------------
        | 1 word GUTTER |
        ----------------- -> End of page (START of kernel stack)

The root cause is very likely assumption of "empty stack" SP by the
orig ARC kernel hackers whereas ARC700 was always "full stack" SP.

So finally RIP one word gutter !

Note that since this is at end of pt_regs (and not at start), ptrace is
not affected.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
ARC: pt_regs cleanup #2: Remove unused gutter at start of pt_regs

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
ARC: pt_regs cleanup #3: Remove one word gutter at start of callee_regs

This is trickier than prev two:

* context switching code saves kernel mode callee regs in the format of
  struct callee_regs thus needs adjustment. This also reduces the height
  of topmost kernel stack frame by 1 word.

* Since kernel stack unwinder is sensitive to height of topmost kernel
  stack frame, that needs a word of adjustment too.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
ARC: Factor out multiple copies of callee regs save/restore into helper

Nothing semantical

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
ARC: r25 saved/restored for U->K as well as K->K transitions

(This is a VERY IMP change for low level interrupt/exception handling)

-----------------------------------------------------------------------
WHAT
-----------------------------------------------------------------------
* User 25 now saved in pt_regs->user_r25 (vs. tsk->thread_info.user_r25)

* This allows Low level interrupt code to unconditionally save r25
  (vs. the prev version which would only do it for U->K transition).
  Ofcourse for nested interrupts, only the pt_regs->user_r25 of
  bottom-most frame is useful.

* simplifies the interrupt prologue/epilogue

* Not really needed for ARCompact but more to keep the same design for
  the new ARCv2 ISA based code.

-----------------------------------------------------------------------
WHY
-------------------------------------------------------------------------
With CONFIG_ARC_CURR_IN_REG, r25 is used to cache "current" task pointer
in kernel mode. So when entering kernel mode from User Mode
- user r25 is specially safe-kept (it being a callee reg is NOT part of
  pt_regs which are saved by default on each interrupt/trap/exception)
- r25 loaded with current taskpointer.

Further, if interrupt was taken in kernel mode, this is skipped since we
know that r25 already has valid "current" pointer.

With 2 level of interrupts in ARCompact ISA, detecting this is difficult
but still possible, since we could be in kernel mode but r25 not already saved
(in fact the stack itself might not have been switched).

A. User mode
B. L1 IRQ taken
C. L2 IRQ taken (while on 1st line of L1 ISR)

So in #C, although in kernel mode, r25 not saved (infact SP not
switched at all)

Given that ARcompact has manual stack switching, we could use a bit of
trickey - The low level code would make sure that SP is only set to kernel
mode value at the very end (after saving r25). So a non kernel mode SP,
even if in kernel mode, meant r25 was NOT saved.

The same paradigm won't work in ARCv2 ISA since SP is auto-switched so
it's setting can't be delayed/constrained.

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>