allocator_v4: Completely ignore resources with 0 limit
It seems pass 1 and 2 were inconsistent. The first would account for resources with a limit of 0 even though the second can't assign anything for them. Change-Id: I86fb8edc8d4b3c9310517e07f29f73a6b859a7c4 Signed-off-by: Nico Huber <nico.h@gmx.de> Reviewed-on: https://review.coreboot.org/c/coreboot/+/65402 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Lean Sheng Tan <sheng.tan@9elements.com> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
This commit is contained in:
parent
4060860942
commit
ec7b31353f
|
@ -69,6 +69,10 @@ static void update_bridge_resource(const struct device *bridge, struct resource
|
|||
if (!child_res->size)
|
||||
continue;
|
||||
|
||||
/* Resources with 0 limit can't be assigned anything. */
|
||||
if (!child_res->limit)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Propagate the resource alignment to the bridge resource. The
|
||||
* condition can only be true for the first (largest) resource. For all
|
||||
|
@ -84,15 +88,14 @@ static void update_bridge_resource(const struct device *bridge, struct resource
|
|||
bridge_res->align = child_res->align;
|
||||
|
||||
/*
|
||||
* Propagate the resource limit to the bridge resource only if child
|
||||
* resource limit is non-zero. If a downstream device has stricter
|
||||
* requirements w.r.t. limits for any resource, that constraint needs to
|
||||
* be propagated back up to the downstream bridges of the domain. This
|
||||
* guarantees that the resource allocation which starts at the domain
|
||||
* level takes into account all these constraints thus working on a
|
||||
* global view.
|
||||
* Propagate the resource limit to the bridge resource. If a downstream
|
||||
* device has stricter requirements w.r.t. limits for any resource, that
|
||||
* constraint needs to be propagated back up to the downstream bridges
|
||||
* of the domain. This guarantees that the resource allocation which
|
||||
* starts at the domain level takes into account all these constraints
|
||||
* thus working on a global view.
|
||||
*/
|
||||
if (child_res->limit && (child_res->limit < bridge_res->limit))
|
||||
if (child_res->limit < bridge_res->limit)
|
||||
bridge_res->limit = child_res->limit;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue