From 6820de51ba77a14acdf04b56c8270f2fa425ed2e Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 21 Jul 2014 15:23:02 +0200 Subject: [PATCH] gdb_monitor: Support session upgrades This patch enables the debugging on services that rely on dynamic session upgrades. For example, nitpicker expects its clients to donate RAM quota that matches the size of the virtual framebuffer, which might change during the lifetime of a nitpicker session. --- repos/ports/src/app/gdb_monitor/app_child.h | 23 +++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/repos/ports/src/app/gdb_monitor/app_child.h b/repos/ports/src/app/gdb_monitor/app_child.h index 1ef53232c0..578be87802 100644 --- a/repos/ports/src/app/gdb_monitor/app_child.h +++ b/repos/ports/src/app/gdb_monitor/app_child.h @@ -196,9 +196,28 @@ namespace Gdb_monitor { return cap; } - void upgrade(Session_capability, Upgrade_args const &) + void upgrade(Session_capability session_cap, + Upgrade_args const &args) { - PDBG("not yet implemented"); + using namespace Genode; + + Child_session *session = _sessions.lookup_and_lock(session_cap); + if (!session) { + PERR("attempt to upgrade unknown session"); + return; + } + + Genode::size_t ram_quota = + Arg_string::find_arg(args.string(), + "ram_quota").long_value(0); + + /* forward session quota to child */ + env()->ram_session()->transfer_quota(_child_ram, ram_quota); + + session->ram_quota += ram_quota; + + /* inform child about quota upgrade */ + _child_root.upgrade(session_cap, args); } void close(Session_capability session_cap)