mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-24 15:56:41 +00:00
parent
726327d95c
commit
a2dc07056e
@ -6,6 +6,7 @@ _/src/report_rom
|
|||||||
_/src/init
|
_/src/init
|
||||||
_/src/ram_fs
|
_/src/ram_fs
|
||||||
_/src/fs_rom
|
_/src/fs_rom
|
||||||
|
_/src/cached_fs_rom
|
||||||
_/src/fs_report
|
_/src/fs_report
|
||||||
_/src/nitpicker
|
_/src/nitpicker
|
||||||
_/src/global_keys_handler
|
_/src/global_keys_handler
|
||||||
|
@ -83,7 +83,9 @@ class Depot_deploy::Child : public List_model<Child>::Element
|
|||||||
&& (_config_pkg_path() == _blueprint_pkg_path);
|
&& (_config_pkg_path() == _blueprint_pkg_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void _gen_routes(Xml_generator &, Xml_node, Depot_rom_server const &) const;
|
inline void _gen_routes(Xml_generator &, Xml_node,
|
||||||
|
Depot_rom_server const &,
|
||||||
|
Depot_rom_server const &) const;
|
||||||
|
|
||||||
static void _gen_provides_sub_node(Xml_generator &xml, Xml_node service,
|
static void _gen_provides_sub_node(Xml_generator &xml, Xml_node service,
|
||||||
Xml_node::Type const &node_type,
|
Xml_node::Type const &node_type,
|
||||||
@ -224,14 +226,19 @@ class Depot_deploy::Child : public List_model<Child>::Element
|
|||||||
/**
|
/**
|
||||||
* Generate start node of init configuration
|
* Generate start node of init configuration
|
||||||
*
|
*
|
||||||
* \param common session routes to be added in addition to the ones
|
* \param common session routes to be added in addition to
|
||||||
* found in the pkg blueprint
|
* the ones found in the pkg blueprint
|
||||||
* \param depot_rom name of the server that provides the depot content
|
* \param cached_depot_rom name of the server that provides the depot
|
||||||
* as ROM modules. If the string is invalid, ROM
|
* content as ROM modules. If the string is
|
||||||
* requests are routed to the parent.
|
* invalid, ROM requests are routed to the
|
||||||
|
* parent.
|
||||||
|
* \param uncached_depot_rom name of the depot-ROM server used to obtain
|
||||||
|
* the content of the depot user "local", which
|
||||||
|
* is assumed to be mutable
|
||||||
*/
|
*/
|
||||||
inline void gen_start_node(Xml_generator &, Xml_node common,
|
inline void gen_start_node(Xml_generator &, Xml_node common,
|
||||||
Depot_rom_server const &depot_rom) const;
|
Depot_rom_server const &cached_depot_rom,
|
||||||
|
Depot_rom_server const &uncached_depot_rom) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate installation entry needed for the completion of the child
|
* Generate installation entry needed for the completion of the child
|
||||||
@ -251,7 +258,8 @@ class Depot_deploy::Child : public List_model<Child>::Element
|
|||||||
|
|
||||||
|
|
||||||
void Depot_deploy::Child::gen_start_node(Xml_generator &xml, Xml_node common,
|
void Depot_deploy::Child::gen_start_node(Xml_generator &xml, Xml_node common,
|
||||||
Depot_rom_server const &depot_rom) const
|
Depot_rom_server const &cached_depot_rom,
|
||||||
|
Depot_rom_server const &uncached_depot_rom) const
|
||||||
{
|
{
|
||||||
if (!_configured() || _condition == UNSATISFIED)
|
if (!_configured() || _condition == UNSATISFIED)
|
||||||
return;
|
return;
|
||||||
@ -313,13 +321,15 @@ void Depot_deploy::Child::gen_start_node(Xml_generator &xml, Xml_node common,
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
xml.node("route", [&] () { _gen_routes(xml, common, depot_rom); });
|
xml.node("route", [&] () {
|
||||||
|
_gen_routes(xml, common, cached_depot_rom, uncached_depot_rom); });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Depot_deploy::Child::_gen_routes(Xml_generator &xml, Xml_node common,
|
void Depot_deploy::Child::_gen_routes(Xml_generator &xml, Xml_node common,
|
||||||
Depot_rom_server const &depot_rom) const
|
Depot_rom_server const &cached_depot_rom,
|
||||||
|
Depot_rom_server const &uncached_depot_rom) const
|
||||||
{
|
{
|
||||||
if (!_pkg_xml.constructed())
|
if (!_pkg_xml.constructed())
|
||||||
return;
|
return;
|
||||||
@ -334,6 +344,18 @@ void Depot_deploy::Child::_gen_routes(Xml_generator &xml, Xml_node common,
|
|||||||
xml.append(route.content_base(), route.content_size());
|
xml.append(route.content_base(), route.content_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return name of depot-ROM server used for obtaining the 'path'
|
||||||
|
*
|
||||||
|
* If the depot path refers to the depot-user "local", route the
|
||||||
|
* session request to the non-cached ROM service.
|
||||||
|
*/
|
||||||
|
auto rom_server = [&] (Path const &path) {
|
||||||
|
|
||||||
|
return (String<7>(path) == "local/") ? uncached_depot_rom
|
||||||
|
: cached_depot_rom;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Redirect config ROM request to label as given in the 'config' attribute,
|
* Redirect config ROM request to label as given in the 'config' attribute,
|
||||||
* if present. We need to search the blueprint's <rom> nodes for the
|
* if present. We need to search the blueprint's <rom> nodes for the
|
||||||
@ -356,9 +378,9 @@ void Depot_deploy::Child::_gen_routes(Xml_generator &xml, Xml_node common,
|
|||||||
typedef String<160> Path;
|
typedef String<160> Path;
|
||||||
Path const path = rom.attribute_value("path", Path());
|
Path const path = rom.attribute_value("path", Path());
|
||||||
|
|
||||||
if (depot_rom.valid())
|
if (cached_depot_rom.valid())
|
||||||
xml.node("child", [&] () {
|
xml.node("child", [&] () {
|
||||||
xml.attribute("name", depot_rom);
|
xml.attribute("name", rom_server(path));
|
||||||
xml.attribute("label", path); });
|
xml.attribute("label", path); });
|
||||||
else
|
else
|
||||||
xml.node("parent", [&] () {
|
xml.node("parent", [&] () {
|
||||||
@ -389,9 +411,9 @@ void Depot_deploy::Child::_gen_routes(Xml_generator &xml, Xml_node common,
|
|||||||
xml.attribute("name", "ROM");
|
xml.attribute("name", "ROM");
|
||||||
xml.attribute("label_last", label);
|
xml.attribute("label_last", label);
|
||||||
|
|
||||||
if (depot_rom.valid()) {
|
if (cached_depot_rom.valid()) {
|
||||||
xml.node("child", [&] () {
|
xml.node("child", [&] () {
|
||||||
xml.attribute("name", depot_rom);
|
xml.attribute("name", rom_server(path));
|
||||||
xml.attribute("label", path);
|
xml.attribute("label", path);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
@ -103,10 +103,11 @@ class Depot_deploy::Children
|
|||||||
}
|
}
|
||||||
|
|
||||||
void gen_start_nodes(Xml_generator &xml, Xml_node common,
|
void gen_start_nodes(Xml_generator &xml, Xml_node common,
|
||||||
Child::Depot_rom_server const &depot_rom) const
|
Child::Depot_rom_server const &cached_depot_rom,
|
||||||
|
Child::Depot_rom_server const &uncached_depot_rom) const
|
||||||
{
|
{
|
||||||
_children.for_each([&] (Child const &child) {
|
_children.for_each([&] (Child const &child) {
|
||||||
child.gen_start_node(xml, common, depot_rom); });
|
child.gen_start_node(xml, common, cached_depot_rom, uncached_depot_rom); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_queries(Xml_generator &xml) const
|
void gen_queries(Xml_generator &xml) const
|
||||||
|
@ -64,7 +64,8 @@ struct Depot_deploy::Main
|
|||||||
Xml_node static_config = config.sub_node("static");
|
Xml_node static_config = config.sub_node("static");
|
||||||
xml.append(static_config.content_base(), static_config.content_size());
|
xml.append(static_config.content_base(), static_config.content_size());
|
||||||
Child::Depot_rom_server const parent { };
|
Child::Depot_rom_server const parent { };
|
||||||
_children.gen_start_nodes(xml, config.sub_node("common_routes"), parent);
|
_children.gen_start_nodes(xml, config.sub_node("common_routes"),
|
||||||
|
parent, parent);
|
||||||
});
|
});
|
||||||
|
|
||||||
/* update query for blueprints of all unconfigured start nodes */
|
/* update query for blueprints of all unconfigured start nodes */
|
||||||
|
@ -132,9 +132,17 @@ void Sculpt::Deploy::handle_deploy()
|
|||||||
|
|
||||||
void Sculpt::Deploy::gen_runtime_start_nodes(Xml_generator &xml) const
|
void Sculpt::Deploy::gen_runtime_start_nodes(Xml_generator &xml) const
|
||||||
{
|
{
|
||||||
|
/* depot-ROM instance for regular (immutable) depot content */
|
||||||
xml.node("start", [&] () {
|
xml.node("start", [&] () {
|
||||||
gen_fs_rom_start_content(xml, "depot_rom", "depot",
|
gen_fs_rom_start_content(xml, "depot_rom", "cached_fs_rom", "depot",
|
||||||
depot_rom_state.ram_quota); });
|
cached_depot_rom_state.ram_quota,
|
||||||
|
cached_depot_rom_state.cap_quota); });
|
||||||
|
|
||||||
|
/* depot-ROM instance for mutable content (/depot/local/) */
|
||||||
|
xml.node("start", [&] () {
|
||||||
|
gen_fs_rom_start_content(xml, "dynamic_depot_rom", "fs_rom", "depot",
|
||||||
|
uncached_depot_rom_state.ram_quota,
|
||||||
|
uncached_depot_rom_state.cap_quota); });
|
||||||
|
|
||||||
xml.node("start", [&] () {
|
xml.node("start", [&] () {
|
||||||
gen_depot_query_start_content(xml); });
|
gen_depot_query_start_content(xml); });
|
||||||
@ -150,5 +158,5 @@ void Sculpt::Deploy::gen_runtime_start_nodes(Xml_generator &xml) const
|
|||||||
/* generate start nodes for deployed packages */
|
/* generate start nodes for deployed packages */
|
||||||
if (manual_deploy.has_sub_node("common_routes"))
|
if (manual_deploy.has_sub_node("common_routes"))
|
||||||
_children.gen_start_nodes(xml, manual_deploy.sub_node("common_routes"),
|
_children.gen_start_nodes(xml, manual_deploy.sub_node("common_routes"),
|
||||||
"depot_rom");
|
"depot_rom", "dynamic_depot_rom");
|
||||||
}
|
}
|
||||||
|
@ -47,9 +47,10 @@ struct Sculpt::Deploy
|
|||||||
|
|
||||||
struct Query_version { unsigned value; } _query_version { 0 };
|
struct Query_version { unsigned value; } _query_version { 0 };
|
||||||
|
|
||||||
struct Depot_rom_state { Ram_quota ram_quota; };
|
struct Depot_rom_state { Ram_quota ram_quota; Cap_quota cap_quota; };
|
||||||
|
|
||||||
Depot_rom_state depot_rom_state { 32*1024*1024 };
|
Depot_rom_state cached_depot_rom_state { 24*1024*1024, 200 };
|
||||||
|
Depot_rom_state uncached_depot_rom_state { 8*1024*1024, 200 };
|
||||||
|
|
||||||
Attached_rom_dataspace _manual_deploy_rom { _env, "config -> deploy" };
|
Attached_rom_dataspace _manual_deploy_rom { _env, "config -> deploy" };
|
||||||
|
|
||||||
|
@ -739,36 +739,43 @@ void Sculpt::Main::_handle_runtime_state()
|
|||||||
/* upgrade ram_fs quota on demand */
|
/* upgrade ram_fs quota on demand */
|
||||||
state.for_each_sub_node("child", [&] (Xml_node child) {
|
state.for_each_sub_node("child", [&] (Xml_node child) {
|
||||||
|
|
||||||
if (child.attribute_value("name", String<16>()) == "ram_fs") {
|
if (child.attribute_value("name", String<16>()) != "ram_fs")
|
||||||
|
return;
|
||||||
if (child.has_sub_node("ram")
|
|
||||||
&& child.sub_node("ram").has_attribute("requested")) {
|
|
||||||
|
|
||||||
|
if (child.has_sub_node("ram") && child.sub_node("ram").has_attribute("requested")) {
|
||||||
_storage._ram_fs_state.ram_quota.value *= 2;
|
_storage._ram_fs_state.ram_quota.value *= 2;
|
||||||
reconfigure_runtime = true;
|
reconfigure_runtime = true;
|
||||||
generate_dialog();
|
generate_dialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (child.has_sub_node("caps")
|
if (child.has_sub_node("caps") && child.sub_node("caps").has_attribute("requested")) {
|
||||||
&& child.sub_node("caps").has_attribute("requested")) {
|
|
||||||
|
|
||||||
_storage._ram_fs_state.cap_quota.value += 100;
|
_storage._ram_fs_state.cap_quota.value += 100;
|
||||||
reconfigure_runtime = true;
|
reconfigure_runtime = true;
|
||||||
generate_dialog();
|
generate_dialog();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/* upgrade depot_rom quota on demand */
|
/* upgrade depot_rom quota on demand */
|
||||||
state.for_each_sub_node("child", [&] (Xml_node child) {
|
state.for_each_sub_node("child", [&] (Xml_node child) {
|
||||||
|
|
||||||
if (child.attribute_value("name", String<16>()) == "depot_rom"
|
auto upgrade_depot_rom = [&] (Deploy::Depot_rom_state &state, Start_name const &name)
|
||||||
&& child.has_sub_node("ram")
|
{
|
||||||
&& child.sub_node("ram").has_attribute("requested")) {
|
if (child.attribute_value("name", Start_name()) != name)
|
||||||
|
return;
|
||||||
|
|
||||||
_deploy.depot_rom_state.ram_quota.value *= 2;
|
if (child.has_sub_node("ram") && child.sub_node("ram").has_attribute("requested")) {
|
||||||
|
state.ram_quota.value *= 2;
|
||||||
reconfigure_runtime = true;
|
reconfigure_runtime = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (child.has_sub_node("caps") && child.sub_node("caps").has_attribute("requested")) {
|
||||||
|
state.cap_quota.value += 100;
|
||||||
|
reconfigure_runtime = true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
upgrade_depot_rom(_deploy.cached_depot_rom_state, "depot_rom");
|
||||||
|
upgrade_depot_rom(_deploy.uncached_depot_rom_state, "dynamic_depot_rom");
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -47,7 +47,9 @@ namespace Sculpt {
|
|||||||
void gen_fs_start_content(Xml_generator &, Storage_target const &,
|
void gen_fs_start_content(Xml_generator &, Storage_target const &,
|
||||||
File_system::Type);
|
File_system::Type);
|
||||||
|
|
||||||
void gen_fs_rom_start_content(Xml_generator &, Start_name const &, Start_name const &, Ram_quota);
|
void gen_fs_rom_start_content(Xml_generator &, Start_name const &,
|
||||||
|
Start_name const &, Start_name const &,
|
||||||
|
Ram_quota, Cap_quota);
|
||||||
|
|
||||||
void gen_gpt_relabel_start_content(Xml_generator &, Storage_device const &);
|
void gen_gpt_relabel_start_content(Xml_generator &, Storage_device const &);
|
||||||
void gen_gpt_expand_start_content (Xml_generator &, Storage_device const &);
|
void gen_gpt_expand_start_content (Xml_generator &, Storage_device const &);
|
||||||
|
@ -15,13 +15,14 @@
|
|||||||
|
|
||||||
void Sculpt::gen_fs_rom_start_content(Xml_generator &xml,
|
void Sculpt::gen_fs_rom_start_content(Xml_generator &xml,
|
||||||
Start_name const &name,
|
Start_name const &name,
|
||||||
|
Start_name const &binary,
|
||||||
Start_name const &server,
|
Start_name const &server,
|
||||||
Ram_quota ram_quota)
|
Ram_quota ram_quota,
|
||||||
|
Cap_quota cap_quota)
|
||||||
{
|
{
|
||||||
gen_common_start_content(xml, name,
|
gen_common_start_content(xml, name, cap_quota, ram_quota);
|
||||||
Cap_quota{200}, ram_quota);
|
|
||||||
|
|
||||||
gen_named_node(xml, "binary", "fs_rom");
|
gen_named_node(xml, "binary", binary);
|
||||||
|
|
||||||
xml.node("config", [&] () { });
|
xml.node("config", [&] () { });
|
||||||
|
|
||||||
@ -32,10 +33,11 @@ void Sculpt::gen_fs_rom_start_content(Xml_generator &xml,
|
|||||||
gen_service_node<::File_system::Session>(xml, [&] () {
|
gen_service_node<::File_system::Session>(xml, [&] () {
|
||||||
gen_named_node(xml, "child", server); });
|
gen_named_node(xml, "child", server); });
|
||||||
|
|
||||||
gen_parent_rom_route(xml, "fs_rom");
|
gen_parent_rom_route(xml, binary);
|
||||||
gen_parent_rom_route(xml, "ld.lib.so");
|
gen_parent_rom_route(xml, "ld.lib.so");
|
||||||
gen_parent_route<Cpu_session>(xml);
|
gen_parent_route<Cpu_session>(xml);
|
||||||
gen_parent_route<Pd_session> (xml);
|
gen_parent_route<Pd_session> (xml);
|
||||||
gen_parent_route<Log_session>(xml);
|
gen_parent_route<Log_session>(xml);
|
||||||
|
gen_parent_route<Rm_session> (xml);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <nitpicker_session/nitpicker_session.h>
|
#include <nitpicker_session/nitpicker_session.h>
|
||||||
#include <usb_session/usb_session.h>
|
#include <usb_session/usb_session.h>
|
||||||
#include <log_session/log_session.h>
|
#include <log_session/log_session.h>
|
||||||
|
#include <rm_session/rm_session.h>
|
||||||
#include <timer_session/timer_session.h>
|
#include <timer_session/timer_session.h>
|
||||||
#include <file_system_session/file_system_session.h>
|
#include <file_system_session/file_system_session.h>
|
||||||
#include <report_session/report_session.h>
|
#include <report_session/report_session.h>
|
||||||
|
Loading…
Reference in New Issue
Block a user