resources: Add lookup_resource()
Add a function to find an existing resource by a resource start address. This allows to implement simple allocators (with a malloc/free-alike API) on top of the resource system. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
		
					parent
					
						
							
								88efd0bbc0
							
						
					
				
			
			
				commit
				
					
						1c388919d8
					
				
			
		
					 2 changed files with 22 additions and 0 deletions
				
			
		| 
						 | 
					@ -132,6 +132,7 @@ extern int allocate_resource(struct resource *root, struct resource *new,
 | 
				
			||||||
						       resource_size_t,
 | 
											       resource_size_t,
 | 
				
			||||||
						       resource_size_t),
 | 
											       resource_size_t),
 | 
				
			||||||
			     void *alignf_data);
 | 
								     void *alignf_data);
 | 
				
			||||||
 | 
					struct resource *lookup_resource(struct resource *root, resource_size_t start);
 | 
				
			||||||
int adjust_resource(struct resource *res, resource_size_t start,
 | 
					int adjust_resource(struct resource *res, resource_size_t start,
 | 
				
			||||||
		    resource_size_t size);
 | 
							    resource_size_t size);
 | 
				
			||||||
resource_size_t resource_alignment(struct resource *res);
 | 
					resource_size_t resource_alignment(struct resource *res);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -553,6 +553,27 @@ int allocate_resource(struct resource *root, struct resource *new,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EXPORT_SYMBOL(allocate_resource);
 | 
					EXPORT_SYMBOL(allocate_resource);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * lookup_resource - find an existing resource by a resource start address
 | 
				
			||||||
 | 
					 * @root: root resource descriptor
 | 
				
			||||||
 | 
					 * @start: resource start address
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Returns a pointer to the resource if found, NULL otherwise
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct resource *lookup_resource(struct resource *root, resource_size_t start)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct resource *res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						read_lock(&resource_lock);
 | 
				
			||||||
 | 
						for (res = root->child; res; res = res->sibling) {
 | 
				
			||||||
 | 
							if (res->start == start)
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						read_unlock(&resource_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return res;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Insert a resource into the resource tree. If successful, return NULL,
 | 
					 * Insert a resource into the resource tree. If successful, return NULL,
 | 
				
			||||||
 * otherwise return the conflicting resource (compare to __request_resource())
 | 
					 * otherwise return the conflicting resource (compare to __request_resource())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue