Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
fbfa26ae
Commit
fbfa26ae
authored
Oct 13, 2014
by
Vineet Gupta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ARC: entry.S: common'ize scrtach reg freeup in intr + exceptions
Signed-off-by:
Vineet Gupta
<
vgupta@synopsys.com
>
parent
11e14896
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
18 additions
and
27 deletions
+18
-27
arch/arc/include/asm/entry.h
arch/arc/include/asm/entry.h
+16
-19
arch/arc/kernel/entry.S
arch/arc/kernel/entry.S
+2
-8
No files found.
arch/arc/include/asm/entry.h
View file @
fbfa26ae
...
...
@@ -360,26 +360,26 @@
.
endm
/*--------------------------------------------------------------
* For early Exception Prologue, a core reg is temporarily needed to
* For early Exception
/ISR
Prologue, a core reg is temporarily needed to
* code the rest of prolog (stack switching). This is done by stashing
* it to memory (non-SMP case) or SCRATCH0 Aux Reg (SMP).
*
* Before saving the full regfile - this reg is restored back, only
* to be saved again on kernel mode stack, as part of pt_regs.
*-------------------------------------------------------------*/
.
macro
EXCPN_PROLOG_FREEUP_REG
reg
.
macro
PROLOG_FREEUP_REG
reg
,
mem
#ifdef CONFIG_SMP
sr
\
reg
,
[
ARC_REG_SCRATCH_DATA0
]
#else
st
\
reg
,
[
@
ex_saved_reg1
]
st
\
reg
,
[
\
mem
]
#endif
.
endm
.
macro
EXCPN_PROLOG_RESTORE_REG
reg
.
macro
PROLOG_RESTORE_REG
reg
,
mem
#ifdef CONFIG_SMP
lr
\
reg
,
[
ARC_REG_SCRATCH_DATA0
]
#else
ld
\
reg
,
[
@
ex_saved_reg1
]
ld
\
reg
,
[
\
mem
]
#endif
.
endm
...
...
@@ -393,7 +393,7 @@
.
macro
EXCEPTION_PROLOGUE
/* Need at least 1 reg to code the early exception prologue */
EXCPN_PROLOG_FREEUP_REG
r9
PROLOG_FREEUP_REG
r9
,
@
ex_saved_reg1
/* U/K mode at time of exception (stack not switched if already K) */
lr
r9
,
[
erstatus
]
...
...
@@ -421,7 +421,7 @@
st
r0
,
[
sp
,
4
]
/* orig_r0, needed only for sys calls */
/* Restore r9 used to code the early prologue */
EXCPN_PROLOG_RESTORE_REG
r9
PROLOG_RESTORE_REG
r9
,
@
ex_saved_reg1
SAVE_R0_TO_R12
PUSH
gp
...
...
@@ -471,12 +471,8 @@
*-------------------------------------------------------------*/
.
macro
SAVE_ALL_INT1
/* restore original r9 to be saved as part of reg-file */
#ifdef CONFIG_SMP
lr
r9
,
[
ARC_REG_SCRATCH_DATA0
]
#else
ld
r9
,
[
@
int1_saved_reg
]
#endif
/* restore original r9 */
PROLOG_RESTORE_REG
r9
,
@
int1_saved_reg
/* now we are ready to save the remaining context :) */
st
event_IRQ1
,
[
sp
,
8
]
/* Dummy ECR */
...
...
@@ -496,12 +492,13 @@
.
macro
SAVE_ALL_INT2
/* TODO-vineetg: SMP we can't use global nor can we use
* SCRATCH0 as we do for int1 because while int1 is using
* it, int2 can come
*/
/* retsore original r9 , saved in sys_saved_r9 */
ld
r9
,
[
@
int2_saved_reg
]
/*
* In SMP we can't use mem nor can we use SCRARCH_DATA0
* as we do for int1 because int2 can clobber it
* Hence 2 levels of intr are NOT allowed in SMP (by Kconfig)
*/
/* restore original r9 */
PROLOG_RESTORE_REG
r9
,
@
int2_saved_reg
/* now we are ready to save the remaining context :) */
st
event_IRQ2
,
[
sp
,
8
]
/* Dummy ECR */
...
...
arch/arc/kernel/entry.S
View file @
fbfa26ae
...
...
@@ -186,9 +186,8 @@ reserved: ; processor restart
; ---------------------------------------------
ENTRY
(
handle_interrupt_level2
)
; TODO-vineetg for SMP this wont work
; free up r9 as scratchpad
st
r9
,
[
@
int2_saved_reg
]
PROLOG_FREEUP_REG
r9
,
@
int2_saved_reg
;Which mode (user/kernel) was the system in when intr occured
lr
r9
,
[
status32_l2
]
...
...
@@ -234,12 +233,7 @@ END(handle_interrupt_level2)
; ---------------------------------------------
ENTRY
(
handle_interrupt_level1
)
/
*
free
up
r9
as
scratchpad
*/
#ifdef CONFIG_SMP
sr
r9
,
[
ARC_REG_SCRATCH_DATA0
]
#else
st
r9
,
[
@
int1_saved_reg
]
#endif
PROLOG_FREEUP_REG
r9
,
@
int1_saved_reg
;Which mode (user/kernel) was the system in when intr occured
lr
r9
,
[
status32_l1
]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment