Message ID | 4E81C8F9.3030305@siemens.com |
---|---|
State | New |
Headers | show |
On 09/27/2011 04:00 PM, Jan Kiszka wrote: > Makes reading the output more user friendly. Thanks, applied all three. > @@ -1339,12 +1339,13 @@ typedef QTAILQ_HEAD(queue, MemoryRegionList) MemoryRegionListHead; > static void mtree_print_mr(fprintf_function mon_printf, void *f, > const MemoryRegion *mr, unsigned int level, > target_phys_addr_t base, > - MemoryRegionListHead *print_queue) > + MemoryRegionListHead *alias_print_queue) > { > + MemoryRegionList *new_ml, *ml, *next_ml; > + MemoryRegionListHead submr_print_queue; > const MemoryRegion *submr; > unsigned int i; > > - > if (!mr) { > return; > } > @@ -1358,7 +1359,7 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, > bool found = false; > > /* check if the alias is already in the queue */ > - QTAILQ_FOREACH(ml, print_queue, queue) { > + QTAILQ_FOREACH(ml, alias_print_queue, queue) { > if (ml->mr == mr->alias&& !ml->printed) { > found = true; > } > @@ -1368,7 +1369,7 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, > ml = g_new(MemoryRegionList, 1); > ml->mr = mr->alias; > ml->printed = false; > - QTAILQ_INSERT_TAIL(print_queue, ml, queue); > + QTAILQ_INSERT_TAIL(alias_print_queue, ml, queue); > } > mon_printf(f, TARGET_FMT_plx "-" TARGET_FMT_plx " (prio %d): alias %s @%s " > TARGET_FMT_plx "-" TARGET_FMT_plx "\n", > @@ -1386,9 +1387,33 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, > mr->priority, > mr->name); > } > + > + QTAILQ_INIT(&submr_print_queue); > + > QTAILQ_FOREACH(submr,&mr->subregions, subregions_link) { > - mtree_print_mr(mon_printf, f, submr, level + 1, base + mr->addr, > - print_queue); > + new_ml = g_new(MemoryRegionList, 1); > + new_ml->mr = submr; > + QTAILQ_FOREACH(ml,&submr_print_queue, queue) { > + if (new_ml->mr->addr< ml->mr->addr || > + (new_ml->mr->addr == ml->mr->addr&& > + new_ml->mr->priority> ml->mr->priority)) { > + QTAILQ_INSERT_BEFORE(ml, new_ml, queue); > + new_ml = NULL; > + break; > + } > + } > + if (new_ml) { > + QTAILQ_INSERT_TAIL(&submr_print_queue, new_ml, queue); > + } > + } > + > + QTAILQ_FOREACH(ml,&submr_print_queue, queue) { > + mtree_print_mr(mon_printf, f, ml->mr, level + 1, base + mr->addr, > + alias_print_queue); > + } > + > + QTAILQ_FOREACH_SAFE(next_ml,&submr_print_queue, queue, ml) { > + g_free(ml); > } > } > Yuck, the whole thing would be a one-liner with a capable library (std::map<> or std::sort())
diff --git a/memory.c b/memory.c index 24c5abd..6ff78cb 100644 --- a/memory.c +++ b/memory.c @@ -1339,12 +1339,13 @@ typedef QTAILQ_HEAD(queue, MemoryRegionList) MemoryRegionListHead; static void mtree_print_mr(fprintf_function mon_printf, void *f, const MemoryRegion *mr, unsigned int level, target_phys_addr_t base, - MemoryRegionListHead *print_queue) + MemoryRegionListHead *alias_print_queue) { + MemoryRegionList *new_ml, *ml, *next_ml; + MemoryRegionListHead submr_print_queue; const MemoryRegion *submr; unsigned int i; - if (!mr) { return; } @@ -1358,7 +1359,7 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, bool found = false; /* check if the alias is already in the queue */ - QTAILQ_FOREACH(ml, print_queue, queue) { + QTAILQ_FOREACH(ml, alias_print_queue, queue) { if (ml->mr == mr->alias && !ml->printed) { found = true; } @@ -1368,7 +1369,7 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, ml = g_new(MemoryRegionList, 1); ml->mr = mr->alias; ml->printed = false; - QTAILQ_INSERT_TAIL(print_queue, ml, queue); + QTAILQ_INSERT_TAIL(alias_print_queue, ml, queue); } mon_printf(f, TARGET_FMT_plx "-" TARGET_FMT_plx " (prio %d): alias %s @%s " TARGET_FMT_plx "-" TARGET_FMT_plx "\n", @@ -1386,9 +1387,33 @@ static void mtree_print_mr(fprintf_function mon_printf, void *f, mr->priority, mr->name); } + + QTAILQ_INIT(&submr_print_queue); + QTAILQ_FOREACH(submr, &mr->subregions, subregions_link) { - mtree_print_mr(mon_printf, f, submr, level + 1, base + mr->addr, - print_queue); + new_ml = g_new(MemoryRegionList, 1); + new_ml->mr = submr; + QTAILQ_FOREACH(ml, &submr_print_queue, queue) { + if (new_ml->mr->addr < ml->mr->addr || + (new_ml->mr->addr == ml->mr->addr && + new_ml->mr->priority > ml->mr->priority)) { + QTAILQ_INSERT_BEFORE(ml, new_ml, queue); + new_ml = NULL; + break; + } + } + if (new_ml) { + QTAILQ_INSERT_TAIL(&submr_print_queue, new_ml, queue); + } + } + + QTAILQ_FOREACH(ml, &submr_print_queue, queue) { + mtree_print_mr(mon_printf, f, ml->mr, level + 1, base + mr->addr, + alias_print_queue); + } + + QTAILQ_FOREACH_SAFE(next_ml, &submr_print_queue, queue, ml) { + g_free(ml); } }
Makes reading the output more user friendly. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> --- memory.c | 37 +++++++++++++++++++++++++++++++------ 1 files changed, 31 insertions(+), 6 deletions(-)