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-*
This commit is contained in:
		
							parent
							
								
									c8d9ff634f
								
							
						
					
					
						commit
						d7de5ef629
					
				|  | @ -66,10 +66,10 @@ void cyclic_run(void) | ||||||
| 	uint64_t now, cpu_time; | 	uint64_t now, cpu_time; | ||||||
| 
 | 
 | ||||||
| 	/* Prevent recursion */ | 	/* Prevent recursion */ | ||||||
| 	if (gd->cyclic->cyclic_running) | 	if (gd->flags & GD_FLG_CYCLIC_RUNNING) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	gd->cyclic->cyclic_running = true; | 	gd->flags |= GD_FLG_CYCLIC_RUNNING; | ||||||
| 	list_for_each_entry_safe(cyclic, tmp, &gd->cyclic->cyclic_list, list) { | 	list_for_each_entry_safe(cyclic, tmp, &gd->cyclic->cyclic_list, list) { | ||||||
| 		/*
 | 		/*
 | ||||||
| 		 * Check if this cyclic function needs to get called, e.g. | 		 * Check if this cyclic function needs to get called, e.g. | ||||||
|  | @ -99,7 +99,7 @@ void cyclic_run(void) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	gd->cyclic->cyclic_running = false; | 	gd->flags &= ~GD_FLG_CYCLIC_RUNNING; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void schedule(void) | void schedule(void) | ||||||
|  |  | ||||||
|  | @ -650,6 +650,10 @@ enum gd_flags { | ||||||
| 	 * @GD_FLG_FDT_CHANGED: Device tree change has been detected by tests | 	 * @GD_FLG_FDT_CHANGED: Device tree change has been detected by tests | ||||||
| 	 */ | 	 */ | ||||||
| 	GD_FLG_FDT_CHANGED = 0x100000, | 	GD_FLG_FDT_CHANGED = 0x100000, | ||||||
|  | 	/**
 | ||||||
|  | 	 * GD_FLG_CYCLIC_RUNNING: cyclic_run is in progress | ||||||
|  | 	 */ | ||||||
|  | 	GD_FLG_CYCLIC_RUNNING = 0x200000, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif /* __ASSEMBLY__ */ | #endif /* __ASSEMBLY__ */ | ||||||
|  |  | ||||||
|  | @ -19,12 +19,10 @@ | ||||||
|  * |  * | ||||||
|  * @cyclic_list: Cylic list node |  * @cyclic_list: Cylic list node | ||||||
|  * @cyclic_ready: Flag if cyclic infrastructure is ready |  * @cyclic_ready: Flag if cyclic infrastructure is ready | ||||||
|  * @cyclic_running: Flag if cyclic infrastructure is running |  | ||||||
|  */ |  */ | ||||||
| struct cyclic_drv { | struct cyclic_drv { | ||||||
| 	struct list_head cyclic_list; | 	struct list_head cyclic_list; | ||||||
| 	bool cyclic_ready; | 	bool cyclic_ready; | ||||||
| 	bool cyclic_running; |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue