From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:34453) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RAMgZ-0002cU-L8 for qemu-devel@nongnu.org; Sun, 02 Oct 2011 10:06:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RAMgY-0004sT-Bg for qemu-devel@nongnu.org; Sun, 02 Oct 2011 10:06:31 -0400 Received: from mx1.redhat.com ([209.132.183.28]:2142) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RAMgY-0004sP-1J for qemu-devel@nongnu.org; Sun, 02 Oct 2011 10:06:30 -0400 Message-ID: <4E886FDE.9030005@redhat.com> Date: Sun, 02 Oct 2011 16:06:22 +0200 From: Avi Kivity MIME-Version: 1.0 References: <4E81C8F9.3030305@siemens.com> In-Reply-To: <4E81C8F9.3030305@siemens.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/3] memory: Print regions in ascending order List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: Blue Swirl , qemu-devel 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()) -- error compiling committee.c: too many arguments to function