#include #include #include #include #include void reschedule_list_append (struct reschedule_ctx* rctx, struct cpu* cpu) { spin_lock (&rctx->lock); struct list_node_link *node, *tmp; list_foreach (rctx->entries, node, tmp) { struct reschedule_entry* entry = list_entry (node, struct reschedule_entry, link); if (entry->cpu == cpu) { spin_unlock (&rctx->lock); return; } } struct reschedule_entry* entry = malloc (sizeof (*entry)); if (entry == NULL) { spin_unlock (&rctx->lock); return; } entry->cpu = cpu; list_append (rctx->entries, &entry->link); spin_unlock (&rctx->lock); }