mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-29 21:33:00 +01:00
kernel/resource: remove first_lvl / siblings_only logic
All functions that search for IORESOURCE_SYSTEM_RAM or IORESOURCE_MEM resources now properly consider the whole resource tree, not just the first level. Let's drop the unused first_lvl / siblings_only logic. Remove documentation that indicates that some functions behave differently, all consider the full resource tree now. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: David Hildenbrand <[email protected]> Reviewed-by: Dan Williams <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]> Cc: Greg Kroah-Hartman <[email protected]> Cc: Dan Williams <[email protected]> Cc: Daniel Vetter <[email protected]> Cc: Andy Shevchenko <[email protected]> Cc: Mauro Carvalho Chehab <[email protected]> Cc: Dave Young <[email protected]> Cc: Baoquan He <[email protected]> Cc: Vivek Goyal <[email protected]> Cc: Dave Hansen <[email protected]> Cc: Keith Busch <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Qian Cai <[email protected]> Cc: Oscar Salvador <[email protected]> Cc: Eric Biederman <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: "H. Peter Anvin" <[email protected]> Cc: Tom Lendacky <[email protected]> Cc: Brijesh Singh <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
1 parent
3c9c797534
commit
97523a4edb
1 file changed
+12
-33
+12
-33
@@ -64,12 +64,8 @@ static DEFINE_RWLOCK(resource_lock);
|
||||
static struct resource *bootmem_resource_free;
|
||||
static DEFINE_SPINLOCK(bootmem_resource_lock);
|
||||
|
||||
static struct resource *next_resource(struct resource *p, bool sibling_only)
|
||||
static struct resource *next_resource(struct resource *p)
|
||||
{
|
||||
/* Caller wants to traverse through siblings only */
|
||||
if (sibling_only)
|
||||
return p->sibling;
|
||||
|
||||
if (p->child)
|
||||
return p->child;
|
||||
while (!p->sibling && p->parent)
|
||||
@@ -81,7 +77,7 @@ static void *r_next(struct seq_file *m, void *v, loff_t *pos)
|
||||
{
|
||||
struct resource *p = v;
|
||||
(*pos)++;
|
||||
return (void *)next_resource(p, false);
|
||||
return (void *)next_resource(p);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
@@ -330,14 +326,10 @@ EXPORT_SYMBOL(release_resource);
|
||||
* of the resource that's within [@start..@end]; if none is found, returns
|
||||
* -ENODEV. Returns -EINVAL for invalid parameters.
|
||||
*
|
||||
* This function walks the whole tree and not just first level children
|
||||
* unless @first_lvl is true.
|
||||
*
|
||||
* @start: start address of the resource searched for
|
||||
* @end: end address of same resource
|
||||
* @flags: flags which the resource must have
|
||||
* @desc: descriptor the resource must have
|
||||
* @first_lvl: walk only the first level children, if set
|
||||
* @res: return ptr, if resource found
|
||||
*
|
||||
* The caller must specify @start, @end, @flags, and @desc
|
||||
@@ -345,9 +337,8 @@ EXPORT_SYMBOL(release_resource);
|
||||
*/
|
||||
static int find_next_iomem_res(resource_size_t start, resource_size_t end,
|
||||
unsigned long flags, unsigned long desc,
|
||||
bool first_lvl, struct resource *res)
|
||||
struct resource *res)
|
||||
{
|
||||
bool siblings_only = true;
|
||||
struct resource *p;
|
||||
|
||||
if (!res)
|
||||
@@ -358,7 +349,7 @@ static int find_next_iomem_res(resource_size_t start, resource_size_t end,
|
||||
|
||||
read_lock(&resource_lock);
|
||||
|
||||
for (p = iomem_resource.child; p; p = next_resource(p, siblings_only)) {
|
||||
for (p = iomem_resource.child; p; p = next_resource(p)) {
|
||||
/* If we passed the resource we are looking for, stop */
|
||||
if (p->start > end) {
|
||||
p = NULL;
|
||||
@@ -369,13 +360,6 @@ static int find_next_iomem_res(resource_size_t start, resource_size_t end,
|
||||
if (p->end < start)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Now that we found a range that matches what we look for,
|
||||
* check the flags and the descriptor. If we were not asked to
|
||||
* use only the first level, start looking at children as well.
|
||||
*/
|
||||
siblings_only = first_lvl;
|
||||
|
||||
if ((p->flags & flags) != flags)
|
||||
continue;
|
||||
if ((desc != IORES_DESC_NONE) && (desc != p->desc))
|
||||
@@ -402,14 +386,14 @@ static int find_next_iomem_res(resource_size_t start, resource_size_t end,
|
||||
|
||||
static int __walk_iomem_res_desc(resource_size_t start, resource_size_t end,
|
||||
unsigned long flags, unsigned long desc,
|
||||
bool first_lvl, void *arg,
|
||||
void *arg,
|
||||
int (*func)(struct resource *, void *))
|
||||
{
|
||||
struct resource res;
|
||||
int ret = -EINVAL;
|
||||
|
||||
while (start < end &&
|
||||
!find_next_iomem_res(start, end, flags, desc, first_lvl, &res)) {
|
||||
!find_next_iomem_res(start, end, flags, desc, &res)) {
|
||||
ret = (*func)(&res, arg);
|
||||
if (ret)
|
||||
break;
|
||||
@@ -431,7 +415,6 @@ static int __walk_iomem_res_desc(resource_size_t start, resource_size_t end,
|
||||
* @arg: function argument for the callback @func
|
||||
* @func: callback function that is called for each qualifying resource area
|
||||
*
|
||||
* This walks through whole tree and not just first level children.
|
||||
* All the memory ranges which overlap start,end and also match flags and
|
||||
* desc are valid candidates.
|
||||
*
|
||||
@@ -441,7 +424,7 @@ static int __walk_iomem_res_desc(resource_size_t start, resource_size_t end,
|
||||
int walk_iomem_res_desc(unsigned long desc, unsigned long flags, u64 start,
|
||||
u64 end, void *arg, int (*func)(struct resource *, void *))
|
||||
{
|
||||
return __walk_iomem_res_desc(start, end, flags, desc, false, arg, func);
|
||||
return __walk_iomem_res_desc(start, end, flags, desc, arg, func);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(walk_iomem_res_desc);
|
||||
|
||||
@@ -457,8 +440,8 @@ int walk_system_ram_res(u64 start, u64 end, void *arg,
|
||||
{
|
||||
unsigned long flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
|
||||
|
||||
return __walk_iomem_res_desc(start, end, flags, IORES_DESC_NONE, false,
|
||||
arg, func);
|
||||
return __walk_iomem_res_desc(start, end, flags, IORES_DESC_NONE, arg,
|
||||
func);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -470,17 +453,14 @@ int walk_mem_res(u64 start, u64 end, void *arg,
|
||||
{
|
||||
unsigned long flags = IORESOURCE_MEM | IORESOURCE_BUSY;
|
||||
|
||||
return __walk_iomem_res_desc(start, end, flags, IORES_DESC_NONE, false,
|
||||
arg, func);
|
||||
return __walk_iomem_res_desc(start, end, flags, IORES_DESC_NONE, arg,
|
||||
func);
|
||||
}
|
||||
|
||||
/*
|
||||
* This function calls the @func callback against all memory ranges of type
|
||||
* System RAM which are marked as IORESOURCE_SYSTEM_RAM and IORESOUCE_BUSY.
|
||||
* It is to be used only for System RAM.
|
||||
*
|
||||
* This will find System RAM ranges that are children of top-level resources
|
||||
* in addition to top-level System RAM resources.
|
||||
*/
|
||||
int walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
|
||||
void *arg, int (*func)(unsigned long, unsigned long, void *))
|
||||
@@ -495,8 +475,7 @@ int walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
|
||||
end = ((u64)(start_pfn + nr_pages) << PAGE_SHIFT) - 1;
|
||||
flags = IORESOURCE_SYSTEM_RAM | IORESOURCE_BUSY;
|
||||
while (start < end &&
|
||||
!find_next_iomem_res(start, end, flags, IORES_DESC_NONE,
|
||||
false, &res)) {
|
||||
!find_next_iomem_res(start, end, flags, IORES_DESC_NONE, &res)) {
|
||||
pfn = PFN_UP(res.start);
|
||||
end_pfn = PFN_DOWN(res.end + 1);
|
||||
if (end_pfn > pfn)
|
||||
|
||||
Reference in new issue
Block a user