memranges: add memranges_update_tag() functionality
The memranges_update_tag() function replaces all instances that are tagged with old_tag and update to new_tag. This can be helpful in the MTRR code by adjusting the address space if certain memory types cause the MTRR usage to become too large. Change-Id: Ie5c405204de2fdd9fd1dd5d6190b223925d6d318 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/5150 Tested-by: build bot (Jenkins) Reviewed-by: Vladimir Serbinenko <phcoder@gmail.com>
This commit is contained in:
parent
3d6ffe76f8
commit
ed9307db13
@ -110,6 +110,10 @@ void memranges_create_hole(struct memranges *ranges,
|
|||||||
void memranges_insert(struct memranges *ranges,
|
void memranges_insert(struct memranges *ranges,
|
||||||
resource_t base, resource_t size, unsigned long tag);
|
resource_t base, resource_t size, unsigned long tag);
|
||||||
|
|
||||||
|
/* Update all entries with old_tag to new_tag. */
|
||||||
|
void memranges_update_tag(struct memranges *ranges, unsigned long old_tag,
|
||||||
|
unsigned long new_tag);
|
||||||
|
|
||||||
/* Returns next entry after the provided entry. NULL if r is last. */
|
/* Returns next entry after the provided entry. NULL if r is last. */
|
||||||
struct range_entry *memranges_next_entry(struct memranges *ranges,
|
struct range_entry *memranges_next_entry(struct memranges *ranges,
|
||||||
const struct range_entry *r);
|
const struct range_entry *r);
|
||||||
|
@ -204,6 +204,19 @@ static void merge_add_memranges(struct memranges *ranges,
|
|||||||
merge_neighbor_entries(ranges);
|
merge_neighbor_entries(ranges);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void memranges_update_tag(struct memranges *ranges, unsigned long old_tag,
|
||||||
|
unsigned long new_tag)
|
||||||
|
{
|
||||||
|
struct range_entry *r;
|
||||||
|
|
||||||
|
memranges_each_entry(r, ranges) {
|
||||||
|
if (range_entry_tag(r) == old_tag)
|
||||||
|
range_entry_update_tag(r, new_tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
merge_neighbor_entries(ranges);
|
||||||
|
}
|
||||||
|
|
||||||
typedef void (*range_action_t)(struct memranges *ranges,
|
typedef void (*range_action_t)(struct memranges *ranges,
|
||||||
resource_t begin, resource_t end,
|
resource_t begin, resource_t end,
|
||||||
unsigned long tag);
|
unsigned long tag);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user