| From: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Subject: resource: replace open coded resource_intersection() |
| Date: Wed, 25 Sep 2024 18:43:34 +0300 |
| |
| Patch series "resource: A couple of cleanups". |
| |
| A couple of ad-hoc cleanups since there was a recent development of |
| the code in question. No functional changes intended. |
| |
| |
| This patch (of 2): |
| |
| __region_intersects() uses open coded resource_intersection(). Replace it |
| with existing API which also make more clear what we are checking. |
| |
| Link: https://lkml.kernel.org/r/20240925154355.1170859-1-andriy.shevchenko@linux.intel.com |
| Link: https://lkml.kernel.org/r/20240925154355.1170859-2-andriy.shevchenko@linux.intel.com |
| Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| kernel/resource.c | 15 ++++++--------- |
| 1 file changed, 6 insertions(+), 9 deletions(-) |
| |
| --- a/kernel/resource.c~resource-replace-open-coded-resource_intersection |
| +++ a/kernel/resource.c |
| @@ -537,17 +537,16 @@ static int __region_intersects(struct re |
| size_t size, unsigned long flags, |
| unsigned long desc) |
| { |
| - resource_size_t ostart, oend; |
| int type = 0; int other = 0; |
| struct resource *p, *dp; |
| + struct resource res, o; |
| bool is_type, covered; |
| - struct resource res; |
| |
| res.start = start; |
| res.end = start + size - 1; |
| |
| for (p = parent->child; p ; p = p->sibling) { |
| - if (!resource_overlaps(p, &res)) |
| + if (!resource_intersection(p, &res, &o)) |
| continue; |
| is_type = (p->flags & flags) == flags && |
| (desc == IORES_DESC_NONE || desc == p->desc); |
| @@ -568,8 +567,6 @@ static int __region_intersects(struct re |
| * |-- "System RAM" --||-- "CXL Window 0a" --| |
| */ |
| covered = false; |
| - ostart = max(res.start, p->start); |
| - oend = min(res.end, p->end); |
| for_each_resource(p, dp, false) { |
| if (!resource_overlaps(dp, &res)) |
| continue; |
| @@ -578,17 +575,17 @@ static int __region_intersects(struct re |
| if (is_type) { |
| type++; |
| /* |
| - * Range from 'ostart' to 'dp->start' |
| + * Range from 'o.start' to 'dp->start' |
| * isn't covered by matched resource. |
| */ |
| - if (dp->start > ostart) |
| + if (dp->start > o.start) |
| break; |
| - if (dp->end >= oend) { |
| + if (dp->end >= o.end) { |
| covered = true; |
| break; |
| } |
| /* Remove covered range */ |
| - ostart = max(ostart, dp->end + 1); |
| + o.start = max(o.start, dp->end + 1); |
| } |
| } |
| if (!covered) |
| _ |