aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/smp.c14
1 files changed, 1 insertions, 13 deletions
diff --git a/kernel/smp.c b/kernel/smp.c
index fe9f773d7114..7332697cd184 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -186,25 +186,13 @@ void generic_smp_call_function_single_interrupt(void)
186 186
187 while (!list_empty(&list)) { 187 while (!list_empty(&list)) {
188 struct call_single_data *csd; 188 struct call_single_data *csd;
189 unsigned int csd_flags;
190 189
191 csd = list_entry(list.next, struct call_single_data, list); 190 csd = list_entry(list.next, struct call_single_data, list);
192 list_del(&csd->list); 191 list_del(&csd->list);
193 192
194 /*
195 * 'csd' can be invalid after this call if flags == 0
196 * (when called through generic_exec_single()),
197 * so save them away before making the call:
198 */
199 csd_flags = csd->flags;
200
201 csd->func(csd->info); 193 csd->func(csd->info);
202 194
203 /* 195 csd_unlock(csd);
204 * Unlocked CSDs are valid through generic_exec_single():
205 */
206 if (csd_flags & CSD_FLAG_LOCK)
207 csd_unlock(csd);
208 } 196 }
209} 197}
210 198