Page MenuHomeFreeBSD

D3714.id8890.diff
No OneTemporary

D3714.id8890.diff

Index: sys/arm64/arm64/exception.S
===================================================================
--- sys/arm64/arm64/exception.S
+++ sys/arm64/arm64/exception.S
@@ -63,8 +63,13 @@
.endm
.macro restore_registers el
- msr daifset, #2 /* Disable interrupts, x18 may change
- * in the interrupt exception handler */
+.if \el == 1
+ msr daifset, #2
+ /*
+ * Disable interrupts, x18 may change in the interrupt exception
+ * handler. For EL0 exceptions, do_ast already did this.
+ */
+.endif
ldp x18, lr, [sp], #16
ldp x10, x11, [sp], #16
.if \el == 0
@@ -110,8 +115,7 @@
/* Check if we have either bits set */
mov x3, #((TDF_ASTPENDING|TDF_NEEDRESCHED) >> 8)
lsl x3, x3, #8
- and x2, x2, x3
- cmp x2, #0
+ tst x2, x3
b.eq 2f
/* Restore interrupts */
@@ -125,8 +129,6 @@
b 1b
2:
- /* Restore interrupts */
- msr daif, x19
.endm
handle_el1h_sync:
@@ -158,6 +160,7 @@
save_registers 0
mov x0, sp
bl arm_cpu_intr
+ do_ast
restore_registers 0
eret

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 8, 2:20 AM (4 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40394908
Default Alt Text
D3714.id8890.diff (997 B)

Event Timeline