Message ID | 20231222122901.49538-6-ilpo.jarvinen@linux.intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | PCI: Solve two bridge window sizing issues | expand |
On Fri, Dec 22, 2023 at 02:28:59PM +0200, Ilpo Järvinen wrote: > allocate_resource() accepts alignf callback to perform custom alignment s/alignf callback/->alignf() callback/ ? > beyond constraint->align. If alignf is NULL, simple_align_resource() is > used which only returns avail->start (no change). > > Using avail->start directly is natural and can be done with a > conditional in __find_empty_resource_slot() instead which avoids > unnecessarily using callback. It makes the code inside > __find_empty_resource_slot() more obvious and removes the need for the > caller to provide constraint->alignf unnecessarily. > > This is preparation for exporting find_empty_resource_slot(). Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> ... > if (avail.start >= tmp.start) { > alloc.flags = avail.flags; > - alloc.start = constraint->alignf(constraint->alignf_data, &avail, > - size, constraint->align); > + if (alignf) { > + alloc.start = alignf(constraint->alignf_data, > + &avail, size, > + constraint->align); Maybe one line? It used to be a longer line in the old code. > + } else { > + alloc.start = avail.start; > + }
diff --git a/kernel/resource.c b/kernel/resource.c index 9d7920104120..80d64b6467b3 100644 --- a/kernel/resource.c +++ b/kernel/resource.c @@ -563,14 +563,6 @@ void __weak arch_remove_reservations(struct resource *avail) { } -static resource_size_t simple_align_resource(void *data, - const struct resource *avail, - resource_size_t size, - resource_size_t align) -{ - return avail->start; -} - static void resource_clip(struct resource *res, resource_size_t min, resource_size_t max) { @@ -590,6 +582,7 @@ static int __find_empty_resource_slot(struct resource *root, struct resource *ol { struct resource *this = root->child; struct resource tmp = *new, avail, alloc; + resource_alignf alignf = constraint->alignf; tmp.start = root->start; /* @@ -618,8 +611,13 @@ static int __find_empty_resource_slot(struct resource *root, struct resource *ol avail.flags = new->flags & ~IORESOURCE_UNSET; if (avail.start >= tmp.start) { alloc.flags = avail.flags; - alloc.start = constraint->alignf(constraint->alignf_data, &avail, - size, constraint->align); + if (alignf) { + alloc.start = alignf(constraint->alignf_data, + &avail, size, + constraint->align); + } else { + alloc.start = avail.start; + } alloc.end = alloc.start + size - 1; if (alloc.start <= alloc.end && resource_contains(&avail, &alloc)) { @@ -730,9 +728,6 @@ int allocate_resource(struct resource *root, struct resource *new, int err; struct resource_constraint constraint; - if (!alignf) - alignf = simple_align_resource; - constraint.min = min; constraint.max = max; constraint.align = align;
allocate_resource() accepts alignf callback to perform custom alignment beyond constraint->align. If alignf is NULL, simple_align_resource() is used which only returns avail->start (no change). Using avail->start directly is natural and can be done with a conditional in __find_empty_resource_slot() instead which avoids unnecessarily using callback. It makes the code inside __find_empty_resource_slot() more obvious and removes the need for the caller to provide constraint->alignf unnecessarily. This is preparation for exporting find_empty_resource_slot(). Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> --- kernel/resource.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-)