Skip to content

Commit 40bf18b

Browse files
committed
reversed the check order of schedule and signals before leaving the kernel space
1 parent 5bdc7c4 commit 40bf18b

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

kernel/core386.S

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,21 +59,21 @@
5959
testl $SS_RPL3, CS(%esp) ;\
6060
jz 2f
6161

62+
#define CHECK_IF_NEED_SCHEDULE \
63+
movl need_resched, %eax ;\
64+
testl $0xFFFFFFFF, %eax ;\
65+
jz 1f ;\
66+
call do_sched ;\
67+
1:
68+
6269
#define CHECK_IF_SIGNALS \
6370
call issig ;\
6471
testl $0xFFFFFFFF, %eax ;\
65-
jz 1f ;\
72+
jz 2f ;\
6673
movl %esp, %eax ;\
6774
pushl %eax ;\
6875
call psig ;\
6976
addl $4, %esp ;\
70-
1:
71-
72-
#define CHECK_IF_NEED_SCHEDULE \
73-
movl need_resched, %eax ;\
74-
testl $0xFFFFFFFF, %eax ;\
75-
jz 2f ;\
76-
call do_sched ;\
7777
2:
7878

7979
#define RESTORE_ALL \
@@ -95,8 +95,8 @@
9595
EXCEPTION(num) ;\
9696
BOTTOM_HALVES ;\
9797
CHECK_IF_NESTED_INTERRUPT ;\
98-
CHECK_IF_SIGNALS ;\
9998
CHECK_IF_NEED_SCHEDULE ;\
99+
CHECK_IF_SIGNALS ;\
100100
RESTORE_ALL ;\
101101
iret
102102

@@ -107,8 +107,8 @@
107107
EXCEPTION(num) ;\
108108
BOTTOM_HALVES ;\
109109
CHECK_IF_NESTED_INTERRUPT ;\
110-
CHECK_IF_SIGNALS ;\
111110
CHECK_IF_NEED_SCHEDULE ;\
111+
CHECK_IF_SIGNALS ;\
112112
RESTORE_ALL ;\
113113
iret
114114

@@ -128,8 +128,8 @@ BUILD_EXCEPTION_SIMUL_ERR(6, except6) /* INVALID OPCODE */
128128
clts # floating-opcode cached!
129129
BOTTOM_HALVES
130130
CHECK_IF_NESTED_INTERRUPT
131-
CHECK_IF_SIGNALS
132131
CHECK_IF_NEED_SCHEDULE
132+
CHECK_IF_SIGNALS
133133
RESTORE_ALL
134134
iret
135135

@@ -167,8 +167,8 @@ BUILD_EXCEPTION_SIMUL_ERR(31, except31) /* INTEL RESERVED */
167167
IRQ(num) ;\
168168
BOTTOM_HALVES ;\
169169
CHECK_IF_NESTED_INTERRUPT ;\
170-
CHECK_IF_SIGNALS ;\
171170
CHECK_IF_NEED_SCHEDULE ;\
171+
CHECK_IF_SIGNALS ;\
172172
RESTORE_ALL ;\
173173
iret
174174

@@ -263,8 +263,8 @@ BUILD_IRQ(15, irq15)
263263
movl %eax, EAX(%esp) # save the return value
264264

265265
BOTTOM_HALVES
266-
CHECK_IF_SIGNALS
267266
CHECK_IF_NEED_SCHEDULE
267+
CHECK_IF_SIGNALS
268268
.align 4
269269
.globl return_from_syscall; return_from_syscall:
270270
RESTORE_ALL

0 commit comments

Comments
 (0)