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
Kirill Smelkov
linux
Commits
4255b07f
Commit
4255b07f
authored
Sep 22, 2014
by
Vineet Gupta
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ARCv2: STAR 9000793984: Handle return from intr to Delay Slot
Signed-off-by:
Vineet Gupta
<
vgupta@synopsys.com
>
parent
1f6ccfff
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
0 deletions
+53
-0
arch/arc/kernel/asm-offsets.c
arch/arc/kernel/asm-offsets.c
+1
-0
arch/arc/kernel/entry-arcv2.S
arch/arc/kernel/entry-arcv2.S
+50
-0
arch/arc/kernel/setup.c
arch/arc/kernel/setup.c
+2
-0
No files found.
arch/arc/kernel/asm-offsets.c
View file @
4255b07f
...
@@ -56,6 +56,7 @@ int main(void)
...
@@ -56,6 +56,7 @@ int main(void)
DEFINE
(
PT_r5
,
offsetof
(
struct
pt_regs
,
r5
));
DEFINE
(
PT_r5
,
offsetof
(
struct
pt_regs
,
r5
));
DEFINE
(
PT_r6
,
offsetof
(
struct
pt_regs
,
r6
));
DEFINE
(
PT_r6
,
offsetof
(
struct
pt_regs
,
r6
));
DEFINE
(
PT_r7
,
offsetof
(
struct
pt_regs
,
r7
));
DEFINE
(
PT_r7
,
offsetof
(
struct
pt_regs
,
r7
));
DEFINE
(
PT_ret
,
offsetof
(
struct
pt_regs
,
ret
));
DEFINE
(
SZ_CALLEE_REGS
,
sizeof
(
struct
callee_regs
));
DEFINE
(
SZ_CALLEE_REGS
,
sizeof
(
struct
callee_regs
));
DEFINE
(
SZ_PT_REGS
,
sizeof
(
struct
pt_regs
));
DEFINE
(
SZ_PT_REGS
,
sizeof
(
struct
pt_regs
));
...
...
arch/arc/kernel/entry-arcv2.S
View file @
4255b07f
...
@@ -163,6 +163,9 @@ END(EV_TLBProtV)
...
@@ -163,6 +163,9 @@ END(EV_TLBProtV)
;####### Return from Intr #######
;####### Return from Intr #######
debug_marker_l1
:
debug_marker_l1
:
bbit1.nt
r0
,
STATUS_DE_BIT
,
.
Lintr_ret_to_delay_slot
.
Lisr_ret_fast_path
:
; Handle special case #1: (Entry via Exception, Return via IRQ)
; Handle special case #1: (Entry via Exception, Return via IRQ)
;
;
; Exception in U mode, preempted in kernel, Intr taken (K mode), orig
; Exception in U mode, preempted in kernel, Intr taken (K mode), orig
...
@@ -186,4 +189,51 @@ debug_marker_syscall:
...
@@ -186,4 +189,51 @@ debug_marker_syscall:
EXCEPTION_EPILOGUE
EXCEPTION_EPILOGUE
rtie
rtie
;####### Return from Intr to insn in delay slot #######
; Handle special case #2: (Entry via Exception in Delay Slot, Return via IRQ)
;
; Intr returning to a Delay Slot (DS) insn
; (since IRQ NOT allowed in DS in ARCv2, this can only happen if orig
; entry was via Exception in DS which got preempted in kernel).
;
; IRQ RTIE won't reliably restore DE bit and/or BTA, needs handling
.
Lintr_ret_to_delay_slot
:
debug_marker_ds
:
ld
r2
,
[
@
intr_to_DE_cnt
]
add
r2
,
r2
,
1
st
r2
,
[
@
intr_to_DE_cnt
]
ld
r2
,
[
sp
,
PT_ret
]
ld
r3
,
[
sp
,
PT_status32
]
bic
r0
,
r3
,
STATUS_U_MASK|STATUS_DE_MASK|STATUS_IE_MASK
|
STATUS_L_MASK
st
r0
,
[
sp
,
PT_status32
]
mov
r1
,
.
Lintr_ret_to_delay_slot_2
st
r1
,
[
sp
,
PT_ret
]
st
r2
,
[
sp
,
0
]
st
r3
,
[
sp
,
4
]
b
.
Lisr_ret_fast_path
.
Lintr_ret_to_delay_slot_2
:
sub
sp
,
sp
,
SZ_PT_REGS
st
r9
,
[
sp
,
-
4
]
ld
r9
,
[
sp
,
0
]
sr
r9
,
[
eret
]
ld
r9
,
[
sp
,
4
]
sr
r9
,
[
erstatus
]
ld
r9
,
[
sp
,
8
]
sr
r9
,
[
erbta
]
ld
r9
,
[
sp
,
-
4
]
add
sp
,
sp
,
SZ_PT_REGS
rtie
END
(
ret_from_exception
)
END
(
ret_from_exception
)
arch/arc/kernel/setup.c
View file @
4255b07f
...
@@ -30,6 +30,8 @@
...
@@ -30,6 +30,8 @@
#define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x))
#define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x))
unsigned
int
intr_to_DE_cnt
;
/* Part of U-boot ABI: see head.S */
/* Part of U-boot ABI: see head.S */
int
__initdata
uboot_tag
;
int
__initdata
uboot_tag
;
char
__initdata
*
uboot_arg
;
char
__initdata
*
uboot_arg
;
...
...
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