diff options
-rw-r--r-- | kernel/smp.c | 14 |
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 | ||