System call excepton handler about  the svc stack in the linux

I am studying System call in the linux. I know that is using SVC exception handler.

the related codes are as follow

====================exception handler codes===================================

ENTRY(vector_swi)

sub sp, sp, #S_FRAME_SIZE

stmia sp, {r0 - r12}   @ Calling r0 - r12

add r8, sp, #S_PC

stmdb r8, {sp, lr}^   @ Calling sp, lr

mrs r8, spsr   @ called from non-FIQ mode, so ok.

str lr, [sp, #S_PC]   @ Save calling PC

str r8, [sp, #S_PSR]  @ Save CPSR

str r0, [sp, #S_OLD_R0]  @ Save OLD_R0

zero_fp

==========================================================================

I've read some documents when the svc exception occurs, there are som copy operation  which is

that the lr_usr is written into lr_svc and cpsr is written into spsr_svc to resore user-mode's context.

I think that the codes above is all about saving user-mode process context.

First Question is:

the first line is that "sub sp, sp, #S_FRAME_SIZE".

I  want to know  the sp above code means.

is it sp_usr or sp_svc?  i guess this is the sp_svc because we are in the svc exception handler. so we should use the banked-sp register

is that right?

Second Question is:

if it were sp_svc. i want to know where the svc stack is initialized. i could not have found the code related to initialing it in the linux(version 2.6.21)

is it process's stack?

the linux kernel starts with SVC mode, and initialize the ilde stack (PID = 0) whose variable name is "init_thread_union".

i think this is the first stack initialization about svc mode. then sp means this stack?

could somebody help me about this?

thanks