unsigned int next_cpu(unsigned int cpu, struct cpu_set *cpu_set,
int exception);
+/**
+ * Get the first CPU in a given set.
+ * @param set CPU set.
+ *
+ * @return First CPU in set, or max_cpu_id + 1 if the set is empty.
+ */
+#define first_cpu(set) next_cpu(-1, (set), -1)
+
/**
* Loop-generating macro for iterating over all CPUs in a set.
* @param cpu Iteration variable holding the current CPU ID
#define for_each_non_root_cell(cell) \
for ((cell) = root_cell.next; (cell); (cell) = (cell)->next)
+/**
+ * Loop-generating macro for iterating over all memory regions of a
+ * configuration.
+ * @param mem Iteration variable holding the reference to the current
+ * memory region (const struct jailhouse_memory *).
+ * @param config Cell or system configuration containing the regions.
+ * @param counter Helper variable (unsigned int).
+ */
+#define for_each_mem_region(mem, config, counter) \
+ for ((mem) = jailhouse_cell_mem_regions(config), (counter) = 0; \
+ (counter) < (config)->num_memory_regions; \
+ (mem)++, (counter)++)
+
/**
* Check if the CPU is assigned to the specified cell.
* @param cell Cell the CPU may belong to.
bool cpu_id_valid(unsigned long cpu_id);
-int check_mem_regions(const struct jailhouse_cell_desc *config);
int cell_init(struct cell *cell);
void config_commit(struct cell *cell_added_removed);