From ed9307db13671ee347a3f1288e87da508139feea Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Wed, 5 Feb 2014 15:44:30 -0600 Subject: 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 Reviewed-on: http://review.coreboot.org/5150 Tested-by: build bot (Jenkins) Reviewed-by: Vladimir Serbinenko --- src/lib/memrange.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/lib/memrange.c') diff --git a/src/lib/memrange.c b/src/lib/memrange.c index af56e72159..0ebac0534e 100644 --- a/src/lib/memrange.c +++ b/src/lib/memrange.c @@ -204,6 +204,19 @@ static void merge_add_memranges(struct memranges *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, resource_t begin, resource_t end, unsigned long tag); -- cgit v1.2.3