| From 5ba75cb9a6faec911ad43099204df6f649285900 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 25 Sep 2024 18:43:34 +0300 |
| Subject: resource: replace open coded resource_intersection() |
| |
| From: Andy Shevchenko <andriy.shevchenko@linux.intel.com> |
| |
| [ Upstream commit 5c1edea773c98707fbb23d1df168bcff52f61e4b ] |
| |
| 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> |
| Stable-dep-of: 6fb3acdebf65 ("Reinstate "resource: avoid unnecessary lookups in find_next_iomem_res()"") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/resource.c | 15 ++++++--------- |
| 1 file changed, 6 insertions(+), 9 deletions(-) |
| |
| diff --git a/kernel/resource.c b/kernel/resource.c |
| index 1d48ae8646352..c3e00365f8e37 100644 |
| --- a/kernel/resource.c |
| +++ b/kernel/resource.c |
| @@ -537,17 +537,16 @@ static int __region_intersects(struct resource *parent, resource_size_t start, |
| 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 resource *parent, resource_size_t start, |
| * |-- "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 resource *parent, resource_size_t start, |
| 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) |
| -- |
| 2.51.0 |
| |