[commit] r1284 - trunk/openbios-devel/libopenbios
Author: mcayland Date: Fri Apr 4 11:46:18 2014 New Revision: 1284 URL: http://tracker.coreboot.org/trac/openbios/changeset/1284 Log: OFMEM: allow remove_range_() to split memory ranges. If a client tries to free a memory range that lies within one we have already allocated (and doesn't match exactly), split the range so that we able to just free the part of the range requested by the client. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Modified: trunk/openbios-devel/libopenbios/ofmem_common.c Modified: trunk/openbios-devel/libopenbios/ofmem_common.c ============================================================================== --- trunk/openbios-devel/libopenbios/ofmem_common.c Sun Mar 30 19:31:19 2014 (r1283) +++ trunk/openbios-devel/libopenbios/ofmem_common.c Fri Apr 4 11:46:18 2014 (r1284) @@ -887,6 +887,25 @@ { range_t **t, *u; + /* If not an exact match then split the range */ + for (t = r; *t; t = &(**t).next) { + if (ea > (**t).start && ea < (**t).start + (**t).size - 1) { + u = (range_t*)malloc(sizeof(range_t)); + u->start = ea; + u->size = size; + u->next = (**t).next; + + OFMEM_TRACE("remove_range_ splitting range with addr=" FMT_plx + " size=" FMT_ucellx " -> addr=" FMT_plx " size=" FMT_ucellx ", " + "addr=" FMT_plx " size=" FMT_ucellx "\n", + (**t).start, (**t).size, (**t).start, (**t).size - size, + u->start, u->size); + + (**t).size = (**t).size - size; + (**t).next = u; + } + } + for (t = r; *t; t = &(**t).next) { if (ea >= (**t).start && ea + size <= (**t).start + (**t).size) { OFMEM_TRACE("remove_range_ freeing range with addr=" FMT_plx
participants (1)
-
repository service