From e1ec39e4764e70b865a7c81e99867a1b7f28c7ed Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 2 Nov 2016 10:39:13 +0100 Subject: [PATCH] base: replace dump utilities in Allocator_avl Replace 'dump()' debug utilities within Allocator_avl with Output::print equivalents, and use the new Avl_tree::for_each utility to simplify the implementation. Ref #2159 --- repos/base-fiasco/src/core/platform.cc | 12 ++-- repos/base-foc/src/core/platform.cc | 14 ++-- repos/base-hw/src/core/platform.cc | 30 ++------- repos/base-nova/src/core/platform.cc | 8 +-- repos/base-okl4/src/core/platform.cc | 10 +-- repos/base-pistachio/src/core/platform.cc | 12 ++-- repos/base-sel4/src/core/platform.cc | 8 +-- repos/base/include/base/allocator_avl.h | 22 +------ repos/base/src/core/dump_alloc.cc | 65 +++++++------------ .../src/core/include/synced_range_allocator.h | 2 + 10 files changed, 64 insertions(+), 119 deletions(-) diff --git a/repos/base-fiasco/src/core/platform.cc b/repos/base-fiasco/src/core/platform.cc index ae1038066..96e928e2b 100644 --- a/repos/base-fiasco/src/core/platform.cc +++ b/repos/base-fiasco/src/core/platform.cc @@ -440,13 +440,13 @@ Platform::Platform() : _setup_irq_alloc(); _setup_rom(); - log(":ram_alloc: "); _ram_alloc()->dump_addr_tree(); - log(":region_alloc: "); _region_alloc()->dump_addr_tree(); - log(":io_mem: "); _io_mem_alloc()->dump_addr_tree(); - log(":io_port: "); _io_port_alloc()->dump_addr_tree(); - log(":irq: "); _irq_alloc()->dump_addr_tree(); + log(":ram_alloc: ", _ram_alloc); + log(":region_alloc: ", _region_alloc); + log(":io_mem: ", _io_mem_alloc); + log(":io_port: ", _io_port_alloc); + log(":irq: ", _irq_alloc); log(":rom_fs: "); _rom_fs.print_fs(); - log(":core ranges: "); _core_address_ranges()()->dump_addr_tree(); + log(":core ranges: ", _core_address_ranges); Fiasco::l4_threadid_t myself = Fiasco::l4_myself(); diff --git a/repos/base-foc/src/core/platform.cc b/repos/base-foc/src/core/platform.cc index f7c443092..669f59b6e 100644 --- a/repos/base-foc/src/core/platform.cc +++ b/repos/base-foc/src/core/platform.cc @@ -446,13 +446,13 @@ Platform::Platform() : _setup_irq_alloc(); _setup_rom(); - log(":ram_alloc: "); _ram_alloc()->dump_addr_tree(); - log(":region_alloc: "); _region_alloc()->dump_addr_tree(); - log(":io_mem: "); _io_mem_alloc()->dump_addr_tree(); - log(":io_port: "); _io_port_alloc()->dump_addr_tree(); - log(":irq: "); _irq_alloc()->dump_addr_tree(); - log(":rom_fs: "); _rom_fs.print_fs(); - log(":core ranges: "); _core_address_ranges()()->dump_addr_tree(); + log(":ram_alloc: ", _ram_alloc); + log(":region_alloc: ", _region_alloc); + log(":io_mem: ", _io_mem_alloc); + log(":io_port: ", _io_port_alloc); + log(":irq: ", _irq_alloc); + log(":rom_fs: "); _rom_fs.print_fs(); + log(":core ranges: ", _core_address_ranges()); Core_cap_index* pdi = reinterpret_cast(cap_map()->insert(_cap_id_alloc.alloc(), Fiasco::L4_BASE_TASK_CAP)); diff --git a/repos/base-hw/src/core/platform.cc b/repos/base-hw/src/core/platform.cc index 56c0d44cc..f6cde5170 100644 --- a/repos/base-hw/src/core/platform.cc +++ b/repos/base-hw/src/core/platform.cc @@ -147,30 +147,12 @@ Platform::Platform() _init_additional(); /* print ressource summary */ - log("Core virtual memory allocator"); - log("---------------------"); - (*_core_mem_alloc.virt_alloc())()->dump_addr_tree(); - log("\n"); - log("RAM memory allocator"); - log("---------------------"); - (*_core_mem_alloc.phys_alloc())()->dump_addr_tree(); - log(""); - log("IO memory allocator"); - log("-------------------"); - _io_mem_alloc()->dump_addr_tree(); - log(""); - log("IO port allocator"); - log("-------------------"); - _io_port_alloc()->dump_addr_tree(); - log(""); - log("IRQ allocator"); - log("-------------------"); - _irq_alloc()->dump_addr_tree(); - log(""); - log("ROM filesystem"); - log("--------------"); - _rom_fs.print_fs(); - log(""); + log(":virt_alloc: ", *_core_mem_alloc.virt_alloc()); + log(":phys_alloc: ", *_core_mem_alloc.phys_alloc()); + log(":io_mem_alloc: ", _io_mem_alloc); + log(":io_port_alloc: ", _io_port_alloc); + log(":irq_alloc: ", _irq_alloc); + log(":rom_fs: "); _rom_fs.print_fs(); } diff --git a/repos/base-nova/src/core/platform.cc b/repos/base-nova/src/core/platform.cc index f94e5921b..d12c6dd62 100644 --- a/repos/base-nova/src/core/platform.cc +++ b/repos/base-nova/src/core/platform.cc @@ -628,10 +628,10 @@ Platform::Platform() : _gsi_base_sel = (hip->mem_desc_offset - hip->cpu_desc_offset) / hip->cpu_desc_size; if (verbose_boot_info) { - log(":virt_alloc: "); (*_core_mem_alloc.virt_alloc())()->dump_addr_tree(); - log(":phys_alloc: "); (*_core_mem_alloc.phys_alloc())()->dump_addr_tree(); - log(":io_mem_alloc: "); _io_mem_alloc()->dump_addr_tree(); - log(":rom_fs: "); _rom_fs.print_fs(); + log(":virt_alloc: ", *_core_mem_alloc.virt_alloc()); + log(":phys_alloc: ", *_core_mem_alloc.phys_alloc()); + log(":io_mem_alloc: ", _io_mem_alloc); + log(":rom_fs: "); _rom_fs.print_fs(); } /* add capability selector ranges to map */ diff --git a/repos/base-okl4/src/core/platform.cc b/repos/base-okl4/src/core/platform.cc index 2816e3f87..a1dbc464f 100644 --- a/repos/base-okl4/src/core/platform.cc +++ b/repos/base-okl4/src/core/platform.cc @@ -185,11 +185,11 @@ Platform::Platform() : init_log(); - log(":phys_alloc: "); (*_core_mem_alloc.phys_alloc())()->dump_addr_tree(); - log(":virt_alloc: "); (*_core_mem_alloc.virt_alloc())()->dump_addr_tree(); - log(":io_mem: "); _io_mem_alloc()->dump_addr_tree(); - log(":io_port: "); _io_port_alloc()->dump_addr_tree(); - log(":irq: "); _irq_alloc()->dump_addr_tree(); + log(":phys_alloc: ", *_core_mem_alloc.phys_alloc()); + log(":virt_alloc: ", *_core_mem_alloc.virt_alloc()); + log(":io_mem: ", _io_mem_alloc); + log(":io_port: ", _io_port_alloc); + log(":irq: ", _irq_alloc); log(":rom_fs: "); _rom_fs.print_fs(); /* setup task object for core task */ diff --git a/repos/base-pistachio/src/core/platform.cc b/repos/base-pistachio/src/core/platform.cc index 604c94250..715888efa 100644 --- a/repos/base-pistachio/src/core/platform.cc +++ b/repos/base-pistachio/src/core/platform.cc @@ -630,13 +630,13 @@ Platform::Platform() : * hold the meta data for the ROM modules as initialized by '_setup_rom'. */ if (verbose) { - log(":ram_alloc: "); _ram_alloc()->dump_addr_tree(); - log(":region_alloc: "); _region_alloc()->dump_addr_tree(); - log(":io_mem: "); _io_mem_alloc()->dump_addr_tree(); - log(":io_port: "); _io_port_alloc()->dump_addr_tree(); - log(":irq: "); _irq_alloc()->dump_addr_tree(); + log(":ram_alloc: ", _ram_alloc); + log(":region_alloc: ", _region_alloc); + log(":io_mem: ", _io_mem_alloc); + log(":io_port: ", _io_port_alloc); + log(":irq: ", _irq_alloc); log(":rom_fs: "); _rom_fs.print_fs(); - log(":core ranges: "); _core_address_ranges()()->dump_addr_tree(); + log(":core ranges: ", _core_address_ranges); } /* diff --git a/repos/base-sel4/src/core/platform.cc b/repos/base-sel4/src/core/platform.cc index 39a8bc985..d2e7a4c2a 100644 --- a/repos/base-sel4/src/core/platform.cc +++ b/repos/base-sel4/src/core/platform.cc @@ -438,10 +438,10 @@ Platform::Platform() log("VM area at ", Hex_range(_vm_base, _vm_size)); if (verbose_boot_info) { - log(":phys_alloc: "); (*_core_mem_alloc.phys_alloc())()->dump_addr_tree(); - log(":unused_phys_alloc:"); _unused_phys_alloc()->dump_addr_tree(); - log(":virt_alloc: "); (*_core_mem_alloc.virt_alloc())()->dump_addr_tree(); - log(":io_mem_alloc: "); _io_mem_alloc()->dump_addr_tree(); + log(":phys_alloc: ", *_core_mem_alloc.phys_alloc()); + log(":unused_phys_alloc:", _unused_phys_alloc); + log(":virt_alloc: ", *_core_mem_alloc.virt_alloc()); + log(":io_mem_alloc: ", _io_mem_alloc); } _init_rom_modules(); diff --git a/repos/base/include/base/allocator_avl.h b/repos/base/include/base/allocator_avl.h index 3ce5c9dad..a378bf87d 100644 --- a/repos/base/include/base/allocator_avl.h +++ b/repos/base/include/base/allocator_avl.h @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -150,20 +151,6 @@ class Genode::Allocator_avl_base : public Range_allocator * Return sum of available memory in subtree */ size_t avail_in_subtree(void); - - /** - * Debug hook - * - * \noapi - */ - void dump(); - - /** - * Debug hook - * - * \noapi - */ - void dump_dot(int indent = 0); }; private: @@ -252,12 +239,7 @@ class Genode::Allocator_avl_base : public Range_allocator */ bool any_block_addr(addr_t *out_addr); - /** - * Debug hook - * - * \noapi - */ - void dump_addr_tree(Block *addr_node = 0); + void print(Output &out) const; /******************************* diff --git a/repos/base/src/core/dump_alloc.cc b/repos/base/src/core/dump_alloc.cc index 73ee2685f..adccd79d8 100644 --- a/repos/base/src/core/dump_alloc.cc +++ b/repos/base/src/core/dump_alloc.cc @@ -1,58 +1,37 @@ /* - * \brief Allocator dump helpers + * \brief Allocator AVL dump * \author Norman Feske + * \author Stefan Kalkowski * \date 2009-10-15 */ /* - * Copyright (C) 2009-2013 Genode Labs GmbH + * Copyright (C) 2009-2016 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ -#include #include -using namespace Genode; - - -void Allocator_avl_base::Block::dump() +void Genode::Allocator_avl_base::print(Genode::Output & out) const { - log(" Block: [", Hex(addr()), ",", Hex(addr() + size()), "] ", - "size=", Hex(size()), " avail=", Hex(avail()), " ", - "max_avail=", Hex(max_avail())); -} - - -void Allocator_avl_base::dump_addr_tree(Block *addr_node) -{ - bool top = false; - static unsigned long mem_size; - static unsigned long mem_avail; - - if (addr_node == 0) { - addr_node = _addr_tree.first(); - - log("Allocator ", this, " dump:"); - mem_size = mem_avail = 0; - top = true; - } - - if (!addr_node) return; - - if (addr_node->child(0)) - dump_addr_tree(addr_node->child(0)); - - Block *b = (Block *)addr_node; - b->dump(); - mem_size += b->size(); - mem_avail += b->avail(); - - if (addr_node->child(1)) - dump_addr_tree(addr_node->child(1)); - - if (top) - log(" => mem_size=", mem_size, " (", mem_size / 1024 / 1024, " MB) ", - "/ mem_avail=", mem_avail, " (", mem_avail / 1024 / 1024, " MB)"); + using Genode::print; + unsigned long mem_size = 0; + unsigned long mem_avail = 0; + + print(out, "Allocator ", this, " dump:\n"); + + _addr_tree.for_each([&] (Block const & b) + { + print(out, " Block: [", Hex(b.addr()), ",", Hex(b.addr() + b.size()), + "] ", "size=", Hex(b.size()), " avail=", Hex(b.avail()), " ", + "max_avail=", Hex(b.max_avail()), "\n"); + mem_size += b.size(); + mem_avail += b.avail(); + }); + + print(out, " => mem_size=", mem_size, " (", mem_size / 1024 / 1024 , + " MB) / mem_avail=" , mem_avail , " (" , mem_avail / 1024 / 1024 , + " MB)\n"); } diff --git a/repos/base/src/core/include/synced_range_allocator.h b/repos/base/src/core/include/synced_range_allocator.h index c3ec4b978..b953a12bd 100644 --- a/repos/base/src/core/include/synced_range_allocator.h +++ b/repos/base/src/core/include/synced_range_allocator.h @@ -60,6 +60,8 @@ class Genode::Synced_range_allocator : public Range_allocator Guard operator () () { return _synced_object(); } Guard operator () () const { return _synced_object(); } + void print(Output &out) const { _synced_object()->print(out); } + /************************* ** Allocator interface **