mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	timers: Add rb_init_node() to allow for stack allocated rb nodes
In cases where a timerqueue_node or some structure that utilizes a timerqueue_node is allocated on the stack, gcc would give warnings caused by the timerqueue_init()'s calling RB_CLEAR_NODE, which self-references the nodes uninitialized data. The solution is to create an rb_init_node() function that zeros the rb_node structure out and then calls RB_CLEAR_NODE(), and then call the new init function from timerqueue_init(). CC: Thomas Gleixner <tglx@linutronix.de> Acked-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
		
							parent
							
								
									304529b1b6
								
							
						
					
					
						commit
						88d19cf379
					
				
					 2 changed files with 9 additions and 1 deletions
				
			
		|  | @ -136,6 +136,14 @@ static inline void rb_set_color(struct rb_node *rb, int color) | |||
| #define RB_EMPTY_NODE(node)	(rb_parent(node) == node) | ||||
| #define RB_CLEAR_NODE(node)	(rb_set_parent(node, node)) | ||||
| 
 | ||||
| static inline void rb_init_node(struct rb_node *rb) | ||||
| { | ||||
| 	rb->rb_parent_color = 0; | ||||
| 	rb->rb_right = NULL; | ||||
| 	rb->rb_left = NULL; | ||||
| 	RB_CLEAR_NODE(rb); | ||||
| } | ||||
| 
 | ||||
| extern void rb_insert_color(struct rb_node *, struct rb_root *); | ||||
| extern void rb_erase(struct rb_node *, struct rb_root *); | ||||
| 
 | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ struct timerqueue_node *timerqueue_getnext(struct timerqueue_head *head) | |||
| 
 | ||||
| static inline void timerqueue_init(struct timerqueue_node *node) | ||||
| { | ||||
| 	RB_CLEAR_NODE(&node->node); | ||||
| 	rb_init_node(&node->node); | ||||
| } | ||||
| 
 | ||||
| static inline void timerqueue_init_head(struct timerqueue_head *head) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 John Stultz
						John Stultz