cyclic: use a flag in gd->flags for recursion protection
As a preparation for future patches, use a flag in gd->flags rather
than a separate member in (the singleton) struct cyclic_drv to keep
track of whether we're already inside cyclic_run().
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Reviewed-by: Stefan Roese <sr@denx.de>
Tested-by: Stefan Roese <sr@denx.de>
Tested-by: Tim Harvey <tharvey@gateworks.com> # imx8mm-venice-*
diff --git a/common/cyclic.c b/common/cyclic.c
index 7abb82c..ff75c8c 100644
--- a/common/cyclic.c
+++ b/common/cyclic.c
@@ -66,10 +66,10 @@
uint64_t now, cpu_time;
/* Prevent recursion */
- if (gd->cyclic->cyclic_running)
+ if (gd->flags & GD_FLG_CYCLIC_RUNNING)
return;
- gd->cyclic->cyclic_running = true;
+ gd->flags |= GD_FLG_CYCLIC_RUNNING;
list_for_each_entry_safe(cyclic, tmp, &gd->cyclic->cyclic_list, list) {
/*
* Check if this cyclic function needs to get called, e.g.
@@ -99,7 +99,7 @@
}
}
}
- gd->cyclic->cyclic_running = false;
+ gd->flags &= ~GD_FLG_CYCLIC_RUNNING;
}
void schedule(void)
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index c4b2bb4..8d348b0 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -650,6 +650,10 @@
* @GD_FLG_FDT_CHANGED: Device tree change has been detected by tests
*/
GD_FLG_FDT_CHANGED = 0x100000,
+ /**
+ * GD_FLG_CYCLIC_RUNNING: cyclic_run is in progress
+ */
+ GD_FLG_CYCLIC_RUNNING = 0x200000,
};
#endif /* __ASSEMBLY__ */
diff --git a/include/cyclic.h b/include/cyclic.h
index 9c5c4fc..50427ba 100644
--- a/include/cyclic.h
+++ b/include/cyclic.h
@@ -19,12 +19,10 @@
*
* @cyclic_list: Cylic list node
* @cyclic_ready: Flag if cyclic infrastructure is ready
- * @cyclic_running: Flag if cyclic infrastructure is running
*/
struct cyclic_drv {
struct list_head cyclic_list;
bool cyclic_ready;
- bool cyclic_running;
};
/**