[PATCH v1 3/3] kernel/resource: remove first_lvl / siblings_only logic
David Hildenbrand
david at redhat.com
Tue Mar 23 11:19:10 GMT 2021
On 23.03.21 12:11, Andy Shevchenko wrote:
> On Mon, Mar 22, 2021 at 05:02:00PM +0100, David Hildenbrand wrote:
>> All IORESOURCE_SYSTEM_RAM and IORESOURCE_MEM now properly consider the
>> whole resource tree, not just the first level. Let's drop the unused
>> first_lvl / siblings_only logic.
>>
>> All functions properly search the whole tree, so remove documentation
>> that indicates that some functions behave differently.
>
>
> Like this clean up!
> Reviewed-by: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
>
> Although a few nit-picks below.
>
>> Cc: Andrew Morton <akpm at linux-foundation.org>
>> Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
>> Cc: Dan Williams <dan.j.williams at intel.com>
>> Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
>> Cc: Andy Shevchenko <andriy.shevchenko at linux.intel.com>
>> Cc: Mauro Carvalho Chehab <mchehab+huawei at kernel.org>
>> Cc: Signed-off-by: David Hildenbrand <david at redhat.com>
>> Cc: Dave Young <dyoung at redhat.com>
>> Cc: Baoquan He <bhe at redhat.com>
>> Cc: Vivek Goyal <vgoyal at redhat.com>
>> Cc: Dave Hansen <dave.hansen at linux.intel.com>
>> Cc: Keith Busch <keith.busch at intel.com>
>> Cc: Michal Hocko <mhocko at suse.com>
>> Cc: Qian Cai <cai at lca.pw>
>> Cc: Oscar Salvador <osalvador at suse.de>
>> Cc: Eric Biederman <ebiederm at xmission.com>
>> Cc: Thomas Gleixner <tglx at linutronix.de>
>> Cc: Ingo Molnar <mingo at redhat.com>
>> Cc: Borislav Petkov <bp at alien8.de>
>> Cc: "H. Peter Anvin" <hpa at zytor.com>
>> Cc: Tom Lendacky <thomas.lendacky at amd.com>
>> Cc: Brijesh Singh <brijesh.singh at amd.com>
>> Cc: x86 at kernel.org
>> Cc: kexec at lists.infradead.org
>> Signed-off-by: David Hildenbrand <david at redhat.com>
>> ---
>> kernel/resource.c | 45 ++++++++++++---------------------------------
>> 1 file changed, 12 insertions(+), 33 deletions(-)
>>
>> diff --git a/kernel/resource.c b/kernel/resource.c
>> index 16e0c7e8ed24..7e00239a023a 100644
>> --- a/kernel/resource.c
>> +++ b/kernel/resource.c
>> @@ -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.. at 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 *))
>
> Can it be one line?
>
>> {
>> 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);
>
> I guess you may do it on one line.
>
>> }
>>
>> /*
>> @@ -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);
>
> Ditto.
To all your comments:
"The preferred limit on the length of a single line is 80 columns."
"Statements longer than 80 columns should be broken into sensible chunks
... unless exceeding 80 columns significantly increases readability"
I don't think it significantly increases readability.
--
Thanks,
David / dhildenb
More information about the kexec
mailing list