From 6326774056b62ab8d0182400c90169009c8e19d9 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 1 Jun 2022 17:37:44 +0200 Subject: [PATCH 001/354] mk: trigger CUSTOM_TARGET_DEPS from 'all' rule Build description files that feature both an actual target and CUSTOM_TARGET_DEPS happen to re-link the target each time whenever one of the CUSTOM_TARGET_DEPS is phony, e.g., gems/src/app/menu_view/. The re-linking of the actual target is of course not desired. By triggering the creation of CUSTOM_TARGET_DEPS from 'all:' instead of '$(TARGET)', the specified files do not implicitly become link dependencies of the target. Issue #3972 --- repos/base/mk/prg.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/base/mk/prg.mk b/repos/base/mk/prg.mk index 6636d7f99d..3285274a33 100644 --- a/repos/base/mk/prg.mk +++ b/repos/base/mk/prg.mk @@ -183,7 +183,7 @@ $(LINK_ITEMS) $(TARGET): $(HOST_TOOLS) # # Trigger build of additional program specific targets # -$(TARGET): $(CUSTOM_TARGET_DEPS) +all: $(CUSTOM_TARGET_DEPS) LD_CMD += -Wl,--whole-archive -Wl,--start-group LD_CMD += $(LINK_ITEMS_BRIEF) From 83f5dd8a8b0742af2dda85c36d7cfb26a0ff4a3e Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 2 Jun 2022 09:23:35 +0200 Subject: [PATCH 002/354] pc/wifi: shared library depends on symbol.map CUSTOM_TARGET_DEPS does not trigger relinking the lib but recreates the .tag file only. --- repos/pc/lib/mk/wifi.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/pc/lib/mk/wifi.inc b/repos/pc/lib/mk/wifi.inc index 2115410fd8..1510384a19 100644 --- a/repos/pc/lib/mk/wifi.inc +++ b/repos/pc/lib/mk/wifi.inc @@ -47,7 +47,7 @@ vpath %.cc $(REP_DIR)/src/lib/pc vpath %.c $(TARGET_LIB_DIR) vpath %.cc $(TARGET_LIB_DIR) -CUSTOM_TARGET_DEPS += $(TARGET_LIB_DIR)/symbol.map +$(LIB).lib.so: $(TARGET_LIB_DIR)/symbol.map # # Genode C-API backends From 871ee04ed6d407d74363b41303b6ac8df937f5c6 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 2 Jun 2022 11:47:17 +0200 Subject: [PATCH 003/354] wireguard: enable wg_fetchurl.run on sel4 --- repos/dde_linux/run/wg_fetchurl.run | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/repos/dde_linux/run/wg_fetchurl.run b/repos/dde_linux/run/wg_fetchurl.run index 665e8e1490..8684cdb843 100644 --- a/repos/dde_linux/run/wg_fetchurl.run +++ b/repos/dde_linux/run/wg_fetchurl.run @@ -61,12 +61,14 @@ append config { + + - + From 560a166613504f4e725c1dc280bc6d92d568332d Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 24 May 2022 11:55:48 +0200 Subject: [PATCH 004/354] wireguard: flags value via enum when adding a peer I used to set the peer flags to 2 when adding a peer but merely because I observed that value in my reference Linux. I now found that the flag 1<<1 means 'WGPEER_F_REPLACE_ALLOWEDIPS' and is ignored whenever the peer is new. Anyway, I keep setting the flag but with the clearer enum name because the wg tool is doing it as well when adding new peers and we want to stay close to how the original code interacts. Ref #4520 --- repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c index 538250259b..ae32e94eba 100644 --- a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c +++ b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c @@ -317,7 +317,7 @@ _genode_wg_config_add_peer(genode_wg_u16_t listen_port, peer->flags.header.nla_type = WGPEER_A_FLAGS; peer->flags.header.nla_len = sizeof(peer->flags); - peer->flags.data = 2; /* I don't know what this value means */ + peer->flags.data = WGPEER_F_REPLACE_ALLOWEDIPS; peer->allowedips.header.nla_len = sizeof(peer->allowedips); peer->allowedips.header.nla_type = WGPEER_A_ALLOWEDIPS | NLA_F_NESTED; From 86259b998e85f34fa42be64e19e89f1b75708f14 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 18 May 2022 12:45:21 +0200 Subject: [PATCH 005/354] wireguard: support removing peers Support removing peers by removing them from the component configuration. This commit also introduces the wg_reconfig run script that tests adding and removing single peers. Ref #4520 --- repos/dde_linux/run/wg_reconfig.run | 496 ++++++++++++++++++ .../src/app/wireguard/config_model.cc | 7 +- repos/dde_linux/src/app/wireguard/dummies.c | 16 + .../app/wireguard/genode_c_api/wireguard.c | 43 +- .../app/wireguard/genode_c_api/wireguard.h | 6 +- repos/dde_linux/src/app/wireguard/lx_emul.c | 12 + .../wireguard/spec/arm_64/generated_dummies.c | 24 - .../wireguard/spec/x86_64/generated_dummies.c | 24 - 8 files changed, 571 insertions(+), 57 deletions(-) create mode 100644 repos/dde_linux/run/wg_reconfig.run diff --git a/repos/dde_linux/run/wg_reconfig.run b/repos/dde_linux/run/wg_reconfig.run new file mode 100644 index 0000000000..9c3dcd306f --- /dev/null +++ b/repos/dde_linux/run/wg_reconfig.run @@ -0,0 +1,496 @@ +# +# A ping (peer 1) and a fetchurl (peer 3) both try to reach a server at peer 2 +# through a WireGuard VNP (10.0.9.0/24) while the configuration of the server +# WireGuard changes. Each peer has its own WireGuard instance and talks +# to the other peers only through WireGuard. The server WireGuard (peer 2) +# initially accepts only peer 1. After some time it gets re-configured to +# accept only peer 3. At the end, it gets re-configured to accept only peer 1 +# again. Note that the peer 1 WireGuard has to be reconfigured as well, in +# order to be forced to redo the initiation handshake for the last +# configuration phase of the server WireGuard. +# + +if {[expr ![have_spec arm_v8a] && ![have_spec x86_64]]} { + puts "Run script is not supported on this platform." + exit 0 +} + +create_boot_directory + +import_from_depot [depot_user]/src/libc \ + [depot_user]/src/libssh \ + [depot_user]/src/lighttpd \ + [depot_user]/src/openssl \ + [depot_user]/src/posix \ + [depot_user]/src/vfs \ + [depot_user]/src/vfs_lwip \ + [depot_user]/src/zlib + +proc peer1_wg_config {variant} { + + append result { + + } + if {$variant == "with_peer3"} { + append result { + + } + } + append result { + + } + return $result +} + +proc peer2_wg_config {variant} { + + append result { + + } + if {$variant == "with_peer1"} { + append result { + + } + } + if {$variant == "with_peer3"} { + append result { + + } + } + append result { + + } + return $result +} + +append config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + } [peer2_wg_config with_peer1] { + + + + + + } [peer2_wg_config with_peer3] { + + + + + + } [peer2_wg_config with_peer1] { + + + + + + + + } [peer1_wg_config with_peer3] { + + + + } [peer1_wg_config without_peer] { + + + + } [peer1_wg_config with_peer3] { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2019-07-04 12:00 + 01234567890123456789 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2000-01-01 00:00 + 0123456789012345678901234567890123456789 + + + + + +# lighttpd configuration +server.port = 80 +server.document-root = "/website" +server.event-handler = "select" +server.network-backend = "write" +server.upload-dirs = ( "/tmp" ) +server.modules = ("mod_openssl") +index-file.names = ( + "index.xhtml", "index.html", "index.htm" +) +mimetype.assign = ( + ".html" => "text/html", + ".htm" => "text/html" +) +$SERVER["socket"] == ":443" { + ssl.engine = "enable" + ssl.pemfile = "/etc/lighttpd/example.pem" +} + + +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4KHUZjDRew89c +wDlYPz9XFigcMDnDlHzdg2ByrGZIOUNYC5LH1QUK0TDbPP45Xx455niA0QY85dMQ +4DQx0Qk6+TDpVD3F2MYQgbIX6YkX9kgqX+jiHgsNzRD4KamNYmfUY+dJhlZEXWAF +uNSnRLvg4EH72AVKLLKiruGwkisW/AYU6dNE8iFOYL8Q75bBUADiQSDdD8vkpeXg +1NqxNyHPR6YRbA+vqcK0kbC8btKR9wG6m99OhTR4x3M87vtFFLNtJNEf54fYxi+L +1rljSqHbaXD+XJsVKgX+UlI1ZlYW4KqlMciMemkBp0CovCxLfsbMmkXAW2RONpkm ++sdO3CXFAgMBAAECggEAIKv00nqAVAuzP0ZPJivaZe3lYdLgfKVcXcRQGSgi4U9f +dkBfYxqU0W15mHvCspUAfM85s8jhrW4suwK739axJ4hMOCkc6Hvj78vCt+FT1C96 +cCIh4/PmjCVEjHJ/xTifKRwsTWwK5AgY4AsBl0dneabvremOTrGNY7VZDwVvpZz1 +qXkSNjQ63tZKj9cESO5ceGLzuBAG6JDDpqJM5fmdsQ36/QVz9Gogr8bXEWFM1TOo +lWVAPB/l6nqKurfMv+5th354+owv9CGKxqLBE1fujwE2VogBz7mkR/rnABOPU5ev +wQVLXoUkO2bI8Uvc28lChaiG6ihfdmNCmwoi56HFRQKBgQDj0WoIxiY7H42KV7Hh +uQZv/0aoQyjXuqJ7Vq0HdxOAxZr0GpSYgo3MTZWooI2AnAstPHXo0BsQr+XVijWm +xiDxMM4p9nrBzjEIHwyDaf62Pz/6lIPdenynLiEIOUbocJ3r0/3tCrY3U7fgjzYY +f9PZmXKEOOKdbVPyXG0OIJ/ADwKBgQDO8GkCdVGy/YB0X7ntqcBG0xgmDnKRmYpQ +X7Tb377AT2lzvftxaRVrx+UXtvFdy4xdrxjqHJCgOHT/fsAfjJlo7v1+KhTvE0pt +jCdJPLbzXJRwaISaeEaMJ/N8Vv/j2/YuoS5M5vh4NlWeO16HtF7N9V9cMEZ5iRW1 +9G/eWgOo6wKBgQCY6rn3xblnuhgxogd+ccmGZ50v2FST6WyiyV0/Q4hNyVXnP+g6 +LneriPBJzertRtChvpGOghGIs+jb2veESD1YZ+Aafp2LdTGoN98YXo9gGTiCpCmX +Al6lgOsfMAMOhnkaEKPC9ou0u3cTPk2bSEIVL1CUu/IwpW/RoIR7FR7ltQKBgQDA +RAmsqQfhPzqL5SzALclhhFuZcC7uLDOf/WvyJW37C000pjzp3/JxE2Y8pFKZDLc7 +i6WgTi3pTssVXtRt+5nFLtcC02Jjxg6OvXr6xphMf6XC0rjxM/KH4c6Npd9V+1Y9 +eK+l76rHNeRSgWKQvvqebO3On2O7I6yyQ4t0kTl5RQKBgQCbX1cTtNmNr6HNleXL +zfclKESSYy57uq3fQxhRrEE2ZNbemLOxEuoBCFYoMwpZEjC1GZyICrM7o5673/Ih +I0oZerUBmt2l8noZCQoITEa97bCbp2vIdHYnCf/H3Nf2qM329fc00kAmm7vUVRgM +4BqXnuFcAOuY68sgp9JArzK+EQ== +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIIDazCCAlOgAwIBAgIUYPOYXijLmMjjlgRCGHuZeyP0iPEwDQYJKoZIhvcNAQEL +BQAwRTELMAkGA1UEBhMCREUxEzARBgNVBAgMClNvbWUtU3RhdGUxDTALBgNVBAoM +BFRlc3QxEjAQBgNVBAMMCTEwLjAuMi41NTAeFw0yMDA1MTQxNDQ0MzlaFw00NzA5 +MzAxNDQ0MzlaMEUxCzAJBgNVBAYTAkRFMRMwEQYDVQQIDApTb21lLVN0YXRlMQ0w +CwYDVQQKDARUZXN0MRIwEAYDVQQDDAkxMC4wLjIuNTUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQC4KHUZjDRew89cwDlYPz9XFigcMDnDlHzdg2ByrGZI +OUNYC5LH1QUK0TDbPP45Xx455niA0QY85dMQ4DQx0Qk6+TDpVD3F2MYQgbIX6YkX +9kgqX+jiHgsNzRD4KamNYmfUY+dJhlZEXWAFuNSnRLvg4EH72AVKLLKiruGwkisW +/AYU6dNE8iFOYL8Q75bBUADiQSDdD8vkpeXg1NqxNyHPR6YRbA+vqcK0kbC8btKR +9wG6m99OhTR4x3M87vtFFLNtJNEf54fYxi+L1rljSqHbaXD+XJsVKgX+UlI1ZlYW +4KqlMciMemkBp0CovCxLfsbMmkXAW2RONpkm+sdO3CXFAgMBAAGjUzBRMB0GA1Ud +DgQWBBQvSHuosL/SDn/8sKl0dpyPeFvOfjAfBgNVHSMEGDAWgBQvSHuosL/SDn/8 +sKl0dpyPeFvOfjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBR +sGYEuRwIU/tmAmTbniptItN9VE0NNj9QeKh+hKQ9cHvhxmlBlf5b7Vb2JaRZdy88 +kRIFKiNkyjgQVg+5KuEIcg17mHSal7zG+jIZ3c1bIpVCM4AjUe7EXl8LM4+dJ5sX +Bwpd34tUk2edOiT8R/dU7uesxCdeIQ2FfvKyrXca73nj+UTvFGXUk/9mWY8KAaYc +F/PWBhiZhJD4/dkUHJnrVtjpcqW2Io8bFmrMq2vfqQv+W2FZGCsHgXkAZO2E0jyQ +5eOrwzgWRtMc5PvoGvqQfefseaLs0fvSQdcPqfv88Eqk5NGTOCIW8/KEsBwFJuwa +EpA5DBBklj8UE2CdONvN +-----END CERTIFICATE----- + + + + + + + + Hello + + +

Hello Genode!

+ I am bold ;-) + + +
+
+ +
+ +
+ + + + + + + + + + + +
+ +
+} + +install_config $config + +append targets { + core init timer server/nic_router app/wireguard server/report_rom app/ping + app/fetchurl server/dynamic_rom } + +append boot_modules { + core init timer nic_router wireguard fetchurl ping report_rom curl.lib.so + ld.lib.so dynamic_rom } + +build $targets + +build_boot_image $boot_modules + +append qemu_args "-nographic " + +append output_pattern "peer1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*peer1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*child \"peer3_fetchurl\" exited with exit value 0.*\n" +append output_pattern ".*peer1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*peer1_ping. 64 bytes from 10.0.9.2.*\n" + +run_genode_until $output_pattern 30 + diff --git a/repos/dde_linux/src/app/wireguard/config_model.cc b/repos/dde_linux/src/app/wireguard/config_model.cc index 9a1a42f74f..da4251d673 100644 --- a/repos/dde_linux/src/app/wireguard/config_model.cc +++ b/repos/dde_linux/src/app/wireguard/config_model.cc @@ -89,8 +89,11 @@ Peer_update_policy::Peer_update_policy(Allocator &alloc, void Config_model::Peer_update_policy::destroy_element(Element &peer) { - _callbacks.remove_peer( - _listen_port, peer._endpoint_ip.addr, peer._endpoint_port); + uint8_t public_key[WG_KEY_LEN]; + if (!key_from_base64(public_key, peer._public_key_b64.string())) { + error("Invalid public key!"); + } + _callbacks.remove_peer(public_key); destroy(_alloc, &peer); } diff --git a/repos/dde_linux/src/app/wireguard/dummies.c b/repos/dde_linux/src/app/wireguard/dummies.c index 00c74a70d4..102df15306 100644 --- a/repos/dde_linux/src/app/wireguard/dummies.c +++ b/repos/dde_linux/src/app/wireguard/dummies.c @@ -241,6 +241,22 @@ void napi_enable(struct napi_struct * n) } +#include + +void napi_disable(struct napi_struct * n) +{ + lx_emul_trace(__func__); +} + + +#include + +void __netif_napi_del(struct napi_struct * napi) +{ + lx_emul_trace(__func__); +} + + #include struct mem_section ** mem_section = NULL; diff --git a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c index ae32e94eba..80647fb428 100644 --- a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c +++ b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c @@ -347,11 +347,46 @@ _genode_wg_config_add_peer(genode_wg_u16_t listen_port, static void -_genode_wg_config_rm_peer(genode_wg_u16_t listen_port, - genode_wg_u8_t const endpoint_ip[4], - genode_wg_u16_t endpoint_port) +_genode_wg_config_rm_peer(genode_wg_u8_t const *const pub_key) { - printk("%s not yet implemented\n", __func__); + + struct genode_wg_nlattr_ifname ifname; + struct genode_wg_nlattr_peers peers; + struct nlattr *attrs[__WGDEVICE_A_LAST]; + struct genl_info info; + struct genode_wg_nlattr_peer *peer = &peers.peer_0; + + ifname.data[0] = '\0'; + ifname.header.nla_len = sizeof(ifname); + + memset(&peers, 0, sizeof(peers)); + + peers.header.nla_type = WGDEVICE_A_PEERS | NLA_F_NESTED; + peers.header.nla_len = sizeof(peers); + + peer->header.nla_len = sizeof(*peer); + peer->header.nla_type |= NLA_F_NESTED; + + peer->public_key.header.nla_type = WGPEER_A_PUBLIC_KEY; + peer->public_key.header.nla_len = sizeof(peer->public_key); + memcpy(peer->public_key.data, pub_key, sizeof(peer->public_key.data)); + + peer->endpoint.header.nla_type = WGPEER_A_ENDPOINT; + peer->endpoint.header.nla_len = sizeof(peer->endpoint); + + peer->flags.header.nla_type = WGPEER_A_FLAGS; + peer->flags.header.nla_len = sizeof(peer->flags); + peer->flags.data = WGPEER_F_REMOVE_ME; + + peer->allowedips.header.nla_len = sizeof(peer->allowedips); + peer->allowedips.header.nla_type = WGPEER_A_ALLOWEDIPS | NLA_F_NESTED; + + memset(attrs, 0, sizeof(attrs)); + attrs[WGDEVICE_A_IFNAME] = &ifname.header; + attrs[WGDEVICE_A_PEERS] = &peers.header; + + info.attrs = attrs; + _genode_wg_set_device(&info); } diff --git a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.h b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.h index e24225af57..c7785010cd 100644 --- a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.h +++ b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.h @@ -39,9 +39,9 @@ typedef void (*genode_wg_config_add_peer_t) ( genode_wg_u8_t const allowed_ip_prefix ); -typedef void (*genode_wg_config_rm_peer_t) - (genode_wg_u16_t listen_port, genode_wg_u8_t const endpoint_ip[4], - genode_wg_u16_t endpoint_port); +typedef void (*genode_wg_config_rm_peer_t) ( + genode_wg_u8_t const *const pub_key +); struct genode_wg_config_callbacks diff --git a/repos/dde_linux/src/app/wireguard/lx_emul.c b/repos/dde_linux/src/app/wireguard/lx_emul.c index bed8660613..f365fe9c17 100644 --- a/repos/dde_linux/src/app/wireguard/lx_emul.c +++ b/repos/dde_linux/src/app/wireguard/lx_emul.c @@ -14,7 +14,19 @@ /* app/wireguard includes */ #include +/* dde_linux/src/include/lx_emul */ #include + + +#include + +void __icmp_send(struct sk_buff * skb_in,int type,int code,__be32 info,const struct ip_options * opt) +{ + printk("Warning: sending ICMP not supported\n"); + kfree_skb(skb_in); +} + + #include void get_random_bytes(void * buf,int nbytes) diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c b/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c index 56074c7607..14a7b6862b 100644 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c +++ b/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c @@ -39,14 +39,6 @@ unsigned long __get_free_pages(gfp_t gfp_mask,unsigned int order) } -#include - -void __icmp_send(struct sk_buff * skb_in,int type,int code,__be32 info,const struct ip_options * opt) -{ - lx_emul_trace_and_stop(__func__); -} - - #include int __ipv6_addr_type(const struct in6_addr * addr) @@ -71,14 +63,6 @@ struct irq_desc * __irq_resolve_mapping(struct irq_domain * domain,irq_hw_number } -#include - -void __netif_napi_del(struct napi_struct * napi) -{ - lx_emul_trace_and_stop(__func__); -} - - #include unsigned long __per_cpu_offset[NR_CPUS] = {}; @@ -437,14 +421,6 @@ void migrate_enable(void) } -#include - -void napi_disable(struct napi_struct * n) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void netif_carrier_off(struct net_device * dev) diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c b/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c index 66bdcc1066..4b3ad3dc9a 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c +++ b/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c @@ -31,14 +31,6 @@ const char * __clk_get_name(const struct clk * clk) } -#include - -void __icmp_send(struct sk_buff * skb_in,int type,int code,__be32 info,const struct ip_options * opt) -{ - lx_emul_trace_and_stop(__func__); -} - - #include int __ipv6_addr_type(const struct in6_addr * addr) @@ -63,14 +55,6 @@ struct irq_desc * __irq_resolve_mapping(struct irq_domain * domain,irq_hw_number } -#include - -void __netif_napi_del(struct napi_struct * napi) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void __put_page(struct page * page) @@ -410,14 +394,6 @@ void kvfree(const void * addr) unsigned long lpj_fine; -#include - -void napi_disable(struct napi_struct * n) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void netif_carrier_off(struct net_device * dev) From 36d2374ff9289416d2777b0895521b2662291d59 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 27 May 2022 10:50:30 +0200 Subject: [PATCH 006/354] wireguard: exit on invalid configurations With this commit, the WireGuard component exits with a descriptive uncaught exception on invalid configurations or when the user attempts to re-configure attributes that are not re-configurable (private_key, listen_port, interface). This is particularly important when it comes to the not re-configurable private key. If the component would just ignore the attempt to override the private key, the user may come to believe that his old (potentially compromised) private key is not in use anymore. The fact that the component now exits instead shouldn't be a problem, as the user would have to restart the component anyway in order to apply the new attribute values. The commit also extends the wg_reconfig run script to test that WireGuard exits on the attempt to re-configure the private key. Ref #4520 --- repos/dde_linux/run/wg_reconfig.run | 157 ++++++++++-------- .../src/app/wireguard/config_model.cc | 43 +++-- 2 files changed, 121 insertions(+), 79 deletions(-) diff --git a/repos/dde_linux/run/wg_reconfig.run b/repos/dde_linux/run/wg_reconfig.run index 9c3dcd306f..ee85ec4263 100644 --- a/repos/dde_linux/run/wg_reconfig.run +++ b/repos/dde_linux/run/wg_reconfig.run @@ -4,9 +4,10 @@ # WireGuard changes. Each peer has its own WireGuard instance and talks # to the other peers only through WireGuard. The server WireGuard (peer 2) # initially accepts only peer 1. After some time it gets re-configured to -# accept only peer 3. At the end, it gets re-configured to accept only peer 1 -# again. Note that the peer 1 WireGuard has to be reconfigured as well, in -# order to be forced to redo the initiation handshake for the last +# accept only peer 3. Then, it gets re-configured to accept only peer 1 again +# and, in the end, an attempt is made to re-configure the private key, which +# should fail. Note that the peer 1 WireGuard has to be reconfigured as well, +# in order to be forced to redo the initiation handshake for the third # configuration phase of the server WireGuard. # @@ -26,13 +27,13 @@ import_from_depot [depot_user]/src/libc \ [depot_user]/src/vfs_lwip \ [depot_user]/src/zlib -proc peer1_wg_config {variant} { +proc peer_1_wg_config {peers} { append result { } - if {$variant == "with_peer3"} { + if {$peers == "peer_3"} { append result { - } - if {$variant == "with_peer1"} { - append result { - + switch $private_key { + private_key_1 { + append result { + + append result { + listen_port="49002"> + } + switch $peers { + peer_1 { + append result { + + } + } + peer_3 { + append result { + + } } } append result { @@ -100,38 +114,44 @@ append config { - + - - } [peer2_wg_config with_peer1] { + + } [peer_2_wg_config peer_1 private_key_1] { - - } [peer2_wg_config with_peer3] { + + } [peer_2_wg_config peer_3 private_key_1] { - - } [peer2_wg_config with_peer1] { + + } [peer_2_wg_config peer_1 private_key_1] { + + + + + + } [peer_2_wg_config peer_1 private_key_2] { - + - } [peer1_wg_config with_peer3] { + } [peer_1_wg_config peer_3] { - } [peer1_wg_config without_peer] { + } [peer_1_wg_config no_peer] { - } [peer1_wg_config with_peer3] { + } [peer_1_wg_config peer_3] { @@ -158,7 +178,7 @@ append config {
- + @@ -172,7 +192,7 @@ append config { - + @@ -205,12 +225,12 @@ append config { - + - + @@ -223,12 +243,12 @@ append config { - + - + @@ -241,7 +261,7 @@ append config { - + - - - + + + - + - + - - + + - + - + - - - + + + - + - - + + - + - - - + + + - + - + - - + + - + - + @@ -346,7 +366,7 @@ append config { - + @@ -486,11 +506,12 @@ build_boot_image $boot_modules append qemu_args "-nographic " -append output_pattern "peer1_ping. 64 bytes from 10.0.9.2.*\n" -append output_pattern ".*peer1_ping. 64 bytes from 10.0.9.2.*\n" -append output_pattern ".*child \"peer3_fetchurl\" exited with exit value 0.*\n" -append output_pattern ".*peer1_ping. 64 bytes from 10.0.9.2.*\n" -append output_pattern ".*peer1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern "peer_1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*peer_1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*child \"peer_3_fetchurl\" exited with exit value 0.*\n" +append output_pattern ".*peer_1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*peer_1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*peer_2_wg. .*Error: Uncaught exception of type .*Invalid_reconfiguration_attempt.*\n" -run_genode_until $output_pattern 30 +run_genode_until $output_pattern 45 diff --git a/repos/dde_linux/src/app/wireguard/config_model.cc b/repos/dde_linux/src/app/wireguard/config_model.cc index da4251d673..c658096bb0 100644 --- a/repos/dde_linux/src/app/wireguard/config_model.cc +++ b/repos/dde_linux/src/app/wireguard/config_model.cc @@ -33,19 +33,35 @@ Config_model::Config_model(Genode::Allocator &alloc) void Config_model::update(genode_wg_config_callbacks &callbacks, Xml_node node) { - if (!_config.constructed()) { + Key_base64 const private_key_b64 { + node.attribute_value("private_key", Key_base64 { }) }; - _config.construct( - node.attribute_value("private_key", Key_base64 { }), - node.attribute_value("listen_port", (uint16_t)0U), - node.attribute_value("interface", Ipv4_address_prefix { })); + uint16_t const listen_port { + node.attribute_value("listen_port", (uint16_t)0U) }; + + Ipv4_address_prefix const interface { + node.attribute_value("interface", Ipv4_address_prefix { }) }; + + if (_config.constructed()) { + + if (_config->private_key_b64() != private_key_b64 || + _config->listen_port() != listen_port || + _config->interface() != interface) + { + class Invalid_reconfiguration_attempt { }; + throw Invalid_reconfiguration_attempt { }; + } + + } else { uint8_t private_key[WG_KEY_LEN]; - if (!_config->private_key_b64().valid() || - !key_from_base64(private_key, _config->private_key_b64().string())) { + if (!private_key_b64.valid() || + !key_from_base64(private_key, private_key_b64.string())) { - error("Invalid private key!"); + class Invalid_private_key { }; + throw Invalid_private_key { }; } + _config.construct(private_key_b64, listen_port, interface); callbacks.add_device(_config->listen_port(), private_key); } Peer_update_policy policy { _alloc, callbacks, _config->listen_port() }; @@ -91,7 +107,9 @@ void Config_model::Peer_update_policy::destroy_element(Element &peer) { uint8_t public_key[WG_KEY_LEN]; if (!key_from_base64(public_key, peer._public_key_b64.string())) { - error("Invalid public key!"); + + class Invalid_public_key { }; + throw Invalid_public_key { }; } _callbacks.remove_peer(public_key); @@ -111,10 +129,13 @@ Config_model::Peer_update_policy::create_element(Xml_node node) if (!public_key_b64.valid() || !key_from_base64(public_key, public_key_b64.string())) { - error("Invalid public key!"); + class Invalid_public_key { }; + throw Invalid_public_key { }; } if (!allowed_ip.valid()) { - error("Invalid allowed ip!"); + + class Invalid_allowed_ip { }; + throw Invalid_allowed_ip { }; } _callbacks.add_peer( _listen_port, endpoint_ip.addr, endpoint_port, public_key, From 6f777f90a8ca72bbaf1b5115a972e6073e300479 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 27 May 2022 13:35:45 +0200 Subject: [PATCH 007/354] wireguard: test multiple peers at a time Extends the wg_reconfig run script to test that the WireGuard component is able to handle multiple peers at the same time if configured. Ref #4520 --- repos/dde_linux/run/wg_reconfig.run | 127 +++++++++++++++++++++------- 1 file changed, 96 insertions(+), 31 deletions(-) diff --git a/repos/dde_linux/run/wg_reconfig.run b/repos/dde_linux/run/wg_reconfig.run index ee85ec4263..8c3b41a493 100644 --- a/repos/dde_linux/run/wg_reconfig.run +++ b/repos/dde_linux/run/wg_reconfig.run @@ -1,14 +1,17 @@ # -# A ping (peer 1) and a fetchurl (peer 3) both try to reach a server at peer 2 -# through a WireGuard VNP (10.0.9.0/24) while the configuration of the server -# WireGuard changes. Each peer has its own WireGuard instance and talks -# to the other peers only through WireGuard. The server WireGuard (peer 2) -# initially accepts only peer 1. After some time it gets re-configured to -# accept only peer 3. Then, it gets re-configured to accept only peer 1 again -# and, in the end, an attempt is made to re-configure the private key, which -# should fail. Note that the peer 1 WireGuard has to be reconfigured as well, -# in order to be forced to redo the initiation handshake for the third -# configuration phase of the server WireGuard. +# Two pings (peer 1 and peer 4) and a fetchurl (peer 3) try to reach a server +# (peer 2) through a WireGuard VNP (10.0.9.0/24) while the configuration of +# the server WireGuard changes. Each peer has its own WireGuard instance and +# talks to the other peers only through WireGuard. +# +# In configuration step 1, the server WireGuard accepts only peer 1. In step 2 +# it gets re-configured to accept only peer 3. Then, in step 3, it gets +# re-configured to accept both peer 1 and peer 4 and, in the final step 4, an +# attempt is made to re-configure the private key, which should fail. +# +# Note that the peer 1 WireGuard has to be reconfigured as well, in order to +# be forced to redo the initiation handshake for configuration step 3 of the +# server WireGuard. # if {[expr ![have_spec arm_v8a] && ![have_spec x86_64]]} { @@ -33,7 +36,7 @@ proc peer_1_wg_config {peers} { } - if {$peers == "peer_3"} { + if {[lsearch $peers peer_3] != -1} { append result { } - switch $peers { - peer_1 { - append result { - - } + if {[lsearch $peers peer_1] != -1} { + append result { + } - peer_3 { - append result { - - } + } + if {[lsearch $peers peer_3] != -1} { + append result { + + } + } + if {[lsearch $peers peer_4] != -1} { + append result { + } } append result { @@ -116,26 +123,26 @@ append config { - + } [peer_2_wg_config peer_1 private_key_1] { - + } [peer_2_wg_config peer_3 private_key_1] { - - } [peer_2_wg_config peer_1 private_key_1] { + + } [peer_2_wg_config {peer_1 peer_4} private_key_1] { - + - - } [peer_2_wg_config peer_1 private_key_2] { + + } [peer_2_wg_config {peer_1 peer_4} private_key_2] { @@ -147,7 +154,7 @@ append config { - } [peer_1_wg_config no_peer] { + } [peer_1_wg_config { }] { @@ -192,6 +199,20 @@ append config { + + + + + + + + + + + + + + @@ -284,6 +305,29 @@ append config { + + + + + + + + + + + + + + + + + + + @@ -356,6 +400,27 @@ append config { + + + + + + + + + + + + + + + + + + + + + @@ -510,7 +575,7 @@ append output_pattern "peer_1_ping. 64 bytes from 10.0.9.2.*\n" append output_pattern ".*peer_1_ping. 64 bytes from 10.0.9.2.*\n" append output_pattern ".*child \"peer_3_fetchurl\" exited with exit value 0.*\n" append output_pattern ".*peer_1_ping. 64 bytes from 10.0.9.2.*\n" -append output_pattern ".*peer_1_ping. 64 bytes from 10.0.9.2.*\n" +append output_pattern ".*peer_4_ping. 64 bytes from 10.0.9.2.*\n" append output_pattern ".*peer_2_wg. .*Error: Uncaught exception of type .*Invalid_reconfiguration_attempt.*\n" run_genode_until $output_pattern 45 From b1c77dc42b0dba7bf0c618a3fc1179a851d57c84 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Sun, 29 May 2022 22:02:20 +0200 Subject: [PATCH 008/354] wireguard: enable WARN_STRICT_CONVERSION in lib The strict conversion warnings were disabled during development when the contrib code was still compiled with the wireguard lib. Now this isn't necessary anymore as the contrib code is in the wireguard_lx_inc_dirs lib. Ref #4520 --- repos/dde_linux/lib/mk/wireguard.inc | 2 -- 1 file changed, 2 deletions(-) diff --git a/repos/dde_linux/lib/mk/wireguard.inc b/repos/dde_linux/lib/mk/wireguard.inc index 179d45759c..38f88d6f33 100644 --- a/repos/dde_linux/lib/mk/wireguard.inc +++ b/repos/dde_linux/lib/mk/wireguard.inc @@ -18,5 +18,3 @@ SRC_CC += uplink_connection.cc vpath %.cc $(REP_DIR)/src/app/wireguard vpath %.cc $(REP_DIR)/src/lib - -CC_CXX_WARN_STRICT_CONVERSION = From 48e396913c177d5f5e4f37b8718c4562f2b1fd5d Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 30 May 2022 11:28:02 +0200 Subject: [PATCH 009/354] wireguard: don't always rebuild device.c/netlink.c We have to correct the CC_OPT_* variable for these files and used to do so via phony pre-requisite for the corresponding object files because the correction had to take place after the variable initialization in import-lx_emul_common.inc and before the creation of the object files. However, this caused the objects to always rebuild. This commit fixes this issue by using Make's feature of target-specific variables instead. The drawback of this solution is that we can no longer override CC_OPT_* with a modification of its original value but instead have to override with a completely new value. This is because otherwise, Make would either complain about recursive assignment or produce an empty value. Ref #4519 --- .../lib/mk/wireguard_lx_inc_dirs.inc | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc index 38944ef7fa..c881e4d1ab 100644 --- a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc +++ b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc @@ -38,37 +38,32 @@ vpath lx_kit/memory.cc $(GEN_PRG_DIR) # # Some local files include linux headers that expect the KBUILD_* symbols to # be defined. However, the lx_emul mechanism for adding the definitions doesn't -# apply to these local files, which is why we have to add them manually. +# apply to these files, which is why we have to do it manually. # -CC_OPT_wireguard += -DKBUILD_MODFILE='"wireguard"' \ - -DKBUILD_BASENAME='"wireguard"' \ - -DKBUILD_MODNAME='"wireguard"' +WG_KBUILD_DEFS := -DKBUILD_MODFILE='"wireguard"' \ + -DKBUILD_BASENAME='"wireguard"' \ + -DKBUILD_MODNAME='"wireguard"' -CC_OPT_lx_emul += -DKBUILD_MODFILE='"lx_emul"' \ - -DKBUILD_BASENAME='"lx_emul"' \ - -DKBUILD_MODNAME='"lx_emul"' +CC_OPT_wireguard += $(WG_KBUILD_DEFS) +CC_OPT_lx_emul += $(WG_KBUILD_DEFS) # # The lx_emul Makefiles have a generic mechanism for defining the -# KBUILD_MODNAME for each Linux unit to be the filename of that unit -# (without suffix). However, some WireGuard units expect -# KBUILD_MODNAME to be the same for all WireGuard units. -# Therefore, we do a pattern substition on the CC_OPT_* variables of -# those units, changing their KBUILD_MODNAME def to "wireguard". +# KBUILD_MODFILE, KBUILD_BASENAME, and KBUILD_MODNAME for each Linux +# compilation unit to be unique. However, some WireGuard units expect +# KBUILD_MODNAME to be the same for all WireGuard units. Therefore, we +# let a target-specific variable override the CC_OPT_* variable for those +# units. # -OBJECTS_TO_FIX_MODNAME_DEFS_FOR := \ +OBJECTS_TO_FIX_CC_OPT_FOR := \ drivers/net/wireguard/device.o \ drivers/net/wireguard/netlink.o -define FIX_MODNAME_DEF = -CC_OPT_$(1) = $(patsubst -DKBUILD_MODNAME='"%"',-DKBUILD_MODNAME='"wireguard"',$(CC_OPT_$(1))) +define FIX_OBJECT_CC_OPT = +$(1): override CC_OPT_$(1:%.o=%) = $(WG_KBUILD_DEFS) endef -.PHONY: fix_modname_defs -fix_modname_defs: - $(foreach file,$(OBJECTS_TO_FIX_MODNAME_DEFS_FOR), \ - $(eval $(call FIX_MODNAME_DEF,$(file:%.o=%)))) - -$(OBJECTS_TO_FIX_MODNAME_DEFS_FOR): fix_modname_defs +$(foreach OBJECT,$(OBJECTS_TO_FIX_CC_OPT_FOR), \ + $(eval $(call FIX_OBJECT_CC_OPT,$(OBJECT)))) From 9375e8d0101e0925c76a152e7f398edfbe47cc09 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 30 May 2022 12:46:46 +0200 Subject: [PATCH 010/354] wireguard: no warning about possible alignm. issue We locally disable 'address-of-packed-member' warnings because GCC complained about possible alignment issues when returning a reference to a packed member as naturally aligned pointer (for some reason only on arm_v8a). We know that the member is aligned to NETDEV_ALIGN via __attribute__ and that the warning is therefor unnecessary. Ref #4519 --- .../app/wireguard/genode_c_api/wireguard.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c index 80647fb428..8dab6c1514 100644 --- a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c +++ b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c @@ -175,7 +175,17 @@ void genode_wg_genl_family(struct genl_family * family) struct net_device * genode_wg_net_device(void) { + /* + * We disable this warning because GCC complained about possible alignment + * issues when returning a reference to the packed member as naturally + * aligned pointer (for some reason only on arm_v8a). However, we know + * that the member is aligned to NETDEV_ALIGN and that the warning is + * therefor unnecessary. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Waddress-of-packed-member" return &_genode_wg_net_dev.public_data; +#pragma GCC diagnostic pop } void genode_wg_udp_tunnel_sock_cfg(struct udp_tunnel_sock_cfg * cfg) @@ -229,7 +239,8 @@ _genode_wg_config_add_dev(genode_wg_u16_t listen_port, _genode_wg_net_dev.public_data.rtnl_link_ops = _genode_wg_rtnl_link_ops; _genode_wg_net_dev.pcpu_refcnt = 0; genode_wg_arch_net_dev_init( - &_genode_wg_net_dev.public_data, &_genode_wg_net_dev.pcpu_refcnt); + genode_wg_net_device(), &_genode_wg_net_dev.pcpu_refcnt); + _genode_wg_sk_buff.sk = &_genode_wg_sock; _genode_wg_sock.sk_user_data = &_genode_wg_net_dev.private_data; @@ -265,7 +276,7 @@ _genode_wg_config_add_dev(genode_wg_u16_t listen_port, /* trigger execution of 'wg_open' */ _genode_wg_net_dev.public_data.netdev_ops->ndo_open( - &_genode_wg_net_dev.public_data); + genode_wg_net_device()); } @@ -487,12 +498,12 @@ void lx_user_init(void) skb_init(); /* trigger execution of 'wg_setup' */ - _genode_wg_rtnl_link_ops->setup(&_genode_wg_net_dev.public_data); + _genode_wg_rtnl_link_ops->setup(genode_wg_net_device()); /* trigger execution of 'wg_newlink' */ _genode_wg_rtnl_link_ops->newlink( &_genode_wg_src_net, - &_genode_wg_net_dev.public_data, + genode_wg_net_device(), _genode_wg_tb, _genode_wg_data, &_genode_wg_extack); From 9d383037e487b658cc0fcefb764603316d165c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 2 Jun 2022 14:07:11 +0200 Subject: [PATCH 011/354] lx_emul: set task 'stack' member Instead of allocating the stack via 'kmalloc' point it to the actual stack used by the task. This addresses issues with the USB host-controller driver where sometimes hub port enumeration is not working. Fixes #4522. --- repos/dde_linux/src/include/lx_emul/task.h | 2 ++ repos/dde_linux/src/include/lx_kit/task.h | 1 + .../dde_linux/src/lib/lx_emul/shadow/kernel/fork.c | 9 +++++++++ repos/dde_linux/src/lib/lx_emul/task.cc | 13 +++++++++++++ repos/dde_linux/src/lib/lx_kit/task.cc | 3 +++ 5 files changed, 28 insertions(+) diff --git a/repos/dde_linux/src/include/lx_emul/task.h b/repos/dde_linux/src/include/lx_emul/task.h index 8aec4517c8..6cc629e857 100644 --- a/repos/dde_linux/src/include/lx_emul/task.h +++ b/repos/dde_linux/src/include/lx_emul/task.h @@ -42,6 +42,8 @@ void lx_emul_task_schedule(int block); void lx_emul_task_name(struct task_struct * task, const char * name); +void *lx_emul_task_stack(struct task_struct const * task); + #ifdef __cplusplus } #endif diff --git a/repos/dde_linux/src/include/lx_kit/task.h b/repos/dde_linux/src/include/lx_kit/task.h index 263dac2993..c75a0eb506 100644 --- a/repos/dde_linux/src/include/lx_kit/task.h +++ b/repos/dde_linux/src/include/lx_kit/task.h @@ -73,6 +73,7 @@ class Lx_kit::Task : public Genode::List::Element Name name() const; void * lx_task() const; int pid() const; + void * stack() const; void block(); void unblock(); diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/fork.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/fork.c index 485260dd77..61f5d3a09d 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/fork.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/fork.c @@ -77,13 +77,22 @@ pid_t kernel_thread(int (* fn)(void *),void * arg,unsigned long flags) .signal = signal, }; +#ifndef CONFIG_THREAD_INFO_IN_TASK + /* On arm, the 'thread_info' is hidden behind 'task->stack', we must + * therefore initialise the member before calling 'task_thread_info()'. */ task->stack = kmalloc(sizeof(struct thread_info), THREADINFO_GFP); +#endif #ifndef CONFIG_X86 task_thread_info(task)->preempt_count = 0; #endif lx_emul_task_create(task, "kthread", task->pid, fn, arg); + +#ifdef CONFIG_THREAD_INFO_IN_TASK + task->stack = lx_emul_task_stack(task); +#endif + return task->pid; err_task: diff --git a/repos/dde_linux/src/lib/lx_emul/task.cc b/repos/dde_linux/src/lib/lx_emul/task.cc index 800f3ae54d..350d121a27 100644 --- a/repos/dde_linux/src/lib/lx_emul/task.cc +++ b/repos/dde_linux/src/lib/lx_emul/task.cc @@ -87,3 +87,16 @@ extern "C" void lx_emul_task_name(struct task_struct * t, const char * name) { Lx_kit::env().scheduler.task((void*)t).name(name); } + + +extern "C" void * lx_emul_task_stack(struct task_struct const * t) +{ + void * ret = nullptr; + + Lx_kit::env().scheduler.for_each_task([&] (Lx_kit::Task const & task) { + if (t == task.lx_task()) + ret = task.stack(); + }); + + return ret; +} diff --git a/repos/dde_linux/src/lib/lx_kit/task.cc b/repos/dde_linux/src/lib/lx_kit/task.cc index 727cb8ac0b..1cf1102aa7 100644 --- a/repos/dde_linux/src/lib/lx_kit/task.cc +++ b/repos/dde_linux/src/lib/lx_kit/task.cc @@ -50,6 +50,9 @@ Task::Type Task::type() const { return _type; } void * Task::lx_task() const { return _lx_task; } +void * Task::stack() const { return _stack; } + + int Task::pid() const { return _pid; } From d3e53b3ccabe8f036b23ad09e34938b4d8b2c33b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Fri, 3 Jun 2022 16:15:44 +0200 Subject: [PATCH 012/354] pc_wifi_drv: unblock pthread via signal Since unblocking the pthread directly may lead to corruption we need to post-pone it. So we send a signal that should be handled by the EP after the EP has finished its current line of work. Fixes #4523. --- repos/pc/src/lib/wifi/socket_call.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/repos/pc/src/lib/wifi/socket_call.cc b/repos/pc/src/lib/wifi/socket_call.cc index 63eb435763..ae7023af59 100644 --- a/repos/pc/src/lib/wifi/socket_call.cc +++ b/repos/pc/src/lib/wifi/socket_call.cc @@ -237,6 +237,8 @@ class Lx::Socket Genode::Signal_transmitter _sender { }; Genode::Signal_handler _dispatcher; + Genode::Signal_handler _dispatcher_blockade; + struct socket *_sock_poll_table[Wifi::MAX_POLL_SOCKETS] { }; struct socket *_call_socket() @@ -411,11 +413,17 @@ class Lx::Socket Lx_kit::env().scheduler.schedule(); } + void _handle_blockade() + { + _block.up(); + } + public: Socket(Genode::Entrypoint &ep) : - _dispatcher(ep, *this, &Lx::Socket::_handle) + _dispatcher(ep, *this, &Lx::Socket::_handle), + _dispatcher_blockade(ep, *this, &Lx::Socket::_handle_blockade) { _sender.context(_dispatcher); } @@ -448,7 +456,7 @@ class Lx::Socket _call.opcode = Call::NONE; - if (old != Call::NONE) { _block.up(); } + if (old != Call::NONE) { _dispatcher_blockade.local_submit(); } } void submit_and_block() From 0ffc55a20abd782a361ce9e4a49c7c22d0ad92d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Tue, 31 May 2022 13:53:03 +0200 Subject: [PATCH 013/354] Remove unneeded session_size check As accommodating the session component object is already taken care of be the root component implementation, remove the remaining redundant checks. Fixes #4521. --- repos/dde_bsd/src/drivers/audio/main.cc | 15 +++++---------- repos/dde_linux/src/drivers/usb_host/raw.cc | 9 ++------- repos/os/include/block/component.h | 11 ++--------- repos/os/include/report_rom/report_service.h | 5 +---- repos/os/src/drivers/audio/spec/linux/main.cc | 7 ++----- repos/os/src/lib/genode_c_api/usb.cc | 9 ++------- repos/os/src/server/black_hole/audio_in.h | 7 ++----- repos/os/src/server/black_hole/audio_out.h | 7 ++----- repos/os/src/server/black_hole/capture.h | 12 ------------ repos/os/src/server/black_hole/nic.h | 9 ++------- repos/os/src/server/black_hole/uplink.h | 9 ++------- repos/os/src/server/black_hole/usb.h | 5 +---- repos/os/src/server/fs_report/main.cc | 8 ++------ repos/os/src/server/lx_fs/main.cc | 8 +++----- repos/os/src/server/mixer/mixer.cc | 7 ++----- repos/os/src/server/nic_dump/component.cc | 14 ++++---------- repos/os/src/server/nic_loopback/main.cc | 9 ++------- repos/os/src/server/part_block/main.cc | 10 ++-------- repos/os/src/server/vfs/main.cc | 8 ++------ 19 files changed, 40 insertions(+), 129 deletions(-) diff --git a/repos/dde_bsd/src/drivers/audio/main.cc b/repos/dde_bsd/src/drivers/audio/main.cc index 48f5471748..14be6f1667 100644 --- a/repos/dde_bsd/src/drivers/audio/main.cc +++ b/repos/dde_bsd/src/drivers/audio/main.cc @@ -221,13 +221,10 @@ struct Audio_out::Root_policy { size_t ram_quota = Arg_string::find_arg(args, "ram_quota" ).ulong_value(0); - size_t session_size = - align_addr(sizeof(Audio_out::Session_component), 12); - if ((ram_quota < session_size) || - (sizeof(Stream) > ram_quota - session_size)) { + if (sizeof(Stream) > ram_quota) { Genode::error("insufficient 'ram_quota', got ", ram_quota, - " need ", sizeof(Stream) + session_size); + " need ", sizeof(Stream)); throw Genode::Insufficient_ram_quota(); } @@ -412,13 +409,11 @@ struct Audio_in::Root_policy void aquire(char const *args) { size_t ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0); - size_t session_size = align_addr(sizeof(Audio_in::Session_component), 12); - if ((ram_quota < session_size) || - (sizeof(Stream) > (ram_quota - session_size))) { + if (sizeof(Stream) > ram_quota) { Genode::error("insufficient 'ram_quota', got ", ram_quota, - " need ", sizeof(Stream) + session_size, - ", denying '",Genode::label_from_args(args),"'"); + " need ", sizeof(Stream), + ", denying '", Genode::label_from_args(args),"'"); throw Genode::Insufficient_ram_quota(); } diff --git a/repos/dde_linux/src/drivers/usb_host/raw.cc b/repos/dde_linux/src/drivers/usb_host/raw.cc index 43e71cb112..dfc27c6ee3 100644 --- a/repos/dde_linux/src/drivers/usb_host/raw.cc +++ b/repos/dde_linux/src/drivers/usb_host/raw.cc @@ -1240,14 +1240,9 @@ class Usb::Root : public Genode::Root_component unsigned long dev = policy.attribute_value("dev", 0); unsigned long class_ = policy.attribute_value("class", 0); - /* check session quota */ - size_t session_size = max(4096, sizeof(Session_component)); - if (ram_quota < session_size) - throw Insufficient_ram_quota(); - - if (tx_buf_size > ram_quota - session_size) { + if (tx_buf_size > ram_quota) { warning("Insufficient RAM quota, got ", ram_quota, " need ", - tx_buf_size + session_size); + tx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/include/block/component.h b/repos/os/include/block/component.h index 0ec6df8ca3..b9b899b30d 100644 --- a/repos/os/include/block/component.h +++ b/repos/os/include/block/component.h @@ -292,21 +292,14 @@ class Block::Root : public Genode::Root_component ram_quota - session_size) { + if (tx_buf_size > ram_quota) { error("insufficient 'ram_quota', got ", ram_quota, ", need ", - tx_buf_size + session_size); + tx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/include/report_rom/report_service.h b/repos/os/include/report_rom/report_service.h index a66b50cf60..2474b17be9 100644 --- a/repos/os/include/report_rom/report_service.h +++ b/repos/os/include/report_rom/report_service.h @@ -121,10 +121,7 @@ struct Report::Root : Genode::Root_component size_t const buffer_size = Arg_string::find_arg(args, "buffer_size").aligned_size(); - size_t const session_size = - max(sizeof(Session_component), 4096U) + buffer_size; - - if (ram_quota < session_size) { + if (ram_quota < buffer_size) { Genode::error("insufficient ram donation from ", label.string()); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/drivers/audio/spec/linux/main.cc b/repos/os/src/drivers/audio/spec/linux/main.cc index c560230e3c..a1ebbe915f 100644 --- a/repos/os/src/drivers/audio/spec/linux/main.cc +++ b/repos/os/src/drivers/audio/spec/linux/main.cc @@ -205,13 +205,10 @@ struct Audio_out::Root_policy { size_t ram_quota = Arg_string::find_arg(args, "ram_quota" ).ulong_value(0); - size_t session_size = - align_addr(sizeof(Audio_out::Session_component), 12); - if ((ram_quota < session_size) || - (sizeof(Stream) > ram_quota - session_size)) { + if (sizeof(Stream) > ram_quota) { Genode::error("insufficient 'ram_quota', got ", ram_quota, - " need ", sizeof(Stream) + session_size); + " need ", sizeof(Stream)); throw Genode::Insufficient_ram_quota(); } diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 84138e872a..48d8b86c62 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -555,14 +555,9 @@ genode_usb_session * ::Root::_create_session(const char * args, if (!tx_buf_size) throw Service_denied(); - /* check session quota */ - size_t session_size = max(4096, sizeof(genode_usb_session)); - if (ram_quota < session_size) - throw Insufficient_ram_quota(); - - if (tx_buf_size > ram_quota - session_size) { + if (tx_buf_size > ram_quota) { warning("Insufficient RAM quota, got ", ram_quota, " need ", - tx_buf_size + session_size); + tx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/black_hole/audio_in.h b/repos/os/src/server/black_hole/audio_in.h index d9070036dd..411528dd0a 100644 --- a/repos/os/src/server/black_hole/audio_in.h +++ b/repos/os/src/server/black_hole/audio_in.h @@ -127,12 +127,9 @@ class Audio_in::Root : public Audio_in::Root_component size_t ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0); - size_t session_size = align_addr(sizeof(Session_component), 12); - - if ((ram_quota < session_size) || - (sizeof(Stream) > ram_quota - session_size)) { + if (sizeof(Stream) > ram_quota) { Genode::error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", sizeof(Stream) + session_size); + "need ", sizeof(Stream)); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/black_hole/audio_out.h b/repos/os/src/server/black_hole/audio_out.h index 0c105987cd..3ccf19fe92 100644 --- a/repos/os/src/server/black_hole/audio_out.h +++ b/repos/os/src/server/black_hole/audio_out.h @@ -130,12 +130,9 @@ class Audio_out::Root : public Audio_out::Root_component size_t ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0); - size_t session_size = align_addr(sizeof(Session_component), 12); - - if ((ram_quota < session_size) || - (sizeof(Stream) > ram_quota - session_size)) { + if (sizeof(Stream) > ram_quota) { Genode::error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", sizeof(Stream) + session_size); + "need ", sizeof(Stream)); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/black_hole/capture.h b/repos/os/src/server/black_hole/capture.h index 598c24d467..474981a6e4 100644 --- a/repos/os/src/server/black_hole/capture.h +++ b/repos/os/src/server/black_hole/capture.h @@ -107,17 +107,6 @@ class Capture::Root : public Capture::Root_component { using namespace Genode; - size_t ram_quota = - Arg_string::find_arg(args, "ram_quota").ulong_value(0); - - size_t session_size = align_addr(sizeof(Session_component), 12); - - if ((ram_quota < session_size)) { - Genode::error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", session_size); - throw Insufficient_ram_quota(); - } - Session_component *session = new (md_alloc()) Session_component(_env, session_resources_from_args(args), @@ -125,7 +114,6 @@ class Capture::Root : public Capture::Root_component session_diag_from_args(args)); return session; - } void _upgrade_session(Session_component *s, const char *args) override diff --git a/repos/os/src/server/black_hole/nic.h b/repos/os/src/server/black_hole/nic.h index 4b5e5b104b..5fe7dbff96 100644 --- a/repos/os/src/server/black_hole/nic.h +++ b/repos/os/src/server/black_hole/nic.h @@ -83,19 +83,14 @@ class Black_hole::Nic_root : public Root_component size_t tx_buf_size = Arg_string::find_arg(args, "tx_buf_size").ulong_value(0); size_t rx_buf_size = Arg_string::find_arg(args, "rx_buf_size").ulong_value(0); - /* deplete ram quota by the memory needed for the session structure */ - size_t session_size = max(4096UL, (size_t)sizeof(Nic_session)); - if (ram_quota < session_size) - throw Insufficient_ram_quota(); - /* * Check if donated ram quota suffices for both communication * buffers and check for overflow */ if (tx_buf_size + rx_buf_size < tx_buf_size || - tx_buf_size + rx_buf_size > ram_quota - session_size) { + tx_buf_size + rx_buf_size > ram_quota) { error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", tx_buf_size + rx_buf_size + session_size); + "need ", tx_buf_size + rx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/black_hole/uplink.h b/repos/os/src/server/black_hole/uplink.h index 6cb65d6548..390642083f 100644 --- a/repos/os/src/server/black_hole/uplink.h +++ b/repos/os/src/server/black_hole/uplink.h @@ -138,19 +138,14 @@ class Black_hole::Uplink_root : public Root_component size_t tx_buf_size = Arg_string::find_arg(args, "tx_buf_size").ulong_value(0); size_t rx_buf_size = Arg_string::find_arg(args, "rx_buf_size").ulong_value(0); - /* deplete ram quota by the memory needed for the session structure */ - size_t session_size = max(4096UL, (size_t)sizeof(Uplink_session)); - if (ram_quota < session_size) - throw Insufficient_ram_quota(); - /* * Check if donated ram quota suffices for both communication * buffers and check for overflow */ if (tx_buf_size + rx_buf_size < tx_buf_size || - tx_buf_size + rx_buf_size > ram_quota - session_size) { + tx_buf_size + rx_buf_size > ram_quota) { error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", tx_buf_size + rx_buf_size + session_size); + "need ", tx_buf_size + rx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/black_hole/usb.h b/repos/os/src/server/black_hole/usb.h index a61f688727..676e938b4f 100644 --- a/repos/os/src/server/black_hole/usb.h +++ b/repos/os/src/server/black_hole/usb.h @@ -85,10 +85,7 @@ class Black_hole::Usb_root : public Root_component size_t const tx_buf_size { Arg_string::find_arg(args, "tx_buf_size").ulong_value(0) }; - size_t const session_size { - max(4096, sizeof(Usb_session)) }; - - if (ram_quota < session_size + tx_buf_size) { + if (ram_quota < tx_buf_size) { throw Insufficient_ram_quota { }; } Ram_dataspace_capability tx_ds { _env.ram().alloc(tx_buf_size) }; diff --git a/repos/os/src/server/fs_report/main.cc b/repos/os/src/server/fs_report/main.cc index 9b13545bd0..30a588992c 100644 --- a/repos/os/src/server/fs_report/main.cc +++ b/repos/os/src/server/fs_report/main.cc @@ -230,13 +230,9 @@ class Fs_report::Root : public Genode::Root_component size_t const buffer_size = Arg_string::find_arg(args, "buffer_size").aligned_size(); - size_t session_size = - max((size_t)4096, sizeof(Session_component)) + - buffer_size; - - if (session_size > ram_quota) { + if (buffer_size > ram_quota) { error("insufficient 'ram_quota' from '", label, "' " - "got ", ram_quota, ", need ", session_size); + "got ", ram_quota, ", need ", buffer_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/lx_fs/main.cc b/repos/os/src/server/lx_fs/main.cc index b0d218a027..e93e98550e 100644 --- a/repos/os/src/server/lx_fs/main.cc +++ b/repos/os/src/server/lx_fs/main.cc @@ -618,13 +618,11 @@ class Lx_fs::Root : public Root_component } /* - * Check if donated ram quota suffices for session data, - * and communication buffer. + * Check if donated ram quota suffices for communication buffer. */ - size_t session_size = sizeof(Session_component) + tx_buf_size; - if (max((size_t)4096, session_size) > ram_quota) { + if (tx_buf_size > ram_quota) { Genode::error("insufficient 'ram_quota', " - "got ", ram_quota, ", need ", session_size); + "got ", ram_quota, ", need ", tx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/mixer/mixer.cc b/repos/os/src/server/mixer/mixer.cc index e354f76399..0cd276f2ab 100644 --- a/repos/os/src/server/mixer/mixer.cc +++ b/repos/os/src/server/mixer/mixer.cc @@ -706,12 +706,9 @@ class Audio_out::Root : public Audio_out::Root_component size_t ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0); - size_t session_size = align_addr(sizeof(Session_component), 12); - - if ((ram_quota < session_size) || - (sizeof(Stream) > ram_quota - session_size)) { + if (sizeof(Stream) > ram_quota) { Genode::error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", sizeof(Stream) + session_size); + "need ", sizeof(Stream)); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/nic_dump/component.cc b/repos/os/src/server/nic_dump/component.cc index e4de127087..ee89a805d7 100644 --- a/repos/os/src/server/nic_dump/component.cc +++ b/repos/os/src/server/nic_dump/component.cc @@ -134,21 +134,15 @@ Session_component *Net::Root::_create_session(char const *args) size_t const rx_buf_size = Arg_string::find_arg(args, "rx_buf_size").ulong_value(0); - size_t const session_size = - max((size_t)4096, sizeof(Session_component)); - - if (ram_quota.value < session_size) { - throw Insufficient_ram_quota(); } - - if (tx_buf_size > ram_quota.value - session_size || - rx_buf_size > ram_quota.value - session_size || - tx_buf_size + rx_buf_size > ram_quota.value - session_size) + if (tx_buf_size > ram_quota.value || + rx_buf_size > ram_quota.value || + tx_buf_size + rx_buf_size > ram_quota.value) { error("insufficient 'ram_quota' for session creation"); throw Insufficient_ram_quota(); } return new (md_alloc()) - Session_component(Ram_quota{ram_quota.value - session_size}, + Session_component(Ram_quota{ram_quota.value}, cap_quota, tx_buf_size, rx_buf_size, _config, _timer, _curr_time, _env); } diff --git a/repos/os/src/server/nic_loopback/main.cc b/repos/os/src/server/nic_loopback/main.cc index 082fb93654..86b19fe4e4 100644 --- a/repos/os/src/server/nic_loopback/main.cc +++ b/repos/os/src/server/nic_loopback/main.cc @@ -149,19 +149,14 @@ class Nic_loopback::Root : public Root_component size_t tx_buf_size = Arg_string::find_arg(args, "tx_buf_size").ulong_value(0); size_t rx_buf_size = Arg_string::find_arg(args, "rx_buf_size").ulong_value(0); - /* deplete ram quota by the memory needed for the session structure */ - size_t session_size = max(4096UL, (size_t)sizeof(Session_component)); - if (ram_quota < session_size) - throw Insufficient_ram_quota(); - /* * Check if donated ram quota suffices for both communication * buffers and check for overflow */ if (tx_buf_size + rx_buf_size < tx_buf_size || - tx_buf_size + rx_buf_size > ram_quota - session_size) { + tx_buf_size + rx_buf_size > ram_quota) { error("insufficient 'ram_quota', got ", ram_quota, ", " - "need ", tx_buf_size + rx_buf_size + session_size); + "need ", tx_buf_size + rx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/part_block/main.cc b/repos/os/src/server/part_block/main.cc index 8b059750ab..d5eca0ad5a 100644 --- a/repos/os/src/server/part_block/main.cc +++ b/repos/os/src/server/part_block/main.cc @@ -347,20 +347,14 @@ class Block::Main : Rpc_object>, if (!tx_buf_size) throw Service_denied(); - /* delete ram quota by the memory needed for the session */ - size_t session_size = max((size_t)4096, - sizeof(Session_component)); - if (ram_quota.value < session_size) - throw Insufficient_ram_quota(); - /* * Check if donated ram quota suffices for both * communication buffers. Also check both sizes separately * to handle a possible overflow of the sum of both sizes. */ - if (tx_buf_size > ram_quota.value - session_size) { + if (tx_buf_size > ram_quota.value) { error("insufficient 'ram_quota', got ", ram_quota, ", need ", - tx_buf_size + session_size); + tx_buf_size); throw Insufficient_ram_quota(); } diff --git a/repos/os/src/server/vfs/main.cc b/repos/os/src/server/vfs/main.cc index 665a2a520f..15a7d2913a 100644 --- a/repos/os/src/server/vfs/main.cc +++ b/repos/os/src/server/vfs/main.cc @@ -876,13 +876,9 @@ class Vfs_server::Root : public Genode::Root_component, if (!tx_buf_size) throw Service_denied(); - size_t session_size = - max((size_t)4096, sizeof(Session_component)) + - tx_buf_size; - - if (session_size > ram_quota) { + if (tx_buf_size > ram_quota) { error("insufficient 'ram_quota' from '", label, "' " - "got ", ram_quota, ", need ", session_size); + "got ", ram_quota, ", need ", tx_buf_size); throw Insufficient_ram_quota(); } From d9f6882a2a61df0c5c7036715aaa971f5a4b3fe0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Sun, 5 Jun 2022 13:27:10 +0000 Subject: [PATCH 014/354] libports: update e2fsprogs to 1.46.5 Brings in Ext4 support. Fixes #4524. --- repos/libports/lib/mk/e2fsprogs.mk | 64 ++++++++----------- repos/libports/lib/mk/e2fsprogs_host_tools.mk | 8 +-- repos/libports/ports/e2fsprogs-lib.hash | 2 +- repos/libports/ports/e2fsprogs-lib.port | 15 +---- .../libports/recipes/src/fs_utils/content.mk | 2 +- repos/libports/src/app/e2fsck/target.mk | 22 +------ repos/libports/src/app/mke2fs/target.mk | 10 ++- repos/libports/src/lib/e2fsprogs/config.h | 1 - repos/libports/src/lib/e2fsprogs/dummies.c | 31 +++++++++ .../lib/e2fsprogs/patches/e2fsck_util_c.patch | 11 ++++ .../e2fsprogs/patches/quotaio_strncat.patch | 13 ---- .../src/lib/e2fsprogs/patches/unix_io.c.patch | 13 ---- 12 files changed, 82 insertions(+), 110 deletions(-) create mode 100644 repos/libports/src/lib/e2fsprogs/dummies.c create mode 100644 repos/libports/src/lib/e2fsprogs/patches/e2fsck_util_c.patch delete mode 100644 repos/libports/src/lib/e2fsprogs/patches/quotaio_strncat.patch delete mode 100644 repos/libports/src/lib/e2fsprogs/patches/unix_io.c.patch diff --git a/repos/libports/lib/mk/e2fsprogs.mk b/repos/libports/lib/mk/e2fsprogs.mk index f2df773ac6..b6c31f96a7 100644 --- a/repos/libports/lib/mk/e2fsprogs.mk +++ b/repos/libports/lib/mk/e2fsprogs.mk @@ -12,33 +12,6 @@ CC_DEF += -DLOCALEDIR=\"/share/locale\" CC_DEF += -DLIBDIR=\"/lib\" CC_DEF += -DLOCALE_ALIAS_PATH=\"/share/locale\" -SRC_C_intl := \ - intl/bindtextdom.c \ - intl/dcgettext.c \ - intl/dgettext.c \ - intl/gettext.c \ - intl/finddomain.c \ - intl/loadmsgcat.c \ - intl/localealias.c \ - intl/textdomain.c \ - intl/l10nflist.c \ - intl/dcigettext.c \ - intl/explodename.c \ - intl/dcngettext.c \ - intl/dngettext.c \ - intl/ngettext.c \ - intl/plural.c \ - intl/plural-exp.c \ - intl/localcharset.c \ - intl/relocatable.c \ - intl/log.c \ - intl/localename.c \ - intl/printf.c \ - intl/osdep.c \ - intl/intl-compat.c -INC_DIR_intl := $(E2FSPROGS_DIR)/intl $(REP_DIR)/src/lib/e2fsprogs/intl -CC_OPT_intl/dcigettext += -DSTATIC= - SRC_C_libblkid := \ lib/blkid/cache.c \ lib/blkid/devname.c \ @@ -63,6 +36,7 @@ SRC_C_libcom_err := \ INC_DIR_libcom_err := $(E2FSPROGS_DIR)/lib/et SRC_C_libe2p := \ + lib/e2p/encoding.c \ lib/e2p/feature.c \ lib/e2p/fgetflags.c \ lib/e2p/fgetversion.c \ @@ -90,6 +64,7 @@ SRC_C_libext2fs := \ lib/ext2fs/alloc_sb.c \ lib/ext2fs/alloc_stats.c \ lib/ext2fs/alloc_tables.c \ + lib/ext2fs/atexit.c \ lib/ext2fs/badblocks.c \ lib/ext2fs/bb_compat.c \ lib/ext2fs/bb_inode.c \ @@ -115,21 +90,25 @@ SRC_C_libext2fs := \ lib/ext2fs/ext2_err.c \ lib/ext2fs/ext_attr.c \ lib/ext2fs/extent.c \ + lib/ext2fs/fallocate.c \ lib/ext2fs/fileio.c \ lib/ext2fs/finddev.c \ lib/ext2fs/flushb.c \ lib/ext2fs/freefs.c \ lib/ext2fs/gen_bitmap.c \ lib/ext2fs/gen_bitmap64.c \ + lib/ext2fs/get_num_dirs.c \ lib/ext2fs/get_pathname.c \ lib/ext2fs/getsectsize.c \ lib/ext2fs/getsize.c \ + lib/ext2fs/hashmap.c \ lib/ext2fs/i_block.c \ lib/ext2fs/icount.c \ lib/ext2fs/imager.c \ lib/ext2fs/ind_block.c \ lib/ext2fs/initialize.c \ lib/ext2fs/inline.c \ + lib/ext2fs/inline_data.c \ lib/ext2fs/inode.c \ lib/ext2fs/inode_io.c \ lib/ext2fs/io_manager.c \ @@ -143,6 +122,7 @@ SRC_C_libext2fs := \ lib/ext2fs/namei.c \ lib/ext2fs/native.c \ lib/ext2fs/newdir.c \ + lib/ext2fs/nls_utf8.c \ lib/ext2fs/openfs.c \ lib/ext2fs/progress.c \ lib/ext2fs/punch.c \ @@ -152,6 +132,8 @@ SRC_C_libext2fs := \ lib/ext2fs/read_bb_file.c \ lib/ext2fs/res_gdt.c \ lib/ext2fs/rw_bitmaps.c \ + lib/ext2fs/sha512.c \ + lib/ext2fs/sparse_io.c \ lib/ext2fs/swapfs.c \ lib/ext2fs/symlink.c \ lib/ext2fs/tdb.c \ @@ -164,13 +146,17 @@ SRC_C_libext2fs := \ lib/ext2fs/write_bb_file.c INC_DIR_libext2fs := $(E2FSPROGS_DIR)/lib/ext2fs $(REP_DIR)/src/lib/e2fsprogs/lib/ext2fs -SRC_C_libquota := \ - lib/quota/mkquota.c \ - lib/quota/quotaio.c \ - lib/quota/quotaio_v2.c \ - lib/quota/quotaio_tree.c \ - e2fsck/dict.c -INC_DIR_libquota := $(E2FSPROGS_DIR)/lib/quota +SRC_C_libsupport := \ + lib/support/dict.c \ + lib/support/mkquota.c \ + lib/support/plausible.c \ + lib/support/parse_qtype.c \ + lib/support/prof_err.c \ + lib/support/profile.c \ + lib/support/quotaio.c \ + lib/support/quotaio_tree.c \ + lib/support/quotaio_v2.c +INC_DIR_libsupport := $(E2FSPROGS_DIR)/lib/support SRC_C_libuuid := \ lib/uuid/clear.c \ @@ -186,23 +172,22 @@ SRC_C_libuuid := \ INC_DIR_libuuid := $(E2FSPROGS_DIR)/lib/uuid SRC_C := \ - $(SRC_C_intl) \ $(SRC_C_libblkid) \ $(SRC_C_libcom_err) \ $(SRC_C_libe2p) \ $(SRC_C_libext2fs) \ - $(SRC_C_libquota) \ - $(SRC_C_libuuid) + $(SRC_C_libsupport) \ + $(SRC_C_libuuid) \ + dummies.c INC_DIR += $(E2FSPROGS_DIR)/lib INC_DIR += $(REP_DIR)/src/lib/e2fsprogs INC_DIR += $(REP_DIR)/src/lib/e2fsprogs/lib -INC_DIR += $(INC_DIR_intl) INC_DIR += $(INC_DIR_libblkid) INC_DIR += $(INC_DIR_libcom_err) INC_DIR += $(INC_DIR_libe2p) INC_DIR += $(INC_DIR_libext2fs) -INC_DIR += $(INC_DIR_libquota) +INC_DIR += $(INC_DIR_libsupport) INC_DIR += $(INC_DIR_libuuid) @@ -210,6 +195,7 @@ CC_DEF += -D__BSD_VISIBLE CC_DEF += -DHAVE_CONFIG_H vpath %.c $(E2FSPROGS_DIR) +vpath %.c $(REP_DIR)/src/lib/e2fsprogs # # Generate header files diff --git a/repos/libports/lib/mk/e2fsprogs_host_tools.mk b/repos/libports/lib/mk/e2fsprogs_host_tools.mk index 730ab6e15e..ce28f8a0ba 100644 --- a/repos/libports/lib/mk/e2fsprogs_host_tools.mk +++ b/repos/libports/lib/mk/e2fsprogs_host_tools.mk @@ -3,9 +3,8 @@ # EXT2FS_GEN_CRC := $(BUILD_BASE_DIR)/tool/e2fsprogs/gen_crc32ctable -E2FSCK_GEN_CRC := $(BUILD_BASE_DIR)/tool/e2fsprogs/gen_crc32table -HOST_TOOLS += $(EXT2FS_GEN_CRC) $(E2FSCK_GEN_CRC) +HOST_TOOLS += $(EXT2FS_GEN_CRC) E2FSPROGS_DIR := $(call select_from_ports,e2fsprogs-lib)/src/lib/e2fsprogs @@ -14,9 +13,4 @@ $(EXT2FS_GEN_CRC): $(E2FSPROGS_DIR) $(VERBOSE)mkdir -p $(dir $@) $(VERBOSE)gcc $(E2FSPROGS_DIR)/lib/ext2fs/$(notdir $@).c -o $@ -$(E2FSCK_GEN_CRC): $(E2FSPROGS_DIR) - $(MSG_BUILD)$(notdir $@) - $(VERBOSE)mkdir -p $(dir $@) - $(VERBOSE)gcc $(E2FSPROGS_DIR)/e2fsck/$(notdir $@).c -o $@ - CC_CXX_WARN_STRICT = diff --git a/repos/libports/ports/e2fsprogs-lib.hash b/repos/libports/ports/e2fsprogs-lib.hash index 15b9d161f0..e60d7a5de5 100644 --- a/repos/libports/ports/e2fsprogs-lib.hash +++ b/repos/libports/ports/e2fsprogs-lib.hash @@ -1 +1 @@ -66fa19adc056fa1e55e3585ae5962c2f7d20dbe4 +d41e0f3b2517a1625a84c394c468530676d0551a diff --git a/repos/libports/ports/e2fsprogs-lib.port b/repos/libports/ports/e2fsprogs-lib.port index 99c0335842..4ded92b95e 100644 --- a/repos/libports/ports/e2fsprogs-lib.port +++ b/repos/libports/ports/e2fsprogs-lib.port @@ -1,5 +1,5 @@ LICENSE := GPLv2 -VERSION := 1.42.9 +VERSION := 1.46.5 DOWNLOADS := e2fsprogs.git E2FSPROGS_DIR := src/lib/e2fsprogs @@ -24,26 +24,15 @@ DIR_CONTENT($(INCLUDE_DIR)) := \ BLKID_HEADER := $(INCLUDE_DIR)/blkid/blkid.h EXT2FS_HEADER := $(INCLUDE_DIR)/ext2fs/ext2_types.h -INTL_HEADER := $(INCLUDE_DIR)/libgnuintl.h UUID_HEADER := $(INCLUDE_DIR)/uuid/uuid.h DEFAULT_PROFILE_C := $(addsuffix /misc/default_profile.c, $(E2FSPROGS_DIR)) _dirs: \ $(BLKID_HEADER) \ $(EXT2FS_HEADER) \ - $(INTL_HEADER) \ $(UUID_HEADER) \ $(DEFAULT_PROFILE_C) -$(INTL_HEADER): - @$(MSG_GENERATE)$(notdir $@) - $(VERBOSE)sed -e 's,@''HAVE_POSIX_PRINTF''@,1,g' \ - -e 's,@''HAVE_ASPRINTF''@,1,g' \ - -e 's,@''HAVE_SNPRINTF''@,1,g' \ - -e 's,@''HAVE_WPRINTF''@,0,g' \ - < $(E2FSPROGS_DIR)/intl/libgnuintl.h.in > $@ - $(VERBOSE)ln -sf $(notdir $@) $(dir $@)/libintl.h - $(BLKID_HEADER): @$(MSG_GENERATE)$(notdir $@) $(VERBOSE)mkdir -p $(dir $@) @@ -69,7 +58,7 @@ $(EXT2FS_HEADER): $(VERBOSE)sed -e 's,@''E2FSPROGS_VERSION''@,$(VERSION),g' \ < $(E2FSPROGS_DIR)/lib/ext2fs/ext2_err.et.in \ > $(E2FSPROGS_DIR)/lib/ext2fs/ext2_err.et && \ - for file in lib/ext2fs/ext2_err e2fsck/prof_err; do \ + for file in lib/ext2fs/ext2_err lib/support/prof_err; do \ $(MSG_GENERATE)$${file}.h && \ gawk -f $(E2FSPROGS_DIR)/lib/et/et_h.awk \ "outfile=$(E2FSPROGS_DIR)/$${file}.h" \ diff --git a/repos/libports/recipes/src/fs_utils/content.mk b/repos/libports/recipes/src/fs_utils/content.mk index d2f8a2f4ba..25ecf971c4 100644 --- a/repos/libports/recipes/src/fs_utils/content.mk +++ b/repos/libports/recipes/src/fs_utils/content.mk @@ -16,7 +16,7 @@ src/lib/e2fsprogs: cp -a $(REP_DIR)/src/lib/e2fsprogs/* $@ LICENSE: - cp $(PORT_DIR)/src/lib/e2fsprogs/COPYING $@ + cp $(PORT_DIR)/src/lib/e2fsprogs/NOTICE $@ $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) diff --git a/repos/libports/src/app/e2fsck/target.mk b/repos/libports/src/app/e2fsck/target.mk index a9cb56a4a3..f35bc52494 100644 --- a/repos/libports/src/app/e2fsck/target.mk +++ b/repos/libports/src/app/e2fsck/target.mk @@ -14,12 +14,13 @@ CC_OPT += -Wno-unused-variable -Wno-parentheses # e2fsck/dict.c SRC_C := \ badblocks.c \ - crc32.c \ dirinfo.c \ dx_dirinfo.c \ e2fsck.c \ ea_refcount.c \ ehandler.c \ + encrypted_files.c \ + extents.c \ journal.c \ logfile.c \ message.c \ @@ -30,10 +31,9 @@ SRC_C := \ pass4.c \ pass5.c \ problem.c \ - prof_err.c \ - profile.c \ quota.c \ recovery.c \ + readahead.c \ region.c \ rehash.c \ revoke.c \ @@ -46,20 +46,4 @@ INC_DIR += $(PRG_DIR) vpath %.c $(E2FSCK_DIR) -# -# Generate CRC32 header -# -E2FSCK_GEN_CRC := $(BUILD_BASE_DIR)/tool/e2fsprogs/gen_crc32table - -CRC_HEADER := $(BUILD_BASE_DIR)/app/e2fsck/crc32table.h - -$(SRC_C:.c=.o): $(CRC_HEADER) - -$(CRC_HEADER): - $(MSG_CONVERT)$(notdir $@) - $(VERBOSE)mkdir -p $(dir $@) - $(VERBOSE)$(E2FSCK_GEN_CRC) > $@ - -INC_DIR += $(BUILD_BASE_DIR)/$(dir $(CRC_HEADER)) - CC_CXX_WARN_STRICT = diff --git a/repos/libports/src/app/mke2fs/target.mk b/repos/libports/src/app/mke2fs/target.mk index 34618e8f64..d016174f6d 100644 --- a/repos/libports/src/app/mke2fs/target.mk +++ b/repos/libports/src/app/mke2fs/target.mk @@ -7,9 +7,13 @@ INC_DIR += $(E2FS_DIR)/e2fsck CC_DEF += -DROOT_SYSCONFDIR=\"/etc\" -SRC_C := $(addprefix misc/, mke2fs.c util.c default_profile.c) -SRC_C += $(addprefix e2fsck/, profile.c prof_err.c) +SRC_C := \ + create_inode.c \ + default_profile.c \ + mk_hugefiles.c \ + mke2fs.c \ + util.c -vpath %.c $(E2FS_DIR) +vpath %.c $(E2FS_DIR)/misc CC_CXX_WARN_STRICT = diff --git a/repos/libports/src/lib/e2fsprogs/config.h b/repos/libports/src/lib/e2fsprogs/config.h index b13d8afc43..0c162b1728 100644 --- a/repos/libports/src/lib/e2fsprogs/config.h +++ b/repos/libports/src/lib/e2fsprogs/config.h @@ -1,5 +1,4 @@ #define ENABLE_HTREE 1 -#define ENABLE_NLS 1 #define HAVE_ALLOCA 1 #define HAVE_ASPRINTF 1 #define HAVE_DECL_FEOF_UNLOCKED 1 diff --git a/repos/libports/src/lib/e2fsprogs/dummies.c b/repos/libports/src/lib/e2fsprogs/dummies.c new file mode 100644 index 0000000000..b1db651443 --- /dev/null +++ b/repos/libports/src/lib/e2fsprogs/dummies.c @@ -0,0 +1,31 @@ +/* + * \brief Dummies to prevent unneeded warnings + * \author Josef Soentgen + * \date 2022-06-05 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include + + +int getrusage(int who, struct rusage *usage) +{ + (void)who; + (void)usage; + return -1; +} + + +void *sbrk(intptr_t increment) +{ + (void)increment; + return (void*)0; +} diff --git a/repos/libports/src/lib/e2fsprogs/patches/e2fsck_util_c.patch b/repos/libports/src/lib/e2fsprogs/patches/e2fsck_util_c.patch new file mode 100644 index 0000000000..4879d1f41c --- /dev/null +++ b/repos/libports/src/lib/e2fsprogs/patches/e2fsck_util_c.patch @@ -0,0 +1,11 @@ +--- src/lib/e2fsprogs/e2fsck/util.c ++++ src/lib/e2fsprogs/e2fsck/util.c +@@ -115,7 +115,7 @@ + void *e2fsck_allocate_memory(e2fsck_t ctx, unsigned long size, + const char *description) + { +- void *ret; ++ void *ret = NULL; + char buf[256]; + + #ifdef DEBUG_ALLOCATE_MEMORY diff --git a/repos/libports/src/lib/e2fsprogs/patches/quotaio_strncat.patch b/repos/libports/src/lib/e2fsprogs/patches/quotaio_strncat.patch deleted file mode 100644 index a9513eeb27..0000000000 --- a/repos/libports/src/lib/e2fsprogs/patches/quotaio_strncat.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git src/lib/e2fsprogs/lib/quota/quotaio.c src/lib/e2fsprogs/lib/quota/quotaio.c -index 1bdcba6c..8bd253d4 100644 ---- src/lib/e2fsprogs/lib/quota/quotaio.c -+++ src/lib/e2fsprogs/lib/quota/quotaio.c -@@ -64,7 +64,7 @@ const char *quota_get_qf_path(const char *mntpt, int qtype, int fmt, - return NULL; - - strncpy(path_buf, mntpt, path_buf_size); -- strncat(path_buf, "/", 1); -+ strncat(path_buf, "/", path_buf_size - strlen(path_buf)); - strncat(path_buf, quota_get_qf_name(qtype, fmt, qf_name), - path_buf_size - strlen(path_buf)); - diff --git a/repos/libports/src/lib/e2fsprogs/patches/unix_io.c.patch b/repos/libports/src/lib/e2fsprogs/patches/unix_io.c.patch deleted file mode 100644 index cab5708a07..0000000000 --- a/repos/libports/src/lib/e2fsprogs/patches/unix_io.c.patch +++ /dev/null @@ -1,13 +0,0 @@ -Remove io->align check because it is not needed in our case -and rather leads to an memory allocation error (we cannot satisfy -the alignment). -+++ src/lib/e2fsprogs/lib/ext2fs/unix_io.c -@@ -558,7 +558,7 @@ static errcode_t unix_open(const char *name, int flags, io_channel *channel) - } - #endif - --#if defined(__CYGWIN__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) -+#if 0 - /* - * Some operating systems require that the buffers be aligned, - * regardless of O_DIRECT From 1010267dee28fe5e3540cd1ef456387a90227cd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 9 Jun 2022 10:52:59 +0200 Subject: [PATCH 015/354] gpu/intel: increase worst case CAP estimate It may happen that 1 additional CAP is used during buffer allocation. Fixes #4525. --- repos/os/src/drivers/gpu/intel/main.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/os/src/drivers/gpu/intel/main.cc b/repos/os/src/drivers/gpu/intel/main.cc index aa44806104..793db9be0d 100644 --- a/repos/os/src/drivers/gpu/intel/main.cc +++ b/repos/os/src/drivers/gpu/intel/main.cc @@ -1516,7 +1516,7 @@ class Gpu::Session_component : public Genode::Session_object { } /* worst case */ - bool avail_caps() { return _cap_quota_guard.have_avail(Cap_quota { 4 }); } + bool avail_caps() { return _cap_quota_guard.have_avail(Cap_quota { 5 }); } /* size + possible heap allocations */ bool avail_ram(size_t size = 0) { From b77f59286f6d288d5c3776d98dcc8f7b6424fe85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 9 Jun 2022 10:54:30 +0200 Subject: [PATCH 016/354] gpu/intel: abort client on accounting mismatch Issue #4525. --- repos/os/src/drivers/gpu/intel/main.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/repos/os/src/drivers/gpu/intel/main.cc b/repos/os/src/drivers/gpu/intel/main.cc index 793db9be0d..3a56b1cb7e 100644 --- a/repos/os/src/drivers/gpu/intel/main.cc +++ b/repos/os/src/drivers/gpu/intel/main.cc @@ -1524,8 +1524,17 @@ class Gpu::Session_component : public Genode::Session_object void withdraw(size_t caps, size_t ram) { - _cap_quota_guard.withdraw(Cap_quota { caps }); - _ram_quota_guard.withdraw(Ram_quota { ram }); + try { + _cap_quota_guard.withdraw(Cap_quota { caps }); + _ram_quota_guard.withdraw(Ram_quota { ram }); + } catch (... /* intentional catch-all */) { + /* + * At this point something in the accounting went wrong + * and as quick-fix let the client abort rather than the + * multiplexer. + */ + throw Service_denied(); + } } void replenish(size_t caps, size_t ram) From 438e0adc777a750538da18089c9bc7d8415be467 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 3 Jun 2022 13:51:09 +0200 Subject: [PATCH 017/354] acpica: remove support to access pci via i/o ports All access to PCI devices can be handled nowadays via the platform session. The I/O port access seems also to work not properly on newer UEFI machines. Fixes #4532 --- repos/libports/src/app/acpica/os.cc | 3 - repos/libports/src/lib/acpica/env.cc | 8 +-- repos/libports/src/lib/acpica/pci.cc | 99 ++++------------------------ 3 files changed, 15 insertions(+), 95 deletions(-) diff --git a/repos/libports/src/app/acpica/os.cc b/repos/libports/src/app/acpica/os.cc index aade55f8a8..2737c79d35 100644 --- a/repos/libports/src/app/acpica/os.cc +++ b/repos/libports/src/app/acpica/os.cc @@ -389,9 +389,6 @@ void Acpica::Main::init_acpica(Wait_acpi_ready wait_acpi_ready, /* Generate report for platform driver */ Acpica::generate_report(env, bridge); } - - /* Tell PCI backend to use platform_drv for PCI device access from now on */ - Acpica::use_platform_drv(); } diff --git a/repos/libports/src/lib/acpica/env.cc b/repos/libports/src/lib/acpica/env.cc index a474a13560..0ac38a48ef 100644 --- a/repos/libports/src/lib/acpica/env.cc +++ b/repos/libports/src/lib/acpica/env.cc @@ -28,7 +28,6 @@ struct Acpica::Env Genode::Allocator &heap; Wait_acpi_ready const wait_acpi_ready; - bool use_platform_drv; Genode::Parent::Service_name announce_for_acpica { wait_acpi_ready.enabled ? "Acpi" : Platform::Session::service_name() }; @@ -44,8 +43,7 @@ struct Acpica::Env Env(Genode::Env &env, Genode::Allocator &heap, Wait_acpi_ready wait_acpi_ready) : - env(env), heap(heap), wait_acpi_ready(wait_acpi_ready), - use_platform_drv(!wait_acpi_ready.enabled) + env(env), heap(heap), wait_acpi_ready(wait_acpi_ready) { } }; @@ -60,14 +58,12 @@ Platform::Client & Acpica::platform() instance->cap.construct(Genode::reinterpret_cap_cast( instance->env.session(instance->announce_for_acpica, instance->id_space_element.id(), - "ram_quota=36K", Genode::Affinity()))); + "ram_quota=48K", Genode::Affinity()))); instance->platform.construct(*instance->cap); } return *instance->platform; } -bool Acpica::platform_drv() { return instance->use_platform_drv; } -void Acpica::use_platform_drv() { instance->use_platform_drv = true; } void Acpica::init(Genode::Env &env, Genode::Allocator &heap, diff --git a/repos/libports/src/lib/acpica/pci.cc b/repos/libports/src/lib/acpica/pci.cc index 442a552786..27985d2dc6 100644 --- a/repos/libports/src/lib/acpica/pci.cc +++ b/repos/libports/src/lib/acpica/pci.cc @@ -73,66 +73,6 @@ static void dump_error(char const * const func, ACPI_PCI_ID *pcidev, } -/******************************* - * Accessing PCI via I/O ports * - *******************************/ - -enum { REG_ADDR = 0xcf8, REG_DATA = 0xcfc, REG_SIZE = 4 }; - -static Genode::Io_port_connection &pci_io_port() { - static Genode::Io_port_connection conn(Acpica::env(), REG_ADDR, REG_SIZE); - return conn; -} - -static unsigned pci_io_cfg_addr(unsigned const bus, unsigned const device, - unsigned const function, unsigned const addr) -{ - return (1U << 31) | - (bus << 16) | - ((device & 0x1fU) << 11) | - ((function & 0x07U) << 8) | - (addr & ~3U); -} - -static unsigned pci_io_read(unsigned const bus, unsigned const device, - unsigned const function, unsigned const addr, - unsigned const width) -{ - /* write target address */ - pci_io_port().outl(REG_ADDR, pci_io_cfg_addr(bus, device, function, addr)); - - switch (width) { - case 8: - return pci_io_port().inb(REG_DATA + (addr & 3)); - case 16: - return pci_io_port().inw(REG_DATA + (addr & 2)); - case 32: - return pci_io_port().inl(REG_DATA); - default: - return ~0U; - } -} - -static void pci_io_write(unsigned const bus, unsigned const device, - unsigned const function, unsigned const addr, - unsigned const width, unsigned value) -{ - /* write target address */ - pci_io_port().outl(REG_ADDR, pci_io_cfg_addr(bus, device, function, addr)); - - switch (width) { - case 8: - pci_io_port().outb(REG_DATA + (addr & 3), value); - return; - case 16: - pci_io_port().outw(REG_DATA + (addr & 2), value); - return; - case 32: - pci_io_port().outl(REG_DATA, value); - return; - } -} - /************************* * Acpica PCI OS backend * *************************/ @@ -142,18 +82,6 @@ ACPI_STATUS AcpiOsInitialize (void) { return AE_OK; } ACPI_STATUS AcpiOsReadPciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, UINT64 *value, UINT32 width) { - if (!Acpica::platform_drv()) { - try { - *value = pci_io_read(pcidev->Bus, pcidev->Device, pcidev->Function, - reg, width); - dump_read(__func__, pcidev, reg, *value, width); - } catch (...) { - dump_error(__func__, pcidev, reg, width); - return AE_ERROR; - } - return AE_OK; - } - Platform::Device_capability cap = Acpica::platform().first_device(); while (cap.valid()) { @@ -182,6 +110,11 @@ ACPI_STATUS AcpiOsReadPciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, return AE_ERROR; }; + if (reg >= 0x100) + Genode::warning(__func__, " ", Genode::Hex(reg), + " out of supported config space range ", + " -> wrong location will be read"); + *value = client.config_read(reg, access_size); dump_read(__func__, pcidev, reg, *value, width); @@ -197,24 +130,13 @@ ACPI_STATUS AcpiOsReadPciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, dump_error(__func__, pcidev, reg, width); - return AE_ERROR; + *value = ~0U; + return AE_OK; } ACPI_STATUS AcpiOsWritePciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, UINT64 value, UINT32 width) { - if (!Acpica::platform_drv()) { - try { - dump_write(__func__, pcidev, reg, value, width); - pci_io_write(pcidev->Bus, pcidev->Device, pcidev->Function, reg, - width, value); - return AE_OK; - } catch (...) { - dump_error(__func__, pcidev, reg, width); - return AE_ERROR; - } - } - Platform::Device_capability cap = Acpica::platform().first_device(); while (cap.valid()) { @@ -245,6 +167,11 @@ ACPI_STATUS AcpiOsWritePciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, client.config_write(reg, value, access_size); + if (reg >= 0x100) + Genode::warning(__func__, " ", Genode::Hex(reg), + " out of supported config space range ", + " -> wrong location will be written"); + dump_write(__func__, pcidev, reg, value, width); Acpica::platform().release_device(client.rpc_cap()); @@ -258,5 +185,5 @@ ACPI_STATUS AcpiOsWritePciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, dump_error(__func__, pcidev, reg, width); - return AE_ERROR; + return AE_OK; } From 9b5840cb702cc4c189f079f5ef9b9c70d35e38eb Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 14 Jun 2022 13:23:58 +0200 Subject: [PATCH 018/354] acpica: remove diagnostic messages during PCIe config access. Issue #4532 --- repos/libports/src/lib/acpica/pci.cc | 39 ---------------------------- 1 file changed, 39 deletions(-) diff --git a/repos/libports/src/lib/acpica/pci.cc b/repos/libports/src/lib/acpica/pci.cc index 27985d2dc6..7ad198eb0c 100644 --- a/repos/libports/src/lib/acpica/pci.cc +++ b/repos/libports/src/lib/acpica/pci.cc @@ -41,37 +41,6 @@ struct Bdf } }; -static void dump_read(char const * const func, ACPI_PCI_ID *pcidev, - UINT32 reg, UINT64 value, UINT32 width) -{ - using namespace Genode; - - log(func, ": ", Bdf(pcidev->Bus, pcidev->Device, pcidev->Function), " " - "reg=", Hex(reg, Hex::PREFIX, Hex::PAD), " " - "width=", width, width < 10 ? " " : "", " -> " - "value=", Genode::Hex(value)); -} - -static void dump_write(char const * const func, ACPI_PCI_ID *pcidev, - UINT32 reg, UINT64 value, UINT32 width) -{ - using namespace Genode; - - warning(func, ": ", Bdf(pcidev->Bus, pcidev->Device, pcidev->Function), " " - "reg=", Hex(reg, Hex::PREFIX, Hex::PAD), " " - "width=", width, width < 10 ? " " : "", " -> " - "value=", Genode::Hex(value)); -} - -static void dump_error(char const * const func, ACPI_PCI_ID *pcidev, - UINT32 reg, UINT32 width) -{ - error(func, " unknown device - segment=", pcidev->Segment, " ", - "bdf=", Bdf(pcidev->Bus, pcidev->Device, pcidev->Function), " ", - "reg=", Genode::Hex(reg), " " - "width=", Genode::Hex(width)); -} - /************************* * Acpica PCI OS backend * @@ -117,8 +86,6 @@ ACPI_STATUS AcpiOsReadPciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, *value = client.config_read(reg, access_size); - dump_read(__func__, pcidev, reg, *value, width); - Acpica::platform().release_device(client.rpc_cap()); return AE_OK; } @@ -128,8 +95,6 @@ ACPI_STATUS AcpiOsReadPciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, Acpica::platform().release_device(client.rpc_cap()); } - dump_error(__func__, pcidev, reg, width); - *value = ~0U; return AE_OK; } @@ -172,8 +137,6 @@ ACPI_STATUS AcpiOsWritePciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, " out of supported config space range ", " -> wrong location will be written"); - dump_write(__func__, pcidev, reg, value, width); - Acpica::platform().release_device(client.rpc_cap()); return AE_OK; } @@ -183,7 +146,5 @@ ACPI_STATUS AcpiOsWritePciConfiguration (ACPI_PCI_ID *pcidev, UINT32 reg, Acpica::platform().release_device(client.rpc_cap()); } - dump_error(__func__, pcidev, reg, width); - return AE_OK; } From fb7282f47ab793983148952eded56ce364a6fd1f Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 8 Jun 2022 09:32:38 +0200 Subject: [PATCH 019/354] base: beautify error message if not mutex owner --- repos/base/src/lib/base/mutex.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/base/src/lib/base/mutex.cc b/repos/base/src/lib/base/mutex.cc index f7bcfd8357..520617dec1 100644 --- a/repos/base/src/lib/base/mutex.cc +++ b/repos/base/src/lib/base/mutex.cc @@ -29,7 +29,7 @@ void Genode::Mutex::release() { Lock::Applicant myself(Thread::myself()); if (!_lock.lock_owner(myself)) { - Genode::error("denied non mutex owner the release, mutex=", + Genode::error("release denied, caller not owner, mutex=", this, ", return ip=", __builtin_return_address(0)); return; } From 151a5e2d7fc469d9f0904df9baa8f18ba9b01ca6 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 4 May 2022 17:15:01 +0200 Subject: [PATCH 020/354] lx_emul: add 'pgprot_noncached' to pgtable.h --- .../src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h index b03b919016..a1c3db06c3 100644 --- a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h @@ -25,6 +25,10 @@ #include #endif +#ifndef pgprot_noncached +#define pgprot_noncached(prot) (prot) +#endif + static inline pte_t pte_mkwrite(pte_t pte) { return pte; } static inline bool __pkru_allows_pkey(u16 pkey, bool write) From dc77417396626e145fa5c73e3f502b2fb0e86baa Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Mon, 9 May 2022 17:54:06 +0200 Subject: [PATCH 021/354] lx_emul: add 'virt_range_start' to memory model Returns the start address of are memory region for given virtual address. --- repos/dde_linux/src/include/lx_kit/memory.h | 1 + repos/dde_linux/src/lib/lx_kit/memory.cc | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/repos/dde_linux/src/include/lx_kit/memory.h b/repos/dde_linux/src/include/lx_kit/memory.h index 8ce87d04d3..59946974db 100644 --- a/repos/dde_linux/src/include/lx_kit/memory.h +++ b/repos/dde_linux/src/include/lx_kit/memory.h @@ -102,6 +102,7 @@ class Lx_kit::Mem_allocator void * alloc(size_t size, size_t align); addr_t dma_addr(void * addr); addr_t virt_addr(void * dma_addr); + addr_t virt_region_start(void * virt_addr); size_t size(const void * ptr); bool free(const void * ptr); }; diff --git a/repos/dde_linux/src/lib/lx_kit/memory.cc b/repos/dde_linux/src/lib/lx_kit/memory.cc index 0d3c7e9c5c..0d713b2a40 100644 --- a/repos/dde_linux/src/lib/lx_kit/memory.cc +++ b/repos/dde_linux/src/lib/lx_kit/memory.cc @@ -133,6 +133,19 @@ Genode::addr_t Lx_kit::Mem_allocator::virt_addr(void * dma_addr) } +Genode::addr_t Lx_kit::Mem_allocator::virt_region_start(void * virt_addr) +{ + addr_t ret = 0UL; + + _virt_to_dma.apply(Buffer_info::Query_addr(virt_addr), + [&] (Buffer_info const & info) { + ret = info.buffer.virt_addr(); + }); + + return ret; +} + + bool Lx_kit::Mem_allocator::free(const void * ptr) { if (!_mem.valid_addr((addr_t)ptr)) From c74a8c9fa86951ceaddb0df72eba01ab491d7ba0 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 11 May 2022 15:47:36 +0200 Subject: [PATCH 022/354] lx_emul: support for 'alloc_pages_exact' --- .../src/lib/lx_emul/shadow/mm/page_alloc.c | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c index 2e6c2a6f9c..b71812db0e 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/mm/page_alloc.c @@ -12,6 +12,7 @@ */ #include +#include #include #include #include @@ -41,11 +42,9 @@ unsigned long __alloc_pages_bulk(gfp_t gfp,int preferred_nid, return nr_pages; } - -void __free_pages(struct page * page, unsigned int order) +static void lx_free_pages(struct page *page, unsigned const num_pages) { unsigned i; - unsigned const num_pages = (1 << order); void * const virt_addr = page->virtual; if (atomic_read(&page->_refcount) && !atomic_dec_and_test(&page->_refcount)) @@ -59,15 +58,20 @@ void __free_pages(struct page * page, unsigned int order) } -/* - * In earlier kernel versions, '__alloc_pages' was an inline function. - */ -#if LINUX_VERSION_CODE > KERNEL_VERSION(5,12,0) -struct page * __alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid, - nodemask_t * nodemask) +void __free_pages(struct page * page, unsigned int order) { - unsigned const nr_pages = (1u << order); + lx_free_pages(page, (1u << order)); +} + +void free_pages_exact(void *virt_addr, size_t size) +{ + lx_free_pages(virt_to_page(virt_addr), PAGE_ALIGN(size) / PAGE_SIZE); +} + + +static struct page * lx_alloc_pages(unsigned const nr_pages) +{ void const *ptr = lx_emul_mem_alloc_aligned(PAGE_SIZE*nr_pages, PAGE_SIZE); struct page *page = lx_emul_virt_to_pages(ptr, nr_pages); @@ -75,4 +79,20 @@ struct page * __alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid, return page; } + +/* + * In earlier kernel versions, '__alloc_pages' was an inline function. + */ +#if LINUX_VERSION_CODE > KERNEL_VERSION(5,12,0) +struct page * __alloc_pages(gfp_t gfp, unsigned int order, int preferred_nid, + nodemask_t * nodemask) +{ + return lx_alloc_pages(1u << order); +} #endif + + +void *alloc_pages_exact(size_t size, gfp_t gfp_mask) +{ + return lx_alloc_pages(PAGE_ALIGN(size) / PAGE_SIZE)->virtual; +} From 5cfb9e3e9ddee672d9a8d99ce11f6c181bf4ae3d Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 14 Jun 2022 11:22:50 +0200 Subject: [PATCH 023/354] base-hw: distinguish core, idle, user threads Do not only distinguish core and user threads, but the idle threads too. Instead of a boolean value, introduce a new thread type. Ref genodelabs/genode#4527 --- repos/base-hw/src/core/kernel/cpu.cc | 3 ++- repos/base-hw/src/core/kernel/thread.cc | 14 +++++++------- repos/base-hw/src/core/kernel/thread.h | 11 ++++++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/repos/base-hw/src/core/kernel/cpu.cc b/repos/base-hw/src/core/kernel/cpu.cc index 7840d39acb..02e190d63e 100644 --- a/repos/base-hw/src/core/kernel/cpu.cc +++ b/repos/base-hw/src/core/kernel/cpu.cc @@ -109,7 +109,8 @@ Cpu::Idle_thread::Idle_thread(Board::Address_space_id_allocator &addr_space_id_a Cpu &cpu, Pd &core_pd) : - Thread { addr_space_id_alloc, user_irq_pool, cpu_pool, core_pd, "idle" } + Thread { addr_space_id_alloc, user_irq_pool, cpu_pool, core_pd, + Cpu_priority::min(), 0, "idle", Thread::IDLE } { regs->ip = (addr_t)&idle_thread_main; diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc index 0d2e9227e7..5d17a3a559 100644 --- a/repos/base-hw/src/core/kernel/thread.cc +++ b/repos/base-hw/src/core/kernel/thread.cc @@ -369,7 +369,7 @@ void Thread::_call_restart_thread() Thread &thread = *thread_ptr; - if (!_core && (&pd() != &thread.pd())) { + if (_type == USER && (&pd() != &thread.pd())) { raw(*this, ": failed to lookup thread ", (unsigned)user_arg_1(), " to restart it"); _die(); @@ -793,7 +793,7 @@ void Thread::_call() case call_id_pause_vm(): _call_pause_vm(); return; default: /* check wether this is a core thread */ - if (!_core) { + if (_type != CORE) { Genode::raw(*this, ": not entitled to do kernel call"); _die(); return; @@ -805,7 +805,7 @@ void Thread::_call() _call_new(_addr_space_id_alloc, _user_irq_pool, _cpu_pool, _core_pd, (unsigned) user_arg_2(), (unsigned) _core_to_kernel_quota(user_arg_3()), - (char const *) user_arg_4()); + (char const *) user_arg_4(), USER); return; case call_id_new_core_thread(): _call_new(_addr_space_id_alloc, _user_irq_pool, _cpu_pool, @@ -857,7 +857,7 @@ void Thread::_mmu_exception() return; } - if (_core) + if (_type != USER) Genode::raw(*this, " raised a fault, which should never happen ", _fault); @@ -874,7 +874,7 @@ Thread::Thread(Board::Address_space_id_allocator &addr_space_id_alloc, unsigned const priority, unsigned const quota, char const *const label, - bool core) + Type type) : Kernel::Object { *this }, Cpu_job { priority, quota }, @@ -885,8 +885,8 @@ Thread::Thread(Board::Address_space_id_allocator &addr_space_id_alloc, _ipc_node { *this }, _state { AWAITS_START }, _label { label }, - _core { core }, - regs { core } + _type { type }, + regs { type != USER } { } diff --git a/repos/base-hw/src/core/kernel/thread.h b/repos/base-hw/src/core/kernel/thread.h index f7516a6ba9..30f774163d 100644 --- a/repos/base-hw/src/core/kernel/thread.h +++ b/repos/base-hw/src/core/kernel/thread.h @@ -57,6 +57,10 @@ struct Kernel::Thread_fault */ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout { + public: + + enum Type { USER, CORE, IDLE }; + private: /* @@ -149,7 +153,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout capid_t _timeout_sigid { 0 }; bool _paused { false }; bool _cancel_next_await_signal { false }; - bool const _core { false }; + Type const _type; Genode::Constructible _tlb_invalidation {}; Genode::Constructible _destroy {}; @@ -301,7 +305,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout unsigned const priority, unsigned const quota, char const *const label, - bool core = false); + Type const type); /** * Constructor for core/kernel thread @@ -315,7 +319,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout char const *const label) : Thread(addr_space_id_alloc, user_irq_pool, cpu_pool, core_pd, - Cpu_priority::min(), 0, label, true) + Cpu_priority::min(), 0, label, CORE) { } ~Thread(); @@ -432,6 +436,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout char const * label() const { return _label; } Thread_fault fault() const { return _fault; } Genode::Native_utcb *utcb() { return _utcb; } + Type type() const { return _type; } Pd &pd() const { From d6592ca2cb62302be6a564de904aadeb654a87b7 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 14 Jun 2022 11:32:14 +0200 Subject: [PATCH 024/354] base-hw: unset deleted PD values in MMU When a PD gets deleted check whether it is active on the current CPU resp. MMU. If yes, switch to core/kernel's PD to prevent that invalid page-tables or address-space IDs are still in use. Moreover, whenever we switch to an idle thread, we switch to kernel/core's PD too. Thereby, we prevent that vanished PDs are still active on CPUs different from the one, where the core entrypoint is active, which does the PD deletion. This whole scheme is only valid under the assumption that core has only one entrypoint running on one CPU. Fix genodelabs/genode#4527 --- repos/base-hw/src/core/kernel/thread.cc | 31 ++++++++++++++++- repos/base-hw/src/core/kernel/thread.h | 1 + repos/base-hw/src/core/spec/arm/cpu.cc | 33 ++++++++++--------- repos/base-hw/src/core/spec/arm/cpu_support.h | 3 +- .../src/core/spec/arm/kernel/thread.cc | 3 +- repos/base-hw/src/core/spec/arm_v8/cpu.cc | 11 ++++--- repos/base-hw/src/core/spec/arm_v8/cpu.h | 3 +- .../src/core/spec/arm_v8/kernel/thread.cc | 4 ++- repos/base-hw/src/core/spec/cortex_a15/cpu.h | 11 ++++--- repos/base-hw/src/core/spec/riscv/cpu.cc | 22 +++++-------- repos/base-hw/src/core/spec/riscv/cpu.h | 1 + .../src/core/spec/riscv/kernel/thread.cc | 11 ++++++- repos/base-hw/src/core/spec/x86_64/cpu.cc | 15 +++++++-- repos/base-hw/src/core/spec/x86_64/cpu.h | 5 ++- .../src/core/spec/x86_64/kernel/thread.cc | 5 ++- 15 files changed, 110 insertions(+), 49 deletions(-) diff --git a/repos/base-hw/src/core/kernel/thread.cc b/repos/base-hw/src/core/kernel/thread.cc index 5d17a3a559..a5f3b37593 100644 --- a/repos/base-hw/src/core/kernel/thread.cc +++ b/repos/base-hw/src/core/kernel/thread.cc @@ -329,6 +329,23 @@ void Thread::_call_start_thread() /* join protection domain */ thread._pd = (Pd *) user_arg_3(); thread._ipc_init(*(Native_utcb *)user_arg_4(), *this); + + /* + * Sanity check core threads! + * + * Currently, the model assumes that there is only one core + * entrypoint, which serves requests, and which can destroy + * threads and pds. If this changes, we have to inform all + * cpus about pd destructions to remove their page-tables + * from the hardware in case that a core-thread running with + * that same pd is currently active. Therefore, warn if the + * semantic changes, and additional core threads are started + * across cpu cores. + */ + if (thread._pd == &_core_pd && cpu.id() != _cpu_pool.primary_cpu().id()) + Genode::raw("Error: do not start core threads" + " on CPU cores different than boot cpu"); + thread._become_active(); } @@ -447,6 +464,18 @@ void Thread::_call_delete_thread() } +void Thread::_call_delete_pd() +{ + Genode::Kernel_object & pd = + *(Genode::Kernel_object*)user_arg_1(); + + if (_cpu->active(pd->mmu_regs)) + _cpu->switch_to(_core_pd.mmu_regs); + + _call_delete(); +} + + void Thread::_call_await_request_msg() { if (_ipc_node.can_await_request()) { @@ -822,7 +851,7 @@ void Thread::_call() *(Genode::Platform_pd *) user_arg_3(), _addr_space_id_alloc); return; - case call_id_delete_pd(): _call_delete(); return; + case call_id_delete_pd(): _call_delete_pd(); return; case call_id_new_signal_receiver(): _call_new(); return; case call_id_new_signal_context(): _call_new(*(Signal_receiver*) user_arg_2(), user_arg_3()); diff --git a/repos/base-hw/src/core/kernel/thread.h b/repos/base-hw/src/core/kernel/thread.h index 30f774163d..93e45c3303 100644 --- a/repos/base-hw/src/core/kernel/thread.h +++ b/repos/base-hw/src/core/kernel/thread.h @@ -234,6 +234,7 @@ class Kernel::Thread : private Kernel::Object, public Cpu_job, private Timeout void _call_restart_thread(); void _call_yield_thread(); void _call_delete_thread(); + void _call_delete_pd(); void _call_await_request_msg(); void _call_send_request_msg(); void _call_send_reply_msg(); diff --git a/repos/base-hw/src/core/spec/arm/cpu.cc b/repos/base-hw/src/core/spec/arm/cpu.cc index f0a7fa4ea8..7c8c722e31 100644 --- a/repos/base-hw/src/core/spec/arm/cpu.cc +++ b/repos/base-hw/src/core/spec/arm/cpu.cc @@ -87,24 +87,25 @@ void Arm_cpu::mmu_fault_status(Fsr::access_t fsr, Thread_fault & fault) } -void Arm_cpu::switch_to(Arm_cpu::Context&, Arm_cpu::Mmu_context & o) +bool Arm_cpu::active(Arm_cpu::Mmu_context & ctx) { - if (o.cidr == 0) return; + return (Cidr::read() == ctx.cidr); +} - Cidr::access_t cidr = Cidr::read(); - if (cidr != o.cidr) { - /** - * First switch to global mappings only to prevent - * that wrong branch predicts result due to ASID - * and Page-Table not being in sync (see ARM RM B 3.10.4) - */ - Cidr::write(0); - Cpu::synchronization_barrier(); - Ttbr0::write(o.ttbr0); - Cpu::synchronization_barrier(); - Cidr::write(o.cidr); - Cpu::synchronization_barrier(); - } + +void Arm_cpu::switch_to(Arm_cpu::Mmu_context & ctx) +{ + /** + * First switch to global mappings only to prevent + * that wrong branch predicts result due to ASID + * and Page-Table not being in sync (see ARM RM B 3.10.4) + */ + Cidr::write(0); + Cpu::synchronization_barrier(); + Ttbr0::write(ctx.ttbr0); + Cpu::synchronization_barrier(); + Cidr::write(ctx.cidr); + Cpu::synchronization_barrier(); } diff --git a/repos/base-hw/src/core/spec/arm/cpu_support.h b/repos/base-hw/src/core/spec/arm/cpu_support.h index bba89ce42a..33d63848be 100644 --- a/repos/base-hw/src/core/spec/arm/cpu_support.h +++ b/repos/base-hw/src/core/spec/arm/cpu_support.h @@ -104,7 +104,8 @@ struct Genode::Arm_cpu : public Hw::Arm_cpu else Tlbiall::write(0); } - void switch_to(Context&, Mmu_context & o); + bool active(Mmu_context &); + void switch_to(Mmu_context &); static void mmu_fault(Context & c, Kernel::Thread_fault & fault); static void mmu_fault_status(Fsr::access_t fsr, diff --git a/repos/base-hw/src/core/spec/arm/kernel/thread.cc b/repos/base-hw/src/core/spec/arm/kernel/thread.cc index efc67e510a..838a730c79 100644 --- a/repos/base-hw/src/core/spec/arm/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/arm/kernel/thread.cc @@ -67,7 +67,8 @@ void Kernel::Thread::Tlb_invalidation::execute() { }; void Thread::proceed(Cpu & cpu) { - cpu.switch_to(*regs, pd().mmu_regs); + if (!cpu.active(pd().mmu_regs) && type() != CORE) + cpu.switch_to(pd().mmu_regs); regs->cpu_exception = cpu.stack_start(); kernel_to_user_context_switch((static_cast(&*regs)), diff --git a/repos/base-hw/src/core/spec/arm_v8/cpu.cc b/repos/base-hw/src/core/spec/arm_v8/cpu.cc index a06e142f1b..617b7fd70b 100644 --- a/repos/base-hw/src/core/spec/arm_v8/cpu.cc +++ b/repos/base-hw/src/core/spec/arm_v8/cpu.cc @@ -26,12 +26,15 @@ Genode::Cpu::Context::Context(bool privileged) } -void Genode::Cpu::switch_to(Context&, Mmu_context & mmu_context) +bool Genode::Cpu::active(Mmu_context & mmu_context) { - if (mmu_context.id() == 0) return; + return (mmu_context.id() == Ttbr::Asid::get(Ttbr0_el1::read())); +} - if (mmu_context.id() != Ttbr::Asid::get(Ttbr0_el1::read())) - Ttbr0_el1::write(mmu_context.ttbr); + +void Genode::Cpu::switch_to(Mmu_context & mmu_context) +{ + Ttbr0_el1::write(mmu_context.ttbr); } diff --git a/repos/base-hw/src/core/spec/arm_v8/cpu.h b/repos/base-hw/src/core/spec/arm_v8/cpu.h index a9ca159ea3..b9ff4dbde6 100644 --- a/repos/base-hw/src/core/spec/arm_v8/cpu.h +++ b/repos/base-hw/src/core/spec/arm_v8/cpu.h @@ -99,7 +99,8 @@ struct Genode::Cpu : Hw::Arm_64_cpu return Ttbr::Asid::get(ttbr) & 0xffff; } }; - void switch_to(Context&, Mmu_context &); + bool active(Mmu_context &); + void switch_to(Mmu_context &); static void mmu_fault(Context &, Kernel::Thread_fault &); diff --git a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc index e3bb8df148..b724f84e5d 100644 --- a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc @@ -108,7 +108,9 @@ bool Kernel::Pd::invalidate_tlb(Cpu &, addr_t addr, size_t size) void Thread::proceed(Cpu & cpu) { - cpu.switch_to(*regs, pd().mmu_regs); + if (!cpu.active(pd().mmu_regs) && type() != CORE) + cpu.switch_to(pd().mmu_regs); + kernel_to_user_context_switch((static_cast(&*regs)), (void*)cpu.stack_start()); } diff --git a/repos/base-hw/src/core/spec/cortex_a15/cpu.h b/repos/base-hw/src/core/spec/cortex_a15/cpu.h index 3a1ad078cf..ca1a447ec2 100644 --- a/repos/base-hw/src/core/spec/cortex_a15/cpu.h +++ b/repos/base-hw/src/core/spec/cortex_a15/cpu.h @@ -115,11 +115,14 @@ class Genode::Cpu : public Arm_v7_cpu */ static unsigned executing_id() { return Mpidr::Aff_0::get(Mpidr::read()); } - - void switch_to(Context &, Mmu_context & mmu_context) + bool active(Mmu_context & mmu_context) { - if (mmu_context.id() && (Ttbr0_64bit::read() != mmu_context.ttbr0)) - Ttbr0_64bit::write(mmu_context.ttbr0); + return (Ttbr0_64bit::read() == mmu_context.ttbr0); + } + + void switch_to(Mmu_context & mmu_context) + { + Ttbr0_64bit::write(mmu_context.ttbr0); } }; diff --git a/repos/base-hw/src/core/spec/riscv/cpu.cc b/repos/base-hw/src/core/spec/riscv/cpu.cc index e182afe444..e2e77f2aa5 100644 --- a/repos/base-hw/src/core/spec/riscv/cpu.cc +++ b/repos/base-hw/src/core/spec/riscv/cpu.cc @@ -53,22 +53,16 @@ Mmu_context::~Mmu_context() } +bool Genode::Cpu::active(Mmu_context & context) +{ + return Satp::read() == context.satp; +} + + void Genode::Cpu::switch_to(Mmu_context & context) { - /* - * The sstatus register defines to which privilege level - * the machin returns when doing an exception return - */ - bool user = Satp::Asid::get(context.satp); - Sstatus::access_t v = Sstatus::read(); - Sstatus::Spp::set(v, user ? 0 : 1); - Sstatus::write(v); - - /* change the translation table when necessary */ - if (user) { - Satp::write(context.satp); - sfence(); - } + Satp::write(context.satp); + sfence(); } diff --git a/repos/base-hw/src/core/spec/riscv/cpu.h b/repos/base-hw/src/core/spec/riscv/cpu.h index 86820b3504..d719abcb1c 100644 --- a/repos/base-hw/src/core/spec/riscv/cpu.h +++ b/repos/base-hw/src/core/spec/riscv/cpu.h @@ -97,6 +97,7 @@ class Genode::Cpu : public Hw::Riscv_cpu static void invalidate_tlb_by_pid(unsigned const /* pid */) { sfence(); } + bool active(Mmu_context & context); void switch_to(Mmu_context & context); static void mmu_fault(Context & c, Kernel::Thread_fault & f); diff --git a/repos/base-hw/src/core/spec/riscv/kernel/thread.cc b/repos/base-hw/src/core/spec/riscv/kernel/thread.cc index 15f568af26..10814fde15 100644 --- a/repos/base-hw/src/core/spec/riscv/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/riscv/kernel/thread.cc @@ -100,7 +100,16 @@ void Kernel::Thread::_call_cache_invalidate_data_region() { } void Kernel::Thread::proceed(Cpu & cpu) { - cpu.switch_to(_pd->mmu_regs); + /* + * The sstatus register defines to which privilege level + * the machine returns when doing an exception return + */ + Cpu::Sstatus::access_t v = Cpu::Sstatus::read(); + Cpu::Sstatus::Spp::set(v, (type() == USER) ? 0 : 1); + Cpu::Sstatus::write(v); + + if (!cpu.active(pd().mmu_regs) && type() != CORE) + cpu.switch_to(_pd->mmu_regs); asm volatile("csrw sscratch, %1 \n" "mv x31, %0 \n" diff --git a/repos/base-hw/src/core/spec/x86_64/cpu.cc b/repos/base-hw/src/core/spec/x86_64/cpu.cc index 5ef6bc2cff..689e4f9e3d 100644 --- a/repos/base-hw/src/core/spec/x86_64/cpu.cc +++ b/repos/base-hw/src/core/spec/x86_64/cpu.cc @@ -111,11 +111,20 @@ extern void const * const kernel_stack; extern Genode::size_t const kernel_stack_size; -void Genode::Cpu::switch_to(Context & context, Mmu_context &mmu_context) +bool Genode::Cpu::active(Mmu_context &mmu_context) { - if ((context.cs != 0x8) && (mmu_context.cr3 != Cr3::read())) - Cr3::write(mmu_context.cr3); + return (mmu_context.cr3 == Cr3::read()); +} + +void Genode::Cpu::switch_to(Mmu_context &mmu_context) +{ + Cr3::write(mmu_context.cr3); +} + + +void Genode::Cpu::switch_to(Context & context) +{ tss.ist[0] = (addr_t)&context + sizeof(Genode::Cpu_state); addr_t const stack_base = reinterpret_cast(&kernel_stack); diff --git a/repos/base-hw/src/core/spec/x86_64/cpu.h b/repos/base-hw/src/core/spec/x86_64/cpu.h index 35073dcc93..781fa38373 100644 --- a/repos/base-hw/src/core/spec/x86_64/cpu.h +++ b/repos/base-hw/src/core/spec/x86_64/cpu.h @@ -126,7 +126,10 @@ class Genode::Cpu : public Hw::X86_64_cpu * * \param context next CPU context */ - void switch_to(Context & context, Mmu_context &mmu_context); + void switch_to(Context & context); + + bool active(Mmu_context &mmu_context); + void switch_to(Mmu_context &mmu_context); static void mmu_fault(Context & regs, Kernel::Thread_fault & fault); diff --git a/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc b/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc index 9df97877b1..df3332a4de 100644 --- a/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/x86_64/kernel/thread.cc @@ -43,7 +43,10 @@ void Kernel::Thread::_call_cache_invalidate_data_region() { } void Kernel::Thread::proceed(Cpu & cpu) { - cpu.switch_to(*regs, pd().mmu_regs); + if (!cpu.active(pd().mmu_regs) && type() != CORE) + cpu.switch_to(pd().mmu_regs); + + cpu.switch_to(*regs); asm volatile("fxrstor (%1) \n" "mov %0, %%rsp \n" From 4382d29422bfce15f2d1ed789b25d89df7da3ae7 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 14 Jun 2022 11:33:22 +0200 Subject: [PATCH 025/354] base-hw: invalidate TLB only once on ARMv8 Fix genodelabs/genode#4529 --- repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc index b724f84e5d..73cb72bb34 100644 --- a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc @@ -75,10 +75,14 @@ void Thread::exception(Cpu & cpu) void Kernel::Thread::Tlb_invalidation::execute() { }; -bool Kernel::Pd::invalidate_tlb(Cpu &, addr_t addr, size_t size) +bool Kernel::Pd::invalidate_tlb(Cpu & cpu, addr_t addr, size_t size) { using namespace Genode; + /* only apply to the active cpu */ + if (cpu.id() != Cpu::executing_id()) + return false; + /** * The kernel part of the address space is mapped as global * therefore we have to invalidate it differently From f4f2b456b602a74d39362405f07a80bf4073adb5 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 14 Jun 2022 11:33:54 +0200 Subject: [PATCH 026/354] base-hw: invalidate VM TLB entries in deletion This commit introduces a hypervisor calling interface. The host kernel can use it to either switch to a guest VM, or to invalidate the TLB with regard to a specified VM id. The VM-specific TLB invalidation is called whenever a VM (Vcpu) gets destroyed. Fix genodelabs/genode#4528 --- repos/base-hw/src/core/kernel/vm.h | 2 + .../core/spec/arm_v7/trustzone/kernel/vm.cc | 3 + .../arm_v7/virtualization/exception_vector.s | 31 +++++-- .../spec/arm_v7/virtualization/hypervisor.h | 55 ++++++++++++ .../spec/arm_v7/virtualization/kernel/vm.cc | 24 +++-- .../arm_v8/virtualization/exception_vector.s | 89 +++++++++++-------- .../spec/arm_v8/virtualization/hypervisor.h | 52 +++++++++++ .../spec/arm_v8/virtualization/kernel/vm.cc | 17 ++-- 8 files changed, 219 insertions(+), 54 deletions(-) create mode 100644 repos/base-hw/src/core/spec/arm_v7/virtualization/hypervisor.h create mode 100644 repos/base-hw/src/core/spec/arm_v8/virtualization/hypervisor.h diff --git a/repos/base-hw/src/core/kernel/vm.h b/repos/base-hw/src/core/kernel/vm.h index bc7301e577..06a069a743 100644 --- a/repos/base-hw/src/core/kernel/vm.h +++ b/repos/base-hw/src/core/kernel/vm.h @@ -77,6 +77,8 @@ class Kernel::Vm : private Kernel::Object, public Cpu_job Kernel::Signal_context & context, Identity & id); + ~Vm(); + /** * Inject an interrupt to this VM * diff --git a/repos/base-hw/src/core/spec/arm_v7/trustzone/kernel/vm.cc b/repos/base-hw/src/core/spec/arm_v7/trustzone/kernel/vm.cc index 968786b6d2..e6cc8f2d00 100644 --- a/repos/base-hw/src/core/spec/arm_v7/trustzone/kernel/vm.cc +++ b/repos/base-hw/src/core/spec/arm_v7/trustzone/kernel/vm.cc @@ -38,6 +38,9 @@ Vm::Vm(Irq::Pool & user_irq_pool, } +Vm::~Vm() {} + + void Vm::exception(Cpu & cpu) { switch(_state.cpu_exception) { diff --git a/repos/base-hw/src/core/spec/arm_v7/virtualization/exception_vector.s b/repos/base-hw/src/core/spec/arm_v7/virtualization/exception_vector.s index 837483f817..e2808a1670 100644 --- a/repos/base-hw/src/core/spec/arm_v7/virtualization/exception_vector.s +++ b/repos/base-hw/src/core/spec/arm_v7/virtualization/exception_vector.s @@ -15,7 +15,7 @@ push { r0 } mrc p15, 4, r0, c1, c1, 0 /* read HCR register */ tst r0, #1 /* check VM bit */ - beq _host_to_vm + beq _from_host mov r0, #\exception_type b _vm_to_host .endm /* _vm_exit */ @@ -47,10 +47,27 @@ _vt_dab_entry: _vm_exit 5 _vt_irq_entry: _vm_exit 6 _vt_trp_entry: _vm_exit 8 -_host_to_vm: +_from_host: + pop { r0 } + cmp r0, #0 + beq _to_vm + cmp r0, #1 + beq _invalidate_tlb + eret + + +_invalidate_tlb: + push { r3, r4 } + mrrc p15, 6, r3, r4, c2 /* save VTTBR */ + mcrr p15, 6, r1, r2, c2 /* write VTTBR */ + mcr p15, 0, r0, c8, c3, 0 /* TLBIALLIS */ + mcrr p15, 6, r3, r4, c2 /* restore VTTBR */ + eret + +_to_vm: push { r1 } - ldr r0, [sp, #1*4] - add r0, r0, #13*4 + push { r2 } + add r0, r1, #13*4 ldmia r0!, { r1-r5 } msr sp_usr, r1 mov lr, r2 @@ -115,6 +132,7 @@ _host_to_vm: ldmia r0, {r0-r12} /* load vm's r0-r12 */ eret + _vm_to_host: push { r0 } /* push cpu excep. */ ldr r0, [sp, #3*4] /* load vm state ptr */ @@ -218,6 +236,7 @@ _vm_to_host: /* host kernel must jump to this point to switch to a vm */ -.global hypervisor_enter_vm -hypervisor_enter_vm: +.global hypervisor_call +hypervisor_call: hvc #0 + bx lr diff --git a/repos/base-hw/src/core/spec/arm_v7/virtualization/hypervisor.h b/repos/base-hw/src/core/spec/arm_v7/virtualization/hypervisor.h new file mode 100644 index 0000000000..d9935902d6 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v7/virtualization/hypervisor.h @@ -0,0 +1,55 @@ +/* + * \brief Interface between kernel and hypervisor + * \author Stefan Kalkowski + * \date 2022-06-13 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _SPEC__ARM_V7__VIRTUALIZATION_HYPERVISOR_H_ +#define _SPEC__ARM_V7__VIRTUALIZATION_HYPERVISOR_H_ + +#include +#include + +namespace Hypervisor { + + struct Host_context; + + enum Call_number { + WORLD_SWITCH = 0, + TLB_INVALIDATE = 1, + }; + + using Call_arg = Genode::umword_t; + using Call_ret = Genode::umword_t; + + extern "C" + Call_ret hypervisor_call(Call_arg call_id, + Call_arg arg0, + Call_arg arg1); + + + inline void invalidate_tlb(Genode::uint64_t vttbr) + { + hypervisor_call(TLB_INVALIDATE, + (vttbr & 0xffffffff), + ((vttbr >> 32U) & 0xffffffff)); + } + + + inline void switch_world(Genode::Vm_state & vm_state, + Host_context & host_state) + { + hypervisor_call(WORLD_SWITCH, + (Call_arg)&vm_state, + (Call_arg)&host_state); + } +} + +#endif /* _SPEC__ARM_V7__VIRTUALIZATION_HYPERVISOR_H_ */ diff --git a/repos/base-hw/src/core/spec/arm_v7/virtualization/kernel/vm.cc b/repos/base-hw/src/core/spec/arm_v7/virtualization/kernel/vm.cc index d73b76a22e..416110121e 100644 --- a/repos/base-hw/src/core/spec/arm_v7/virtualization/kernel/vm.cc +++ b/repos/base-hw/src/core/spec/arm_v7/virtualization/kernel/vm.cc @@ -19,6 +19,7 @@ #include #include #include +#include namespace Kernel { @@ -41,7 +42,7 @@ namespace Kernel { using namespace Kernel; -struct Host_context +struct Hypervisor::Host_context { Cpu::Ttbr_64bit::access_t vttbr; Cpu::Hcr::access_t hcr; @@ -61,15 +62,13 @@ struct Host_context } vt_host_context; -extern "C" void hypervisor_enter_vm(Genode::Vm_state&, Host_context&); - - -static Host_context & host_context(Cpu & cpu) +static Hypervisor::Host_context & host_context(Cpu & cpu) { - static Genode::Constructible host_context[NR_OF_CPUS]; + static Genode::Constructible + host_context[NR_OF_CPUS]; if (!host_context[cpu.id()].constructed()) { host_context[cpu.id()].construct(); - Host_context & c = *host_context[cpu.id()]; + Hypervisor::Host_context & c = *host_context[cpu.id()]; c.sp = cpu.stack_start(); c.ttbr0 = Cpu::Ttbr0_64bit::read(); c.ttbr1 = Cpu::Ttbr1_64bit::read(); @@ -152,6 +151,15 @@ Kernel::Vm::Vm(Irq::Pool & user_irq_pool, } +Kernel::Vm::~Vm() +{ + Cpu::Ttbr_64bit::access_t vttbr = + Cpu::Ttbr_64bit::Ba::masked((Cpu::Ttbr_64bit::access_t)_id.table); + Cpu::Ttbr_64bit::Asid::set(vttbr, _id.id); + Hypervisor::invalidate_tlb(vttbr); +} + + void Kernel::Vm::exception(Cpu & cpu) { switch(_state.cpu_exception) { @@ -190,7 +198,7 @@ void Kernel::Vm::proceed(Cpu & cpu) _state.esr_el2 = Cpu::Hstr::init(); _state.hpfar_el2 = Cpu::Hcr::init(); - hypervisor_enter_vm(_state, host_context(cpu)); + Hypervisor::switch_world(_state, host_context(cpu)); } diff --git a/repos/base-hw/src/core/spec/arm_v8/virtualization/exception_vector.s b/repos/base-hw/src/core/spec/arm_v8/virtualization/exception_vector.s index 8011bfeead..a159d81c34 100644 --- a/repos/base-hw/src/core/spec/arm_v8/virtualization/exception_vector.s +++ b/repos/base-hw/src/core/spec/arm_v8/virtualization/exception_vector.s @@ -22,24 +22,34 @@ .global hypervisor_exception_vector hypervisor_exception_vector: .rept 16 - add sp, sp, #-16 /* push x0, x1 to stack */ - stp x0, x1, [sp] - mrs x1, hcr_el2 /* read HCR register */ - tst x1, #1 /* check VM bit */ - beq _host_to_vm /* if VM bit is not set, switch to VM */ - ldr x0, [sp, #32] /* otherwise, load vm_state pointer */ - adr x1, . /* hold exception vector offset in x1 */ - and x1, x1, #0xf80 - b _vm_to_host + add sp, sp, #-16 /* push x29, x30 to stack */ + stp x29, x30, [sp] + mrs x30, hcr_el2 /* read HCR register */ + tst x30, #1 /* check VM bit */ + beq _from_host /* if VM bit is not set, its a host call */ + ldr x29, [sp, #32] /* otherwise, load vm_state pointer */ + adr x30, . /* hold exception vector offset in x30 */ + and x30, x30, #0xf80 + b _from_vm .balign 128 .endr -_host_to_vm: +_from_host: + ldp x29, x30, [sp], #2*8 /* pop x29, x30 from stack */ + cmp x0, #0 + beq _to_vm + cmp x0, #1 + beq _invalidate_tlb + eret - add sp, sp, #-16 /* push arg2 (vm pic state) to stack */ - str x2, [sp] +_to_vm: + add sp, sp, #-16 /* push arg1/2 (vm/host state to stack */ + stp x1, x2, [sp] + add sp, sp, #-16 /* push arg3 (vm pic state) to stack */ + str x3, [sp] - msr vttbr_el2, x3 /* stage2 table pointer was arg3 */ + msr vttbr_el2, x4 /* stage2 table pointer was arg4 */ + mov x0, x1 add x0, x0, #31*8 /* skip x0...x30, loaded later */ @@ -179,27 +189,38 @@ _host_to_vm: eret -_vm_to_host: + +_invalidate_tlb: + msr vttbr_el2, x1 + tlbi vmalle1is + msr vttbr_el2, xzr + eret + + +_from_vm: /********************* ** Save vm context ** *********************/ /** general-purpose register **/ - add x0, x0, #2*8 /* skip x0 and x1 for now */ - stp x2, x3, [x0], #2*8 - stp x4, x5, [x0], #2*8 - stp x6, x7, [x0], #2*8 - stp x8, x9, [x0], #2*8 - stp x10, x11, [x0], #2*8 - stp x12, x13, [x0], #2*8 - stp x14, x15, [x0], #2*8 - stp x16, x17, [x0], #2*8 - stp x18, x19, [x0], #2*8 - stp x20, x21, [x0], #2*8 - stp x22, x23, [x0], #2*8 - stp x24, x25, [x0], #2*8 - stp x26, x27, [x0], #2*8 + stp x0, x1, [x29], #2*8 + stp x2, x3, [x29], #2*8 + stp x4, x5, [x29], #2*8 + stp x6, x7, [x29], #2*8 + stp x8, x9, [x29], #2*8 + stp x10, x11, [x29], #2*8 + stp x12, x13, [x29], #2*8 + stp x14, x15, [x29], #2*8 + stp x16, x17, [x29], #2*8 + stp x18, x19, [x29], #2*8 + stp x20, x21, [x29], #2*8 + stp x22, x23, [x29], #2*8 + stp x24, x25, [x29], #2*8 + stp x26, x27, [x29], #2*8 + mov x0, x29 + mov x1, x30 + ldp x29, x30, [sp], #2*8 /* pop x29, x30 from stack */ stp x28, x29, [x0], #2*8 str x30, [x0], #1*8 @@ -284,11 +305,8 @@ _vm_to_host: mov x0, #0b111 msr cnthctl_el2, x0 - - ldp x0, x1, [sp], #2*8 /* pop x0, x1 from stack */ - ldr x29, [sp], #2*8 /* pop vm pic state from stack */ - ldp x2, x30, [sp], #2*8 /* pop vm, and host state from stack */ - stp x0, x1, [x2] /* save x0, x1 to vm state */ + ldr x29, [sp], #2*8 /* pop vm pic state from stack */ + ldp x2, x30, [sp], #2*8 /* pop vm, and host state from stack */ /********************** @@ -364,6 +382,7 @@ _vm_to_host: eret /* host kernel must jump to this point to switch to a vm */ -.global hypervisor_enter_vm -hypervisor_enter_vm: +.global hypervisor_call +hypervisor_call: hvc #0 + ret diff --git a/repos/base-hw/src/core/spec/arm_v8/virtualization/hypervisor.h b/repos/base-hw/src/core/spec/arm_v8/virtualization/hypervisor.h new file mode 100644 index 0000000000..b58193fb22 --- /dev/null +++ b/repos/base-hw/src/core/spec/arm_v8/virtualization/hypervisor.h @@ -0,0 +1,52 @@ +/* + * \brief Interface between kernel and hypervisor + * \author Stefan Kalkowski + * \date 2022-06-13 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _SPEC__ARM_V8__VIRTUALIZATION_HYPERVISOR_H_ +#define _SPEC__ARM_V8__VIRTUALIZATION_HYPERVISOR_H_ + +#include + +namespace Hypervisor { + + enum Call_number { + WORLD_SWITCH = 0, + TLB_INVALIDATE = 1, + }; + + using Call_arg = Genode::umword_t; + using Call_ret = Genode::umword_t; + + extern "C" + Call_ret hypervisor_call(Call_arg call_id, + Call_arg arg0, + Call_arg arg1, + Call_arg arg2, + Call_arg arg3); + + + inline void invalidate_tlb(Call_arg ttbr) + { + hypervisor_call(TLB_INVALIDATE, ttbr, 0, 0, 0); + } + + + inline void switch_world(Call_arg guest_state, + Call_arg host_state, + Call_arg pic_state, + Call_arg ttbr) + { + hypervisor_call(WORLD_SWITCH, guest_state, host_state, pic_state, ttbr); + } +} + +#endif /* _SPEC__ARM_V8__VIRTUALIZATION_HYPERVISOR_H_ */ diff --git a/repos/base-hw/src/core/spec/arm_v8/virtualization/kernel/vm.cc b/repos/base-hw/src/core/spec/arm_v8/virtualization/kernel/vm.cc index 6db8317560..30b6962865 100644 --- a/repos/base-hw/src/core/spec/arm_v8/virtualization/kernel/vm.cc +++ b/repos/base-hw/src/core/spec/arm_v8/virtualization/kernel/vm.cc @@ -23,14 +23,12 @@ #include #include +#include + using Genode::addr_t; using Kernel::Cpu; using Kernel::Vm; -extern void * kernel_stack; -extern "C" void hypervisor_enter_vm(addr_t vm, addr_t host, - addr_t pic, addr_t guest_table); - static Genode::Vm_state & host_context(Cpu & cpu) { @@ -154,6 +152,15 @@ Vm::Vm(Irq::Pool & user_irq_pool, } +Vm::~Vm() +{ + Cpu::Vttbr_el2::access_t vttbr_el2 = + Cpu::Vttbr_el2::Ba::masked((Cpu::Vttbr_el2::access_t)_id.table); + Cpu::Vttbr_el2::Asid::set(vttbr_el2, _id.id); + Hypervisor::invalidate_tlb(vttbr_el2); +} + + void Vm::exception(Cpu & cpu) { switch (_state.exception_type) { @@ -197,7 +204,7 @@ void Vm::proceed(Cpu & cpu) addr_t pic = Hw::Mm::el2_addr(&_vcpu_context.pic); addr_t host = Hw::Mm::el2_addr(&host_context(cpu)); - hypervisor_enter_vm(guest, host, pic, vttbr_el2); + Hypervisor::switch_world(guest, host, pic, vttbr_el2); } From b1195508ba52467dada3c9e476f3a2ab4a372077 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 3 Jun 2022 14:17:46 +0200 Subject: [PATCH 027/354] platform_drv: avoid filtering of dev in ALL policy ACPICA needs access to the host bridge 0:0.0 on Intel, which is also accessed by the Intel display driver. Since for the Intel display driver the PCI device is specified in the policy explicitly, the PCI device is filtered out for the ACPICA driver which uses the policy "ALL". Issue #4532 --- .../os/src/drivers/platform/legacy/x86/pci_session_component.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h b/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h index 68a8f7ecba..c157edf06c 100644 --- a/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h +++ b/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h @@ -405,7 +405,7 @@ class Platform::Session_component : public Rpc_object return; /* if this bdf is used by some policy - deny */ - if (find_dev_in_policy(bdf)) + if (alias != "ALL" && find_dev_in_policy(bdf)) return; throw true; From c2d9fbca9b92f46ae10a16c2d19b1a659678ea52 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 25 May 2022 11:15:09 +0200 Subject: [PATCH 028/354] acpi_drv: report Intel opregion copy acpica and the Intel display driver tries to use the Intel Opregion simultaneously on Genode, which is not supported nor wanted for IO_MEM region as which it is handled. Attempts to remove the access to the region was not successful, since some SSDT table contains ACPI AML code which is executed regularly and read/write the Opregion. The patch adds support to make a copy of the Intel Opregion and report it as is. The copy was sufficient to make the Intel display driver working to find and lookup the Intel VBT (video bios table) information to setup all connectors on a Fujitsu U7411 docking station. Issue #4531 --- repos/os/src/drivers/acpi/acpi.cc | 98 +++++++++++++++++++- repos/os/src/drivers/acpi/intel_opregion.cc | 57 ++++++++++++ repos/os/src/drivers/acpi/intel_opregion.h | 41 ++++++++ repos/os/src/drivers/acpi/spec/x86/target.mk | 3 +- 4 files changed, 197 insertions(+), 2 deletions(-) create mode 100644 repos/os/src/drivers/acpi/intel_opregion.cc create mode 100644 repos/os/src/drivers/acpi/intel_opregion.h diff --git a/repos/os/src/drivers/acpi/acpi.cc b/repos/os/src/drivers/acpi/acpi.cc index a4ff2d1dd0..41670466ad 100644 --- a/repos/os/src/drivers/acpi/acpi.cc +++ b/repos/os/src/drivers/acpi/acpi.cc @@ -11,7 +11,7 @@ */ /* - * Copyright (C) 2009-2017 Genode Labs GmbH + * Copyright (C) 2009-2022 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. @@ -28,6 +28,7 @@ #include "acpi.h" #include "memory.h" +#include "intel_opregion.h" using namespace Genode; @@ -412,6 +413,95 @@ class Pci_config_space : public List::Element static List _list; return &_list; } + + struct Config_space : Mmio + { + struct Vendor : Register<0x00, 16> { enum { INTEL = 0x8086 }; }; + struct Class : Register<0x0b, 8> { enum { DISPLAY = 0x3 }; }; + struct Asls : Register<0xfc, 32> { }; + + Config_space(addr_t mmio) : Mmio(mmio) { } + }; + + struct Opregion : Mmio + { + struct Minor : Register<0x16, 8> { }; + struct Major : Register<0x17, 8> { }; + struct MBox : Register<0x58, 32> { + struct Asle : Bitfield<2, 1> { }; + }; + struct Asle_ardy : Register<0x300, 32> { }; + struct Asle_rvda : Register<0x3ba, 64> { }; + struct Asle_rvds : Register<0x3c2, 32> { }; + + Opregion(addr_t mmio) : Mmio(mmio) { } + }; + + static void intel_opregion(Env &env) + { + for (auto *e = list()->first(); e; e = e->next()) { + if (e->_bdf_start != 0u) /* BDF 0:0.0 */ + continue; + + auto const config_offset = 8u * 2; /* BDF 0:2.0 */ + auto const config_size = 4096; + + if (e->_func_count <= config_offset) + continue; + + Attached_io_mem_dataspace pci_config(env, e->_base + + config_offset * config_size, + config_size); + Config_space device((addr_t)pci_config.local_addr()); + + if ((device.read() != Config_space::Vendor::INTEL) || + (device.read() != Config_space::Class::DISPLAY)) + continue; + + enum { + OPREGION_SIZE = 2 * 4096 + }; + + addr_t const phys_asls = device.read(); + if (!phys_asls) + continue; + + addr_t asls_size = OPREGION_SIZE; + + { + Attached_io_mem_dataspace map_asls(env, phys_asls, asls_size); + Opregion opregion((addr_t)map_asls.local_addr()); + + auto const rvda = opregion.read(); + auto const rvds = opregion.read(); + + if (opregion.read() && + opregion.read() >= 2 && rvda && rvds) { + + /* 2.0 rvda is physical, 2.1+ rvda is relative offset */ + if (opregion.read() > 2 || + opregion.read() >= 1) { + + if (rvda > asls_size) + asls_size += rvda - asls_size; + asls_size += opregion.read(); + } else { + warning("rvda/rvds unsupported case"); + } + } + } + + /* + * Intel_opregion requires access to the opregion memory later + * on used by acpica. Therefore the code must be executed here + * and finished, before the acpi report is sent. + * With a valid acpi report the acpica driver starts to run + * and would collide with Intel_opregion. + */ + static Acpi::Intel_opregion opregion_report { env, phys_asls, + asls_size }; + } + } }; @@ -1580,5 +1670,11 @@ void Acpi::generate_report(Genode::Env &env, Genode::Allocator &alloc) } } } + + /* + * Intel opregion lookup & parsing must be finished before acpi + * report is sent, therefore the invocation is placed exactly here. + */ + Pci_config_space::intel_opregion(env); }); } diff --git a/repos/os/src/drivers/acpi/intel_opregion.cc b/repos/os/src/drivers/acpi/intel_opregion.cc new file mode 100644 index 0000000000..488714b8eb --- /dev/null +++ b/repos/os/src/drivers/acpi/intel_opregion.cc @@ -0,0 +1,57 @@ +/* + * \brief Lookup Intel opregion region and report it as is (plain data) + * \author Alexander Boettcher + * \date 2022-05-25 + */ + + /* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include + +#include "intel_opregion.h" + +void Acpi::Intel_opregion::generate_report(Genode::Env &env, + addr_t const region_phys, + addr_t const region_size) +{ + try { + addr_t const phys_addr_offset = region_phys & 0xffful; + addr_t const memory_size = region_size + phys_addr_offset; + + /* create ram dataspace with space for io_mem address + size */ + Attached_io_mem_dataspace io_mem { env, region_phys, memory_size }; + Attached_ram_dataspace report_mem { env.ram(), env.rm(), + memory_size + sizeof(addr_t) * 2 }; + + auto mem_local = report_mem.local_addr(); + + /* copy io_mem to ram dataspace and preserve offset */ + memcpy(mem_local + phys_addr_offset, io_mem.local_addr(), + region_size); + + Dataspace_client report_ds(report_mem.cap()); + + /* report also io_mem address and io_mem size (!equal to ds size) */ + auto report_phys_ptr = (addr_t*)(mem_local + report_ds.size() - sizeof(addr_t) * 2); + auto report_phys_size = (addr_t*)(mem_local + report_ds.size() - sizeof(addr_t)); + + *report_phys_ptr = region_phys; + *report_phys_size = region_size; + + /* create report */ + _report.construct(env, "intel_opregion", "intel_opregion", + report_ds.size()); + _report->enabled(true); + _report->report(report_mem.local_addr(), report_ds.size()); + + } catch (...) { + Genode::warning("Intel opregion region copy failed"); + } +} diff --git a/repos/os/src/drivers/acpi/intel_opregion.h b/repos/os/src/drivers/acpi/intel_opregion.h new file mode 100644 index 0000000000..1023fdc89a --- /dev/null +++ b/repos/os/src/drivers/acpi/intel_opregion.h @@ -0,0 +1,41 @@ +/* + * \brief Lookup Intel opregion and report it as is (plain data) + * \author Alexander Boettcher + * \date 2022-05-25 + */ + + /* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _INTEL_OPREGION_REPORTER_H_ +#define _INTEL_OPREGION_REPORTER_H_ + +/* Genode includes */ +#include + +namespace Acpi { + class Intel_opregion; + using namespace Genode; +} + +class Acpi::Intel_opregion +{ + private: + + Constructible _report { }; + + void generate_report(Env &env, addr_t, addr_t); + + public: + + Intel_opregion(Env &env, addr_t phys_base, addr_t size) + { + generate_report(env, phys_base, size); + } +}; + +#endif /* _INTEL_OPREGION_REPORTER_H_ */ diff --git a/repos/os/src/drivers/acpi/spec/x86/target.mk b/repos/os/src/drivers/acpi/spec/x86/target.mk index 831a337726..e03b8e5f72 100644 --- a/repos/os/src/drivers/acpi/spec/x86/target.mk +++ b/repos/os/src/drivers/acpi/spec/x86/target.mk @@ -1,6 +1,6 @@ TARGET = acpi_drv REQUIRES = x86 -SRC_CC = main.cc acpi.cc smbios_table_reporter.cc +SRC_CC = main.cc acpi.cc smbios_table_reporter.cc intel_opregion.cc LIBS = base INC_DIR = $(PRG_DIR)/../.. @@ -8,5 +8,6 @@ INC_DIR = $(PRG_DIR)/../.. vpath main.cc $(PRG_DIR)/../.. vpath acpi.cc $(PRG_DIR)/../.. vpath smbios_table_reporter.cc $(PRG_DIR)/../.. +vpath intel_opregion.cc $(PRG_DIR)/../.. CC_CXX_WARN_STRICT_CONVERSION = From 88118b133af380b9c58a31f248dd5efb6a29890a Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 20 May 2022 14:11:48 +0200 Subject: [PATCH 029/354] intel_fb: request copy of Intel opregion acpica and the Intel display driver tries to use the Intel Opregion simultaneously on Genode, which is not supported nor wanted for IO_MEM region as which it is handled. Attempts to remove the access to the region was not successful, since some SSDT table contains ACPI AML code which is executed regularly and read/write the Opregion. The patch adds support to read in a copy of the Intel Opregion done by the acpi_drv component. The copy was sufficient to make the Intel display driver working to find and lookup the Intel VBT (video bios table) information to setup all connectors on a Fujitsu U7411 docking station. Fixes #4531 --- repos/base/run/platform_drv.inc | 1 + repos/pc/run/intel_fb.run | 3 + .../drivers/framebuffer/intel/pc/lx_emul.c | 5 +- .../drivers/framebuffer/intel/pc/lx_emul.h | 1 + .../framebuffer/intel/pc/opregion_io_mem.cc | 70 +++++++++++++++++++ .../drivers/framebuffer/intel/pc/target.inc | 1 + 6 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc diff --git a/repos/base/run/platform_drv.inc b/repos/base/run/platform_drv.inc index c442dff71d..3da9f74d87 100644 --- a/repos/base/run/platform_drv.inc +++ b/repos/base/run/platform_drv.inc @@ -188,6 +188,7 @@ proc platform_drv_config {} { + } diff --git a/repos/pc/run/intel_fb.run b/repos/pc/run/intel_fb.run index 0ae21947d4..7265214d59 100644 --- a/repos/pc/run/intel_fb.run +++ b/repos/pc/run/intel_fb.run @@ -68,6 +68,9 @@ append config { + + + diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c index afb1f8ec99..2c0c20a3b3 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c @@ -215,6 +215,9 @@ void intel_gt_init_early(struct intel_gt * gt, struct drm_i915_private * i915) init_llist_head(>->watchdog.list); lx_emul_trace(__func__); + + /* disable panel self refresh (required for FUJITSU S937/S938) */ + i915->params.enable_psr = 0; } @@ -242,7 +245,7 @@ void * memremap(resource_size_t offset, size_t size, unsigned long flags) { lx_emul_trace(__func__); - return NULL; + return intel_io_mem_map(offset, size); } diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h index b6444c51c0..7dc6902aa1 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h +++ b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h @@ -39,6 +39,7 @@ unsigned int lx_emul_io_port_inl(unsigned short port); void *emul_alloc_shmem_file_buffer(unsigned long); +void * intel_io_mem_map(unsigned long offset, unsigned long size); #include "lx_i915.h" diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc b/repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc new file mode 100644 index 0000000000..b97e7d56d5 --- /dev/null +++ b/repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc @@ -0,0 +1,70 @@ +/* + * \brief Linux emulation environment specific to this driver - Intel opregion + * \author Alexander Boettcher + * \date 2022-01-21 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + + +#include +#include +#include +#include + +#include +#include +#include + + +extern "C" void * intel_io_mem_map(unsigned long const phys, + unsigned long const size) +{ + using namespace Genode; + + static Constructible rom_opregion { }; + static addr_t opregion_start = 0; + static addr_t opregion_size = 0; + + if (!rom_opregion.constructed()) { + try { + rom_opregion.construct(Lx_kit::env().env, "intel_opregion"); + + Dataspace_client ds_client(rom_opregion->cap()); + + auto mem_local = rom_opregion->local_addr(); + opregion_start = *(addr_t*)(mem_local + ds_client.size() - sizeof(addr_t) * 2); + opregion_size = *(addr_t*)(mem_local + ds_client.size() - sizeof(addr_t)); + + if (opregion_size > ds_client.size()) + opregion_size = ds_client.size(); + } catch (...) { + error("Intel opregion ROM lookup failed"); + if (rom_opregion.constructed()) + rom_opregion.destruct(); + return nullptr; + } + } + + if ((opregion_start <= phys) && + (phys + size <= opregion_start + opregion_size)) { + + try { + auto ptr = ((addr_t)rom_opregion->local_addr()) + + (phys - opregion_start) + (phys & 0xffful); + return (void *)ptr; + } catch (...) { + error("Intel opregion lookup failed"); + return nullptr; + } + } + + warning("Unknown memremap range ", Hex_range(phys, size)); + + return nullptr; +} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc index ef119180c2..235ce2e1b5 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc @@ -11,6 +11,7 @@ INC_DIR += $(REL_PRG_DIR)/shadow SRC_CC += main.cc SRC_CC += misc.cc SRC_CC += emul.cc +SRC_CC += opregion_io_mem.cc SRC_C += dummies.c SRC_C += lx_emul.c SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c)) From 80981dbefbfb5f980097368bedf4ee70132ef180 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 9 Jun 2022 12:48:37 +0200 Subject: [PATCH 030/354] intel_fb: re-evalute max resolution on unplug On connector unplug the overall resolution of all available active connectors can shrink and must be considered to potentially re-create the Capture connection with smaller resolution size. Additionally, update the documentation. Issue #4531 --- .../src/drivers/framebuffer/intel/pc/README | 19 ++++++-- .../drivers/framebuffer/intel/pc/lx_user.c | 48 ++++++++++++------- repos/pc/src/test/framebuffer/intel/main.cc | 2 +- 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/README b/repos/pc/src/drivers/framebuffer/intel/pc/README index 0a6212b01f..4d78cf1f63 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/README +++ b/repos/pc/src/drivers/framebuffer/intel/pc/README @@ -20,9 +20,14 @@ Each of the connectors can be configured explicitly in terms of resolution and whether it should be enabled or not. This looks like the following: ! -! +! +! ! +The resolution can be configured exactly by the reported mode_id or by +the width/height/hz attributes. In the latter case the driver will take the +first matching mode out of multiple matching modes potentially. + When the configuration changes during runtime, the driver will adapt to it. In this case, it will also change the current virtual resolution to the maximum of the configured resolutions in width and height, and it will inform its client @@ -47,12 +52,18 @@ in the configuration as follows: The exported report has the following format: ! -! -! +! +! +! ... +! +! +! +! +! +! ! ... ! ! -! ! The brightness attribute is reported only if the hardware supports it. diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/lx_user.c b/repos/pc/src/drivers/framebuffer/intel/pc/lx_user.c index 9799e7e1bb..ab8864a6a5 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/lx_user.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/lx_user.c @@ -50,7 +50,25 @@ static void preferred_mode(struct drm_display_mode *prefer) /* check for connector configuration on Genode side */ lx_emul_i915_connector_config(connector->name, &conf_mode); - if (!conf_mode.enabled || !conf_mode.width || !conf_mode.height) + if (!conf_mode.enabled) + continue; + + if (conf_mode.id) { + unsigned mode_id = 0; + list_for_each_entry(mode, &connector->modes, head) { + mode_id ++; + + if (!mode || conf_mode.id != mode_id) + continue; + + conf_mode.width = mode->hdisplay; + conf_mode.height = mode->vdisplay; + + break; + } + } + + if (!conf_mode.width || !conf_mode.height) continue; if (conf_mode.width * conf_mode.height > prefer->hdisplay * prefer->vdisplay) { @@ -154,6 +172,10 @@ static bool reconfigure(void * data) /* data is adjusted if virtual resolution is not same size as physical fb */ report_fb_info = *i915_fb()->fbdev; + if (mode_preferred.hdisplay && mode_preferred.vdisplay) { + report_fb_info.var.xres_virtual = mode_preferred.hdisplay; + report_fb_info.var.yres_virtual = mode_preferred.vdisplay; + } drm_client_for_each_modeset(mode_set, &(i915_fb()->client)) { struct drm_display_mode *mode_match = NULL; @@ -182,7 +204,10 @@ static bool reconfigure(void * data) continue; /* use mode id if configured and matches exactly */ - if (conf_mode.id && (conf_mode.id == mode_id)) { + if (conf_mode.id) { + if (conf_mode.id != mode_id) + continue; + mode_match = mode; break; } @@ -225,16 +250,9 @@ static bool reconfigure(void * data) if (!mode_match) { /* use first mode */ mode_match = mode; - /* set up preferred resolution as virtual, if nothing is enforced */ - if (!conf_mode.preferred && - mode_preferred.hdisplay && - mode_preferred.vdisplay) { - conf_mode.preferred = 1; - conf_mode.width = mode_preferred.hdisplay; - conf_mode.height = mode_preferred.vdisplay; - } - no_match = mode->hdisplay != conf_mode.width || - mode->vdisplay != conf_mode.height; + + if (conf_mode.enabled) + no_match = true; } if (mode_match != mode) @@ -267,12 +285,6 @@ static bool reconfigure(void * data) retry = true; else { report_fb = true; - - /* report forced resolution */ - if (conf_mode.preferred) { - report_fb_info.var.xres_virtual = conf_mode.width; - report_fb_info.var.yres_virtual = conf_mode.height; - } } } diff --git a/repos/pc/src/test/framebuffer/intel/main.cc b/repos/pc/src/test/framebuffer/intel/main.cc index e50fe5cb14..d3ee857e9a 100644 --- a/repos/pc/src/test/framebuffer/intel/main.cc +++ b/repos/pc/src/test/framebuffer/intel/main.cc @@ -79,7 +79,7 @@ void Framebuffer_controller::_update_connector_config(Xml_generator & xml, w = mode.attribute_value("width", 0); h = mode.attribute_value("height", 0); z = mode.attribute_value("hz", 0); - if (w >= width) { + if (w * h >= width * height) { width = w; height = h; if (z > hz) From f1af6545022877f9ae42f9721d334f1459d232c2 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 9 Jun 2022 12:45:11 +0200 Subject: [PATCH 031/354] intel_fb: add apply_on_hotplug attribute Make it configurable, whether on a hotplug event the current valid Genode config for the driver will be re-evaluated. By default it will be re-evaluated. Issue #4531 --- repos/pc/src/drivers/framebuffer/intel/pc/README | 15 +++++++++------ repos/pc/src/drivers/framebuffer/intel/pc/main.cc | 15 +++++++++++++-- repos/pc/src/test/framebuffer/intel/main.cc | 2 +- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/README b/repos/pc/src/drivers/framebuffer/intel/pc/README index 4d78cf1f63..cad8de7123 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/README +++ b/repos/pc/src/drivers/framebuffer/intel/pc/README @@ -4,14 +4,17 @@ Default behaviour ~~~~~~~~~~~~~~~~~ When no configuration is provided to the driver, it will switch on all devices -connected to the graphics card. It will use the best resolution as +connected to the graphics card. It will use the highest resolution as provided by the BIOS or EDID information from the display devices for each connector. The virtual resolution delivered to the client is the maximum in -width and height of the different connectors. The framebuffer memory is -directly exported to the client of the driver. When newly connected devices are -detected by the hardware, the new connectors are enabled, probed, and again the -'best' resolution will be chosen for the device. Nevertheless, it won't have an -effect on the virtual resolution. +width and height of the active connectors. + +When newly connected devices are detected by the hardware, the new connectors +are enabled, probed, and again the highest resolution across all active +connectors will be chosen. By default, the current config of the driver will +be re-read and re-applied. This behaviour can be disabled by + +! Configuration ~~~~~~~~~~~~~ diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/main.cc b/repos/pc/src/drivers/framebuffer/intel/pc/main.cc index 02f427390e..3bbc4f0482 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/main.cc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/main.cc @@ -123,6 +123,18 @@ struct Framebuffer::Driver timer.sigh(timer_handler); timer.trigger_periodic(20*1000); } + + void report_updated() + { + bool apply_config = true; + + if (config.valid()) + apply_config = config.xml().attribute_value("apply_on_hotplug", apply_config); + + /* trigger re-read config on connector change */ + if (apply_config) + Genode::Signal_transmitter(config_handler).submit(); + } }; @@ -270,8 +282,7 @@ void lx_emul_i915_report_connector(void * lx_data, void * genode_xml, lx_emul_i915_iterate_modes(lx_data, &xml); }); - /* re-read config on connector change */ - Genode::Signal_transmitter(driver(Lx_kit::env().env).config_handler).submit(); + driver(Lx_kit::env().env).report_updated(); } diff --git a/repos/pc/src/test/framebuffer/intel/main.cc b/repos/pc/src/test/framebuffer/intel/main.cc index d3ee857e9a..b0cd2371df 100644 --- a/repos/pc/src/test/framebuffer/intel/main.cc +++ b/repos/pc/src/test/framebuffer/intel/main.cc @@ -103,7 +103,7 @@ void Framebuffer_controller::_update_fb_config(Xml_node const &report) static char buf[4096]; Xml_generator xml(buf, sizeof(buf), "config", [&] { -// xml.attribute("poll", "5000"); + xml.attribute("apply_on_hotplug", "no"); xml.node("report", [&] { xml.attribute("connectors", "yes"); }); From f1265205b95779b24ab92752ec600e00917e6785 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 2 Jun 2022 13:14:42 +0200 Subject: [PATCH 032/354] sculpt: add intel_opregion report/rom routing Issue #4531 --- repos/gems/sculpt/drivers/pc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/gems/sculpt/drivers/pc b/repos/gems/sculpt/drivers/pc index 0dae762755..36e426d774 100644 --- a/repos/gems/sculpt/drivers/pc +++ b/repos/gems/sculpt/drivers/pc @@ -52,6 +52,7 @@ + @@ -83,6 +84,7 @@ + @@ -248,6 +250,7 @@ + From 6e4c3b2fd65f2a2de5f35eccc2626b496c98ca71 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 2 Jun 2022 15:39:11 +0200 Subject: [PATCH 033/354] sculpt: support to skip depot archive integration To not integrate referenced depot packages when building a sculpt image, just set the environment variable DEPOT= to be empty. This allows to produce slim images to the price that you have to publish the packages yourself. In that case the sculpt run-script reminds you, and prints the package versions. Fix genodelabs/genode#4530 --- repos/gems/run/sculpt.run | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index 8c70b93d89..f73c3bd108 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -853,8 +853,36 @@ exec sed -i "/config/s/arch=\"\"/arch=\"[depot_spec]\"/" [initial_config_file de ## Depot content integrated in the Sculpt image ## -create_tar_from_depot_binaries [run_dir]/genode/depot.tar \ +## +# Return which kind of depot archive is wanted 'tar' or 'omit' +# +proc depot_archive { } { + + global ::env + + set archive "tar" + if {[info exists ::env(DEPOT)]} { + set archive "$::env(DEPOT)" } + + if {$archive != "omit" && $archive != "tar"} { + puts stderr "Error: invalid value of DEPOT=$archive variable!" } + + return $archive +} + +proc create_depot_archive { } { + global ::env + + if {[depot_archive] == "tar"} { + create_tar_from_depot_binaries [run_dir]/genode/depot.tar \ {*}[pkg_archive_paths [referenced_pkg_values]] + } else { + puts "Do not forget to publish:" + puts [pkg_archive_paths [referenced_pkg_values]] + } +} + +create_depot_archive # From e7fb38834a58114deab050467a90b70897cc2666 Mon Sep 17 00:00:00 2001 From: Piotr Tworek Date: Wed, 15 Jun 2022 23:16:26 +0200 Subject: [PATCH 034/354] virtdev_rom: Add RISC-V platform support. The location of the VirtIO device block is different on RISC-V virt qemu machine. --- repos/os/src/drivers/virtdev_rom/main.cc | 16 ++++--------- .../virtdev_rom/spec/arm/platform_config.h | 23 +++++++++++++++++++ .../drivers/virtdev_rom/spec/arm/target.mk | 5 ++++ .../drivers/virtdev_rom/spec/arm_64/target.mk | 5 ++++ .../virtdev_rom/spec/riscv/platform_config.h | 23 +++++++++++++++++++ .../drivers/virtdev_rom/spec/riscv/target.mk | 5 ++++ .../virtdev_rom/{target.mk => target.inc} | 2 ++ 7 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 repos/os/src/drivers/virtdev_rom/spec/arm/platform_config.h create mode 100644 repos/os/src/drivers/virtdev_rom/spec/arm/target.mk create mode 100644 repos/os/src/drivers/virtdev_rom/spec/arm_64/target.mk create mode 100644 repos/os/src/drivers/virtdev_rom/spec/riscv/platform_config.h create mode 100644 repos/os/src/drivers/virtdev_rom/spec/riscv/target.mk rename repos/os/src/drivers/virtdev_rom/{target.mk => target.inc} (53%) diff --git a/repos/os/src/drivers/virtdev_rom/main.cc b/repos/os/src/drivers/virtdev_rom/main.cc index 4ffe0ca69f..bd57092028 100644 --- a/repos/os/src/drivers/virtdev_rom/main.cc +++ b/repos/os/src/drivers/virtdev_rom/main.cc @@ -21,6 +21,9 @@ #include #include +/* local includes */ +#include "platform_config.h" + namespace Virtdev_rom { using namespace Genode; class Session_component; @@ -81,16 +84,7 @@ class Virtdev_rom::Root : public Root_component struct Virtdev_rom::Main { - enum { - /* Taken from include/hw/arm/virt.h in Qemu source tree. */ - NUM_VIRTIO_TRANSPORTS = 32, - /* Taken from hw/arm/virt.c in Qemu source tree. */ - BASE_ADDRESS = 0x0A000000, - DEVICE_SIZE = 0x200, - IRQ_BASE = 48, - VIRTIO_MMIO_MAGIC = 0x74726976, - }; - + enum { VIRTIO_MMIO_MAGIC = 0x74726976 }; enum { MAX_ROM_SIZE = 4096, DEVICE_NAME_LEN = 64 }; Env &_env; @@ -147,7 +141,7 @@ struct Virtdev_rom::Main Device device { _env, BASE_ADDRESS + idx * DEVICE_SIZE, DEVICE_SIZE }; if (device.read() != VIRTIO_MMIO_MAGIC) { - warning("Found non VirtIO MMIO device @ ", addr); + warning("Found non VirtIO MMIO device @ ", Hex(addr)); continue; } diff --git a/repos/os/src/drivers/virtdev_rom/spec/arm/platform_config.h b/repos/os/src/drivers/virtdev_rom/spec/arm/platform_config.h new file mode 100644 index 0000000000..31772d9302 --- /dev/null +++ b/repos/os/src/drivers/virtdev_rom/spec/arm/platform_config.h @@ -0,0 +1,23 @@ +/* + * \brief ARM specific config for virtio device ROM. + * \author Piotr Tworek + * \date 2022-06-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +namespace Virtdev_rom { + enum { + /* Taken from include/hw/arm/virt.h in Qemu source tree. */ + NUM_VIRTIO_TRANSPORTS = 32, + /* Taken from hw/arm/virt.c in Qemu source tree. */ + BASE_ADDRESS = 0x0A000000, + DEVICE_SIZE = 0x200, + IRQ_BASE = 48, + }; +} diff --git a/repos/os/src/drivers/virtdev_rom/spec/arm/target.mk b/repos/os/src/drivers/virtdev_rom/spec/arm/target.mk new file mode 100644 index 0000000000..a5b7d389b1 --- /dev/null +++ b/repos/os/src/drivers/virtdev_rom/spec/arm/target.mk @@ -0,0 +1,5 @@ +REQUIRES = arm + +INC_DIR = $(PRG_DIR) + +include $(REP_DIR)/src/drivers/virtdev_rom/target.inc diff --git a/repos/os/src/drivers/virtdev_rom/spec/arm_64/target.mk b/repos/os/src/drivers/virtdev_rom/spec/arm_64/target.mk new file mode 100644 index 0000000000..27474ca3a8 --- /dev/null +++ b/repos/os/src/drivers/virtdev_rom/spec/arm_64/target.mk @@ -0,0 +1,5 @@ +REQUIRES = arm_64 + +INC_DIR = $(PRG_DIR)/../arm + +include $(REP_DIR)/src/drivers/virtdev_rom/target.inc diff --git a/repos/os/src/drivers/virtdev_rom/spec/riscv/platform_config.h b/repos/os/src/drivers/virtdev_rom/spec/riscv/platform_config.h new file mode 100644 index 0000000000..804ba778aa --- /dev/null +++ b/repos/os/src/drivers/virtdev_rom/spec/riscv/platform_config.h @@ -0,0 +1,23 @@ +/* + * \brief RISC-V specific config for virtio device ROM. + * \author Piotr Tworek + * \date 2022-06-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +namespace Virtdev_rom { + enum { + /* Taken from include/hw/riscv/virt.h in Qemu source tree. */ + NUM_VIRTIO_TRANSPORTS = 8, + IRQ_BASE = 1, + /* Taken from hw/riscv/virt.c in Qemu source tree. */ + BASE_ADDRESS = 0x10001000, + DEVICE_SIZE = 0x1000, + }; +} diff --git a/repos/os/src/drivers/virtdev_rom/spec/riscv/target.mk b/repos/os/src/drivers/virtdev_rom/spec/riscv/target.mk new file mode 100644 index 0000000000..9932022332 --- /dev/null +++ b/repos/os/src/drivers/virtdev_rom/spec/riscv/target.mk @@ -0,0 +1,5 @@ +REQUIRES = riscv + +INC_DIR = $(PRG_DIR) + +include $(REP_DIR)/src/drivers/virtdev_rom/target.inc diff --git a/repos/os/src/drivers/virtdev_rom/target.mk b/repos/os/src/drivers/virtdev_rom/target.inc similarity index 53% rename from repos/os/src/drivers/virtdev_rom/target.mk rename to repos/os/src/drivers/virtdev_rom/target.inc index b4a142362a..14bf820da2 100644 --- a/repos/os/src/drivers/virtdev_rom/target.mk +++ b/repos/os/src/drivers/virtdev_rom/target.inc @@ -1,3 +1,5 @@ TARGET = virtdev_rom SRC_CC = main.cc LIBS = base + +vpath main.cc $(REP_DIR)/src/drivers/virtdev_rom From 9d417ee2f5ecc3f3dfa2eff41e1029e4f611a4c7 Mon Sep 17 00:00:00 2001 From: Piotr Tworek Date: Wed, 15 Jun 2022 23:18:31 +0200 Subject: [PATCH 035/354] os: Allow VirtIO drivers to be built for RISC-V Just add riscv spec files. The riscv versions should use MMIO transport as ARM versions do. They also should work fine for riscv_qemu machine from genode-riscv repository. --- repos/os/src/drivers/framebuffer/virtio/spec/riscv/target.mk | 3 +++ repos/os/src/drivers/input/virtio/spec/riscv/target.mk | 3 +++ repos/os/src/drivers/nic/virtio/spec/riscv/target.mk | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 repos/os/src/drivers/framebuffer/virtio/spec/riscv/target.mk create mode 100644 repos/os/src/drivers/input/virtio/spec/riscv/target.mk create mode 100644 repos/os/src/drivers/nic/virtio/spec/riscv/target.mk diff --git a/repos/os/src/drivers/framebuffer/virtio/spec/riscv/target.mk b/repos/os/src/drivers/framebuffer/virtio/spec/riscv/target.mk new file mode 100644 index 0000000000..a3ad102711 --- /dev/null +++ b/repos/os/src/drivers/framebuffer/virtio/spec/riscv/target.mk @@ -0,0 +1,3 @@ +REQUIRES = riscv + +include $(REP_DIR)/src/drivers/framebuffer/virtio/target_mmio.inc diff --git a/repos/os/src/drivers/input/virtio/spec/riscv/target.mk b/repos/os/src/drivers/input/virtio/spec/riscv/target.mk new file mode 100644 index 0000000000..ecf75bc827 --- /dev/null +++ b/repos/os/src/drivers/input/virtio/spec/riscv/target.mk @@ -0,0 +1,3 @@ +REQUIRES = riscv + +include $(REP_DIR)/src/drivers/input/virtio/target_mmio.inc diff --git a/repos/os/src/drivers/nic/virtio/spec/riscv/target.mk b/repos/os/src/drivers/nic/virtio/spec/riscv/target.mk new file mode 100644 index 0000000000..20569fd810 --- /dev/null +++ b/repos/os/src/drivers/nic/virtio/spec/riscv/target.mk @@ -0,0 +1,3 @@ +REQUIRES = riscv + +include $(REP_DIR)/src/drivers/nic/virtio/target_mmio.inc From 9393c0136c3654362df18430d5dd057db3fa5c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 23 Jun 2022 15:53:48 +0200 Subject: [PATCH 036/354] pc/wifi: prevent calling driver from pthread Querying the RFKILL state led to execution of the Lx_kit::scheduler by the pthread running the wpa_supplicant. As this may not happen the RFKILL state is now solely managed by the driver and only the cached state is read by the supplicant. Fixes #4537. --- repos/dde_linux/include/wifi/rfkill.h | 1 - repos/pc/src/drivers/wifi/pc/frontend.h | 7 +++++-- repos/pc/src/lib/wifi/lx_emul.c | 4 ++++ repos/pc/src/lib/wifi/uplink.c | 10 +++++++++- repos/pc/src/lib/wifi/wlan.cc | 21 +++++++++++++-------- 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/repos/dde_linux/include/wifi/rfkill.h b/repos/dde_linux/include/wifi/rfkill.h index dd21c84979..37a4266635 100644 --- a/repos/dde_linux/include/wifi/rfkill.h +++ b/repos/dde_linux/include/wifi/rfkill.h @@ -21,6 +21,5 @@ namespace Wifi { } bool wifi_get_rfkill(void); -void wifi_set_rfkill(bool); #endif /* _WIFI__RFKILL_H_ */ diff --git a/repos/pc/src/drivers/wifi/pc/frontend.h b/repos/pc/src/drivers/wifi/pc/frontend.h index 643b609588..aecdb3d746 100644 --- a/repos/pc/src/drivers/wifi/pc/frontend.h +++ b/repos/pc/src/drivers/wifi/pc/frontend.h @@ -62,6 +62,9 @@ /* declare manually as it is a internal hack^Winterface */ extern void wifi_kick_socketcall(); +extern bool _wifi_get_rfkill(void); +extern bool _wifi_set_rfkill(bool); + namespace Wifi { struct Frontend; @@ -343,7 +346,7 @@ struct Wifi::Frontend void _handle_rfkill() { - _rfkilled = wifi_get_rfkill(); + _rfkilled = _wifi_get_rfkill(); /* re-enable scan timer */ if (!_rfkilled) { @@ -407,7 +410,7 @@ struct Wifi::Frontend */ if (config.has_attribute("rfkill")) { bool const blocked = config.attribute_value("rfkill", false); - wifi_set_rfkill(blocked); + _wifi_set_rfkill(blocked); /* * In case we get blocked set rfkilled immediately to prevent diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index f950e464e1..393234e264 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -547,6 +547,10 @@ struct task_struct *rfkill_task_struct_ptr; int lx_emul_rfkill_get_any(void) { + /* + * Since this function may also be called from non EPs + * _do not_ execute _any_ kernel code. + */ return _rfkill_state.rfkilled; } diff --git a/repos/pc/src/lib/wifi/uplink.c b/repos/pc/src/lib/wifi/uplink.c index 3317c50b63..11434c2b10 100644 --- a/repos/pc/src/lib/wifi/uplink.c +++ b/repos/pc/src/lib/wifi/uplink.c @@ -205,16 +205,24 @@ struct netdev_event_notification }; +/* needed for RFKILL state update */ +extern struct task_struct *rfkill_task_struct_ptr; + + static int uplink_netdev_event(struct notifier_block *this, unsigned long event, void *ptr) { /* * For now we ignore what kind of event occurred and simply - * unblock the uplink task. + * unblock the uplink and rfkill task. */ + if (uplink_task_struct_ptr) lx_emul_task_unblock(uplink_task_struct_ptr); + if (rfkill_task_struct_ptr) + lx_emul_task_unblock(rfkill_task_struct_ptr); + return NOTIFY_DONE; } diff --git a/repos/pc/src/lib/wifi/wlan.cc b/repos/pc/src/lib/wifi/wlan.cc index 0532e15307..bac9c19ae7 100644 --- a/repos/pc/src/lib/wifi/wlan.cc +++ b/repos/pc/src/lib/wifi/wlan.cc @@ -36,19 +36,18 @@ extern "C" void lx_emul_rfkill_switch_all(int blocked); static Genode::Signal_context_capability _rfkill_sigh_cap; -bool wifi_get_rfkill(void) + +bool _wifi_get_rfkill(void) { - if (!rfkill_task_struct_ptr) - return false; - - lx_emul_task_unblock(rfkill_task_struct_ptr); - Lx_kit::env().scheduler.schedule(); - + /* + * It is safe to call this from non EP threads as we + * only query a variable. + */ return lx_emul_rfkill_get_any(); } -void wifi_set_rfkill(bool blocked) +void _wifi_set_rfkill(bool blocked) { if (!rfkill_task_struct_ptr) return; @@ -71,6 +70,12 @@ void wifi_set_rfkill(bool blocked) } +bool wifi_get_rfkill(void) +{ + return _wifi_get_rfkill(); +} + + extern "C" unsigned int wifi_ifindex(void) { /* TODO replace with actual qyery */ From 10451652f429ef2ce0394bda16b2f1ecd792f02b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 23 Jun 2022 17:07:10 +0200 Subject: [PATCH 037/354] pc/wifi: avoid late frontend construction Dissolve unintentional dependency between wifi management layer and the control interface of the supplicant. Issue #4537. --- repos/pc/src/drivers/wifi/pc/frontend.h | 12 +++--------- repos/pc/src/drivers/wifi/pc/main.cc | 25 ++++++------------------- 2 files changed, 9 insertions(+), 28 deletions(-) diff --git a/repos/pc/src/drivers/wifi/pc/frontend.h b/repos/pc/src/drivers/wifi/pc/frontend.h index aecdb3d746..5382174798 100644 --- a/repos/pc/src/drivers/wifi/pc/frontend.h +++ b/repos/pc/src/drivers/wifi/pc/frontend.h @@ -333,7 +333,7 @@ struct Wifi::Frontend /* remaining stuff */ - Msg_buffer _msg { }; + Msg_buffer &_msg; Genode::Blockade _notify_blockade { }; @@ -1537,9 +1537,10 @@ struct Wifi::Frontend /** * Constructor */ - Frontend(Genode::Env &env) + Frontend(Genode::Env &env, Msg_buffer &msg_buffer) : _ap_allocator(env.ram(), env.rm()), + _msg(msg_buffer), _rfkill_handler(env.ep(), *this, &Wifi::Frontend::_handle_rfkill), _config_rom(env, "wifi_config"), _config_sigh(env.ep(), *this, &Wifi::Frontend::_handle_config_update), @@ -1622,13 +1623,6 @@ struct Wifi::Frontend * Used by the wpa_supplicant to wait for the front end. */ void block_for_processing() { _notify_lock_lock(); } - - /** - * Return shared memory message buffer - * - * Used for communication between front end and wpa_supplicant. - */ - Msg_buffer &msg_buffer() { return _msg; } }; #endif /* _WIFI_FRONTEND_H_ */ diff --git a/repos/pc/src/drivers/wifi/pc/main.cc b/repos/pc/src/drivers/wifi/pc/main.cc index 75089e190f..4907315cef 100644 --- a/repos/pc/src/drivers/wifi/pc/main.cc +++ b/repos/pc/src/drivers/wifi/pc/main.cc @@ -28,7 +28,7 @@ using namespace Genode; - +static Msg_buffer _wifi_msg_buffer; static Wifi::Frontend *_wifi_frontend = nullptr; @@ -100,6 +100,10 @@ struct Main Main(Genode::Env &env) : env(env) { + _frontend.construct(env, _wifi_msg_buffer); + _wifi_frontend = &*_frontend; + wifi_set_rfkill_sigh(_wifi_frontend->rfkill_sigh()); + _wpa.construct(env, _wpa_startup_blockade); wifi_init(env, _wpa_startup_blockade); @@ -116,24 +120,7 @@ static Main *_main; */ void *wifi_get_buffer(void) { - /* - * XXX creating the front end at this point is merely a hack - * to post-pone its creation - */ - if (_wifi_frontend) - return &_wifi_frontend->msg_buffer(); - - Libc::with_libc([&] () { - - if (_main->_frontend.constructed()) - return; - - _main->_frontend.construct(_main->env); - _wifi_frontend = &*_main->_frontend; - wifi_set_rfkill_sigh(_wifi_frontend->rfkill_sigh()); - }); - - return &_wifi_frontend->msg_buffer(); + return &_wifi_msg_buffer; } From a90abbc22eb22d8941e1c05122fd3168c9516366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Fri, 24 Jun 2022 13:34:35 +0200 Subject: [PATCH 038/354] pc/wifi: get RFKILL state on frontend construction Issue #4537. --- repos/pc/src/drivers/wifi/pc/frontend.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/pc/src/drivers/wifi/pc/frontend.h b/repos/pc/src/drivers/wifi/pc/frontend.h index 5382174798..f7d786c91a 100644 --- a/repos/pc/src/drivers/wifi/pc/frontend.h +++ b/repos/pc/src/drivers/wifi/pc/frontend.h @@ -1581,6 +1581,9 @@ struct Wifi::Frontend /* read in list of APs */ _config_update(false); + /* get initial RFKILL state */ + _handle_rfkill(); + /* kick-off initial scanning */ _handle_scan_timer(); } From 1ca2265fd43dcd3148ef0312c54e5b216ecc88e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Fri, 24 Jun 2022 14:38:30 +0200 Subject: [PATCH 039/354] pc/wifi: do not execute driver on user stack The 'with_libc' call at this point is not necessary and could be harmful as it forces the usage of the user stack for the driver. All code depending on this distinction should only be executed from within the pthread. Issue #4537. --- repos/pc/src/drivers/wifi/pc/main.cc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/repos/pc/src/drivers/wifi/pc/main.cc b/repos/pc/src/drivers/wifi/pc/main.cc index 4907315cef..4485a5c2dc 100644 --- a/repos/pc/src/drivers/wifi/pc/main.cc +++ b/repos/pc/src/drivers/wifi/pc/main.cc @@ -110,8 +110,6 @@ struct Main } }; -static Main *_main; - /** * Return shared-memory message buffer @@ -126,8 +124,5 @@ void *wifi_get_buffer(void) void Libc::Component::construct(Libc::Env &env) { - Libc::with_libc([&] () { - static Main server(env); - _main = &server; - }); + static Main server(env); } From 0b5ad90bdef0d8e8ce58855dabb536f8055df864 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 24 Jun 2022 14:35:53 +0200 Subject: [PATCH 040/354] usb_host: handle control URBs asynchronously In the Genode C API and the DDE Linux USB host driver, turn control URBs into asynchronously handled ones. Fix genodelabs/genode#4535 --- repos/dde_linux/src/lib/lx_emul/usb.c | 290 +++++++++++++++----------- repos/os/include/genode_c_api/usb.h | 51 +++-- repos/os/src/lib/genode_c_api/usb.cc | 35 +++- 3 files changed, 221 insertions(+), 155 deletions(-) diff --git a/repos/dde_linux/src/lib/lx_emul/usb.c b/repos/dde_linux/src/lib/lx_emul/usb.c index 9b440048aa..6206216c62 100644 --- a/repos/dde_linux/src/lib/lx_emul/usb.c +++ b/repos/dde_linux/src/lib/lx_emul/usb.c @@ -48,15 +48,7 @@ static int usb_drv_probe(struct usb_interface *interface, return -ENODEV; } -static void usb_drv_disconnect(struct usb_interface *iface) -{ - struct usb_iface_urbs * urbs = usb_get_intfdata(iface); - if (urbs) { - urbs->in_delete = 1; - usb_kill_anchored_urbs(&urbs->submitted); - kfree(urbs); - } -} +static void usb_drv_disconnect(struct usb_interface *iface) { } static struct usb_driver usb_drv = { @@ -213,12 +205,7 @@ static struct task_struct * usb_rpc_task; static int claim_iface(struct usb_interface * iface) { - struct usb_iface_urbs *urbs = (struct usb_iface_urbs*) - kmalloc(sizeof(struct usb_iface_urbs), GFP_KERNEL); - init_usb_anchor(&urbs->submitted); - urbs->in_delete = 0; - return usb_driver_claim_interface(&usb_drv, iface, urbs); - + return usb_driver_claim_interface(&usb_drv, iface, NULL); } @@ -266,8 +253,13 @@ static int usb_rpc_call(void * data) release_iface(iface); } - if (usb_rpc_args.call == RELEASE_ALL) + if (usb_rpc_args.call == RELEASE_ALL) { + struct usb_iface_urbs * urbs = dev_get_drvdata(&udev->dev); + urbs->in_delete = 1; + usb_kill_anchored_urbs(&urbs->submitted); + urbs->in_delete = 0; usb_reset_device(udev); + } usb_rpc_args.ret = ret; } @@ -337,39 +329,6 @@ struct genode_usb_rpc_callbacks lx_emul_usb_rpc_callbacks = { }; -static genode_usb_request_ret_t -handle_ctrl_request(struct genode_usb_request_control * req, - void * buf, unsigned long size, void * data) -{ - struct usb_device * udev = (struct usb_device *) data; - - int pipe = (req->request_type & 0x80) - ? usb_rcvctrlpipe(udev, 0) : usb_sndctrlpipe(udev, 0); - - int err = usb_control_msg(udev, pipe, req->request, req->request_type, - req->value, req->index, buf, size, req->timeout); - - if (err >= 0) { - req->actual_size = err; - return NO_ERROR; - } - - req->actual_size = 0; - - switch (err) { - case -ENOENT: return INTERFACE_OR_ENDPOINT_ERROR; - case -ENODEV: return NO_DEVICE_ERROR; - case -ESHUTDOWN: return NO_DEVICE_ERROR; - case -EPROTO: return PROTOCOL_ERROR; - case -EILSEQ: return PROTOCOL_ERROR; - case -EPIPE: return STALL_ERROR; - case -ETIMEDOUT: return TIMEOUT_ERROR; - } - - return UNKNOWN_ERROR; -} - - static genode_usb_request_ret_t handle_string_request(struct genode_usb_request_string * req, void * buf, unsigned long size, void * data) @@ -426,26 +385,53 @@ handle_flush_request(unsigned char ep, void * data) return NO_ERROR; } +enum Timer_state { TIMER_OFF, TIMER_ACTIVE, TIMER_TRIGGERED }; + +struct usb_urb_context +{ + genode_usb_session_handle_t session; + genode_usb_request_handle_t request; + struct urb * urb; + struct timer_list timeo; + enum Timer_state timer_state; +}; + static genode_usb_request_ret_t -handle_transfer_response(struct genode_usb_request_transfer * req, +handle_transfer_response(struct genode_usb_request_urb req, void * data) { - struct urb * urb = (struct urb *) data; - + struct usb_urb_context * context = (struct usb_urb_context *) data; + struct urb * urb = context->urb; + struct genode_usb_request_control * ctrl = + genode_usb_get_request_control(&req); + struct genode_usb_request_transfer * transfer = + genode_usb_get_request_transfer(&req); int i; if (urb->status == 0) { - req->actual_size = urb->actual_length; - - if (usb_pipein(urb->pipe)) - for (i = 0; i < urb->number_of_packets; i++) - req->actual_packet_size[i] = urb->iso_frame_desc[i].actual_length; + if (ctrl) + ctrl->actual_size = urb->actual_length; + if (transfer) { + transfer->actual_size = urb->actual_length; + if (usb_pipein(urb->pipe)) + for (i = 0; i < urb->number_of_packets; i++) + transfer->actual_packet_size[i] = + urb->iso_frame_desc[i].actual_length; + } return NO_ERROR; } + if (ctrl) + ctrl->actual_size = 0; + + if (context->timer_state == TIMER_TRIGGERED) + return TIMEOUT_ERROR; + switch (urb->status) { + case -ENOENT: return INTERFACE_OR_ENDPOINT_ERROR; + case -ENODEV: return NO_DEVICE_ERROR; case -ESHUTDOWN: return NO_DEVICE_ERROR; case -EPROTO: return PROTOCOL_ERROR; case -EILSEQ: return PROTOCOL_ERROR; @@ -455,55 +441,83 @@ handle_transfer_response(struct genode_usb_request_transfer * req, } -static struct usb_interface * usb_get_iface_from_urb(struct urb * urb) +static void usb_free_complete_urb(struct urb * urb) { - unsigned i, j; - struct usb_host_endpoint * ep = usb_pipe_endpoint(urb->dev, urb->pipe); - - if (!ep || !urb->dev || !urb->dev->actconfig) - return NULL; - - for (i = 0; i < urb->dev->actconfig->desc.bNumInterfaces; i++) { - struct usb_interface * iface = urb->dev->actconfig->interface[i]; - if (!iface || !iface->cur_altsetting) - continue; - for (j = 0; j < iface->cur_altsetting->desc.bNumEndpoints; j++) { - if (&iface->cur_altsetting->endpoint[j] != ep) - continue; - return iface; - } + if (!urb) + return; + if (urb->setup_packet) + kfree(urb->setup_packet); + if (urb->context) { + struct usb_urb_context * context = + (struct usb_urb_context *) urb->context; + if (context->timer_state != TIMER_OFF) + del_timer_sync(&context->timeo); + kfree(context); } - return NULL; + usb_free_urb(urb); } static void async_complete(struct urb *urb) { - struct usb_interface * iface; - struct usb_iface_urbs * urbs = NULL; + struct usb_iface_urbs * urbs = dev_get_drvdata(&urb->dev->dev); - unsigned long handle = (unsigned long)urb->context; - genode_usb_session_handle_t session = - (genode_usb_session_handle_t) (handle >> 16); - genode_usb_request_handle_t request = - (genode_usb_request_handle_t) (handle & 0xffff); + struct usb_urb_context * context = + (struct usb_urb_context*) urb->context; - genode_usb_ack_request(session, request, - handle_transfer_response, (void*)urb); + genode_usb_ack_request(context->session, context->request, + handle_transfer_response, (void*)context); - iface = usb_get_iface_from_urb(urb); - if (iface) - urbs = usb_get_intfdata(iface); if (!urbs || !urbs->in_delete) { - usb_free_urb(urb); + usb_free_complete_urb(urb); lx_user_handle_io(); } } +static void urb_timeout(struct timer_list *t) +{ + struct usb_urb_context * context = from_timer(context, t, timeo); + context->timer_state = TIMER_TRIGGERED; + usb_kill_urb(context->urb); +} + + +static int fill_ctrl_urb(struct usb_device * udev, + struct genode_usb_request_control * req, + void * handle, + void * buf, + unsigned long size, + int read, + struct urb ** urb) +{ + int pipe = read ? usb_rcvctrlpipe(udev, 0) : usb_sndctrlpipe(udev, 0); + struct usb_ctrlrequest * ucr = + kmalloc(sizeof(struct usb_ctrlrequest), GFP_NOIO); + + *urb = usb_alloc_urb(0, GFP_KERNEL); + + if (!ucr || !*urb) { + if (ucr) kfree(ucr); + if (*urb) usb_free_urb(*urb); + return -ENOMEM; + } + + ucr->bRequestType = req->request_type; + ucr->bRequest = req->request; + ucr->wValue = cpu_to_le16(req->value); + ucr->wIndex = cpu_to_le16(req->index); + ucr->wLength = cpu_to_le16(size); + + usb_fill_control_urb(*urb, udev, pipe, (unsigned char*)ucr, buf, size, + async_complete, handle); + return 0; +} + + static int fill_bulk_urb(struct usb_device * udev, struct genode_usb_request_transfer * req, - unsigned long handle, + void * handle, void * buf, unsigned long size, int read, @@ -516,15 +530,14 @@ static int fill_bulk_urb(struct usb_device * udev, if (!*urb) return -ENOMEM; - usb_fill_bulk_urb(*urb, udev, pipe, buf, size, - async_complete, (void*)handle); + usb_fill_bulk_urb(*urb, udev, pipe, buf, size, async_complete, handle); return 0; } static int fill_irq_urb(struct usb_device * udev, struct genode_usb_request_transfer * req, - unsigned long handle, + void * handle, void * buf, unsigned long size, int read, @@ -551,14 +564,14 @@ static int fill_irq_urb(struct usb_device * udev, polling_interval = req->polling_interval; usb_fill_int_urb(*urb, udev, pipe, buf, size, - async_complete, (void*)handle, polling_interval); + async_complete, handle, polling_interval); return 0; } static int fill_isoc_urb(struct usb_device * udev, struct genode_usb_request_transfer * req, - unsigned long handle, + void * handle, void * buf, unsigned long size, int read, @@ -584,7 +597,7 @@ static int fill_isoc_urb(struct usb_device * udev, (*urb)->transfer_buffer_length = size; (*urb)->number_of_packets = req->number_of_packets; (*urb)->interval = 1 << min(15, ep->desc.bInterval - 1); - (*urb)->context = (void *)handle; + (*urb)->context = handle; (*urb)->transfer_flags = URB_ISO_ASAP | (read ? URB_DIR_IN : URB_DIR_OUT); (*urb)->complete = async_complete; @@ -599,54 +612,71 @@ static int fill_isoc_urb(struct usb_device * udev, static genode_usb_request_ret_t -handle_transfer_request(struct genode_usb_request_transfer * req, - genode_usb_transfer_type_t type, - genode_usb_session_handle_t session_handle, - genode_usb_request_handle_t request_handle, - void * buf, unsigned long size, void * data) +handle_urb_request(struct genode_usb_request_urb req, + genode_usb_session_handle_t session_handle, + genode_usb_request_handle_t request_handle, + void * buf, unsigned long size, void * data) { struct usb_device * udev = (struct usb_device *) data; + struct usb_iface_urbs * urbs = dev_get_drvdata(&udev->dev); + struct genode_usb_request_control * ctrl = + genode_usb_get_request_control(&req); + struct genode_usb_request_transfer * transfer = + genode_usb_get_request_transfer(&req); + int err = 0; - int read = (req->ep & 0x80); - unsigned long handle = session_handle << 16 | request_handle; + int read = transfer ? (transfer->ep & 0x80) : 0; struct urb * urb; - switch (type) { + struct usb_urb_context * context = + kmalloc(sizeof(struct usb_urb_context), GFP_NOIO); + if (!context) + return MEMORY_ERROR; + + context->session = session_handle; + context->request = request_handle; + + switch (req.type) { + case CTRL: + err = fill_ctrl_urb(udev, ctrl, context, buf, size, + (ctrl->request_type & 0x80), &urb); + break; case BULK: - err = fill_bulk_urb(udev, req, handle, buf, size, read, &urb); + err = fill_bulk_urb(udev, transfer, context, buf, size, read, &urb); break; case IRQ: - err = fill_irq_urb(udev, req, handle, buf, size, read, &urb); + err = fill_irq_urb(udev, transfer, context, buf, size, read, &urb); break; case ISOC: - err = fill_isoc_urb(udev, req, handle, buf, size, read, &urb); + err = fill_isoc_urb(udev, transfer, context, buf, size, read, &urb); break; default: printk("Unknown USB transfer request!\n"); return UNKNOWN_ERROR; }; - if (!err) { - struct usb_iface_urbs * urbs; - struct usb_interface * iface = usb_get_iface_from_urb(urb); - if (!iface) { - usb_free_urb(urb); - return NO_DEVICE_ERROR; - } + if (err) + goto free_context; - if (!usb_interface_claimed(iface)) - claim_iface(iface); - urbs = usb_get_intfdata(iface); - usb_anchor_urb(urb, &urbs->submitted); + context->urb = urb; + usb_anchor_urb(urb, &urbs->submitted); + err = usb_submit_urb(urb, GFP_KERNEL); + if (err) + goto free_urb; - err = usb_submit_urb(urb, GFP_KERNEL); - - if (!err) - return NO_ERROR; - - usb_free_urb(urb); + if (ctrl && ctrl->timeout) { + context->timer_state = TIMER_ACTIVE; + timer_setup(&context->timeo, urb_timeout, 0); + mod_timer(&context->timeo, jiffies + msecs_to_jiffies(ctrl->timeout)); } + return 0; + + free_urb: + usb_unanchor_urb(urb); + usb_free_complete_urb(urb); + free_context: + kfree(context); switch (err) { case -ENOENT: return INTERFACE_OR_ENDPOINT_ERROR; case -ENODEV: return NO_DEVICE_ERROR; @@ -659,8 +689,7 @@ handle_transfer_request(struct genode_usb_request_transfer * req, static struct genode_usb_request_callbacks request_callbacks = { - .control_fn = handle_ctrl_request, - .transfer_fn = handle_transfer_request, + .urb_fn = handle_urb_request, .string_fn = handle_string_request, .altsetting_fn = handle_altsetting_request, .config_fn = handle_config_request, @@ -744,6 +773,12 @@ static int raw_notify(struct notifier_block *nb, unsigned long action, void *dat */ unsigned long class; unsigned i; + struct usb_iface_urbs *urbs = (struct usb_iface_urbs*) + kmalloc(sizeof(struct usb_iface_urbs), GFP_KERNEL); + init_usb_anchor(&urbs->submitted); + urbs->in_delete = 0; + dev_set_drvdata(&udev->dev, urbs); + for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) { struct usb_interface * iface = udev->actconfig->interface[i]; @@ -764,7 +799,14 @@ static int raw_notify(struct notifier_block *nb, unsigned long action, void *dat case USB_DEVICE_REMOVE: { + struct usb_iface_urbs * urbs = dev_get_drvdata(&udev->dev); + urbs->in_delete = 1; + usb_kill_anchored_urbs(&urbs->submitted); + kfree(urbs); + + genode_usb_discontinue_device(udev->bus->busnum, udev->devnum); + break; } diff --git a/repos/os/include/genode_c_api/usb.h b/repos/os/include/genode_c_api/usb.h index 207a17e455..1969e02481 100644 --- a/repos/os/include/genode_c_api/usb.h +++ b/repos/os/include/genode_c_api/usb.h @@ -148,8 +148,6 @@ struct genode_usb_request_control }; enum Iso { MAX_PACKETS = 32 }; -enum Transfer { BULK, IRQ, ISOC }; -typedef enum Transfer genode_usb_transfer_type_t; struct genode_usb_request_transfer { @@ -161,6 +159,27 @@ struct genode_usb_request_transfer unsigned long actual_packet_size[MAX_PACKETS]; }; +enum Urb_type { CTRL, BULK, IRQ, ISOC }; +typedef enum Urb_type genode_usb_urb_t; + +struct genode_usb_request_urb +{ + genode_usb_urb_t type; + void * req; +}; + +static inline struct genode_usb_request_control * +genode_usb_get_request_control(struct genode_usb_request_urb * urb) +{ + return (urb->type == CTRL) ? (struct genode_usb_request_control*)urb->req : 0; +} + +static inline struct genode_usb_request_transfer * +genode_usb_get_request_transfer(struct genode_usb_request_urb * urb) +{ + return (urb->type != CTRL) ? (struct genode_usb_request_transfer*)urb->req : 0; +} + enum Request_return_error { NO_ERROR, INTERFACE_OR_ENDPOINT_ERROR, @@ -174,20 +193,13 @@ enum Request_return_error { }; typedef enum Request_return_error genode_usb_request_ret_t; -typedef genode_usb_request_ret_t (*genode_usb_req_ctrl_t) - (struct genode_usb_request_control * req, - void * payload, - unsigned long payload_size, - void * opaque_data); - -typedef genode_usb_request_ret_t (*genode_usb_req_transfer_t) - (struct genode_usb_request_transfer * req, - genode_usb_transfer_type_t type, - genode_usb_session_handle_t session_handle, - genode_usb_request_handle_t request_handle, - void * payload, - unsigned long payload_size, - void * opaque_data); +typedef genode_usb_request_ret_t (*genode_usb_req_urb_t) + (struct genode_usb_request_urb req, + genode_usb_session_handle_t session_handle, + genode_usb_request_handle_t request_handle, + void * payload, + unsigned long payload_size, + void * opaque_data); typedef genode_usb_request_ret_t (*genode_usb_req_string_t) (struct genode_usb_request_string * req, @@ -205,12 +217,11 @@ typedef genode_usb_request_ret_t (*genode_usb_req_flush_t) (unsigned char ep, void * opaque_data); typedef genode_usb_request_ret_t (*genode_usb_response_t) - (struct genode_usb_request_transfer * req, - void * opaque_data); + (struct genode_usb_request_urb req, + void * opaque_data); struct genode_usb_request_callbacks { - genode_usb_req_ctrl_t control_fn; - genode_usb_req_transfer_t transfer_fn; + genode_usb_req_urb_t urb_fn; genode_usb_req_string_t string_fn; genode_usb_req_altsetting_t altsetting_fn; genode_usb_req_config_t config_fn; diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 48d8b86c62..5dd2815468 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -450,23 +450,20 @@ bool genode_usb_session::request(genode_usb_request_callbacks & req, void * data addr, p.size(), data), p); break; case Packet_descriptor::CTRL: - _ack(req.control_fn((genode_usb_request_control*)&p.control, - addr, p.size(), data), p); + packets[idx].construct(p); + req.urb_fn({ CTRL, &p.control }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::BULK: packets[idx].construct(p); - req.transfer_fn((genode_usb_request_transfer*)&p.transfer, BULK, - _id, idx, addr, p.size(), data); + req.urb_fn({ BULK, &p.transfer }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::IRQ: packets[idx].construct(p); - req.transfer_fn((genode_usb_request_transfer*)&p.transfer, IRQ, - _id, idx, addr, p.size(), data); + req.urb_fn({ IRQ, &p.transfer }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::ISOC: packets[idx].construct(p); - req.transfer_fn((genode_usb_request_transfer*)&p.transfer, ISOC, - _id, idx, addr, p.size(), data); + req.urb_fn({ ISOC, &p.transfer }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::ALT_SETTING: _ack(req.altsetting_fn(p.interface.number, @@ -491,9 +488,25 @@ void genode_usb_session::handle_response(genode_usb_request_handle_t id, genode_usb_response_t callback, void * callback_data) { - Usb::Packet_descriptor p = *packets[id]; - _ack(callback((genode_usb_request_transfer*)&p.transfer, - callback_data), p); + using Packet_descriptor = Usb::Packet_descriptor; + + Packet_descriptor p = *packets[id]; + switch (p.type) { + case Packet_descriptor::CTRL: + _ack(callback({ CTRL, &p.control }, callback_data), p); + break; + case Packet_descriptor::BULK: + _ack(callback({ BULK, &p.transfer }, callback_data), p); + break; + case Packet_descriptor::IRQ: + _ack(callback({ IRQ, &p.transfer }, callback_data), p); + break; + case Packet_descriptor::ISOC: + _ack(callback({ ISOC, &p.transfer }, callback_data), p); + break; + default: + error("Invalid packet descriptor for asynchronous response"); + }; packets[id].destruct(); } From 4234659cac1688d32db1c1de939a148639271a93 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 28 Jun 2022 11:50:16 +0200 Subject: [PATCH 041/354] pci_decode: fix iteration bounds of PCI buses Fix #4539 --- repos/os/src/app/pci_decode/main.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/repos/os/src/app/pci_decode/main.cc b/repos/os/src/app/pci_decode/main.cc index c988c27a78..dff83fc295 100644 --- a/repos/os/src/app/pci_decode/main.cc +++ b/repos/os/src/app/pci_decode/main.cc @@ -204,8 +204,9 @@ void Main::parse_pci_config_spaces(Xml_node & xml) addr_t const base = xml.attribute_value("base", 0UL); size_t const count = xml.attribute_value("count", 0UL); - bus_t const bus_off = (bus_t) (start / FUNCTION_PER_BUS_MAX); - bus_t const bus_count = (bus_t) (count / FUNCTION_PER_BUS_MAX); + bus_t const bus_off = (bus_t) (start / FUNCTION_PER_BUS_MAX); + bus_t const last_bus = (bus_t) + (max(1UL, (count / FUNCTION_PER_BUS_MAX)) - 1); if (host_bridge_num++) { error("We do not support multiple host bridges by now!"); @@ -213,14 +214,16 @@ void Main::parse_pci_config_spaces(Xml_node & xml) } new (heap) Bridge(bridge_registry, { bus_off, 0, 0 }, - bus_off, bus_count); + bus_off, last_bus); pci_config_ds.construct(env, base, count * FUNCTION_CONFIG_SPACE_SIZE); - for (bus_t bus = 0; bus < bus_count; bus++) + bus_t bus = 0; + do parse_pci_bus((bus_t)bus, bus_off, (addr_t)pci_config_ds->local_addr(), base, generator); + while (bus++ < last_bus); pci_config_ds.destruct(); }); From baf4a85d23ac94249904f8db323fbd2dced42e09 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 27 Jun 2022 12:19:54 +0200 Subject: [PATCH 042/354] nic_router: find link sides w/o exceptions Replaces the former implementation of find_by_id at the data structure for links. This method used to return a reference to the found object and threw an exception if no matching object was found. The new implementation doesn't return anything and doesn't throw exceptions. It takes two lambda arguments instead. One for handling the case that a match was found with a reference to the matching object as argument and another for handling the case that no object matches. This way, expensive exception handling can be avoided and object references stay in a local scope. Ref #4536 --- repos/os/src/server/nic_router/interface.cc | 184 +++++++++++--------- repos/os/src/server/nic_router/link.cc | 32 +--- repos/os/src/server/nic_router/link.h | 47 ++++- 3 files changed, 149 insertions(+), 114 deletions(-) diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index d609e27c1c..a204153747 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -978,29 +978,37 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, ip.dst(), _dst_port(prot, prot_base) }; /* try to route via existing ICMP links */ - try { - Link_side const &local_side = local_domain.links(prot).find_by_id(local_id); - Link &link = local_side.link(); - bool const client = local_side.is_client(); - Link_side &remote_side = client ? link.server() : link.client(); - Domain &remote_domain = remote_side.domain(); - if (_config().verbose()) { - log("[", local_domain, "] using ", l3_protocol_name(prot), - " link: ", link); - } - _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); - ip.src(remote_side.dst_ip()); - ip.dst(remote_side.src_ip()); - _src_port(prot, prot_base, remote_side.dst_port()); - _dst_port(prot, prot_base, remote_side.src_port()); + bool done { false }; + local_domain.links(prot).find_by_id( + local_id, + [&] /* handle_match */ (Link_side const &local_side) + { + Link &link = local_side.link(); + bool const client = local_side.is_client(); + Link_side &remote_side = client ? link.server() : link.client(); + Domain &remote_domain = remote_side.domain(); + if (_config().verbose()) { + log("[", local_domain, "] using ", l3_protocol_name(prot), + " link: ", link); + } + _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); + ip.src(remote_side.dst_ip()); + ip.dst(remote_side.src_ip()); + _src_port(prot, prot_base, remote_side.dst_port()); + _dst_port(prot, prot_base, remote_side.src_port()); - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface._pass_prot(eth, size_guard, ip, prot, prot_base, prot_size); - }); - _link_packet(prot, prot_base, link, client); + remote_domain.interfaces().for_each([&] (Interface &interface) { + interface._pass_prot( + eth, size_guard, ip, prot, prot_base, prot_size); + }); + _link_packet(prot, prot_base, link, client); + done = true; + }, + [&] /* handle_no_match */ () { } + ); + if (done) { return; } - catch (Link_side_tree::No_match) { } /* try to route via ICMP rules */ try { @@ -1041,48 +1049,54 @@ void Interface::_handle_icmp_error(Ethernet_frame ð, void *const embed_prot_base = _prot_base(embed_prot, size_guard, embed_ip); Link_side_id const local_id = { embed_ip.dst(), _dst_port(embed_prot, embed_prot_base), embed_ip.src(), _src_port(embed_prot, embed_prot_base) }; - try { - /* lookup a link state that matches the embedded transport packet */ - Link_side const &local_side = local_domain.links(embed_prot).find_by_id(local_id); - Link &link = local_side.link(); - bool const client = local_side.is_client(); - Link_side &remote_side = client ? link.server() : link.client(); - Domain &remote_domain = remote_side.domain(); - /* print out that the link is used */ - if (_config().verbose()) { - log("[", local_domain, "] using ", l3_protocol_name(embed_prot), - " link: ", link); + /* lookup a link state that matches the embedded transport packet */ + local_domain.links(embed_prot).find_by_id( + local_id, + [&] /* handle_match */ (Link_side const &local_side) + { + Link &link = local_side.link(); + bool const client = local_side.is_client(); + Link_side &remote_side = client ? link.server() : link.client(); + Domain &remote_domain = remote_side.domain(); + + /* print out that the link is used */ + if (_config().verbose()) { + log("[", local_domain, "] using ", + l3_protocol_name(embed_prot), " link: ", link); + } + /* adapt source and destination of Ethernet frame and IP packet */ + _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); + if (remote_side.dst_ip() == remote_domain.ip_config().interface().address) { + ip.src(remote_side.dst_ip()); + } + ip.dst(remote_side.src_ip()); + + /* adapt source and destination of embedded IP and transport packet */ + embed_ip.src(remote_side.src_ip()); + embed_ip.dst(remote_side.dst_ip()); + _src_port(embed_prot, embed_prot_base, remote_side.src_port()); + _dst_port(embed_prot, embed_prot_base, remote_side.dst_port()); + + /* update checksum of both IP headers and the ICMP header */ + embed_ip.update_checksum(); + icmp.update_checksum(icmp_sz - sizeof(Icmp_packet)); + ip.update_checksum(); + + /* send adapted packet to all interfaces of remote domain */ + remote_domain.interfaces().for_each([&] (Interface &interface) { + interface.send(eth, size_guard); + }); + /* refresh link only if the error is not about an ICMP query */ + if (embed_prot != L3_protocol::ICMP) { + _link_packet(embed_prot, embed_prot_base, link, client); } + }, + [&] /* handle_no_match */ () + { + throw Drop_packet("no link that matches packet embedded in " + "ICMP error"); } - /* adapt source and destination of Ethernet frame and IP packet */ - _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); - if (remote_side.dst_ip() == remote_domain.ip_config().interface().address) { - ip.src(remote_side.dst_ip()); - } - ip.dst(remote_side.src_ip()); - - /* adapt source and destination of embedded IP and transport packet */ - embed_ip.src(remote_side.src_ip()); - embed_ip.dst(remote_side.dst_ip()); - _src_port(embed_prot, embed_prot_base, remote_side.src_port()); - _dst_port(embed_prot, embed_prot_base, remote_side.dst_port()); - - /* update checksum of both IP headers and the ICMP header */ - embed_ip.update_checksum(); - icmp.update_checksum(icmp_sz - sizeof(Icmp_packet)); - ip.update_checksum(); - - /* send adapted packet to all interfaces of remote domain */ - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface.send(eth, size_guard); - }); - /* refresh link only if the error is not about an ICMP query */ - if (embed_prot != L3_protocol::ICMP) { - _link_packet(embed_prot, embed_prot_base, link, client); } - } - /* drop packet if there is no matching link */ - catch (Link_side_tree::No_match) { - throw Drop_packet("no link that matches packet embedded in ICMP error"); } + ); } @@ -1206,29 +1220,39 @@ void Interface::_handle_ip(Ethernet_frame ð, ip.dst(), _dst_port(prot, prot_base) }; /* try to route via existing UDP/TCP links */ - try { - Link_side const &local_side = local_domain.links(prot).find_by_id(local_id); - Link &link = local_side.link(); - bool const client = local_side.is_client(); - Link_side &remote_side = client ? link.server() : link.client(); - Domain &remote_domain = remote_side.domain(); - if (_config().verbose()) { - log("[", local_domain, "] using ", l3_protocol_name(prot), - " link: ", link); - } - _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); - ip.src(remote_side.dst_ip()); - ip.dst(remote_side.src_ip()); - _src_port(prot, prot_base, remote_side.dst_port()); - _dst_port(prot, prot_base, remote_side.src_port()); + bool done { false }; + local_domain.links(prot).find_by_id( + local_id, + [&] /* handle_match */ (Link_side const &local_side) + { + Link &link = local_side.link(); + bool const client = local_side.is_client(); + Link_side &remote_side = + client ? link.server() : link.client(); - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface._pass_prot(eth, size_guard, ip, prot, prot_base, prot_size); - }); - _link_packet(prot, prot_base, link, client); + Domain &remote_domain = remote_side.domain(); + if (_config().verbose()) { + log("[", local_domain, "] using ", l3_protocol_name(prot), + " link: ", link); + } + _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); + ip.src(remote_side.dst_ip()); + ip.dst(remote_side.src_ip()); + _src_port(prot, prot_base, remote_side.dst_port()); + _dst_port(prot, prot_base, remote_side.src_port()); + + remote_domain.interfaces().for_each([&] (Interface &interface) { + interface._pass_prot( + eth, size_guard, ip, prot, prot_base, prot_size); + }); + _link_packet(prot, prot_base, link, client); + done = true; + }, + [&] /* handle_no_match */ () { } + ); + if (done) { return; } - catch (Link_side_tree::No_match) { } /* try to route via forward rules */ if (local_id.dst_ip == local_intf.address) { diff --git a/repos/os/src/server/nic_router/link.cc b/repos/os/src/server/nic_router/link.cc index 33636d5546..37210359aa 100644 --- a/repos/os/src/server/nic_router/link.cc +++ b/repos/os/src/server/nic_router/link.cc @@ -33,9 +33,9 @@ constexpr size_t Link_side_id::data_size() } -bool Link_side_id::operator == (Link_side_id const &id) const +bool Link_side_id::operator != (Link_side_id const &id) const { - return memcmp(id.data_base(), data_base(), data_size()) == 0; + return memcmp(id.data_base(), data_base(), data_size()) != 0; } @@ -62,20 +62,6 @@ Link_side::Link_side(Domain &domain, } -Link_side const &Link_side::find_by_id(Link_side_id const &id) const -{ - if (id == _id) { - return *this; } - - bool const side = id > _id; - Link_side *const link_side = Avl_node::child(side); - if (!link_side) { - throw Link_side_tree::No_match(); } - - return link_side->find_by_id(id); -} - - void Link_side::print(Output &output) const { Genode::print(output, "src ", src_ip(), ":", src_port(), @@ -89,20 +75,6 @@ bool Link_side::is_client() const } -/******************** - ** Link_side_tree ** - ********************/ - -Link_side const &Link_side_tree::find_by_id(Link_side_id const &id) const -{ - Link_side *const link_side = first(); - if (!link_side) { - throw No_match(); } - - return link_side->find_by_id(id); -} - - /********** ** Link ** **********/ diff --git a/repos/os/src/server/nic_router/link.h b/repos/os/src/server/nic_router/link.h index f46d3509cb..e3bf938c7a 100644 --- a/repos/os/src/server/nic_router/link.h +++ b/repos/os/src/server/nic_router/link.h @@ -78,7 +78,7 @@ struct Net::Link_side_id ** Standard operators ** ************************/ - bool operator == (Link_side_id const &id) const; + bool operator != (Link_side_id const &id) const; bool operator > (Link_side_id const &id) const; } @@ -101,7 +101,33 @@ class Net::Link_side : public Genode::Avl_node Link_side_id const &id, Link &link); - Link_side const &find_by_id(Link_side_id const &id) const; + template + + void find_by_id(Link_side_id const &id, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (id != _id) { + + Link_side *const link_side_ptr { + Avl_node::child(id > _id) }; + + if (link_side_ptr != nullptr) { + + link_side_ptr->find_by_id( + id, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + + } else { + + handle_match(*this); + } + } bool is_client() const; @@ -135,9 +161,22 @@ class Net::Link_side : public Genode::Avl_node struct Net::Link_side_tree : Genode::Avl_tree { - struct No_match : Genode::Exception { }; + template - Link_side const &find_by_id(Link_side_id const &id) const; + void find_by_id(Link_side_id const &id, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (first() != nullptr) { + + first()->find_by_id(id, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } }; From 5d14adebb56c7c8da1e7f9e2dbc8217f3b039951 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 27 Jun 2022 14:36:48 +0200 Subject: [PATCH 043/354] nic_router: find direct rules w/o exceptions Replaces the former implementation of the 'find_longest_prefix_match' method at the data structure for direct rules. This method used to return a reference to the found object and threw an exception if no matching object was found. The new implementation doesn't return anything and doesn't throw exceptions. It takes two lambda arguments instead. One for handling the case that a match was found with a reference to the matching object as argument and another for handling the case that no object matches. This way, expensive exception handling can be avoided and object references stay in a local scope. Ref #4536 --- repos/os/src/server/nic_router/direct_rule.h | 33 +++-- repos/os/src/server/nic_router/interface.cc | 145 ++++++++++++------- 2 files changed, 115 insertions(+), 63 deletions(-) diff --git a/repos/os/src/server/nic_router/direct_rule.h b/repos/os/src/server/nic_router/direct_rule.h index e4ccfe93e2..a33bb69590 100644 --- a/repos/os/src/server/nic_router/direct_rule.h +++ b/repos/os/src/server/nic_router/direct_rule.h @@ -73,21 +73,36 @@ struct Net::Direct_rule_list : List { using Base = List; - struct No_match : Genode::Exception { }; - - T const &longest_prefix_match(Ipv4_address const &ip) const + template + void + find_longest_prefix_match(Ipv4_address const &ip, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const { - /* first match is sufficient as the list is prefix-size-sorted */ - for (T const *curr = Base::first(); curr; curr = curr->next()) { - if (curr->dst().prefix_matches(ip)) { - return *curr; } + /* + * Simply handling the first match is sufficient as the list is + * sorted by the prefix size in descending order. + */ + for (T const *rule_ptr = Base::first(); + rule_ptr != nullptr; + rule_ptr = rule_ptr->next()) { + + if (rule_ptr->dst().prefix_matches(ip)) { + + handle_match(*rule_ptr); + return; + } } - throw No_match(); + handle_no_match(); } void insert(T &rule) { - /* ensure that the list stays prefix-size-sorted (descending) */ + /* + * Ensure that the list stays sorted by the prefix size in descending + * order. + */ T *behind = nullptr; for (T *curr = Base::first(); curr; curr = curr->next()) { if (rule.dst().prefix >= curr->dst().prefix) { diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index a204153747..29b86e2c57 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1011,21 +1011,25 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, } /* try to route via ICMP rules */ - try { - Ip_rule const &rule = - local_domain.icmp_rules().longest_prefix_match(ip.dst()); + local_domain.icmp_rules().find_longest_prefix_match( + ip.dst(), + [&] /* handle_match */ (Ip_rule const &rule) + { + if(_config().verbose()) { + log("[", local_domain, "] using ICMP rule: ", rule); } - if(_config().verbose()) { - log("[", local_domain, "] using ICMP rule: ", rule); } - - Domain &remote_domain = rule.domain(); - _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); - _nat_link_and_pass(eth, size_guard, ip, prot, prot_base, prot_size, - local_id, local_domain, remote_domain); + Domain &remote_domain = rule.domain(); + _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); + _nat_link_and_pass(eth, size_guard, ip, prot, prot_base, prot_size, + local_id, local_domain, remote_domain); + done = true; + }, + [&] /* handle_no_match */ () { } + ); + if (done) { return; } - catch (Ip_rule_list::No_match) { } throw Bad_transport_protocol(); } @@ -1166,6 +1170,7 @@ void Interface::_handle_ip(Ethernet_frame ð, } /* try to route via transport layer rules */ + bool done { false }; try { L3_protocol const prot = ip.protocol(); size_t const prot_size = size_guard.unconsumed(); @@ -1220,7 +1225,6 @@ void Interface::_handle_ip(Ethernet_frame ð, ip.dst(), _dst_port(prot, prot_base) }; /* try to route via existing UDP/TCP links */ - bool done { false }; local_domain.links(prot).find_by_id( local_id, [&] /* handle_match */ (Link_side const &local_side) @@ -1278,44 +1282,58 @@ void Interface::_handle_ip(Ethernet_frame ð, } /* try to route via transport and permit rules */ try { - Transport_rule const &transport_rule = - _transport_rules(local_domain, prot).longest_prefix_match(local_id.dst_ip); + _transport_rules(local_domain, prot).find_longest_prefix_match( + local_id.dst_ip, + [&] /* handle_match */ (Transport_rule const &transport_rule) + { + Permit_rule const &permit_rule = + transport_rule.permit_rule(local_id.dst_port); - Permit_rule const &permit_rule = - transport_rule.permit_rule(local_id.dst_port); + if(_config().verbose()) { + log("[", local_domain, "] using ", + l3_protocol_name(prot), " rule: ", transport_rule, + " ", permit_rule); + } + Domain &remote_domain = permit_rule.domain(); + _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); + _nat_link_and_pass( + eth, size_guard, ip, prot, prot_base, prot_size, + local_id, local_domain, remote_domain); - if(_config().verbose()) { - log("[", local_domain, "] using ", l3_protocol_name(prot), - " rule: ", transport_rule, " ", permit_rule); + done = true; + }, + [&] /* handle_no_match */ () { } + ); + if (done) { + return; } - Domain &remote_domain = permit_rule.domain(); - _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); - _nat_link_and_pass(eth, size_guard, ip, prot, prot_base, prot_size, - local_id, local_domain, remote_domain); - return; } - catch (Transport_rule_list::No_match) { } catch (Permit_single_rule_tree::No_match) { } } catch (Interface::Bad_transport_protocol) { } /* try to route via IP rules */ - try { - Ip_rule const &rule = - local_domain.ip_rules().longest_prefix_match(ip.dst()); - - if(_config().verbose()) { - log("[", local_domain, "] using IP rule: ", rule); } - - Domain &remote_domain = rule.domain(); - _adapt_eth(eth, ip.dst(), pkt, remote_domain); - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface._pass_ip(eth, size_guard, ip); - }); + local_domain.ip_rules().find_longest_prefix_match( + ip.dst(), + [&] /* handle_match */ (Ip_rule const &rule) + { + if(_config().verbose()) { + log("[", local_domain, "] using IP rule: ", rule); } + Domain &remote_domain = rule.domain(); + _adapt_eth(eth, ip.dst(), pkt, remote_domain); + remote_domain.interfaces().for_each( + [&] (Interface &interface) { + interface._pass_ip(eth, size_guard, ip); + } + ); + done = true; + }, + [&] /* handle_no_match */ () { } + ); + if (done) { return; } - catch (Ip_rule_list::No_match) { } /* give up and drop packet */ _send_icmp_dst_unreachable(local_intf, eth, ip, @@ -1905,18 +1923,27 @@ void Interface::_update_udp_tcp_links(L3_protocol prot, catch (Forward_rule_tree::No_match) { try { /* try to find transport rule that matches the server IP */ - Transport_rule const &transport_rule = - _transport_rules(cln_dom, prot). - longest_prefix_match(link.client().dst_ip()); + bool done { false }; + _transport_rules(cln_dom, prot).find_longest_prefix_match( + link.client().dst_ip(), + [&] /* handle_match */ (Transport_rule const &transport_rule) + { + /* try to find permit rule that matches the server port */ + Permit_rule const &permit_rule = + transport_rule.permit_rule(link.client().dst_port()); - /* try to find permit rule that matches the server port */ - Permit_rule const &permit_rule = - transport_rule.permit_rule(link.client().dst_port()); - - _update_link_check_nat(link, permit_rule.domain(), prot, cln_dom); - return; + _update_link_check_nat(link, permit_rule.domain(), prot, cln_dom); + done = true; + }, + [&] /* handle_no_match */ () + { + _dismiss_link_log(link, "no transport/forward rule"); + } + ); + if (done) { + return; + } } - catch (Transport_rule_list::No_match) { _dismiss_link_log(link, "no transport/forward rule"); } catch (Permit_single_rule_tree::No_match) { _dismiss_link_log(link, "no permit rule"); } catch (Dismiss_link) { } } @@ -1931,13 +1958,23 @@ void Interface::_update_icmp_links(Domain &cln_dom) L3_protocol const prot = L3_protocol::ICMP; links(prot).for_each([&] (Link &link) { try { - Ip_rule const &rule = cln_dom.icmp_rules(). - longest_prefix_match(link.client().dst_ip()); - - _update_link_check_nat(link, rule.domain(), prot, cln_dom); - return; + bool done { false }; + cln_dom.icmp_rules().find_longest_prefix_match( + link.client().dst_ip(), + [&] /* handle_match */ (Ip_rule const &rule) + { + _update_link_check_nat(link, rule.domain(), prot, cln_dom); + done = true; + }, + [&] /* handle_no_match */ () + { + _dismiss_link_log(link, "no ICMP rule"); + } + ); + if (done) { + return; + } } - catch (Ip_rule_list::No_match) { _dismiss_link_log(link, "no ICMP rule"); } catch (Dismiss_link) { } _destroy_link(link); }); From 0f6714c6d743dd6e0f4f4f5e2bf97cf4b83386aa Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 27 Jun 2022 15:55:22 +0200 Subject: [PATCH 044/354] nic_router: find forward rules w/o exceptions Replaces the former implementation of the 'find_longest_prefix_match' method at the data structure for direct rules. This method used to return a reference to the found object and threw an exception if no matching object was found. The new implementation doesn't return anything and doesn't throw exceptions. It takes two lambda arguments instead. One for handling the case that a match was found with a reference to the matching object as argument and another for handling the case that no object matches. This way, expensive exception handling can be avoided and object references stay in a local scope. Ref #4536 --- .../os/src/server/nic_router/forward_rule.cc | 28 ---- repos/os/src/server/nic_router/forward_rule.h | 44 ++++- repos/os/src/server/nic_router/interface.cc | 154 ++++++++++-------- 3 files changed, 123 insertions(+), 103 deletions(-) diff --git a/repos/os/src/server/nic_router/forward_rule.cc b/repos/os/src/server/nic_router/forward_rule.cc index 30d8c6592e..4759a1fd88 100644 --- a/repos/os/src/server/nic_router/forward_rule.cc +++ b/repos/os/src/server/nic_router/forward_rule.cc @@ -55,31 +55,3 @@ Forward_rule::Forward_rule(Domain_tree &domains, Xml_node const node) if (_port == Port(0) || !_to_ip.valid() || dynamic_port(_port)) { throw Invalid(); } } - - -Forward_rule const &Forward_rule::find_by_port(Port const port) const -{ - if (port == _port) { - return *this; } - - Forward_rule *const rule = - Avl_node::child(port.value > _port.value); - - if (!rule) { - throw Forward_rule_tree::No_match(); } - - return rule->find_by_port(port); -} - - -/*********************** - ** Forward_rule_tree ** - ***********************/ - -Forward_rule const &Forward_rule_tree::find_by_port(Port const port) const -{ - if (!first()) { - throw No_match(); } - - return first()->find_by_port(port); -} diff --git a/repos/os/src/server/nic_router/forward_rule.h b/repos/os/src/server/nic_router/forward_rule.h index c9b1a6477b..b560b87ba7 100644 --- a/repos/os/src/server/nic_router/forward_rule.h +++ b/repos/os/src/server/nic_router/forward_rule.h @@ -54,7 +54,32 @@ class Net::Forward_rule : public Genode::Avl_node Forward_rule(Domain_tree &domains, Genode::Xml_node const node); - Forward_rule const &find_by_port(Port const port) const; + template + + void find_by_port(Port const port, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (port.value != _port.value) { + + Forward_rule *const rule_ptr { + Avl_node::child(port.value > _port.value) }; + + if (rule_ptr != nullptr) { + + rule_ptr->find_by_port( + port, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } else { + + handle_match(*this); + } + } /********* @@ -84,9 +109,22 @@ class Net::Forward_rule : public Genode::Avl_node struct Net::Forward_rule_tree : Avl_tree { - struct No_match : Genode::Exception { }; + template - Forward_rule const &find_by_port(Port const port) const; + void find_by_port(Port const port, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (first() != nullptr) { + + first()->find_by_port(port, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } }; #endif /* _FORWARD_RULE_H_ */ diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 29b86e2c57..019dbb7a74 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1260,25 +1260,32 @@ void Interface::_handle_ip(Ethernet_frame ð, /* try to route via forward rules */ if (local_id.dst_ip == local_intf.address) { - try { - Forward_rule const &rule = - _forward_rules(local_domain, prot).find_by_port(local_id.dst_port); - if(_config().verbose()) { - log("[", local_domain, "] using forward rule: ", - l3_protocol_name(prot), " ", rule); - } - Domain &remote_domain = rule.domain(); - _adapt_eth(eth, rule.to_ip(), pkt, remote_domain); - ip.dst(rule.to_ip()); - if (!(rule.to_port() == Port(0))) { - _dst_port(prot, prot_base, rule.to_port()); - } - _nat_link_and_pass(eth, size_guard, ip, prot, prot_base, - prot_size, local_id, local_domain, remote_domain); + _forward_rules(local_domain, prot).find_by_port( + local_id.dst_port, + [&] /* handle_match */ (Forward_rule const &rule) + { + if(_config().verbose()) { + log("[", local_domain, "] using forward rule: ", + l3_protocol_name(prot), " ", rule); + } + Domain &remote_domain = rule.domain(); + _adapt_eth(eth, rule.to_ip(), pkt, remote_domain); + ip.dst(rule.to_ip()); + if (!(rule.to_port() == Port(0))) { + _dst_port(prot, prot_base, rule.to_port()); + } + _nat_link_and_pass( + eth, size_guard, ip, prot, prot_base, prot_size, + local_id, local_domain, remote_domain); + + done = true; + }, + [&] /* handle_no_match */ () { } + ); + if (done) { return; } - catch (Forward_rule_tree::No_match) { } } /* try to route via transport and permit rules */ try { @@ -1884,68 +1891,71 @@ void Interface::_update_udp_tcp_links(L3_protocol prot, Domain &cln_dom) { links(prot).for_each([&] (Link &link) { + try { /* try to find forward rule that matches the server port */ - Forward_rule const &rule = - _forward_rules(cln_dom, prot). - find_by_port(link.client().dst_port()); - - /* if destination IP of forwarding changed, dismiss link */ - if (rule.to_ip() != link.server().src_ip()) { - _dismiss_link_log(link, "other forward-rule to"); - throw Dismiss_link(); - } - /* - * If destination port of forwarding was set and then was - * modified or unset, dismiss link - */ - if (!(link.server().src_port() == link.client().dst_port())) { - if (!(rule.to_port() == link.server().src_port())) { - _dismiss_link_log(link, "other forward-rule to_port"); - throw Dismiss_link(); - } - } - /* - * If destination port of forwarding was not set and then was - * set, dismiss link - */ - else { - if (!(rule.to_port() == link.server().src_port()) && - !(rule.to_port() == Port(0))) + _forward_rules(cln_dom, prot).find_by_port( + link.client().dst_port(), + [&] /* handle_match */ (Forward_rule const &rule) { - _dismiss_link_log(link, "new forward-rule to_port"); - throw Dismiss_link(); - } - } - _update_link_check_nat(link, rule.domain(), prot, cln_dom); - return; - } - catch (Forward_rule_tree::No_match) { - try { - /* try to find transport rule that matches the server IP */ - bool done { false }; - _transport_rules(cln_dom, prot).find_longest_prefix_match( - link.client().dst_ip(), - [&] /* handle_match */ (Transport_rule const &transport_rule) - { - /* try to find permit rule that matches the server port */ - Permit_rule const &permit_rule = - transport_rule.permit_rule(link.client().dst_port()); - - _update_link_check_nat(link, permit_rule.domain(), prot, cln_dom); - done = true; - }, - [&] /* handle_no_match */ () - { - _dismiss_link_log(link, "no transport/forward rule"); + /* if destination IP of forwarding changed, dismiss link */ + if (rule.to_ip() != link.server().src_ip()) { + _dismiss_link_log(link, "other forward-rule to"); + throw Dismiss_link(); } - ); - if (done) { + /* + * If destination port of forwarding was set and then was + * modified or unset, dismiss link + */ + if (!(link.server().src_port() == link.client().dst_port())) { + if (!(rule.to_port() == link.server().src_port())) { + _dismiss_link_log(link, "other forward-rule to_port"); + throw Dismiss_link(); + } + } + /* + * If destination port of forwarding was not set and then was + * set, dismiss link + */ + else { + if (!(rule.to_port() == link.server().src_port()) && + !(rule.to_port() == Port(0))) + { + _dismiss_link_log(link, "new forward-rule to_port"); + throw Dismiss_link(); + } + } + _update_link_check_nat(link, rule.domain(), prot, cln_dom); return; + }, + [&] /* handle_no_match */ () { + try { + /* try to find transport rule that matches the server IP */ + bool done { false }; + _transport_rules(cln_dom, prot).find_longest_prefix_match( + link.client().dst_ip(), + [&] /* handle_match */ (Transport_rule const &transport_rule) + { + /* try to find permit rule that matches the server port */ + Permit_rule const &permit_rule = + transport_rule.permit_rule(link.client().dst_port()); + + _update_link_check_nat(link, permit_rule.domain(), prot, cln_dom); + done = true; + }, + [&] /* handle_no_match */ () + { + _dismiss_link_log(link, "no transport/forward rule"); + } + ); + if (done) { + return; + } + } + catch (Permit_single_rule_tree::No_match) { _dismiss_link_log(link, "no permit rule"); } + catch (Dismiss_link) { } } - } - catch (Permit_single_rule_tree::No_match) { _dismiss_link_log(link, "no permit rule"); } - catch (Dismiss_link) { } + ); } catch (Dismiss_link) { } _destroy_link(link); From 65955601f0ac34243f882710003f3512a9e6fb98 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 27 Jun 2022 16:45:05 +0200 Subject: [PATCH 045/354] nic_router: find permit rules w/o exceptions Replaces the former implementation of the 'find_by_port' method at the data structure for permit rules. This method used to return a reference to the found object and threw an exception if no matching object was found. The new implementation doesn't return anything and doesn't throw exceptions. It takes two lambda arguments instead. One for handling the case that a match was found with a reference to the matching object as argument and another for handling the case that no object matches. This way, expensive exception handling can be avoided and object references stay in a local scope. Furthermore, the commit introduces a convenience wrapper for finding the best matching pair of transport rule and corresponding permit rule for a given destination IP and port. This method as well follows the above mentioned concept. Ref #4536 --- repos/os/src/server/nic_router/interface.cc | 63 +++++++++---------- repos/os/src/server/nic_router/permit_rule.cc | 31 --------- repos/os/src/server/nic_router/permit_rule.h | 47 ++++++++++++-- .../src/server/nic_router/transport_rule.cc | 8 --- .../os/src/server/nic_router/transport_rule.h | 54 ++++++++++++++-- 5 files changed, 121 insertions(+), 82 deletions(-) diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 019dbb7a74..781bbe239d 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1288,34 +1288,30 @@ void Interface::_handle_ip(Ethernet_frame ð, } } /* try to route via transport and permit rules */ - try { - _transport_rules(local_domain, prot).find_longest_prefix_match( - local_id.dst_ip, - [&] /* handle_match */ (Transport_rule const &transport_rule) - { - Permit_rule const &permit_rule = - transport_rule.permit_rule(local_id.dst_port); + _transport_rules(local_domain, prot).find_best_match( + local_id.dst_ip, + local_id.dst_port, + [&] /* handle_match */ (Transport_rule const &transport_rule, + Permit_rule const &permit_rule) + { + if(_config().verbose()) { + log("[", local_domain, "] using ", + l3_protocol_name(prot), " rule: ", + transport_rule, " ", permit_rule); + } + Domain &remote_domain = permit_rule.domain(); + _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); + _nat_link_and_pass( + eth, size_guard, ip, prot, prot_base, prot_size, + local_id, local_domain, remote_domain); - if(_config().verbose()) { - log("[", local_domain, "] using ", - l3_protocol_name(prot), " rule: ", transport_rule, - " ", permit_rule); - } - Domain &remote_domain = permit_rule.domain(); - _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); - _nat_link_and_pass( - eth, size_guard, ip, prot, prot_base, prot_size, - local_id, local_domain, remote_domain); - - done = true; - }, - [&] /* handle_no_match */ () { } - ); - if (done) { - return; - } + done = true; + }, + [&] /* handle_no_match */ () { } + ); + if (done) { + return; } - catch (Permit_single_rule_tree::No_match) { } } catch (Interface::Bad_transport_protocol) { } @@ -1932,28 +1928,25 @@ void Interface::_update_udp_tcp_links(L3_protocol prot, try { /* try to find transport rule that matches the server IP */ bool done { false }; - _transport_rules(cln_dom, prot).find_longest_prefix_match( + _transport_rules(cln_dom, prot).find_best_match( link.client().dst_ip(), - [&] /* handle_match */ (Transport_rule const &transport_rule) + link.client().dst_port(), + [&] /* handle_match */ (Transport_rule const &, + Permit_rule const &permit_rule) { - /* try to find permit rule that matches the server port */ - Permit_rule const &permit_rule = - transport_rule.permit_rule(link.client().dst_port()); - _update_link_check_nat(link, permit_rule.domain(), prot, cln_dom); done = true; }, [&] /* handle_no_match */ () { - _dismiss_link_log(link, "no transport/forward rule"); + _dismiss_link_log(link, "no matching transport/permit/forward rule"); } ); if (done) { return; } } - catch (Permit_single_rule_tree::No_match) { _dismiss_link_log(link, "no permit rule"); } - catch (Dismiss_link) { } + catch (Dismiss_link) { } } ); } diff --git a/repos/os/src/server/nic_router/permit_rule.cc b/repos/os/src/server/nic_router/permit_rule.cc index 4bfc88779c..dadba1db9b 100644 --- a/repos/os/src/server/nic_router/permit_rule.cc +++ b/repos/os/src/server/nic_router/permit_rule.cc @@ -85,34 +85,3 @@ Permit_single_rule::Permit_single_rule(Domain_tree &domains, if (_port == Port(0) || dynamic_port(_port)) { throw Invalid(); } } - - -Permit_single_rule const & -Permit_single_rule::find_by_port(Port const port) const -{ - if (port == _port) { - return *this; } - - bool const side = port.value > _port.value; - Permit_single_rule *const rule = Avl_node::child(side); - if (!rule) { - throw Permit_single_rule_tree::No_match(); } - - return rule->find_by_port(port); -} - - - -/***************************** - ** Permit_single_rule_tree ** - *****************************/ - -Permit_single_rule const & -Permit_single_rule_tree::find_by_port(Port const port) const -{ - Permit_single_rule *const rule = first(); - if (!rule) { - throw No_match(); } - - return rule->find_by_port(port); -} diff --git a/repos/os/src/server/nic_router/permit_rule.h b/repos/os/src/server/nic_router/permit_rule.h index e75f41c91f..594a0c64c3 100644 --- a/repos/os/src/server/nic_router/permit_rule.h +++ b/repos/os/src/server/nic_router/permit_rule.h @@ -112,7 +112,33 @@ class Net::Permit_single_rule : public Permit_rule, Permit_single_rule(Domain_tree &domains, Genode::Xml_node const node); - Permit_single_rule const &find_by_port(Port const port) const; + template + + void find_by_port(Port const port, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (port.value != _port.value) { + + Permit_single_rule *const rule_ptr { + Avl_node::child( + port.value > _port.value) }; + + if (rule_ptr != nullptr) { + + rule_ptr->find_by_port( + port, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } else { + + handle_match(*this); + } + } /********* @@ -141,8 +167,6 @@ struct Net::Permit_single_rule_tree : private Avl_tree { friend class Transport_rule; - struct No_match : Genode::Exception { }; - void insert(Permit_single_rule *rule) { Genode::Avl_tree::insert(rule); @@ -150,7 +174,22 @@ struct Net::Permit_single_rule_tree : private Avl_tree using Genode::Avl_tree::first; - Permit_single_rule const &find_by_port(Port const port) const; + template + + void find_by_port(Port const port, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (first() != nullptr) { + + first()->find_by_port(port, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } }; #endif /* _PERMIT_RULE_H_ */ diff --git a/repos/os/src/server/nic_router/transport_rule.cc b/repos/os/src/server/nic_router/transport_rule.cc index 3baf4ea863..c61c7c4dad 100644 --- a/repos/os/src/server/nic_router/transport_rule.cc +++ b/repos/os/src/server/nic_router/transport_rule.cc @@ -84,11 +84,3 @@ Transport_rule::~Transport_rule() try { destroy(_alloc, &_permit_any_rule()); } catch (Pointer::Invalid) { } } - - -Permit_rule const &Transport_rule::permit_rule(Port const port) const -{ - try { return _permit_any_rule(); } - catch (Pointer::Invalid) { } - return _permit_single_rules.find_by_port(port); -} diff --git a/repos/os/src/server/nic_router/transport_rule.h b/repos/os/src/server/nic_router/transport_rule.h index 061885628d..e1fae0e646 100644 --- a/repos/os/src/server/nic_router/transport_rule.h +++ b/repos/os/src/server/nic_router/transport_rule.h @@ -23,9 +23,9 @@ namespace Genode { class Allocator; } namespace Net { - class Configuration; - class Transport_rule; - struct Transport_rule_list : Direct_rule_list { }; + class Configuration; + class Transport_rule; + class Transport_rule_list; } @@ -53,7 +53,53 @@ class Net::Transport_rule : public Direct_rule ~Transport_rule(); - Permit_rule const &permit_rule(Port const port) const; + template + void + find_permit_rule_by_port(Port const port, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (_permit_any_rule.valid()) { + + handle_match(_permit_any_rule()); + + } else { + + _permit_single_rules.find_by_port( + port, handle_match, handle_no_match); + } + } +}; + + +class Net::Transport_rule_list : public Direct_rule_list +{ + public: + + template + + void find_best_match(Ipv4_address const &ip, + Port const port, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + find_longest_prefix_match( + ip, + [&] /* handle_match */ (Transport_rule const &transport_rule) + { + transport_rule.find_permit_rule_by_port( + port, + [&] /* handle_match */ (Permit_rule const &permit_rule) + { + handle_match(transport_rule, permit_rule); + }, + handle_no_match); + }, + handle_no_match + ); + } }; #endif /* _TRANSPORT_RULE_H_ */ From 6294167eff7d7e60a45d3503a84f6056e5f9f4ff Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 27 Jun 2022 21:19:17 +0200 Subject: [PATCH 046/354] nic_router: find nat rules w/o exceptions Replaces the former implementation of the 'find_by_domain' method at the data structure for NAT rules. This method used to return a reference to the found object and threw an exception if no matching object was found. The new implementation doesn't return anything and doesn't throw exceptions. It takes two lambda arguments instead. One for handling the case that a match was found with a reference to the matching object as argument and another for handling the case that no object matches. This way, expensive exception handling can be avoided and object references stay in a local scope. Ref #4536 --- repos/os/src/server/nic_router/interface.cc | 49 ++++++++++++++------- repos/os/src/server/nic_router/nat_rule.cc | 24 ---------- repos/os/src/server/nic_router/nat_rule.h | 46 ++++++++++++++++++- 3 files changed, 77 insertions(+), 42 deletions(-) diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 781bbe239d..4e989fc922 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -589,16 +589,19 @@ void Interface::_nat_link_and_pass(Ethernet_frame ð, { try { Pointer remote_port_alloc; - try { - Nat_rule &nat = remote_domain.nat_rules().find_by_domain(local_domain); - if(_config().verbose()) { - log("[", local_domain, "] using NAT rule: ", nat); } + remote_domain.nat_rules().find_by_domain( + local_domain, + [&] /* handle_match */ (Nat_rule &nat) + { + if(_config().verbose()) { + log("[", local_domain, "] using NAT rule: ", nat); } - _src_port(prot, prot_base, nat.port_alloc(prot).alloc()); - ip.src(remote_domain.ip_config().interface().address); - remote_port_alloc = nat.port_alloc(prot); - } - catch (Nat_rule_tree::No_match) { } + _src_port(prot, prot_base, nat.port_alloc(prot).alloc()); + ip.src(remote_domain.ip_config().interface().address); + remote_port_alloc = nat.port_alloc(prot); + }, + [&] /* no_match */ () { } + ); Link_side_id const remote_id = { ip.dst(), _dst_port(prot, prot_base), ip.src(), _src_port(prot, prot_base) }; _new_link(prot, local_id, remote_port_alloc, remote_domain, remote_id); @@ -1869,14 +1872,28 @@ void Interface::_update_link_check_nat(Link &link, _dismiss_link_log(link, "NAT IP"); throw Dismiss_link(); } - Nat_rule &nat = new_srv_dom.nat_rules().find_by_domain(cln_dom); - Port_allocator_guard &remote_port_alloc = nat.port_alloc(prot); - remote_port_alloc.alloc(link.server().dst_port()); - remote_port_alloc_ptr = remote_port_alloc; - link.handle_config(cln_dom, new_srv_dom, remote_port_alloc_ptr, _config()); - return; + bool done { false }; + new_srv_dom.nat_rules().find_by_domain( + cln_dom, + [&] /* handle_match */ (Nat_rule &nat) + { + Port_allocator_guard &remote_port_alloc = nat.port_alloc(prot); + remote_port_alloc.alloc(link.server().dst_port()); + remote_port_alloc_ptr = remote_port_alloc; + link.handle_config( + cln_dom, new_srv_dom, remote_port_alloc_ptr, _config()); + + done = true; + }, + [&] /* handle_no_match */ () + { + _dismiss_link_log(link, "no NAT rule"); + } + ); + if (done) { + return; + } } - catch (Nat_rule_tree::No_match) { _dismiss_link_log(link, "no NAT rule"); } catch (Port_allocator::Allocation_conflict) { _dismiss_link_log(link, "no NAT-port"); } catch (Port_allocator_guard::Out_of_indices) { _dismiss_link_log(link, "no NAT-port quota"); } throw Dismiss_link(); diff --git a/repos/os/src/server/nic_router/nat_rule.cc b/repos/os/src/server/nic_router/nat_rule.cc index 1839b8ce22..3395f60196 100644 --- a/repos/os/src/server/nic_router/nat_rule.cc +++ b/repos/os/src/server/nic_router/nat_rule.cc @@ -57,30 +57,6 @@ Nat_rule::Nat_rule(Domain_tree &domains, { } -Nat_rule &Nat_rule::find_by_domain(Domain &domain) -{ - if (&domain == &_domain) { - return *this; } - - bool const side = (addr_t)&domain > (addr_t)&_domain; - Nat_rule *const rule = Avl_node::child(side); - if (!rule) { - throw Nat_rule_tree::No_match(); } - - return rule->find_by_domain(domain); -} - - -Nat_rule &Nat_rule_tree::find_by_domain(Domain &domain) -{ - Nat_rule *const rule = first(); - if (!rule) { - throw No_match(); } - - return rule->find_by_domain(domain); -} - - void Nat_rule::print(Output &output) const { Genode::print(output, "domain ", _domain, diff --git a/repos/os/src/server/nic_router/nat_rule.h b/repos/os/src/server/nic_router/nat_rule.h index 500d444106..4f6853ce3a 100644 --- a/repos/os/src/server/nic_router/nat_rule.h +++ b/repos/os/src/server/nic_router/nat_rule.h @@ -59,6 +59,35 @@ class Net::Nat_rule : public Genode::Avl_node Nat_rule &find_by_domain(Domain &domain); + template + + void find_by_domain(Domain &domain, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) + { + if (&domain != &_domain) { + + Nat_rule *const rule_ptr { + Avl_node::child( + (Genode::addr_t)&domain > (Genode::addr_t)&_domain) }; + + if (rule_ptr != nullptr) { + + rule_ptr->find_by_domain( + domain, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + + } else { + + handle_match(*this); + } + } + Port_allocator_guard &port_alloc(L3_protocol const prot); @@ -89,9 +118,22 @@ class Net::Nat_rule : public Genode::Avl_node struct Net::Nat_rule_tree : Avl_tree { - struct No_match : Genode::Exception { }; + template - Nat_rule &find_by_domain(Domain &domain); + void find_by_domain(Domain &domain, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) + { + if (first() != nullptr) { + + first()->find_by_domain(domain, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } }; #endif /* _NAT_RULE_H_ */ From 925d229d6741408dd14dd419795d971d66ebcc7e Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 28 Jun 2022 15:17:52 +0200 Subject: [PATCH 047/354] nic_router: find AVL string nodes w/o exceptions Replaces the former use of the 'find_by_name' method of the AVL string tree. This method returned a reference to the found object and threw an exception if no matching object was found. The locally implemented replacement doesn't return anything and doesn't throw exceptions. It takes two lambda arguments instead. One for handling the case that a match was found with a reference to the matching object as argument and another for handling the case that no object matches. This way, expensive exception handling can be avoided and object references stay in a local scope. Furthermore, this commit modifies the local wrapper for the insert method of the AVL string tree, so, that it follows the above mentioned concept as well. Ref #4536 --- .../src/server/nic_router/avl_string_tree.h | 81 ++++++-- .../os/src/server/nic_router/configuration.cc | 26 ++- repos/os/src/server/nic_router/dhcp_server.cc | 3 +- repos/os/src/server/nic_router/domain.h | 26 ++- .../os/src/server/nic_router/forward_rule.cc | 14 +- repos/os/src/server/nic_router/forward_rule.h | 3 - repos/os/src/server/nic_router/interface.cc | 184 ++++++++++-------- repos/os/src/server/nic_router/ip_rule.cc | 15 +- repos/os/src/server/nic_router/ip_rule.h | 3 - repos/os/src/server/nic_router/nat_rule.cc | 19 +- repos/os/src/server/nic_router/nat_rule.h | 3 - repos/os/src/server/nic_router/nic_client.cc | 45 +++-- repos/os/src/server/nic_router/permit_rule.cc | 27 +-- repos/os/src/server/nic_router/permit_rule.h | 8 - 14 files changed, 238 insertions(+), 219 deletions(-) diff --git a/repos/os/src/server/nic_router/avl_string_tree.h b/repos/os/src/server/nic_router/avl_string_tree.h index 31a4e956b8..eb20010532 100644 --- a/repos/os/src/server/nic_router/avl_string_tree.h +++ b/repos/os/src/server/nic_router/avl_string_tree.h @@ -33,29 +33,65 @@ class Net::Avl_string_tree : public Genode::Avl_tree using Node = Genode::Avl_string_base; using Tree = Genode::Avl_tree; - OBJECT &_find_by_name(char const *name) + template + + void _node_find_by_name(Node &node, + char const *name_ptr, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) { - if (!first()) { - throw No_match(); } + int const name_diff { + Genode::strcmp(name_ptr, node.name()) }; - Node *node = first()->find_by_name(name); - if (!node) { - throw No_match(); } + if (name_diff != 0) { - return *static_cast(node); + Node *child_ptr { node.child(name_diff > 0) }; + + if (child_ptr != nullptr) { + + _node_find_by_name( + *child_ptr, name_ptr, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } else { + + handle_match(*static_cast(&node)); + } + } + + template + + void _find_by_name(char const *name_ptr, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) + { + if (first() != nullptr) { + + _node_find_by_name( + *first(), name_ptr, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } } public: - struct No_match : Genode::Exception { }; - struct Name_not_unique : Genode::Exception + template + + void find_by_name(NAME const &name, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) { - OBJECT &object; - - Name_not_unique(OBJECT &object) : object(object) { } - }; - - OBJECT &find_by_name(NAME const &name) { return _find_by_name(name.string()); } + _find_by_name(name.string(), handle_match, handle_no_match); + } template void for_each(FUNCTOR && functor) const { @@ -81,10 +117,19 @@ class Net::Avl_string_tree : public Genode::Avl_tree } } - void insert(OBJECT &object) + template + + void insert(OBJECT &obj, + HANDLE_NAME_NOT_UNIQUE_FN && handle_name_not_unique) { - try { throw Name_not_unique(_find_by_name(static_cast(&object)->name())); } - catch (No_match) { Tree::insert(&object); } + _find_by_name( + static_cast(&obj)->name(), + [&] /* handle_match */ (OBJECT &other_obj) + { + handle_name_not_unique(other_obj); + }, + [&] /* handle_no_match */ () { Tree::insert(&obj); } + ); } void remove(OBJECT &object) { Tree::remove(&object); } diff --git a/repos/os/src/server/nic_router/configuration.cc b/repos/os/src/server/nic_router/configuration.cc index 09efbbf57d..7bc6c80bb7 100644 --- a/repos/os/src/server/nic_router/configuration.cc +++ b/repos/os/src/server/nic_router/configuration.cc @@ -131,11 +131,14 @@ Configuration::Configuration(Env &env, node.for_each_sub_node("domain", [&] (Xml_node const node) { try { Domain &domain = *new (_alloc) Domain(*this, node, _alloc); - try { _domains.insert(domain); } - catch (Domain_tree::Name_not_unique exception) { - _invalid_domain(domain, "name not unique"); - _invalid_domain(exception.object, "name not unique"); - } + _domains.insert( + domain, + [&] /* handle_name_not_unique */ (Domain &other_domain) + { + _invalid_domain(domain, "name not unique"); + _invalid_domain(other_domain, "name not unique"); + } + ); } catch (Domain::Invalid) { } }); @@ -200,11 +203,14 @@ Configuration::Configuration(Env &env, Nic_client { node, alloc, old_config._nic_clients, env, timer, interfaces, *this }; - try { _nic_clients.insert(nic_client); } - catch (Nic_client_tree::Name_not_unique exception) { - _invalid_nic_client(nic_client, "label not unique"); - _invalid_nic_client(exception.object, "label not unique"); - } + _nic_clients.insert( + nic_client, + [&] /* handle_name_not_unique */ (Nic_client &other_nic_client) + { + _invalid_nic_client(nic_client, "label not unique"); + _invalid_nic_client(other_nic_client, "label not unique"); + } + ); } catch (Nic_client::Invalid) { } }); diff --git a/repos/os/src/server/nic_router/dhcp_server.cc b/repos/os/src/server/nic_router/dhcp_server.cc index 1637a7655f..698e7f4759 100644 --- a/repos/os/src/server/nic_router/dhcp_server.cc +++ b/repos/os/src/server/nic_router/dhcp_server.cc @@ -206,8 +206,7 @@ Pointer Dhcp_server::_init_dns_config_from(Genode::Xml_node const node, if (dns_config_from == Domain_name()) { return Pointer(); } - try { return domains.find_by_name(dns_config_from); } - catch (Domain_tree::No_match) { throw Invalid(); } + return domains.deprecated_find_by_name(dns_config_from); } diff --git a/repos/os/src/server/nic_router/domain.h b/repos/os/src/server/nic_router/domain.h index f92e6d7d9d..376fd582ee 100644 --- a/repos/os/src/server/nic_router/domain.h +++ b/repos/os/src/server/nic_router/domain.h @@ -71,7 +71,31 @@ struct Net::Domain_link_stats : Domain_object_stats }; -class Net::Domain_tree : public Avl_string_tree { }; +class Net::Domain_tree : public Avl_string_tree +{ + public: + + template + Domain &deprecated_find_by_name(Domain_name const &name) + { + Domain *dom_ptr { nullptr }; + find_by_name( + name, + [&] /* handle_match */ (Domain &dom) { dom_ptr = &dom; }, + [&] /* handle_no_match */ () { throw NO_MATCH_EXCEPTION { }; } + ); + return *dom_ptr; + } + + template + Domain &deprecated_find_by_domain_attr(Genode::Xml_node const &node) + { + Domain_name const name { + node.attribute_value("domain", Domain_name { }) }; + + return deprecated_find_by_name(name); + } +}; class Net::Domain_base diff --git a/repos/os/src/server/nic_router/forward_rule.cc b/repos/os/src/server/nic_router/forward_rule.cc index 4759a1fd88..eb6c77713f 100644 --- a/repos/os/src/server/nic_router/forward_rule.cc +++ b/repos/os/src/server/nic_router/forward_rule.cc @@ -26,18 +26,6 @@ using namespace Genode; ** Forward_rule ** ******************/ - -Domain &Forward_rule::_find_domain(Domain_tree &domains, - Xml_node const node) -{ - try { - Domain_name const domain_name = node.attribute_value("domain", Domain_name()); - return domains.find_by_name(domain_name); - } - catch (Domain_tree::No_match) { throw Invalid(); } -} - - void Forward_rule::print(Output &output) const { Genode::print(output, "port ", _port, " domain ", _domain, " to ip ", @@ -50,7 +38,7 @@ Forward_rule::Forward_rule(Domain_tree &domains, Xml_node const node) _port { node.attribute_value("port", Port(0)) }, _to_ip { node.attribute_value("to", Ipv4_address()) }, _to_port { node.attribute_value("to_port", Port(0)) }, - _domain { _find_domain(domains, node) } + _domain { domains.deprecated_find_by_domain_attr(node) } { if (_port == Port(0) || !_to_ip.valid() || dynamic_port(_port)) { throw Invalid(); } diff --git a/repos/os/src/server/nic_router/forward_rule.h b/repos/os/src/server/nic_router/forward_rule.h index b560b87ba7..3552ab8ef1 100644 --- a/repos/os/src/server/nic_router/forward_rule.h +++ b/repos/os/src/server/nic_router/forward_rule.h @@ -45,9 +45,6 @@ class Net::Forward_rule : public Genode::Avl_node Port const _to_port; Domain &_domain; - static Domain &_find_domain(Domain_tree &domains, - Genode::Xml_node const node); - public: struct Invalid : Genode::Exception { }; diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 4e989fc922..f80ce1a97c 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -390,19 +390,20 @@ void Interface::_update_domain_object(Domain &new_domain) { void Interface::attach_to_domain() { - try { - Domain &domain = - _config().domains().find_by_name(_policy.determine_domain_name()); + _config().domains().find_by_name( + _policy.determine_domain_name(), + [&] /* handle_match */ (Domain &domain) + { + _attach_to_domain_raw(domain); - _attach_to_domain_raw(domain); - - /* construct DHCP client if the new domain needs it */ - if (domain.ip_config_dynamic()) { - _dhcp_client.construct(_timer, *this); - } - attach_to_domain_finish(); - } - catch (Domain_tree::No_match) { } + /* construct DHCP client if the new domain needs it */ + if (domain.ip_config_dynamic()) { + _dhcp_client.construct(_timer, *this); + } + attach_to_domain_finish(); + }, + [&] /* handle_no_match */ () { } + ); } @@ -2056,34 +2057,37 @@ void Interface::_update_dhcp_allocations(Domain &old_domain, void Interface::_update_own_arp_waiters(Domain &domain) { - bool const verbose = _config().verbose(); - _own_arp_waiters.for_each([&] (Arp_waiter_list_element &le) { - Arp_waiter &arp_waiter = *le.object(); - try { - Domain &dst = _config().domains().find_by_name(arp_waiter.dst().name()); - if (dst.ip_config() != arp_waiter.dst().ip_config()) { - if (verbose) { - log("[", domain, "] dismiss ARP waiter: ", arp_waiter, - " (IP config changed)"); + bool const verbose { _config().verbose() }; + _own_arp_waiters.for_each([&] (Arp_waiter_list_element &le) + { + Arp_waiter &arp_waiter { *le.object() }; + bool dismiss_arp_waiter { true }; + _config().domains().find_by_name( + arp_waiter.dst().name(), + [&] /* handle_match */ (Domain &dst) + { + /* dismiss ARP waiter if IP config of target domain changed */ + if (dst.ip_config() != arp_waiter.dst().ip_config()) { + return; } - throw Dismiss_arp_waiter(); + /* keep ARP waiter */ + arp_waiter.handle_config(dst); + if (verbose) { + log("[", domain, "] update ARP waiter: ", arp_waiter); + } + dismiss_arp_waiter = false; + }, + [&] /* handle_no_match */ () + { + /* dismiss ARP waiter as the target domain disappeared */ } - /* keep ARP waiter */ - arp_waiter.handle_config(dst); + ); + if (dismiss_arp_waiter) { if (verbose) { - log("[", domain, "] update ARP waiter: ", arp_waiter); + log("[", domain, "] dismiss ARP waiter: ", arp_waiter); } - return; + cancel_arp_waiting(*_own_arp_waiters.first()->object()); } - /* dismiss ARP waiter */ - catch (Domain_tree::No_match) { - if (verbose) { - log("[", domain, "] dismiss ARP waiter: ", arp_waiter, - " (domain disappeared)"); - } - } - catch (Dismiss_arp_waiter) { } - cancel_arp_waiting(*_own_arp_waiters.first()->object()); }); } @@ -2107,11 +2111,15 @@ void Interface::handle_config_1(Configuration &config) return; } /* interface stays with its domain, so, try to reuse IP config */ - Domain &new_domain = config.domains().find_by_name(new_domain_name); - new_domain.try_reuse_ip_config(old_domain); - return; + config.domains().find_by_name( + new_domain_name, + [&] /* handle_match */ (Domain &new_domain) + { + new_domain.try_reuse_ip_config(old_domain); + }, + [&] /* handle_no_match */ () { } + ); } - catch (Domain_tree::No_match) { } catch (Pointer::Invalid) { } } @@ -2135,66 +2143,70 @@ void Interface::handle_config_2() Domain_name const &new_domain_name = _policy.determine_domain_name(); try { Domain &old_domain = domain(); - try { - Domain &new_domain = _config().domains().find_by_name(new_domain_name); + _config().domains().find_by_name( + new_domain_name, + [&] /* handle_match */ (Domain &new_domain) + { + /* if the domains differ, detach completely from the domain */ + if (old_domain.name() != new_domain_name) { - /* if the domains differ, detach completely from the domain */ - if (old_domain.name() != new_domain_name) { + _detach_from_domain(); + _attach_to_domain_raw(new_domain); + /* destruct and construct DHCP client if required */ + if (old_domain.ip_config_dynamic()) { + _dhcp_client.destruct(); + } + if (new_domain.ip_config_dynamic()) { + _dhcp_client.construct(_timer, *this); + } + return; + } + _update_domain_object(new_domain); + + /* destruct or construct DHCP client if IP-config type changes */ + if (old_domain.ip_config_dynamic() && + !new_domain.ip_config_dynamic()) + { + _dhcp_client.destruct(); + } + if (!old_domain.ip_config_dynamic() && + new_domain.ip_config_dynamic()) + { + _dhcp_client.construct(_timer, *this); + } + + /* remember that the interface stays attached to the same domain */ + _update_domain.construct(old_domain, new_domain); + }, + [&] /* handle_no_match */ () + { + /* the interface no longer has a domain */ _detach_from_domain(); - _attach_to_domain_raw(new_domain); - /* destruct and construct DHCP client if required */ + /* destruct DHCP client if it was constructed */ if (old_domain.ip_config_dynamic()) { _dhcp_client.destruct(); } - if (new_domain.ip_config_dynamic()) { - _dhcp_client.construct(_timer, *this); - } - return; } - _update_domain_object(new_domain); - - /* destruct or construct DHCP client if IP-config type changes */ - if (old_domain.ip_config_dynamic() && - !new_domain.ip_config_dynamic()) - { - _dhcp_client.destruct(); - } - if (!old_domain.ip_config_dynamic() && - new_domain.ip_config_dynamic()) - { - _dhcp_client.construct(_timer, *this); - } - - /* remember that the interface stays attached to the same domain */ - _update_domain.construct(old_domain, new_domain); - return; - } - catch (Domain_tree::No_match) { - - /* the interface no longer has a domain */ - _detach_from_domain(); - - /* destruct DHCP client if it was constructed */ - if (old_domain.ip_config_dynamic()) { - _dhcp_client.destruct(); - } - } + ); } catch (Pointer::Invalid) { /* the interface had no domain but now it may get one */ - try { - Domain &new_domain = _config().domains().find_by_name(new_domain_name); - _attach_to_domain_raw(new_domain); + _config().domains().find_by_name( + new_domain_name, + [&] /* handle_match */ (Domain &new_domain) + { + _attach_to_domain_raw(new_domain); - /* construct DHCP client if the new domain needs it */ - if (new_domain.ip_config_dynamic()) { - _dhcp_client.construct(_timer, *this); - } - } - catch (Domain_tree::No_match) { } + /* construct DHCP client if the new domain needs it */ + if (new_domain.ip_config_dynamic()) { + _dhcp_client.construct(_timer, *this); + } + }, + [&] /* handle_no_match */ () { } + ); } } diff --git a/repos/os/src/server/nic_router/ip_rule.cc b/repos/os/src/server/nic_router/ip_rule.cc index dc39199a67..efcaea257a 100644 --- a/repos/os/src/server/nic_router/ip_rule.cc +++ b/repos/os/src/server/nic_router/ip_rule.cc @@ -19,19 +19,8 @@ using namespace Net; using namespace Genode; -Domain &Ip_rule::_find_domain(Domain_tree &domains, - Xml_node const node) -{ - try { - return domains.find_by_name( - node.attribute_value("domain", Domain_name())); - } - catch (Domain_tree::No_match) { throw Invalid(); } -} - - Ip_rule::Ip_rule(Domain_tree &domains, Xml_node const node) : - Direct_rule(node), - _domain(_find_domain(domains, node)) + Direct_rule { node }, + _domain { domains.deprecated_find_by_domain_attr(node) } { } diff --git a/repos/os/src/server/nic_router/ip_rule.h b/repos/os/src/server/nic_router/ip_rule.h index ca8de1886d..15258dcb76 100644 --- a/repos/os/src/server/nic_router/ip_rule.h +++ b/repos/os/src/server/nic_router/ip_rule.h @@ -33,9 +33,6 @@ class Net::Ip_rule : public Direct_rule Domain &_domain; - static Domain &_find_domain(Domain_tree &domains, - Genode::Xml_node const node); - public: Ip_rule(Domain_tree &domains, Genode::Xml_node const node); diff --git a/repos/os/src/server/nic_router/nat_rule.cc b/repos/os/src/server/nic_router/nat_rule.cc index 3395f60196..501a150478 100644 --- a/repos/os/src/server/nic_router/nat_rule.cc +++ b/repos/os/src/server/nic_router/nat_rule.cc @@ -26,17 +26,6 @@ using namespace Net; using namespace Genode; -Domain &Nat_rule::_find_domain(Domain_tree &domains, - Xml_node const node) -{ - try { - return domains.find_by_name( - node.attribute_value("domain", Domain_name())); - } - catch (Domain_tree::No_match) { throw Invalid(); } -} - - bool Nat_rule::higher(Nat_rule *rule) { return (addr_t)&rule->domain() > (addr_t)&_domain; @@ -50,10 +39,10 @@ Nat_rule::Nat_rule(Domain_tree &domains, Xml_node const node, bool const verbose) : - _domain(_find_domain(domains, node)), - _tcp_port_alloc (tcp_port_alloc, node.attribute_value("tcp-ports", 0UL), verbose), - _udp_port_alloc (udp_port_alloc, node.attribute_value("udp-ports", 0UL), verbose), - _icmp_port_alloc(icmp_port_alloc, node.attribute_value("icmp-ids", 0UL), verbose) + _domain { domains.deprecated_find_by_domain_attr(node) }, + _tcp_port_alloc { tcp_port_alloc, node.attribute_value("tcp-ports", 0U), verbose }, + _udp_port_alloc { udp_port_alloc, node.attribute_value("udp-ports", 0U), verbose }, + _icmp_port_alloc { icmp_port_alloc, node.attribute_value("icmp-ids", 0U), verbose } { } diff --git a/repos/os/src/server/nic_router/nat_rule.h b/repos/os/src/server/nic_router/nat_rule.h index 4f6853ce3a..ffbacf1ef5 100644 --- a/repos/os/src/server/nic_router/nat_rule.h +++ b/repos/os/src/server/nic_router/nat_rule.h @@ -43,9 +43,6 @@ class Net::Nat_rule : public Genode::Avl_node Port_allocator_guard _udp_port_alloc; Port_allocator_guard _icmp_port_alloc; - static Domain &_find_domain(Domain_tree &domains, - Genode::Xml_node const node); - public: struct Invalid : Genode::Exception { }; diff --git a/repos/os/src/server/nic_router/nic_client.cc b/repos/os/src/server/nic_router/nic_client.cc index f3fad8b0fe..28645c42d4 100644 --- a/repos/os/src/server/nic_router/nic_client.cc +++ b/repos/os/src/server/nic_router/nic_client.cc @@ -59,28 +59,33 @@ Net::Nic_client::Nic_client(Xml_node const &node, _alloc { alloc }, _config { config } { - /* if an interface with this label already exists, reuse it */ - try { - Nic_client &old_nic_client = old_nic_clients.find_by_name(label()); - Nic_client_interface &interface = old_nic_client._interface(); - old_nic_client._interface = Pointer(); - interface.domain_name(domain()); - _interface = interface; - } - /* if not, create a new one */ - catch (Nic_client_tree::No_match) { - if (config.verbose()) { - log("[", domain(), "] create NIC client: ", *this); } + old_nic_clients.find_by_name( + label(), + [&] /* handle_match */ (Nic_client &old_nic_client) + { + /* reuse existing interface */ + Nic_client_interface &interface = old_nic_client._interface(); + old_nic_client._interface = Pointer(); + interface.domain_name(domain()); + _interface = interface; + }, + [&] /* handle_no_match */ () + { + /* create a new interface */ + if (config.verbose()) { + log("[", domain(), "] create NIC client: ", *this); } - try { - _interface = *new (_alloc) - Nic_client_interface { env, timer, alloc, interfaces, config, - domain(), label() }; + try { + _interface = *new (_alloc) + Nic_client_interface { + env, timer, alloc, interfaces, config, domain(), + label() }; + } + catch (Insufficient_ram_quota) { _invalid("NIC session RAM quota"); } + catch (Insufficient_cap_quota) { _invalid("NIC session CAP quota"); } + catch (Service_denied) { _invalid("NIC session denied"); } } - catch (Insufficient_ram_quota) { _invalid("NIC session RAM quota"); } - catch (Insufficient_cap_quota) { _invalid("NIC session CAP quota"); } - catch (Service_denied) { _invalid("NIC session denied"); } - } + ); } diff --git a/repos/os/src/server/nic_router/permit_rule.cc b/repos/os/src/server/nic_router/permit_rule.cc index dadba1db9b..acf5edc0cb 100644 --- a/repos/os/src/server/nic_router/permit_rule.cc +++ b/repos/os/src/server/nic_router/permit_rule.cc @@ -26,17 +26,6 @@ using namespace Genode; ** Permit_any_rule ** *********************/ -Domain &Permit_any_rule::_find_domain(Domain_tree &domains, - Xml_node const node) -{ - try { - return domains.find_by_name( - node.attribute_value("domain", Domain_name())); - } - catch (Domain_tree::No_match) { throw Invalid(); } -} - - void Permit_any_rule::print(Output &output) const { Genode::print(output, "domain ", domain()); @@ -45,7 +34,7 @@ void Permit_any_rule::print(Output &output) const Permit_any_rule::Permit_any_rule(Domain_tree &domains, Xml_node const node) : - Permit_rule(_find_domain(domains, node)) + Permit_rule { domains.deprecated_find_by_domain_attr(node) } { } @@ -53,16 +42,6 @@ Permit_any_rule::Permit_any_rule(Domain_tree &domains, Xml_node const node) ** Permit_single_rule ** ************************/ -Domain &Permit_single_rule::_find_domain(Domain_tree &domains, - Xml_node const node) -{ - try { - return domains.find_by_name( - node.attribute_value("domain", Domain_name())); - } - catch (Domain_tree::No_match) { throw Invalid(); } -} - bool Permit_single_rule::higher(Permit_single_rule *rule) { @@ -79,8 +58,8 @@ void Permit_single_rule::print(Output &output) const Permit_single_rule::Permit_single_rule(Domain_tree &domains, Xml_node const node) : - Permit_rule(_find_domain(domains, node)), - _port(node.attribute_value("port", Port(0))) + Permit_rule { domains.deprecated_find_by_domain_attr(node) }, + _port { node.attribute_value("port", Port(0)) } { if (_port == Port(0) || dynamic_port(_port)) { throw Invalid(); } diff --git a/repos/os/src/server/nic_router/permit_rule.h b/repos/os/src/server/nic_router/permit_rule.h index 594a0c64c3..aaeee27948 100644 --- a/repos/os/src/server/nic_router/permit_rule.h +++ b/repos/os/src/server/nic_router/permit_rule.h @@ -70,11 +70,6 @@ struct Net::Permit_rule : public Genode::Interface struct Net::Permit_any_rule : Permit_rule { - private: - - static Domain &_find_domain(Domain_tree &domains, - Genode::Xml_node const node); - public: struct Invalid : Genode::Exception { }; @@ -102,9 +97,6 @@ class Net::Permit_single_rule : public Permit_rule, Port const _port; - static Domain &_find_domain(Domain_tree &domains, - Genode::Xml_node const node); - public: struct Invalid : Genode::Exception { }; From 079fd0071a6d7aab89f6eb3893065fabad72f2c1 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Wed, 29 Jun 2022 14:22:16 +0200 Subject: [PATCH 048/354] qt5: update port for Morph browser support - fix OpenGL issues - pass touch press location with touch release event to fix button clicks with touch screen - fix AVX alignment error in ffmpeg code on base-linux - add generated cmake support files Fixes #4541 --- repos/libports/ports/qt5.hash | 2 +- repos/libports/ports/qt5.port | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/libports/ports/qt5.hash b/repos/libports/ports/qt5.hash index dc7f9a9f4d..cc3bde6e7e 100644 --- a/repos/libports/ports/qt5.hash +++ b/repos/libports/ports/qt5.hash @@ -1 +1 @@ -8c77588a4c223886c942a3de31bf8f0b3aca6ca1 +e70d0da90f784dc66466c43b0e3f6dc31499d0f0 diff --git a/repos/libports/ports/qt5.port b/repos/libports/ports/qt5.port index 64fc7f5c32..e29ff703f5 100644 --- a/repos/libports/ports/qt5.port +++ b/repos/libports/ports/qt5.port @@ -4,5 +4,5 @@ VERSION := 5.13.2 DOWNLOADS := qt5.git URL(qt5) := https://github.com/cproc/qt5.git -REV(qt5) := issue4453 +REV(qt5) := issue4541 DIR(qt5) := src/lib/qt5 From e7cc54204fa0a0298ce4f04ed1250f1df7b08f14 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Wed, 29 Jun 2022 16:45:25 +0200 Subject: [PATCH 049/354] qt5: add CMake support Fixes #4546 --- repos/libports/lib/import/import-qt5_cmake.mk | 210 ++++++++++++++++++ repos/libports/recipes/api/qt5/content.mk | 3 +- .../recipes/src/test-qt_core_cmake/content.mk | 10 + .../recipes/src/test-qt_core_cmake/hash | 1 + .../recipes/src/test-qt_core_cmake/used_apis | 5 + repos/libports/run/qt5_core_cmake.run | 52 +++++ .../src/test/qt5/qt_core_cmake/CMakeLists.txt | 15 ++ .../src/test/qt5/qt_core_cmake/main.cpp | 12 + .../src/test/qt5/qt_core_cmake/target.mk | 9 + 9 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 repos/libports/lib/import/import-qt5_cmake.mk create mode 100644 repos/libports/recipes/src/test-qt_core_cmake/content.mk create mode 100644 repos/libports/recipes/src/test-qt_core_cmake/hash create mode 100644 repos/libports/recipes/src/test-qt_core_cmake/used_apis create mode 100644 repos/libports/run/qt5_core_cmake.run create mode 100644 repos/libports/src/test/qt5/qt_core_cmake/CMakeLists.txt create mode 100644 repos/libports/src/test/qt5/qt_core_cmake/main.cpp create mode 100644 repos/libports/src/test/qt5/qt_core_cmake/target.mk diff --git a/repos/libports/lib/import/import-qt5_cmake.mk b/repos/libports/lib/import/import-qt5_cmake.mk new file mode 100644 index 0000000000..6600f2351e --- /dev/null +++ b/repos/libports/lib/import/import-qt5_cmake.mk @@ -0,0 +1,210 @@ +# +# The following externally defined variables are evaluated: +# +# CMAKE_LISTS_DIR: path to the CMakeLists.txt file +# CMAKE_TARGET_BINARIES binaries to be stripped and linked into 'bin' and 'debug' directories +# QT5_PORT_LIBS: Qt5 libraries used from port (for example libQt5Core) +# + +QT_TOOLS_DIR = /usr/local/genode/qt5/20.08 + +ifeq ($(filter-out $(SPECS),arm),) +QT_PLATFORM = genode-arm-g++ +else ifeq ($(filter-out $(SPECS),arm_64),) +QT_PLATFORM = genode-aarch64-g++ +else ifeq ($(filter-out $(SPECS),x86_32),) +QT_PLATFORM = genode-x86_32-g++ +else ifeq ($(filter-out $(SPECS),x86_64),) +QT_PLATFORM = genode-x86_64-g++ +else +$(error Error: unsupported platform) +endif + +ifeq ($(CONTRIB_DIR),) +QT_DIR = $(call select_from_repositories,src/lib/qt5) +QT_API_DIR = $(call select_from_repositories,mkspecs)/.. +else +QT_PORT_DIR = $(call select_from_ports,qt5) +QT_DIR = $(QT_PORT_DIR)/src/lib/qt5 +QT_API_DIR = $(QT_DIR)/genode/api +endif + +ifneq ($(VERBOSE),) +QT5_OUTPUT_FILTER = > /dev/null +endif + +# +# Genode libraries to be linked to Qt applications and libraries +# + +QT5_GENODE_LIBS_APP = libc.lib.so libm.lib.so stdcxx.lib.so qt5_component.lib.so +QT5_GENODE_LIBS_SHLIB = libc.lib.so libm.lib.so stdcxx.lib.so + +# +# flags to be passed to CMake +# + +GENODE_CMAKE_CFLAGS = \ + -D__FreeBSD__=12 \ + -D__GENODE__ \ + -ffunction-sections \ + -fno-strict-aliasing \ + $(CC_OPT_NOSTDINC) \ + $(CC_MARCH) \ + $(CC_OPT_PIC) \ + $(filter-out -I.,$(INCLUDES)) \ + -I$(CURDIR)/cmake_root/include/QtCore/spec/$(QT_PLATFORM) + +GENODE_CMAKE_LFLAGS_APP = \ + $(addprefix $(LD_OPT_PREFIX),$(LD_MARCH)) \ + $(addprefix $(LD_OPT_PREFIX),$(LD_OPT_GC_SECTIONS)) \ + $(addprefix $(LD_OPT_PREFIX),$(LD_OPT_ALIGN_SANE)) \ + $(addprefix $(LD_OPT_PREFIX),--dynamic-list=$(BASE_DIR)/src/ld/genode_dyn.dl) \ + $(LD_OPT_NOSTDLIB) \ + -Wl,-Ttext=0x01000000 \ + $(CC_MARCH) \ + -Wl,--dynamic-linker=$(DYNAMIC_LINKER).lib.so \ + -Wl,--eh-frame-hdr \ + -Wl,-rpath-link=. \ + -Wl,-T -Wl,$(LD_SCRIPT_DYN) \ + -L$(CURDIR)/cmake_root/lib \ + -Wl,--whole-archive \ + -Wl,--start-group \ + $(addprefix -l:,$(QT5_GENODE_LIBS_APP)) \ + $(shell $(CC) $(CC_MARCH) -print-libgcc-file-name) \ + -Wl,--end-group \ + -Wl,--no-whole-archive + +GENODE_CMAKE_LFLAGS_SHLIB = \ + $(LD_OPT_NOSTDLIB) \ + -Wl,-shared \ + -Wl,--eh-frame-hdr \ + $(addprefix $(LD_OPT_PREFIX),$(LD_MARCH)) \ + $(addprefix $(LD_OPT_PREFIX),$(LD_OPT_GC_SECTIONS)) \ + $(addprefix $(LD_OPT_PREFIX),$(LD_OPT_ALIGN_SANE)) \ + -Wl,-T -Wl,$(LD_SCRIPT_SO) \ + $(addprefix $(LD_OPT_PREFIX),--entry=0x0) \ + -L$(CURDIR)/cmake_root/lib \ + -Wl,--whole-archive \ + -Wl,--start-group \ + $(addprefix -l:,$(QT5_GENODE_LIBS_SHLIB)) \ + $(shell $(CC) $(CC_MARCH) -print-libgcc-file-name) \ + -l:ldso_so_support.lib.a \ + -Wl,--end-group \ + -Wl,--no-whole-archive + +ifeq ($(CONTRIB_DIR),) +GENODE_CMAKE_GL_INCDIRS = $(call select_from_repositories,include/GL)/.. +else +GENODE_CMAKE_GL_INCDIRS = $(call select_from_ports,mesa)/include +endif + +GENODE_CMAKE_OPENGL_LIBS = $(CURDIR)/cmake_root/lib/mesa.lib.so + +# +# prepare a directory named 'cmake_root' where CMake can find needed files +# + +cmake_root: + $(VERBOSE)mkdir -p $@ + +cmake_root/bin: cmake_root + $(VERBOSE)mkdir -p $@ + $(VERBOSE)ln -sf $(QT_TOOLS_DIR)/bin/* $@/ + +cmake_root/include: cmake_root + $(VERBOSE)mkdir -p $@ + $(VERBOSE)ln -snf $(QT_API_DIR)/include/* $@/ + +cmake_root/lib: cmake_root + $(VERBOSE)mkdir -p $@ + +cmake_root/lib/cmake: cmake_root/lib + $(VERBOSE)ln -snf $(QT_API_DIR)/lib/cmake $@ + +cmake_root/lib/%.lib.so: cmake_root/lib + $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/var/libcache/$*/$*.abi.so $@ + +cmake_root/lib/%.lib.a: cmake_root/lib + $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/var/libcache/$*/$*.lib.a $@ + +cmake_root/mkspecs: cmake_root + $(VERBOSE)ln -snf $(QT_API_DIR)/mkspecs $@ + +cmake_prepared.tag: \ + cmake_root/bin \ + cmake_root/include \ + cmake_root/lib/cmake \ + cmake_root/lib/libc.lib.so \ + cmake_root/lib/libm.lib.so \ + cmake_root/lib/egl.lib.so \ + cmake_root/lib/mesa.lib.so \ + cmake_root/lib/qt5_component.lib.so \ + cmake_root/lib/stdcxx.lib.so \ + cmake_root/lib/ldso_so_support.lib.a \ + cmake_root/mkspecs + +# add symlinks for Qt5 libraries listed in the 'QT5_PORT_LIBS' variable +ifeq ($(CONTRIB_DIR),) + $(VERBOSE)for qt5_lib in $(QT5_PORT_LIBS); do \ + ln -sf $(BUILD_BASE_DIR)/var/libcache/$${qt5_lib}/$${qt5_lib}.abi.so cmake_root/lib/$${qt5_lib}.lib.so; \ + done +else + $(VERBOSE)for qt5_lib in $(QT5_PORT_LIBS); do \ + ln -sf $(BUILD_BASE_DIR)/bin/$${qt5_lib}.lib.so cmake_root/lib/; \ + done +endif + $(VERBOSE)touch $@ + +.PHONY: build_with_cmake + +# 'make' called by CMake uses '/bin/sh', which does not understand '-o pipefail' +unexport .SHELLFLAGS + +ifeq ($(VERBOSE),) +CMAKE_MAKE_VERBOSE="1" +endif + +build_with_cmake: cmake_prepared.tag + $(VERBOSE)CMAKE_PREFIX_PATH="$(CURDIR)/cmake_root" \ + cmake \ + --no-warn-unused-cli \ + -DCMAKE_MODULE_PATH="$(CURDIR)/cmake_root/lib/cmake/Modules" \ + -DCMAKE_SYSTEM_NAME="Genode" \ + -DCMAKE_AR="$(AR)" \ + -DCMAKE_C_COMPILER="$(CC)" \ + -DCMAKE_C_FLAGS="$(GENODE_CMAKE_CFLAGS)" \ + -DCMAKE_CXX_COMPILER="$(CXX)" \ + -DCMAKE_CXX_STANDARD="17" \ + -DCMAKE_CXX_FLAGS="$(GENODE_CMAKE_CFLAGS)" \ + -DCMAKE_EXE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_APP)" \ + -DCMAKE_SHARED_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \ + -DCMAKE_MODULE_LINKER_FLAGS="$(GENODE_CMAKE_LFLAGS_SHLIB)" \ + -DCMAKE_GL_INCDIRS="$(GENODE_CMAKE_GL_INCDIRS)" \ + -DCMAKE_OPENGL_LIBS="$(GENODE_CMAKE_OPENGL_LIBS)" \ + $(CMAKE_LISTS_DIR) \ + $(QT5_OUTPUT_FILTER) + + $(VERBOSE)$(MAKE) VERBOSE=$(CMAKE_MAKE_VERBOSE) $(QT5_OUTPUT_FILTER) + +# +# Not every CMake project has an 'install' target, so execute +# this target only if a binary to be installed has "install/" in +# its path. +# +ifneq ($(findstring install/,$(CMAKE_TARGET_BINARIES)),) + $(VERBOSE)$(MAKE) VERBOSE=$(CMAKE_MAKE_VERBOSE) DESTDIR=install install $(QT5_OUTPUT_FILTER) +endif + + $(VERBOSE)for cmake_target_binary in $(CMAKE_TARGET_BINARIES); do \ + $(STRIP) $${cmake_target_binary} -o $${cmake_target_binary}.stripped; \ + ln -sf $(CURDIR)/$${cmake_target_binary}.stripped $(PWD)/bin/`basename $${cmake_target_binary}`; \ + ln -sf $(CURDIR)/$${cmake_target_binary} $(PWD)/debug/; \ + done + +# +# build applications with CMake +# +TARGET ?= $(CMAKE_LISTS_DIR).cmake_target +.PHONY: $(TARGET) +$(TARGET): build_with_cmake diff --git a/repos/libports/recipes/api/qt5/content.mk b/repos/libports/recipes/api/qt5/content.mk index 0320150e96..8886da1dbe 100644 --- a/repos/libports/recipes/api/qt5/content.mk +++ b/repos/libports/recipes/api/qt5/content.mk @@ -1,4 +1,5 @@ -MIRROR_FROM_REP_DIR := lib/import/import-qt5_qmake.mk +MIRROR_FROM_REP_DIR := lib/import/import-qt5_cmake.mk \ + lib/import/import-qt5_qmake.mk content: $(MIRROR_FROM_REP_DIR) diff --git a/repos/libports/recipes/src/test-qt_core_cmake/content.mk b/repos/libports/recipes/src/test-qt_core_cmake/content.mk new file mode 100644 index 0000000000..f2efe2974d --- /dev/null +++ b/repos/libports/recipes/src/test-qt_core_cmake/content.mk @@ -0,0 +1,10 @@ +MIRROR_FROM_REP_DIR := src/test/qt5/qt_core_cmake + +content: $(MIRROR_FROM_REP_DIR) LICENSE + +$(MIRROR_FROM_REP_DIR): + $(mirror_from_rep_dir) + +LICENSE: + cp $(GENODE_DIR)/LICENSE $@ + diff --git a/repos/libports/recipes/src/test-qt_core_cmake/hash b/repos/libports/recipes/src/test-qt_core_cmake/hash new file mode 100644 index 0000000000..bd66cdebb5 --- /dev/null +++ b/repos/libports/recipes/src/test-qt_core_cmake/hash @@ -0,0 +1 @@ +2022-06-29 8cdcdc46d00eccf1286daef650819700f21f0961 diff --git a/repos/libports/recipes/src/test-qt_core_cmake/used_apis b/repos/libports/recipes/src/test-qt_core_cmake/used_apis new file mode 100644 index 0000000000..7939ec008e --- /dev/null +++ b/repos/libports/recipes/src/test-qt_core_cmake/used_apis @@ -0,0 +1,5 @@ +libc +qt5 +qt5_component +so +stdcxx diff --git a/repos/libports/run/qt5_core_cmake.run b/repos/libports/run/qt5_core_cmake.run new file mode 100644 index 0000000000..8d66fb09ef --- /dev/null +++ b/repos/libports/run/qt5_core_cmake.run @@ -0,0 +1,52 @@ +create_boot_directory + +import_from_depot [depot_user]/src/[base_src] \ + [depot_user]/src/init \ + [depot_user]/src/libc \ + [depot_user]/src/qt5_base \ + [depot_user]/src/qt5_component \ + [depot_user]/src/stdcxx \ + [depot_user]/src/vfs \ + [depot_user]/src/zlib \ + [depot_user]/src/test-qt_core_cmake + +install_config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +build_boot_image { } + +append qemu_args " -nographic " + +run_genode_until "Test done.*\n" 10 diff --git a/repos/libports/src/test/qt5/qt_core_cmake/CMakeLists.txt b/repos/libports/src/test/qt5/qt_core_cmake/CMakeLists.txt new file mode 100644 index 0000000000..41cba87d23 --- /dev/null +++ b/repos/libports/src/test/qt5/qt_core_cmake/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.10.0) + +project(test-qt_core_cmake LANGUAGES CXX) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC ON) + +find_package(Qt5 COMPONENTS Core REQUIRED) + +add_executable(test-qt_core_cmake + main.cpp +) + +target_link_libraries(test-qt_core_cmake Qt5::Core) diff --git a/repos/libports/src/test/qt5/qt_core_cmake/main.cpp b/repos/libports/src/test/qt5/qt_core_cmake/main.cpp new file mode 100644 index 0000000000..1fdc13ba02 --- /dev/null +++ b/repos/libports/src/test/qt5/qt_core_cmake/main.cpp @@ -0,0 +1,12 @@ +/* + * \brief QtCore test + * \author Christian Prochaska + * \date 2018-01-16 + */ + +#include + +int main(int argc, char *argv[]) +{ + qInfo() << "Test done."; +} diff --git a/repos/libports/src/test/qt5/qt_core_cmake/target.mk b/repos/libports/src/test/qt5/qt_core_cmake/target.mk new file mode 100644 index 0000000000..bb6d19bfd3 --- /dev/null +++ b/repos/libports/src/test/qt5/qt_core_cmake/target.mk @@ -0,0 +1,9 @@ +CMAKE_LISTS_DIR = $(PRG_DIR) + +CMAKE_TARGET_BINARIES = test-qt_core_cmake + +QT5_PORT_LIBS = libQt5Core + +LIBS = libc libm qt5_component stdcxx $(QT5_PORT_LIBS) + +include $(call select_from_repositories,lib/import/import-qt5_cmake.mk) From 91c0cde7422be6ef7dfbb562c85c3379b7e342c4 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Wed, 29 Jun 2022 23:03:21 +0200 Subject: [PATCH 050/354] qt5: provide all 'qt5_declarative' QML plugins Fixes #4548 --- repos/libports/lib/mk/qt5_declarative.mk | 70 +++++++++--------------- 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/repos/libports/lib/mk/qt5_declarative.mk b/repos/libports/lib/mk/qt5_declarative.mk index fbf8dd3aa1..034094d534 100644 --- a/repos/libports/lib/mk/qt5_declarative.mk +++ b/repos/libports/lib/mk/qt5_declarative.mk @@ -4,6 +4,26 @@ QT5_PORT_LIBS = libQt5Core libQt5Gui libQt5Network libQt5Sql libQt5Test libQt5Wi LIBS = libc libm mesa stdcxx $(QT5_PORT_LIBS) +INSTALL_LIBS = lib/libQt5Qml.lib.so \ + lib/libQt5Quick.lib.so \ + lib/libQt5QuickParticles.lib.so \ + lib/libQt5QuickShapes.lib.so \ + lib/libQt5QuickTest.lib.so \ + lib/libQt5QuickWidgets.lib.so \ + qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.lib.so \ + qml/Qt/labs/qmlmodels/liblabsmodelsplugin.lib.so \ + qml/Qt/labs/settings/libqmlsettingsplugin.lib.so \ + qml/Qt/labs/wavefrontmesh/libqmlwavefrontmeshplugin.lib.so \ + qml/QtQml/Models.2/libmodelsplugin.lib.so \ + qml/QtQml/StateMachine/libqtqmlstatemachine.lib.so \ + qml/QtQuick.2/libqtquick2plugin.lib.so \ + qml/QtQuick/Layouts/libqquicklayoutsplugin.lib.so \ + qml/QtQuick/LocalStorage/libqmllocalstorageplugin.lib.so \ + qml/QtQuick/Particles.2/libparticlesplugin.lib.so \ + qml/QtQuick/Shapes/libqmlshapesplugin.lib.so \ + qml/QtQuick/Window.2/libwindowplugin.lib.so \ + qml/QtTest/libqmltestplugin.lib.so + built.tag: qmake_prepared.tag @# @@ -32,51 +52,15 @@ built.tag: qmake_prepared.tag $(VERBOSE)ln -sf .$(CURDIR)/qmake_root install/qt @# - @# create stripped versions + @# strip libs and create symlinks in 'bin' and 'debug' directories @# - $(VERBOSE)cd $(CURDIR)/install/qt/lib && \ - $(STRIP) libQt5Qml.lib.so -o libQt5Qml.lib.so.stripped && \ - $(STRIP) libQt5Quick.lib.so -o libQt5Quick.lib.so.stripped && \ - $(STRIP) libQt5QuickWidgets.lib.so -o libQt5QuickWidgets.lib.so.stripped - - $(VERBOSE)cd $(CURDIR)/install/qt/qml/Qt/labs/folderlistmodel && \ - $(STRIP) libqmlfolderlistmodelplugin.lib.so -o libqmlfolderlistmodelplugin.lib.so.stripped - - $(VERBOSE)cd $(CURDIR)/install/qt/qml/QtQuick.2 && \ - $(STRIP) libqtquick2plugin.lib.so -o libqtquick2plugin.lib.so.stripped - - $(VERBOSE)cd $(CURDIR)/install/qt/qml/QtQuick/Layouts && \ - $(STRIP) libqquicklayoutsplugin.lib.so -o libqquicklayoutsplugin.lib.so.stripped - - $(VERBOSE)cd $(CURDIR)/install/qt/qml/QtQuick/Window.2 && \ - $(STRIP) libwindowplugin.lib.so -o libwindowplugin.lib.so.stripped - - @# - @# create symlinks in 'bin' directory - @# - - $(VERBOSE)ln -sf $(CURDIR)/install/qt/lib/libQt5Qml.lib.so.stripped $(PWD)/bin/libQt5Qml.lib.so - $(VERBOSE)ln -sf $(CURDIR)/install/qt/lib/libQt5Quick.lib.so.stripped $(PWD)/bin/libQt5Quick.lib.so - $(VERBOSE)ln -sf $(CURDIR)/install/qt/lib/libQt5QuickWidgets.lib.so.stripped $(PWD)/bin/libQt5QuickWidgets.lib.so - - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.lib.so.stripped $(PWD)/bin/libqmlfolderlistmodelplugin.lib.so - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/QtQuick.2/libqtquick2plugin.lib.so.stripped $(PWD)/bin/libqtquick2plugin.lib.so - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/QtQuick/Layouts/libqquicklayoutsplugin.lib.so.stripped $(PWD)/bin/libqquicklayoutsplugin.lib.so - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/QtQuick/Window.2/libwindowplugin.lib.so.stripped $(PWD)/bin/libwindowplugin.lib.so - - @# - @# create symlinks in 'debug' directory - @# - - $(VERBOSE)ln -sf $(CURDIR)/install/qt/lib/libQt5Qml.lib.so $(PWD)/debug/ - $(VERBOSE)ln -sf $(CURDIR)/install/qt/lib/libQt5Quick.lib.so $(PWD)/debug/ - $(VERBOSE)ln -sf $(CURDIR)/install/qt/lib/libQt5QuickWidgets.lib.so $(PWD)/debug/ - - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.lib.so $(PWD)/debug/ - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/QtQuick.2/libqtquick2plugin.lib.so $(PWD)/debug/ - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/QtQuick/Layouts/libqquicklayoutsplugin.lib.so $(PWD)/debug/ - $(VERBOSE)ln -sf $(CURDIR)/install/qt/qml/QtQuick/Window.2/libwindowplugin.lib.so $(PWD)/debug/ + for LIB in $(INSTALL_LIBS); do \ + cd $(CURDIR)/install/qt/$$(dirname $${LIB}) && \ + $(STRIP) $$(basename $${LIB}) -o $$(basename $${LIB}).stripped; \ + ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/bin/$$(basename $${LIB}); \ + ln -sf $(CURDIR)/install/qt/$${LIB} $(PWD)/debug/; \ + done @# @# create tar archives From fd8d439e3963fe85b757f6b6ab18e06522af8ad1 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Wed, 29 Jun 2022 23:20:31 +0200 Subject: [PATCH 051/354] qt5: add 'QtGraphicalEffects' QML plugin Fixes #4549 --- repos/libports/lib/mk/qt5_graphicaleffects.mk | 62 +++++++++++++++++++ .../recipes/src/qt5_graphicaleffects/api | 1 + .../src/qt5_graphicaleffects/content.mk | 25 ++++++++ .../recipes/src/qt5_graphicaleffects/hash | 1 + .../src/qt5_graphicaleffects/used_apis | 4 ++ 5 files changed, 93 insertions(+) create mode 100644 repos/libports/lib/mk/qt5_graphicaleffects.mk create mode 100644 repos/libports/recipes/src/qt5_graphicaleffects/api create mode 100644 repos/libports/recipes/src/qt5_graphicaleffects/content.mk create mode 100644 repos/libports/recipes/src/qt5_graphicaleffects/hash create mode 100644 repos/libports/recipes/src/qt5_graphicaleffects/used_apis diff --git a/repos/libports/lib/mk/qt5_graphicaleffects.mk b/repos/libports/lib/mk/qt5_graphicaleffects.mk new file mode 100644 index 0000000000..765c3678d6 --- /dev/null +++ b/repos/libports/lib/mk/qt5_graphicaleffects.mk @@ -0,0 +1,62 @@ +include $(call select_from_repositories,lib/import/import-qt5_qmake.mk) + +QT5_PORT_LIBS += libQt5Core libQt5Gui libQt5Network +QT5_PORT_LIBS += libQt5Qml libQt5Quick + +LIBS = libc libm mesa stdcxx $(QT5_PORT_LIBS) + +INSTALL_LIBS = qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.lib.so \ + qml/QtGraphicalEffects/private/libqtgraphicaleffectsprivate.lib.so + +built.tag: qmake_prepared.tag + + @# + @# run qmake + @# + + $(VERBOSE)source env.sh && $(QMAKE) \ + -qtconf qmake_root/mkspecs/$(QMAKE_PLATFORM)/qt.conf \ + $(QT_DIR)/qtgraphicaleffects/qtgraphicaleffects.pro \ + $(QT5_OUTPUT_FILTER) + + @# + @# build + @# + + $(VERBOSE)source env.sh && $(MAKE) sub-src $(QT5_OUTPUT_FILTER) + + @# + @# install into local 'install' directory + @# + + $(VERBOSE)$(MAKE) INSTALL_ROOT=$(CURDIR)/install sub-src-install_subtargets $(QT5_OUTPUT_FILTER) + + $(VERBOSE)ln -sf .$(CURDIR)/qmake_root install/qt + + @# + @# strip libs and create symlinks in 'bin' and 'debug' directories + @# + + for LIB in $(INSTALL_LIBS); do \ + cd $(CURDIR)/install/qt/$$(dirname $${LIB}) && \ + $(STRIP) $$(basename $${LIB}) -o $$(basename $${LIB}).stripped; \ + ln -sf $(CURDIR)/install/qt/$${LIB}.stripped $(PWD)/bin/$$(basename $${LIB}); \ + ln -sf $(CURDIR)/install/qt/$${LIB} $(PWD)/debug/; \ + done + + @# + @# create tar archives + @# + + $(VERBOSE)tar chf $(PWD)/bin/qt5_graphicaleffects_qml.tar --exclude='*.lib.so' --transform='s/\.stripped//' -C install qt/qml + + @# + @# mark as done + @# + + $(VERBOSE)touch $@ + + +ifeq ($(called_from_lib_mk),yes) +all: built.tag +endif diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/api b/repos/libports/recipes/src/qt5_graphicaleffects/api new file mode 100644 index 0000000000..7d275211d0 --- /dev/null +++ b/repos/libports/recipes/src/qt5_graphicaleffects/api @@ -0,0 +1 @@ +qt5 diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/content.mk b/repos/libports/recipes/src/qt5_graphicaleffects/content.mk new file mode 100644 index 0000000000..b084e529d7 --- /dev/null +++ b/repos/libports/recipes/src/qt5_graphicaleffects/content.mk @@ -0,0 +1,25 @@ +MIRROR_FROM_REP_DIR := lib/mk/qt5_graphicaleffects.mk + +content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_graphicaleffects/target.mk + +$(MIRROR_FROM_REP_DIR): + $(mirror_from_rep_dir) + +src/lib/qt5_graphicaleffects/target.mk: + mkdir -p $(dir $@) + echo "LIBS = qt5_graphicaleffects" > $@ + +PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) + +MIRROR_FROM_PORT_DIR := src/lib/qt5/qtgraphicaleffects + +content: $(MIRROR_FROM_PORT_DIR) + +$(MIRROR_FROM_PORT_DIR): + mkdir -p $(dir $@) + cp -r $(PORT_DIR)/$@ $(dir $@) + +content: LICENSE + +LICENSE: + cp $(PORT_DIR)/src/lib/qt5/LICENSE.LGPLv3 $@ diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/hash b/repos/libports/recipes/src/qt5_graphicaleffects/hash new file mode 100644 index 0000000000..930f6126ae --- /dev/null +++ b/repos/libports/recipes/src/qt5_graphicaleffects/hash @@ -0,0 +1 @@ +2022-06-29 a56c67cc1e7ed6ca0d4fcd5e627a6a8de64b8cdd diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/used_apis b/repos/libports/recipes/src/qt5_graphicaleffects/used_apis new file mode 100644 index 0000000000..38a7553adb --- /dev/null +++ b/repos/libports/recipes/src/qt5_graphicaleffects/used_apis @@ -0,0 +1,4 @@ +libc +mesa +so +stdcxx From 7c340b1cc994446e7fd148d84fc60ea3c564cbf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 30 Jun 2022 11:37:11 +0200 Subject: [PATCH 052/354] pc/wifi: implement iput dummy The 'iput()' function is called from '__sock_release()' when the sock object has no valid file object. The release function on the other hand is called when the supplicant closes a socket. Fixes #xxx. --- repos/pc/src/lib/wifi/generated_dummies.c | 8 ------- repos/pc/src/lib/wifi/lx_emul.c | 26 ++++++++++++++++++----- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/repos/pc/src/lib/wifi/generated_dummies.c b/repos/pc/src/lib/wifi/generated_dummies.c index ae11f79aed..169d98ec4a 100644 --- a/repos/pc/src/lib/wifi/generated_dummies.c +++ b/repos/pc/src/lib/wifi/generated_dummies.c @@ -562,14 +562,6 @@ void iov_iter_revert(struct iov_iter * i,size_t unroll) } -#include - -void iput(struct inode * inode) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void irq_work_tick(void) diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index 393234e264..92aa7c210a 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -118,20 +118,36 @@ struct vfsmount * kern_mount(struct file_system_type * type) struct inode * new_inode_pseudo(struct super_block * sb) { - const struct super_operations *ops = sb->s_op; - struct inode *inode; + const struct super_operations *ops = sb->s_op; + struct inode *inode; - if (ops->alloc_inode) { - inode = ops->alloc_inode(sb); - } + if (ops->alloc_inode) + inode = ops->alloc_inode(sb); if (!inode) return (struct inode*)ERR_PTR(-ENOMEM); + if (!inode->free_inode) + inode->free_inode = ops->free_inode; + return inode; } +void iput(struct inode * inode) +{ + if (!inode) + return; + + if (atomic_read(&inode->i_count) + && !atomic_dec_and_test(&inode->i_count)) + return; + + if (inode->free_inode) + inode->free_inode(inode); +} + + #include #if 0 From a8070a429a43f9e180fa1bc21c3c6fed9d5a292b Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Tue, 28 Jun 2022 17:11:46 +0200 Subject: [PATCH 053/354] libc: propagate fd flags in socket_fs_plugin When creating a socket, fd flags can be specified by ORing them with the socket type. Most importantly, the flag SOCK_NONBLOCK must be propagated to the Socket_fs::Context in order to support non-blocking recv/send. genodelabs/genode#4550 --- repos/libports/src/lib/libc/socket_fs_plugin.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/repos/libports/src/lib/libc/socket_fs_plugin.cc b/repos/libports/src/lib/libc/socket_fs_plugin.cc index 7295ab3be7..e9d7a044dd 100644 --- a/repos/libports/src/lib/libc/socket_fs_plugin.cc +++ b/repos/libports/src/lib/libc/socket_fs_plugin.cc @@ -1065,6 +1065,13 @@ extern "C" int socket_fs_socket(int domain, int type, int protocol) Socket_fs::Context(proto, handle_fd); } catch (New_socket_failed) { return Errno(ENFILE); } + if (context) { + int flags = 0; + if (type & SOCK_NONBLOCK) flags |= O_NONBLOCK; + if (type & SOCK_CLOEXEC) flags |= O_CLOEXEC; + context->fd_flags(flags); + } + File_descriptor *fd = file_descriptor_allocator()->alloc(&plugin(), context); if (!fd) { Libc::Allocator alloc { }; From 1c5db07342e541aaa0fa1eefeff5f2cce662861b Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 30 Jun 2022 15:15:37 +0200 Subject: [PATCH 054/354] lxip: add warning when schedule_timeout is called genodelabs/genode#4551 --- repos/dde_linux/src/lib/lxip/timer_handler.cc | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/repos/dde_linux/src/lib/lxip/timer_handler.cc b/repos/dde_linux/src/lib/lxip/timer_handler.cc index 8cd83ce30e..76f3384af5 100644 --- a/repos/dde_linux/src/lib/lxip/timer_handler.cc +++ b/repos/dde_linux/src/lib/lxip/timer_handler.cc @@ -306,10 +306,20 @@ class Lx::Timer void wait(unsigned long timeo = 0) { + /** + * XXX + * in contrast to wait_uninterruptible(), wait() should be interruptible + * although we return immediately once we dispatched any signal, we + * need to reflect this via signal_pending() + */ + if (timeo > 0) _wait_one_shot.schedule(Genode::Microseconds(jiffies_to_usecs(timeo))); _ep.wait_and_dispatch_one_io_signal(); + /* update jiffies if we dispatched another signal */ + if (_wait_one_shot.scheduled()) + update_jiffies(); } void wait_uninterruptible(unsigned long timeo) @@ -400,9 +410,24 @@ signed long schedule_timeout(signed long timeout) { unsigned long expire = timeout + jiffies; + /** + * XXX + * schedule_timeout is called from sock_wait_for_wmem() (UDP) and + * sk_stream_wait_memory() (TCP) if sk_wmem_alloc (UDP) resp. + * sk_wmem_queued (TCP) reaches are certain threshold + * unfortunately, recovery from this state seems to be broken + * so that we land here for every skb once we hit the threshold + */ + static bool warned = false; + if (!warned) { + Genode::warning(__func__, " called (tx throttled?)"); + warned = true; + } + long start = jiffies; _timer->wait(timeout); timeout -= jiffies - start; + return timeout < 0 ? 0 : timeout; } From 18b022bf6b2d2fd8acce70a1b2b3640592187948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20B=C3=A4r?= Date: Sat, 11 Jun 2022 09:54:58 +0200 Subject: [PATCH 055/354] rtc_drv: log 'set time' message on verbose The "verbose" config attribute instructs the driver to log 'set time' messages when the RTC updated initially or from the 'set_rtc' ROM. Fixes #4526 --- repos/libports/recipes/pkg/system_rtc-pc/hash | 2 +- repos/os/recipes/src/rtc_drv/hash | 2 +- repos/os/run/rtc.run | 2 +- repos/os/src/drivers/rtc/main.cc | 17 +++++++++++++++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/repos/libports/recipes/pkg/system_rtc-pc/hash b/repos/libports/recipes/pkg/system_rtc-pc/hash index ff64081e26..220c6822b1 100644 --- a/repos/libports/recipes/pkg/system_rtc-pc/hash +++ b/repos/libports/recipes/pkg/system_rtc-pc/hash @@ -1 +1 @@ -2022-05-24 7314ffd53ce1d9f266a45b149455ffe4f39e26a7 +2022-06-06 198a9b3ca1625083e8e5cc6893c2dc9c3ef7b254 diff --git a/repos/os/recipes/src/rtc_drv/hash b/repos/os/recipes/src/rtc_drv/hash index 3e190d6d45..8c3f803def 100644 --- a/repos/os/recipes/src/rtc_drv/hash +++ b/repos/os/recipes/src/rtc_drv/hash @@ -1 +1 @@ -2022-05-24 efd3414279424ba9af6316da0d14eaa16c334f8a +2022-06-06 4d3547ead19b82e81c31750cdbd4a3d19dbfa1b4 diff --git a/repos/os/run/rtc.run b/repos/os/run/rtc.run index c693e4b32a..7cff2ac6f1 100644 --- a/repos/os/run/rtc.run +++ b/repos/os/run/rtc.run @@ -58,7 +58,7 @@ append config { } append_if $test_update config { - + diff --git a/repos/os/src/drivers/rtc/main.cc b/repos/os/src/drivers/rtc/main.cc index f296424a51..fdeaf71f2b 100644 --- a/repos/os/src/drivers/rtc/main.cc +++ b/repos/os/src/drivers/rtc/main.cc @@ -106,6 +106,9 @@ struct Rtc::Main bool const _set_rtc { _config_rom.xml().attribute_value("allow_setting_rtc", false) }; + bool const _verbose { + _config_rom.xml().attribute_value("verbose", false) }; + Constructible _update_rom { }; struct Invalid_timestamp_xml : Exception {}; @@ -124,7 +127,12 @@ struct Rtc::Main } try { - Rtc::set_time(env, _parse_xml(_config_rom.xml())); + Timestamp ts = _parse_xml(_config_rom.xml()); + + if (_verbose) + Genode::log("set time to ", ts); + + Rtc::set_time(env, ts); } catch (Invalid_timestamp_xml &) {} env.parent().announce(env.ep().manage(root)); @@ -189,7 +197,12 @@ void Rtc::Main::_handle_update() Genode::Xml_node node = _update_rom->xml(); try { - Rtc::set_time(env, _parse_xml(node)); + Timestamp ts = _parse_xml(node); + + if (_verbose) + Genode::log("set time to ", ts); + + Rtc::set_time(env, ts); root.notify_clients(); } catch (Invalid_timestamp_xml &) { Genode::warning("set_rtc: ignoring incomplete RTC update"); } From 88db584566822a03cb05f0b9df3d6e594622f518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20B=C3=A4r?= Date: Sat, 11 Jun 2022 10:00:36 +0200 Subject: [PATCH 056/354] libc: timex, socket_fs_recvmsg and sendmsg - Added timex.h as provided header file - implementation of socket_fs_recvmsg - implementation of sendmsg Changes needed for chrony port. Issue #4526 --- repos/libports/lib/mk/libc-net.mk | 6 ++ repos/libports/ports/libc.hash | 2 +- repos/libports/ports/libc.port | 2 +- repos/libports/src/lib/libc/sendmsg.c | 76 ++++++++++++++++++ .../libports/src/lib/libc/socket_fs_plugin.cc | 80 ++++++++++++++++++- 5 files changed, 161 insertions(+), 5 deletions(-) create mode 100644 repos/libports/src/lib/libc/sendmsg.c diff --git a/repos/libports/lib/mk/libc-net.mk b/repos/libports/lib/mk/libc-net.mk index 3fb1e946fe..a3b7ed666f 100644 --- a/repos/libports/lib/mk/libc-net.mk +++ b/repos/libports/lib/mk/libc-net.mk @@ -15,6 +15,9 @@ SRC_C += gethostnamadr.c gethostbydns.c gethostbyht.c map_v4v6.c # needed for getprotobyname() SRC_C += getprotoent.c getprotoname.c +# needed by send() +SRC_C += sendmsg.c + # defines in6addr_any SRC_C += vars.c @@ -53,4 +56,7 @@ nsparser.c: nsparser.y vpath nsparser.y $(LIBC_NET_DIR) +vpath sendmsg.c $(REP_DIR)/src/lib/libc + CC_CXX_WARN_STRICT = + diff --git a/repos/libports/ports/libc.hash b/repos/libports/ports/libc.hash index a332d026c5..a471669f14 100644 --- a/repos/libports/ports/libc.hash +++ b/repos/libports/ports/libc.hash @@ -1 +1 @@ -c7cd230b11ca71979f32950803bc78b45adfa0ce +b856473bd43dea76e963f35bdbdd1d49d2d70e6b diff --git a/repos/libports/ports/libc.port b/repos/libports/ports/libc.port index b276c57968..9a3911546c 100644 --- a/repos/libports/ports/libc.port +++ b/repos/libports/ports/libc.port @@ -129,7 +129,7 @@ DIR_CONTENT(include/libc/sys) := \ utsname.h elf.h mtio.h _stdint.h atomic_common.h _ucontext.h \ _cpuset.h _bitset.h bitset.h _stdarg.h _uio.h auxv.h random.h \ _sockaddr_storage.h termios.h _termios.h _umtx.h kerneldump.h \ - conf.h disk_zone.h counter.h soundcard.h pciio.h) + conf.h disk_zone.h counter.h soundcard.h pciio.h timex.h) DIRS += include/libc/sys/disk DIR_CONTENT(include/libc/sys/disk) := $(D)/sys/sys/disk/*h diff --git a/repos/libports/src/lib/libc/sendmsg.c b/repos/libports/src/lib/libc/sendmsg.c new file mode 100644 index 0000000000..2c61f80253 --- /dev/null +++ b/repos/libports/src/lib/libc/sendmsg.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + + /* + * NOTE: @author : Aditya Kousik + * @email : adit267.kousik@gmail.com + * + * This implementation is for the libc-net port of Genode + * + */ + +#include + +#include +#include +#include + +#include +#include + +#include + +ssize_t sendmsg(int s, const struct msghdr *msg, int flags) +{ + ssize_t ret; + size_t tot = 0; + int i; + char *buf, *p; + struct iovec *iov = msg->msg_iov; + + for(i = 0; i < msg->msg_iovlen; ++i) + tot += iov[i].iov_len; + buf = malloc(tot); + if (tot != 0 && buf == NULL) { + //errno = ENOMEM; + return -1; + } + p = buf; + for (i = 0; i < msg->msg_iovlen; ++i) { + memcpy (p, iov[i].iov_base, iov[i].iov_len); + p += iov[i].iov_len; + } + ret = _sendto(s, buf, tot, flags, msg->msg_name, msg->msg_namelen); + free (buf); + return ret; +} \ No newline at end of file diff --git a/repos/libports/src/lib/libc/socket_fs_plugin.cc b/repos/libports/src/lib/libc/socket_fs_plugin.cc index e9d7a044dd..6e68efe583 100644 --- a/repos/libports/src/lib/libc/socket_fs_plugin.cc +++ b/repos/libports/src/lib/libc/socket_fs_plugin.cc @@ -632,7 +632,7 @@ extern "C" int socket_fs_bind(int libc_fd, sockaddr const *addr, socklen_t addrl if (!addr) return Errno(EFAULT); if (addr->sa_family != AF_INET) { - error(__func__, ": family not supported"); + error(__func__, ": family ", addr->sa_family, " not supported"); return Errno(EAFNOSUPPORT); } @@ -842,8 +842,77 @@ extern "C" ssize_t socket_fs_recv(int libc_fd, void *buf, ::size_t len, int flag extern "C" ssize_t socket_fs_recvmsg(int libc_fd, msghdr *msg, int flags) { - warning("########## TODO ########## ", __func__); - return 0; + /* TODO just a simple implementation that handles the easy cases */ + size_t numberOfBytes = 0; + char *data = nullptr; + size_t length = 0; + size_t i; + char *buffer; + ssize_t res; + size_t amount; + socklen_t client_address_len; + + /* iterate over all msg_iov to get the number of bytes that have to be read. */ + for (i = 0; i < msg->msg_iovlen; i++) { + numberOfBytes += msg->msg_iov[i].iov_len; + /* As an optimization, we set the initial values of DATA and LEN + from the first non-empty iovec. This kicks-in in the case + where the whole packet fits into the first iovec buffer. */ + if (data == nullptr && msg->msg_iov[i].iov_len > 0) { + data = (char*)msg->msg_iov[i].iov_base; + length = msg->msg_iov[i].iov_len; + } + } + + buffer = data; + + struct sockaddr_in client_address; + client_address_len = sizeof (client_address); + + /* do socket communication */ + res = socket_fs_recvfrom(libc_fd, buffer, length, flags, + (struct sockaddr *) &client_address, + &client_address_len); + + if(res < 0) { + return res; + } + + /* copy client address to msg_name */ + if (msg->msg_name != nullptr && client_address_len > 0) { + if (msg->msg_namelen > client_address_len) { + msg->msg_namelen = client_address_len; + } + + ::memcpy (msg->msg_name, &client_address, msg->msg_namelen); + } else if (msg->msg_name != nullptr) { + msg->msg_namelen = 0; + } + + /* handle payload */ + if (buffer == data) { + buffer += length; + } else { + amount = length; + buffer = data; + for (i = 0; i < msg->msg_iovlen; i++) { +#define min(a, b) ((a) > (b) ? (b) : (a)) + size_t copy = min (msg->msg_iov[i].iov_len, amount); + ::memcpy (msg->msg_iov[i].iov_base, buffer, copy); + buffer += copy; + amount -= copy; + if (length == 0) + break; + } + + Libc::Allocator alloc { }; + destroy(alloc, data); + } + + /* handle control data, not supported yet */ + msg->msg_controllen = 0; + + return res; } @@ -1150,6 +1219,11 @@ int Socket_fs::Plugin::fcntl(File_descriptor *fd, int cmd, long arg) if (!context) return Errno(EBADF); switch (cmd) { + case F_GETFD: + return context->fd_flags(); + case F_SETFD: + context->fd_flags(arg); + return 0; case F_GETFL: return context->fd_flags() | O_RDWR; case F_SETFL: From 789a60278c0ea4a5609e53c1587c0ab406f2b16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20B=C3=A4r?= Date: Sat, 11 Jun 2022 10:03:46 +0200 Subject: [PATCH 057/354] gmp: extensions for chrony - compile nextprime, sec_div and sqr_diag_addlsh1 - updated symbols and hash Fixes #4526 --- repos/libports/lib/mk/gmp.mk | 2 +- repos/libports/lib/mk/spec/x86_64/gmp-mpn.mk | 7 +- repos/libports/lib/symbols/gmp | 195 +++++++++++++++---- repos/libports/recipes/src/gmp/hash | 2 +- 4 files changed, 158 insertions(+), 48 deletions(-) diff --git a/repos/libports/lib/mk/gmp.mk b/repos/libports/lib/mk/gmp.mk index 17482e83df..0be6470cd7 100644 --- a/repos/libports/lib/mk/gmp.mk +++ b/repos/libports/lib/mk/gmp.mk @@ -10,7 +10,7 @@ SRC_C += assert.c compat.c errno.c extract-dbl.c invalid.c \ mp_minv_tab.c mp_get_fns.c mp_set_fns.c rand.c randclr.c \ randdef.c randiset.c randlc2s.c randlc2x.c randmt.c \ randmts.c rands.c randsd.c randsdui.c randbui.c randmui.c \ - version.c tal-reent.c + version.c tal-reent.c nextprime.c # # Source codes from subdirectories diff --git a/repos/libports/lib/mk/spec/x86_64/gmp-mpn.mk b/repos/libports/lib/mk/spec/x86_64/gmp-mpn.mk index 27c516fd9e..6ed596b5b6 100644 --- a/repos/libports/lib/mk/spec/x86_64/gmp-mpn.mk +++ b/repos/libports/lib/mk/spec/x86_64/gmp-mpn.mk @@ -4,8 +4,7 @@ GMP_MPN_DIR = $(GMP_DIR)/mpn # this file uses the 'sdiv_qrnnd' symbol which is not defined FILTER_OUT += udiv_w_sdiv.c -FILTER_OUT += pre_divrem_1.c sec_div.c sec_pi1_div.c copyi.c copyd.c - +FILTER_OUT += pre_divrem_1.c sec_pi1_div.c copyi.c copyd.c # add x86_64-specific assembly files and filter out the generic C files if needed @@ -13,6 +12,8 @@ SRC_ASM += copyd.asm copyi.asm invert_limb.asm invert_limb_table.asm CC_OPT_add_n = -DOPERATION_add_n CC_OPT_sub_n = -DOPERATION_sub_n +CC_OPT_sec_aors_1 = -DOPERATION_sec_add_1 +CC_OPT_sec_div = -DOPERATION_sec_div_r FILTER_OUT += popham.c @@ -23,7 +24,7 @@ include $(REP_DIR)/lib/mk/gmp.inc PWD := $(shell pwd) -SRC_O += $(SRC_ASM:.asm=.o) hamdist.o popcount.o +SRC_O += $(SRC_ASM:.asm=.o) hamdist.o popcount.o sqr_diag_addlsh1.o # # Create execution environment for the m4-ccas tool, which is used by the gmp diff --git a/repos/libports/lib/symbols/gmp b/repos/libports/lib/symbols/gmp index dc22e3b24a..08503e3a36 100644 --- a/repos/libports/lib/symbols/gmp +++ b/repos/libports/lib/symbols/gmp @@ -13,7 +13,7 @@ __gmp_default_allocate T __gmp_default_fp_limb_precision D 8 __gmp_default_free T __gmp_default_reallocate T -__gmp_digit_value_tab R 480 +__gmp_digit_value_tab R 464 __gmp_divide_by_zero T __gmp_doprnt T __gmp_doprnt_integer T @@ -22,6 +22,7 @@ __gmp_doscan T __gmp_errno B 4 __gmp_exception T __gmp_extract_double T +__gmp_fac2cnt_table R 40 __gmp_fib_table R 760 __gmp_fprintf T __gmp_fprintf_funs D 32 @@ -29,9 +30,15 @@ __gmp_free_func D 8 __gmp_fscanf T __gmp_fscanf_funs D 32 __gmp_get_memory_functions T +__gmp_init_primesieve T __gmp_invalid_operation T +__gmp_jacobi_table R 208 __gmp_junk B 4 +__gmp_limbroots_table R 64 __gmp_mt_recalc_buffer T +__gmp_nextprime T +__gmp_odd2fac_table R 136 +__gmp_oddfac_table R 544 __gmp_printf T __gmp_randclear T __gmp_randclear_mt T @@ -76,10 +83,12 @@ __gmpf_add T __gmpf_add_ui T __gmpf_ceil T __gmpf_clear T +__gmpf_clears T __gmpf_cmp T __gmpf_cmp_d T __gmpf_cmp_si T __gmpf_cmp_ui T +__gmpf_cmp_z T __gmpf_div T __gmpf_div_2exp T __gmpf_div_ui T @@ -106,6 +115,7 @@ __gmpf_init_set_d T __gmpf_init_set_si T __gmpf_init_set_str T __gmpf_init_set_ui T +__gmpf_inits T __gmpf_inp_str T __gmpf_integer_p T __gmpf_mul T @@ -138,37 +148,57 @@ __gmpf_ui_sub T __gmpf_urandomb T __gmpn_add T __gmpn_add_1 T +__gmpn_add_err1_n T +__gmpn_add_err2_n T +__gmpn_add_err3_n T __gmpn_add_n T +__gmpn_add_n_sub_n T __gmpn_addmul_1 T -__gmpn_addmul_2 T -__gmpn_addsub_n T __gmpn_bases R 10280 +__gmpn_bc_mulmod_bnm1 T __gmpn_bc_set_str T __gmpn_bdiv_dbm1c T -__gmpn_bdivmod T +__gmpn_bdiv_q T +__gmpn_bdiv_q_1 T +__gmpn_bdiv_q_itch T +__gmpn_bdiv_qr T +__gmpn_bdiv_qr_itch T __gmpn_binvert T __gmpn_binvert_itch T +__gmpn_broot T +__gmpn_broot_invm1 T +__gmpn_brootinv T +__gmpn_bsqrt T +__gmpn_bsqrtinv T __gmpn_cmp T +__gmpn_cnd_add_n T +__gmpn_cnd_sub_n T +__gmpn_cnd_swap T +__gmpn_com T __gmpn_copyd T __gmpn_copyi T -__gmpn_dc_bdiv_q T -__gmpn_dc_bdiv_q_n T -__gmpn_dc_bdiv_q_n_itch T -__gmpn_dc_bdiv_qr T -__gmpn_dc_bdiv_qr_n T -__gmpn_dc_bdiv_qr_n_itch T -__gmpn_dc_div_q T -__gmpn_dc_div_qr T -__gmpn_dc_div_qr_n T -__gmpn_dc_divappr_q T -__gmpn_dc_divappr_q_n T -__gmpn_dc_divrem_n T __gmpn_dc_set_str T +__gmpn_dcpi1_bdiv_q T +__gmpn_dcpi1_bdiv_q_n T +__gmpn_dcpi1_bdiv_q_n_itch T +__gmpn_dcpi1_bdiv_qr T +__gmpn_dcpi1_bdiv_qr_n T +__gmpn_dcpi1_bdiv_qr_n_itch T +__gmpn_dcpi1_div_q T +__gmpn_dcpi1_div_qr T +__gmpn_dcpi1_div_qr_n T +__gmpn_dcpi1_divappr_q T +__gmpn_dcpi1_divappr_q_n T +__gmpn_div_q T +__gmpn_div_qr_1 T +__gmpn_div_qr_1n_pi1 T +__gmpn_div_qr_2 T +__gmpn_div_qr_2n_pi1 T +__gmpn_div_qr_2u_pi1 T __gmpn_divexact T __gmpn_divexact_1 T __gmpn_divexact_by3 T __gmpn_divexact_by3c T -__gmpn_divexact_itch T __gmpn_divisible_p T __gmpn_divmod_1 T __gmpn_divrem T @@ -180,36 +210,45 @@ __gmpn_fft_next_size T __gmpn_fib2_ui T __gmpn_gcd T __gmpn_gcd_1 T -__gmpn_gcd_lehmer_n T __gmpn_gcd_subdiv_step T __gmpn_gcdext T __gmpn_gcdext_1 T +__gmpn_gcdext_hook T __gmpn_gcdext_lehmer_n T -__gmpn_gcdext_subdiv_step T __gmpn_get_d T __gmpn_get_str T __gmpn_hamdist T __gmpn_hgcd T __gmpn_hgcd2 T +__gmpn_hgcd2_jacobi T +__gmpn_hgcd_appr T +__gmpn_hgcd_appr_itch T __gmpn_hgcd_itch T -__gmpn_hgcd_lehmer T +__gmpn_hgcd_jacobi T __gmpn_hgcd_matrix_adjust T __gmpn_hgcd_matrix_init T __gmpn_hgcd_matrix_mul T -__gmpn_hgcd_mul_matrix1_inverse_vector T +__gmpn_hgcd_matrix_mul_1 T +__gmpn_hgcd_matrix_update_q T __gmpn_hgcd_mul_matrix1_vector T +__gmpn_hgcd_reduce T +__gmpn_hgcd_reduce_itch T +__gmpn_hgcd_step T __gmpn_invert T -__gmpn_invert_itch T +__gmpn_invert_limb T +__gmpn_invertappr T +__gmpn_jacobi_2 T __gmpn_jacobi_base T -__gmpn_kara_mul_n T -__gmpn_kara_sqr_n T +__gmpn_jacobi_n T __gmpn_lshift T +__gmpn_lshiftc T __gmpn_matrix22_mul T +__gmpn_matrix22_mul1_inverse_vector T __gmpn_matrix22_mul_itch T __gmpn_matrix22_mul_strassen T __gmpn_mod_1 T -__gmpn_mod_1s_1p T -__gmpn_mod_1s_1p_cps T +__gmpn_mod_1_1p T +__gmpn_mod_1_1p_cps T __gmpn_mod_1s_2p T __gmpn_mod_1s_2p_cps T __gmpn_mod_1s_3p T @@ -222,7 +261,9 @@ __gmpn_modexact_1c_odd T __gmpn_mu_bdiv_q T __gmpn_mu_bdiv_q_itch T __gmpn_mu_bdiv_qr T +__gmpn_mu_bdiv_qr_itch T __gmpn_mu_div_q T +__gmpn_mu_div_q_itch T __gmpn_mu_div_qr T __gmpn_mu_div_qr_choose_in T __gmpn_mu_div_qr_itch T @@ -234,70 +275,120 @@ __gmpn_mul_1 T __gmpn_mul_1c T __gmpn_mul_basecase T __gmpn_mul_fft T -__gmpn_mul_fft_full T __gmpn_mul_n T -__gmpn_mullow_basecase T -__gmpn_mullow_n T -__gmpn_neg_n T +__gmpn_mullo_basecase T +__gmpn_mullo_n T +__gmpn_mulmid T +__gmpn_mulmid_basecase T +__gmpn_mulmid_n T +__gmpn_mulmod_bnm1 T +__gmpn_mulmod_bnm1_next_size T +__gmpn_neg T +__gmpn_ni_invertappr T +__gmpn_nussbaumer_mul T +__gmpn_perfect_power_p T __gmpn_perfect_square_p T +__gmpn_pi1_bdiv_q_1 T __gmpn_popcount T __gmpn_pow_1 T __gmpn_powlo T __gmpn_powm T -__gmpn_powm_sec T -__gmpn_preinv_dc_div_qr T -__gmpn_preinv_dc_divappr_q T __gmpn_preinv_divrem_1 T __gmpn_preinv_mod_1 T __gmpn_preinv_mu_div_qr T +__gmpn_preinv_mu_div_qr_itch T __gmpn_preinv_mu_divappr_q T __gmpn_random T __gmpn_random2 T __gmpn_redc_1 T __gmpn_redc_2 T +__gmpn_redc_n T +__gmpn_remove T __gmpn_rootrem T __gmpn_rshift T -__gmpn_sb_bdiv_q T -__gmpn_sb_bdiv_qr T -__gmpn_sb_div_q T -__gmpn_sb_div_qr T -__gmpn_sb_divappr_q T -__gmpn_sb_divrem_mn T +__gmpn_sbpi1_bdiv_q T +__gmpn_sbpi1_bdiv_qr T +__gmpn_sbpi1_div_q T +__gmpn_sbpi1_div_qr T +__gmpn_sbpi1_divappr_q T __gmpn_scan0 T __gmpn_scan1 T +__gmpn_sec_add_1 T +__gmpn_sec_add_1_itch T +__gmpn_sec_div_r T +__gmpn_sec_div_r_itch T +__gmpn_sec_invert T +__gmpn_sec_invert_itch T +__gmpn_sec_mul T +__gmpn_sec_mul_itch T +__gmpn_sec_powm T +__gmpn_sec_powm_itch T +__gmpn_sec_sqr T +__gmpn_sec_sqr_itch T +__gmpn_sec_tabselect T __gmpn_set_str T __gmpn_set_str_compute_powtab T +__gmpn_sizeinbase T __gmpn_sqr T __gmpn_sqr_basecase T +__gmpn_sqr_diag_addlsh1 T +__gmpn_sqrlo T +__gmpn_sqrlo_basecase T +__gmpn_sqrmod_bnm1 T +__gmpn_sqrmod_bnm1_next_size T __gmpn_sqrtrem T __gmpn_sub T __gmpn_sub_1 T +__gmpn_sub_err1_n T +__gmpn_sub_err2_n T +__gmpn_sub_err3_n T __gmpn_sub_n T -__gmpn_subcnd_n T __gmpn_submul_1 T -__gmpn_tabselect T __gmpn_tdiv_qr T __gmpn_toom22_mul T __gmpn_toom2_sqr T __gmpn_toom32_mul T __gmpn_toom33_mul T -__gmpn_toom3_mul_n T __gmpn_toom3_sqr T -__gmpn_toom3_sqr_n T __gmpn_toom42_mul T +__gmpn_toom42_mulmid T +__gmpn_toom43_mul T __gmpn_toom44_mul T __gmpn_toom4_sqr T +__gmpn_toom52_mul T __gmpn_toom53_mul T +__gmpn_toom54_mul T __gmpn_toom62_mul T +__gmpn_toom63_mul T +__gmpn_toom6_sqr T +__gmpn_toom6h_mul T +__gmpn_toom8_sqr T +__gmpn_toom8h_mul T +__gmpn_toom_couple_handling T +__gmpn_toom_eval_dgr3_pm1 T +__gmpn_toom_eval_dgr3_pm2 T +__gmpn_toom_eval_pm1 T +__gmpn_toom_eval_pm2 T +__gmpn_toom_eval_pm2exp T +__gmpn_toom_eval_pm2rexp T +__gmpn_toom_interpolate_12pts T +__gmpn_toom_interpolate_16pts T __gmpn_toom_interpolate_5pts T +__gmpn_toom_interpolate_6pts T __gmpn_toom_interpolate_7pts T +__gmpn_toom_interpolate_8pts T +__gmpn_trialdiv T +__gmpn_zero T +__gmpn_zero_p T __gmpq_abs T __gmpq_add T __gmpq_canonicalize T __gmpq_clear T +__gmpq_clears T __gmpq_cmp T __gmpq_cmp_si T __gmpq_cmp_ui T +__gmpq_cmp_z T __gmpq_div T __gmpq_div_2exp T __gmpq_equal T @@ -306,6 +397,7 @@ __gmpq_get_den T __gmpq_get_num T __gmpq_get_str T __gmpq_init T +__gmpq_inits T __gmpq_inp_str T __gmpq_inv T __gmpq_mul T @@ -323,6 +415,7 @@ __gmpq_set_ui T __gmpq_set_z T __gmpq_sub T __gmpq_swap T +__gmpz_2fac_ui T __gmpz_abs T __gmpz_add T __gmpz_add_ui T @@ -343,6 +436,7 @@ __gmpz_cdiv_r_2exp T __gmpz_cdiv_r_ui T __gmpz_cdiv_ui T __gmpz_clear T +__gmpz_clears T __gmpz_clrbit T __gmpz_cmp T __gmpz_cmp_d T @@ -400,6 +494,7 @@ __gmpz_init_set_d T __gmpz_init_set_si T __gmpz_init_set_str T __gmpz_init_set_ui T +__gmpz_inits T __gmpz_inp_raw T __gmpz_inp_str T __gmpz_inp_str_nowhite T @@ -411,8 +506,13 @@ __gmpz_kronecker_ui T __gmpz_lcm T __gmpz_lcm_ui T __gmpz_legendre T +__gmpz_limbs_finish T +__gmpz_limbs_modify T +__gmpz_limbs_read T +__gmpz_limbs_write T __gmpz_lucnum2_ui T __gmpz_lucnum_ui T +__gmpz_mfac_uiui T __gmpz_millerrabin T __gmpz_mod T __gmpz_mul T @@ -422,6 +522,7 @@ __gmpz_mul_ui T __gmpz_n_pow_ui T __gmpz_neg T __gmpz_nextprime T +__gmpz_oddfac_1 T __gmpz_out_raw T __gmpz_out_str T __gmpz_perfect_power_p T @@ -429,13 +530,17 @@ __gmpz_perfect_square_p T __gmpz_popcount T __gmpz_pow_ui T __gmpz_powm T +__gmpz_powm_sec T __gmpz_powm_ui T +__gmpz_primorial_ui T __gmpz_probab_prime_p T +__gmpz_prodlimbs T __gmpz_random T __gmpz_random2 T __gmpz_realloc T __gmpz_realloc2 T __gmpz_remove T +__gmpz_roinit_n T __gmpz_root T __gmpz_rootrem T __gmpz_rrandomb T @@ -475,3 +580,7 @@ __gmpz_ui_sub T __gmpz_urandomb T __gmpz_urandomm T __gmpz_xor T +__gnu_Unwind_Find_exidx T +dl_unwind_find_exidx W +mpn_div_qr_1n_pi2 T +mpn_div_qr_1u_pi2 T diff --git a/repos/libports/recipes/src/gmp/hash b/repos/libports/recipes/src/gmp/hash index 4dedb372f6..90a5c12dfa 100644 --- a/repos/libports/recipes/src/gmp/hash +++ b/repos/libports/recipes/src/gmp/hash @@ -1 +1 @@ -2022-05-24 982fbc9f71641fafa7ed3ab0cd438b0ac0dc158e +2022-06-06 b4d8311bc69e669ffc135f7a18df3866db4a4e88 From 427f3bb6341f7c20095c9ade54b0e15cb91a5d9b Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 8 Jul 2022 09:16:06 +0200 Subject: [PATCH 058/354] run/load/ipxe: support ISO and UEFI images Patch by Roman Iten and Pirmin Duss. --- tool/run/boot_dir/fiasco | 2 +- tool/run/boot_dir/foc | 2 +- tool/run/boot_dir/nova | 4 ++-- tool/run/boot_dir/sel4 | 2 +- tool/run/load/ipxe | 44 ++++++++++++++++++++++++---------------- 5 files changed, 32 insertions(+), 22 deletions(-) diff --git a/tool/run/boot_dir/fiasco b/tool/run/boot_dir/fiasco index 6696655bab..8fddda0e61 100644 --- a/tool/run/boot_dir/fiasco +++ b/tool/run/boot_dir/fiasco @@ -99,7 +99,7 @@ proc run_boot_dir {binaries} { } if {[have_include "load/ipxe"]} { - create_ipxe_iso_config + create_ipxe_config update_ipxe_boot_dir create_symlink_for_iso } diff --git a/tool/run/boot_dir/foc b/tool/run/boot_dir/foc index 196a8f385d..e529c4aad6 100644 --- a/tool/run/boot_dir/foc +++ b/tool/run/boot_dir/foc @@ -146,7 +146,7 @@ proc run_boot_dir_x86 {binaries} { } if {[have_include "load/ipxe"]} { - create_ipxe_iso_config + create_ipxe_config update_ipxe_boot_dir create_symlink_for_iso } diff --git a/tool/run/boot_dir/nova b/tool/run/boot_dir/nova index 8ca43dba19..06d05ce1be 100644 --- a/tool/run/boot_dir/nova +++ b/tool/run/boot_dir/nova @@ -47,7 +47,7 @@ proc run_boot_dir {binaries} { if {$ld_arg != ""} { copy_file bin/ld-nova.lib.so [run_dir]/genode/ld.lib.so } # - # Collect contents of the ISO image + # Collect contents of the boot image # build_core_image $binaries @@ -177,7 +177,7 @@ proc run_boot_dir {binaries} { } if {[have_include "load/ipxe"]} { - create_ipxe_iso_config + create_ipxe_config update_ipxe_boot_dir create_symlink_for_iso } diff --git a/tool/run/boot_dir/sel4 b/tool/run/boot_dir/sel4 index 1d169368ef..75a077630e 100644 --- a/tool/run/boot_dir/sel4 +++ b/tool/run/boot_dir/sel4 @@ -147,7 +147,7 @@ proc run_boot_dir {binaries} { } if {[have_spec x86] && [have_include "load/ipxe"]} { - create_ipxe_iso_config + create_ipxe_config update_ipxe_boot_dir create_symlink_for_iso } diff --git a/tool/run/load/ipxe b/tool/run/load/ipxe index 7c71ceed5c..a8952619e4 100644 --- a/tool/run/load/ipxe +++ b/tool/run/load/ipxe @@ -25,6 +25,18 @@ proc load_ipxe_base_dir { } { return [get_cmd_arg --load-ipxe-base-dir ""] } proc load_ipxe_boot_dir { } { return [get_cmd_arg --load-ipxe-boot-dir ""] } +proc image_extension { } { + if {[have_include "image/iso"]} { + return "iso" + } elseif {[have_include "image/uefi"]} { + return "img" + } else { + puts "Warning, iPXE requires ISO or UEFI image." + exit -1 + } +} + + ## # Install files needed to boot via iPXE # @@ -38,7 +50,7 @@ proc install_bender_to_run_dir { } { # Create symlink for ISO image in current run directory. # proc create_symlink_for_iso { } { - exec ln -sfn [pwd]/[run_dir].iso [pwd]/[run_dir]/[run_name].iso + exec ln -sfn [pwd]/[run_dir].[image_extension] [pwd]/[run_dir]/[run_name].[image_extension] } ## @@ -49,21 +61,19 @@ proc update_ipxe_boot_dir { } { } ## -# Create iPXE config file which directly boots an ISO file. +# Create iPXE config file which directly boots an image file. # -proc create_ipxe_iso_config { } { - if {[have_include "image/iso"]} { - set fh [open "[run_dir]/boot.cfg" "WRONLY CREAT TRUNC"] - puts $fh "#!ipxe" - puts $fh "sanboot [run_name].iso || goto failed" - puts $fh "" - puts $fh ":failed" - puts $fh "echo Booting failed, dropping to shell" - puts $fh "shell" - puts $fh "boot" - close $fh - } else { - puts "Warning, iPXE requires ISO image." - exit -1 - } +# Note, the sanboot URI works relative to the script path and honors the former +# protocol too (which must be http:// not tftp://) +# +proc create_ipxe_config { } { + set fh [open "[run_dir]/boot.cfg" "WRONLY CREAT TRUNC"] + puts $fh "#!ipxe" + puts $fh "sanboot [run_name].[image_extension] || goto failed" + puts $fh "" + puts $fh ":failed" + puts $fh "echo Booting failed, dropping to shell" + puts $fh "shell" + puts $fh "boot" + close $fh } From 47c924d1f5453ca1c2dd1796abbc2ecbef0aa869 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 23 Jun 2022 13:45:16 +0200 Subject: [PATCH 059/354] pc: use lx_emul_gen_random_bytes() for randomness Fixes #4544 --- repos/dde_linux/src/app/wireguard/lx_emul.c | 13 +++---- repos/dde_linux/src/include/lx_emul/random.h | 2 ++ repos/dde_linux/src/lib/lx_emul/random.cc | 7 ++++ repos/pc/lib/import/import-pc_lx_emul.mk | 2 ++ .../pc/recipes/src/pc_intel_fb_drv/used_apis | 11 +++--- .../pc/recipes/src/pc_usb_host_drv/used_apis | 7 ++-- .../framebuffer/intel/pc/generated_dummies.c | 18 +--------- .../drivers/framebuffer/intel/pc/target.inc | 3 +- repos/pc/src/drivers/usb_host/pc/target.inc | 3 +- .../pc/lx_emul/shadow/drivers/char/random.c | 34 ++++++++++++++++--- repos/pc/src/lib/wifi/generated_dummies.c | 7 +--- repos/pc/src/lib/wifi/lx_emul.c | 25 -------------- 12 files changed, 59 insertions(+), 73 deletions(-) diff --git a/repos/dde_linux/src/app/wireguard/lx_emul.c b/repos/dde_linux/src/app/wireguard/lx_emul.c index f365fe9c17..19adc25fea 100644 --- a/repos/dde_linux/src/app/wireguard/lx_emul.c +++ b/repos/dde_linux/src/app/wireguard/lx_emul.c @@ -1,6 +1,7 @@ /** * \brief Dummy definitions of lx_emul * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2022-01-10 */ @@ -48,9 +49,7 @@ int wait_for_random_bytes(void) u32 get_random_u32(void) { - u8 buf[4]; - lx_emul_gen_random_bytes(buf, sizeof(buf)); - return *((u32*)&buf); + return lx_emul_gen_random_uint(); } @@ -58,18 +57,16 @@ u32 get_random_u32(void) u32 prandom_u32(void) { - u8 buf[4]; - lx_emul_gen_random_bytes(buf, sizeof(buf)); - return *((u32*)&buf); + return lx_emul_gen_random_uint(); } #include -int __must_check get_random_bytes_arch(void * buf,int nbytes) +int __must_check get_random_bytes_arch(void * buf, int nbytes) { lx_emul_gen_random_bytes(buf, nbytes); - return 0; + return nbytes; } diff --git a/repos/dde_linux/src/include/lx_emul/random.h b/repos/dde_linux/src/include/lx_emul/random.h index f1dc75d289..52a3b65ad9 100644 --- a/repos/dde_linux/src/include/lx_emul/random.h +++ b/repos/dde_linux/src/include/lx_emul/random.h @@ -3,6 +3,7 @@ * \author Josef Soentgen * \author Stefan Kalkowski * \author Martin Stein + * \author Christian Helmuth * \date 2022-05-19 * * :Warning: @@ -41,6 +42,7 @@ void lx_emul_gen_random_bytes(void *dst, * Return a random unsigned integer value. */ unsigned int lx_emul_gen_random_uint(void); +unsigned long long lx_emul_gen_random_u64(void); #ifdef __cplusplus } diff --git a/repos/dde_linux/src/lib/lx_emul/random.cc b/repos/dde_linux/src/lib/lx_emul/random.cc index f679079454..a48f1515cb 100644 --- a/repos/dde_linux/src/lib/lx_emul/random.cc +++ b/repos/dde_linux/src/lib/lx_emul/random.cc @@ -3,6 +3,7 @@ * \author Josef Soentgen * \author Stefan Kalkowski * \author Martin Stein + * \author Christian Helmuth * \date 2022-05-19 * * :Warning: @@ -220,3 +221,9 @@ unsigned int lx_emul_gen_random_uint() { return (unsigned int)xoroshiro().get_u64(); } + + +unsigned long long lx_emul_gen_random_u64() +{ + return xoroshiro().get_u64(); +} diff --git a/repos/pc/lib/import/import-pc_lx_emul.mk b/repos/pc/lib/import/import-pc_lx_emul.mk index 73bb3d90a5..9c02a30e74 100644 --- a/repos/pc/lib/import/import-pc_lx_emul.mk +++ b/repos/pc/lib/import/import-pc_lx_emul.mk @@ -18,6 +18,7 @@ SRC_CC += lx_emul/clock.cc SRC_CC += lx_emul/io_mem.cc SRC_CC += lx_emul/io_port.cc SRC_CC += lx_emul/irq.cc +SRC_CC += lx_emul/random.cc SRC_C += lx_emul/shadow/kernel/dma/mapping.c SRC_C += lx_emul/shadow/kernel/irq/spurious.c SRC_C += lx_emul/shadow/kernel/rcu/tree.c @@ -51,6 +52,7 @@ SRC_C += lx_emul/shadow/fs/libfs.c SRC_C += lx_emul/shadow/kernel/rcu/tiny.c SRC_C += lx_emul/shadow/lib/logic_iomem.c +SRC_C += lx_emul/shadow/drivers/char/random.c SRC_C += lx_emul/shadow/drivers/acpi/bus.c SRC_C += lx_emul/shadow/drivers/acpi/device_sysfs.c SRC_C += lx_emul/shadow/drivers/acpi/glue.c diff --git a/repos/pc/recipes/src/pc_intel_fb_drv/used_apis b/repos/pc/recipes/src/pc_intel_fb_drv/used_apis index ba755919c7..ee690e84de 100644 --- a/repos/pc/recipes/src/pc_intel_fb_drv/used_apis +++ b/repos/pc/recipes/src/pc_intel_fb_drv/used_apis @@ -1,9 +1,10 @@ base -os -platform_session -timer_session -report_session -capture_session blit +capture_session genode_c_api +jitterentropy +os pc_linux +platform_session +report_session +timer_session diff --git a/repos/pc/recipes/src/pc_usb_host_drv/used_apis b/repos/pc/recipes/src/pc_usb_host_drv/used_apis index afb8da2145..eb4df41388 100644 --- a/repos/pc/recipes/src/pc_usb_host_drv/used_apis +++ b/repos/pc/recipes/src/pc_usb_host_drv/used_apis @@ -1,8 +1,9 @@ base +genode_c_api +jitterentropy os +pc_linux platform_session +report_session timer_session usb_session -report_session -genode_c_api -pc_linux diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c index 888c36eb27..898a69f001 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-05-06 + * \date 2022-06-24 */ #include @@ -620,22 +620,6 @@ int get_option(char ** str,int * pint) } -#include - -u32 get_random_u32(void) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -u64 get_random_u64(void) -{ - lx_emul_trace_and_stop(__func__); -} - - #include s32 i2c_smbus_read_block_data(const struct i2c_client * client,u8 command,u8 * values) diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc index 235ce2e1b5..0d6b27b0a1 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc @@ -3,7 +3,7 @@ REQUIRES := x86 REL_PRG_DIR := $(PRG_DIR)/../.. TARGET := pc_intel_fb_drv -LIBS := base pc_lx_emul blit +LIBS := base pc_lx_emul blit jitterentropy INC_DIR += $(REL_PRG_DIR) INC_DIR += $(REL_PRG_DIR)/shadow @@ -22,7 +22,6 @@ SRC_C += timeout.c SRC_C += lx_emul/common_dummies.c SRC_C += lx_emul/spec/x86/pci.c SRC_C += lx_emul/shadow/mm/page_alloc.c -SRC_C += lx_emul/shadow/drivers/char/random.c vpath %.c $(REL_PRG_DIR) vpath %.cc $(REL_PRG_DIR) diff --git a/repos/pc/src/drivers/usb_host/pc/target.inc b/repos/pc/src/drivers/usb_host/pc/target.inc index bdee0a8fb2..3a27cb1712 100644 --- a/repos/pc/src/drivers/usb_host/pc/target.inc +++ b/repos/pc/src/drivers/usb_host/pc/target.inc @@ -3,7 +3,7 @@ REQUIRES := x86 REL_PRG_DIR := $(PRG_DIR)/../.. TARGET := pc_usb_host_drv -LIBS := base pc_lx_emul +LIBS := base pc_lx_emul jitterentropy INC_DIR += $(REL_PRG_DIR) SRC_CC += main.cc @@ -15,7 +15,6 @@ SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c)) SRC_C += common_dummies.c SRC_C += lx_emul/spec/x86/pci.c SRC_C += lx_emul/usb.c -SRC_C += lx_emul/shadow/drivers/char/random.c SRC_C += lx_emul/shadow/lib/kobject_uevent.c vpath %.c $(REP_DIR)/src/lib/pc diff --git a/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c b/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c index e1e6d9d818..07b57fcca6 100644 --- a/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c +++ b/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c @@ -1,6 +1,7 @@ /* * \brief Replaces drivers/char/random.c * \author Josef Soentgen + * \author Christian Helmuth * \date 2022-04-05 */ @@ -12,17 +13,40 @@ */ #include +#include #include -void get_random_bytes(void * buf,int nbytes) + +void add_input_randomness(unsigned int type,unsigned int code,unsigned int value) { - lx_emul_trace(__func__); + lx_emul_trace(__func__); } -int __must_check get_random_bytes_arch(void * buf,int nbytes) +u32 get_random_u32(void) { - lx_emul_trace(__func__); - return 0; + return lx_emul_gen_random_uint(); +} + + +u64 get_random_u64(void) +{ + return lx_emul_gen_random_u64(); +} + + +int __must_check get_random_bytes_arch(void *buf, int nbytes) +{ + if (nbytes < 0) + return -1; + + lx_emul_gen_random_bytes(buf, nbytes); + return nbytes; +} + + +void get_random_bytes(void *buf, int nbytes) +{ + nbytes = get_random_bytes_arch(buf, nbytes); } diff --git a/repos/pc/src/lib/wifi/generated_dummies.c b/repos/pc/src/lib/wifi/generated_dummies.c index 169d98ec4a..4fa6817810 100644 --- a/repos/pc/src/lib/wifi/generated_dummies.c +++ b/repos/pc/src/lib/wifi/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-05-06 + * \date 2022-06-24 */ #include @@ -578,11 +578,6 @@ bool is_software_node(const struct fwnode_handle * fwnode) } -#include - -unsigned long volatile __cacheline_aligned_in_smp __jiffy_arch_data jiffies; - - #include struct kobject *kernel_kobj; diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index 92aa7c210a..7d56801eaa 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -455,31 +455,6 @@ void __put_page(struct page * page) } -#include - -u32 get_random_u32(void) -{ - return lx_emul_gen_random_uint(); -} - - -int __must_check get_random_bytes_arch(void *buf, int nbytes) -{ - if (nbytes < 0) - return -1; - - lx_emul_gen_random_bytes(buf, (unsigned long)nbytes); - return 0; -} - - -void get_random_bytes(void *buf, int nbytes) -{ - int const err = get_random_bytes_arch(buf, nbytes); - (void)err; -} - - #include void prandom_bytes(void *buf, size_t bytes) From ab9a2107e42842843ffee155a1df2446c508b743 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 1 Jul 2022 17:04:22 +0200 Subject: [PATCH 060/354] nova: support interrupt mode config in assign_gsi Fixes #4553 --- .../base-nova/include/nova/syscall-generic.h | 24 ++++++ .../include/spec/32bit/nova/syscalls.h | 4 +- .../include/spec/64bit/nova/syscalls.h | 4 +- repos/base-nova/ports/nova.hash | 2 +- repos/base-nova/ports/nova.port | 2 +- repos/base-nova/src/core/include/irq_object.h | 14 ++-- .../src/core/irq_session_component.cc | 80 ++++++++++++------- 7 files changed, 88 insertions(+), 42 deletions(-) diff --git a/repos/base-nova/include/nova/syscall-generic.h b/repos/base-nova/include/nova/syscall-generic.h index 1692e5aa84..f37e4042c3 100644 --- a/repos/base-nova/include/nova/syscall-generic.h +++ b/repos/base-nova/include/nova/syscall-generic.h @@ -257,6 +257,30 @@ namespace Nova { */ enum Pd_op { TRANSFER_QUOTA = 0U, PD_DEBUG = 2U }; + class Gsi_flags + { + private: + + uint8_t _value { 0 }; + + public: + + enum Mode { HIGH, LOW, EDGE }; + + Gsi_flags() { } + + Gsi_flags(Mode m) + { + switch (m) { + case HIGH: _value = 0b110; break; /* level-high */ + case LOW: _value = 0b111; break; /* level-low */ + case EDGE: _value = 0b100; break; /* edge-triggered */ + } + } + + uint8_t value() const { return _value; } + }; + class Descriptor { diff --git a/repos/base-nova/include/spec/32bit/nova/syscalls.h b/repos/base-nova/include/spec/32bit/nova/syscalls.h index e52c61d334..6fb41d4fee 100644 --- a/repos/base-nova/include/spec/32bit/nova/syscalls.h +++ b/repos/base-nova/include/spec/32bit/nova/syscalls.h @@ -457,12 +457,12 @@ namespace Nova { ALWAYS_INLINE inline uint8_t assign_gsi(mword_t sm, mword_t dev, mword_t cpu, mword_t &msi_addr, mword_t &msi_data, - mword_t si = ~0UL) + mword_t si = ~0UL, Gsi_flags flags = Gsi_flags()) { msi_addr = dev; msi_data = cpu; - return syscall_5(NOVA_ASSIGN_GSI, 0, sm, msi_addr, msi_data, si); + return syscall_5(NOVA_ASSIGN_GSI, flags.value(), sm, msi_addr, msi_data, si); } diff --git a/repos/base-nova/include/spec/64bit/nova/syscalls.h b/repos/base-nova/include/spec/64bit/nova/syscalls.h index 3ab7e887ed..9e8fa765fc 100644 --- a/repos/base-nova/include/spec/64bit/nova/syscalls.h +++ b/repos/base-nova/include/spec/64bit/nova/syscalls.h @@ -402,11 +402,11 @@ namespace Nova { ALWAYS_INLINE inline uint8_t assign_gsi(mword_t sm, mword_t dev, mword_t cpu, mword_t &msi_addr, mword_t &msi_data, - mword_t si = ~0UL) + mword_t si = ~0UL, Gsi_flags flags = Gsi_flags()) { msi_addr = dev; msi_data = cpu; - return syscall_5(NOVA_ASSIGN_GSI, 0, sm, msi_addr, msi_data, si); + return syscall_5(NOVA_ASSIGN_GSI, flags.value(), sm, msi_addr, msi_data, si); } } #endif /* _INCLUDE__SPEC__64BIT__NOVA__SYSCALLS_H_ */ diff --git a/repos/base-nova/ports/nova.hash b/repos/base-nova/ports/nova.hash index bf8d5f7d78..8a005e973e 100644 --- a/repos/base-nova/ports/nova.hash +++ b/repos/base-nova/ports/nova.hash @@ -1 +1 @@ -33a2fa953ec52b0f63b921f4d33d68891c0aada0 +1b4d51180f6c3e64b2adb13a27257ef0544b859d diff --git a/repos/base-nova/ports/nova.port b/repos/base-nova/ports/nova.port index 90f33a67b9..0e21666094 100644 --- a/repos/base-nova/ports/nova.port +++ b/repos/base-nova/ports/nova.port @@ -4,7 +4,7 @@ DOWNLOADS := nova.git # r10 branch URL(nova) := https://github.com/alex-ab/NOVA.git -REV(nova) := 00dc49bc18e7f72a9c85487e8f94fd859511d89d +REV(nova) := 87db5b14163bc5e8b5dac6b191dbbe4833fb8cb3 DIR(nova) := src/kernel/nova PATCHES := $(sort $(wildcard $(REP_DIR)/patches/*.patch)) diff --git a/repos/base-nova/src/core/include/irq_object.h b/repos/base-nova/src/core/include/irq_object.h index e3a681bd2d..869eeed784 100644 --- a/repos/base-nova/src/core/include/irq_object.h +++ b/repos/base-nova/src/core/include/irq_object.h @@ -13,7 +13,9 @@ #ifndef _CORE__INCLUDE__IRQ_OBJECT_H_ #define _CORE__INCLUDE__IRQ_OBJECT_H_ -namespace Genode { class Irq_object; } +#include /* Gsi_flags */ + +namespace Genode { class Irq_object; class Irq_args; } class Genode::Irq_object { @@ -26,22 +28,24 @@ class Genode::Irq_object addr_t _msi_data; addr_t _device_phys = 0; /* PCI config extended address */ + Nova::Gsi_flags _gsi_flags { }; + enum { KERNEL_CAP_COUNT_LOG2 = 0 }; - Genode::addr_t irq_sel() const { return _kernel_caps; } + addr_t irq_sel() const { return _kernel_caps; } public: Irq_object(); ~Irq_object(); - Genode::addr_t msi_address() const { return _msi_addr; } - Genode::addr_t msi_value() const { return _msi_data; } + addr_t msi_address() const { return _msi_addr; } + addr_t msi_value() const { return _msi_data; } void sigh(Signal_context_capability cap); void ack_irq(); - void start(unsigned irq, Genode::addr_t); + void start(unsigned irq, addr_t, Irq_args const &); }; #endif /* _CORE__INCLUDE__IRQ_OBJECT_H_ */ diff --git a/repos/base-nova/src/core/irq_session_component.cc b/repos/base-nova/src/core/irq_session_component.cc index 472d885ce1..2d98d3f5bc 100644 --- a/repos/base-nova/src/core/irq_session_component.cc +++ b/repos/base-nova/src/core/irq_session_component.cc @@ -18,6 +18,7 @@ /* core includes */ #include +#include #include /* NOVA includes */ @@ -27,13 +28,12 @@ using namespace Genode; -static bool irq_ctrl(Genode::addr_t irq_sel, - Genode::addr_t &msi_addr, Genode::addr_t &msi_data, - Genode::addr_t sig_sel, Genode::addr_t virt_addr = 0) +static bool irq_ctrl(addr_t irq_sel, addr_t &msi_addr, addr_t &msi_data, + addr_t sig_sel, Nova::Gsi_flags flags, addr_t virt_addr) { /* assign IRQ to CPU && request msi data to be used by driver */ uint8_t res = Nova::assign_gsi(irq_sel, virt_addr, boot_cpu(), - msi_addr, msi_data, sig_sel); + msi_addr, msi_data, sig_sel, flags); if (res != Nova::NOVA_OK) error("setting up MSI failed - error ", res); @@ -46,30 +46,28 @@ static bool irq_ctrl(Genode::addr_t irq_sel, } -static bool associate(Genode::addr_t irq_sel, - Genode::addr_t &msi_addr, Genode::addr_t &msi_data, - Genode::Signal_context_capability sig_cap, - Genode::addr_t virt_addr = 0) -{ - return irq_ctrl(irq_sel, msi_addr, msi_data, sig_cap.local_name(), - virt_addr); -} - - -static void deassociate(Genode::addr_t irq_sel) +static bool associate_gsi(addr_t irq_sel, Signal_context_capability sig_cap, + Nova::Gsi_flags gsi_flags) { addr_t dummy1 = 0, dummy2 = 0; - if (!irq_ctrl(irq_sel, dummy1, dummy2, irq_sel)) + return irq_ctrl(irq_sel, dummy1, dummy2, sig_cap.local_name(), gsi_flags, 0); +} + + +static void deassociate(addr_t irq_sel) +{ + addr_t dummy1 = 0, dummy2 = 0; + + if (!irq_ctrl(irq_sel, dummy1, dummy2, irq_sel, Nova::Gsi_flags(), 0)) warning("Irq could not be de-associated"); } -static bool msi(Genode::addr_t irq_sel, Genode::addr_t phys_mem, - Genode::addr_t &msi_addr, Genode::addr_t &msi_data, - Genode::Signal_context_capability sig_cap) +static bool associate_msi(addr_t irq_sel, addr_t phys_mem, addr_t &msi_addr, + addr_t &msi_data, Signal_context_capability sig_cap) { - return platform().region_alloc().alloc_aligned(4096, 12).convert( + return platform().region_alloc().alloc_aligned(4096, 12).convert( [&] (void *virt_ptr) { @@ -89,7 +87,7 @@ static bool msi(Genode::addr_t irq_sel, Genode::addr_t phys_mem, } /* try to assign MSI to device */ - bool res = associate(irq_sel, msi_addr, msi_data, sig_cap, virt_addr); + bool res = irq_ctrl(irq_sel, msi_addr, msi_data, sig_cap.local_name(), Nova::Gsi_flags(), virt_addr); unmap_local(Nova::Mem_crd(virt_addr >> 12, 0, Rights(true, true, true))); platform().region_alloc().free(virt_ptr, 4096); @@ -118,11 +116,12 @@ void Irq_object::sigh(Signal_context_capability cap) return; } + /* associate GSI or MSI to device belonging to device_phys */ bool ok = false; if (_device_phys) - ok = msi(irq_sel(), _device_phys, _msi_addr, _msi_data, cap); + ok = associate_msi(irq_sel(), _device_phys, _msi_addr, _msi_data, cap); else - ok = associate(irq_sel(), _msi_addr, _msi_data, cap); + ok = associate_gsi(irq_sel(), cap, _gsi_flags); if (!ok) { deassociate(irq_sel()); @@ -141,7 +140,7 @@ void Irq_object::ack_irq() } -void Irq_object::start(unsigned irq, Genode::addr_t const device_phys) +void Irq_object::start(unsigned irq, addr_t const device_phys, Irq_args const &irq_args) { /* map IRQ SM cap from kernel to core at irq_sel selector */ using Nova::Obj_crd; @@ -158,12 +157,29 @@ void Irq_object::start(unsigned irq, Genode::addr_t const device_phys) throw Service_denied(); } + /* initialize GSI IRQ flags */ + auto gsi_flags = [] (Irq_args const &args) { + if (args.trigger() == Irq_session::TRIGGER_UNCHANGED + || args.polarity() == Irq_session::POLARITY_UNCHANGED) + return Nova::Gsi_flags(); + + if (args.trigger() == Irq_session::TRIGGER_EDGE) + return Nova::Gsi_flags(Nova::Gsi_flags::EDGE); + + if (args.polarity() == Irq_session::POLARITY_HIGH) + return Nova::Gsi_flags(Nova::Gsi_flags::HIGH); + else + return Nova::Gsi_flags(Nova::Gsi_flags::LOW); + }; + + _gsi_flags = gsi_flags(irq_args); + /* associate GSI or MSI to device belonging to device_phys */ bool ok = false; if (device_phys) - ok = msi(irq_sel(), device_phys, _msi_addr, _msi_data, _sigh_cap); + ok = associate_msi(irq_sel(), device_phys, _msi_addr, _msi_data, _sigh_cap); else - ok = associate(irq_sel(), _msi_addr, _msi_data, _sigh_cap); + ok = associate_gsi(irq_sel(), _sigh_cap, _gsi_flags); if (!ok) throw Service_denied(); @@ -212,7 +228,9 @@ Irq_session_component::Irq_session_component(Range_allocator &irq_alloc, : _irq_number(~0U), _irq_alloc(irq_alloc), _irq_object() { - long irq_number = Arg_string::find_arg(args, "irq_number").long_value(-1); + Irq_args const irq_args(args); + + long irq_number = irq_args.irq_number(); long device_phys = Arg_string::find_arg(args, "device_config_phys").long_value(0); if (device_phys) { @@ -232,7 +250,7 @@ Irq_session_component::Irq_session_component(Range_allocator &irq_alloc, _irq_number = (unsigned)irq_number; - _irq_object.start(_irq_number, device_phys); + _irq_object.start(_irq_number, device_phys, irq_args); } @@ -241,7 +259,7 @@ Irq_session_component::~Irq_session_component() if (_irq_number == ~0U) return; - Genode::addr_t free_irq = _irq_number; + addr_t free_irq = _irq_number; _irq_alloc.free((void *)free_irq); } @@ -252,13 +270,13 @@ void Irq_session_component::ack_irq() } -void Irq_session_component::sigh(Genode::Signal_context_capability cap) +void Irq_session_component::sigh(Signal_context_capability cap) { _irq_object.sigh(cap); } -Genode::Irq_session::Info Irq_session_component::info() +Irq_session::Info Irq_session_component::info() { if (!_irq_object.msi_address() || !_irq_object.msi_value()) return { .type = Info::Type::INVALID, .address = 0, .value = 0 }; From 87aa456bfd0a3110deeba261d716330888e98961 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 29 Jun 2022 13:03:51 +0200 Subject: [PATCH 061/354] lx_emul: remove 'shadow/softirq.c' from common imports softirq.c implements tasklets that need on the PinePhone cannot be called directly. issue #4557 --- repos/dde_linux/lib/import/import-lx_emul_common.inc | 1 - repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc | 2 ++ .../src/include/lx_emul/shadow/arch/arm/include/asm/spinlock.h | 2 +- .../include/lx_emul/shadow/arch/arm64/include/asm/spinlock.h | 3 +-- .../src/include/lx_emul/shadow/arch/x86/include/asm/spinlock.h | 2 +- repos/pc/lib/mk/wifi.inc | 1 + repos/pc/src/drivers/framebuffer/intel/pc/target.inc | 1 + repos/pc/src/drivers/usb_host/pc/target.inc | 1 + 8 files changed, 8 insertions(+), 5 deletions(-) diff --git a/repos/dde_linux/lib/import/import-lx_emul_common.inc b/repos/dde_linux/lib/import/import-lx_emul_common.inc index 3b1c409389..48ae69e364 100644 --- a/repos/dde_linux/lib/import/import-lx_emul_common.inc +++ b/repos/dde_linux/lib/import/import-lx_emul_common.inc @@ -26,7 +26,6 @@ SRC_C += lx_emul/shadow/kernel/fork.c SRC_C += lx_emul/shadow/kernel/pid.c SRC_C += lx_emul/shadow/kernel/printk/printk.c SRC_C += lx_emul/shadow/kernel/sched/core.c -SRC_C += lx_emul/shadow/kernel/softirq.c SRC_C += lx_emul/shadow/mm/percpu.c SRC_C += lx_emul/shadow/mm/slab_common.c SRC_C += lx_emul/shadow/mm/slub.c diff --git a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc index c881e4d1ab..f224718051 100644 --- a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc +++ b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc @@ -17,10 +17,12 @@ SRC_C += dummies_arch.c SRC_C += lx_emul.c SRC_C += wireguard.c SRC_C += genode_c_api_arch.c +SRC_C += softirq.c vpath wireguard.c $(GEN_PRG_DIR)/genode_c_api vpath %.c $(PRG_DIR) vpath %.c $(GEN_PRG_DIR) +vpath softirq.c $(REP_DIR)/src/lib/lx_emul/shadow/kernel INC_DIR += $(PRG_DIR) INC_DIR += $(GEN_PRG_DIR) diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/arm/include/asm/spinlock.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/arm/include/asm/spinlock.h index 11b8b4f823..73091f5ba0 100644 --- a/repos/dde_linux/src/include/lx_emul/shadow/arch/arm/include/asm/spinlock.h +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/arm/include/asm/spinlock.h @@ -32,7 +32,7 @@ static inline int arch_spin_is_locked(arch_spinlock_t *lock) static inline void arch_spin_lock(arch_spinlock_t *lock) { if (arch_spin_is_locked(lock)) { - printk("Error: spinlock contention!"); + printk("Error: spinlock contention!\n"); lx_emul_trace_and_stop(__func__); } lock->slock = 1; diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/arm64/include/asm/spinlock.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/arm64/include/asm/spinlock.h index 67ab77d23f..572b501b1a 100644 --- a/repos/dde_linux/src/include/lx_emul/shadow/arch/arm64/include/asm/spinlock.h +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/arm64/include/asm/spinlock.h @@ -22,7 +22,6 @@ #include - static inline int arch_spin_is_locked(arch_spinlock_t *lock) { return (atomic_read(&lock->val)) ? 1 : 0; @@ -32,7 +31,7 @@ static inline int arch_spin_is_locked(arch_spinlock_t *lock) static inline void arch_spin_lock(arch_spinlock_t *lock) { if (arch_spin_is_locked(lock)) { - printk("Error: spinlock contention!"); + printk("Error: spinlock contention!\n"); lx_emul_trace_and_stop(__func__); } atomic_set(&lock->val, 1); diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/spinlock.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/spinlock.h index 67ab77d23f..95099051e8 100644 --- a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/spinlock.h +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/spinlock.h @@ -32,7 +32,7 @@ static inline int arch_spin_is_locked(arch_spinlock_t *lock) static inline void arch_spin_lock(arch_spinlock_t *lock) { if (arch_spin_is_locked(lock)) { - printk("Error: spinlock contention!"); + printk("Error: spinlock contention!\n"); lx_emul_trace_and_stop(__func__); } atomic_set(&lock->val, 1); diff --git a/repos/pc/lib/mk/wifi.inc b/repos/pc/lib/mk/wifi.inc index 1510384a19..aaa1a1aba8 100644 --- a/repos/pc/lib/mk/wifi.inc +++ b/repos/pc/lib/mk/wifi.inc @@ -40,6 +40,7 @@ CC_C_OPT += -DCONFIG_RFKILL_INPUT #CC_OPT += -DCONFIG_IWLWIFI_DEBUG +SRC_C += lx_emul/shadow/kernel/softirq.c SRC_C += lx_emul/shadow/lib/kobject_uevent.c vpath %.c $(REP_DIR)/src/lib/pc vpath %.cc $(REP_DIR)/src/lib/pc diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc index 0d6b27b0a1..3a22d97bf3 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc @@ -21,6 +21,7 @@ SRC_C += gem.c SRC_C += timeout.c SRC_C += lx_emul/common_dummies.c SRC_C += lx_emul/spec/x86/pci.c +SRC_C += lx_emul/shadow/kernel/softirq.c SRC_C += lx_emul/shadow/mm/page_alloc.c vpath %.c $(REL_PRG_DIR) diff --git a/repos/pc/src/drivers/usb_host/pc/target.inc b/repos/pc/src/drivers/usb_host/pc/target.inc index 3a27cb1712..30c05fc283 100644 --- a/repos/pc/src/drivers/usb_host/pc/target.inc +++ b/repos/pc/src/drivers/usb_host/pc/target.inc @@ -15,6 +15,7 @@ SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c)) SRC_C += common_dummies.c SRC_C += lx_emul/spec/x86/pci.c SRC_C += lx_emul/usb.c +SRC_C += lx_emul/shadow/kernel/softirq.c SRC_C += lx_emul/shadow/lib/kobject_uevent.c vpath %.c $(REP_DIR)/src/lib/pc From 96b147b63d495d5d760bb6370176aefb70680023 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 6 Jul 2022 18:57:03 +0200 Subject: [PATCH 062/354] dde_linux/usb/legacy: only free completed URBs In case a USB client cancelled URBs, do not free them, wait until the packets/URBs are acked by the USB session. issue #4557 --- repos/dde_linux/src/include/legacy/lx_emul/impl/usb.h | 5 ++++- repos/dde_linux/src/include/legacy/lx_kit/usb.h | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/repos/dde_linux/src/include/legacy/lx_emul/impl/usb.h b/repos/dde_linux/src/include/legacy/lx_emul/impl/usb.h index e4ff16a6c0..2789a9e29c 100644 --- a/repos/dde_linux/src/include/legacy/lx_emul/impl/usb.h +++ b/repos/dde_linux/src/include/legacy/lx_emul/impl/usb.h @@ -112,7 +112,6 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags) return 0; } - void usb_free_urb(struct urb *urb) { if (!urb) @@ -121,6 +120,10 @@ void usb_free_urb(struct urb *urb) /* free 'Urb' object */ if (urb->hcpriv) { Urb *u = (Urb*)urb->hcpriv; + + /* URB is not fred through packet stream */ + if (u->completed() == false) return; + u->~Urb(); kfree(urb->hcpriv); } diff --git a/repos/dde_linux/src/include/legacy/lx_kit/usb.h b/repos/dde_linux/src/include/legacy/lx_kit/usb.h index d9976b6cdd..6d503b0efe 100644 --- a/repos/dde_linux/src/include/legacy/lx_kit/usb.h +++ b/repos/dde_linux/src/include/legacy/lx_kit/usb.h @@ -139,10 +139,12 @@ class Urb : public Usb::Completion } } - if (_urb.complete) _urb.complete(&_urb); - _completed = true; + + if (_urb.complete) _urb.complete(&_urb); } + + bool completed() const { return _completed; } }; From 64c81e28468dbd98b09454fa13c9bee8c89c7a05 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Sun, 3 Jul 2022 17:49:17 +0200 Subject: [PATCH 063/354] usb_net: Add cdc_ether ECM support * Enable ECM devices * Allow disconnect of devices * Handle link state correctly * Required by PinePhone's USB modem issue #4557 --- repos/dde_linux/lib/mk/usb_net_include.mk | 2 +- repos/dde_linux/ports/dde_linux.hash | 2 +- repos/dde_linux/src/drivers/usb_net/driver.h | 53 +++ repos/dde_linux/src/drivers/usb_net/dummies.c | 93 +---- .../dde_linux/src/drivers/usb_net/lx_emul.cc | 89 ++++- repos/dde_linux/src/drivers/usb_net/lx_emul.h | 10 + repos/dde_linux/src/drivers/usb_net/lxc.c | 359 ++++++++++++++++++ repos/dde_linux/src/drivers/usb_net/main.cc | 28 +- repos/dde_linux/src/drivers/usb_net/target.mk | 5 + repos/dde_linux/usb_net.list | 6 + 10 files changed, 555 insertions(+), 92 deletions(-) diff --git a/repos/dde_linux/lib/mk/usb_net_include.mk b/repos/dde_linux/lib/mk/usb_net_include.mk index 6629578512..0c83605915 100644 --- a/repos/dde_linux/lib/mk/usb_net_include.mk +++ b/repos/dde_linux/lib/mk/usb_net_include.mk @@ -8,7 +8,7 @@ LX_EMUL_H := $(REP_DIR)/src/drivers/usb_net/lx_emul.h # of these header files we create a symlink to 'lx_emul.h'. # SCAN_DIRS := $(addprefix $(USB_NET_CONTRIB_DIR)/include/, asm-generic linux uapi net) \ - $(addprefix $(USB_NET_CONTRIB_DIR)/, drivers net) + $(addprefix $(USB_NET_CONTRIB_DIR)/, drivers net lib) GEN_INCLUDES := $(shell grep -rIh "^\#include .*\/" $(SCAN_DIRS) |\ sed "s/^\#include [^<\"]*[<\"]\([^>\"]*\)[>\"].*/\1/" |\ sort | uniq) diff --git a/repos/dde_linux/ports/dde_linux.hash b/repos/dde_linux/ports/dde_linux.hash index 1551b47f15..c5b7b44a2b 100644 --- a/repos/dde_linux/ports/dde_linux.hash +++ b/repos/dde_linux/ports/dde_linux.hash @@ -1 +1 @@ -447158aa8aa24d4e2925a0479d8710a2d7d738e9 +f56657b5edae9fb069db1b5846bca4aebe7ce542 diff --git a/repos/dde_linux/src/drivers/usb_net/driver.h b/repos/dde_linux/src/drivers/usb_net/driver.h index 3505117f13..e1e265c8e6 100644 --- a/repos/dde_linux/src/drivers/usb_net/driver.h +++ b/repos/dde_linux/src/drivers/usb_net/driver.h @@ -26,6 +26,10 @@ /* Linux emulation environment includes */ #include +#include +#include +#include +#include struct usb_device_id; struct usb_interface; @@ -93,6 +97,55 @@ struct Driver } }; + + class Sync_packet : public Usb::Completion + { + private: + + Usb::Session_client & _usb; + Usb::Packet_descriptor _packet { _usb.source()->alloc_packet(0) }; + completion _comp; + + public: + + Sync_packet(Usb::Session_client &usb) : _usb(usb) + { + init_completion(&_comp); + } + + virtual ~Sync_packet() + { + _usb.source()->release_packet(_packet); + } + + void complete(Usb::Packet_descriptor &p) override + { + ::complete(&_comp); + } + + void send() + { + _packet.completion = this; + _usb.source()->submit_packet(_packet); + wait_for_completion(&_comp); + } + + void config(int configuration) + { + _packet.type = Usb::Packet_descriptor::CONFIG; + _packet.number = configuration; + send(); + } + + void alt_setting(int interface, int alt_setting) + { + _packet.type = Usb::Packet_descriptor::ALT_SETTING; + _packet.interface.number = interface; + _packet.interface.alt_setting = alt_setting; + send(); + } + }; + Devices devices; Genode::Env &env; Genode::Entrypoint &ep { env.ep() }; diff --git a/repos/dde_linux/src/drivers/usb_net/dummies.c b/repos/dde_linux/src/drivers/usb_net/dummies.c index d5c4c9f5d9..a17d52d16f 100644 --- a/repos/dde_linux/src/drivers/usb_net/dummies.c +++ b/repos/dde_linux/src/drivers/usb_net/dummies.c @@ -27,14 +27,6 @@ u16 bitrev16(u16 in) return -1; } -struct usb_cdc_parsed_header; -struct usb_interface; -int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr, struct usb_interface *intf, u8 *buffer, int buflen) -{ - TRACE_AND_STOP; - return -1; -} - u16 crc16(u16 crc, const u8 *buffer, size_t len) { TRACE_AND_STOP; @@ -53,24 +45,12 @@ __wsum csum_partial(const void *buff, int len, __wsum sum) return -1; } -void * dev_get_drvdata(const struct device *dev) -{ - TRACE_AND_STOP; - return NULL; -} - int device_set_wakeup_enable(struct device *dev, bool enable) { TRACE_AND_STOP; return -1; } -struct sk_buff; -void dev_kfree_skb_any(struct sk_buff *skb) -{ - TRACE_AND_STOP; -} - void dst_release(struct dst_entry *dst) { TRACE_AND_STOP; @@ -95,11 +75,6 @@ bool file_ns_capable(const struct file *file, struct user_namespace *ns, int cap return -1; } -void free_netdev(struct net_device * ndev) -{ - TRACE_AND_STOP; -} - void free_uid(struct user_struct * user) { TRACE_AND_STOP; @@ -129,12 +104,6 @@ bool gfp_pfmemalloc_allowed(gfp_t gfp_flags) return -1; } -int hex2bin(u8 *dst, const char *src, size_t count) -{ - TRACE_AND_STOP; - return -1; -} - int in_irq() { TRACE_AND_STOP; @@ -255,11 +224,6 @@ void read_unlock_bh(rwlock_t * l) TRACE_AND_STOP; } -void unregister_netdev(struct net_device * dev) -{ - TRACE_AND_STOP; -} - void secpath_reset(struct sk_buff * skb) { TRACE; @@ -267,7 +231,7 @@ void secpath_reset(struct sk_buff * skb) void __set_current_state(int state) { - TRACE_AND_STOP; + TRACE; } void sg_init_table(struct scatterlist *sg, unsigned int arg) @@ -318,7 +282,7 @@ size_t strlcpy(char *dest, const char *src, size_t size) void tasklet_kill(struct tasklet_struct *t) { - TRACE_AND_STOP; + TRACE; } void trace_consume_skb(struct sk_buff *skb) @@ -351,17 +315,21 @@ int usb_clear_halt(struct usb_device *dev, int pipe) } struct usb_driver; -int usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void *priv) -{ - TRACE_AND_STOP; - return -1; -} - +struct usb_interface; void usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface) { - TRACE_AND_STOP; + TRACE; } + +/* only called to kill interrupt urb in usbnet.c */ +struct urb; +void usb_kill_urb(struct urb *urb) +{ + TRACE; +} + + struct usb_anchor; struct urb *usb_get_from_anchor(struct usb_anchor *anchor) { @@ -369,12 +337,6 @@ struct urb *usb_get_from_anchor(struct usb_anchor *anchor) return NULL; } -struct urb *usb_get_urb(struct urb *urb) -{ - TRACE_AND_STOP; - return NULL; -} - int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout) { TRACE_AND_STOP; @@ -383,13 +345,7 @@ int usb_interrupt_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, void usb_scuttle_anchored_urbs(struct usb_anchor *anchor) { - TRACE_AND_STOP; -} - -int usb_string(struct usb_device *dev, int index, char *buf, size_t size) -{ - TRACE_AND_STOP; - return -1; + TRACE; } ktime_t ktime_get_real(void) @@ -419,29 +375,20 @@ void put_page(struct page *page) TRACE_AND_STOP; } -struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev, unsigned ifnum) -{ - TRACE_AND_STOP; - return NULL; -} - -void usb_kill_urb(struct urb *urb) -{ - TRACE_AND_STOP; -} - -int usb_set_interface(struct usb_device *dev, int ifnum, int alternate) +int usb_unlink_urb(struct urb *urb) { TRACE; return 0; } -int usb_unlink_urb(struct urb *urb) + +struct urb *usb_get_urb(struct urb *urb) { - TRACE_AND_STOP; - return -1; + TRACE; + return NULL; } + void usleep_range(unsigned long min, unsigned long max) { TRACE; diff --git a/repos/dde_linux/src/drivers/usb_net/lx_emul.cc b/repos/dde_linux/src/drivers/usb_net/lx_emul.cc index 04deeb88dd..70a7cc1e9e 100644 --- a/repos/dde_linux/src/drivers/usb_net/lx_emul.cc +++ b/repos/dde_linux/src/drivers/usb_net/lx_emul.cc @@ -30,6 +30,8 @@ #include #include +#include + static int usb_match_device(struct usb_device *dev, const struct usb_device_id *id) @@ -203,12 +205,6 @@ Genode::Ram_dataspace_capability Lx::backend_alloc(Genode::addr_t size, } -Genode::addr_t Lx::backend_dma_addr(Genode::Ram_dataspace_capability) -{ - return 0; -} - - int usb_register_driver(struct usb_driver * driver, struct module *, const char *) { INIT_LIST_HEAD(&driver->dynids.list); @@ -217,25 +213,66 @@ int usb_register_driver(struct usb_driver * driver, struct module *, const char } +Genode::addr_t Lx::backend_dma_addr(Genode::Ram_dataspace_capability) +{ + return 0; +} + + +int usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void *priv) +{ + usb_device *udev = interface_to_usbdev(iface); + Usb::Connection *usb = reinterpret_cast(udev->bus->controller); + try { + usb->claim_interface(iface->cur_altsetting->desc.bInterfaceNumber); + } catch (...) { + return -1; + } + return 0; +} + + +int usb_set_interface(struct usb_device *udev, int ifnum, int alternate) +{ + Usb::Connection *usb = reinterpret_cast(udev->bus->controller); + Driver::Sync_packet packet { *usb }; + packet.alt_setting(ifnum, alternate); + usb_interface *iface = udev->config->interface[ifnum]; + iface->cur_altsetting = &iface->altsetting[alternate]; + + return 0; +} + void Driver::Device::probe_interface(usb_interface * iface, usb_device_id * id) { using Le = Genode::List_element; for (Le *le = Lx_driver::list().first(); le; le = le->next()) { usb_device_id * id = le->object()->match(iface); - if (id && le->object()->probe(iface, id)) return; + + if (id) { + int ret = le->object()->probe(iface, id); + if (ret == 0) return; + } } } void Driver::Device::remove_interface(usb_interface * iface) { - to_usb_driver(iface->dev.driver)->disconnect(iface); + /* we might not drive this interface */ + if (iface->dev.driver) { + usbnet *dev =(usbnet* )usb_get_intfdata(iface); + usbnet_link_change(dev, 0, 0); + to_usb_driver(iface->dev.driver)->disconnect(iface); + } + for (unsigned i = 0; i < iface->num_altsetting; i++) { if (iface->altsetting[i].extra) kfree(iface->altsetting[i].extra); kfree(iface->altsetting[i].endpoint); - kfree(iface->altsetting); } + + kfree(iface->altsetting); kfree(iface); } @@ -350,6 +387,16 @@ struct net_device *alloc_etherdev(int sizeof_priv) } +void free_netdev(struct net_device * ndev) +{ + if (!ndev) return; + + kfree(ndev->priv); + kfree(ndev->dev_addr); + kfree(ndev); +} + + void *__alloc_percpu(size_t size, size_t align) { return kmalloc(size, 0); @@ -379,16 +426,25 @@ int register_netdev(struct net_device *dev) dev->state |= 1 << __LINK_STATE_START; int err = dev->netdev_ops->ndo_open(dev); + if (err) return err; if (dev->netdev_ops->ndo_set_rx_mode) dev->netdev_ops->ndo_set_rx_mode(dev); - single_net_device = dev; return 0; }; +void unregister_netdev(struct net_device * dev) +{ + if (dev->netdev_ops->ndo_stop) + dev->netdev_ops->ndo_stop(dev); + + single_net_device = NULL; +} + + net_device * Linux_network_session_base:: _register_session(Linux_network_session_base &session, @@ -431,6 +487,12 @@ int dev_set_drvdata(struct device *dev, void *data) } +void * dev_get_drvdata(const struct device *dev) +{ + return dev->driver_data; +} + + int netif_running(const struct net_device *dev) { return dev->state & (1 << __LINK_STATE_START); @@ -485,6 +547,11 @@ int netif_rx(struct sk_buff * skb) } +void dev_kfree_skb_any(struct sk_buff *skb) +{ + dev_kfree_skb(skb); +} + int is_valid_ether_addr(const u8 * a) { for (unsigned i = 0; i < ETH_ALEN; i++) @@ -551,3 +618,5 @@ void page_frag_free(void *addr) Lx::Malloc::dma().free_large(page->addr); kfree(page); } + + diff --git a/repos/dde_linux/src/drivers/usb_net/lx_emul.h b/repos/dde_linux/src/drivers/usb_net/lx_emul.h index b4a9b85761..e26d349da1 100644 --- a/repos/dde_linux/src/drivers/usb_net/lx_emul.h +++ b/repos/dde_linux/src/drivers/usb_net/lx_emul.h @@ -120,6 +120,8 @@ int dev_set_drvdata(struct device *dev, void *data); #define pr_notice(fmt, ...) printk(KERN_NOTICE fmt, ##__VA_ARGS__) #define pr_emerg(fmt, ...) printk(KERN_INFO fmt, ##__VA_ARGS__) +#define try_then_request_module(x, mod...) (x) + struct bus_type { int (*match)(struct device *dev, struct device_driver *drv); @@ -190,6 +192,7 @@ const char *dev_name(const struct device *dev); struct __una_u16 { u16 x; } __attribute__((packed)); struct __una_u32 { u32 x; } __attribute__((packed)); +#define get_unaligned(ptr) (*ptr) u16 get_unaligned_le16(const void *p); u32 get_unaligned_le32(const void *p); @@ -534,6 +537,12 @@ const void *of_get_mac_address(struct device_node *np); u16 bitrev16(u16 in); u16 crc16(u16 crc, const u8 *buffer, size_t len); int hex2bin(u8 *dst, const char *src, size_t count); +char *hex_byte_pack(char *buf, u8 byte); + +#define hex_asc_upper_lo(x) hex_asc_upper[((x) & 0x0f)] +#define hex_asc_lo(x) hex_asc[((x) & 0x0f)] +#define hex_asc_hi(x) hex_asc[((x) & 0xf0) >> 4] + #define this_cpu_ptr(ptr) ptr @@ -918,6 +927,7 @@ void *kmap_atomic(struct page *page); void kunmap_atomic(void *addr); #define CONFIG_LOCKDEP 1 +#define CONFIG_NLS_DEFAULT "iso8859-1" struct partial_page { diff --git a/repos/dde_linux/src/drivers/usb_net/lxc.c b/repos/dde_linux/src/drivers/usb_net/lxc.c index 3f595cfea8..42a59f5234 100644 --- a/repos/dde_linux/src/drivers/usb_net/lxc.c +++ b/repos/dde_linux/src/drivers/usb_net/lxc.c @@ -13,7 +13,13 @@ /* linux includes */ #include +#include +#include #include +#include +#include +#include +#include /* local includes */ #include @@ -63,3 +69,356 @@ unsigned char *lxc_skb_put(struct sk_buff *skb, size_t len) { return skb_put(skb, len); } + + +/** + * cdc_parse_cdc_header - parse the extra headers present in CDC devices + * @hdr: the place to put the results of the parsing + * @intf: the interface for which parsing is requested + * @buffer: pointer to the extra headers to be parsed + * @buflen: length of the extra headers + * + * This evaluates the extra headers present in CDC devices which + * bind the interfaces for data and control and provide details + * about the capabilities of the device. + * + * Return: number of descriptors parsed or -EINVAL + * if the header is contradictory beyond salvage + */ + +int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr, + struct usb_interface *intf, + u8 *buffer, + int buflen) +{ + /* duplicates are ignored */ + struct usb_cdc_union_desc *union_header = NULL; + + /* duplicates are not tolerated */ + struct usb_cdc_header_desc *header = NULL; + struct usb_cdc_ether_desc *ether = NULL; + struct usb_cdc_mdlm_detail_desc *detail = NULL; + struct usb_cdc_mdlm_desc *desc = NULL; + + unsigned int elength; + int cnt = 0; + + memset(hdr, 0x00, sizeof(struct usb_cdc_parsed_header)); + hdr->phonet_magic_present = false; + while (buflen > 0) { + elength = buffer[0]; + if (!elength) { + dev_err(&intf->dev, "skipping garbage byte\n"); + elength = 1; + goto next_desc; + } + if ((buflen < elength) || (elength < 3)) { + dev_err(&intf->dev, "invalid descriptor buffer length\n"); + break; + } + if (buffer[1] != USB_DT_CS_INTERFACE) { + dev_err(&intf->dev, "skipping garbage\n"); + goto next_desc; + } + + switch (buffer[2]) { + case USB_CDC_UNION_TYPE: /* we've found it */ + if (elength < sizeof(struct usb_cdc_union_desc)) + goto next_desc; + if (union_header) { + dev_err(&intf->dev, "More than one union descriptor, skipping ...\n"); + goto next_desc; + } + union_header = (struct usb_cdc_union_desc *)buffer; + break; + case USB_CDC_COUNTRY_TYPE: + if (elength < sizeof(struct usb_cdc_country_functional_desc)) + goto next_desc; + hdr->usb_cdc_country_functional_desc = + (struct usb_cdc_country_functional_desc *)buffer; + break; + case USB_CDC_HEADER_TYPE: + if (elength != sizeof(struct usb_cdc_header_desc)) + goto next_desc; + if (header) + return -EINVAL; + header = (struct usb_cdc_header_desc *)buffer; + break; + case USB_CDC_ACM_TYPE: + if (elength < sizeof(struct usb_cdc_acm_descriptor)) + goto next_desc; + hdr->usb_cdc_acm_descriptor = + (struct usb_cdc_acm_descriptor *)buffer; + break; + case USB_CDC_ETHERNET_TYPE: + if (elength != sizeof(struct usb_cdc_ether_desc)) + goto next_desc; + if (ether) + return -EINVAL; + ether = (struct usb_cdc_ether_desc *)buffer; + break; + case USB_CDC_CALL_MANAGEMENT_TYPE: + if (elength < sizeof(struct usb_cdc_call_mgmt_descriptor)) + goto next_desc; + hdr->usb_cdc_call_mgmt_descriptor = + (struct usb_cdc_call_mgmt_descriptor *)buffer; + break; + case USB_CDC_DMM_TYPE: + if (elength < sizeof(struct usb_cdc_dmm_desc)) + goto next_desc; + hdr->usb_cdc_dmm_desc = + (struct usb_cdc_dmm_desc *)buffer; + break; + case USB_CDC_MDLM_TYPE: + if (elength < sizeof(struct usb_cdc_mdlm_desc *)) + goto next_desc; + if (desc) + return -EINVAL; + desc = (struct usb_cdc_mdlm_desc *)buffer; + break; + case USB_CDC_MDLM_DETAIL_TYPE: + if (elength < sizeof(struct usb_cdc_mdlm_detail_desc *)) + goto next_desc; + if (detail) + return -EINVAL; + detail = (struct usb_cdc_mdlm_detail_desc *)buffer; + break; + case USB_CDC_NCM_TYPE: + if (elength < sizeof(struct usb_cdc_ncm_desc)) + goto next_desc; + hdr->usb_cdc_ncm_desc = (struct usb_cdc_ncm_desc *)buffer; + break; + case USB_CDC_MBIM_TYPE: + if (elength < sizeof(struct usb_cdc_mbim_desc)) + goto next_desc; + + hdr->usb_cdc_mbim_desc = (struct usb_cdc_mbim_desc *)buffer; + break; + case USB_CDC_MBIM_EXTENDED_TYPE: + if (elength < sizeof(struct usb_cdc_mbim_extended_desc)) + break; + hdr->usb_cdc_mbim_extended_desc = + (struct usb_cdc_mbim_extended_desc *)buffer; + break; + case CDC_PHONET_MAGIC_NUMBER: + hdr->phonet_magic_present = true; + break; + default: + /* + * there are LOTS more CDC descriptors that + * could legitimately be found here. + */ + dev_dbg(&intf->dev, "Ignoring descriptor: type %02x, length %ud\n", + buffer[2], elength); + goto next_desc; + } + cnt++; +next_desc: + buflen -= elength; + buffer += elength; + } + hdr->usb_cdc_union_desc = union_header; + hdr->usb_cdc_header_desc = header; + hdr->usb_cdc_mdlm_detail_desc = detail; + hdr->usb_cdc_mdlm_desc = desc; + hdr->usb_cdc_ether_desc = ether; + return cnt; +} + +EXPORT_SYMBOL(cdc_parse_cdc_header); + +struct usb_interface *usb_ifnum_to_if(const struct usb_device *dev, + unsigned ifnum) +{ + struct usb_host_config *config = dev->actconfig; + int i; + + if (!config) { + lx_printf("No config for %u\n", ifnum); + return NULL; + } + + for (i = 0; i < config->desc.bNumInterfaces; i++) { + if (config->interface[i]->altsetting[0] + .desc.bInterfaceNumber == ifnum) { + return config->interface[i]; + } + } + + lx_printf("No interface for %u\n"); + return NULL; +} + +static int usb_get_string(struct usb_device *dev, unsigned short langid, + unsigned char index, void *buf, int size) +{ + int i; + int result; + + if (size <= 0) /* No point in asking for no data */ + return -EINVAL; + + for (i = 0; i < 3; ++i) { + /* retry on length 0 or stall; some devices are flakey */ + result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), + USB_REQ_GET_DESCRIPTOR, USB_DIR_IN, + (USB_DT_STRING << 8) + index, langid, buf, size, + USB_CTRL_GET_TIMEOUT); + if (result == 0 || result == -EPIPE) + continue; + if (result > 1 && ((u8 *) buf)[1] != USB_DT_STRING) { + result = -ENODATA; + continue; + } + break; + } + return result; +} + + +static void usb_try_string_workarounds(unsigned char *buf, int *length) +{ + int newlength, oldlength = *length; + + for (newlength = 2; newlength + 1 < oldlength; newlength += 2) + if (!isprint(buf[newlength]) || buf[newlength + 1]) + break; + + if (newlength > 2) { + buf[0] = newlength; + *length = newlength; + } +} + +static int usb_string_sub(struct usb_device *dev, unsigned int langid, + unsigned int index, unsigned char *buf) +{ + int rc; + + /* Try to read the string descriptor by asking for the maximum + * possible number of bytes */ + if (dev->quirks & USB_QUIRK_STRING_FETCH_255) + rc = -EIO; + else + rc = usb_get_string(dev, langid, index, buf, 255); + + /* If that failed try to read the descriptor length, then + * ask for just that many bytes */ + if (rc < 2) { + rc = usb_get_string(dev, langid, index, buf, 2); + if (rc == 2) + rc = usb_get_string(dev, langid, index, buf, buf[0]); + } + + if (rc >= 2) { + if (!buf[0] && !buf[1]) + usb_try_string_workarounds(buf, &rc); + + /* There might be extra junk at the end of the descriptor */ + if (buf[0] < rc) + rc = buf[0]; + + rc = rc - (rc & 1); /* force a multiple of two */ + } + + if (rc < 2) + rc = (rc < 0 ? rc : -EINVAL); + + return rc; +} + +static int usb_get_langid(struct usb_device *dev, unsigned char *tbuf) +{ + int err; + + if (dev->have_langid) + return 0; + + if (dev->string_langid < 0) + return -EPIPE; + + err = usb_string_sub(dev, 0, 0, tbuf); + + /* If the string was reported but is malformed, default to english + * (0x0409) */ + if (err == -ENODATA || (err > 0 && err < 4)) { + dev->string_langid = 0x0409; + dev->have_langid = 1; + dev_err(&dev->dev, + "language id specifier not provided by device, defaulting to English\n"); + return 0; + } + + /* In case of all other errors, we assume the device is not able to + * deal with strings at all. Set string_langid to -1 in order to + * prevent any string to be retrieved from the device */ + if (err < 0) { + dev_info(&dev->dev, "string descriptor 0 read error: %d\n", + err); + dev->string_langid = -1; + return -EPIPE; + } + + /* always use the first langid listed */ + dev->string_langid = tbuf[2] | (tbuf[3] << 8); + dev->have_langid = 1; + dev_dbg(&dev->dev, "default language 0x%04x\n", + dev->string_langid); + return 0; +} + +/** + * usb_string - returns UTF-8 version of a string descriptor + * @dev: the device whose string descriptor is being retrieved + * @index: the number of the descriptor + * @buf: where to put the string + * @size: how big is "buf"? + * Context: !in_interrupt () + * + * This converts the UTF-16LE encoded strings returned by devices, from + * usb_get_string_descriptor(), to null-terminated UTF-8 encoded ones + * that are more usable in most kernel contexts. Note that this function + * chooses strings in the first language supported by the device. + * + * This call is synchronous, and may not be used in an interrupt context. + * + * Return: length of the string (>= 0) or usb_control_msg status (< 0). + */ +int usb_string(struct usb_device *dev, int index, char *buf, size_t size) +{ + unsigned char *tbuf; + int err; + + if (dev->state == USB_STATE_SUSPENDED) + return -EHOSTUNREACH; + if (size <= 0 || !buf || !index) + return -EINVAL; + buf[0] = 0; + tbuf = kmalloc(256, GFP_NOIO); + if (!tbuf) + return -ENOMEM; + + err = usb_get_langid(dev, tbuf); + if (err < 0) + goto errout; + + err = usb_string_sub(dev, dev->string_langid, index, tbuf); + if (err < 0) + goto errout; + + size--; /* leave room for trailing NULL char in output buffer */ + err = utf16s_to_utf8s((wchar_t *) &tbuf[2], (err - 2) / 2, + UTF16_LITTLE_ENDIAN, buf, size); + buf[err] = 0; + + if (tbuf[1] != USB_DT_STRING) + dev_dbg(&dev->dev, + "wrong descriptor type %02x for string %d (\"%s\")\n", + tbuf[1], index, buf); + + errout: + kfree(tbuf); + return err; +} +EXPORT_SYMBOL_GPL(usb_string); + diff --git a/repos/dde_linux/src/drivers/usb_net/main.cc b/repos/dde_linux/src/drivers/usb_net/main.cc index 52c528b25c..2e2e740740 100644 --- a/repos/dde_linux/src/drivers/usb_net/main.cc +++ b/repos/dde_linux/src/drivers/usb_net/main.cc @@ -39,15 +39,22 @@ void Driver::Device::scan_altsettings(usb_interface * iface, if (iface_desc.active) iface->cur_altsetting = &iface->altsetting[alt_idx]; + Usb::Interface_extra iface_extra; + if (usb.interface_extra(iface_idx, alt_idx, &iface_extra)) { + iface->altsetting[alt_idx].extra = (unsigned char *)kzalloc(iface_extra.length, 0); + Genode::memcpy(iface->altsetting[alt_idx].extra, iface_extra.data, + iface_extra.length); + iface->altsetting[alt_idx].extralen = iface_extra.length; + } iface->altsetting[alt_idx].endpoint = (usb_host_endpoint*) kzalloc(sizeof(usb_host_endpoint)*iface->altsetting[alt_idx].desc.bNumEndpoints, GFP_KERNEL); for (unsigned i = 0; i < iface->altsetting[alt_idx].desc.bNumEndpoints; i++) { - Usb::Endpoint_descriptor ep_desc; - usb.endpoint_descriptor(iface_idx, alt_idx, i, &ep_desc); + Usb::Endpoint_descriptor ep_desc[7]; + usb.endpoint_descriptor(iface_idx, alt_idx, i, ep_desc); Genode::memcpy(&iface->altsetting[alt_idx].endpoint[i].desc, - &ep_desc, sizeof(usb_endpoint_descriptor)); + ep_desc, sizeof(usb_endpoint_descriptor)); int epnum = usb_endpoint_num(&iface->altsetting[alt_idx].endpoint[i].desc); if (usb_endpoint_dir_out(&iface->altsetting[alt_idx].endpoint[i].desc)) udev->ep_out[epnum] = &iface->altsetting[alt_idx].endpoint[i]; @@ -70,11 +77,7 @@ void Driver::Device::scan_interfaces(unsigned iface_idx) for (unsigned i = 0; i < iface->num_altsetting; i++) scan_altsettings(iface, iface_idx, i); - struct usb_device_id id; - probe_interface(iface, &id); udev->config->interface[iface_idx] = iface; - - driver.activate_network_session(); }; @@ -101,6 +104,17 @@ void Driver::Device::register_device() for (unsigned i = 0; i < config_desc.num_interfaces; i++) scan_interfaces(i); + + udev->actconfig = udev->config; + udev->config->desc.bNumInterfaces = config_desc.num_interfaces; + + /* probe */ + for (unsigned i = 0; i < config_desc.num_interfaces; i++) { + struct usb_device_id id; + probe_interface(udev->config->interface[i], &id); + } + + driver.activate_network_session(); } diff --git a/repos/dde_linux/src/drivers/usb_net/target.mk b/repos/dde_linux/src/drivers/usb_net/target.mk index 1c85626d29..0d850a42d9 100644 --- a/repos/dde_linux/src/drivers/usb_net/target.mk +++ b/repos/dde_linux/src/drivers/usb_net/target.mk @@ -20,9 +20,14 @@ SRC_C += drivers/net/usb/cdc_ether.c SRC_C += drivers/net/usb/rndis_host.c SRC_C += drivers/net/usb/smsc95xx.c SRC_C += drivers/net/usb/usbnet.c +SRC_C += fs/nls/nls_base.c +SRC_C += lib/ctype.c +SRC_C += lib/hexdump.c SRC_C += net/core/skbuff.c SRC_C += net/ethernet/eth.c +CC_OPT += -Wno-address-of-packed-member + CC_C_OPT += -Wno-comment -Wno-int-conversion -Wno-incompatible-pointer-types \ -Wno-unused-variable -Wno-pointer-sign -Wno-uninitialized \ -Wno-maybe-uninitialized -Wno-format -Wno-discarded-qualifiers \ diff --git a/repos/dde_linux/usb_net.list b/repos/dde_linux/usb_net.list index 5f4123b80f..b625f3ab00 100644 --- a/repos/dde_linux/usb_net.list +++ b/repos/dde_linux/usb_net.list @@ -8,6 +8,9 @@ linux-x.x.x/drivers/net/usb/rndis_host.c linux-x.x.x/drivers/net/usb/smsc95xx.h linux-x.x.x/drivers/net/usb/smsc95xx.c linux-x.x.x/drivers/net/usb/usbnet.c +linux-x.x.x/fs/nls/nls_base.c +linux-x.x.x/lib/ctype.c +linux-x.x.x/lib/hexdump.c linux-x.x.x/net/core/skbuff.c linux-x.x.x/net/ethernet/eth.c linux-x.x.x/include/asm-generic/atomic64.h @@ -18,6 +21,7 @@ linux-x.x.x/include/asm-generic/bitops/fls.h linux-x.x.x/include/asm-generic/bitops/fls64.h linux-x.x.x/include/asm-generic/bitops/non-atomic.h linux-x.x.x/include/linux/cgroup-defs.h +linux-x.x.x/include/linux/ctype.h linux-x.x.x/include/linux/errqueue.h linux-x.x.x/include/linux/ethtool.h linux-x.x.x/include/linux/if_ether.h @@ -30,6 +34,7 @@ linux-x.x.x/include/linux/mdio.h linux-x.x.x/include/linux/mod_devicetable.h linux-x.x.x/include/linux/netdev_features.h linux-x.x.x/include/linux/net.h +linux-x.x.x/include/linux/nls.h linux-x.x.x/include/linux/phy.h linux-x.x.x/include/linux/rbtree.h linux-x.x.x/include/linux/rculist.h @@ -42,6 +47,7 @@ linux-x.x.x/include/linux/swab.h linux-x.x.x/include/linux/usb.h linux-x.x.x/include/linux/usb/ch9.h linux-x.x.x/include/linux/usb/cdc.h +linux-x.x.x/include/linux/usb/quirks.h linux-x.x.x/include/linux/usb/rndis_host.h linux-x.x.x/include/linux/usb/usbnet.h linux-x.x.x/include/net/dst.h From d5b1d9466aef225c551eced1d321c39e2ebe06e4 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Sat, 9 Jul 2022 15:54:08 +0200 Subject: [PATCH 064/354] nic_router: clear ARP cache when domain is down Whenever a domain looses all its interfaces or the link state of all attached interfaces is down at once, the domain potentially moves to another Ethernet segment and should therefore consider its ARP cache to be outdated. RFC 826 states that "... If a host moves, any connections initiated by that host will work, assuming its own address resolution table is cleared when it moves. ...". Therefore, this commit introduces clearing the ARP cache and the initially stated events. This commit was motivated by an issue with the PinePhone Modem and USB NIC. On the PinePhone, the Modem has its own OS and acts as direct gateway to the outer world for the USB NIC that is driven by Genode. However, whenever the Modem gets restarted, Modem and USB NIC receive a new MAC address. This used to conflict with the NIC routers ARP entry for the Modem that didn't cease to be valid. With this commit, the integrator of such a scenario at least has a convenient way of fixing this by ensuring that all interfaces at the USB NIC domain go down when resetting (e.g. by ensuring that the USB NIC is the only interface at that domain). Fixes #4558 --- repos/os/src/server/nic_router/arp_cache.cc | 14 ++++++++++++++ repos/os/src/server/nic_router/arp_cache.h | 2 ++ repos/os/src/server/nic_router/domain.cc | 7 +++++-- repos/os/src/server/nic_router/interface.cc | 1 + 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/repos/os/src/server/nic_router/arp_cache.cc b/repos/os/src/server/nic_router/arp_cache.cc index 500e858f6e..6f8e0b1b0e 100644 --- a/repos/os/src/server/nic_router/arp_cache.cc +++ b/repos/os/src/server/nic_router/arp_cache.cc @@ -105,3 +105,17 @@ void Arp_cache::destroy_entries_with_mac(Mac_address const &mac) } catch (Arp_cache_entry_slot::Deref_unconstructed_object) { } } } + + +void Arp_cache::destroy_all_entries() +{ + if (_domain.config().verbose()) { + log("[", _domain, "] destroy all ARP entries"); + } + while (Arp_cache_entry *entry = first()) { + remove(entry); + } + for (unsigned curr = 0; curr < NR_OF_ENTRIES; curr++) { + _entries[curr].destruct(); + } +} diff --git a/repos/os/src/server/nic_router/arp_cache.h b/repos/os/src/server/nic_router/arp_cache.h index 8844f576bf..e1fca9f484 100644 --- a/repos/os/src/server/nic_router/arp_cache.h +++ b/repos/os/src/server/nic_router/arp_cache.h @@ -92,6 +92,8 @@ class Net::Arp_cache : public Genode::Avl_tree void destroy_entries_with_mac(Mac_address const &mac); Arp_cache_entry const &find_by_ip(Ipv4_address const &ip) const; + + void destroy_all_entries(); }; #endif /* _ARP_CACHE_H_ */ diff --git a/repos/os/src/server/nic_router/domain.cc b/repos/os/src/server/nic_router/domain.cc index 11af946ab7..2cede36955 100644 --- a/repos/os/src/server/nic_router/domain.cc +++ b/repos/os/src/server/nic_router/domain.cc @@ -364,8 +364,11 @@ void Domain::detach_interface(Interface &interface) { _interfaces.remove(&interface); _interface_cnt--; - if (!_interface_cnt && _ip_config_dynamic) { - discard_ip_config(); + if (!_interface_cnt) { + _arp_cache.destroy_all_entries(); + if (_ip_config_dynamic) { + discard_ip_config(); + } } if (_config.verbose_domain_state()) { log("[", *this, "] NIC sessions: ", _interface_cnt); diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index f80ce1a97c..50491bcd5a 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -930,6 +930,7 @@ void Interface::handle_interface_link_state() throw Keep_ip_config(); } }); domain_.discard_ip_config(); + domain_.arp_cache().destroy_all_entries(); } } catch (Pointer::Invalid) { } From 97d7d4b49defd08e9f22cac3b8a673f14488ed73 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 11 Jul 2022 09:28:54 +0200 Subject: [PATCH 065/354] grub2: update to newer grub2 2.06 version In UEFI case the lower RAM will not be used for internal allocation, which should prevent overrides in the former legacy BDA (first page). Issue #4426 --- repos/base/ports/grub2.hash | 2 +- repos/base/ports/grub2.port | 2 +- tool/run/iso.inc | 3 --- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/repos/base/ports/grub2.hash b/repos/base/ports/grub2.hash index 7bab68e1ba..9bb012cc65 100644 --- a/repos/base/ports/grub2.hash +++ b/repos/base/ports/grub2.hash @@ -1 +1 @@ -856f9946a1482cbebc519818e3e4736bcd11e5e4 +f15e84afbb47b892ed26a5ae56f5bb038777a3c0 diff --git a/repos/base/ports/grub2.port b/repos/base/ports/grub2.port index e194a3483a..8daa867699 100644 --- a/repos/base/ports/grub2.port +++ b/repos/base/ports/grub2.port @@ -3,7 +3,7 @@ VERSION := git DOWNLOADS := g2fg.git URL(g2fg) := https://github.com/alex-ab/g2fg.git -REV(g2fg) := a0c3164b6b23afb25119f2be8c3b7490c1dcb9e2 +REV(g2fg) := 7da0601946bd2bb75f4e9c3b56cb18e44b2997a1 DIR(g2fg) := boot default: $(DOWNLOADS) diff --git a/tool/run/iso.inc b/tool/run/iso.inc index af2f771964..9170c84f67 100644 --- a/tool/run/iso.inc +++ b/tool/run/iso.inc @@ -13,9 +13,6 @@ proc install_iso_bootloader_to_run_dir { } { exec mkdir -p [run_dir]/boot/grub/i386-pc exec cp $grub2_path/boot/grub2/eltorito.img [run_dir]/boot/grub/i386-pc/. - foreach file [glob -nocomplain $grub2_path/boot/grub2/\*.mod] { - exec cp $file [run_dir]/boot/grub/i386-pc/[file tail $file] - } exec cp [genode_dir]/tool/boot/bender [run_dir]/boot/bender } From 5a4efcad0add524cbdfce7bf87e0e3500938a219 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 11 Jul 2022 09:24:50 +0200 Subject: [PATCH 066/354] tool: update to uefi mode aware bender Fixes #4426 --- tool/boot/README | 4 ++-- tool/boot/bender | Bin 28284 -> 28752 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tool/boot/README b/tool/boot/README index 5c778dd6a9..f19afc06f3 100644 --- a/tool/boot/README +++ b/tool/boot/README @@ -20,8 +20,8 @@ code respectively the download source of binaries are described below. The changes are available from https://github.com/alex-ab/morbo.git. - git branch intel_hwp - git commit 84be1183b066e9ba78c874713db4e68a5c3393fa + git branch genode_bender + git commit 7909dd0b56c66400bfb9c1c4abf70d2c593b4902 :'pulsar': diff --git a/tool/boot/bender b/tool/boot/bender index 2acaeecbd955e34d0b59240c8a034c901bccc084..aace3536ddc864c322c1f092bfef92a530433c3a 100755 GIT binary patch literal 28752 zcmeHveRxyHmG_k`Kp4T5gG&W*Kxss37voq!h!sp?gJn!&6M-?1K%y91vK{;t>0WHI zkl4L;VYpG7eaJp-w_j|UnPn@0AwKm6{S zls4hd_sfkIpSZhE2;An|O_{!5Hd}nVHXtQt#0m|82YszuEGXPXI#li(5Zg_@Up{Z~ zIlJXcZ+73=`hw+k;i>4qNRO}e`H{%2jU#ft4F8Rq!_yf3qqGnn|HAO+7WjW5jd8

*d83EYyvEeYI`z%2>flE5tq+>*d83EYyvEeYI`z%2>K9c_#@0f}%yaN9IJzgEv5+ok-R=!Rznx80+c z6c3gBjF(u0+njpIyeO?M<)>5~i%87vqdlKwV(bes(<)30KZ%Ymdy8 z^HkR%Dh$?{)X~bIx&Ag~Frj`*zI=Ny&!hziGf^2#luU{?Q5iJU8-Z+4^NdQ{7^QE} z(4{;e$X(&&pt2DCP)?iOTEvF7J1wo?ROtT>*a<2Dy)5MFL!RIcxjvz{_8&GB7WNS` zMSC0H;KMMv_foI8qgPYz5QOG7X?#%m4XQ6)8j(KTpW~wH+P~WfOwG(O2T$L$9YC;j4??p%V3_?T2on6e; zqj|tpa9gL&^J{|`wq;rv`oBtb^*rVdDm^H1YsZlDOAC=?oHF{+_{m3&`{R7Srre-% zKH5+155T0-H%Mg!d7R^7;~S(Sf|Q``0_q+T^ww=u+T1JYa^F(iqy6AoB(k-*Cx&cm zrC>T0tk(;gdu5ASe25Kd{|YMMZ=&)<9sZkx27|XD|7XiZDM8PE0Sz@pxIRsR)+}4* z=#9Ka(<1U3O%p9J9%QETac_!n<+{i1=ye12CbW~2cz?pTMP(~C?}3)}CxArI`z0xN zuzb+7S530-Rg>*|i!P2b#P?mdNX82Hw0v?-dns< zd!Ot?XroIIRun-OTYANogXnZ)W{%kMHYFMiZn33}r{WfiEjxHBexca%DpJ9^wD@de z=q)ly%xHJcv5Vh(kuV+*#Fj=RF6J2x(le3GuRzq|j=Xs1D4WoCU8->O@=mjZ?115vytja|qTAhyjfApwhI)b2pH)nZ}SXcVZ(Xg_7v z#(quSSCA1X7z|zgr6^W9%|m7Y9sihSeMrgGJD#Rb`tj_l);w2lCp@1|cPZh|q%HmR zz*jmjX;$4-Z0m%44G@7n^YJmvad~_ zfwkwPNx{vgi`*Kpt8VQJm}%&5csaUf!tA`j&V{H^feoPjBue2;M+EfdHeLJ`=qCM0F>t z*;aO#?N#O9JiF3mQdiitR+xtHX=+BTv%uDY8fmH^-xprg_`ouGpz&GI zI@S0rXnoT7ENFdzwSd#Q23j9Te+4Z^FU+l0O{C7yn5#b^8ctJyX7E|1GmU9Ox?9vr zet|X-$W43q=0H(Yf_@x>Y6((f5FNZ~n_`fUpxPKzNl-})DkrEY2Hj7PD+bvJx-SNK2}->Q zx;+N**2l-7`Ggt46eo4q1tU#e%chwf+)i`a(RSfCLGxS47ubgfzhIX$&2jS5Y-P|W zYwDZ!M&vv8vFiuVvJ08Xaq@jiyD3|_Y?Due%#(&5lpQ~KD$^oQjTL;+az;u-V|Lcj ze#)er6qPHZrEhR~a!CZhOKSo%K*Y2e)F&Dx8*;QeVi1?87=!#&W{5#g6LbMbp}ZcK%%^~; zH48Y-oZg70=F`t`hC6_wGi-6R?Fx(`l^xE=uVMr_BQM4vu1epFLG{#hLk!}o^i&Mu zjI04fj3lGmnT^snxRG-7?y5t3XboVxEQ?zqW-sUV3qD9 zI|XA#PP}Tg!);+lR%m~O6>IA1$PxrNE^DwqX@K2Hfj&quG<=PO(Me+)?G~&IW-@aq zOPaS4E2?DAydBm=R9xTyxhY+__Gx^Jqh_Z8GmG-niVVC=Gji>g+i5|~wP%3P95h6Y zWW_JYaK0rfCZgans>LSO4wU?+_K3($*K&ISdrvtiG<_xvL?ZDnGt8iIVzGtIu{#IY z;mIHP|1`sB2W2D1HFG*4p?ZRSOr|sxnlK)BM<^!Vuxf!ZtpELQezo2m=dMa7bW*R*E+u1QV7l)nQlRpr@ z`z@$MJP|0cna|dOT4PIN0fsRpL^wsh@2detq?~+urUW_xqm*ftfRK{N((q2S!yBmaSjnwA18h?&~l35 z95_vj@!~vycINmkjuVECdBpK?=tf##3zj`=|7Q@fT9*MS+XbkoVF04Y41ZH~S=HiX zjM0(FABxIhkdL1WM`9k>6O}NvmS+0dPMTxp9ay^(n+VLi~bWdCMhSTIIbU?f3# zl64HQ)-(C2_+2kl%k759lB0iVc&DwzPYV4NEk$)ma04XhhV3%-P#1Gq+J;>h&$TCagH{nv*3nu z#nQA&aFn!x&)w-q6V5F!nDx?G(?$hDu6*c8uOgxS$V>B64& zkBsq!ZEB8@6}~#d!14yw9FsPFB9*8;9^F>C_V-ih zNOir59Xv$9T!$QO^ISb#^tZbX1tvr}54jFuP6#VN1+j*Rd?;A>enjqZV;4R93T?|Q z&23`yS2S;2eetgMXSnvO^-0Xt?PzljNad_O+QFqpXK{C6xoU8_y5-sEL{OQ85piqn z;7WCMgAke`0X1&w6u^|&d>BM4euJF;*N}Q>8A1s!p-M#Vc55nXp-TTolw^nh$&IoP zdD(uqR*SM#LB)tj#A6)!32LG~3HZUhNc(5Tc)1li0&2iuuGXM3nG$jjR7TnKrXX$^ z#kwymJ&P<5J%yWGr6$X`Em_-$2z0jq( z;0v#EdTBoboz~xBtERnzR+lXU@m5ViCNzrZ zpG}G{-f!q;D~#$2Slu3V$(Pz{V4`i{#Ou5jzNu9ASXiE^{~WAVP^kwyJjykhx6~aS zBv8i~h36tX1?D)yAm%QzY51h66@Nt!^v<9I^Jt`l%3{3wXOr3$9^#5NuCPb-ZkH$a z{{+}KD;%a@P(9j-ak-)jngfmm#8j`=TM<9oO>-~uNK!D*!WLQ8Jd+|CDb%(RGkB53 z9dvyHJ&h{q_t7S}YHpJ!2bEBa*8-ha-9X(5_IFW~hYd#LK6R2tjveZRVQ>fgcVed& z4b$vZ=O9FrZwxLSqnsQx^eCBv47)^um?APmp$oJ1m2wTNE?MF_S}b5w$*0lRNb+aM zlB1kVIr6bRX z=;nyc>j-a*y3)wnha8!A$%*-t`zP>VU}lXh&90j5SiEwvjAh3!GEH1*X6-YObr5Tq z(OHGXq5yu&8hZiI&6Fp8*9g*ZL`;-3`C#Ci;Lk+M$qd~I0w3JbL9qqS4mm#A=pU{5 znc7yktPnA(*i@6DeeqJbD0WmXKu$ht*fasbAhpV#0imldK^Zj3Q`JIK5L+hI#p$8C z_y?CYm}`i*+0pPMWiVd8gHWPvp*$j+Ijz@6@xjAlvJ48$V;{d&p0gNa^2&IVSokt{ zU(@^(9Bx9A3g>B4%vl(KvoPq-RgE;ZM#Dhjl^b3J_h?gt${9>R^1n>< z2mcE$#ZtGnXDkhwjnBsZSD|Ux)pq6DX9$WD+W!zTf;q!fA1qt2U@DjaPty!Y1Dkf| zMthprJe6hu6}ycH(UEsvoXo(G%SyA2`byoLha9+1V9MyvgllaA0du^ZG7%luxyK&E z3IQaez@pC(D8Cg@^5i3dQN){pHZ3dr$F9*4K|4{&Tr zrh{V#q*}BQ^|g#Qd@U%YiF;#a{}NQ=lk0{I!7(p1`W>{?k*B3gk0gjc@@Hdz+$VEu zmDpgx2Ma%@KptFg`wx-Qc5C-v#jBl^_NSDgX%v5l*9DzGKwVD9CSwKy!2bc=4k~tR z0r>1ni^wUuzwFk=bJ}`U2fq;hlnN##CE$J!VRQd!hydmHFODoIFo>Pc%* z`RDh*0>nhZ3pSY8plVUB#LK2&KCIBIHdnCFpj@7|enL=j>74Yxj4^&l9vu?+T38Jy z1S`Y7mNPPNRz`6snt*{#3gy0PLsJ5#xz#zq6%0dbn%oU-HU~(T(GzZd_1G4fCS}#!ZMmsL)@^p(KowRfwo8mNfpr!i16(KdY2?`3o75&1r>e_e%yBm zH3ZkSN_j9|KC3P=hQ^R=`7*24n?j3>B&EHCb#?DAg`MhjkxwpH|OgLs#MvQXyCeGxAK%%VdTFYoKl1 zK2R&EU6YSE-OlU+_Sv?m^PzB~EDz}=W4juWZflaF(^!G_+kBh)`$n@BSg zTV+HTdPvS1b-1ZLcLs*@v?=mOxHyqeJAJmG$uJ2@r&&Ldrpa9SDNW|d95opW*0A*o zZP3yXQ0r)eYz9q1ZAeyi6B>Gp=!M!Nk!ivWL*~>lN>M{6ZiB``v%3euz!yqieDH;9NS)RXjB!NF z4)dZS?H8X=PagRW&~_8b8AKF!wzZ$KXm>)JR z2Lt<>y67mN={jl|q)Cp5<3#vR!JG-&Sqx!w+lJk*jS25?v>`A&o)%=-c?$JxHz=Jq zJcM|+k@XC3iub-~WH#$QyIL<{?b@o3NsOjcvS=@n<+A#m??_{P3$gWWGlvI!>Z&-O z^Ppt(EtI3xidQ-!7>6P)nb+N)Lh`JFh+v@g13A3m)AKoHj9AMTx{pF0twgU=eZ1hf@SP5qU-47$ajj;u!Zm9uC- zpOe9gc-Fp>odUf>eMGMr^n6UA`r8}zN`|xB4eaf+!3_q-Mcj+Ia`v@&oOK>O%hSQ7 zaofk74K6hzV~Fj_Zn_Onv_0vwg^sq*vK_sS6D|9mO=L$uTlh(KDoyj$1FRz))+fLU z)>Wjf;H{5F>r1uoqcd3GCqimCVU-hFv9lC3Bf!Vl!0IPB=PUN4L25=F<^*!@!DIH6U*Pe|EL zg?O|={Oo!OKRDnQelSkZo<=%6P2ENqjr&C(Yrc*0g9{9d*HQ)_soy@-s& z{*4`7t&czJaI`gM#R*b;cKDJmSC|yXiLGXgkp8UE<` zh3wMSq6lz+-L()c#5qo|$z1b_|4im?W$L@^ue3ibqD^`7c6RyT$Iipz&J&vw)vE2r zt!DedGh@Rnd3#>?qn6$caj-VYFRU6;-C|9F&NRKX@h&IW}{n9 zQ-fbZH=-9dE}c`}v^Sz*K{Bh)^AwxRo>T7} z!IEUd383gheoL=h3JF$0TJ?_JOXpaK^*DOl`z&L-*Z@HI(;OUUv;%r8R(Nz+M=a`3 z?TuiAO$;sM{#*O!7S_+Mw0~q7+dcMt|736+GV)ahx9Bp%$p9cVx>A?Lu7t+}1O|cG z>=Z%{_Ew@Y1O6r%@_#T2!G%WI1cPZ}d&6J+g%`r_V}tq1U_?p?sZx-O4tZp!=1{L-TM=bCL%+h!g6-0DN!s>HdE2f-)Cd~QZ0n1c<5`5?+ zb_5a`hZ^D^H0R&yKUA}DVL?sXmHHp-l$y2&xv8hbou@ELmyWZvU5|)6dl3b5rXCp@ zJf~zwrF^QjCq8YLA&O4O^6B`*rjyhdON8PjEA2)sau!-gnem6nv0!6v5`zn%gfX>} z*6AWy0HXX7TRc!^NLbRZ!0k3|!d`IOHFi!-+jg*TD+C0m3e!Mi#%&LUKUin9Uke&r zLq-}y+5)7Yy^N?1KpNu^4`@GW8Ha!vTWDkx;g{34V^#ZSmT{7OxsI`hoevuwZCEus z%Z6r?a@rciu8_8NcKXwP47V6n`KqmS>Ru*n?o&c+yQS3wL+MP~tES=FmTFbrZrw6b zwXlZ_O2??x%)%`X3`tQD;x2N9T4!SKsQFg4!UjK@9W@-@jTK(dIv^W%ZZ|fBg0_Rw z{kzGaX#a+^8lQ^W0bRlcH9qJzu!+2+E8FlgI~s}Cws4Far6~BfNc>~b!&ZK&bS3*M zzYoM0uAd#FMWJvSEkJ9?i3o1Hh}A_ah-EphTBpPF}@58*gzG=3kDM=Q@J8Kk?PTCI};g>^ciL-f)PAsVau zy`Nym=r{u+-5R*&y7{&i zdpyh)JMbvfV^iI9y(=vWrl@W+EKDY57)4q6=^fr#(c%o%oupBeYu>-P_lcV+ydCY|6X@Ss z^bfC@)J+X|;?5;=)jXT{hj$GFhIX3aX0TwTLm`^*)urSi+SD8pL7KXh0!%45 zeg!l~T}sv}L(Q=P%2Joo4mwlKNdc6rE}a7?Tg}M;R6ydmxr1^VbuN=SC!urU+oOz@ zfJ0Sh^dE`Q2dP7CH-$FYTYS~g@{W*NUBpHln|I6@x-UdMNQMxJO;b>v2G@s2Ldrpl zf(>#l5V89shO{;)hpuDBtT?P$DA`R$nT6FQR_#|PMHWS6vbzMHgrc8xv_(#a5mO|U ztq219W`^BbIWCmy%Ek{dI@8$T&}3iv7rLMTPjc&F;{AT`9#lHOoAwLD*7lGg{iN)b zIC<*!>z|eJP=)qakb6Y_B&fViXbnIMi+Ty&&|M<`HGD99y_o$6IXFe|OS+6xg@w*z z@}*$b)K(lQ;zm#EQHFJ;`^T5AZZV2EPP6^F^NzMRXtKjnTG??Q!&Odkhk11N!IK6k zx-vLb{#0M@q20lUA}rs8B{NC21RugVzPRJIP_~I|2$p8d26o^;Kg-9CPU$n?Py%)b z{)X9(Nb|S3+s+QKw+?;|w;Q~ia9$52Vo&%o#vJ}loZ*7uVmPcC?T;Cb>K+P4H~35( z+zLl8=qzQL;RH)U@HqV>FOX5_h~fIszRjwAXs5S>csN=~JE3Aom zL8#+>v;u!I4n@aErT1Y-oaaD#(**YJj5PaJ<9D_g6LP{~!+BO@?yn_UMHY3Tc?PZL zaZ0B(YF^1he9y5D0V|s?WXu2?hG6u7MDO;$m$*5G4n8f-q6R7mdSv_Xdu-9S;ca^sxfBZGm#dDu3bV^|9q{_kyM? zF92IUA8M=vg4Hk?#{r>63F#?@+YKSyq7;N=!yQP`DeF|jG(&JJ)$p4qUqSRu54`#_-uV8jN@+yyq=YO~2-g}P{w-V!$WVr#ph3qz-R!{rAZIsnDCFDxk6=p~#NtO$ zep(WyfKl~DUQ^t$0QVCx*pI~{W@P9VcRUo={;|n$tmzziMb2)q^ddNJAOt`!@M{k#L3XSJP`C@QqA7&Kps2J_@ z=GdjFyU{vKR}k@gr1G?vQ3qGN5ur=6h5r-TPoiOVd>5`P2%1JhJfYG|(VTmubr=G+ z%1bC#jrQP+9AEo6sL)pybCki`q~*$>MV3&?rO&TRiaVs_X<8=nmlTg>WEuiWk1k~A zwwSHqFM-LCIBVKOLMpINW5*3gojua*1zpBOA^a5~A&4#LKGs=yIKz-8M3I6;hAp|t zHg>Q-AM+f_a0q>5{XE=$RGWg{K+MMA>-IVD&J6UW%xKDk5kJR{YsqLCE13v))+C6{ z+aWh>0!OvtjW1V7F^48ESz~Q#56#{8uro$9vC%mV-gyQiU4yNX682EF{wa`V;|7Du z-oriS4RIz}+nN*qN*``^FHU&HC?!JlI)==&*^st=$HGor7Y_`^Zu{@#)i$P*>p6 zUQdx0!r@HQ-g=x$VrI<>&Pl}8p5RXepgYe=HgQK{j-!M1ARealiL;ZGo08%8FZD!2 z1jSrkuzqXb>m>toHwe;kL;=I_Vuhi*%J&9$P^jg?%lv}_v8A1~dV$qJM=fUOrX=xu zg_wfuI$bi6`1TFvqWPZ)YYhl2x8J*q{06`x{L%g$f}Me0;(%1m>*$BPQTruIv5xNu&%l0Kq&pEVE3Rl*`d^AQ zzQU4vnGN7Nj^+by{}$vg;%cvd7quKa;Cq#~$cM)20Tsmohak^THVN_abk4oYqBDP9 zo5LG}BDiqDiJ!yi?8m;Lcnh@z`Oo2R>oLKkVB<3w4Z0g<)ehi18pDoeEKqfU-@)Q- ziOuxo5tP8>xQNmeVgm0pdPl#afRD>_^^fQ>^^Xmx24V{-#3O{21}UdN=`-}tAR6hq zwWgdQ>4+_V!1N}3;H2?#-mymh356$$qu#*LY3MlobBcMuL02(mVoNFT=%b1UX)t08 z$3CUtTqBe7tA8iM`9!WWNY&7UbbI=gS z8Mx1BTeByKJ020)5w^E2Y*aoH@l^@5ee5yxJJSclvdq`sZ`@K~e*j+9R;c3rYwT0y zhcUY5t;_9>t*gi5GCVuBWeu*uek5idkTZ}y3pNAUnH}=C&=Q#^Gpc6bdy>pY&4?eK zaE6$MBRnI%9hm|QQ_IC*V>bGM>nSwjx0N9szJp4*-yLjxf->T``9v{oBizf1SE8wG z*3-sq6hh8!oO0!%Y1}*<+p!Eb)IJv&ivfa}u{{*gNYRCdZkvJVh6G588CyMO2!b6) zHx?it6j2EjK?W#ufRep+CBjBG2+avL(zjMLx|!N+L~xbP4EkMCc6PLplv3iR-CaC@d_qZrNjo3-| zj73H%<fYxk}275Ug+A6#g3rQ8=2 zG*8tbOV4u;rMMLme^m~z-fk)P;ke1-VIMo_V+RP#CXf;~O7Lbz`xXJexC}p!+woJF>tkPqe+{xY z|MTscv&@PL(3TA9754~z7k-0M{lgj``_Omr3m>~&o>^ct${T#yh)@~j4^d^Kz0T*@ z=VRA>2haN0h4RcbKv?C&wIf2pcQ&5@sfxP6TLP+K(8tcku&r|1Fx=04bXKVmD=>j1 z*!F&t4<-bZMvKi`5h}VeO8j0(=QYL0j{4XKKK|8R1m}x>lj3XoxDi_7Yr0A=8UKl({zZr{`bh}Ydc6E%uD!w}75kzeY54e8 z8etb_PBW7o^zqMsIGcuUAO8YKY*`*5Uf18j>to|n5b;Gn1S0bEB~ZUJ;)82TOt1Dm z;q&+&_wB9o*H%{sN`<}D>9z$M zyy*!-L2d22%9?VUuhwtV>Dx+cYb1YdRh8Etu+`SsqzbRiy>PK@tsF>CM-3Zr<(e{E ziDaAJz~P$O8n2!SFkykWrp)WNO%Egp?h>iAf~YUZ&9T*2N)@)n_dH^&tMyB^j0Rp= zN50>d@2#q;wXLl6SCxTAj@w2|2PA(vB@>whB|Mlgq{VY63NSZkRUAb z*2tAL-o+#V$gB)4S5-C4pdVZ9dau8#q%NShU0quyS9wv~FcW`Ze#Z2MZ%+?=+m;|K z^P=zTLAlynUF+X4jD)nI&O3j)Jc88C?IZ|bsHUu>3UauodTnKTsgM%@L8%hr`_}Zp zw`{(W$|_JNkp=FbUY4+=))uHMDJ7}-Z3}B_e3j+P9w|)6=-HxNO2Cjx{1T*5$oURn zc)Zm%UY7<{vgd=m8)_iILV2xy*+9F+PiVzbFqwG4lcX$b8IsU%%kSX;Lt%EXQ4 z7nao2VA939LjA0@m6Vl{)VL6zlB?@5smi>za&L{-UqWi}Aci$IH!;wDxfFupYCBSE zN2=P*FpXHPECnh-eOXSS?al;2s)Z7j)NF{!G(o5tu2p0l5`-AHw(9@FMI9G#onB3! z4x|dv8l=*E{wE00i9R%CXwv;X?uSj3x>A}bW#09+JLlV$6c-fyy>VGwv%aLNvJ6VO z9yWwbo?lq*Z72!Y7T1sntGzW6(k_?FG21z(Wag}lj11c&`7mAX{73I8sH|Bxv!G-H zOw&TiU-flWS1o>I7AmFWq;e`VhmpY?joL(8N{m|S*R)<-v#zGLzQ&g8U0+%16_&Ub z+FVsITK?La%F-Lm>1;XD9ky9Bxj6*QnZ#j~w~_TmkbS6-EPst{xwo{UrnaiKd;^S# zzb>7#Z6mgA`LzLwEK8JYA;U3i_MCg?-k0etSzB7>^$9&VWw>Oz?|2m>m)0!s-gPDZ+O=31{*a^K83 znKR4pb7nZp$})uK@V`C}x1ioC9~1*>Ra#w_0$}C?UJvxUMoO~*voL2-nypArq|(gJ z_Iy`^AmNXiMI)+F=Iz3j2dS&$B&PjU=V#T-1zqb{2-ysvh$8^Tg|*zGmhQ;LeBf^zg)U* z-Kvs*FU)#+l-s7Xp2^)N4rsqVeE9j-O5WMtQTCHVy$8S7a5CYg&{)6s>2s}@y!vYC=R&5)Gm?p#~*bQ@7T~c0IYJ1fx;SAr&1$$m z`e$2>#N*r)-<%1*2HEf<$iYH_cMoeEk-PEG8abj~!{ftyAS^4&wYirsvyse)J&nWC z|0P*qxr>+2T45CmEcbqw5UP2ag7dgGhV*O;McM@608i`rV^>;*f0*2O7v-lQjSUvZ zpNup;M|s{fp8lVIbo}W53NJLSj=_kY;29i(vAd)PCpz@R3vll7&bl;Km+;-v=;fnpL3h4XC|A zz(;LX;b#~+g6Sqi>>>PdfG>R8D$qd)m45^9=oG79jp9@Nso$~ES8BX`7Rvt_@YB)q ztP%9`N5D%)z$*d21pQeKdL-YH5#>(-zBK2?_|*U&oP7hPyR$vRU^?!5ZWult`h7aA zya{mZq5f_K{OYjr`Z3_&118NT`Tu4FK7H5|dt&uphyGGF;r}}l^xvt)#*d$iM=KD1 z=ZO06j)3WN(bz-yAC7?gN5B_Gz}H5=qtOv(rd7xRQ5sJ(;4dL>oxeC?5_L5CPZ;LYs4!}0pGm4ho2Kp|*y|b(W z?iO(PQNZ~qzYF6?<>i2nXIO=Qjh52~-gGQZj|JtM0n`86NArj9zYqBEeO93~3jY}c zZMqlpHwym{y^Q^-3C>#Ks4*q9F;by>R zP#%;2_W>8c9@9hZy$tyB16JY9DE{vNm!bZCyovssc;5y4@@aIuIsyObL94JPivJGa z&EOB`6deCJVERuJ=^=T43OKet5!?^>FBmVnJx%n_0zQQLS`;3GCGs`s!?&Yw8ZDW_ z#_tZm{%?ZcsQmAy@?q`G22B66(qqx`Y{27YV!lM-C4hee`O$o(_E!Kt1Agv}!XCix zVe*jy)Bn6i5Apvj;CoR2?kIi>;EDxSVRTeJKL9)i_Jkgi?{5GX1E1C#YLD*B(;bT} zz@#r$99gfMXcaz+^4E&;_0SK}7sB5Qn66sH^y^)~bWb9tzlQ)n1N!*#hvT0BT!H?q zjKZG-o}OnFilh8p15E!B6+P4+Big5HH!*%D0PbF775)G`YX1(vZ(@GL^vwad9`++P z-VXx)8Tz{>%6}nX8`{s0w*M&LSBAB>7BGEmq_;mxs0J+GWfh)*9#DJF0DcDTFNxM~ z0bGIp(fKl!KM(lfd#pl5v_C%qJiI@@20R7hPq#q`fA|hik9?H`s)e;Yn27D*TI^>= z1V%lvAjW?QjMmnXhwZr$AB|?*2$Ke?>p(OB>YmCv#35=CK>+=_^bDaPP$qf&^n;z2 ze}jNMMZgnt^o0uS)%;S0ANxrUQXZ7*81*HUk_Q`$8?o5*QtV=RG!VZYUnSboV04nQY75sY2)&g9QF4p>y7V7-y zKJBd23+CX@;h>+{_;FHVR#b>6M?9%crrwvVMbI)P+_fdx56V(y6%j2j!Eb48Rl38G z>Ev7Wx(&$D_w0Hi;FXZTCKe$#JyC=Gd@RM$Q7F}}L)Oz}mFxZ9YNR}#Kt+}CjMrbA z?#P%km$vE1Mcm9&UAvwj>}t#W2wzcj0VN1K@Q7zL=~*jRR+V|yR!RX6XPC-82>c<3 z<3i9FI4ajc3UHQrJ%J6?Yiq0YtSCj#TI|%;d1%k3=j)^;zt_v*@@FckH>Lj4*)(Rn zAr43-Yi~s6QBqP$3MTMzPIt_nHT#B!cpP&{NuoPPAbA!QJhC9C!1G96UXg3LXL-(o z0+$CuX~>+LPT|YCQjb(2*Fa_s0{UIE-qyX zbtV3Q*Hc;okv&B zuVbsEK`5;%tt@L0>T2s`3WG=4ps08)uUuJ!u6aB%cJF1CvjrFdl)>0kReAU^3W}hK zRP=S6HwY9v^*{-SjbL?2WsR_2pIcG26b7|=!^rCS@PGA_#iG%X+_D`j^o+} z;z#efK6CW}iAw3e=-k>mn&6n%L*qmyfm%Ro2>%IXl>tc~JXlYfC&`;tOiZ?bkx${6|s~=#yg$2nqFRu zB!1HCs*qTVAld)=xgD5T8HF*t27Cdm-SX;T)dACUC;kWzE-#M}G-C7LfOPD!MHA$! z#qcOrG6+11C&V5s?fjwZHZeTDhj>B|%+WG>5gz@KFGlsLUGmk?}x?RJ7?z1nKNh3oH=u5ZrqYvm}f8;xacQ_i{%(J*~-mBW};?tsq2H$r)?b|FU+)X-E;TholCeJUQuy`_h z#0z_SX0$(Ld4<~$`4{f>v_CN#xxIN*&KIGts5yL^BVS5$p$Sio{9FV7FQhSk1TGWi zwV!JexF&&X61XOTYZAC7fol@DCV^`bxF&&X61XOTYZAC7f&Z^1u=lBYD<>bT{KFkq zF1Qd;o2T0m5}Fl0!B6KngkrRtjU3nFf3<+)0{asY6jUa+?0+8Np_Wrg_>GI{TqW<{ zO(DUOB5eqfq?XR_1GnY01zD08xwBOp1eA*Wdhvka^4+E6D+dBBx zU4--W&M#0fpp_uItwS_-OFtjOafYD63is)S8G7N=fYb~!D6s^jRz1aq%GIY2>1dO6 zv~k++Zb7)HP<^^r&mRH^+Hu{|vqU>IM}4|qFXkw|2(hcIrQin-< z@=7=yvdO)npekJgbJA(EQ#)=0@h(d{xZr|rw5Lk5z6^(#FAu*w2>zVf9w4aFoye1o zcI`z5Jsg3a)hjo@N}}chx&8RX<0L&)=>pmi#;Vd6c&=FCRHYYD&8bz{P?+0~M)i6I zIk#8#w^IaoTHl2}erKPy_(qOv?GPrY(q2?4DG7@wLvgBf2mmqdIIr131Qeu4PI7!J z4e>rG9H)TNS?zPwe!(D&le?u)u7u*HZliQ1N&Luh9>sf%K-1o07~&ME$G|f9ojoYi zUPrd4?Yxk}@9JK@91I_447Wp_e`!HQk9-G*NAt-Kn-9f!ennX!UX{Lzu%&$;h!Lj5 z*&rk)v1;eLCW<#Tze*~@3E%Pr#t@Og*pXz;kC}wLiNYA|dC*X$o6kpvCsQZc{3@vx zCysZVZ+?~Zh!f(qw@_stjobF8skF6E(1&qbaj({VIUL?z+#5x25e4f$3xBd>P@YWX~G=67ZY{nQH*MEg?{Sk5+b?>qhNU(4vK8AB6bVNKb-K16|s0f?b86(WgFPh7u!b6Qw~z<2W_jL{*e*qtr1@ z>K`=hm+s=kCAwhsDnXyP7cT`?N)iMJwaV*Pms^ah4w`C z@p2H~O`L0UZ=w<5+r9t*3@gi3AFl+0c3q_Gs9u&BDXXTkOPJyE0jfy{5mGq5Av4N^ zd`b?p9nX^hx{z*L$H|^T|Jn8akR_krd7McBZD#yUoDz7P+9mwZILD_!5+X!uRGf)QmK6%?m;7PrNLaeW zHI9)kUTGLF?IR86ghioyn$uUy0r3o`Pm!o$>g0$gnww%*itj5~Ms@Z3{!r|KwHUxR zLC~bE3?wNz0lT&lrXq}t&_}GDEDM%C5GB>;#Ej6A=JXZf03&&dkvz#rexR&2s!et& zWS2g=Y`BzhNjRj8!*UcbYS)8c=nRONl_!ZxhRH|s=8V*pB5O>ii`tpv@aZM2jGd2V zVTewf0{(XBT3|nET=HRUHd8B;qhn2{G7pv`6P9B)oikxNgurl1_dTdr)N=Youo>u} zy7IZe{#i?{+!!LRtFHFR4Vdg57zP{AXu#IdQ{FFk%KkvBy_q0

@AWj2}?3MBC(N z?9Ir4Ze~Fn)&apxV}f4U)H);0g9XU)eh2f$Y!cF`w~oF*?mFOLY0RPrS(iYrjU{tI z8bUV9xtzSJTz1*zWjXR^p&jzM_DUdV%cgN$dn2WCDOFFY1(dQ;%0a0zO5IASI!fJ0 zsai@+p_GSGag?f}R2Va@y@FC-QtB>Bg(zjC)Q6OEQ|jH})SHxIlshT4kV2#%3mG% zR1T#l#)u0fzbQ+)XcJGvRID3WGGn*|5;bwcBuLaQ@AscFNhf$|Xsj@WbrwdCj7WPa z2!}FJu9^L(j5BG00G^?D;j>7IZxf9%4R4;$u{Rln?%kI$bo?Axu+PGLT6-E$K<9m& zTtfUdKw2--y5PDg<)ys6lzNC#f1nf-$O}m6v@PH-eP%NVFQlKV?6naxW6$E~*zFsK zM)pS<)v8byZSn!aV`E=LsYYsO38mQBe}_`6$vcqJn@mJ^(wl{Ev8Bt=x4Ry+K^Y4< z7n&56&RD8Q&1;vj21gqkKw2O0PbkHjcz-z6M=91=4^m(2AI#jsX8c_3->(Uo^>4~< zfjA(!hKUi9tM)jGqpdzns7%f3DaBg#P-;D4uB8-fbp=v-s}uDuj-!DyiNizgAXL`o zq}@9V)TY!w5N$C5g=jIJXqu32=^~Q=!=bO9nxCvpATd+-Hr7I)1+uq_U~eJ~1}-OW zwx?sJTV%nW0L4tm*lbVaw{Aj9-uMM8?G|3DL0UebWTl{Lnj@^xa#d)br-*4V1)0zV z%Ph=_8&+c7$gw8@DFu0%vAJm(-Mlmhm6bfRQer`2mXc>gd5%(IlKp^fE&ebM;zy7! zkb9&f97^poxdC|MEA547$&M0QR&B9)W^ieqQew$C()e@l*bL-1{tykD(6AXDOV_I% zX3bC*ioj+L5yBkKq9#;)wVzlZ@kbL3eA{+(A81)5|wh4wViOp~d9^|B>)KHT`AA3GRFSn66U59)*H=v#$t(mpugEuBTM zWzy+FYS z!QYG1E`N*FNmFvkuv_7%;XzWcDNQL#eUdyFHy{)ej256rAXbQSeMK&W>Odl>kz^Q{ zG$eI|rM@s^l<6JYXwC39COG<_LMe@GB-CPvsxgu#CLFmavm ze?>GKMDLD;;39-g-n0cE?7a=$!Tu{O*fZ%Tg%YbuKs+a0pBS#Us?tO7je=*uK2{=2 z@ED}56r^>ds~i;D(1R|dg|1`WW*lU^%Rk-=?ASQTZ$uMmyflLZxyY<6wA0?LW~k^foc_rJko0<0px}t4f^OUnfCly3+QL z%7r$2O_-Ehzl}Q330rJ#(v;$qSix?Zf~7oTh~H{P32+8@DF!K$k0Ce+VeyZh#V?k9 zEB}~=RB%0t`K^CNk_i5VvTBGb##391jS_3GwL^^GjyWKmHDJ#xbrs6Jx>D2bKLEA< z`&m-!&37`j#u#oZ?vZobm0b7=ubdxe62?kf5;*aCRdQU2>=q}o?pUOraPV9#1eE*A z_}q5Bbq3P1dk6M-W3)-|j+K0CAeRP^>(1?hQ$jl=PR{L6@)P|1@cu2yU2?zd-mBJ| zuq|GYpWwS+Dem>3Fvb>lV0$1Jzc?#K&Kp#+P1>=^AXofiR`Vl0oSb(Vp^-cz7tE)| z}o&I65*0 zgbLa3|Iiq_v_n~L%qZ^htyBydxjo`s@TN+6kegF`4@MSLl-wRPMUrTKqzlsMsknEDQ-a;V{<^whim1wS2e8x*DR8c_4$!8Nd`P9y zsxIx{LtBaPvII5HBIjF`Jd?y5DgLz?6Di-~RC7;4QzL5nFK8E>VZKj8P%O&tde{Nv zGDboL=)!J_tsq$SwgofC4)-dWvLs&JQU9DRa*_D0ft_ELC-xDyq^L( zxjo9%ZMj{cw8)IapDZVx#OIc6Hu@o73`l=Hslz-WFdu)2^89Sh0<8adNO6X2s^3 zrWBiH|17gzK5_%06v9DTYcE^?JI!yM3cB72s9?&-wDViX0Yro5#_76W=^kfF^1j(CoR?TAm9Sv+qIjp3nL`uVr?_%9ZX`BO2vQRAtJ9nGc-Z&NuabiQFp=Z*uSr`)Z zY@Qs5h;k+T2zaho-IJsP)?gD+AJC3|g-3VrJAlvvEw?tfRwEoM>2xBzDM&X#^pJFv zc~2uCxJGG8%2p~O{K2Hh<{G;Z*1rh|4ySZ$OJ0_0tvx~;M*w< z7EYm93n$OBlm7h@NjMeCsubC1$9NjiC*yddop0SrCHdqCT9j3ZP)Qba!VsI}0a9y6 zAG`<)JctC{gMf!&ZZvs|u%Mf~OBJIX#iTGspqPi(kG0aIwfJkJVX;F z1=|rj0+}g%YYO4%6UJz#4pApp(Y}KDS?I4BuD7vqkv9%$Q-;yrIG++=-5i^rGzF4D zKhYmlOu!^!T`D$XawIfPU|MDIjUo07ifECpMB=1yJQU0})TC;l$9y%u^C(Wt|EyHHw4#gr3#fm1i02{BpmV9-YLAp4-VWKLDdfUOLFueDO zV*?ypXBU9;P@pX=0%L0gqm~o^rh6mt-%nZ8;d+KUdj)J6WeK9R;#`%s@# z%2H1IHAJpT{|l(7W2A4fQ&S`6FvT8>rG@r7plja)rZP@RuqW>~tTGyU<#C{Bfq}HB z%B4R8i_^NX7-E5K-ACMRZZ#|UMzz2&i5L=%V=Z{HO}W*(2@z9TNe$hT-o>JB!J?3Wf<`4!b!?Iw=E-NI*TWaykq4p%6TD6LV(;#o278~FE6)ln zW{m?f%dv8iF_cS;h3+DHcY)q~tOv9-82potP^8+J5p1|wU1~sov3Mu`a*2TOVW6`73Y30Gu|3e@_wWfS+DD(4N5@m%7a4<`ii!5?bdX zhL(c$ik2%(4XjsY$kjX^+QPR!3Bh2m-koEgZa@ef0-(Tv8RLPidEfw1rCER-par5% z2>8R{>6|Y8j3MuM@cv~3*~{siBm4&goR5UYcrPu(7GI2`Z#xQXy+W$`^as$%ZGdR= zZHatsc-od1uh7=OCc(%Mw!ZwOu#WB-G;`c%Qh%)a)McbjBfs#pBTdTVZ3qNGhxPn<5Q4C|IMKaRhkTIwBbJZ(6=Cg$L;jceh$m1?+Si} zUdWgHADPClwVSXD$zzPFi%k*!{F-IP01UrbjFJC}gAISipzo~~SSd`&mP|5M2H|Gd z3P;#+5T<}@M#HAiyXxYJ8f~pxJ2w69_v1ppadfnODomhd1+(xJ3U(Nx{z9zNDEI18 z(?!x*G&*Zr&zUuyMY3Oe@*@)8ElFg+enDo+>dAORi1REK#z-CJ(11r-9plM3A{af3 zMN}zv9CUoT3eqpqR&oTG<=C1JCB6a-lFdi=}+R?OVn) z57mcE%|oIvzj>&MZ~Y-!4bssAmON81771mn`lwO+J5r%|J-rsK%2yl*gC~JZYlA@< z+c?qDCmZbur;*_aO`shnf#gFN;rm*g`A)oML-9RYz!Nk#mcjd_jFWAJ1=bpM( zJl);G@IqtcLHX<%%+OA4IqHr1U?#_r!BHk~uzTIjgk?~xVmT)A8*tEwK=&b7bPtYpbk?_f4N5>~wjy}in zwu6sO+IIAl#V50pF;)AL4{zHa3a#lZk-LjDe?KX62^d+fJr16*65RlSNmt^<_;#90 z8ilRof&14y*jciVe8?hAWp!>w9mogM`KK5Tr`F5lV`7j*oV0dl;&4o!4{em)=Go% z!u872J1DT~Z+?^a$WKh>zCWJJmRX+kDwQn50p?)5c>8V+3+_-nIs619Dx?oi zpE+*#FYtr&daAB1Mw&IO?FMsW^3ZH|GqtIYto+Wo=P_s{hQmdU;~B3DliQAq6SK1U zeXF5a-f;4{&?)&S1OzLKKFPi3egn|e>F8_Dv~WUfcIblK%f#(CzI?m!`t9bMV9;aJ z{eqd_xzZjBgO=PIGQ;qVT`XM+i|;!+NZc%phj6Z4?%W=uJ`~PgylpXTnTQ#fopD&0 z(48|S%!R&?KZn!s0Sjrf)vE}aj=0QqiUGfqLd)~`eYIg2zR4M%iRa{_>S_bO?|We^ z<)M$^A6_3I#mBKmC@G)cR~No(RaltR_NjPQKBxK&+e^YqCLw+*jOmW$u*95~9pH`b z56Ew>`V;w)CCP6&&KDJ7Kc^(_kb_4)%6Nz0b^MV@%H|!$?PmLt&*Co0i97N_AGY;v z!onseKDAmWK$nzA1@HcVRPe~nG}Ps=8Jn@jHp#tlJz|QY;POv6a;xIP=h9w#Gg{;X zv+@K>$qspwQQjXMgr&lwIuncP=MB@NXngDY$cH!Gj5>0f+++;CK_=}Srr}>;Ofkxc z*@rAxUie*MInmDVI`97!=|1d2)8se!T?bJLJDr5pKLsAoJa_<^uvS?p&%sJq06~?t z^@-Kc2hq`Y;d2^%N1wmn5*LsM0R|%Ac%vQAfoS2th^|VX_8hjR*^nzeuqc z6GUl}I*igLBPWgxW9<%o%&r*B!a6Mv7D$6(AwH1PT8PSAXu$vXn8>2uaw)t8e&4vT z(QY`7Nr^=kD=dh^0aI6wp#{sNUBu>x;Nq~FXVgLj!EJ`UBx=+$xG*EQg@;wm$t=V( zQTeV(F(8@>2`12rE=(Y4L1-7?r-vrDW6E){aBvG+;3I$oIyb}h1PBGbK?48MV8-7X z|Hdvrux+@K@T`*gWB#SyG5JwVa?vW#}%>1N;;~vS3ZX8ufGJSa5u2Nkx>m3 z%9&&`aq44ymAXxGnU!c)6JCJJYkcHJCHwNW_m)bhjEdKIq#x4(UeS>=aRYL;G4$5} z4IEWTg4U-+^Z?=*kA1uUgk?O%VDgOeRJ82`)@uLXE#o)aSLzsR<)M(#(SbFxtDMaz z>9kdabGjU^A=~e2KY@FTYIMMnD0SJ%)^4C(S^|BwM^GwtC3F@kR_XQjZBrDBe2+oe zKW2?=(ai{5{Hs*zP4XK`fmNx*nN^Z})bP$8EZf*|K?w5ad$3>Qv^|s#vM7c2JEWD^ zWE|LcbLW&;)oGBYu#)a9!}IddaIE$O!?;?Cg5QK=?;k!_mEU4FZkT1TA0x}K8)pvW zFF`BRr_W*)(R|PiY(a7KbOGRoEUZB$bO(>Qc!ct|=NU5%!i3BizLj>c!T0dvksh_g zh*LdE-eeDgXu??h-Yt%$(@Npn8`kKgK!I+!;n7PE?J{Dox{J!e3wL}9BDYQFw^ATC z()JqQ#z6Cf$C1bH%DYV|N#tKTU^r{&RV+#YMLn<&(*qn%njFmNAlIfi>0mJh)o4eT zq&Us6DCw9s!+}y1XGV(C6la2xMbW1m%E6OOSyarD&thKD@vAlbE=8H+(AivYl9HkE zTQ@-3!7owczw7?E4G#t{W8Gu@n|~+2^(Uwh>EDCs--GBM9?8^AI-ufr-8Wy!v+*yz zX&5m0X*yF7!HOUho8gPd7qlzO>2wZ9s3d|EWjO_!lITDcTCFT61C^#MvH{9emZtzp zR~97!%2Afj1C*sKN&{3#;`n+8#T4pXI(1G!=R!9`7%c^dTXjZNVwB>N6c3Ca^4<53u--wi6|wMNv?Ss+zhv212<{I6A^7LdiOpl`16rbw-`q4{=DLE7?zQfFgCJ zM2@Fd{fX`#fa@C>*MGp3BSa{`mDUM7#5xSz$?_Ls#G7_p`J|jh6SOc$EfY_wQa7Rf z6lft{FZmcH_la+Xj)blhM;2cAGTp|TxWyUoi5JwAo7yqWaH%HwsBE-nnC*|6<(?m3 zxU?;20=FpinWF>FEo>FE*&`=l3uYcGAImy&!hj5E@Fww-t82QWk8WSuJOQJV>2=8fAEc)C%FZ6&`e zK~OgsJaVDa=8;oy8SQV_?&{92)1=-LmJ3W+fD;spdXGUi@jE96vP@*5WW+wOr#pN& zC>LOBC-oc1sxe2!Y{$*TTiHE|5myl91cVD?w1-fI-?j9L;i!^eH~cxdXVZr`or5D`%#Juq zxLu~c2i@yFjjL45@3ksf6f2;66f}E`fsW<}^oT*AW1XH#fVfTaQB4B*g&1v4*s>7I z6Srl8Qe>w7-fP|#6FNpq6Tj<;{3{r9q!aj^&x{L0`%yCvH9^D-N93rM2_UdPYn>H# z%A6h8zZb1wOkz;N#~gb&8EG^u#KD z=IHatE1k~lmZ7JBEuIZD*8{<7m}WpkrCC7wdczHd04@!3T%zGdq&6dUlVQ3+-A*;I z9dI@y2h{4t(}Df{=ppWxv1K-pO&$^#$Oa=eVCH1oaGlI1ei`T{!EcCV%T6G`WPcXn z-oIc<2bj1v7{wSstl=l!vW0vUSvo%h5bK4W;V<#Y0oa2coVw`fn=Z$t;EV+dXJ z3CW7i_&w^qhDe9us8jdVhYa#7EVccHZPP+W&UVCFvovGywB z{;P;bg3E!pEho{oIG9fp4(>G$=+qbOZ=(VE80^!J;QYYMKu|`*F=)y>IAIt?@|WfJ za1D7tdlICvZt)aI;c#7@bf_aVrX5ebF+!>t*??(Z(VPve#zwb9{xht0V)Nb8Nh?4+ zP0q9n@wD88gEvE<&5z<-XQ27f7?XHvdtU4d{fN9g8vlY(n8fdV5VpNG9{QoKy)nk{ zw--#pxb4&PTaSk>ykHqllCgUs25(2~tTW&uH_RTtb6oOSCDHEx*km{Wz7Ie=@Q*Vz zaT}?D6o}z>=1jx@S5Le`T6jR#DE$>nQ_*Es6Wzq_h9XWTY)_Lyjo4IAyo68#p$z#? zm<+wBffy&ii-uk*9ZY5fd(l_yOePM>7oAW!x+;`FKEIYi`p{)z?+3Nf9UUT`k;J#1 z*3(8DVkFu%+JfMi&&;>IjeNus<$;J~OSET?K(yUoK@E#AGtwN#rGw~6rggF7qPmX* zy8Na;Xp}zY=bB#{k<2(Iz9+wap>K`c%hnvGGulMV>y`sMKnz|CZmF@W`iQpO0il}J zKbB&U&OOgyS_|6#48D|XE4)P7laO(tu9<0}$iTg|$Nx7>AqDLHpBNFIruzpJcckf0 zGWdkc>9C`>{bIo`U*j`)cDIiNJk z#hDBkl?QOmyBi~tg3WCbVunc&A|{gBcJG<3pZZw4(jo~}xZnf>_7;2~H03kG;wp$?zbak4T0sHiV3AF}J zE52=|efsv5b_bH_NQ!mE_^>!tS!LV~k)$s(i|h(;gAviY>(n1)fyuV>aO%-b z^+5o_l+bwf2Le*;B`sCm1P^`%-uqdO_R&RlmJL!_^6MS2BPV!%=fM?dD-TKBwTnBv z9KaF)alKB6Vtc+BtUI^oPu#wWQXQv^tRH=G`{ko@Xa$%DtfQ-KUow$h(Ma~Vo+CVh zYvG%~8hUKy)AlhD_R61M6=K>|A#Ur0qNbs6j#GXI?{LXSb+Li><0Vd1Oj z=eHe2OnWz0H;%mlNp~PWItU}&*));%d$==ZRG+Q}X>Bfa0SlyU4;gT{dM_grfmMqt zeFrz3Lz9I_?;o1P}tf$!H=gkRk7 z#&4m0bp`1(;fO|tZuCfDlThf%81&|Q9DT^U+anL6rMz`S)FU79$cG8cB9Ia`O0dSp zdh&r^T#lay?D$!l}3s{em0}y9`@3PIFW{n zy`zC4!yl=`44UL&_69=qL|(A)w0zVIeetwhqKAk-X{W#T;EBBVK(*FY;EjcPld#$o zc|XC!UQh@XF#a?%cr<$0TPloGLyw2OsKU1`4@cN-xRH^-eql-26M12UTA(*pg7d>3 z{i=ayjpsp+%kzMzv))@*Q{^k;>MJ+-Ts5Ul3+LQ1e<{~cQOfz;-m21Sm#4J4dVOix zMy{r+%v)DhSMKJjXsBG3jrCkzEm!C9aQD>-w(7dla(B6H{U+N|v0A8FUsos0E~~4l zudXVsjg)#*ZP}aLsqtKVw!606?X}JH#dF!!r8REbJtE=RiUfDr#_FotQd{N*pPtUD z^QBhRdQt^(cDdK>D|gqXmb>q^dFs5j^b+v-GuDaUo z_1WrbZ9=8n=3Kl4HGHY5V8E&O+E(QQ4}fi`E7q3VN(I}@CI;8m)w=aeLN67{DyfC+ zoJF?ADxuQ0gqb%syc6VIdT^{ zZ6qw8;4Q7U)t6SdZB?~4vDV#G?=BM{QJ+vMxS8bQIhsH;V`u;{WaSWHb#>D$`mxnD zxV_b-^*)`!n!0ka+Ku9-+4!PYvt~BkI@5QnEuLH9hL9RSxyD^n=iM}dgs`dJy>O;D ziqzNJiRZvjZFy-m1ay1N`l{42ZjlcJg(}GT=9#{mZJyGqYEUOx`tF)p9)Dk*%~xMq zM&k6^7T48!sw!42Tbc^3u|>EPfFYE61xRBlvosBpcU1~{%6fEt`n=vYi|{X>7>{iE33*XY4E-7hr}u`m?hTA-K4M3F&~CH zb(oWys)|Y>Dw5Rr6%lTTxtaATP$?nW4eD_^`v^PQj|e*HU4$5^ z7LiMDx(nm8g!PN^Fch=zre8*bX>Jnuvn^a`Te;-EJlC>&lWpJrwk=7ljdG4QQ3zR9 zxCK|WyEgfsNhjCq9o=!~*-Fc4X6mZHL9D6A z>??QMD%`bhZz-w8cQC9`n}C7#ie(TKQ`^y6J6hGg4%3L$iGr^R)K@H8YMT+y33X7S z(%MZ?nZ|RqBejZ*Qal&s)>iWmT+}lG*Xz~v=|HLwsX;2uCU11^UY#;D>HZn_BPL3H z8BLUOcY|%lLfd`Cg@ylYT$a=}lvY=jLn#|zXvpGvxs~pwQlD)}Es3zkT`M4+o15#H zn=!9+_MEh|G~2QQ*f?jwcW*DOs@*uduyhk_>|()N{Y_O@FIhGRm68@EGb*!3kii^{ z7*AVLlv?sPv|e1hv9_+U)|TULs48=F_vJ3O#FN2Ho=H^>r)xqHe%aWQ0EiKvP8J%(j0T<&bwp& zo#`2+>&wdB9xgt&sY=idBbieXW?!VKOoo>xJFN+rY0K_S!O&AC>~Q`!9-Dr_XoIpO?%`NR$B95bE&4g^vFTbHu|4)_heDyX!njkr`fJnQY5k zXp2&=uOy8H#y=zMb`7J#C}L%(fd|5krVYlwnL7Lx-#=|5I=e{1W!0rVA6pa!jJU27 zw(=^rWHi=!H$pX@vP_!Hna0J9jUO}KXpWr_Gtt0%p8EPfibr$hmR&dY*lHKNnD*Yc zpIY>O!xzgpZd_gZhozYhjd9wf_D^%3<_EN2z4Oi!FPFZtV}JQi-tIf{c+-jaUnHJ= z?KN9jy@&}9Z>)yg4clz!Ap8N{^Wf^S)WI^<*hZkFa14`+PME9at){f1s>}upBI=$4 z`oP?`RA!kYt8Td)9u}6>cr+CqcdRvD%x0zoGn;57fJ4wk7_=zB$-_cS6C%6F37-Ov z)9lD%gBdla>8{Avwg!m@m}&ibCj1m+!!IDu4++*itXV|v>W9|6QT3W07}*1EMNy8; zxpIY#WIp24JR-p14tlame zHQz${=}2Sq#_*Gorq3%ZZ#ql=_dhy*+X-ji0|NYbQnfF2%r987~2K<;EaVn zvG~ITwEK>JjNIppANuo3`iBk$@Hc31@S=Yr*!VLiBjNR<%D+Df&K(8QA5<7w-!cNm z>(av?;)kTMWu2ArX#l^tS}PtlS#pQT=4VZv(E5 zz!`wEvTzs~fpY;r1UM@KuLS&izzZU91>nsP=7JH z9F>1GVtig4RsJ&I;zBF83V6i-zES0W9tB5vp(pWk6y;I-WI)at!1gz33-G_CS-I{=xf3uQ9Mi{w^7{eP-;HwuCj3&s zD>2?1Bk;o*=;!C@<4NTkP~LL=ReqWQPm0(-qW2_VvZw37_ax{u9Rd6i{LPKf`wzfv zBkHr;cj;&!`9wc}=b>yX_eazx_+7wskW5!9h~7tl|6{(DqXR%HKLwc93BBCFod=wV za*DB1xdHqap?~xt`CSKiFUFVb$t0BD1h~eb|9>(Fe=gu3p#EgS2b>Am3H_ZBf$3&p z5%^Dyz^ed1gz~8TO99v1ZRN-gQvD5pW#G@lli*EwYLLg?$oRAXo&o({9l_rQcrEzB z3*-#{hk)r%_0fmq`yAltdO`5N173yx(K0 z%XL=n?TEZTqVf^#4FIM;*|RZH{uSW!DOevO@OUhVGoUZg@ts2FYv70GC-IXA_}-~k zx*DNBl0N(d^hG3eQ5mF13m(L#JCy#D!_E>fYv?I zkG}xEZ;F+>7~xL@90UC8BlyjL>GDBTpSA<0+XGR3{TILkz>o6(Bfwul|4SnE=}$kk zw8+GxM$7G(1Tj$M94!{!#rp12`M~BYmXu%YeU? z34Mt0ACEKXcC?=xDW3}Xg%Ryd2TZTS(8q%Q-v)TqEx^Y(5xqMBAJ4OL_eAPv13rQN zA&}3?mjM3u?N)ASq(7?xkL=Gnz%PQoEfM^YyD~kpRO+kY*0ZQ1wrK0I#~2m&bVY*% z{}A`At0#}wbv67M$+#K?_0`maXp^s8aCzwm8y)W^4(`0q74@;XN^F(9LZuhmITunc zlfpU&?+?!FQypAcB|@b-*MvQXcAj{+ z5I7V#y%K@{P;+jiCJLy+Y;3WreWTTUJ+{>Tt}P!?wirn~UF_fkMNmX4qQIgH>NaAmYD%kWxdwfSfiYkfV59}{?ZL}>0)3uq1TG_JhL zC+Ncjdr0#N`Iy{MQ^DlSW(3U=*N72zmFZmQ1c>Ue-POAt)!<>N&Yi<%5c&pt=o4!= z(seiDV7evHjh4#?bH@6}=4V89ls8gXBPJ;^3~l40gWz>nU=d&xs20sxG81I)>p3nJ z_JF2!Dr)J^%4kX;bDYXrO|7Uy5GNWnLXNB(|4@XS#pJPD7! zci>C)sa^7`PXmwpwazVN+2{u!q7`A4!Gzb0H^T^X8NNizf-kakT6oe26OF6I8Xx@- Y9r}>}$=YNP#~s5441d>a_!GtZKRDE^{Qv*} From 1fbe72b7ddfc5613fbf3106724b7e2140529fb0d Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 11 Jul 2022 09:56:15 +0200 Subject: [PATCH 067/354] lx_emul: fixed types in lx_emul_gen_random_u* * Rename lx_emul_gen_random_uint lx_emul_gen_random_u32. * Use genode_uint*_t as return types for the lx_emul_gen_random_u* functions. Ref #4544 --- repos/dde_linux/src/app/wireguard/lx_emul.c | 4 ++-- repos/dde_linux/src/include/lx_emul/random.h | 6 ++++-- repos/dde_linux/src/lib/lx_emul/random.cc | 8 ++++---- repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c | 2 +- repos/pc/src/lib/wifi/lx_emul.c | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/repos/dde_linux/src/app/wireguard/lx_emul.c b/repos/dde_linux/src/app/wireguard/lx_emul.c index 19adc25fea..f0dcb94780 100644 --- a/repos/dde_linux/src/app/wireguard/lx_emul.c +++ b/repos/dde_linux/src/app/wireguard/lx_emul.c @@ -49,7 +49,7 @@ int wait_for_random_bytes(void) u32 get_random_u32(void) { - return lx_emul_gen_random_uint(); + return lx_emul_gen_random_u32(); } @@ -57,7 +57,7 @@ u32 get_random_u32(void) u32 prandom_u32(void) { - return lx_emul_gen_random_uint(); + return lx_emul_gen_random_u32(); } diff --git a/repos/dde_linux/src/include/lx_emul/random.h b/repos/dde_linux/src/include/lx_emul/random.h index 52a3b65ad9..d35faf6b04 100644 --- a/repos/dde_linux/src/include/lx_emul/random.h +++ b/repos/dde_linux/src/include/lx_emul/random.h @@ -27,6 +27,8 @@ #ifndef _LX_EMUL__RANDOM_H_ #define _LX_EMUL__RANDOM_H_ +#include + #ifdef __cplusplus extern "C" { #endif @@ -41,8 +43,8 @@ void lx_emul_gen_random_bytes(void *dst, /** * Return a random unsigned integer value. */ -unsigned int lx_emul_gen_random_uint(void); -unsigned long long lx_emul_gen_random_u64(void); +genode_uint32_t lx_emul_gen_random_u32(void); +genode_uint64_t lx_emul_gen_random_u64(void); #ifdef __cplusplus } diff --git a/repos/dde_linux/src/lib/lx_emul/random.cc b/repos/dde_linux/src/lib/lx_emul/random.cc index a48f1515cb..7accd38cc6 100644 --- a/repos/dde_linux/src/lib/lx_emul/random.cc +++ b/repos/dde_linux/src/lib/lx_emul/random.cc @@ -217,13 +217,13 @@ void lx_emul_gen_random_bytes(void *dst, } -unsigned int lx_emul_gen_random_uint() +genode_uint32_t lx_emul_gen_random_u32() { - return (unsigned int)xoroshiro().get_u64(); + return (genode_uint32_t)xoroshiro().get_u64(); } -unsigned long long lx_emul_gen_random_u64() +genode_uint64_t lx_emul_gen_random_u64() { - return xoroshiro().get_u64(); + return (genode_uint64_t)xoroshiro().get_u64(); } diff --git a/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c b/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c index 07b57fcca6..4f4068eee3 100644 --- a/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c +++ b/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c @@ -26,7 +26,7 @@ void add_input_randomness(unsigned int type,unsigned int code,unsigned int value u32 get_random_u32(void) { - return lx_emul_gen_random_uint(); + return lx_emul_gen_random_u32(); } diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index 7d56801eaa..57305e989c 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -465,7 +465,7 @@ void prandom_bytes(void *buf, size_t bytes) u32 prandom_u32(void) { - return lx_emul_gen_random_uint(); + return lx_emul_gen_random_u32(); } From 924e1d741d0b8f1b144b3061a0629cf41c99335c Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 11 Jul 2022 15:18:35 +0200 Subject: [PATCH 068/354] lx_emul: cleanup naming of lx_emul_random_gen* Issue #4544 --- repos/dde_linux/src/app/wireguard/lx_emul.c | 8 ++++---- repos/dde_linux/src/include/lx_emul/random.h | 6 +++--- repos/dde_linux/src/lib/lx_emul/random.cc | 8 ++++---- repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c | 6 +++--- repos/pc/src/lib/wifi/lx_emul.c | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/repos/dde_linux/src/app/wireguard/lx_emul.c b/repos/dde_linux/src/app/wireguard/lx_emul.c index f0dcb94780..e3cf11c81c 100644 --- a/repos/dde_linux/src/app/wireguard/lx_emul.c +++ b/repos/dde_linux/src/app/wireguard/lx_emul.c @@ -32,7 +32,7 @@ void __icmp_send(struct sk_buff * skb_in,int type,int code,__be32 info,const str void get_random_bytes(void * buf,int nbytes) { - lx_emul_gen_random_bytes(buf, nbytes); + lx_emul_random_gen_bytes(buf, nbytes); } @@ -49,7 +49,7 @@ int wait_for_random_bytes(void) u32 get_random_u32(void) { - return lx_emul_gen_random_u32(); + return lx_emul_random_gen_u32(); } @@ -57,7 +57,7 @@ u32 get_random_u32(void) u32 prandom_u32(void) { - return lx_emul_gen_random_u32(); + return lx_emul_random_gen_u32(); } @@ -65,7 +65,7 @@ u32 prandom_u32(void) int __must_check get_random_bytes_arch(void * buf, int nbytes) { - lx_emul_gen_random_bytes(buf, nbytes); + lx_emul_random_gen_bytes(buf, nbytes); return nbytes; } diff --git a/repos/dde_linux/src/include/lx_emul/random.h b/repos/dde_linux/src/include/lx_emul/random.h index d35faf6b04..c978e5ece9 100644 --- a/repos/dde_linux/src/include/lx_emul/random.h +++ b/repos/dde_linux/src/include/lx_emul/random.h @@ -37,14 +37,14 @@ extern "C" { * Write a certain number of consecutive, random byte values beginning at * a given address. */ -void lx_emul_gen_random_bytes(void *dst, +void lx_emul_random_gen_bytes(void *dst, unsigned long nr_of_bytes); /** * Return a random unsigned integer value. */ -genode_uint32_t lx_emul_gen_random_u32(void); -genode_uint64_t lx_emul_gen_random_u64(void); +genode_uint32_t lx_emul_random_gen_u32(void); +genode_uint64_t lx_emul_random_gen_u64(void); #ifdef __cplusplus } diff --git a/repos/dde_linux/src/lib/lx_emul/random.cc b/repos/dde_linux/src/lib/lx_emul/random.cc index 7accd38cc6..b71c1944d3 100644 --- a/repos/dde_linux/src/lib/lx_emul/random.cc +++ b/repos/dde_linux/src/lib/lx_emul/random.cc @@ -190,12 +190,12 @@ static Xoroshiro_128_plus_reseeding &xoroshiro() } -void lx_emul_gen_random_bytes(void *dst, +void lx_emul_random_gen_bytes(void *dst, unsigned long nr_of_bytes) { /* validate arguments */ if (dst == nullptr || nr_of_bytes == 0) { - error("lx_emul_gen_random_bytes called with invalid args!"); + error(__func__, " called with invalid args!"); return; } /* fill up the destination with random 64-bit values as far as possible */ @@ -217,13 +217,13 @@ void lx_emul_gen_random_bytes(void *dst, } -genode_uint32_t lx_emul_gen_random_u32() +genode_uint32_t lx_emul_random_gen_u32() { return (genode_uint32_t)xoroshiro().get_u64(); } -genode_uint64_t lx_emul_gen_random_u64() +genode_uint64_t lx_emul_random_gen_u64() { return (genode_uint64_t)xoroshiro().get_u64(); } diff --git a/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c b/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c index 4f4068eee3..4ba978e2dc 100644 --- a/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c +++ b/repos/pc/src/lib/pc/lx_emul/shadow/drivers/char/random.c @@ -26,13 +26,13 @@ void add_input_randomness(unsigned int type,unsigned int code,unsigned int value u32 get_random_u32(void) { - return lx_emul_gen_random_u32(); + return lx_emul_random_gen_u32(); } u64 get_random_u64(void) { - return lx_emul_gen_random_u64(); + return lx_emul_random_gen_u64(); } @@ -41,7 +41,7 @@ int __must_check get_random_bytes_arch(void *buf, int nbytes) if (nbytes < 0) return -1; - lx_emul_gen_random_bytes(buf, nbytes); + lx_emul_random_gen_bytes(buf, nbytes); return nbytes; } diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index 57305e989c..61a3c0474f 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -459,13 +459,13 @@ void __put_page(struct page * page) void prandom_bytes(void *buf, size_t bytes) { - lx_emul_gen_random_bytes(buf, bytes); + lx_emul_random_gen_bytes(buf, bytes); } u32 prandom_u32(void) { - return lx_emul_gen_random_u32(); + return lx_emul_random_gen_u32(); } From c5bdc1ccbe257e2065145a447a51b79bd69ef682 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 1 Jul 2022 17:10:57 +0200 Subject: [PATCH 069/354] acpica: configure SCI IRQ mode Issue #4553 --- repos/libports/run/acpica.run | 38 +++++++++++-- repos/libports/src/app/acpica/ec.h | 2 +- repos/libports/src/app/acpica/os.cc | 76 ++++++++++++++++++++++++- repos/libports/src/app/acpica/report.cc | 13 +---- repos/libports/src/app/acpica/util.h | 20 +++++++ 5 files changed, 128 insertions(+), 21 deletions(-) diff --git a/repos/libports/run/acpica.run b/repos/libports/run/acpica.run index cf75822097..9cc8fdcbaf 100644 --- a/repos/libports/run/acpica.run +++ b/repos/libports/run/acpica.run @@ -72,8 +72,8 @@ set config { } append_if [expr !$use_acpica_as_acpi_drv] config { - - + + @@ -178,9 +178,9 @@ append config { - - - + + + @@ -225,4 +225,30 @@ build_boot_image $boot_modules append qemu_args "-nographic " -run_genode_until {\[init -\> acpi.*SCI IRQ:.*\n} 30 +if {![have_include "power_on/qemu"]} { + run_genode_until {\[init -\> acpi.*SCI IRQ:.*\n} 30 + exit 0 +} + +run_genode_until {.*PS2 uses IRQ, vector 0xc.*} 30 + +set spawn_id $qemu_spawn_id + +sleep 1 + +# send Ctrl-a+c to enter Qemu's monitor mode +send "\x01\x63" + +# wait for monitor to become ready +run_genode_until {(qemu)} 20 $spawn_id + + +for {set i 0} {$i < 3} {incr i} { + + sleep 1 + send "system_powerdown\n" + run_genode_until {.*key count: 0.*} 3 $spawn_id +} + +puts "\nTest succeeded\n" +exit 0 diff --git a/repos/libports/src/app/acpica/ec.h b/repos/libports/src/app/acpica/ec.h index dfb42406a4..173568cbac 100644 --- a/repos/libports/src/app/acpica/ec.h +++ b/repos/libports/src/app/acpica/ec.h @@ -81,7 +81,7 @@ class Ec : Acpica::Callback { State::access_t state = ec->ec_cmdsta->inb(ec->ec_port_cmdsta); if (!State::Sci_evt::get(state)) { - Genode::error("unknown status ", Genode::Hex(state)); + Genode::error("unknown status ", Genode::Hex(state)); return ACPI_REENABLE_GPE; /* gpe is acked and re-enabled */ } diff --git a/repos/libports/src/app/acpica/os.cc b/repos/libports/src/app/acpica/os.cc index 2737c79d35..142b703bab 100644 --- a/repos/libports/src/app/acpica/os.cc +++ b/repos/libports/src/app/acpica/os.cc @@ -116,6 +116,9 @@ struct Acpica::Main static struct Irq_handler { UINT32 irq; + Genode::Irq_session::Trigger trigger; + Genode::Irq_session::Polarity polarity; + ACPI_OSD_HANDLER handler; void *context; } irq_handler; @@ -152,9 +155,10 @@ struct Acpica::Main return; } - sci_conn.construct(env, irq_handler.irq); + sci_conn.construct(env, irq_handler.irq, irq_handler.trigger, irq_handler.polarity); - Genode::log("SCI IRQ: ", irq_handler.irq); + Genode::log("SCI IRQ: ", irq_handler.irq, + " (", irq_handler.trigger, "-", irq_handler.polarity, ")"); sci_conn->sigh(sci_irq); sci_conn->ack_irq(); @@ -276,6 +280,67 @@ void Acpica::Main::init_acpica(Wait_acpi_ready wait_acpi_ready, return; } + { + using Genode::Irq_session; + + /* + * ACPI Spec 2.1 General ACPI Terminology + * + * System Control Interrupt (SCI) A system interrupt used by hardware + * to notify the OS of ACPI events. The SCI is an active, low, + * shareable, level interrupt. + */ + irq_handler.irq = AcpiGbl_FADT.SciInterrupt; + irq_handler.trigger = Irq_session::TRIGGER_LEVEL; + irq_handler.polarity = Irq_session::POLARITY_LOW; + + /* apply potential override in MADT */ + ACPI_TABLE_MADT *madt = nullptr; + + ACPI_STATUS status = AcpiGetTable(ACPI_STRING(ACPI_SIG_MADT), 0, (ACPI_TABLE_HEADER **)&madt); + if (status == AE_OK) { + using Genode::String; + + for_each_element(madt, (ACPI_SUBTABLE_HEADER *) nullptr, + [&](ACPI_SUBTABLE_HEADER const * const s) { + + if (s->Type != ACPI_MADT_TYPE_INTERRUPT_OVERRIDE) + return; + + ACPI_MADT_INTERRUPT_OVERRIDE const * const irq = + reinterpret_cast(s); + + auto polarity_from_flags = [] (UINT16 flags) { + switch (flags & 0b11) { + case 0b01: return Irq_session::POLARITY_HIGH; + case 0b11: return Irq_session::POLARITY_LOW; + case 0b00: + default: + return Irq_session::POLARITY_UNCHANGED; + } + }; + + auto trigger_from_flags = [] (UINT16 flags) { + switch ((flags & 0b1100) >> 2) { + case 0b01: return Irq_session::TRIGGER_EDGE; + case 0b11: return Irq_session::TRIGGER_LEVEL; + case 0b00: + default: + return Irq_session::TRIGGER_UNCHANGED; + } + }; + + if (irq->SourceIrq == AcpiGbl_FADT.SciInterrupt) { + irq_handler.irq = irq->GlobalIrq; + irq_handler.trigger = trigger_from_flags(irq->IntiFlags); + irq_handler.polarity = polarity_from_flags(irq->IntiFlags); + + AcpiGbl_FADT.SciInterrupt = irq->GlobalIrq; + } + }, [](ACPI_SUBTABLE_HEADER const * const s) { return s->Length; }); + } + } + status = AcpiEnableSubsystem(ACPI_FULL_INITIALIZATION); if (status != AE_OK) { Genode::error("AcpiEnableSubsystem failed, status=", status); @@ -398,7 +463,12 @@ struct Acpica::Main::Irq_handler Acpica::Main::irq_handler; ACPI_STATUS AcpiOsInstallInterruptHandler(UINT32 irq, ACPI_OSD_HANDLER handler, void *context) { - Acpica::Main::irq_handler.irq = irq; + if (irq != Acpica::Main::irq_handler.irq) { + Genode::error("SCI interrupt is ", Acpica::Main::irq_handler.irq, + " but library requested ", irq); + return AE_BAD_PARAMETER; + } + Acpica::Main::irq_handler.handler = handler; Acpica::Main::irq_handler.context = context; return AE_OK; diff --git a/repos/libports/src/app/acpica/report.cc b/repos/libports/src/app/acpica/report.cc index b737d155e6..7c08622d75 100644 --- a/repos/libports/src/app/acpica/report.cc +++ b/repos/libports/src/app/acpica/report.cc @@ -16,21 +16,12 @@ #include "util.h" #include "bridge.h" +using namespace Acpica; + using Genode::Reporter; extern void AcpiGenodeFreeIOMem(ACPI_PHYSICAL_ADDRESS const phys, ACPI_SIZE const size); -template -void for_each_element(H const head, S *, F const &fn, FSIZE const &fn_size) -{ - for(S const * e = reinterpret_cast(head + 1); - e < reinterpret_cast(reinterpret_cast(head) + head->Header.Length); - e = reinterpret_cast(reinterpret_cast(e) + fn_size(e))) - { - fn(e); - } -} - static void add_madt(ACPI_TABLE_MADT const * const madt, Reporter::Xml_generator &xml) { diff --git a/repos/libports/src/app/acpica/util.h b/repos/libports/src/app/acpica/util.h index 578f82e1a6..40643e68c9 100644 --- a/repos/libports/src/app/acpica/util.h +++ b/repos/libports/src/app/acpica/util.h @@ -10,6 +10,9 @@ * under the terms of the GNU Affero General Public License version 3. */ +#ifndef _ACPICA__UTIL_H_ +#define _ACPICA__UTIL_H_ + extern "C" { #include "acpi.h" } @@ -20,6 +23,9 @@ namespace Acpica { template class Buffer; template class Callback; void generate_report(Genode::Env &, Bridge *); + + template + void for_each_element(H const head, S *, F const &fn, FSIZE const &fn_size); } template @@ -48,3 +54,17 @@ class Acpica::Callback : public Genode::List >::Element reinterpret_cast(this)->generate(xml); } }; + + +template +void Acpica::for_each_element(H const head, S *, F const &fn, FSIZE const &fn_size) +{ + for(S const * e = reinterpret_cast(head + 1); + e < reinterpret_cast(reinterpret_cast(head) + head->Header.Length); + e = reinterpret_cast(reinterpret_cast(e) + fn_size(e))) + { + fn(e); + } +} + +#endif /* _ACPICA__UTIL_H_ */ From 393766a931b01dafcfa14e10ff80238759bbaf3b Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 20 May 2022 18:08:05 +0200 Subject: [PATCH 070/354] legacy_platform_drv: ACPI devices in configuration Known ACPI device resources can be statically configured on startup like follows. Fixes #4545 --- .../x86/platform_device/platform_device.h | 5 +- .../os/src/drivers/platform/legacy/x86/README | 23 ++ .../platform/legacy/x86/acpi_devices.cc | 207 +++++++++++++++++ .../platform/legacy/x86/acpi_devices.h | 71 ++++++ .../os/src/drivers/platform/legacy/x86/irq.cc | 19 +- .../os/src/drivers/platform/legacy/x86/irq.h | 18 +- .../src/drivers/platform/legacy/x86/main.cc | 20 +- .../platform/legacy/x86/nonpci_devices.cc | 210 ++++++++++++++++-- .../drivers/platform/legacy/x86/pci_device.cc | 18 +- .../legacy/x86/pci_device_component.h | 24 +- .../platform/legacy/x86/pci_device_config.h | 5 +- .../legacy/x86/pci_session_component.h | 27 +-- .../src/drivers/platform/legacy/x86/target.mk | 2 +- 13 files changed, 584 insertions(+), 65 deletions(-) create mode 100644 repos/os/src/drivers/platform/legacy/x86/acpi_devices.cc create mode 100644 repos/os/src/drivers/platform/legacy/x86/acpi_devices.h diff --git a/repos/os/include/legacy/x86/platform_device/platform_device.h b/repos/os/include/legacy/x86/platform_device/platform_device.h index 7fbedef03a..e628a5d689 100644 --- a/repos/os/include/legacy/x86/platform_device/platform_device.h +++ b/repos/os/include/legacy/x86/platform_device/platform_device.h @@ -1,6 +1,7 @@ /* * \brief PCI-device interface * \author Norman Feske + * \author Christian Helmuth * \date 2008-01-28 */ @@ -80,10 +81,10 @@ struct Platform::Device : Platform::Abstract_device { /* * Mask out the resource-description bits of the base - * address register. I/O resources use the lowest 3 + * address register. I/O resources use the lowest 2 * bits, memory resources use the lowest 4 bits. */ - return _bar & ((type() == IO) ? ~7 : ~15); + return _bar & ((type() == IO) ? ~3 : ~15); } /** diff --git a/repos/os/src/drivers/platform/legacy/x86/README b/repos/os/src/drivers/platform/legacy/x86/README index ff2c4837af..6391dc0346 100644 --- a/repos/os/src/drivers/platform/legacy/x86/README +++ b/repos/os/src/drivers/platform/legacy/x86/README @@ -182,3 +182,26 @@ The driver provides for the PS2 and PIT device the IO_PORT and IRQ resources. ! ! ! + +Also, known ACPI device resources can be statically configured on +startup like follows. + +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! +! diff --git a/repos/os/src/drivers/platform/legacy/x86/acpi_devices.cc b/repos/os/src/drivers/platform/legacy/x86/acpi_devices.cc new file mode 100644 index 0000000000..ae1cf74d85 --- /dev/null +++ b/repos/os/src/drivers/platform/legacy/x86/acpi_devices.cc @@ -0,0 +1,207 @@ +/* + * \brief ACPI device information from config + * \author Christian Helmuth + * \date 2022-05-16 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include "acpi_devices.h" + +namespace Platform { namespace Acpi { + struct Device_impl; + + typedef String<16> Str; +}} + + +void Platform::Acpi::Device::Resource::print(Output &o) const +{ + using Genode::print; + switch (type) { + case Type::IRQ: + print(o, "IRQ [", base); + print(o, " ", irq == Irq::EDGE ? "edge" : irq == Irq::LEVEL_LOW ? "level-low" : "level-high"); + print(o, "]"); + break; + case Type::IOMEM: + print(o, "IOMEM "); + print(o, "[", Hex(base, Hex::Prefix::OMIT_PREFIX, Hex::PAD)); + print(o, "-", Hex(base + (size - 1), Hex::Prefix::OMIT_PREFIX, Hex::PAD)); + print(o, "]"); + break; + case Type::IOPORT: + print(o, "IOPORT "); + print(o, "[", Hex((unsigned short)base, Hex::Prefix::OMIT_PREFIX, Hex::PAD)); + print(o, "-", Hex((unsigned short)(base + (size - 1)), Hex::Prefix::OMIT_PREFIX, Hex::PAD)); + print(o, "]"); + break; + } +} + + +class Platform::Acpi::Device_impl : private Registry::Element, + public Platform::Acpi::Device +{ + private: + + Hid _hid; /* ACPI Spec 6.1.5 Hardware ID */ + + struct Resource_element : Registry::Element + { + unsigned id; + Resource res; + + Resource_element(Registry ®istry, + unsigned id, + Resource res) + : + Registry::Element(registry, *this), + id(id), res(res) + { } + }; + + Registry _resource_registry { }; + + Resource_result _lookup_resource(Resource::Type type, unsigned const id) const + { + Resource const *res = nullptr; + _resource_registry.for_each([&] (Resource_element const &e) { + if (e.res.type == type && e.id == id) + res = &e.res; + }); + + if (res) + return *res; + else + return Invalid_resource { }; + } + + unsigned _max_irq_id { 0 }; + unsigned _max_iomem_id { 0 }; + unsigned _max_ioport_id { 0 }; + + public: + + Device_impl(Registry ®istry, + Allocator &heap, Xml_node config) + : + Registry::Element(registry, *this), + _hid(config.attribute_value("name", Hid("ACPI0000"))) + { + config.for_each_sub_node("irq", [&] (Xml_node node) { + auto irq = [&] (Str const &mode, Str const &polarity) { + if (mode == "level") { + if (polarity == "high") + return Resource::Irq::LEVEL_HIGH; + else + return Resource::Irq::LEVEL_LOW; + } else { + return Resource::Irq::EDGE; + } + }; + new (heap) + Resource_element { + _resource_registry, + _max_irq_id++, + Resource { + .type = Resource::Type::IRQ, + .base = node.attribute_value("number", addr_t(0)), + .irq = irq(node.attribute_value("mode", Str("unchanged")), + node.attribute_value("polarity", Str("unchanged"))) } }; + }); + config.for_each_sub_node("io_mem", [&] (Xml_node node) { + new (heap) + Resource_element { + _resource_registry, + _max_iomem_id++, + Resource { + .type = Resource::Type::IOMEM, + .base = node.attribute_value("address", addr_t(0)), + .size = node.attribute_value("size", size_t(0)) } }; + }); + config.for_each_sub_node("io_port_range", [&] (Xml_node node) { + new (heap) + Resource_element { + _resource_registry, + _max_ioport_id++, + Resource { + .type = Resource::Type::IOPORT, + .base = node.attribute_value("address", addr_t(0)), + .size = node.attribute_value("size", size_t(0)) } }; + }); + } + + ~Device_impl() { error("unexpected call of ", __func__); } + + /* Platform::Acpi::Device interface */ + + Hid hid() const override { return _hid; } + + Resource_result resource(unsigned idx) const override + { + /* + * Index of all IOMEM and IOPORT resources - no IRQ! + * + * first _max_iomem_id IOMEM, then _max_ioport_id IOPORT + */ + if (idx < _max_iomem_id) + return iomem(idx); + else if (idx < _max_iomem_id + _max_ioport_id) + return ioport(idx - _max_iomem_id); + else + return Invalid_resource { }; + } + + Resource_result irq(unsigned id) const override + { + return _lookup_resource(Resource::Type::IRQ, id); + } + + Resource_result iomem(unsigned id) const override + { + return _lookup_resource(Resource::Type::IOMEM, id); + } + + Resource_result ioport(unsigned id) const override + { + return _lookup_resource(Resource::Type::IOPORT, id); + } +}; + + +Platform::Acpi::Device_registry::Lookup_result +Platform::Acpi::Device_registry::lookup(Platform::Acpi::Device::Hid hid) const +{ + Device const *found = nullptr; + + this->for_each([&] (Device const &device) { + if (device.hid() == hid) + found = &device; + }); + + if (found) + return found; + else + return Lookup_failed { }; +} + + +void Platform::Acpi::Device_registry::init_devices(Allocator &heap, Xml_node config) +{ + /* init only once */ + if (_initialized) + return; + + config.for_each_sub_node("device", [&] (Xml_node node) { + if (node.attribute_value("type", Str()) == "acpi") + new (heap) Device_impl(*this, heap, node); + }); + + _initialized = true; +} diff --git a/repos/os/src/drivers/platform/legacy/x86/acpi_devices.h b/repos/os/src/drivers/platform/legacy/x86/acpi_devices.h new file mode 100644 index 0000000000..89e7aa98e3 --- /dev/null +++ b/repos/os/src/drivers/platform/legacy/x86/acpi_devices.h @@ -0,0 +1,71 @@ +/* + * \brief ACPI device information from config + * \author Christian Helmuth + * \date 2022-05-16 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include +#include + + +namespace Platform { namespace Acpi { + using namespace Genode; + + class Device; + + class Device_registry; +} } + + +struct Platform::Acpi::Device : Interface +{ + typedef String<10> Hid; /* ACPI Spec 6.1.5 Hardware ID */ + + struct Resource + { + enum class Type { IRQ, IOMEM, IOPORT }; + + enum class Irq { EDGE, LEVEL_LOW, LEVEL_HIGH }; + + Type type; + addr_t base; + + union { + size_t size; + Irq irq; + }; + + void print(Output &o) const; + }; + + enum struct Invalid_resource { }; + typedef Attempt Resource_result; + + virtual Hid hid() const = 0; + virtual Resource_result resource(unsigned idx) const = 0; + virtual Resource_result irq(unsigned id) const = 0; + virtual Resource_result iomem(unsigned id) const = 0; + virtual Resource_result ioport(unsigned id) const = 0; +}; + + +struct Platform::Acpi::Device_registry : Genode::Registry +{ + bool _initialized { false }; + + void init_devices(Allocator &heap, Xml_node config); + + enum struct Lookup_failed { }; + typedef Attempt Lookup_result; + + Lookup_result lookup(Device::Hid name) const; +}; diff --git a/repos/os/src/drivers/platform/legacy/x86/irq.cc b/repos/os/src/drivers/platform/legacy/x86/irq.cc index 4de20bb2d0..609142475d 100644 --- a/repos/os/src/drivers/platform/legacy/x86/irq.cc +++ b/repos/os/src/drivers/platform/legacy/x86/irq.cc @@ -167,7 +167,7 @@ class Platform::Irq_component : public Platform::Irq_proxy void Platform::Irq_session_component::ack_irq() { if (msi()) { - _irq_conn->ack_irq(); + _msi_conn->ack_irq(); return; } @@ -186,7 +186,9 @@ void Platform::Irq_session_component::ack_irq() Platform::Irq_session_component::Irq_session_component(unsigned irq, addr_t pci_config_space, Env &env, - Allocator &heap) + Allocator &heap, + Irq_session::Trigger trigger, + Irq_session::Polarity polarity) : _gsi(irq) { @@ -197,11 +199,11 @@ Platform::Irq_session_component::Irq_session_component(unsigned irq, try { using namespace Genode; - _irq_conn.construct(env, msi, Irq_session::TRIGGER_UNCHANGED, + _msi_conn.construct(env, msi, Irq_session::TRIGGER_UNCHANGED, Irq_session::POLARITY_UNCHANGED, pci_config_space); - _msi_info = _irq_conn->info(); + _msi_info = _msi_conn->info(); if (_msi_info.type == Irq_session::Info::Type::MSI) { _gsi = msi; return; @@ -216,9 +218,6 @@ Platform::Irq_session_component::Irq_session_component(unsigned irq, if (_gsi >= INVALID_IRQ) return; - Irq_session::Trigger trigger; - Irq_session::Polarity polarity; - _gsi = Platform::Irq_override::irq_override(_gsi, trigger, polarity); if (_gsi != irq || trigger != Irq_session::TRIGGER_UNCHANGED || polarity != POLARITY_UNCHANGED) { @@ -241,7 +240,7 @@ Platform::Irq_session_component::Irq_session_component(unsigned irq, Platform::Irq_session_component::~Irq_session_component() { if (msi()) { - _irq_conn->sigh(Signal_context_capability()); + _msi_conn->sigh(Signal_context_capability()); irq_alloc.free_msi(_gsi); return; @@ -258,9 +257,9 @@ Platform::Irq_session_component::~Irq_session_component() void Platform::Irq_session_component::sigh(Signal_context_capability sigh) { - if (_irq_conn.constructed()) { + if (_msi_conn.constructed()) { /* register signal handler for msi directly at parent */ - _irq_conn->sigh(sigh); + _msi_conn->sigh(sigh); return; } diff --git a/repos/os/src/drivers/platform/legacy/x86/irq.h b/repos/os/src/drivers/platform/legacy/x86/irq.h index 1a64e3b51b..55c2402a96 100644 --- a/repos/os/src/drivers/platform/legacy/x86/irq.h +++ b/repos/os/src/drivers/platform/legacy/x86/irq.h @@ -42,18 +42,21 @@ class Platform::Irq_session_component : public Rpc_object, Platform::Irq_sigh _irq_sigh { }; Irq_session::Info _msi_info { }; - Constructible _irq_conn { }; + Constructible _msi_conn { }; public: enum { INVALID_IRQ = 0xffU }; - Irq_session_component(unsigned, addr_t, Env &, Allocator &heap); + Irq_session_component(unsigned, addr_t, Env &, Allocator &heap, + Trigger trigger = TRIGGER_UNCHANGED, + Polarity polarity = POLARITY_UNCHANGED); + ~Irq_session_component(); bool msi() { - return _irq_conn.constructed() && + return _msi_conn.constructed() && _msi_info.type == Irq_session::Info::Type::MSI; } @@ -136,9 +139,9 @@ class Platform::Irq_override : public List::Element Irq_session::Trigger trigger() const { return _trigger; } Irq_session::Polarity polarity() const { return _polarity; } - static unsigned irq_override (unsigned irq, - Irq_session::Trigger &trigger, - Irq_session::Polarity &polarity) + static unsigned irq_override(unsigned irq, + Irq_session::Trigger &trigger, + Irq_session::Polarity &polarity) { for (Irq_override *i = list()->first(); i; i = i->next()) if (i->irq() == irq) { @@ -147,8 +150,7 @@ class Platform::Irq_override : public List::Element return i->gsi(); } - trigger = Irq_session::TRIGGER_UNCHANGED; - polarity = Irq_session::POLARITY_UNCHANGED; + /* trigger and polarity not touched in this case! */ return irq; } }; diff --git a/repos/os/src/drivers/platform/legacy/x86/main.cc b/repos/os/src/drivers/platform/legacy/x86/main.cc index 5043e754d7..3c01f8c286 100644 --- a/repos/os/src/drivers/platform/legacy/x86/main.cc +++ b/repos/os/src/drivers/platform/legacy/x86/main.cc @@ -1,6 +1,7 @@ /* * \brief Platform driver for x86 * \author Norman Feske + * \author Christian Helmuth * \date 2008-01-28 */ @@ -20,17 +21,26 @@ #include "pci_session_component.h" #include "pci_device_config.h" #include "device_pd.h" +#include "acpi_devices.h" -namespace Platform { struct Main; }; +namespace Platform { + struct Main; + namespace Nonpci { void acpi_device_registry(Acpi::Device_registry &); } +}; struct Platform::Main { + Env &_env; + + Heap _heap { _env.ram(), _env.rm() }; + + Acpi::Device_registry _acpi_device_registry { }; + /* * Use sliced heap to allocate each session component at a separate * dataspace. */ - Env &_env; Sliced_heap sliced_heap { _env.ram(), _env.rm() }; Attached_rom_dataspace _config { _env, "config" }; @@ -73,7 +83,7 @@ struct Platform::Main }); } catch (...) { } - root.construct(_env, sliced_heap, _config, + root.construct(_env, _heap, sliced_heap, _config, acpi_rom->local_addr(), acpi_platform, msi_platform); } @@ -143,6 +153,8 @@ struct Platform::Main root->generate_pci_report(); root->config_update(); } + + _acpi_device_registry.init_devices(_heap, _config.xml()); } Main(Env &env) : _env(env) @@ -165,6 +177,8 @@ struct Platform::Main config_update(); acpi_update(); system_update(); + + Nonpci::acpi_device_registry(_acpi_device_registry); } }; diff --git a/repos/os/src/drivers/platform/legacy/x86/nonpci_devices.cc b/repos/os/src/drivers/platform/legacy/x86/nonpci_devices.cc index 69e8f3fd60..550883b19b 100644 --- a/repos/os/src/drivers/platform/legacy/x86/nonpci_devices.cc +++ b/repos/os/src/drivers/platform/legacy/x86/nonpci_devices.cc @@ -1,6 +1,7 @@ /* * \brief Non PCI devices, e.g. PS2 * \author Alexander Boettcher + * \author Christian Helmuth * \date 2015-04-17 */ @@ -13,6 +14,7 @@ #include "pci_session_component.h" #include "irq.h" +#include "acpi_devices.h" namespace Platform { namespace Nonpci { class Ps2; class Pit; } } @@ -85,7 +87,7 @@ class Platform::Nonpci::Ps2 : public Device_component return Io_mem_session_capability(); } - String<5> name() const override { return "PS2"; } + Device_name_string name() const override { return "PS2"; } }; @@ -124,7 +126,166 @@ class Platform::Nonpci::Pit : public Device_component return Io_port_session_capability(); } - String<5> name() const override { return "PIT"; } + Device_name_string name() const override { return "PIT"; } +}; + + +namespace Platform { namespace Nonpci { + class Acpi; + + void acpi_device_registry(Platform::Acpi::Device_registry &); +} } + + +static Platform::Acpi::Device_registry *_acpi_device_registry; + +void Platform::Nonpci::acpi_device_registry(Platform::Acpi::Device_registry ®istry) +{ + _acpi_device_registry = ®istry; +} + + +class Platform::Nonpci::Acpi : public Device_component +{ + private: + + Env &_env; + + Allocator &_session_heap; + + Platform::Acpi::Device const &_acpi_device; + + Irq_session_component *_irq0 = nullptr; + + /* + * Noncopyable + */ + Acpi(Acpi const &) = delete; + Acpi &operator = (Acpi const &) = delete; + + public: + + Acpi(Platform::Acpi::Device const &acpi_device, + Env &env, + Attached_io_mem_dataspace &pciconf, + Session_component &session, + Allocator &session_heap, + Allocator &global_heap, + Pci::Config::Delayer &delayer, + Device_bars_pool &devices_bars) + : + Device_component(env, pciconf, session, 0, + global_heap, delayer, devices_bars), + _env(env), _session_heap(session_heap), _acpi_device(acpi_device) + { } + + Device_name_string name() const override { return _acpi_device.hid(); } + + /* Platform::Device interface */ + + void bus_address(unsigned char *bus, unsigned char *dev, + unsigned char *fn) override + { + *bus = 0; *dev = 0; *fn = 0; + } + + unsigned short vendor_id() override { return ~0; } + + unsigned short device_id() override { return ~0; } + + unsigned class_code() override { return ~0; } + + Resource resource(int resource_id) override + { + using Acpi_device = Platform::Acpi::Device; + + return _acpi_device.resource(resource_id).convert( + [&] (Acpi_device::Resource r) { + /* craft artificial BAR values from resource info */ + switch (r.type) { + case Acpi_device::Resource::Type::IOMEM: + return Resource((r.base & 0xfffffff0) | 0b0000, r.size); + + case Acpi_device::Resource::Type::IOPORT: + return Resource((r.base & 0xfffffffc) | 0b01, r.size); + + case Acpi_device::Resource::Type::IRQ: + return Resource(); + } + return Resource(); + }, + [&] (Acpi_device::Invalid_resource) { return Resource(); }); + } + + unsigned config_read(unsigned char, Access_size) override + { + warning("ignore config_read from ACPI device ", _acpi_device.hid()); + return 0; + } + + void config_write(unsigned char, unsigned, Access_size) override + { + warning("ignore config_write to ACPI device ", _acpi_device.hid()); + } + + Irq_session_capability irq(uint8_t v_id) override + { + using Acpi_device = Platform::Acpi::Device; + + /* TODO more than one IRQ */ + if (v_id != 0) { + warning("ACPI device with more than one IRQ not supported (requested id ", v_id, ")"); + return Irq_session_capability(); + } + if (_irq0) return _irq0->cap(); + + /* TODO needs try see pci_device.cc ::iomem() */ + return _acpi_device.irq(v_id).convert( + [&] (Acpi_device::Resource r) { + Platform::Irq_session_component &irq = + *new(_session_heap) + Platform::Irq_session_component(r.base, ~0UL, _env, _session_heap, + Irq_session::TRIGGER_LEVEL, + Irq_session::POLARITY_LOW); + _env.ep().manage(irq); + _irq0 = &irq; + return irq.cap(); + }, + [&] (Acpi_device::Invalid_resource) { return Irq_session_capability(); }); + } + + Io_port_session_capability io_port(uint8_t v_id) override + { + using Acpi_device = Platform::Acpi::Device; + + /* TODO needs try see pci_device.cc ::iomem() */ + + return _acpi_device.ioport(v_id).convert( + [&] (Acpi_device::Resource r) { + Io_port_connection &ioport = + *new (_session_heap) Io_port_connection(_env, r.base, r.size); + return ioport.cap(); + }, + [&] (Acpi_device::Invalid_resource) { return Io_port_session_capability(); }); + } + + Io_mem_session_capability io_mem(uint8_t v_id, + Cache /* ignored */, + addr_t /* ignored */, + size_t /* ignored */) override + { + using Acpi_device = Platform::Acpi::Device; + + /* TODO needs try see pci_device.cc ::iomem() */ + + return _acpi_device.iomem(v_id).convert( + [&] (Acpi_device::Resource r) { + Io_mem_connection &iomem = + *new (_session_heap) Io_mem_connection(_env, r.base, r.size); + return iomem.cap(); + }, + [&] (Acpi_device::Invalid_resource) { return Io_mem_session_capability(); }); + } }; @@ -136,20 +297,34 @@ Platform::Device_capability Platform::Session_component::device(Device_name cons if (!name.valid_string()) return Device_capability(); - char const * device_name = name.string(); - const char * devices [] = { "PS2", "PIT" }; - unsigned devices_i = 0; + Device_name_string const device_name { name.string() }; - for (; devices_i < sizeof(devices) / sizeof(devices[0]); devices_i++) - if (!strcmp(device_name, devices[devices_i])) - break; + enum class Type { UNKNOWN, PS2, PIT, ACPI } device_type { Type::UNKNOWN }; - if (devices_i >= sizeof(devices) / sizeof(devices[0])) { - error("unknown '", device_name, " device name"); + Platform::Acpi::Device const *acpi_device = nullptr; + + if (device_name == "PS2") + device_type = Type::PS2; + + else if (device_name == "PIT") + device_type = Type::PIT; + + else if (_acpi_device_registry) + device_type = _acpi_device_registry->lookup(device_name).convert( + [&] (Acpi::Device const *device) { + acpi_device = device; + return Type::ACPI; + }, + [&] (Acpi::Device_registry::Lookup_failed) { return Type::UNKNOWN; }); + + bool const found = device_type != Type::UNKNOWN; + + if (!found) { + error("unknown device name '", device_name, "'"); return Device_capability(); } - if (!permit_device(devices[devices_i])) { + if (!permit_device(device_name.string())) { error("denied access to device '", device_name, "' for " "session '", _label, "'"); return Device_capability(); @@ -158,17 +333,24 @@ Platform::Device_capability Platform::Session_component::device(Device_name cons try { Device_component * dev = nullptr; - switch(devices_i) { - case 0: + switch (device_type) { + case Type::PS2: dev = new (_md_alloc) Nonpci::Ps2(_env, _pciconf, *this, _global_heap, _delayer, _devices_bars); break; - case 1: + case Type::PIT: dev = new (_md_alloc) Nonpci::Pit(_env, _pciconf, *this, _global_heap, _delayer, _devices_bars); break; + case Type::ACPI: + dev = new (_md_alloc) Nonpci::Acpi(*acpi_device, + _env, _pciconf, *this, + _md_alloc, + _global_heap, _delayer, + _devices_bars); + break; default: return Device_capability(); } diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_device.cc b/repos/os/src/drivers/platform/legacy/x86/pci_device.cc index ea4acb6a6a..30aa26399b 100644 --- a/repos/os/src/drivers/platform/legacy/x86/pci_device.cc +++ b/repos/os/src/drivers/platform/legacy/x86/pci_device.cc @@ -1,6 +1,8 @@ /* * \brief PCI device component implementation * \author Alexander Boettcher + * \author Christian Helmuth + * \date 2022-06-24 */ /* @@ -102,10 +104,24 @@ Genode::Io_mem_session_capability Platform::Device_component::io_mem(uint8_t con return Io_mem_session_capability(); } + +unsigned Platform::Device_component::config_read(unsigned char address, Access_size size) +{ + if (pci_device()) + return _device_config.read(_config_access, address, size, + _device_config.DONT_TRACK_ACCESS); + + return ~0; +} + + void Platform::Device_component::config_write(unsigned char address, unsigned value, Access_size size) { + if (!pci_device()) + return; + /* white list of ports which we permit to write */ switch (address) { case 0x40 ... 0xff: @@ -164,7 +180,7 @@ Genode::Irq_session_capability Platform::Device_component::irq(uint8_t id) if (_irq_session) return _irq_session->cap(); - if (!_device_config.valid()) { + if (!pci_device()) { /* Non PCI devices */ _irq_session = construct_at(_mem_irq_component, _irq_line, ~0UL, diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h b/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h index b8e68de77e..db3d92da36 100644 --- a/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h +++ b/repos/os/src/drivers/platform/legacy/x86/pci_device_component.h @@ -1,6 +1,7 @@ /* * \brief platform device component * \author Norman Feske + * \author Christian Helmuth * \date 2008-01-28 */ @@ -33,6 +34,8 @@ namespace Platform { class Device_component; class Session_component; + typedef String<10> Device_name_string; + typedef Registry > Device_bars_pool; } @@ -536,12 +539,15 @@ class Platform::Device_component : public Rpc_object, } } - if (!_device_config.valid()) + if (!pci_device()) return; _power_off(); } + /* distinct non-PCI and PCI devices */ + bool pci_device() const { return _device_config.valid(); } + /**************************************** ** Methods used solely by pci session ** ****************************************/ @@ -549,7 +555,7 @@ class Platform::Device_component : public Rpc_object, Device_config device_config() const { return _device_config; } addr_t config_space() const { return _config_space; } - virtual String<5> name() const { return "PCI"; } + virtual Device_name_string name() const { return "PCI"; } template void for_each_device(FUNC const &fn) const @@ -580,18 +586,14 @@ class Platform::Device_component : public Rpc_object, Resource resource(int resource_id) override { + if (pci_device()) + return _device_config.resource(resource_id).api_resource(); + /* return invalid resource if device is invalid */ - if (!_device_config.valid()) - return Resource(0, 0); - - return _device_config.resource(resource_id).api_resource(); + return Resource(0, 0); } - unsigned config_read(unsigned char address, Access_size size) override - { - return _device_config.read(_config_access, address, size, - _device_config.DONT_TRACK_ACCESS); - } + unsigned config_read(unsigned char address, Access_size size) override; void config_write(unsigned char address, unsigned value, Access_size size) override; diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_device_config.h b/repos/os/src/drivers/platform/legacy/x86/pci_device_config.h index 8610f17321..0478bc988b 100644 --- a/repos/os/src/drivers/platform/legacy/x86/pci_device_config.h +++ b/repos/os/src/drivers/platform/legacy/x86/pci_device_config.h @@ -1,6 +1,7 @@ /* * \brief PCI device configuration * \author Norman Feske + * \author Christian Helmuth * \date 2008-01-29 */ @@ -292,12 +293,12 @@ namespace Platform { /** * Return true if device is a PCI bridge */ - bool pci_bridge() { return _header_type == HEADER_PCI_TO_PCI; } + bool pci_bridge() const { return _header_type == HEADER_PCI_TO_PCI; } /** * Return true if device is valid */ - bool valid() { return _vendor_id != INVALID_VENDOR; } + bool valid() const { return _vendor_id != INVALID_VENDOR; } /** * Return resource description by resource ID diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h b/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h index c157edf06c..ddf2828faa 100644 --- a/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h +++ b/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h @@ -1,6 +1,7 @@ /* * \brief Platform session component * \author Norman Feske + * \author Christian Helmuth * \date 2008-01-28 */ @@ -218,7 +219,7 @@ class Platform::Session_component : public Rpc_object Session_label const _label; List _device_list { }; Platform::Pci_buses &_pci_bus; - Heap &_global_heap; + Allocator &_global_heap; Pci::Config::Delayer &_delayer; Device_bars_pool &_devices_bars; bool const _iommu; @@ -349,8 +350,8 @@ class Platform::Session_component : public Rpc_object try { policy.for_each_sub_node("device", [&] (Xml_node dev) { - /* enforce restriction based on name name */ - if (dev.attribute_value("name", String<10>()) == name) + /* enforce restriction based on name */ + if (dev.attribute_value("name", Device_name_string()) == name) /* found identical match - permit access */ throw true; }); @@ -424,8 +425,7 @@ class Platform::Session_component : public Rpc_object _config.xml().for_each_sub_node("policy", [&] (Xml_node policy) { policy.for_each_sub_node("device", [&] (Xml_node device) { - typedef String<10> Name; - if (device.attribute_value("name", Name()) == dev_name) { + if (device.attribute_value("name", Device_name_string()) == dev_name) { if (once) throw true; @@ -474,7 +474,7 @@ class Platform::Session_component : public Rpc_object Attached_io_mem_dataspace &pciconf, addr_t pciconf_base, Platform::Pci_buses &buses, - Heap &global_heap, + Allocator &global_heap, Pci::Config::Delayer &delayer, Device_bars_pool &devices_bars, char const *args, @@ -521,8 +521,8 @@ class Platform::Session_component : public Rpc_object throw Service_denied(); } - typedef String<16> Name; - Name const name = device_node.attribute_value("name", Name()); + Device_name_string const name = + device_node.attribute_value("name", Device_name_string()); enum { DOUBLET = false }; if (find_dev_in_policy(name.string(), DOUBLET)) { @@ -610,7 +610,7 @@ class Platform::Session_component : public Rpc_object _device_list.first()->for_each_device([&](auto const &dev) { /* Non PCI devices */ - if (!dev.device_config().valid()) { + if (!dev.pci_device()) { if (!permit_device(dev.name().string())) result = false; @@ -777,7 +777,7 @@ class Platform::Session_component : public Rpc_object if (!device) return; - if (device->device_config().valid()) { + if (device->pci_device()) { if (bdf_in_use.get(device->device_config().bdf().value(), 1)) bdf_in_use.clear(device->device_config().bdf().value(), 1); } @@ -877,6 +877,7 @@ class Platform::Session_component : public Rpc_object return _env.pd().dma_addr(ram_cap); } + /* non-PCI devices */ Device_capability device(Device_name const &name) override; }; @@ -886,14 +887,13 @@ class Platform::Root : public Root_component private: Env &_env; + Allocator &_heap; Attached_rom_dataspace &_config; Constructible _pci_confspace { }; addr_t _pci_confspace_base = 0; Constructible _pci_reporter { }; - Heap _heap { _env.ram(), _env.rm() }; - Device_bars_pool _devices_bars { }; Constructible _buses { }; @@ -1123,11 +1123,12 @@ class Platform::Root : public Root_component * \param md_alloc meta-data allocator for allocating PCI-session * components and PCI-device components */ - Root(Env &env, Allocator &md_alloc, Attached_rom_dataspace &config, + Root(Env &env, Allocator &heap, Allocator &md_alloc, Attached_rom_dataspace &config, char const *acpi_rom, bool acpi_platform, bool msi_platform) : Root_component(&env.ep().rpc_ep(), &md_alloc), _env(env), + _heap(heap), _config(config), _msi_platform(msi_platform) { diff --git a/repos/os/src/drivers/platform/legacy/x86/target.mk b/repos/os/src/drivers/platform/legacy/x86/target.mk index 65a0a83892..d9ab3786c1 100644 --- a/repos/os/src/drivers/platform/legacy/x86/target.mk +++ b/repos/os/src/drivers/platform/legacy/x86/target.mk @@ -1,7 +1,7 @@ TARGET = legacy_pc_platform_drv REQUIRES = x86 SRC_CC = main.cc irq.cc pci_device.cc nonpci_devices.cc session.cc -SRC_CC += device_pd.cc +SRC_CC += device_pd.cc acpi_devices.cc LIBS = base INC_DIR = $(PRG_DIR) From 4550ec47163796d11f05c4229c9cb9293089145e Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 24 Jun 2022 14:44:56 +0200 Subject: [PATCH 071/354] genode_c_api: key-press/release and relative-motion events Issue #4543 --- repos/os/include/genode_c_api/event.h | 8 ++++++++ repos/os/src/lib/genode_c_api/event.cc | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/repos/os/include/genode_c_api/event.h b/repos/os/include/genode_c_api/event.h index 5b95e0fc10..826f68965a 100644 --- a/repos/os/include/genode_c_api/event.h +++ b/repos/os/include/genode_c_api/event.h @@ -1,6 +1,7 @@ /* * \brief C interface to Genode's event session * \author Norman Feske + * \author Christian Helmuth * \date 2021-09-29 */ @@ -62,9 +63,16 @@ struct genode_event_submit; /** * Interface called by 'genode_event_generator_t' to submit events + * + * Note, keycode values must conform to os/include/input/keycodes.h. */ struct genode_event_submit { + void (*press) (struct genode_event_submit *, unsigned keycode); + void (*release) (struct genode_event_submit *, unsigned keycode); + + void (*rel_motion) (struct genode_event_submit *, int x, int y); + void (*touch) (struct genode_event_submit *, struct genode_event_touch_args const *); diff --git a/repos/os/src/lib/genode_c_api/event.cc b/repos/os/src/lib/genode_c_api/event.cc index 2be248ef39..87834ad32f 100644 --- a/repos/os/src/lib/genode_c_api/event.cc +++ b/repos/os/src/lib/genode_c_api/event.cc @@ -1,6 +1,7 @@ /* * \brief C interface to Genode's event session * \author Norman Feske + * \author Christian Helmuth * \date 2021-09-29 */ @@ -72,6 +73,24 @@ namespace { fn(static_cast(myself)->batch); } + static void _press(struct genode_event_submit *myself, unsigned keycode) + { + _with_batch(myself, [&] (Event::Session_client::Batch &batch) { + batch.submit(Input::Press { Input::Keycode(keycode) }); }); + } + + static void _release(struct genode_event_submit *myself, unsigned keycode) + { + _with_batch(myself, [&] (Event::Session_client::Batch &batch) { + batch.submit(Input::Release { Input::Keycode(keycode) }); }); + } + + static void _rel_motion(struct genode_event_submit *myself, int x, int y) + { + _with_batch(myself, [&] (Event::Session_client::Batch &batch) { + batch.submit(Input::Relative_motion { x, y }); }); + } + static void _touch(struct genode_event_submit *myself, struct genode_event_touch_args const *args) { @@ -94,6 +113,9 @@ namespace { : batch(batch) { + press = _press; + release = _release; + rel_motion = _rel_motion; touch = _touch; touch_release = _touch_release; }; From f14b68202c933a91f49315a8adaaa7992259aa1f Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 24 Jun 2022 08:37:50 +0200 Subject: [PATCH 072/354] dde_linux: shadow evdev.c and use event C API Fixes #4543 --- repos/dde_linux/src/include/lx_emul/event.h | 30 ++ repos/dde_linux/src/lib/lx_emul/event.cc | 468 ++++++++++++++++++ .../lib/lx_emul/shadow/drivers/input/evdev.c | 209 ++++++++ 3 files changed, 707 insertions(+) create mode 100644 repos/dde_linux/src/include/lx_emul/event.h create mode 100644 repos/dde_linux/src/lib/lx_emul/event.cc create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/drivers/input/evdev.c diff --git a/repos/dde_linux/src/include/lx_emul/event.h b/repos/dde_linux/src/include/lx_emul/event.h new file mode 100644 index 0000000000..2487a748ac --- /dev/null +++ b/repos/dde_linux/src/include/lx_emul/event.h @@ -0,0 +1,30 @@ +/* + * \brief Lx_emul support for input events + * \author Christian Helmuth + * \date 2022-06-24 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#ifndef _LX_EMUL__EVENT_H_ +#define _LX_EMUL__EVENT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Translate keycodes from Linux to Genode to prevent future incompatibilities + */ +extern unsigned lx_emul_event_keycode(unsigned linux_keycode); + +#ifdef __cplusplus +} +#endif + +#endif /* _LX_EMUL__USB_H_ */ diff --git a/repos/dde_linux/src/lib/lx_emul/event.cc b/repos/dde_linux/src/lib/lx_emul/event.cc new file mode 100644 index 0000000000..48652774a9 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/event.cc @@ -0,0 +1,468 @@ +/* + * \brief Lx_emul support for input events + * \author Christian Helmuth + * \date 2022-06-24 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +#include + +/* + * Input keycodes duplicated from input/keycodes.h as Genode enums and Linux + * macro definitions collide on direct inclusion. + */ +#define GENODE_INPUT_KEYCODES \ + GENODE_TAG_VALUE(KEY_RESERVED, 0) \ + GENODE_TAG_VALUE(KEY_ESC, 1) \ + GENODE_TAG_VALUE(KEY_1, 2) \ + GENODE_TAG_VALUE(KEY_2, 3) \ + GENODE_TAG_VALUE(KEY_3, 4) \ + GENODE_TAG_VALUE(KEY_4, 5) \ + GENODE_TAG_VALUE(KEY_5, 6) \ + GENODE_TAG_VALUE(KEY_6, 7) \ + GENODE_TAG_VALUE(KEY_7, 8) \ + GENODE_TAG_VALUE(KEY_8, 9) \ + GENODE_TAG_VALUE(KEY_9, 10) \ + GENODE_TAG_VALUE(KEY_0, 11) \ + GENODE_TAG_VALUE(KEY_MINUS, 12) \ + GENODE_TAG_VALUE(KEY_EQUAL, 13) \ + GENODE_TAG_VALUE(KEY_BACKSPACE, 14) \ + GENODE_TAG_VALUE(KEY_TAB, 15) \ + GENODE_TAG_VALUE(KEY_Q, 16) \ + GENODE_TAG_VALUE(KEY_W, 17) \ + GENODE_TAG_VALUE(KEY_E, 18) \ + GENODE_TAG_VALUE(KEY_R, 19) \ + GENODE_TAG_VALUE(KEY_T, 20) \ + GENODE_TAG_VALUE(KEY_Y, 21) \ + GENODE_TAG_VALUE(KEY_U, 22) \ + GENODE_TAG_VALUE(KEY_I, 23) \ + GENODE_TAG_VALUE(KEY_O, 24) \ + GENODE_TAG_VALUE(KEY_P, 25) \ + GENODE_TAG_VALUE(KEY_LEFTBRACE, 26) \ + GENODE_TAG_VALUE(KEY_RIGHTBRACE, 27) \ + GENODE_TAG_VALUE(KEY_ENTER, 28) \ + GENODE_TAG_VALUE(KEY_LEFTCTRL, 29) \ + GENODE_TAG_VALUE(KEY_A, 30) \ + GENODE_TAG_VALUE(KEY_S, 31) \ + GENODE_TAG_VALUE(KEY_D, 32) \ + GENODE_TAG_VALUE(KEY_F, 33) \ + GENODE_TAG_VALUE(KEY_G, 34) \ + GENODE_TAG_VALUE(KEY_H, 35) \ + GENODE_TAG_VALUE(KEY_J, 36) \ + GENODE_TAG_VALUE(KEY_K, 37) \ + GENODE_TAG_VALUE(KEY_L, 38) \ + GENODE_TAG_VALUE(KEY_SEMICOLON, 39) \ + GENODE_TAG_VALUE(KEY_APOSTROPHE, 40) \ + GENODE_TAG_VALUE(KEY_GRAVE, 41) \ + GENODE_TAG_VALUE(KEY_LEFTSHIFT, 42) \ + GENODE_TAG_VALUE(KEY_BACKSLASH, 43) \ + GENODE_TAG_VALUE(KEY_Z, 44) \ + GENODE_TAG_VALUE(KEY_X, 45) \ + GENODE_TAG_VALUE(KEY_C, 46) \ + GENODE_TAG_VALUE(KEY_V, 47) \ + GENODE_TAG_VALUE(KEY_B, 48) \ + GENODE_TAG_VALUE(KEY_N, 49) \ + GENODE_TAG_VALUE(KEY_M, 50) \ + GENODE_TAG_VALUE(KEY_COMMA, 51) \ + GENODE_TAG_VALUE(KEY_DOT, 52) \ + GENODE_TAG_VALUE(KEY_SLASH, 53) \ + GENODE_TAG_VALUE(KEY_RIGHTSHIFT, 54) \ + GENODE_TAG_VALUE(KEY_KPASTERISK, 55) \ + GENODE_TAG_VALUE(KEY_LEFTALT, 56) \ + GENODE_TAG_VALUE(KEY_SPACE, 57) \ + GENODE_TAG_VALUE(KEY_CAPSLOCK, 58) \ + GENODE_TAG_VALUE(KEY_F1, 59) \ + GENODE_TAG_VALUE(KEY_F2, 60) \ + GENODE_TAG_VALUE(KEY_F3, 61) \ + GENODE_TAG_VALUE(KEY_F4, 62) \ + GENODE_TAG_VALUE(KEY_F5, 63) \ + GENODE_TAG_VALUE(KEY_F6, 64) \ + GENODE_TAG_VALUE(KEY_F7, 65) \ + GENODE_TAG_VALUE(KEY_F8, 66) \ + GENODE_TAG_VALUE(KEY_F9, 67) \ + GENODE_TAG_VALUE(KEY_F10, 68) \ + GENODE_TAG_VALUE(KEY_NUMLOCK, 69) \ + GENODE_TAG_VALUE(KEY_SCROLLLOCK, 70) \ + GENODE_TAG_VALUE(KEY_KP7, 71) \ + GENODE_TAG_VALUE(KEY_KP8, 72) \ + GENODE_TAG_VALUE(KEY_KP9, 73) \ + GENODE_TAG_VALUE(KEY_KPMINUS, 74) \ + GENODE_TAG_VALUE(KEY_KP4, 75) \ + GENODE_TAG_VALUE(KEY_KP5, 76) \ + GENODE_TAG_VALUE(KEY_KP6, 77) \ + GENODE_TAG_VALUE(KEY_KPPLUS, 78) \ + GENODE_TAG_VALUE(KEY_KP1, 79) \ + GENODE_TAG_VALUE(KEY_KP2, 80) \ + GENODE_TAG_VALUE(KEY_KP3, 81) \ + GENODE_TAG_VALUE(KEY_KP0, 82) \ + GENODE_TAG_VALUE(KEY_KPDOT, 83) \ + \ + GENODE_TAG_VALUE(KEY_ZENKAKUHANKAKU, 85) \ + GENODE_TAG_VALUE(KEY_102ND, 86) \ + GENODE_TAG_VALUE(KEY_F11, 87) \ + GENODE_TAG_VALUE(KEY_F12, 88) \ + GENODE_TAG_VALUE(KEY_RO, 89) \ + GENODE_TAG_VALUE(KEY_KATAKANA, 90) \ + GENODE_TAG_VALUE(KEY_HIRAGANA, 91) \ + GENODE_TAG_VALUE(KEY_HENKAN, 92) \ + GENODE_TAG_VALUE(KEY_KATAKANAHIRAGANA, 93) \ + GENODE_TAG_VALUE(KEY_MUHENKAN, 94) \ + GENODE_TAG_VALUE(KEY_KPJPCOMMA, 95) \ + GENODE_TAG_VALUE(KEY_KPENTER, 96) \ + GENODE_TAG_VALUE(KEY_RIGHTCTRL, 97) \ + GENODE_TAG_VALUE(KEY_KPSLASH, 98) \ + GENODE_TAG_VALUE(KEY_SYSRQ, 99) \ + GENODE_TAG_VALUE(KEY_RIGHTALT, 100) \ + GENODE_TAG_VALUE(KEY_LINEFEED, 101) \ + GENODE_TAG_VALUE(KEY_HOME, 102) \ + GENODE_TAG_VALUE(KEY_UP, 103) \ + GENODE_TAG_VALUE(KEY_PAGEUP, 104) \ + GENODE_TAG_VALUE(KEY_LEFT, 105) \ + GENODE_TAG_VALUE(KEY_RIGHT, 106) \ + GENODE_TAG_VALUE(KEY_END, 107) \ + GENODE_TAG_VALUE(KEY_DOWN, 108) \ + GENODE_TAG_VALUE(KEY_PAGEDOWN, 109) \ + GENODE_TAG_VALUE(KEY_INSERT, 110) \ + GENODE_TAG_VALUE(KEY_DELETE, 111) \ + GENODE_TAG_VALUE(KEY_MACRO, 112) \ + GENODE_TAG_VALUE(KEY_MUTE, 113) \ + GENODE_TAG_VALUE(KEY_VOLUMEDOWN, 114) \ + GENODE_TAG_VALUE(KEY_VOLUMEUP, 115) \ + GENODE_TAG_VALUE(KEY_POWER, 116) \ + GENODE_TAG_VALUE(KEY_KPEQUAL, 117) \ + GENODE_TAG_VALUE(KEY_KPPLUSMINUS, 118) \ + GENODE_TAG_VALUE(KEY_PAUSE, 119) \ + \ + GENODE_TAG_VALUE(KEY_KPCOMMA, 121) \ + GENODE_TAG_VALUE(KEY_HANGUEL, 122) \ + GENODE_TAG_VALUE(KEY_HANJA, 123) \ + GENODE_TAG_VALUE(KEY_YEN, 124) \ + GENODE_TAG_VALUE(KEY_LEFTMETA, 125) \ + GENODE_TAG_VALUE(KEY_RIGHTMETA, 126) \ + GENODE_TAG_VALUE(KEY_COMPOSE, 127) \ + \ + GENODE_TAG_VALUE(KEY_STOP, 128) \ + GENODE_TAG_VALUE(KEY_AGAIN, 129) \ + GENODE_TAG_VALUE(KEY_PROPS, 130) \ + GENODE_TAG_VALUE(KEY_UNDO, 131) \ + GENODE_TAG_VALUE(KEY_FRONT, 132) \ + GENODE_TAG_VALUE(KEY_COPY, 133) \ + GENODE_TAG_VALUE(KEY_OPEN, 134) \ + GENODE_TAG_VALUE(KEY_PASTE, 135) \ + GENODE_TAG_VALUE(KEY_FIND, 136) \ + GENODE_TAG_VALUE(KEY_CUT, 137) \ + GENODE_TAG_VALUE(KEY_HELP, 138) \ + GENODE_TAG_VALUE(KEY_MENU, 139) \ + GENODE_TAG_VALUE(KEY_CALC, 140) \ + GENODE_TAG_VALUE(KEY_SETUP, 141) \ + GENODE_TAG_VALUE(KEY_SLEEP, 142) \ + GENODE_TAG_VALUE(KEY_WAKEUP, 143) \ + GENODE_TAG_VALUE(KEY_FILE, 144) \ + GENODE_TAG_VALUE(KEY_SENDFILE, 145) \ + GENODE_TAG_VALUE(KEY_DELETEFILE, 146) \ + GENODE_TAG_VALUE(KEY_XFER, 147) \ + GENODE_TAG_VALUE(KEY_PROG1, 148) \ + GENODE_TAG_VALUE(KEY_PROG2, 149) \ + GENODE_TAG_VALUE(KEY_WWW, 150) \ + GENODE_TAG_VALUE(KEY_MSDOS, 151) \ + GENODE_TAG_VALUE(KEY_SCREENLOCK, 152) \ + GENODE_TAG_VALUE(KEY_DIRECTION, 153) \ + GENODE_TAG_VALUE(KEY_CYCLEWINDOWS, 154) \ + GENODE_TAG_VALUE(KEY_MAIL, 155) \ + GENODE_TAG_VALUE(KEY_BOOKMARKS, 156) \ + GENODE_TAG_VALUE(KEY_COMPUTER, 157) \ + GENODE_TAG_VALUE(KEY_BACK, 158) \ + GENODE_TAG_VALUE(KEY_FORWARD, 159) \ + GENODE_TAG_VALUE(KEY_CLOSECD, 160) \ + GENODE_TAG_VALUE(KEY_EJECTCD, 161) \ + GENODE_TAG_VALUE(KEY_EJECTCLOSECD, 162) \ + GENODE_TAG_VALUE(KEY_NEXTSONG, 163) \ + GENODE_TAG_VALUE(KEY_PLAYPAUSE, 164) \ + GENODE_TAG_VALUE(KEY_PREVIOUSSONG, 165) \ + GENODE_TAG_VALUE(KEY_STOPCD, 166) \ + GENODE_TAG_VALUE(KEY_RECORD, 167) \ + GENODE_TAG_VALUE(KEY_REWIND, 168) \ + GENODE_TAG_VALUE(KEY_PHONE, 169) \ + GENODE_TAG_VALUE(KEY_ISO, 170) \ + GENODE_TAG_VALUE(KEY_CONFIG, 171) \ + GENODE_TAG_VALUE(KEY_HOMEPAGE, 172) \ + GENODE_TAG_VALUE(KEY_REFRESH, 173) \ + GENODE_TAG_VALUE(KEY_EXIT, 174) \ + GENODE_TAG_VALUE(KEY_MOVE, 175) \ + GENODE_TAG_VALUE(KEY_EDIT, 176) \ + GENODE_TAG_VALUE(KEY_SCROLLUP, 177) \ + GENODE_TAG_VALUE(KEY_SCROLLDOWN, 178) \ + GENODE_TAG_VALUE(KEY_KPLEFTPAREN, 179) \ + GENODE_TAG_VALUE(KEY_KPRIGHTPAREN, 180) \ + GENODE_TAG_VALUE(KEY_NEW, 181) \ + GENODE_TAG_VALUE(KEY_REDO, 182) \ + \ + GENODE_TAG_VALUE(KEY_F13, 183) \ + GENODE_TAG_VALUE(KEY_F14, 184) \ + GENODE_TAG_VALUE(KEY_F15, 185) \ + GENODE_TAG_VALUE(KEY_F16, 186) \ + GENODE_TAG_VALUE(KEY_F17, 187) \ + GENODE_TAG_VALUE(KEY_F18, 188) \ + GENODE_TAG_VALUE(KEY_F19, 189) \ + GENODE_TAG_VALUE(KEY_F20, 190) \ + GENODE_TAG_VALUE(KEY_F21, 191) \ + GENODE_TAG_VALUE(KEY_F22, 192) \ + GENODE_TAG_VALUE(KEY_F23, 193) \ + GENODE_TAG_VALUE(KEY_F24, 194) \ + \ + GENODE_TAG_VALUE(KEY_PLAYCD, 200) \ + GENODE_TAG_VALUE(KEY_PAUSECD, 201) \ + GENODE_TAG_VALUE(KEY_PROG3, 202) \ + GENODE_TAG_VALUE(KEY_PROG4, 203) \ + GENODE_TAG_VALUE(KEY_DASHBOARD, 204) \ + GENODE_TAG_VALUE(KEY_SUSPEND, 205) \ + GENODE_TAG_VALUE(KEY_CLOSE, 206) \ + GENODE_TAG_VALUE(KEY_PLAY, 207) \ + GENODE_TAG_VALUE(KEY_FASTFORWARD, 208) \ + GENODE_TAG_VALUE(KEY_BASSBOOST, 209) \ + GENODE_TAG_VALUE(KEY_PRINT, 210) \ + GENODE_TAG_VALUE(KEY_HP, 211) \ + GENODE_TAG_VALUE(KEY_CAMERA, 212) \ + GENODE_TAG_VALUE(KEY_SOUND, 213) \ + GENODE_TAG_VALUE(KEY_QUESTION, 214) \ + GENODE_TAG_VALUE(KEY_EMAIL, 215) \ + GENODE_TAG_VALUE(KEY_CHAT, 216) \ + GENODE_TAG_VALUE(KEY_SEARCH, 217) \ + GENODE_TAG_VALUE(KEY_CONNECT, 218) \ + GENODE_TAG_VALUE(KEY_FINANCE, 219) \ + GENODE_TAG_VALUE(KEY_SPORT, 220) \ + GENODE_TAG_VALUE(KEY_SHOP, 221) \ + GENODE_TAG_VALUE(KEY_ALTERASE, 222) \ + GENODE_TAG_VALUE(KEY_CANCEL, 223) \ + GENODE_TAG_VALUE(KEY_BRIGHTNESSDOWN, 224) \ + GENODE_TAG_VALUE(KEY_BRIGHTNESSUP, 225) \ + GENODE_TAG_VALUE(KEY_MEDIA, 226) \ + GENODE_TAG_VALUE(KEY_SWITCHVIDEOMODE, 227) \ + GENODE_TAG_VALUE(KEY_KBDILLUMTOGGLE, 228) \ + GENODE_TAG_VALUE(KEY_KBDILLUMDOWN, 229) \ + GENODE_TAG_VALUE(KEY_KBDILLUMUP, 230) \ + GENODE_TAG_VALUE(KEY_SEND, 231) \ + GENODE_TAG_VALUE(KEY_REPLY, 232) \ + GENODE_TAG_VALUE(KEY_FORWARDMAIL, 233) \ + GENODE_TAG_VALUE(KEY_SAVE, 234) \ + GENODE_TAG_VALUE(KEY_DOCUMENTS, 235) \ + GENODE_TAG_VALUE(KEY_BATTERY, 236) \ + GENODE_TAG_VALUE(KEY_BLUETOOTH, 237) \ + GENODE_TAG_VALUE(KEY_WLAN, 238) \ + \ + GENODE_TAG_VALUE(BTN_0, 0x100) \ + GENODE_TAG_VALUE(BTN_1, 0x101) \ + GENODE_TAG_VALUE(BTN_2, 0x102) \ + GENODE_TAG_VALUE(BTN_3, 0x103) \ + GENODE_TAG_VALUE(BTN_4, 0x104) \ + GENODE_TAG_VALUE(BTN_5, 0x105) \ + GENODE_TAG_VALUE(BTN_6, 0x106) \ + GENODE_TAG_VALUE(BTN_7, 0x107) \ + GENODE_TAG_VALUE(BTN_8, 0x108) \ + GENODE_TAG_VALUE(BTN_9, 0x109) \ + \ + GENODE_TAG_VALUE(BTN_LEFT, 0x110) \ + GENODE_TAG_VALUE(BTN_RIGHT, 0x111) \ + GENODE_TAG_VALUE(BTN_MIDDLE, 0x112) \ + GENODE_TAG_VALUE(BTN_SIDE, 0x113) \ + GENODE_TAG_VALUE(BTN_EXTRA, 0x114) \ + GENODE_TAG_VALUE(BTN_FORWARD, 0x115) \ + GENODE_TAG_VALUE(BTN_BACK, 0x116) \ + GENODE_TAG_VALUE(BTN_TASK, 0x117) \ + \ + GENODE_TAG_VALUE(BTN_TRIGGER, 0x120) \ + GENODE_TAG_VALUE(BTN_THUMB, 0x121) \ + GENODE_TAG_VALUE(BTN_THUMB2, 0x122) \ + GENODE_TAG_VALUE(BTN_TOP, 0x123) \ + GENODE_TAG_VALUE(BTN_TOP2, 0x124) \ + GENODE_TAG_VALUE(BTN_PINKIE, 0x125) \ + GENODE_TAG_VALUE(BTN_BASE, 0x126) \ + GENODE_TAG_VALUE(BTN_BASE2, 0x127) \ + GENODE_TAG_VALUE(BTN_BASE3, 0x128) \ + GENODE_TAG_VALUE(BTN_BASE4, 0x129) \ + GENODE_TAG_VALUE(BTN_BASE5, 0x12a) \ + GENODE_TAG_VALUE(BTN_BASE6, 0x12b) \ + GENODE_TAG_VALUE(BTN_DEAD, 0x12f) \ + \ + GENODE_TAG_VALUE(BTN_A, 0x130) \ + GENODE_TAG_VALUE(BTN_B, 0x131) \ + GENODE_TAG_VALUE(BTN_C, 0x132) \ + GENODE_TAG_VALUE(BTN_X, 0x133) \ + GENODE_TAG_VALUE(BTN_Y, 0x134) \ + GENODE_TAG_VALUE(BTN_Z, 0x135) \ + GENODE_TAG_VALUE(BTN_TL, 0x136) \ + GENODE_TAG_VALUE(BTN_TR, 0x137) \ + GENODE_TAG_VALUE(BTN_TL2, 0x138) \ + GENODE_TAG_VALUE(BTN_TR2, 0x139) \ + GENODE_TAG_VALUE(BTN_SELECT, 0x13a) \ + GENODE_TAG_VALUE(BTN_START, 0x13b) \ + GENODE_TAG_VALUE(BTN_MODE, 0x13c) \ + GENODE_TAG_VALUE(BTN_THUMBL, 0x13d) \ + GENODE_TAG_VALUE(BTN_THUMBR, 0x13e) \ + \ + GENODE_TAG_VALUE(BTN_TOOL_PEN, 0x140) \ + GENODE_TAG_VALUE(BTN_TOOL_RUBBER, 0x141) \ + GENODE_TAG_VALUE(BTN_TOOL_BRUSH, 0x142) \ + GENODE_TAG_VALUE(BTN_TOOL_PENCIL, 0x143) \ + GENODE_TAG_VALUE(BTN_TOOL_AIRBRUSH, 0x144) \ + GENODE_TAG_VALUE(BTN_TOOL_FINGER, 0x145) \ + GENODE_TAG_VALUE(BTN_TOOL_MOUSE, 0x146) \ + GENODE_TAG_VALUE(BTN_TOOL_LENS, 0x147) \ + GENODE_TAG_VALUE(BTN_TOUCH, 0x14a) \ + GENODE_TAG_VALUE(BTN_STYLUS, 0x14b) \ + GENODE_TAG_VALUE(BTN_STYLUS2, 0x14c) \ + GENODE_TAG_VALUE(BTN_TOOL_DOUBLETAP, 0x14d) \ + GENODE_TAG_VALUE(BTN_TOOL_TRIPLETAP, 0x14e) \ + \ + GENODE_TAG_VALUE(BTN_GEAR_DOWN, 0x150) \ + GENODE_TAG_VALUE(BTN_GEAR_UP, 0x151) \ + \ + GENODE_TAG_VALUE(KEY_OK, 0x160) \ + GENODE_TAG_VALUE(KEY_SELECT, 0x161) \ + GENODE_TAG_VALUE(KEY_GOTO, 0x162) \ + GENODE_TAG_VALUE(KEY_CLEAR, 0x163) \ + GENODE_TAG_VALUE(KEY_POWER2, 0x164) \ + GENODE_TAG_VALUE(KEY_OPTION, 0x165) \ + GENODE_TAG_VALUE(KEY_INFO, 0x166) \ + GENODE_TAG_VALUE(KEY_TIME, 0x167) \ + GENODE_TAG_VALUE(KEY_VENDOR, 0x168) \ + GENODE_TAG_VALUE(KEY_ARCHIVE, 0x169) \ + GENODE_TAG_VALUE(KEY_PROGRAM, 0x16a) \ + GENODE_TAG_VALUE(KEY_CHANNEL, 0x16b) \ + GENODE_TAG_VALUE(KEY_FAVORITES, 0x16c) \ + GENODE_TAG_VALUE(KEY_EPG, 0x16d) \ + GENODE_TAG_VALUE(KEY_PVR, 0x16e) \ + GENODE_TAG_VALUE(KEY_MHP, 0x16f) \ + GENODE_TAG_VALUE(KEY_LANGUAGE, 0x170) \ + GENODE_TAG_VALUE(KEY_TITLE, 0x171) \ + GENODE_TAG_VALUE(KEY_SUBTITLE, 0x172) \ + GENODE_TAG_VALUE(KEY_ANGLE, 0x173) \ + GENODE_TAG_VALUE(KEY_ZOOM, 0x174) \ + GENODE_TAG_VALUE(KEY_MODE, 0x175) \ + GENODE_TAG_VALUE(KEY_KEYBOARD, 0x176) \ + GENODE_TAG_VALUE(KEY_SCREEN, 0x177) \ + GENODE_TAG_VALUE(KEY_PC, 0x178) \ + GENODE_TAG_VALUE(KEY_TV, 0x179) \ + GENODE_TAG_VALUE(KEY_TV2, 0x17a) \ + GENODE_TAG_VALUE(KEY_VCR, 0x17b) \ + GENODE_TAG_VALUE(KEY_VCR2, 0x17c) \ + GENODE_TAG_VALUE(KEY_SAT, 0x17d) \ + GENODE_TAG_VALUE(KEY_SAT2, 0x17e) \ + GENODE_TAG_VALUE(KEY_CD, 0x17f) \ + GENODE_TAG_VALUE(KEY_TAPE, 0x180) \ + GENODE_TAG_VALUE(KEY_RADIO, 0x181) \ + GENODE_TAG_VALUE(KEY_TUNER, 0x182) \ + GENODE_TAG_VALUE(KEY_PLAYER, 0x183) \ + GENODE_TAG_VALUE(KEY_TEXT, 0x184) \ + GENODE_TAG_VALUE(KEY_DVD, 0x185) \ + GENODE_TAG_VALUE(KEY_AUX, 0x186) \ + GENODE_TAG_VALUE(KEY_MP3, 0x187) \ + GENODE_TAG_VALUE(KEY_AUDIO, 0x188) \ + GENODE_TAG_VALUE(KEY_VIDEO, 0x189) \ + GENODE_TAG_VALUE(KEY_DIRECTORY, 0x18a) \ + GENODE_TAG_VALUE(KEY_LIST, 0x18b) \ + GENODE_TAG_VALUE(KEY_MEMO, 0x18c) \ + GENODE_TAG_VALUE(KEY_CALENDAR, 0x18d) \ + GENODE_TAG_VALUE(KEY_RED, 0x18e) \ + GENODE_TAG_VALUE(KEY_GREEN, 0x18f) \ + GENODE_TAG_VALUE(KEY_YELLOW, 0x190) \ + GENODE_TAG_VALUE(KEY_BLUE, 0x191) \ + GENODE_TAG_VALUE(KEY_CHANNELUP, 0x192) \ + GENODE_TAG_VALUE(KEY_CHANNELDOWN, 0x193) \ + GENODE_TAG_VALUE(KEY_FIRST, 0x194) \ + GENODE_TAG_VALUE(KEY_LAST, 0x195) \ + GENODE_TAG_VALUE(KEY_AB, 0x196) \ + GENODE_TAG_VALUE(KEY_NEXT, 0x197) \ + GENODE_TAG_VALUE(KEY_RESTART, 0x198) \ + GENODE_TAG_VALUE(KEY_SLOW, 0x199) \ + GENODE_TAG_VALUE(KEY_SHUFFLE, 0x19a) \ + GENODE_TAG_VALUE(KEY_BREAK, 0x19b) \ + GENODE_TAG_VALUE(KEY_PREVIOUS, 0x19c) \ + GENODE_TAG_VALUE(KEY_DIGITS, 0x19d) \ + GENODE_TAG_VALUE(KEY_TEEN, 0x19e) \ + GENODE_TAG_VALUE(KEY_TWEN, 0x19f) \ + GENODE_TAG_VALUE(KEY_VIDEOPHONE, 0x1a0) \ + GENODE_TAG_VALUE(KEY_GAMES, 0x1a1) \ + GENODE_TAG_VALUE(KEY_ZOOMIN, 0x1a2) \ + GENODE_TAG_VALUE(KEY_ZOOMOUT, 0x1a3) \ + GENODE_TAG_VALUE(KEY_ZOOMRESET, 0x1a4) \ + GENODE_TAG_VALUE(KEY_WORDPROCESSOR, 0x1a5) \ + GENODE_TAG_VALUE(KEY_EDITOR, 0x1a6) \ + GENODE_TAG_VALUE(KEY_SPREADSHEET, 0x1a7) \ + GENODE_TAG_VALUE(KEY_GRAPHICSEDITOR, 0x1a8) \ + GENODE_TAG_VALUE(KEY_PRESENTATION, 0x1a9) \ + GENODE_TAG_VALUE(KEY_DATABASE, 0x1aa) \ + GENODE_TAG_VALUE(KEY_NEWS, 0x1ab) \ + GENODE_TAG_VALUE(KEY_VOICEMAIL, 0x1ac) \ + GENODE_TAG_VALUE(KEY_ADDRESSBOOK, 0x1ad) \ + GENODE_TAG_VALUE(KEY_MESSENGER, 0x1ae) \ + \ + GENODE_TAG_VALUE(KEY_DEL_EOL, 0x1c0) \ + GENODE_TAG_VALUE(KEY_DEL_EOS, 0x1c1) \ + GENODE_TAG_VALUE(KEY_INS_LINE, 0x1c2) \ + GENODE_TAG_VALUE(KEY_DEL_LINE, 0x1c3) \ + \ + GENODE_TAG_VALUE(KEY_FN, 0x1d0) \ + GENODE_TAG_VALUE(KEY_FN_ESC, 0x1d1) \ + GENODE_TAG_VALUE(KEY_FN_F1, 0x1d2) \ + GENODE_TAG_VALUE(KEY_FN_F2, 0x1d3) \ + GENODE_TAG_VALUE(KEY_FN_F3, 0x1d4) \ + GENODE_TAG_VALUE(KEY_FN_F4, 0x1d5) \ + GENODE_TAG_VALUE(KEY_FN_F5, 0x1d6) \ + GENODE_TAG_VALUE(KEY_FN_F6, 0x1d7) \ + GENODE_TAG_VALUE(KEY_FN_F7, 0x1d8) \ + GENODE_TAG_VALUE(KEY_FN_F8, 0x1d9) \ + GENODE_TAG_VALUE(KEY_FN_F9, 0x1da) \ + GENODE_TAG_VALUE(KEY_FN_F10, 0x1db) \ + GENODE_TAG_VALUE(KEY_FN_F11, 0x1dc) \ + GENODE_TAG_VALUE(KEY_FN_F12, 0x1dd) \ + GENODE_TAG_VALUE(KEY_FN_1, 0x1de) \ + GENODE_TAG_VALUE(KEY_FN_2, 0x1df) \ + GENODE_TAG_VALUE(KEY_FN_D, 0x1e0) \ + GENODE_TAG_VALUE(KEY_FN_E, 0x1e1) \ + GENODE_TAG_VALUE(KEY_FN_F, 0x1e2) \ + GENODE_TAG_VALUE(KEY_FN_S, 0x1e3) \ + GENODE_TAG_VALUE(KEY_FN_B, 0x1e4) \ + \ + GENODE_TAG_VALUE(KEY_BRL_DOT1, 0x1f1) \ + GENODE_TAG_VALUE(KEY_BRL_DOT2, 0x1f2) \ + GENODE_TAG_VALUE(KEY_BRL_DOT3, 0x1f3) \ + GENODE_TAG_VALUE(KEY_BRL_DOT4, 0x1f4) \ + GENODE_TAG_VALUE(KEY_BRL_DOT5, 0x1f5) \ + GENODE_TAG_VALUE(KEY_BRL_DOT6, 0x1f6) \ + GENODE_TAG_VALUE(KEY_BRL_DOT7, 0x1f7) \ + GENODE_TAG_VALUE(KEY_BRL_DOT8, 0x1f8) \ + \ + GENODE_TAG_VALUE(KEY_UNKNOWN, 0x1fe) \ + GENODE_TAG_VALUE(KEY_MAX, 0x1ff) + +enum Keycode { +#define GENODE_TAG_VALUE(tag, value) G_ ## tag = value, + GENODE_INPUT_KEYCODES +#undef GENODE_TAG_VALUE +}; + + + +unsigned lx_emul_event_keycode(unsigned linux_keycode) +{ + switch (linux_keycode) { +#define GENODE_TAG_VALUE(tag, value) case tag: return G_ ## tag; + GENODE_INPUT_KEYCODES +#undef GENODE_TAG_VALUE + + default: + Genode::warning("unknown keycode ", linux_keycode); + } + + return G_KEY_UNKNOWN; +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/drivers/input/evdev.c b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/input/evdev.c new file mode 100644 index 0000000000..0c479234da --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/input/evdev.c @@ -0,0 +1,209 @@ +/* + * \brief Linux emulation environment: input event sink + * \author Christian Helmuth + * \date 2022-06-23 + * + * This implementation is derived from drivers/input/evbug.c and + * drivers/input/evdev.c. + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + + +struct evdev +{ + struct genode_event *event; + struct input_handle handle; +}; + + +static void submit_rel_motion(struct genode_event_submit *submit, + unsigned code, int value) +{ + switch (code) { + case REL_X: submit->rel_motion(submit, value, 0); break; + case REL_Y: submit->rel_motion(submit, 0, value); break; + + default: + printk("Unsupported relative motion event code=%d dropped\n", code); + } +} + + +static void submit_key(struct genode_event_submit *submit, + unsigned code, bool press) +{ + /* map BTN_TOUCH to BTN_LEFT */ + if (code == BTN_TOUCH) code = BTN_LEFT; + + if (press) + submit->press(submit, lx_emul_event_keycode(code)); + else + submit->release(submit, lx_emul_event_keycode(code)); +} + + +struct genode_event_generator_ctx +{ + struct evdev *evdev; + struct input_value const *values; + unsigned count; +}; + + +static void evdev_event_generator(struct genode_event_generator_ctx *ctx, + struct genode_event_submit *submit) +{ + int i; + for (i = 0; i < ctx->count; i++) { + unsigned const type = ctx->values[i].type; + unsigned const code = ctx->values[i].code; + unsigned const value = ctx->values[i].value; + + /* filter input_repeat_key() */ + if ((type == EV_KEY) && (value > 1)) continue; + + /* filter EV_SYN and EV_MSC */ + if (type == EV_SYN || type == EV_MSC) continue; + + switch (type) { + case EV_KEY: submit_key(submit, code, value); break; + case EV_REL: submit_rel_motion(submit, code, value); break; + + default: + printk("Unsupported Event[%u/%u] device=%s, type=%d, code=%d, value=%d dropped\n", + i + 1, ctx->count, dev_name(&ctx->evdev->handle.dev->dev), type, code, value); + continue; + } + } +} + + +static void evdev_events(struct input_handle *handle, + struct input_value const *values, unsigned int count) +{ + struct evdev *evdev = handle->private; + + struct genode_event_generator_ctx ctx = { + .evdev = evdev, .values = values, .count = count }; + + genode_event_generate(evdev->event, &evdev_event_generator, &ctx); +} + + +static void evdev_event(struct input_handle *handle, + unsigned int type, unsigned int code, int value) +{ + struct input_value vals[] = { { type, code, value } }; + + evdev_events(handle, vals, 1); +} + + +static int evdev_connect(struct input_handler *handler, struct input_dev *dev, + const struct input_device_id *id) +{ + struct evdev *evdev; + int error; + struct genode_event_args args = { .label = dev->name }; + + evdev = kzalloc(sizeof(*evdev), GFP_KERNEL); + if (!evdev) + return -ENOMEM; + + evdev->event = genode_event_create(&args); + + evdev->handle.private = evdev; + evdev->handle.dev = dev; + evdev->handle.handler = handler; + evdev->handle.name = dev->name; + + error = input_register_handle(&evdev->handle); + if (error) + goto err_free_handle; + + error = input_open_device(&evdev->handle); + if (error) + goto err_unregister_handle; + + printk("Connected device: %s (%s at %s)\n", + dev_name(&dev->dev), + dev->name ?: "unknown", + dev->phys ?: "unknown"); + + return 0; + +err_unregister_handle: + input_unregister_handle(&evdev->handle); + +err_free_handle: + genode_event_destroy(evdev->event); + kfree(evdev); + return error; +} + + +static void evdev_disconnect(struct input_handle *handle) +{ + struct evdev *evdev = handle->private; + + printk("Disconnected device: %s\n", dev_name(&handle->dev->dev)); + + input_close_device(handle); + input_unregister_handle(handle); + genode_event_destroy(evdev->event); + kfree(evdev); +} + + +static const struct input_device_id evdev_ids[] = { + { .driver_info = 1 }, /* Matches all devices */ + { }, /* Terminating zero entry */ +}; + + +MODULE_DEVICE_TABLE(input, evdev_ids); + +static struct input_handler evdev_handler = { + .event = evdev_event, + .events = evdev_events, + .connect = evdev_connect, + .disconnect = evdev_disconnect, + .name = "evdev", + .id_table = evdev_ids, +}; + + +static int __init evdev_init(void) +{ + return input_register_handler(&evdev_handler); +} + + +static void __exit evdev_exit(void) +{ + input_unregister_handler(&evdev_handler); +} + + +/** + * Let's hook into the evdev initcall, so we do not need to register + * an additional one + */ +module_init(evdev_init); +module_exit(evdev_exit); From 9a47f7bf7188d87afb46fddbac819436c1783ec2 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 29 Jun 2022 16:57:23 +0200 Subject: [PATCH 073/354] sandbox: prevent non-empty list model on destruction The parent-provides model is destroyed if no node is found in the configuration, which resulted in Warning: list model not empty at destruction time and leaking memory for the allocated nodes. The commit now explicitly empties the list model in the destructor of ~Parent_provides_model. Note, the case is implicitly tested in pkg/test-init by step "denial of forwarded session request" and . Thanks to Peter for reporting this issue. Fixes #4547 --- repos/os/recipes/pkg/test-init/runtime | 1 + repos/os/src/lib/sandbox/config_model.h | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/repos/os/recipes/pkg/test-init/runtime b/repos/os/recipes/pkg/test-init/runtime index 3bf01e2601..74fd529b5d 100644 --- a/repos/os/recipes/pkg/test-init/runtime +++ b/repos/os/recipes/pkg/test-init/runtime @@ -5,6 +5,7 @@ child "test-init" exited with exit value 0 + list model not empty at destruction time diff --git a/repos/os/src/lib/sandbox/config_model.h b/repos/os/src/lib/sandbox/config_model.h index 30d14a7430..5a007970fe 100644 --- a/repos/os/src/lib/sandbox/config_model.h +++ b/repos/os/src/lib/sandbox/config_model.h @@ -73,6 +73,11 @@ struct Sandbox::Parent_provides_model : Noncopyable _alloc(alloc), _verbose(verbose), _factory(factory) { } + ~Parent_provides_model() + { + update_from_xml(Xml_node("")); + } + void update_from_xml(Xml_node const &xml) { bool first_log = true; From a9b4be3883721df368ed1ee28632970da3ab9b4b Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 1 Jun 2022 17:50:34 +0200 Subject: [PATCH 074/354] menu_view: make menu_view_styles.tar more obvious This patch replaces the former implicit "phonyness" of the rule by an explicit .PHONY and installs a symlink from the target's build directory to bin/ as is the usual practice for regular targets. Related to issue #3972 --- repos/gems/src/app/menu_view/target.mk | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/repos/gems/src/app/menu_view/target.mk b/repos/gems/src/app/menu_view/target.mk index 7deabdadfd..e9c1be2d79 100644 --- a/repos/gems/src/app/menu_view/target.mk +++ b/repos/gems/src/app/menu_view/target.mk @@ -7,5 +7,9 @@ CUSTOM_TARGET_DEPS += menu_view_styles.tar BUILD_ARTIFACTS := $(TARGET) menu_view_styles.tar +.PHONY: menu_view_styles.tar + menu_view_styles.tar: - $(VERBOSE)cd $(PRG_DIR); tar cf $(PWD)/bin/$@ styles + $(MSG_CONVERT)$@ + $(VERBOSE)tar cf $@ -C $(PRG_DIR) styles + $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/$(PRG_REL_DIR)/$@ $(INSTALL_DIR)/$@ From b4ded050e1d50befe3f0c474c6f9806694d41110 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 13 Jun 2022 11:10:08 +0200 Subject: [PATCH 075/354] sculpt: hook for modem-driver integration This patch the interplay between the leitzentrale subsystem and a modem driver hosted in the drivers subsystem. --- repos/gems/run/sculpt.run | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index f73c3bd108..ac575b1b43 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -387,6 +387,8 @@ install_config { + + From 202bb707ceee5ad909e6837d927dcc9da881ec42 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 13 Jun 2022 11:11:58 +0200 Subject: [PATCH 076/354] menu_view: ignore zero-sized widgets in box layout The box layout evenly distributes the child widgets according to the number of children. This is not desired in the special case where a child widget has a size of zero. The patch changes the layout algorithm such that zero-sized widgets are not taken into account for distributing residual space. --- repos/gems/src/app/menu_view/box_layout_widget.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/repos/gems/src/app/menu_view/box_layout_widget.h b/repos/gems/src/app/menu_view/box_layout_widget.h index 7af362885b..51e22e3d17 100644 --- a/repos/gems/src/app/menu_view/box_layout_widget.h +++ b/repos/gems/src/app/menu_view/box_layout_widget.h @@ -56,6 +56,10 @@ struct Menu_view::Box_layout_widget : Widget w.position(position); + /* don't account space for zero-sized child widgets */ + if (child_min_size.count() == 0) + return; + if (_direction == VERTICAL) { unsigned const next_top_margin = w.next() ? w.next()->margin.top : 0; unsigned const dy = child_min_size.h() - min(w.margin.bottom, next_top_margin); @@ -65,6 +69,7 @@ struct Menu_view::Box_layout_widget : Widget unsigned const dx = child_min_size.w() - min(w.margin.right, next_left_margin); position = position + Point(dx, 0); } + _count++; }); @@ -99,7 +104,10 @@ struct Menu_view::Box_layout_widget : Widget w.position(w.geometry().p1() + Point(consumed_fp >> 8, 0)); w.size(Area(w.min_size().w() + padding_pixels, geometry().h())); } - consumed_fp = next_consumed_fp; + + /* don't account space for zero-sized child widgets */ + if (w.min_size().count()) + consumed_fp = next_consumed_fp; }); } From d27c504261e18a97aa313c22af262927275d261a Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 22 Jun 2022 15:06:03 +0200 Subject: [PATCH 077/354] menu_view: increase local font cache to 1 MiB This allows the use of font sizes up to 50 px without constant cache misses. --- repos/gems/src/app/menu_view/style_database.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/gems/src/app/menu_view/style_database.h b/repos/gems/src/app/menu_view/style_database.h index 08a527e170..640d2d3165 100644 --- a/repos/gems/src/app/menu_view/style_database.h +++ b/repos/gems/src/app/menu_view/style_database.h @@ -126,7 +126,7 @@ class Menu_view::Style_database Style_database const &_style_database; - Cached_font::Limit _font_cache_limit { 256*1024 }; + Cached_font::Limit _font_cache_limit { 1024*1024 }; Vfs_font _vfs_font; Cached_font _cached_font; From a23f6209aefae9236eef4f9932fe1bcd4ed35d52 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 17 Jun 2022 15:14:25 +0200 Subject: [PATCH 078/354] lx_emul: stop ticking in idle task Fixes #4540 --- repos/dde_linux/src/include/lx_emul/task.h | 2 ++ repos/dde_linux/src/include/lx_kit/scheduler.h | 2 ++ .../src/lib/lx_emul/shadow/kernel/sched/core.c | 1 + .../src/lib/lx_emul/shadow/kernel/softirq.c | 1 + .../src/lib/lx_emul/spec/arm/irqchip.c | 4 ++++ .../src/lib/lx_emul/spec/x86/irqchip.c | 4 ++++ repos/dde_linux/src/lib/lx_emul/start.c | 8 ++++++++ repos/dde_linux/src/lib/lx_emul/task.cc | 8 ++++++++ repos/dde_linux/src/lib/lx_kit/scheduler.cc | 17 +++++++++++++++++ 9 files changed, 47 insertions(+) diff --git a/repos/dde_linux/src/include/lx_emul/task.h b/repos/dde_linux/src/include/lx_emul/task.h index 6cc629e857..487c8eed39 100644 --- a/repos/dde_linux/src/include/lx_emul/task.h +++ b/repos/dde_linux/src/include/lx_emul/task.h @@ -44,6 +44,8 @@ void lx_emul_task_name(struct task_struct * task, const char * name); void *lx_emul_task_stack(struct task_struct const * task); +char lx_emul_task_another_runnable(void); + #ifdef __cplusplus } #endif diff --git a/repos/dde_linux/src/include/lx_kit/scheduler.h b/repos/dde_linux/src/include/lx_kit/scheduler.h index a80aa580d4..26e9b0c4ac 100644 --- a/repos/dde_linux/src/include/lx_kit/scheduler.h +++ b/repos/dde_linux/src/include/lx_kit/scheduler.h @@ -45,6 +45,8 @@ class Lx_kit::Scheduler void unblock_irq_handler(); void unblock_time_handler(); + bool another_runnable(Task *); + Task & task(void * t); template diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c index 988268294d..5f81b1feba 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c @@ -64,6 +64,7 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) lx_emul_task_unblock(p); p->__state = TASK_RUNNING; + return 1; } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c index ba80a41d1c..542f1a8110 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c @@ -13,6 +13,7 @@ #include #include +#include #define CREATE_TRACE_POINTS #include diff --git a/repos/dde_linux/src/lib/lx_emul/spec/arm/irqchip.c b/repos/dde_linux/src/lib/lx_emul/spec/arm/irqchip.c index 9e5cb9f24d..862790614c 100644 --- a/repos/dde_linux/src/lib/lx_emul/spec/arm/irqchip.c +++ b/repos/dde_linux/src/lib/lx_emul/spec/arm/irqchip.c @@ -17,6 +17,7 @@ #include #include #include +#include #include <../kernel/irq/internals.h> static int dde_irq_set_wake(struct irq_data *d, unsigned int on) @@ -174,6 +175,9 @@ int lx_emul_irq_task_function(void * data) if (!dde_irq_domain) continue; + /* check restarting ticking which may stopped in idle task */ + tick_nohz_idle_restart_tick(); + irq_enter(); irq = irq_find_mapping(dde_irq_domain, lx_emul_irq_last()); diff --git a/repos/dde_linux/src/lib/lx_emul/spec/x86/irqchip.c b/repos/dde_linux/src/lib/lx_emul/spec/x86/irqchip.c index fd3cb9e570..707317e849 100644 --- a/repos/dde_linux/src/lib/lx_emul/spec/x86/irqchip.c +++ b/repos/dde_linux/src/lib/lx_emul/spec/x86/irqchip.c @@ -15,6 +15,7 @@ #include #include #include +#include #include <../kernel/irq/internals.h> @@ -46,6 +47,9 @@ int lx_emul_irq_task_function(void * data) for (;;) { lx_emul_task_schedule(true); + /* check restarting ticking which may stopped in idle task */ + tick_nohz_idle_restart_tick(); + irq_enter(); irq = lx_emul_irq_last(); diff --git a/repos/dde_linux/src/lib/lx_emul/start.c b/repos/dde_linux/src/lib/lx_emul/start.c index ec9469edca..ebad304827 100644 --- a/repos/dde_linux/src/lib/lx_emul/start.c +++ b/repos/dde_linux/src/lib/lx_emul/start.c @@ -73,8 +73,16 @@ static void timer_loop(void) { for (;;) { tick_nohz_idle_enter(); + + if (!lx_emul_task_another_runnable()) + tick_nohz_idle_stop_tick(); + lx_emul_task_schedule(true); lx_emul_time_handle(); + + /* check restarting ticking */ + tick_nohz_idle_restart_tick(); + tick_nohz_idle_exit(); } } diff --git a/repos/dde_linux/src/lib/lx_emul/task.cc b/repos/dde_linux/src/lib/lx_emul/task.cc index 350d121a27..04ba17b4fb 100644 --- a/repos/dde_linux/src/lib/lx_emul/task.cc +++ b/repos/dde_linux/src/lib/lx_emul/task.cc @@ -100,3 +100,11 @@ extern "C" void * lx_emul_task_stack(struct task_struct const * t) return ret; } + + +extern "C" char lx_emul_task_another_runnable() +{ + Lx_kit::Task & task = Lx_kit::env().scheduler.current(); + + return Lx_kit::env().scheduler.another_runnable(&task); +} diff --git a/repos/dde_linux/src/lib/lx_kit/scheduler.cc b/repos/dde_linux/src/lib/lx_kit/scheduler.cc index d6182b3ba9..e0ec62e8b5 100644 --- a/repos/dde_linux/src/lib/lx_kit/scheduler.cc +++ b/repos/dde_linux/src/lib/lx_kit/scheduler.cc @@ -127,3 +127,20 @@ void Scheduler::schedule() /* clear current as no task is running */ _current = nullptr; } + + +bool Scheduler::another_runnable(Task * skip) +{ + for (Task * t = _present_list.first(); t; t = t->next()) { + + if (!t->runnable()) + continue; + + if (skip && t == skip) + continue; + + return true; + }; + + return false; +} From 757fdba9fd578d7765dce1c63c862afc4bbf3739 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 28 Jun 2022 10:18:50 +0200 Subject: [PATCH 079/354] dde_linux: set max timeout for rcu_needs_cpu Adhere to include/linux/rcutiny.h behaviour, which sets the max timeout for rcu_needs_cpu. Without the commit, in the most cases the timeout value is zero (or random since the pointer is on stack uninitialized), which leads to programming very short timeouts again and again, making the system never idle. Issue #4540 --- repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c index 007b7c3e9e..34728a0dc2 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c @@ -12,6 +12,7 @@ */ #include +#include /* KTIME_MAX */ extern void __rcu_read_lock(void); void __rcu_read_lock(void) { } @@ -22,5 +23,7 @@ void __rcu_read_unlock(void) { } int rcu_needs_cpu(u64 basemono, u64 *nextevt) { + if (nextevt) + *nextevt = KTIME_MAX; return 0; } From b6cfb5a8fefe141f0d630fbc44b54da992d5dd97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Mon, 20 Jun 2022 17:48:55 +0200 Subject: [PATCH 080/354] gpu_session: add PPGTT address query function Using the 'query_buffer_ppgtt()' function allows for retrieving the virtual address of the buffer in the PPGTT. This is for components that manage the GPU virtual addresses rather than the client as is the case with the lima driver. Issue #4559. --- repos/os/include/gpu_session/client.h | 3 +++ repos/os/include/gpu_session/gpu_session.h | 12 ++++++++++-- repos/os/src/drivers/gpu/intel/main.cc | 17 +++++++++++++++++ repos/os/src/server/black_hole/gpu.h | 5 +++++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/repos/os/include/gpu_session/client.h b/repos/os/include/gpu_session/client.h index f98d6bda2b..24491bdefa 100644 --- a/repos/os/include/gpu_session/client.h +++ b/repos/os/include/gpu_session/client.h @@ -76,6 +76,9 @@ class Gpu::Session_client : public Genode::Rpc_client void unmap_buffer_ppgtt(Buffer_id id, Gpu::addr_t va) override { call(id, va); } + Gpu::addr_t query_buffer_ppgtt(Gpu::Buffer_id id) override { + return call(id); } + bool set_tiling(Buffer_id id, unsigned mode) override { return call(id, mode); } }; diff --git a/repos/os/include/gpu_session/gpu_session.h b/repos/os/include/gpu_session/gpu_session.h index bb2547a828..6fcc1f9b9d 100644 --- a/repos/os/include/gpu_session/gpu_session.h +++ b/repos/os/include/gpu_session/gpu_session.h @@ -197,7 +197,14 @@ struct Gpu::Session : public Genode::Session * * \param id buffer id */ - virtual void unmap_buffer_ppgtt(Buffer_id id, Gpu::addr_t) = 0; + virtual void unmap_buffer_ppgtt(Buffer_id id, Gpu::addr_t va) = 0; + + /** + * Get virtual address of buffer in the PPGTT + * + * \param id buffer id to be associated with the buffer + */ + virtual Gpu::addr_t query_buffer_ppgtt(Buffer_id) = 0; /** * Set tiling for buffer @@ -237,6 +244,7 @@ struct Gpu::Session : public Genode::Session Gpu::Buffer_id, Gpu::addr_t); GENODE_RPC(Rpc_unmap_buffer_ppgtt, void, unmap_buffer_ppgtt, Gpu::Buffer_id, Gpu::addr_t); + GENODE_RPC(Rpc_query_buffer_ppgtt, Gpu::addr_t, query_buffer_ppgtt, Gpu::Buffer_id); GENODE_RPC(Rpc_set_tiling, bool, set_tiling, Gpu::Buffer_id, unsigned); @@ -244,7 +252,7 @@ struct Gpu::Session : public Genode::Session Rpc_complete, Rpc_completion_sigh, Rpc_alloc_buffer, Rpc_free_buffer, Rpc_export_buffer, Rpc_import_buffer, Rpc_map_buffer, Rpc_unmap_buffer, - Rpc_map_buffer_ppgtt, Rpc_unmap_buffer_ppgtt, + Rpc_map_buffer_ppgtt, Rpc_unmap_buffer_ppgtt, Rpc_query_buffer_ppgtt, Rpc_set_tiling); }; diff --git a/repos/os/src/drivers/gpu/intel/main.cc b/repos/os/src/drivers/gpu/intel/main.cc index 3a56b1cb7e..51ffb00c29 100644 --- a/repos/os/src/drivers/gpu/intel/main.cc +++ b/repos/os/src/drivers/gpu/intel/main.cc @@ -2016,6 +2016,23 @@ class Gpu::Session_component : public Genode::Session_object _apply_buffer_local(id, lookup_and_unmap); } + Gpu::addr_t query_buffer_ppgtt(Gpu::Buffer_id id) override + { + Gpu::addr_t result = (Gpu::addr_t)-1; + + auto lookup_va = [&] (Buffer_local &buffer_local) { + + if (!buffer_local.ppgtt_va_valid) { + Genode::error("buffer not mapped"); + return; + } + + result = buffer_local.ppgtt_va; + }; + _apply_buffer_local(id, lookup_va); + return result; + } + bool set_tiling(Gpu::Buffer_id id, Genode::uint32_t const mode) override { diff --git a/repos/os/src/server/black_hole/gpu.h b/repos/os/src/server/black_hole/gpu.h index cb8c0dff37..7a624c201a 100644 --- a/repos/os/src/server/black_hole/gpu.h +++ b/repos/os/src/server/black_hole/gpu.h @@ -113,6 +113,11 @@ class Black_hole::Gpu_session : public Session_object Gpu::addr_t /* va */) override { } + Gpu::addr_t query_buffer_ppgtt(Buffer_id /* id */) override + { + return (Gpu::addr_t)-1; + } + bool set_tiling(Buffer_id /* id */, uint32_t const /* mode */) override { From 9183870b9ea31390e952e0628dc9ee64ab2e630a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Tue, 14 Jun 2022 14:42:12 +0200 Subject: [PATCH 081/354] gpu: add information for lima driver Issue #4559. --- repos/os/include/gpu/info_lima.h | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 repos/os/include/gpu/info_lima.h diff --git a/repos/os/include/gpu/info_lima.h b/repos/os/include/gpu/info_lima.h new file mode 100644 index 0000000000..1906f2f4e5 --- /dev/null +++ b/repos/os/include/gpu/info_lima.h @@ -0,0 +1,43 @@ +/* + * \brief Gpu Information Lima + * \author Josef Soentgen + * \date 2022-06-14 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _INCLUDE__GPU_INFO_LIMA_H_ +#define _INCLUDE__GPU_INFO_LIMA_H_ + +#include +#include +#include + +namespace Gpu { + + struct Info_lima; +} /* namespace Gpu */ + + +/* + * Gpu information + * + * Used to query information in the DRM backend + */ +struct Gpu::Info_lima +{ + /* + * Size the array based on the list of params in + * lima_drm.h that allow for 1:1 access. + */ + enum { MAX_LIMA_PARAMS = 4, }; + using Param = Genode::uint64_t; + Param param[MAX_LIMA_PARAMS] { }; +}; + +#endif /* _INCLUDE__GPU_INFO_LIMA_H_ */ From f859cd11bd8b02bdfc17db69deefe0bf14add610 Mon Sep 17 00:00:00 2001 From: Peter Krummenacher Date: Thu, 14 Jul 2022 11:38:11 +0200 Subject: [PATCH 082/354] rom_filter: support sub nodes outside of Fixes #4560 --- repos/os/src/server/rom_filter/README | 4 ++++ repos/os/src/server/rom_filter/main.cc | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/repos/os/src/server/rom_filter/README b/repos/os/src/server/rom_filter/README index cfb64aee3e..c81d52e6b3 100644 --- a/repos/os/src/server/rom_filter/README +++ b/repos/os/src/server/rom_filter/README @@ -48,6 +48,10 @@ The '' node can contain the following sub nodes: has an 'input' attribute, the content of the specified input is taken as attribute value. +:'': + Adds a sub node with the specified 'type'. The content of is evaluated + to generate the content of the added sub node. + Conditions ---------- diff --git a/repos/os/src/server/rom_filter/main.cc b/repos/os/src/server/rom_filter/main.cc index c0cfdad1ef..922136b04e 100644 --- a/repos/os/src/server/rom_filter/main.cc +++ b/repos/os/src/server/rom_filter/main.cc @@ -321,6 +321,12 @@ void Rom_filter::Main::_evaluate_node(Xml_node node, Xml_generator &xml) } } else + if (node.has_type("node")) { + xml.node(node.attribute_value("type", Genode::String<128>()).string(), [&]() { + _evaluate_node(node, xml); + }); + } else + if (node.has_type("inline")) { node.with_raw_content([&] (char const *src, size_t len) { From 01d7c07920cc2bda22a7c92e721746b2bdc3da4d Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 14 Jul 2022 10:58:27 +0200 Subject: [PATCH 083/354] pc/linux: add contrib patches - intel_fb: avoid pagefault in fliphandler - usb_host: avoid hang of usb xhci hardware Fixes #4556 --- repos/dde_linux/patches/i915_irq.patch | 14 ++++ repos/dde_linux/patches/xhci_abort_ring.patch | 71 +++++++++++++++++++ repos/dde_linux/ports/linux.hash | 2 +- repos/dde_linux/ports/linux.port | 10 +++ 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 repos/dde_linux/patches/i915_irq.patch create mode 100644 repos/dde_linux/patches/xhci_abort_ring.patch diff --git a/repos/dde_linux/patches/i915_irq.patch b/repos/dde_linux/patches/i915_irq.patch new file mode 100644 index 0000000000..1af100c505 --- /dev/null +++ b/repos/dde_linux/patches/i915_irq.patch @@ -0,0 +1,14 @@ +diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c +index c3816f5..c692ddb 100644 +--- a/drivers/gpu/drm/i915/i915_irq.c ++++ b/drivers/gpu/drm/i915/i915_irq.c +@@ -1337,7 +1337,8 @@ static void flip_done_handler(struct drm_i915_private *i915, + + crtc_state->event = NULL; + +- drm_crtc_send_vblank_event(&crtc->base, e); ++ if (e) ++ drm_crtc_send_vblank_event(&crtc->base, e); + + spin_unlock_irqrestore(&dev->event_lock, irqflags); + } diff --git a/repos/dde_linux/patches/xhci_abort_ring.patch b/repos/dde_linux/patches/xhci_abort_ring.patch new file mode 100644 index 0000000000..fed3aa230a --- /dev/null +++ b/repos/dde_linux/patches/xhci_abort_ring.patch @@ -0,0 +1,71 @@ +From 09f736aa95476631227d2dc0e6b9aeee1ad7ed58 Mon Sep 17 00:00:00 2001 +From: Mathias Nyman +Date: Fri, 26 Nov 2021 14:23:40 +0200 +Subject: xhci: Fix commad ring abort, write all 64 bits to CRCR register. + +Turns out some xHC controllers require all 64 bits in the CRCR register +to be written to execute a command abort. + +The lower 32 bits containing the command abort bit is written first. +In case the command ring stops before we write the upper 32 bits then +hardware may use these upper bits to set the commnd ring dequeue pointer. + +Solve this by making sure the upper 32 bits contain a valid command +ring dequeue pointer. + +The original patch that only wrote the first 32 to stop the ring went +to stable, so this fix should go there as well. + +Fixes: ff0e50d3564f ("xhci: Fix command ring pointer corruption while aborting a command") +Cc: stable@vger.kernel.org +Tested-by: Pavankumar Kondeti +Signed-off-by: Mathias Nyman +Link: https://lore.kernel.org/r/20211126122340.1193239-2-mathias.nyman@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-ring.c | 21 ++++++++++++++------- + 1 file changed, 14 insertions(+), 7 deletions(-) + +diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c +index 311597bba80e2..eaa49aef29352 100644 +--- a/drivers/usb/host/xhci-ring.c ++++ b/drivers/usb/host/xhci-ring.c +@@ -366,7 +366,9 @@ static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci, + /* Must be called with xhci->lock held, releases and aquires lock back */ + static int xhci_abort_cmd_ring(struct xhci_hcd *xhci, unsigned long flags) + { +- u32 temp_32; ++ struct xhci_segment *new_seg = xhci->cmd_ring->deq_seg; ++ union xhci_trb *new_deq = xhci->cmd_ring->dequeue; ++ u64 crcr; + int ret; + + xhci_dbg(xhci, "Abort command ring\n"); +@@ -375,13 +377,18 @@ static int xhci_abort_cmd_ring(struct xhci_hcd *xhci, unsigned long flags) + + /* + * The control bits like command stop, abort are located in lower +- * dword of the command ring control register. Limit the write +- * to the lower dword to avoid corrupting the command ring pointer +- * in case if the command ring is stopped by the time upper dword +- * is written. ++ * dword of the command ring control register. ++ * Some controllers require all 64 bits to be written to abort the ring. ++ * Make sure the upper dword is valid, pointing to the next command, ++ * avoiding corrupting the command ring pointer in case the command ring ++ * is stopped by the time the upper dword is written. + */ +- temp_32 = readl(&xhci->op_regs->cmd_ring); +- writel(temp_32 | CMD_RING_ABORT, &xhci->op_regs->cmd_ring); ++ next_trb(xhci, NULL, &new_seg, &new_deq); ++ if (trb_is_link(new_deq)) ++ next_trb(xhci, NULL, &new_seg, &new_deq); ++ ++ crcr = xhci_trb_virt_to_dma(new_seg, new_deq); ++ xhci_write_64(xhci, crcr | CMD_RING_ABORT, &xhci->op_regs->cmd_ring); + + /* Section 4.6.1.2 of xHCI 1.0 spec says software should also time the + * completion of the Command Abort operation. If CRR is not negated in 5 +-- +cgit + diff --git a/repos/dde_linux/ports/linux.hash b/repos/dde_linux/ports/linux.hash index 7ffa8ee4df..68028b4d6c 100644 --- a/repos/dde_linux/ports/linux.hash +++ b/repos/dde_linux/ports/linux.hash @@ -1 +1 @@ -b00fd4b8dc40ca35d3a9f8f27bfd7ec8c671bd4b +7dfb92febaf5942b4b84612dcca182eddb088a00 diff --git a/repos/dde_linux/ports/linux.port b/repos/dde_linux/ports/linux.port index a3164611a6..e6cca8823c 100644 --- a/repos/dde_linux/ports/linux.port +++ b/repos/dde_linux/ports/linux.port @@ -5,3 +5,13 @@ DOWNLOADS := linux.archive URL(linux) := https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-$(VERSION).tar.xz SHA(linux) := f41a259cb2002dd2e3286524b2bb4e803f4f982992d092706ecea613584023b3 DIR(linux) := src/linux + +# +# Patches +# +PATCHES += $(addprefix patches/,$(notdir $(REP_DIR)/patches/i915_irq.patch)) +PATCHES += $(addprefix patches/,$(notdir $(REP_DIR)/patches/xhci_abort_ring.patch)) + +# i915 +PATCH_OPT(patches/i915_irq.patch) := -p1 -d${DIR(linux)} +PATCH_OPT(patches/xhci_abort_ring.patch) := -p1 -d${DIR(linux)} From 7d2f0196813bd6ea046a2fd6a8623baee3f58db0 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 15 Jul 2022 11:09:45 +0200 Subject: [PATCH 084/354] libc: output warning if RTC is not present genodelabs/genode#4561 --- repos/libports/src/lib/libc/time.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/repos/libports/src/lib/libc/time.cc b/repos/libports/src/lib/libc/time.cc index 0ec663caa4..a6168111ff 100644 --- a/repos/libports/src/lib/libc/time.cc +++ b/repos/libports/src/lib/libc/time.cc @@ -78,8 +78,10 @@ int clock_gettime(clockid_t clk_id, struct timespec *ts) if (!_current_real_time_ptr) throw Missing_call_of_init_time(); - if (!_current_real_time_ptr->has_real_time()) + if (!_current_real_time_ptr->has_real_time()) { + warning("clock_gettime(): missing real-time clock"); return Errno(EINVAL); + } *ts = _current_real_time_ptr->current_real_time(); break; From ea8df22dbb95c46d78e871647b236692b307be3f Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 24 May 2022 11:47:20 +0200 Subject: [PATCH 085/354] dde_linux: fully enable printk format specifiers The new Lx_kit::Console::print_string() method skips leading log-level markers in strings if detected. Issue #4542 --- repos/dde_linux/src/include/lx_emul/log.h | 2 ++ repos/dde_linux/src/include/lx_kit/console.h | 2 ++ repos/dde_linux/src/lib/lx_emul/log.cc | 4 ++++ .../lib/lx_emul/shadow/kernel/printk/printk.c | 15 ++++++++++++--- repos/dde_linux/src/lib/lx_kit/console.cc | 16 ++++++++++++++++ 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/repos/dde_linux/src/include/lx_emul/log.h b/repos/dde_linux/src/include/lx_emul/log.h index 70bb6b3e10..5dad8dc4de 100644 --- a/repos/dde_linux/src/include/lx_emul/log.h +++ b/repos/dde_linux/src/include/lx_emul/log.h @@ -1,6 +1,7 @@ /* * \brief Lx_emul support to log messages from the kernel code * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-24 */ @@ -19,6 +20,7 @@ extern "C" { #endif void lx_emul_vprintf(char const *, va_list); +void lx_emul_print_string(char const *); #ifdef __cplusplus } diff --git a/repos/dde_linux/src/include/lx_kit/console.h b/repos/dde_linux/src/include/lx_kit/console.h index f2307bf378..67b3b5588e 100644 --- a/repos/dde_linux/src/include/lx_kit/console.h +++ b/repos/dde_linux/src/include/lx_kit/console.h @@ -2,6 +2,7 @@ * \brief Lx_kit format string backend * \author Stefan Kalkowski * \author Sebastian Sumpf + * \author Christian Helmuth * \date 2021-03-17 * * Greatly inspired by the former DDE Linux Lx_kit implementation. @@ -127,6 +128,7 @@ class Lx_kit::Console public: void vprintf(const char *format, va_list list); + void print_string(const char *str); }; #endif /* _LX_KIT__CONSOLE_H_ */ diff --git a/repos/dde_linux/src/lib/lx_emul/log.cc b/repos/dde_linux/src/lib/lx_emul/log.cc index 828562ca4b..bb955949b3 100644 --- a/repos/dde_linux/src/lib/lx_emul/log.cc +++ b/repos/dde_linux/src/lib/lx_emul/log.cc @@ -1,6 +1,7 @@ /* * \brief Linux Kernel log messages * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-22 */ @@ -16,3 +17,6 @@ extern "C" void lx_emul_vprintf(char const *fmt, va_list va) { Lx_kit::env().console.vprintf(fmt, va); } + +extern "C" void lx_emul_print_string(char const *str) { + Lx_kit::env().console.print_string(str); } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c index da46ec4ad3..6ee2824305 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c @@ -1,6 +1,7 @@ /* * \brief Replaces kernel/printk/printk.c * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-16 */ @@ -12,22 +13,29 @@ */ #include +#include #include #include + +static char print_string[2048]; + asmlinkage __visible int printk(const char * fmt,...) { va_list args; va_start(args, fmt); - lx_emul_vprintf(fmt, args); + vsnprintf(print_string, sizeof(print_string), fmt, args); va_end(args); + + lx_emul_print_string(print_string); return 0; } asmlinkage int vprintk(const char * fmt, va_list args) { - lx_emul_vprintf(fmt, args); + vsnprintf(print_string, sizeof(print_string), fmt, args); + lx_emul_print_string(print_string); return 0; } @@ -36,7 +44,8 @@ asmlinkage int vprintk_emit(int facility, int level, const struct dev_printk_info *dev_info, const char * fmt, va_list args) { - lx_emul_vprintf(fmt, args); + vsnprintf(print_string, sizeof(print_string), fmt, args); + lx_emul_print_string(print_string); return 0; } diff --git a/repos/dde_linux/src/lib/lx_kit/console.cc b/repos/dde_linux/src/lib/lx_kit/console.cc index 76342989de..1fbd0e208c 100644 --- a/repos/dde_linux/src/lib/lx_kit/console.cc +++ b/repos/dde_linux/src/lib/lx_kit/console.cc @@ -2,6 +2,7 @@ * \brief Lx_kit format string backend * \author Stefan Kalkowski * \author Sebastian Sumpf + * \author Christian Helmuth * \date 2021-03-17 * * Greatly inspired by the former DDE Linux Lx_kit implementation. @@ -208,6 +209,21 @@ void Lx_kit::Console::_out_string(const char *str) } +void Lx_kit::Console::print_string(const char *str) +{ + if (!str) { + _out_string(""); + return; + } + + /* strip potential control characters for log level */ + if (*str == 1) + str += 2; + + _out_string(str); +} + + void Lx_kit::Console::vprintf(const char *format, va_list list) { while (*format) { From 3b3eef53077eeb3201add0243c6e051beb9a8208 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 8 Jun 2022 13:27:47 +0200 Subject: [PATCH 086/354] lx_emul: add devm_ioremap_uc() Issue #4542 --- repos/dde_linux/src/lib/lx_emul/shadow/lib/devres.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/lib/devres.c b/repos/dde_linux/src/lib/lx_emul/shadow/lib/devres.c index d0d0a2e319..39ecc1a9c2 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/lib/devres.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/lib/devres.c @@ -1,6 +1,7 @@ /* * \brief Replaces lib/devres.c * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-16 */ @@ -26,3 +27,10 @@ void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, { return lx_emul_io_mem_map(offset, size); } + + +void __iomem * devm_ioremap_uc(struct device *dev, resource_size_t offset, + resource_size_t size) +{ + return lx_emul_io_mem_map(offset, size); +} From 0f009ecbdd591d0eefb671296b15b8b7c9f7fdc4 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 15 Jun 2022 09:33:19 +0200 Subject: [PATCH 087/354] lx_emul: add lx_emul_backtrace() Issue #4542 --- repos/dde_linux/src/include/lx_emul/debug.h | 3 +++ repos/dde_linux/src/lib/lx_emul/debug.cc | 11 +++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/repos/dde_linux/src/include/lx_emul/debug.h b/repos/dde_linux/src/include/lx_emul/debug.h index d09aafcef5..5fc71c890a 100644 --- a/repos/dde_linux/src/include/lx_emul/debug.h +++ b/repos/dde_linux/src/include/lx_emul/debug.h @@ -1,6 +1,7 @@ /* * \brief Lx_emul support to debug Linux kernel ports * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-16 */ @@ -22,6 +23,8 @@ __attribute__((noreturn)) void lx_emul_trace_and_stop(const char * func); void lx_emul_trace(const char * func); +void lx_emul_backtrace(void); + #ifdef __cplusplus } #endif diff --git a/repos/dde_linux/src/lib/lx_emul/debug.cc b/repos/dde_linux/src/lib/lx_emul/debug.cc index 7424ac76a5..6116fe4e2c 100644 --- a/repos/dde_linux/src/lib/lx_emul/debug.cc +++ b/repos/dde_linux/src/lib/lx_emul/debug.cc @@ -1,6 +1,7 @@ /* * \brief Lx_emul backend for Linux kernel' debug functions * \author Stefan Kalkowski + * \author Christian Helmuth * \date 2021-03-16 */ @@ -17,10 +18,10 @@ #include +using namespace Genode; + extern "C" void lx_emul_trace_and_stop(const char * func) { - using namespace Genode; - error("Function ", func, " not implemented yet!"); log("Backtrace follows:"); backtrace(); @@ -30,3 +31,9 @@ extern "C" void lx_emul_trace_and_stop(const char * func) extern "C" void lx_emul_trace(const char *) {} + + +extern "C" void lx_emul_backtrace() +{ + backtrace(); +} From fb0fe8617c6e7624c2323f2fe60f56e4fa49cd64 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 15 Jun 2022 17:00:25 +0200 Subject: [PATCH 088/354] dde_linux: re-enable -Wformat Fixes #4542 --- repos/dde_linux/lib/import/import-lx_emul_common.inc | 1 - repos/pc/src/lib/wifi/lx_emul.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/repos/dde_linux/lib/import/import-lx_emul_common.inc b/repos/dde_linux/lib/import/import-lx_emul_common.inc index 48ae69e364..4e8113d401 100644 --- a/repos/dde_linux/lib/import/import-lx_emul_common.inc +++ b/repos/dde_linux/lib/import/import-lx_emul_common.inc @@ -133,7 +133,6 @@ CC_C_OPT += -Wno-restrict -Wno-maybe-uninitialized -Werror=date-time CC_C_OPT += -Werror=incompatible-pointer-types -Werror=designated-init CC_C_OPT += -Wno-packed-not-aligned CC_C_OPT += -Wno-discarded-qualifiers -CC_C_OPT += -Wno-format # avoid link errors whenever the build config's CC_OLEVEL is set to -O0 override CC_OLEVEL := -O2 diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index 61a3c0474f..2821c69ac8 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -483,7 +483,7 @@ void *page_frag_alloc_align(struct page_frag_cache *nc, /* see page_frag_free */ if (order > 0) - printk("%s: alloc might leak memory: fragsz: %u PAGE_SIZE: %u " + printk("%s: alloc might leak memory: fragsz: %u PAGE_SIZE: %lu " "order: %u page: %p addr: %p\n", __func__, fragsz, PAGE_SIZE, order, page, page->virtual); return page->virtual; From c81b3d4757905498f1dcdbca59184410666da248 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 24 Jun 2022 11:14:26 +0200 Subject: [PATCH 089/354] base: add check whether stack belongs to ep Add method to check whether a given pointer are part of the primary stack of the rpc entrypoint. Issue #4540 --- repos/base/include/base/rpc_server.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/repos/base/include/base/rpc_server.h b/repos/base/include/base/rpc_server.h index 6749849d22..66998550eb 100644 --- a/repos/base/include/base/rpc_server.h +++ b/repos/base/include/base/rpc_server.h @@ -481,6 +481,17 @@ class Genode::Rpc_entrypoint : Thread, public Object_pool * This method is solely needed on Linux. */ bool is_myself() const; + + /** + * Check whether given stack info matches stack of the entrypoint. + * + * \noapi + * + */ + bool myself(addr_t const ptr) const + { + return addr_t(stack_base()) <= ptr && ptr <= addr_t(stack_top()); + } }; From ce67be5a86615b4b95e3d6324b354751088e7674 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 24 Jun 2022 11:43:38 +0200 Subject: [PATCH 090/354] lx_kit: sanitize that solely ep calls schedule() with expected primary stack. Issue #4540 --- repos/dde_linux/src/include/lx_kit/env.h | 2 +- repos/dde_linux/src/include/lx_kit/scheduler.h | 4 ++++ repos/dde_linux/src/lib/lx_kit/scheduler.cc | 13 +++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/repos/dde_linux/src/include/lx_kit/env.h b/repos/dde_linux/src/include/lx_kit/env.h index 65c6ff0dce..a4b4e21af8 100644 --- a/repos/dde_linux/src/include/lx_kit/env.h +++ b/repos/dde_linux/src/include/lx_kit/env.h @@ -47,7 +47,7 @@ struct Lx_kit::Env Timer::Connection timer { env }; Mem_allocator memory { env, heap, platform, CACHED }; Mem_allocator uncached_memory { env, heap, platform, UNCACHED }; - Scheduler scheduler { }; + Scheduler scheduler { env.ep() }; Device_list devices { env.ep(), heap, platform }; Lx_kit::Timeout timeout { timer, scheduler }; unsigned int last_irq { 0 }; diff --git a/repos/dde_linux/src/include/lx_kit/scheduler.h b/repos/dde_linux/src/include/lx_kit/scheduler.h index 26e9b0c4ac..418f790e52 100644 --- a/repos/dde_linux/src/include/lx_kit/scheduler.h +++ b/repos/dde_linux/src/include/lx_kit/scheduler.h @@ -32,6 +32,8 @@ class Lx_kit::Scheduler List _present_list { }; Task * _current { nullptr }; + Genode::Entrypoint &ep; + public: Task & current(); @@ -51,6 +53,8 @@ class Lx_kit::Scheduler template void for_each_task(FN const & fn); + + Scheduler(Genode::Entrypoint &ep) : ep(ep) { } }; diff --git a/repos/dde_linux/src/lib/lx_kit/scheduler.cc b/repos/dde_linux/src/lib/lx_kit/scheduler.cc index e0ec62e8b5..646464ba1d 100644 --- a/repos/dde_linux/src/lib/lx_kit/scheduler.cc +++ b/repos/dde_linux/src/lib/lx_kit/scheduler.cc @@ -15,8 +15,10 @@ */ /* Genode includes */ +#include #include #include +#include #include #include @@ -91,6 +93,17 @@ Task & Scheduler::task(void * lx_task) void Scheduler::schedule() { + /* sanity check that right thread & stack is in use */ + auto const thread = Genode::Thread::myself(); + if (!ep.rpc_ep().myself(addr_t(&thread))) { + Genode::error("Lx_kit::Scheduler called by invalid thread/stack ", + thread->name(), " ", + Genode::Hex(thread->mystack().base), "-", + Genode::Hex(thread->mystack().top)); + Genode::backtrace(); + Genode::sleep_forever(); + } + /* * Iterate over all tasks and run first runnable. * From 9ecbe51e3491ce2d1e3aed69d0d102c2741c980d Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 17 Jun 2022 15:18:17 +0200 Subject: [PATCH 091/354] pc_linux: enable NO_HZ_IDLE the option enables support to stop periodic ticking when in idle task. Adjust dummies of intel_fb, wifi, usb drivers accordingly. Issue #4540 --- .../drivers/framebuffer/intel/pc/dummies.c | 24 +++++++++++++++++++ .../intel/pc/spec/x86_32/source.list | 2 ++ .../intel/pc/spec/x86_64/source.list | 2 ++ repos/pc/src/drivers/usb_host/pc/dummies.c | 24 +++++++++++++++++++ .../usb_host/pc/spec/x86_32/source.list | 2 ++ .../usb_host/pc/spec/x86_64/source.list | 2 ++ repos/pc/src/lib/wifi/dummies.c | 24 +++++++++++++++++++ repos/pc/src/lib/wifi/spec/x86_32/source.list | 2 ++ repos/pc/src/lib/wifi/spec/x86_64/source.list | 2 ++ repos/pc/src/pc_linux/target.inc | 3 +++ 10 files changed, 87 insertions(+) diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c index 30081dc76d..f70a11b8fd 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c @@ -527,3 +527,27 @@ void intel_dsb_commit(const struct intel_crtc_state *crtc_state) { lx_emul_trace(__func__); } + + +void calc_load_nohz_start(void) +{ + lx_emul_trace(__func__); +} + + +void calc_load_nohz_stop(void) +{ + lx_emul_trace(__func__); +} + + +void account_idle_ticks(unsigned long ticks) +{ + lx_emul_trace(__func__); +} + + +bool irq_work_needs_cpu(void) +{ + return false; +} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list index eb5631008a..b057680611 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list @@ -229,6 +229,8 @@ kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list index 2d40e8f3a7..6ed437274a 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list @@ -233,6 +233,8 @@ kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-broadcast.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/pc/src/drivers/usb_host/pc/dummies.c b/repos/pc/src/drivers/usb_host/pc/dummies.c index 81f7e7dcce..7d7eb92d46 100644 --- a/repos/pc/src/drivers/usb_host/pc/dummies.c +++ b/repos/pc/src/drivers/usb_host/pc/dummies.c @@ -82,3 +82,27 @@ int __printk_ratelimit(const char * func) /* suppress */ return 0; } + + +void calc_load_nohz_start(void) +{ + lx_emul_trace(__func__); +} + + +void calc_load_nohz_stop(void) +{ + lx_emul_trace(__func__); +} + + +void account_idle_ticks(unsigned long ticks) +{ + lx_emul_trace(__func__); +} + + +bool irq_work_needs_cpu(void) +{ + return false; +} diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list index 007dd15d22..8ad8be19c4 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list @@ -83,6 +83,8 @@ kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list index a8c2cf6b33..00b8d3e99a 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list @@ -85,6 +85,8 @@ kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-broadcast.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/pc/src/lib/wifi/dummies.c b/repos/pc/src/lib/wifi/dummies.c index b6907437ae..d1a6c29d2b 100644 --- a/repos/pc/src/lib/wifi/dummies.c +++ b/repos/pc/src/lib/wifi/dummies.c @@ -294,3 +294,27 @@ int net_ratelimit(void) /* suppress */ return 0; } + + +void calc_load_nohz_start(void) +{ + lx_emul_trace(__func__); +} + + +void calc_load_nohz_stop(void) +{ + lx_emul_trace(__func__); +} + + +void account_idle_ticks(unsigned long ticks) +{ + lx_emul_trace(__func__); +} + + +bool irq_work_needs_cpu(void) +{ + return false; +} diff --git a/repos/pc/src/lib/wifi/spec/x86_32/source.list b/repos/pc/src/lib/wifi/spec/x86_32/source.list index 04118d7ac1..3bc7badd53 100644 --- a/repos/pc/src/lib/wifi/spec/x86_32/source.list +++ b/repos/pc/src/lib/wifi/spec/x86_32/source.list @@ -155,6 +155,8 @@ kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/pc/src/lib/wifi/spec/x86_64/source.list b/repos/pc/src/lib/wifi/spec/x86_64/source.list index 48f993bb68..2f7e2963c0 100644 --- a/repos/pc/src/lib/wifi/spec/x86_64/source.list +++ b/repos/pc/src/lib/wifi/spec/x86_64/source.list @@ -156,6 +156,8 @@ kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-broadcast.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/pc/src/pc_linux/target.inc b/repos/pc/src/pc_linux/target.inc index 2851bf457b..90cb0bb1c5 100644 --- a/repos/pc/src/pc_linux/target.inc +++ b/repos/pc/src/pc_linux/target.inc @@ -5,6 +5,9 @@ # kernel fundamentals LX_ENABLE += TTY SERIAL_EARLYCON SERIAL_OF_PLATFORM PRINTK HAS_IOMEM +# support disabling ticking during idle +LX_ENABLE += NO_HZ_IDLE + # initrd support LX_ENABLE += BINFMT_ELF BINFMT_SCRIPT BLK_DEV_INITRD From 7b4556e546bc27e531f6ea3842fddcff834eb0e1 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 16 Jun 2022 14:57:15 +0200 Subject: [PATCH 092/354] intel_fb: remove schedule_timeout wrap Issue #4540 --- repos/dde_linux/src/include/lx_emul/time.h | 2 - repos/dde_linux/src/lib/lx_emul/clocksource.c | 104 ------------------ .../drivers/framebuffer/intel/pc/target.inc | 7 -- .../drivers/framebuffer/intel/pc/timeout.c | 33 ------ 4 files changed, 146 deletions(-) delete mode 100644 repos/pc/src/drivers/framebuffer/intel/pc/timeout.c diff --git a/repos/dde_linux/src/include/lx_emul/time.h b/repos/dde_linux/src/include/lx_emul/time.h index 924527685c..7f560b75c0 100644 --- a/repos/dde_linux/src/include/lx_emul/time.h +++ b/repos/dde_linux/src/include/lx_emul/time.h @@ -28,8 +28,6 @@ unsigned long long lx_emul_time_counter(void); void lx_emul_time_handle(void); -void lx_emul_force_jiffies_update(void); - #ifdef __cplusplus } #endif diff --git a/repos/dde_linux/src/lib/lx_emul/clocksource.c b/repos/dde_linux/src/lib/lx_emul/clocksource.c index 3a72ef74ee..fe6cbedcc2 100644 --- a/repos/dde_linux/src/lib/lx_emul/clocksource.c +++ b/repos/dde_linux/src/lib/lx_emul/clocksource.c @@ -131,107 +131,3 @@ void lx_emul_register_of_clk_initcall(char const *compat, void *fn) count++; } - - -/* - * private kernel/time header needed for internal functions - * used in lx_emul_force_jiffies_update - */ -#include <../kernel/time/tick-internal.h> - -/* - * The functions lx_emul_force_jiffies_update, lx_clockevents_program_event - * and lx_clockevents_program_event implemented here are stripped down - * versions of the Linux internal time handling code, when clock is used in - * periodic mode. - * - * Normally time proceeds due to - * -> lx_emul/shadow/kernel/sched/core.c calls lx_emul_time_handle() - * -> repos/dde_linux/src/lib/lx_emul/clocksource.c:lx_emul_time_handle() calls - * -> dde_clock_event_device->event_handle() == tick_handle_periodic() - * -> kernel/time/tick-common.c -> tick_handle_periodic() - * -> kernel/time/clockevents.c -> clockevents_program_event() - * -> which fast forwards jiffies in a loop until it matches wall clock - * - * lx_emul_force_jiffies_update can be used to update jiffies to current, - * before invoking schedule_timeout(), which expects current jiffies values. - * Without current jiffies, the programmed timeouts are too short, which leads - * to timeouts firing too early. - */ - - -/** - * based on kernel/time/clockevents.c clockevents_program_event() - */ -static int lx_clockevents_program_event(struct clock_event_device *dev, - ktime_t expires) -{ - int64_t delta; - - if (WARN_ON_ONCE(expires < 0)) - return 0; - - dev->next_event = expires; - - if (clockevent_state_shutdown(dev)) - return 0; - - if (dev->features & CLOCK_EVT_FEAT_KTIME) - return 0; - - delta = ktime_to_ns(ktime_sub(expires, ktime_get())); - if (delta <= 0) { - int res = -ETIME; - return res; - } - - return 0; -} - - -/** - * based on kernel/time/tick-common.c tick_handle_periodic() - */ -void lx_emul_force_jiffies_update(void) -{ - struct clock_event_device *dev = dde_clock_event_device; - - ktime_t next = dev->next_event; - -#if defined(CONFIG_HIGH_RES_TIMERS) || defined(CONFIG_NO_HZ_COMMON) - /* - * The cpu might have transitioned to HIGHRES or NOHZ mode via - * update_process_times() -> run_local_timers() -> - * hrtimer_run_queues(). - */ - if (dev->event_handler != tick_handle_periodic) - return; -#endif - - if (!clockevent_state_oneshot(dev)) - return; - - for (;;) { - /* - * Setup the next period for devices, which do not have - * periodic mode: - */ - next = ktime_add_ns(next, TICK_NSEC); - - if (!lx_clockevents_program_event(dev, next)) - return; - - /* - * Have to be careful here. If we're in oneshot mode, - * before we call tick_periodic() in a loop, we need - * to be sure we're using a real hardware clocksource. - * Otherwise we could get trapped in an infinite - * loop, as the tick_periodic() increments jiffies, - * which then will increment time, possibly causing - * the loop to trigger again and again. - */ - if (timekeeping_valid_for_hres()) { - do_timer(1); /* tick_periodic(cpu); */ - } - } -} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc index 3a22d97bf3..01749e3561 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc @@ -18,7 +18,6 @@ SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c)) SRC_C += fb.c SRC_C += lx_user.c SRC_C += gem.c -SRC_C += timeout.c SRC_C += lx_emul/common_dummies.c SRC_C += lx_emul/spec/x86/pci.c SRC_C += lx_emul/shadow/kernel/softirq.c @@ -49,12 +48,6 @@ CC_OPT_generated_dummies += -include $(LX_SRC_DIR)/drivers/gpu/drm/i915/i915_drv CC_C_OPT += -Wno-unused-label -# -# Original symbol is renamed to __real_* and references to original symbol -# are replaced by __wrap_*. Used to shadow schedule_timeout, see timeout.c -# -LD_OPT += --wrap=schedule_timeout - # # Genode C-API backends # diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/timeout.c b/repos/pc/src/drivers/framebuffer/intel/pc/timeout.c deleted file mode 100644 index dec42f6995..0000000000 --- a/repos/pc/src/drivers/framebuffer/intel/pc/timeout.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * \brief Wrapper to update jiffies before invoking schedule_timeout(). - * Schedule_timeout() expects that the jiffie value is current, - * in order to setup the timeouts. Without current jiffies, - * the programmed timeouts are too short, which leads to timeouts - * firing too early. The Intel driver uses this mechanism frequently - * by utilizing wait_queue_timeout*() in order to wait for hardware - * state changes, e.g. connectors hotplug. The schedule_timeout is - * shadowed by the Linker feature '--wrap'. This code can be removed - * as soon as the timeout handling is implemented by lx_emul/lx_kit - * instead of using the original Linux sources of kernel/time/timer.c. - * \author Alexander Boettcher - * \date 2022-04-04 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#include - - -signed long __real_schedule_timeout(signed long timeout); - - -signed long __wrap_schedule_timeout(signed long timeout) -{ - lx_emul_force_jiffies_update(); - return __real_schedule_timeout(timeout); -} From 46b487c2f775a75e54480d321c4478634e6c6d91 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Thu, 30 Jun 2022 16:40:30 +0200 Subject: [PATCH 093/354] pc: consolidate __const_udelay for linux drivers Use common implementation used by wifi and (not merged) audio driver. Avoid usage of lib/delay.c since lpj and loop_for_jiffies are not calibrated for the ported drivers as done on native Linux during boot and leads to wrong delays for usb and intel_fb. Issue #4540 --- .../src/lib/lx_emul/spec/x86/start.c | 1 - repos/pc/lib/import/import-pc_lx_emul.mk | 1 + .../intel/pc/spec/x86_32/source.list | 1 - .../intel/pc/spec/x86_64/source.list | 1 - .../drivers/framebuffer/intel/pc/target.inc | 1 + .../src/drivers/framebuffer/intel/pc/time.cc | 25 ++++++++++++++ .../usb_host/pc/spec/x86_32/source.list | 1 - .../usb_host/pc/spec/x86_64/source.list | 1 - repos/pc/src/drivers/usb_host/pc/target.inc | 1 + repos/pc/src/drivers/usb_host/pc/time.cc | 25 ++++++++++++++ repos/pc/src/lib/pc/lx_emul/common_dummies.c | 10 ------ repos/pc/src/lib/pc/lx_emul/delay.c | 34 +++++++++++++++++++ repos/pc/src/lib/wifi/lx_emul.c | 14 -------- 13 files changed, 87 insertions(+), 29 deletions(-) create mode 100644 repos/pc/src/drivers/framebuffer/intel/pc/time.cc create mode 100644 repos/pc/src/drivers/usb_host/pc/time.cc create mode 100644 repos/pc/src/lib/pc/lx_emul/delay.c diff --git a/repos/dde_linux/src/lib/lx_emul/spec/x86/start.c b/repos/dde_linux/src/lib/lx_emul/spec/x86/start.c index 1a854ebd57..d26e41eb71 100644 --- a/repos/dde_linux/src/lib/lx_emul/spec/x86/start.c +++ b/repos/dde_linux/src/lib/lx_emul/spec/x86/start.c @@ -26,7 +26,6 @@ unsigned long long sched_clock(void) void time_init(void) { lx_emul_time_init(); /* replaces timer_probe() */ - lpj_fine = 1000000 / HZ; } diff --git a/repos/pc/lib/import/import-pc_lx_emul.mk b/repos/pc/lib/import/import-pc_lx_emul.mk index 9c02a30e74..4e298d8c84 100644 --- a/repos/pc/lib/import/import-pc_lx_emul.mk +++ b/repos/pc/lib/import/import-pc_lx_emul.mk @@ -47,6 +47,7 @@ SRC_C += lx_emul/sched_core.c SRC_C += lx_emul/slab_common.c SRC_C += lx_emul/softirq.c SRC_C += lx_emul/vmalloc.c +SRC_C += lx_emul/delay.c SRC_C += lx_emul/shadow/fs/libfs.c SRC_C += lx_emul/shadow/kernel/rcu/tiny.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list index b057680611..4defc3d70a 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list @@ -1,4 +1,3 @@ -arch/x86/lib/delay.c arch/x86/lib/hweight.S arch/x86/pci/legacy.c arch/x86/platform/intel/iosf_mbi.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list index 6ed437274a..518849f5cb 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list @@ -1,4 +1,3 @@ -arch/x86/lib/delay.c arch/x86/lib/hweight.S arch/x86/lib/memcpy_64.S arch/x86/lib/memmove_64.S diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc index 01749e3561..04788d6894 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc @@ -11,6 +11,7 @@ INC_DIR += $(REL_PRG_DIR)/shadow SRC_CC += main.cc SRC_CC += misc.cc SRC_CC += emul.cc +SRC_CC += time.cc SRC_CC += opregion_io_mem.cc SRC_C += dummies.c SRC_C += lx_emul.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/time.cc b/repos/pc/src/drivers/framebuffer/intel/pc/time.cc new file mode 100644 index 0000000000..0f8f40ad69 --- /dev/null +++ b/repos/pc/src/drivers/framebuffer/intel/pc/time.cc @@ -0,0 +1,25 @@ +/* + * \brief Lx_emul udelay function for very short delays + * \author Stefan Kalkowski + * \date 2021-07-10 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +extern "C" void lx_emul_time_udelay(unsigned long usec); +extern "C" void lx_emul_time_udelay(unsigned long usec) +{ + if (usec > 100) + Genode::error("Cannot delay that long ", usec, " microseconds"); + + unsigned long long start = Lx_kit::env().timer.curr_time().trunc_to_plain_us().value; + while (Lx_kit::env().timer.curr_time().trunc_to_plain_us().value < (start + usec)) { ; } +} diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list index 8ad8be19c4..cde37ec2aa 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list @@ -1,4 +1,3 @@ -arch/x86/lib/delay.c arch/x86/lib/hweight.S arch/x86/pci/legacy.c drivers/base/bus.c diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list index 00b8d3e99a..d16cd6ae87 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list @@ -1,4 +1,3 @@ -arch/x86/lib/delay.c arch/x86/lib/hweight.S arch/x86/pci/legacy.c drivers/base/bus.c diff --git a/repos/pc/src/drivers/usb_host/pc/target.inc b/repos/pc/src/drivers/usb_host/pc/target.inc index 30c05fc283..66dba2679f 100644 --- a/repos/pc/src/drivers/usb_host/pc/target.inc +++ b/repos/pc/src/drivers/usb_host/pc/target.inc @@ -8,6 +8,7 @@ LIBS := base pc_lx_emul jitterentropy INC_DIR += $(REL_PRG_DIR) SRC_CC += main.cc SRC_CC += misc.cc +SRC_CC += time.cc SRC_CC += lx_emul/shared_dma_buffer.cc SRC_C += dummies.c SRC_C += lx_emul.c diff --git a/repos/pc/src/drivers/usb_host/pc/time.cc b/repos/pc/src/drivers/usb_host/pc/time.cc new file mode 100644 index 0000000000..0f8f40ad69 --- /dev/null +++ b/repos/pc/src/drivers/usb_host/pc/time.cc @@ -0,0 +1,25 @@ +/* + * \brief Lx_emul udelay function for very short delays + * \author Stefan Kalkowski + * \date 2021-07-10 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +extern "C" void lx_emul_time_udelay(unsigned long usec); +extern "C" void lx_emul_time_udelay(unsigned long usec) +{ + if (usec > 100) + Genode::error("Cannot delay that long ", usec, " microseconds"); + + unsigned long long start = Lx_kit::env().timer.curr_time().trunc_to_plain_us().value; + while (Lx_kit::env().timer.curr_time().trunc_to_plain_us().value < (start + usec)) { ; } +} diff --git a/repos/pc/src/lib/pc/lx_emul/common_dummies.c b/repos/pc/src/lib/pc/lx_emul/common_dummies.c index 2d842b2439..a4086eccf5 100644 --- a/repos/pc/src/lib/pc/lx_emul/common_dummies.c +++ b/repos/pc/src/lib/pc/lx_emul/common_dummies.c @@ -47,11 +47,6 @@ const struct trace_print_flags pageflag_names[] = { {0,NULL}}; struct kernel_stat kstat; -#include - -/* support for arch/x86/lib/delay.c, normally defined in init/main.c */ -unsigned long loops_per_jiffy = (1<<12); - #include @@ -70,11 +65,6 @@ struct cpuinfo_x86 boot_cpu_data = unsigned long init_stack[THREAD_SIZE / sizeof(unsigned long)]; -#include - -unsigned long lpj_fine = 0; - - /* * Generate_dummies.c will otherwise pull in * that clashes with rcutiny.h. diff --git a/repos/pc/src/lib/pc/lx_emul/delay.c b/repos/pc/src/lib/pc/lx_emul/delay.c new file mode 100644 index 0000000000..05d9063b6c --- /dev/null +++ b/repos/pc/src/lib/pc/lx_emul/delay.c @@ -0,0 +1,34 @@ +/* + * \brief Supplement for emulation for linux/include/asm-generic/delay.h + * \author Josef Soentgen + * \date 2022-05-05 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + + +#include +#include + +#include + + +void __const_udelay(unsigned long xloops) +{ + unsigned long usecs = xloops / 0x10C7UL; + if (usecs < 100) + lx_emul_time_udelay(usecs); + else + usleep_range(usecs, usecs * 10); +} + + +void __udelay(unsigned long usecs) +{ + lx_emul_time_udelay(usecs); +} diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index 2821c69ac8..c2d6dc2a3c 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -18,20 +18,6 @@ #include #include - -#include -#include - -void __const_udelay(unsigned long xloops) -{ - unsigned long usecs = xloops / 0x10C7UL; - if (usecs < 100) - lx_emul_time_udelay(usecs); - else - usleep_range(usecs, usecs * 10); -} - - #include struct kmem_cache * kmem_cache_create_usercopy(const char * name, From b03cb94b43c39ae9b8b693e8f3060ed79f5cded0 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 1 Jul 2022 14:32:10 +0200 Subject: [PATCH 094/354] pc: add linux driver timer test The test runs as lx_user task and uses several *delay and wait queue test cases happened to be used in real ported linux drivers. The test shows the time spent with several time sources, e.g. jiffies, rdtsc, lx_time_counter_count etc. Issue #4540 --- repos/pc/run/driver_time.run | 96 +++++++ repos/pc/src/test/driver_time/dummies.c | 71 +++++ .../src/test/driver_time/generated_dummies.c | 234 +++++++++++++++ repos/pc/src/test/driver_time/lx_emul.h | 23 ++ repos/pc/src/test/driver_time/lx_user.c | 270 ++++++++++++++++++ repos/pc/src/test/driver_time/main.cc | 67 +++++ repos/pc/src/test/driver_time/source.list | 77 +++++ repos/pc/src/test/driver_time/target.mk | 28 ++ repos/pc/src/test/driver_time/time.cc | 25 ++ 9 files changed, 891 insertions(+) create mode 100644 repos/pc/run/driver_time.run create mode 100644 repos/pc/src/test/driver_time/dummies.c create mode 100644 repos/pc/src/test/driver_time/generated_dummies.c create mode 100644 repos/pc/src/test/driver_time/lx_emul.h create mode 100644 repos/pc/src/test/driver_time/lx_user.c create mode 100644 repos/pc/src/test/driver_time/main.cc create mode 100644 repos/pc/src/test/driver_time/source.list create mode 100644 repos/pc/src/test/driver_time/target.mk create mode 100644 repos/pc/src/test/driver_time/time.cc diff --git a/repos/pc/run/driver_time.run b/repos/pc/run/driver_time.run new file mode 100644 index 0000000000..edd4ad863b --- /dev/null +++ b/repos/pc/run/driver_time.run @@ -0,0 +1,96 @@ +# +# Build +# + +if {[expr ![have_spec x86_64]]} { + puts "Run script is not supported on this platform." + exit 0 +} + +set use_top 0 + +set build_components { + core init timer + test/driver_time +} + + +append_if $use_top build_components { app/top } + +source ${genode_dir}/repos/base/run/platform_drv.inc +append_platform_drv_build_components + +build $build_components + +create_boot_directory + +# override default platform driver policy +proc platform_drv_policy {} { + return { + + } +} + +# +# Generate config +# + +append config { + + + + + + + + + + + + + + + + + + + + + + + + + } + +append_platform_drv_config + +append_if $use_top config { + + + + } + +append config { +} + +install_config $config + +# +# Boot modules +# + +# generic modules +set boot_modules { + core ld.lib.so init timer + test-driver_time +} + +append_if $use_top boot_modules { top } + +append_platform_drv_boot_modules + +build_boot_image $boot_modules + +append qemu_args "-nographic " + +run_genode_until forever diff --git a/repos/pc/src/test/driver_time/dummies.c b/repos/pc/src/test/driver_time/dummies.c new file mode 100644 index 0000000000..12522c1b78 --- /dev/null +++ b/repos/pc/src/test/driver_time/dummies.c @@ -0,0 +1,71 @@ +/* + * \brief Dummy definitions of Linux Kernel functions - handled manually + * \author Alexander Boettcher + * \date 2022-07-01 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +void calc_load_nohz_start(void) +{ + lx_emul_trace(__func__); +} + + +void calc_load_nohz_stop(void) +{ + lx_emul_trace(__func__); +} + + +void account_idle_ticks(unsigned long ticks) +{ + lx_emul_trace(__func__); +} + + + +bool irq_work_needs_cpu(void) +{ + return false; +} + + +int ___ratelimit(struct ratelimit_state * rs, const char * func) +{ + /* + * from lib/ratelimit.c: + * " 0 means callbacks will be suppressed. + * 1 means go ahead and do it. " + */ + lx_emul_trace(__func__); + return 1; +} + +void register_syscore_ops(struct syscore_ops * ops) +{ + lx_emul_trace(__func__); +} diff --git a/repos/pc/src/test/driver_time/generated_dummies.c b/repos/pc/src/test/driver_time/generated_dummies.c new file mode 100644 index 0000000000..ffd8e13205 --- /dev/null +++ b/repos/pc/src/test/driver_time/generated_dummies.c @@ -0,0 +1,234 @@ +/* + * \brief Dummy definitions of Linux Kernel functions + * \author Automatically generated file - do no edit + * \date 2022-05-06 + */ + +#include + + +#include + +void * PDE_DATA(const struct inode * inode) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +const char * __clk_get_name(const struct clk * clk) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int printk_deferred(const char * fmt,...) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void irq_work_tick(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +asmlinkage __visible void dump_stack(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int io_schedule_prepare(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void io_schedule_finish(int token) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +long io_schedule_timeout(long timeout) +{ + lx_emul_trace_and_stop(__func__); +} + + +extern void ack_bad_irq(unsigned int irq); +void ack_bad_irq(unsigned int irq) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int kobject_synth_uevent(struct kobject * kobj,const char * buf,size_t count) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void synchronize_srcu(struct srcu_struct * ssp) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void __srcu_read_unlock(struct srcu_struct * ssp,int idx) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int add_uevent_var(struct kobj_uevent_env * env,const char * format,...) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +bool initcall_debug; + + +#include + +struct irq_chip no_irq_chip; + + +#include + +struct kobject *kernel_kobj; + + +#include + +void kill_anon_super(struct super_block * sb) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +bool is_software_node(const struct fwnode_handle * fwnode) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void fwnode_remove_software_node(struct fwnode_handle * fwnode) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void __put_task_struct(struct task_struct * tsk) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int get_option(char ** str,int * pint) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +bool file_ns_capable(const struct file * file,struct user_namespace * ns,int cap) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void seq_printf(struct seq_file * m,const char * f,...) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +struct pseudo_fs_context * init_pseudo(struct fs_context * fc,unsigned long magic) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int wait) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void srcu_drive_gp(struct work_struct * wp) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +unsigned long _copy_to_user(void __user * to,const void * from,unsigned long n) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +bool static_key_initialized; + + +#include + +int string_escape_mem(const char * src,size_t isz,char * dst,size_t osz,unsigned int flags,const char * only) +{ + lx_emul_trace_and_stop(__func__); +} diff --git a/repos/pc/src/test/driver_time/lx_emul.h b/repos/pc/src/test/driver_time/lx_emul.h new file mode 100644 index 0000000000..acee561257 --- /dev/null +++ b/repos/pc/src/test/driver_time/lx_emul.h @@ -0,0 +1,23 @@ +/** + * \brief Dummy definitions of Linux Kernel functions + * \author Alexander Boettcher + * \date 2022-07-01 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + + +#ifdef __cplusplus +extern "C" { +#endif + +void lx_emul_time_udelay(unsigned long usec); + +#ifdef __cplusplus +} +#endif diff --git a/repos/pc/src/test/driver_time/lx_user.c b/repos/pc/src/test/driver_time/lx_user.c new file mode 100644 index 0000000000..8f69ca0b3a --- /dev/null +++ b/repos/pc/src/test/driver_time/lx_user.c @@ -0,0 +1,270 @@ +/* + * \brief Post kernel activity + * \author Alexander Boettcher + * \date 2022-07-01 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + + +#include + +#include + +#include "i915_drv.h" /* test wait_for() macro */ + +#include + + +extern uint64_t tsc_freq_khz; + + +static int timing_tests(void *); + + +void lx_user_init(void) +{ + kernel_thread(timing_tests, NULL, CLONE_FS | CLONE_FILES); +} + + +struct measure { + uint64_t start; + uint64_t end; + uint64_t diff; +}; + +#define test_timing(fn_test, fn_evaluation) \ +{ \ + struct measure m_lxemul, m_jiffies, m_rdtsc; \ + uint64_t jiffies_in_us; \ +\ + m_lxemul.start = lx_emul_time_counter(); \ + m_jiffies.start = jiffies_64; \ + m_rdtsc.start = rdtsc(); \ +\ + { \ + fn_test \ + } \ +\ + m_rdtsc.end = rdtsc(); \ + m_jiffies.end = jiffies_64; \ + m_lxemul.end = lx_emul_time_counter(); \ +\ + m_rdtsc.diff = m_rdtsc.end - m_rdtsc.start; \ + m_lxemul.diff = m_lxemul.end - m_lxemul.start; \ + m_jiffies.diff = m_jiffies.end - m_jiffies.start; \ +\ + jiffies_in_us = (m_jiffies.diff) * (1000ull * 1000 / CONFIG_HZ); \ +\ + { \ + fn_evaluation \ + } \ +\ +} + +#define test_timing_no_ret(text, fn_test) \ +{ \ + test_timing( \ + fn_test \ + , \ + if (rdtsc_freq_mhz) \ + printk(text \ + " %6llu:%10llu:%10llu:%10llu:%8lld\n", \ + m_jiffies.diff, jiffies_in_us, m_lxemul.diff, \ + m_rdtsc.diff / rdtsc_freq_mhz, \ + jiffies_in_us - m_lxemul.diff); \ + else \ + printk(text \ + " %6llu:%10llu:%10llu:%8lld\n", \ + m_jiffies.diff, jiffies_in_us, m_lxemul.diff, \ + jiffies_in_us - m_lxemul.diff); \ + ); \ + /* trigger to update jiffies to avoid printk time part of next test */ \ + msleep(1); \ +} + + +#define test_timing_with_ret(text, fn_test) \ +{ \ + test_timing( \ + fn_test \ + , \ + if (rdtsc_freq_mhz) \ + printk(text \ + " %6llu:%10llu:%10llu:%10llu:%8lld " \ + "ret=%d%s\n", \ + m_jiffies.diff, jiffies_in_us, m_lxemul.diff, \ + m_rdtsc.diff / rdtsc_freq_mhz, \ + jiffies_in_us - m_lxemul.diff, \ + ret, ret == -ETIMEDOUT ? " (ETIMEDOUT)" : ""); \ + else \ + printk(text \ + " %6llu:%10llu:%10llu:%8lld " \ + "ret=%d%s\n", \ + m_jiffies.diff, jiffies_in_us, m_lxemul.diff, \ + jiffies_in_us - m_lxemul.diff, \ + ret, ret == -ETIMEDOUT ? " (ETIMEDOUT)" : ""); \ + ); \ + /* trigger to update jiffies to avoid printk time part of next test */ \ + msleep(1); \ +} + + +static int timing_tests(void * data) +{ + DEFINE_WAIT(wait); + wait_queue_head_t wq; + int ret; + uint64_t const rdtsc_freq_mhz = tsc_freq_khz / 1000; + + init_waitqueue_head(&wq); + + while (true) { + if (rdtsc_freq_mhz) + printk("test(parameters) -> " + "jiffies:jiff_us:lx_time_us:rdtsc_us:diff_jiff_lx_time " + "tsc=%lluMhz\n", rdtsc_freq_mhz); + else + printk("test(parameters) -> " + "jiffies:jiff_us:lx_time_us:diff_jiff_lx_time\n"); + + test_timing_no_ret ("udelay(40) ->", + udelay(40); + ); + + test_timing_no_ret ("ndelay(4000) ->", + ndelay(4000); + ); + + test_timing_no_ret ("msleep(5000) ->", + msleep(5000); + ); + + test_timing_with_ret("wait_for(cond,10ms) A ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 10); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,5ms) B ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 5); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,2ms) C ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 2); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,10ms) D ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 10); + remove_wait_queue(&wq, &wait); + ); + + /* do some work, so that jiffies becomes a bit outdated */ + { + unsigned long long i = 0; + printk("cause some long running load in task ...\n"); + for (i = 0; i < (1ull << 24); i++) { + asm volatile("pause":::"memory"); + } + } + + /* display driver test case -> waking up too early before irq triggered */ + test_timing_with_ret("wait_for(cond,10ms) E ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 10); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,5ms) F ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 5); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,2ms) G ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 2); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,10ms) H ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 10); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,5000ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 5000); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,4000ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 4000); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,3000ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 3000); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,2000ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 2000); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,500ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 500); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,200ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 200); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,100ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 100); + remove_wait_queue(&wq, &wait); + ); + + test_timing_with_ret("wait_for(cond,50ms) ->", + add_wait_queue(&wq, &wait); + ret = wait_for((0), 50); + remove_wait_queue(&wq, &wait); + ); + + /* audio driver test case -> sleeping too short or long is bad */ + test_timing_no_ret ("usleep_range(20,21) ->", + usleep_range(20, 21); + ); + + test_timing_no_ret ("usleep_range(40,41) ->", + usleep_range(40, 41); + ); + + test_timing_no_ret ("usleep_range(400,410) ->", + usleep_range(400, 410); + ); + } + + return 0; +} diff --git a/repos/pc/src/test/driver_time/main.cc b/repos/pc/src/test/driver_time/main.cc new file mode 100644 index 0000000000..3bcbee4c0b --- /dev/null +++ b/repos/pc/src/test/driver_time/main.cc @@ -0,0 +1,67 @@ +/* + * \brief Linux test driver + * \author Alexander Boettcher + * \date 2022-07-01 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +/* emulation includes */ +#include +#include + + +namespace Test { + using namespace Genode; + struct Driver; +} + + +unsigned long long tsc_freq_khz; + + +struct Test::Driver +{ + Env &env; + + Driver(Env &env) : env(env) + { + Lx_kit::initialize(env); + + env.exec_static_constructors(); + + try { + Attached_rom_dataspace info(env, "platform_info"); + tsc_freq_khz = info.xml().sub_node("hardware").sub_node("tsc") + .attribute_value("freq_khz", 0ULL); + } catch (...) { }; + } + + void start() + { + log("--- Test driver started ---"); + + lx_emul_start_kernel(nullptr); + } +}; + + +static Test::Driver &driver(Genode::Env & env) +{ + static Test::Driver driver(env); + return driver; +} + + +void Component::construct(Genode::Env &env) +{ + driver(env).start(); +} diff --git a/repos/pc/src/test/driver_time/source.list b/repos/pc/src/test/driver_time/source.list new file mode 100644 index 0000000000..de86489245 --- /dev/null +++ b/repos/pc/src/test/driver_time/source.list @@ -0,0 +1,77 @@ +drivers/base/bus.c +drivers/base/class.c +drivers/base/component.c +drivers/base/core.c +drivers/base/dd.c +drivers/base/devres.c +drivers/base/driver.c +drivers/base/platform.c +drivers/base/property.c +kernel/async.c +kernel/irq/chip.c +kernel/irq/devres.c +kernel/irq/handle.c +kernel/irq/irqdesc.c +kernel/irq/irqdomain.c +kernel/irq/manage.c +kernel/irq/resend.c +kernel/kthread.c +kernel/locking/mutex.c +kernel/locking/osq_lock.c +kernel/locking/rtmutex.c +kernel/locking/rwsem.c +kernel/notifier.c +kernel/panic.c +kernel/resource.c +kernel/sched/clock.c +kernel/sched/completion.c +kernel/sched/swait.c +kernel/sched/wait.c +kernel/sched/wait_bit.c +kernel/smpboot.c +kernel/time/clockevents.c +kernel/time/clocksource.c +kernel/time/hrtimer.c +kernel/time/jiffies.c +kernel/time/ntp.c +kernel/time/tick-broadcast.c +kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c +kernel/time/time.c +kernel/time/timeconv.c +kernel/time/timecounter.c +kernel/time/timekeeping.c +kernel/time/timer.c +kernel/time/timer_list.c +kernel/workqueue.c +lib/bitmap.c +lib/crc32.c +lib/ctype.c +lib/debug_locks.c +lib/dec_and_lock.c +lib/find_bit.c +lib/hexdump.c +lib/hweight.c +lib/idr.c +lib/iomap.c +lib/irq_regs.c +lib/kasprintf.c +lib/klist.c +lib/kobject.c +lib/kstrtox.c +lib/list_sort.c +lib/llist.c +lib/radix-tree.c +lib/rbtree.c +lib/refcount.c +lib/scatterlist.c +lib/siphash.c +lib/sort.c +lib/string.c +lib/timerqueue.c +lib/uuid.c +lib/vsprintf.c +lib/xarray.c +mm/mempool.c +mm/util.c diff --git a/repos/pc/src/test/driver_time/target.mk b/repos/pc/src/test/driver_time/target.mk new file mode 100644 index 0000000000..9f7387e135 --- /dev/null +++ b/repos/pc/src/test/driver_time/target.mk @@ -0,0 +1,28 @@ +REQUIRES := x86_64 + +TARGET := test-driver_time +LIBS := base pc_lx_emul jitterentropy + +SRC_CC += main.cc time.cc +SRC_C += lx_user.c +SRC_C += dummies.c +SRC_C += generated_dummies.c + +SRC_C += lx_emul/common_dummies.c +SRC_C += lx_emul/shadow/lib/kobject_uevent.c +SRC_C += lx_emul/shadow/drivers/char/random.c +SRC_C += lx_emul/shadow/kernel/softirq.c + +vpath %.c $(REP_DIR)/src/lib/pc +vpath %.cc $(REP_DIR)/src/lib/pc + +LX_SRC_DIR := $(call select_from_ports,linux)/src/linux +ifeq ($(wildcard $(LX_SRC_DIR)),) +LX_SRC_DIR := $(call select_from_repositories,src/linux) +endif +ifeq ($(wildcard $(LX_SRC_DIR)),) +fail +endif + +INC_DIR += $(PRG_DIR) +INC_DIR += $(LX_SRC_DIR)/drivers/gpu/drm/i915 diff --git a/repos/pc/src/test/driver_time/time.cc b/repos/pc/src/test/driver_time/time.cc new file mode 100644 index 0000000000..0f8f40ad69 --- /dev/null +++ b/repos/pc/src/test/driver_time/time.cc @@ -0,0 +1,25 @@ +/* + * \brief Lx_emul udelay function for very short delays + * \author Stefan Kalkowski + * \date 2021-07-10 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +extern "C" void lx_emul_time_udelay(unsigned long usec); +extern "C" void lx_emul_time_udelay(unsigned long usec) +{ + if (usec > 100) + Genode::error("Cannot delay that long ", usec, " microseconds"); + + unsigned long long start = Lx_kit::env().timer.curr_time().trunc_to_plain_us().value; + while (Lx_kit::env().timer.curr_time().trunc_to_plain_us().value < (start + usec)) { ; } +} From 2e81137a804ee7d576d434cb4b85570406d25f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Fri, 15 Jul 2022 18:02:32 +0200 Subject: [PATCH 095/354] mesa/iris: build dummy only on x86 Issue #4559. --- repos/libports/src/lib/mesa/iris/target.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repos/libports/src/lib/mesa/iris/target.mk b/repos/libports/src/lib/mesa/iris/target.mk index c103ff56f7..c0da6330d9 100644 --- a/repos/libports/src/lib/mesa/iris/target.mk +++ b/repos/libports/src/lib/mesa/iris/target.mk @@ -1,2 +1,4 @@ +REQUIRES := x86 + TARGET = dummy-mesa_gpu-iris LIBS = mesa_gpu-iris From 02f3b965b9259d9a4cf677a345224a19077ea9db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Fri, 15 Jul 2022 17:12:21 +0200 Subject: [PATCH 096/354] mesa/etnaviv: move to arm_v8 spec Issue #4559. --- repos/libports/lib/mk/{ => spec/arm_v8}/etnaviv.mk | 0 repos/libports/lib/mk/{ => spec/arm_v8}/mesa_gpu-etnaviv.mk | 0 repos/libports/recipes/src/mesa/content.mk | 4 ++-- repos/libports/src/lib/mesa/etnaviv/target.mk | 4 +++- 4 files changed, 5 insertions(+), 3 deletions(-) rename repos/libports/lib/mk/{ => spec/arm_v8}/etnaviv.mk (100%) rename repos/libports/lib/mk/{ => spec/arm_v8}/mesa_gpu-etnaviv.mk (100%) diff --git a/repos/libports/lib/mk/etnaviv.mk b/repos/libports/lib/mk/spec/arm_v8/etnaviv.mk similarity index 100% rename from repos/libports/lib/mk/etnaviv.mk rename to repos/libports/lib/mk/spec/arm_v8/etnaviv.mk diff --git a/repos/libports/lib/mk/mesa_gpu-etnaviv.mk b/repos/libports/lib/mk/spec/arm_v8/mesa_gpu-etnaviv.mk similarity index 100% rename from repos/libports/lib/mk/mesa_gpu-etnaviv.mk rename to repos/libports/lib/mk/spec/arm_v8/mesa_gpu-etnaviv.mk diff --git a/repos/libports/recipes/src/mesa/content.mk b/repos/libports/recipes/src/mesa/content.mk index 95f4c16cad..8c55501d84 100644 --- a/repos/libports/recipes/src/mesa/content.mk +++ b/repos/libports/recipes/src/mesa/content.mk @@ -3,9 +3,7 @@ all: content MIRROR_FROM_REP_DIR := \ lib/mk/egl.mk \ - lib/mk/mesa_gpu-etnaviv.mk \ lib/mk/mesa_gpu-softpipe.mk \ - lib/mk/etnaviv.mk \ lib/mk/iris_gen.inc \ lib/mk/isl_gen.inc \ lib/mk/glapi.mk \ @@ -13,7 +11,9 @@ MIRROR_FROM_REP_DIR := \ lib/mk/mesa_api.mk \ lib/mk/mesa-common.inc \ lib/mk/softpipe.mk \ + lib/mk/spec/arm_v8/etnaviv.mk \ lib/mk/spec/arm_v8/mesa.mk \ + lib/mk/spec/arm_v8/mesa_gpu-etnaviv.mk \ lib/mk/spec/x86/mesa_gpu-iris.mk \ lib/mk/spec/x86/iris.mk \ lib/mk/spec/x86/iris_gen110.mk \ diff --git a/repos/libports/src/lib/mesa/etnaviv/target.mk b/repos/libports/src/lib/mesa/etnaviv/target.mk index 0037f20053..7a8d51a642 100644 --- a/repos/libports/src/lib/mesa/etnaviv/target.mk +++ b/repos/libports/src/lib/mesa/etnaviv/target.mk @@ -1 +1,3 @@ -LIBS := mesa_gpu-etnaviv +REQUIRES := arm_v8a +TARGET := dummy-mesa_gpu-etnaviv +LIBS := mesa_gpu-etnaviv From 1f819a26e581759086784d4a0f14055ace426545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Fri, 15 Jul 2022 11:49:03 +0200 Subject: [PATCH 097/354] mesa/etnaviv: use VFS Gpu plugin to acquire Env Issue #4559. --- repos/libports/lib/mk/spec/arm_v8/libdrm.mk | 2 ++ .../libports/src/lib/libdrm/ioctl_etnaviv.cc | 22 ++++++++++++------- .../libports/src/lib/mesa/etnaviv/drm_init.cc | 4 ++-- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/repos/libports/lib/mk/spec/arm_v8/libdrm.mk b/repos/libports/lib/mk/spec/arm_v8/libdrm.mk index 0278876f51..ebc65c86eb 100644 --- a/repos/libports/lib/mk/spec/arm_v8/libdrm.mk +++ b/repos/libports/lib/mk/spec/arm_v8/libdrm.mk @@ -1,5 +1,7 @@ include $(REP_DIR)/lib/mk/libdrm.inc +LIBS += vfs_gpu + include $(call select_from_repositories,lib/import/import-libdrm.mk) SRC_CC := ioctl_etnaviv.cc diff --git a/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc b/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc index 8663f29536..0a15bc2749 100644 --- a/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc +++ b/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc @@ -21,6 +21,8 @@ #include #include +#include + extern "C" { #include #include @@ -320,14 +322,14 @@ class Gpu::Call Call(Call const &) = delete; Call &operator=(Call const &) = delete; - Genode::Env &_env; + Genode::Env &_env { *vfs_gpu_env() }; Genode::Heap _heap { _env.ram(), _env.rm() }; /***************** ** Gpu session ** *****************/ - Gpu::Connection _gpu_session; + Gpu::Connection _gpu_session { _env }; Gpu::Info_etnaviv const &_gpu_info { *_gpu_session.attached_info() }; @@ -629,10 +631,7 @@ class Gpu::Call public: - Call(Env &env) - : - _env { env }, - _gpu_session { _env } + Call() { try { _exec_buffer.construct(_gpu_session, @@ -677,9 +676,16 @@ class Gpu::Call static Genode::Constructible _drm; -void drm_init(Genode::Env &env) +void drm_init() { - _drm.construct(env); + struct ::stat buf; + if (stat("/dev/gpu", &buf) < 0) { + Genode::error("'/dev/gpu' not accessible: ", + "try configure '' in 'dev' directory of VFS'"); + return; + } + + _drm.construct(); } diff --git a/repos/libports/src/lib/mesa/etnaviv/drm_init.cc b/repos/libports/src/lib/mesa/etnaviv/drm_init.cc index a49db15b3a..027c8459a5 100644 --- a/repos/libports/src/lib/mesa/etnaviv/drm_init.cc +++ b/repos/libports/src/lib/mesa/etnaviv/drm_init.cc @@ -19,9 +19,9 @@ extern "C" { #include } -extern void drm_init(Genode::Env &env); +extern void drm_init(); void genode_drm_init() { - drm_init(*genode_env); + drm_init(); } From d2c26fd504e470717c8c70996f61843134f43712 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Fri, 15 Jul 2022 16:44:15 +0200 Subject: [PATCH 098/354] libdrm: introducde DRM dispatcher The dispatcher will select between the various DRM drivers. For now it is only used by the etnaviv driver. Issue #4559. --- .../libports/include/libdrm/ioctl_dispatch.h | 24 +++++ repos/libports/lib/import/import-libdrm.mk | 1 + repos/libports/lib/mk/libdrm.inc | 2 + repos/libports/lib/mk/spec/arm_v8/libdrm.mk | 2 +- repos/libports/recipes/api/libdrm/content.mk | 2 + repos/libports/recipes/src/libdrm/content.mk | 2 + .../libports/src/lib/libdrm/ioctl_dispatch.cc | 98 +++++++++++++++++++ .../libports/src/lib/libdrm/ioctl_etnaviv.cc | 70 ++++++------- .../libports/src/lib/mesa/etnaviv/drm_init.cc | 8 +- 9 files changed, 162 insertions(+), 47 deletions(-) create mode 100644 repos/libports/include/libdrm/ioctl_dispatch.h create mode 100644 repos/libports/src/lib/libdrm/ioctl_dispatch.cc diff --git a/repos/libports/include/libdrm/ioctl_dispatch.h b/repos/libports/include/libdrm/ioctl_dispatch.h new file mode 100644 index 0000000000..182961b55d --- /dev/null +++ b/repos/libports/include/libdrm/ioctl_dispatch.h @@ -0,0 +1,24 @@ +/* + * \brief Libdrm ioctl back end dispatcher + * \author Josef Soentgen + * \date 2022-07-15 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + + +#ifndef _INCLUDE__LIBDRM__IOCTL_DISPATCH_H_ +#define _INCLUDE__LIBDRM__IOCTL_DISPATCH_H_ + +namespace Libdrm { + enum Driver { INVALID, ETNAVIV }; +}; /* namespace Libdrm */ + +void drm_init(Libdrm::Driver); + +#endif /* #ifndef _INCLUDE__LIBDRM__IOCTL_DISPATCH_H_ */ diff --git a/repos/libports/lib/import/import-libdrm.mk b/repos/libports/lib/import/import-libdrm.mk index 2e233fbbb4..e9761840d1 100644 --- a/repos/libports/lib/import/import-libdrm.mk +++ b/repos/libports/lib/import/import-libdrm.mk @@ -5,6 +5,7 @@ DRM_SRC_DIR = $(call select_from_ports,libdrm)/src/lib/libdrm endif INC_DIR += $(DRM_SRC_DIR) +INC_DIR += $(DRM_SRC_DIR)/include INC_DIR += $(addprefix $(DRM_SRC_DIR)/,include/etnaviv include/drm include) INC_DIR += $(addprefix $(DRM_SRC_DIR)/,etnaviv) INC_DIR += $(addprefix $(DRM_SRC_DIR)/,iris) diff --git a/repos/libports/lib/mk/libdrm.inc b/repos/libports/lib/mk/libdrm.inc index c2b873a469..36e9a5b868 100644 --- a/repos/libports/lib/mk/libdrm.inc +++ b/repos/libports/lib/mk/libdrm.inc @@ -2,9 +2,11 @@ LIB_DIR := $(REP_DIR)/src/lib/libdrm # include before to shadow libdrm_macros.h INC_DIR += $(LIB_DIR)/include +INC_DIR += $(REP_DIR)/src/lib/libdrm LIBDRM_PORT_DIR := $(call select_from_ports,libdrm)/src/lib/libdrm +REP_INC_DIR += include/libdrm REP_INC_DIR += include/drm LIBS := libc diff --git a/repos/libports/lib/mk/spec/arm_v8/libdrm.mk b/repos/libports/lib/mk/spec/arm_v8/libdrm.mk index ebc65c86eb..38d22b67ed 100644 --- a/repos/libports/lib/mk/spec/arm_v8/libdrm.mk +++ b/repos/libports/lib/mk/spec/arm_v8/libdrm.mk @@ -4,4 +4,4 @@ LIBS += vfs_gpu include $(call select_from_repositories,lib/import/import-libdrm.mk) -SRC_CC := ioctl_etnaviv.cc +SRC_CC := ioctl_dispatch.cc ioctl_etnaviv.cc diff --git a/repos/libports/recipes/api/libdrm/content.mk b/repos/libports/recipes/api/libdrm/content.mk index 9938d01386..3790641f41 100644 --- a/repos/libports/recipes/api/libdrm/content.mk +++ b/repos/libports/recipes/api/libdrm/content.mk @@ -19,6 +19,8 @@ include: cp -r $(PORT_DIR)/src/lib/libdrm/intel/*.h $@/intel mkdir -p $@/etnaviv cp -r $(PORT_DIR)/src/lib/libdrm/etnaviv/*.h $@/etnaviv + mkdir -p $@/libdrm + cp $(REP_DIR)/include/libdrm/ioctl_dispatch.h $@/libdrm content: LICENSE diff --git a/repos/libports/recipes/src/libdrm/content.mk b/repos/libports/recipes/src/libdrm/content.mk index 9810c29aef..7872ba245b 100644 --- a/repos/libports/recipes/src/libdrm/content.mk +++ b/repos/libports/recipes/src/libdrm/content.mk @@ -2,11 +2,13 @@ MIRROR_FROM_REP_DIR := lib/mk/libdrm.mk \ lib/mk/libdrm.inc \ lib/mk/spec/arm_v8/libdrm.mk \ lib/mk/spec/x86_64/libdrm.mk \ + include/libdrm/ioctl_dispatch.h \ src/lib/libdrm/include \ src/lib/libdrm/dummies.c \ src/lib/libdrm/ioctl_dummy.cc \ src/lib/libdrm/ioctl_iris.cc \ src/lib/libdrm/ioctl_etnaviv.cc \ + src/lib/libdrm/ioctl_dispatch.cc content: $(MIRROR_FROM_REP_DIR) src/lib/libdrm/target.mk diff --git a/repos/libports/src/lib/libdrm/ioctl_dispatch.cc b/repos/libports/src/lib/libdrm/ioctl_dispatch.cc new file mode 100644 index 0000000000..0f8fee1b41 --- /dev/null +++ b/repos/libports/src/lib/libdrm/ioctl_dispatch.cc @@ -0,0 +1,98 @@ +/* + * \brief DRM ioctl back end dispatcher + * \author Josef Soentgen + * \date 2022-07-15 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* Genode includes */ +#include +#include + +extern "C" { +#include +#include +#include +#include +#include +#include +#include +} + + +/* etnaviv driver */ + +extern void etnaviv_drm_init(); +extern int etnaviv_drm_ioctl(unsigned long, void *); +extern void *etnaviv_drm_mmap(off_t, size_t); +extern int etnaviv_drm_munmap(void *); + + +static Libdrm::Driver drm_backend_type = Libdrm::Driver::INVALID; + + +/** + * Initialize DRM back end and set type + */ +void drm_init(Libdrm::Driver driver) +{ + switch (driver) { + case Libdrm::Driver::ETNAVIV: + etnaviv_drm_init(); + drm_backend_type = Libdrm::Driver::ETNAVIV; + break; + default: + Genode::error(__func__, ": unknown back end, abort"); + abort(); + } +} + + +/** + * Perfom I/O control request + */ +extern "C" int genode_ioctl(int /* fd */, unsigned long request, void *arg) +{ + switch (drm_backend_type) { + case Libdrm::Driver::ETNAVIV: return etnaviv_drm_ioctl(request, arg); + default: return -1; + } +} + + +/** + * Map DRM buffer-object + */ +extern "C" void *drm_mmap(void *addr, size_t length, int prot, int flags, + int fd, off_t offset) +{ + (void)addr; + (void)prot; + (void)flags; + (void)fd; + + switch (drm_backend_type) { + case Libdrm::Driver::ETNAVIV: return etnaviv_drm_mmap(offset, length); + default: return NULL; + } +} + + +/** + * Unmap DRM buffer-object + */ +extern "C" int drm_munmap(void *addr, size_t length) +{ + (void)length; + + switch (drm_backend_type) { + case Libdrm::Driver::ETNAVIV: return etnaviv_drm_munmap(addr); + default: return -1; + } +} diff --git a/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc b/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc index 0a15bc2749..f8a0994926 100644 --- a/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc +++ b/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc @@ -24,6 +24,8 @@ #include extern "C" { +#include +#include #include #include #include @@ -36,6 +38,7 @@ extern "C" { enum { verbose_ioctl = false }; +namespace { /** * Get DRM command number @@ -105,8 +108,10 @@ const char *command_name(unsigned long request) } } +} /* anonymous namespace */ -namespace Drm { + +namespace Etnaviv { size_t get_payload_size(drm_etnaviv_gem_submit const &submit); @@ -128,7 +133,7 @@ namespace Drm { } /* anonymous namespace */ -size_t Drm::get_payload_size(drm_etnaviv_gem_submit const &submit) +size_t Etnaviv::get_payload_size(drm_etnaviv_gem_submit const &submit) { size_t size = 0; @@ -141,7 +146,7 @@ size_t Drm::get_payload_size(drm_etnaviv_gem_submit const &submit) } -void Drm::serialize(drm_etnaviv_gem_submit *submit, char *content) +void Etnaviv::serialize(drm_etnaviv_gem_submit *submit, char *content) { size_t offset = 0; @@ -204,7 +209,7 @@ void Drm::serialize(drm_etnaviv_gem_submit *submit, char *content) } -size_t Drm::get_payload_size(drm_version const &version) +size_t Etnaviv::get_payload_size(drm_version const &version) { size_t size = 0; size += version.name_len; @@ -214,7 +219,7 @@ size_t Drm::get_payload_size(drm_version const &version) } -void Drm::serialize(drm_version *version, char *content) +void Etnaviv::serialize(drm_version *version, char *content) { size_t offset = 0; char *start = 0; @@ -236,7 +241,7 @@ void Drm::serialize(drm_version *version, char *content) } -void Drm::deserialize(drm_version *version, char *content) +void Etnaviv::deserialize(drm_version *version, char *content) { drm_version *cversion = reinterpret_cast(content); @@ -258,8 +263,9 @@ void Drm::deserialize(drm_version *version, char *content) } -namespace Gpu { +namespace Etnaviv { using namespace Genode; + using namespace Gpu; struct Call; } /* namespace Gpu */ @@ -269,16 +275,16 @@ struct Gpu::Buffer { Gpu::Connection &_gpu; - Id_space::Element const _elem; + Genode::Id_space::Element const _elem; - Dataspace_capability const cap; - size_t const size; + Genode::Dataspace_capability const cap; + size_t const size; - Constructible _attached_buffer { }; + Genode::Constructible _attached_buffer { }; - Buffer(Gpu::Connection &gpu, - size_t size, - Id_space &space) + Buffer(Gpu::Connection &gpu, + size_t size, + Genode::Id_space &space) : _gpu { gpu }, _elem { *this, space }, @@ -312,7 +318,7 @@ struct Gpu::Buffer }; -class Gpu::Call +class Etnaviv::Call { private: @@ -477,7 +483,7 @@ class Gpu::Call int _drm_etnaviv_gem_submit(drm_etnaviv_gem_submit &arg) { - size_t const payload_size = Drm::get_payload_size(arg); + size_t const payload_size = Etnaviv::get_payload_size(arg); if (payload_size > EXEC_BUFFER_SIZE) { Genode::error(__func__, ": exec buffer too small (", (unsigned)EXEC_BUFFER_SIZE, ") needed ", payload_size); @@ -490,7 +496,7 @@ class Gpu::Call */ char *local_exec_buffer = (char*)_exec_buffer->mmap_addr(); Genode::memset(local_exec_buffer, 0, EXEC_BUFFER_SIZE); - Drm::serialize(&arg, local_exec_buffer); + Etnaviv::serialize(&arg, local_exec_buffer); try { Genode::uint64_t const pending_exec_buffer = @@ -673,10 +679,10 @@ class Gpu::Call }; -static Genode::Constructible _drm; +static Genode::Constructible _drm; -void drm_init() +void etnaviv_drm_init() { struct ::stat buf; if (stat("/dev/gpu", &buf) < 0) { @@ -689,9 +695,6 @@ void drm_init() } -/** - * Dump I/O control request to LOG - */ static void dump_ioctl(unsigned long request) { using namespace Genode; @@ -705,10 +708,7 @@ static void dump_ioctl(unsigned long request) } -/** - * Perfom I/O control request - */ -extern "C" int genode_ioctl(int /* fd */, unsigned long request, void *arg) +int etnaviv_drm_ioctl(unsigned long request, void *arg) { if (verbose_ioctl) dump_ioctl(request); @@ -726,28 +726,14 @@ extern "C" int genode_ioctl(int /* fd */, unsigned long request, void *arg) } -/** - * Map DRM buffer-object - */ -void *drm_mmap(void *addr, size_t length, int prot, int flags, - int fd, off_t offset) +void *etnaviv_drm_mmap(off_t offset, size_t length) { - (void)addr; - (void)prot; - (void)flags; - (void)fd; - return _drm->mmap(offset, length); } -/** - * Unmap DRM buffer-object - */ -int drm_munmap(void *addr, size_t length) +int etnaviv_drm_munmap(void *addr) { - (void)length; - _drm->munmap(addr); return 0; } diff --git a/repos/libports/src/lib/mesa/etnaviv/drm_init.cc b/repos/libports/src/lib/mesa/etnaviv/drm_init.cc index 027c8459a5..90a8306551 100644 --- a/repos/libports/src/lib/mesa/etnaviv/drm_init.cc +++ b/repos/libports/src/lib/mesa/etnaviv/drm_init.cc @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2021 Genode Labs GmbH + * Copyright (C) 2021-2022 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. @@ -15,13 +15,13 @@ #include <../include/util/list.h> #include +#include + extern "C" { #include } -extern void drm_init(); - void genode_drm_init() { - drm_init(); + drm_init(Libdrm::Driver::ETNAVIV); } From da25b288eef7e69786b8aef03f9b01b68ffdff87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 7 Jul 2022 17:35:21 +0200 Subject: [PATCH 099/354] libports: add mesa/lima driver This commit introduces the Mesa3D lima driver for Mali 400 series GPUs. Issue #4559. --- .../libports/include/libdrm/ioctl_dispatch.h | 2 +- repos/libports/lib/mk/mesa.inc | 4 + repos/libports/lib/mk/spec/arm_v8/libdrm.mk | 3 +- repos/libports/lib/mk/spec/arm_v8/lima.mk | 64 ++ repos/libports/lib/mk/spec/arm_v8/mesa.mk | 9 +- .../lib/mk/spec/arm_v8/mesa_gpu-lima.mk | 19 + repos/libports/ports/mesa.hash | 2 +- repos/libports/ports/mesa.port | 16 +- repos/libports/recipes/src/libdrm/content.mk | 3 +- repos/libports/recipes/src/libdrm/used_apis | 1 + repos/libports/recipes/src/mesa/content.mk | 2 + .../libports/src/lib/libdrm/ioctl_dispatch.cc | 32 + repos/libports/src/lib/libdrm/ioctl_lima.cc | 864 ++++++++++++++++++ repos/libports/src/lib/mesa/files.list | 67 ++ repos/libports/src/lib/mesa/lima/drm_init.cc | 27 + .../src/lib/mesa/lima/platform_lima.c | 269 ++++++ repos/libports/src/lib/mesa/lima/target.mk | 3 + .../libports/src/lib/mesa/patches/lima.patch | 12 + .../src/lib/mesa/patches/sync_wait.patch | 20 + 19 files changed, 1408 insertions(+), 11 deletions(-) create mode 100644 repos/libports/lib/mk/spec/arm_v8/lima.mk create mode 100644 repos/libports/lib/mk/spec/arm_v8/mesa_gpu-lima.mk create mode 100644 repos/libports/src/lib/libdrm/ioctl_lima.cc create mode 100644 repos/libports/src/lib/mesa/lima/drm_init.cc create mode 100644 repos/libports/src/lib/mesa/lima/platform_lima.c create mode 100644 repos/libports/src/lib/mesa/lima/target.mk create mode 100644 repos/libports/src/lib/mesa/patches/lima.patch create mode 100644 repos/libports/src/lib/mesa/patches/sync_wait.patch diff --git a/repos/libports/include/libdrm/ioctl_dispatch.h b/repos/libports/include/libdrm/ioctl_dispatch.h index 182961b55d..df238795da 100644 --- a/repos/libports/include/libdrm/ioctl_dispatch.h +++ b/repos/libports/include/libdrm/ioctl_dispatch.h @@ -16,7 +16,7 @@ #define _INCLUDE__LIBDRM__IOCTL_DISPATCH_H_ namespace Libdrm { - enum Driver { INVALID, ETNAVIV }; + enum Driver { INVALID, ETNAVIV, LIMA }; }; /* namespace Libdrm */ void drm_init(Libdrm::Driver); diff --git a/repos/libports/lib/mk/mesa.inc b/repos/libports/lib/mk/mesa.inc index 86c4447a03..ba3271f4b8 100644 --- a/repos/libports/lib/mk/mesa.inc +++ b/repos/libports/lib/mk/mesa.inc @@ -232,6 +232,7 @@ SRC_C += compiler/glsl/glcpp/pp.c \ compiler/nir/nir_lower_drawpixels.c \ compiler/nir/nir_lower_flatshade.c \ compiler/nir/nir_lower_flrp.c \ + compiler/nir/nir_lower_fragcoord_wtrans.c \ compiler/nir/nir_lower_frexp.c \ compiler/nir/nir_lower_global_vars_to_local.c \ compiler/nir/nir_lower_goto_ifs.c \ @@ -253,6 +254,7 @@ SRC_C += compiler/glsl/glcpp/pp.c \ compiler/nir/nir_lower_patch_vertices.c \ compiler/nir/nir_lower_phis_to_scalar.c \ compiler/nir/nir_lower_pntc_ytransform.c \ + compiler/nir/nir_lower_point_size.c \ compiler/nir/nir_lower_point_size_mov.c \ compiler/nir/nir_lower_regs_to_ssa.c \ compiler/nir/nir_lower_returns.c \ @@ -268,6 +270,7 @@ SRC_C += compiler/glsl/glcpp/pp.c \ compiler/nir/nir_lower_variable_initializers.c \ compiler/nir/nir_lower_vars_to_ssa.c \ compiler/nir/nir_lower_vec_to_movs.c \ + compiler/nir/nir_lower_viewport_transform.c \ compiler/nir/nir_lower_wpos_ytransform.c \ compiler/nir/nir_metadata.c \ compiler/nir/nir_move_vec_src_uses_to_dest.c \ @@ -448,6 +451,7 @@ SRC_C += compiler/glsl/glcpp/pp.c \ gallium/auxiliary/util/u_sampler.c \ gallium/auxiliary/util/u_screen.c \ gallium/auxiliary/util/u_simple_shaders.c \ + gallium/auxiliary/util/u_split_draw.c \ gallium/auxiliary/util/u_surface.c \ gallium/auxiliary/util/u_tests.c \ gallium/auxiliary/util/u_texture.c \ diff --git a/repos/libports/lib/mk/spec/arm_v8/libdrm.mk b/repos/libports/lib/mk/spec/arm_v8/libdrm.mk index 38d22b67ed..36683650b4 100644 --- a/repos/libports/lib/mk/spec/arm_v8/libdrm.mk +++ b/repos/libports/lib/mk/spec/arm_v8/libdrm.mk @@ -3,5 +3,6 @@ include $(REP_DIR)/lib/mk/libdrm.inc LIBS += vfs_gpu include $(call select_from_repositories,lib/import/import-libdrm.mk) +include $(call select_from_repositories,lib/import/import-mesa_api.mk) -SRC_CC := ioctl_dispatch.cc ioctl_etnaviv.cc +SRC_CC := ioctl_dispatch.cc ioctl_etnaviv.cc ioctl_lima.cc diff --git a/repos/libports/lib/mk/spec/arm_v8/lima.mk b/repos/libports/lib/mk/spec/arm_v8/lima.mk new file mode 100644 index 0000000000..21493852b6 --- /dev/null +++ b/repos/libports/lib/mk/spec/arm_v8/lima.mk @@ -0,0 +1,64 @@ +LIBS = libc libdrm + +include $(REP_DIR)/lib/mk/mesa-common.inc + +INC_DIR += $(MESA_SRC_DIR)/src/compiler/nir \ + $(MESA_SRC_DIR)/src/gallium/auxiliary \ + $(MESA_SRC_DIR)/src/gallium/drivers \ + $(MESA_SRC_DIR)/src/gallium/drivers/lima \ + $(MESA_SRC_DIR)/src/panfrost/shared \ + $(MESA_SRC_DIR)/src/util \ + $(MESA_GEN_DIR)/src/compiler/nir \ + $(MESA_PORT_DIR)/include/drm-uapi + +REP_INC_DIR += include/drm-uapi + +SRC_C := \ + gallium/drivers/lima/lima_draw.c \ + gallium/drivers/lima/lima_job.c \ + gallium/drivers/lima/lima_context.c \ + gallium/drivers/lima/ir/pp/node_to_instr.c \ + gallium/drivers/lima/ir/pp/liveness.c \ + gallium/drivers/lima/ir/pp/codegen.c \ + gallium/drivers/lima/ir/pp/nir.c \ + gallium/drivers/lima/ir/pp/disasm.c \ + gallium/drivers/lima/ir/pp/regalloc.c \ + gallium/drivers/lima/ir/pp/node.c \ + gallium/drivers/lima/ir/pp/instr.c \ + gallium/drivers/lima/ir/pp/lower.c \ + gallium/drivers/lima/ir/pp/scheduler.c \ + gallium/drivers/lima/ir/gp/codegen.c \ + gallium/drivers/lima/ir/gp/nir.c \ + gallium/drivers/lima/ir/gp/disasm.c \ + gallium/drivers/lima/ir/gp/regalloc.c \ + gallium/drivers/lima/ir/gp/optimize.c \ + gallium/drivers/lima/ir/gp/node.c \ + gallium/drivers/lima/ir/gp/reduce_scheduler.c \ + gallium/drivers/lima/ir/gp/instr.c \ + gallium/drivers/lima/ir/gp/lower.c \ + gallium/drivers/lima/ir/gp/scheduler.c \ + gallium/drivers/lima/ir/lima_nir_split_load_input.c \ + gallium/drivers/lima/ir/lima_nir_duplicate_consts.c \ + gallium/drivers/lima/ir/lima_nir_duplicate_intrinsic.c \ + gallium/drivers/lima/ir/lima_nir_lower_uniform_to_scalar.c \ + gallium/drivers/lima/lima_bo.c \ + gallium/drivers/lima/lima_context.c \ + gallium/drivers/lima/lima_draw.c \ + gallium/drivers/lima/lima_fence.c \ + gallium/drivers/lima/lima_format.c \ + gallium/drivers/lima/lima_job.c \ + gallium/drivers/lima/lima_parser.c \ + gallium/drivers/lima/lima_program.c \ + gallium/drivers/lima/lima_query.c \ + gallium/drivers/lima/lima_resource.c \ + gallium/drivers/lima/lima_screen.c \ + gallium/drivers/lima/lima_state.c \ + gallium/drivers/lima/lima_texture.c \ + gallium/drivers/lima/lima_util.c \ + gallium/drivers/lima/lima_nir_algebraic.c \ + gallium/winsys/lima/drm/lima_drm_winsys.c \ + panfrost/shared/pan_minmax_cache.c \ + panfrost/shared/pan_tiling.c + +vpath %.c $(MESA_SRC_DIR)/src +vpath %.c $(MESA_SRC_DIR)/../../../generated/src diff --git a/repos/libports/lib/mk/spec/arm_v8/mesa.mk b/repos/libports/lib/mk/spec/arm_v8/mesa.mk index f8874ce1cf..ff57794caf 100644 --- a/repos/libports/lib/mk/spec/arm_v8/mesa.mk +++ b/repos/libports/lib/mk/spec/arm_v8/mesa.mk @@ -1,10 +1,13 @@ SHARED_LIB := yes LIBS += libdrm -LIBS += etnaviv +CC_OPT += -DHAVE_UINT128 -CC_OPT += -DGALLIUM_ETNAVIV \ - -DHAVE_UINT128 +LIBS += etnaviv +CC_OPT += -DGALLIUM_ETNAVIV + +LIBS += lima +CC_OPT += -DGALLIUM_LIMA include $(REP_DIR)/lib/mk/mesa.inc diff --git a/repos/libports/lib/mk/spec/arm_v8/mesa_gpu-lima.mk b/repos/libports/lib/mk/spec/arm_v8/mesa_gpu-lima.mk new file mode 100644 index 0000000000..d88c593519 --- /dev/null +++ b/repos/libports/lib/mk/spec/arm_v8/mesa_gpu-lima.mk @@ -0,0 +1,19 @@ +SHARED_LIB := yes +LIBS := libc egl + +include $(REP_DIR)/lib/mk/mesa-common.inc + +SRC_CC := drm_init.cc +SRC_C := platform_lima.c + +CC_OPT += -DHAVE_GENODE_PLATFORM + +INC_DIR += $(MESA_SRC_DIR)/src/egl/drivers/dri2 \ + $(MESA_SRC_DIR)/src/egl/main \ + $(MESA_SRC_DIR)/src/mapi \ + $(MESA_SRC_DIR)/src/mesa + +vpath %.c $(LIB_DIR)/lima +vpath %.cc $(LIB_DIR)/lima + +CC_CXX_WARN_STRICT := diff --git a/repos/libports/ports/mesa.hash b/repos/libports/ports/mesa.hash index 2b978bef9b..10cd30a7c9 100644 --- a/repos/libports/ports/mesa.hash +++ b/repos/libports/ports/mesa.hash @@ -1 +1 @@ -2a8726a52ca7b243fcf40d07da28a52aba4c767f +a195203391df18dabe0e9c247301d9f3df1c8192 diff --git a/repos/libports/ports/mesa.port b/repos/libports/ports/mesa.port index 63de2f8adb..ffb87f3a4d 100644 --- a/repos/libports/ports/mesa.port +++ b/repos/libports/ports/mesa.port @@ -23,15 +23,17 @@ PATCHES := src/lib/mesa/patches/bitset_redefined.patch \ src/lib/mesa/patches/lseek.patch \ src/lib/mesa/patches/mesa.patch \ src/lib/mesa/patches/os_mmap.patch \ - src/lib/mesa/patches/softpipe_cache.patch + src/lib/mesa/patches/softpipe_cache.patch \ + src/lib/mesa/patches/lima.patch \ + src/lib/mesa/patches/sync_wait.patch PATCH_OPT := -p1 # # Generated Mesa sources # -URL(generated) = https://github.com/ssumpf/mesa_generated.git -REV(generated) = 396d4b08cbcff941126640e6d3e3d2a5f807d527 +URL(generated) = https://github.com/cnuke/mesa_generated.git +REV(generated) = c3954da3f66d6cb961421f03c09d589faade1784 DIR(generated) = generated # @@ -110,7 +112,8 @@ generated_files = $(GEN_TARGET)/src/compiler/glsl/float64_glsl.h \ $(GEN_TARGET)/src/intel/genxml/genX_bits.h \ $(GEN_TARGET)/src/intel/genxml/genX_xml.h \ $(GEN_TARGET)/src/intel/isl/isl_format_layout.c \ - $(GEN_TARGET)/src/intel/perf/gen_perf_metrics.h + $(GEN_TARGET)/src/intel/perf/gen_perf_metrics.h \ + $(GEN_TARGET)/src/gallium/drivers/lima/lima_nir_algebraic.c # # Print message and create directory @@ -345,6 +348,11 @@ $(GEN_TARGET)/src/intel/perf/gen_perf_metrics.h: $(SRC)/src/intel/perf/oa-sklgt4.xml \ $(SRC)/src/intel/perf/oa-tgl.xml +$(GEN_TARGET)/src/gallium/drivers/lima/lima_nir_algebraic.c: + $(MSG_DIR) + $(VERBOSE)$(PYTHON) $(SRC)/src/gallium/drivers/lima/ir/lima_nir_algebraic.py \ + -p $(SRC)/src/compiler/nir/ > $@ + CMD(glcpp-lex.c) = glcpp-lex.l CMD(glsl_lexer.cpp) = glsl_lexer.ll CMD(lex.yy.c) = program_lexer.l diff --git a/repos/libports/recipes/src/libdrm/content.mk b/repos/libports/recipes/src/libdrm/content.mk index 7872ba245b..58fed75624 100644 --- a/repos/libports/recipes/src/libdrm/content.mk +++ b/repos/libports/recipes/src/libdrm/content.mk @@ -8,7 +8,8 @@ MIRROR_FROM_REP_DIR := lib/mk/libdrm.mk \ src/lib/libdrm/ioctl_dummy.cc \ src/lib/libdrm/ioctl_iris.cc \ src/lib/libdrm/ioctl_etnaviv.cc \ - src/lib/libdrm/ioctl_dispatch.cc + src/lib/libdrm/ioctl_dispatch.cc \ + src/lib/libdrm/ioctl_lima.cc content: $(MIRROR_FROM_REP_DIR) src/lib/libdrm/target.mk diff --git a/repos/libports/recipes/src/libdrm/used_apis b/repos/libports/recipes/src/libdrm/used_apis index d33079a30a..5f9364f5c4 100644 --- a/repos/libports/recipes/src/libdrm/used_apis +++ b/repos/libports/recipes/src/libdrm/used_apis @@ -2,3 +2,4 @@ base gpu_session libc vfs_gpu +mesa diff --git a/repos/libports/recipes/src/mesa/content.mk b/repos/libports/recipes/src/mesa/content.mk index 8c55501d84..21fc2bfd8a 100644 --- a/repos/libports/recipes/src/mesa/content.mk +++ b/repos/libports/recipes/src/mesa/content.mk @@ -12,8 +12,10 @@ MIRROR_FROM_REP_DIR := \ lib/mk/mesa-common.inc \ lib/mk/softpipe.mk \ lib/mk/spec/arm_v8/etnaviv.mk \ + lib/mk/spec/arm_v8/lima.mk \ lib/mk/spec/arm_v8/mesa.mk \ lib/mk/spec/arm_v8/mesa_gpu-etnaviv.mk \ + lib/mk/spec/arm_v8/mesa_gpu-lima.mk \ lib/mk/spec/x86/mesa_gpu-iris.mk \ lib/mk/spec/x86/iris.mk \ lib/mk/spec/x86/iris_gen110.mk \ diff --git a/repos/libports/src/lib/libdrm/ioctl_dispatch.cc b/repos/libports/src/lib/libdrm/ioctl_dispatch.cc index 0f8fee1b41..6932529e39 100644 --- a/repos/libports/src/lib/libdrm/ioctl_dispatch.cc +++ b/repos/libports/src/lib/libdrm/ioctl_dispatch.cc @@ -33,6 +33,14 @@ extern int etnaviv_drm_ioctl(unsigned long, void *); extern void *etnaviv_drm_mmap(off_t, size_t); extern int etnaviv_drm_munmap(void *); +/* lima driver */ + +extern void lima_drm_init(); +extern int lima_drm_ioctl(unsigned long, void *); +extern void *lima_drm_mmap(off_t, size_t); +extern int lima_drm_munmap(void *); +extern int lima_drm_poll(int); + static Libdrm::Driver drm_backend_type = Libdrm::Driver::INVALID; @@ -47,6 +55,10 @@ void drm_init(Libdrm::Driver driver) etnaviv_drm_init(); drm_backend_type = Libdrm::Driver::ETNAVIV; break; + case Libdrm::Driver::LIMA: + lima_drm_init(); + drm_backend_type = Libdrm::Driver::LIMA; + break; default: Genode::error(__func__, ": unknown back end, abort"); abort(); @@ -61,6 +73,7 @@ extern "C" int genode_ioctl(int /* fd */, unsigned long request, void *arg) { switch (drm_backend_type) { case Libdrm::Driver::ETNAVIV: return etnaviv_drm_ioctl(request, arg); + case Libdrm::Driver::LIMA: return lima_drm_ioctl(request, arg); default: return -1; } } @@ -79,6 +92,7 @@ extern "C" void *drm_mmap(void *addr, size_t length, int prot, int flags, switch (drm_backend_type) { case Libdrm::Driver::ETNAVIV: return etnaviv_drm_mmap(offset, length); + case Libdrm::Driver::LIMA: return lima_drm_mmap(offset, length); default: return NULL; } } @@ -93,6 +107,24 @@ extern "C" int drm_munmap(void *addr, size_t length) switch (drm_backend_type) { case Libdrm::Driver::ETNAVIV: return etnaviv_drm_munmap(addr); + case Libdrm::Driver::LIMA: return lima_drm_munmap(addr); + default: return -1; + } +} + + +extern "C" int drm_poll(struct pollfd *fds, nfds_t nfds, int timeout) +{ + (void)timeout; + + if (nfds > 1) { + Genode::error(__func__, ": cannot handle more the 1 pollfd"); + return -1; + } + + switch (drm_backend_type) { + case Libdrm::Driver::ETNAVIV: return -1; + case Libdrm::Driver::LIMA: return lima_drm_poll(fds[0].fd); default: return -1; } } diff --git a/repos/libports/src/lib/libdrm/ioctl_lima.cc b/repos/libports/src/lib/libdrm/ioctl_lima.cc new file mode 100644 index 0000000000..358f0a0b06 --- /dev/null +++ b/repos/libports/src/lib/libdrm/ioctl_lima.cc @@ -0,0 +1,864 @@ +/* + * \brief DRM ioctl backend + * \author Sebastian Sumpf + * \author Josef Soentgen + * \date 2017-05-10 + */ + +/* + * Copyright (C) 2017-2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* Genode includes */ +#include +#include +#include +#include +#include +#include +#include + +#include + +extern "C" { +#include +#include +#include +#include +#include +#include + +#include +#include +#include +} + + +enum { verbose_ioctl = false }; + + +/** + * Get DRM command number + */ +static unsigned long constexpr command_number(unsigned long request) +{ + return request & 0xffu; +} + + +/** + * Get device specific command number + */ +static unsigned long device_number(unsigned long request) +{ + return command_number(request) - DRM_COMMAND_BASE; +} + + +/** + * Check if request is device command + */ +static bool device_ioctl(unsigned long request) +{ + long const cmd = command_number(request); + return cmd >= DRM_COMMAND_BASE && cmd < DRM_COMMAND_END; +} + + +/** + * Return name of DRM command + */ +const char *command_name(unsigned long request) +{ + if (IOCGROUP(request) != DRM_IOCTL_BASE) + return ""; + + if (!device_ioctl(request)) { + switch (command_number(request)) { + case command_number(DRM_IOCTL_GEM_CLOSE): return "DRM_IOCTL_GEM_CLOSE"; + case command_number(DRM_IOCTL_GEM_FLINK): return "DRM_IOCTL_GEM_FLINK"; + case command_number(DRM_IOCTL_GEM_OPEN): return "DRM_IOCTL_GEM_OPEN"; + case command_number(DRM_IOCTL_GET_CAP): return "DRM_IOCTL_GET_CAP"; + case command_number(DRM_IOCTL_GET_UNIQUE): return "DRM_IOCTL_GET_UNIQUE"; + case command_number(DRM_IOCTL_PRIME_FD_TO_HANDLE): return "DRM_IOCTL_PRIME_FD_TO_HANDLE"; + case command_number(DRM_IOCTL_PRIME_HANDLE_TO_FD): return "DRM_IOCTL_PRIME_HANDLE_TO_FD"; + case command_number(DRM_IOCTL_SYNCOBJ_CREATE): return "DRM_IOCTL_SYNCOBJ_CREATE"; + case command_number(DRM_IOCTL_SYNCOBJ_DESTROY): return "DRM_IOCTL_SYNCOBJ_DESTROY"; + case command_number(DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD): return "DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD"; + case command_number(DRM_IOCTL_VERSION): return "DRM_IOCTL_VERSION"; + default: return ""; + } + } + + switch (device_number(request)) { + case DRM_LIMA_CTX_CREATE: return "DRM_LIMA_CTX_CREATE"; + case DRM_LIMA_CTX_FREE: return "DRM_LIMA_CTX_FREE"; + case DRM_LIMA_GET_PARAM: return "DRM_LIMA_GET_PARAM"; + case DRM_LIMA_GEM_CREATE: return "DRM_LIMA_GEM_CREATE"; + case DRM_LIMA_GEM_INFO: return "DRM_LIMA_GEM_INFO"; + case DRM_LIMA_GEM_SUBMIT: return "DRM_LIMA_GEM_SUBMIT"; + case DRM_LIMA_GEM_WAIT: return "DRM_LIMA_GEM_WAIT"; + default: return ""; + } +} + + +namespace Lima { + + size_t get_payload_size(drm_lima_gem_submit const &submit); + + // XXX better implement as 'size_t for_each_object(T const *t, unsigned len, FN const &fn, char *dst)' + template void for_each_object(T const *t, unsigned len, FN const &fn) + { + for (unsigned i = 0; i < len; i++) { + T const *obj = &t[i]; + fn(obj); + } + } + + void serialize(drm_lima_gem_submit *submit, char *content); + + size_t get_payload_size(drm_version const &version); + +} /* anonymous namespace */ + + +size_t Lima::get_payload_size(drm_lima_gem_submit const &submit) +{ + size_t size = 0; + + size += sizeof (drm_lima_gem_submit_bo) * submit.nr_bos; + size += submit.frame_size; + + return size; +} + + +void Lima::serialize(drm_lima_gem_submit *submit, char *content) +{ + size_t offset = 0; + + /* leave place for object itself first */ + offset += sizeof (*submit); + + /* next are the buffer-objects */ + if (submit->nr_bos) { + size_t const new_start = offset; + + auto copy_bos = [&] (drm_lima_gem_submit_bo const *bo) { + char * const dst = content + offset; + Genode::memcpy(dst, bo, sizeof (*bo)); + offset += sizeof (*bo); + }; + for_each_object((drm_lima_gem_submit_bo*)submit->bos, + submit->nr_bos, copy_bos); + submit->bos = reinterpret_cast<__u64>(new_start); + } + + /* next is the frame */ + { + size_t const new_start = offset; + + char * const dst = content + offset; + Genode::memcpy(dst, reinterpret_cast(submit->frame), submit->frame_size); + offset += submit->frame_size; + submit->frame = reinterpret_cast<__u64>(new_start); + } + + /* copy submit object last but into the front */ + Genode::memcpy(content, submit, sizeof (*submit)); +} + + +size_t Lima::get_payload_size(drm_version const &version) +{ + size_t size = 0; + size += version.name_len; + size += version.date_len; + size += version.desc_len; + return size; +} + + +namespace Lima { + using namespace Genode; + using namespace Gpu; + + struct Call; +} /* namespace Gpu */ + + +struct Gpu::Buffer +{ + Gpu::Connection &_gpu; + + Genode::Id_space::Element const _elem; + + Genode::Dataspace_capability const cap; + size_t const size; + + Genode::Constructible _attached_buffer { }; + + Buffer(Gpu::Connection &gpu, + size_t size, + Genode::Id_space &space) + : + _gpu { gpu }, + _elem { *this, space }, + cap { _gpu.alloc_buffer(_elem.id(), size) }, + size { size } + { } + + virtual ~Buffer() + { + _gpu.free_buffer(_elem.id()); + } + + bool mmap(Genode::Env &env) + { + if (!_attached_buffer.constructed()) { + _attached_buffer.construct(env.rm(), cap); + } + + return _attached_buffer.constructed(); + } + + Genode::addr_t mmap_addr() + { + return reinterpret_cast(_attached_buffer->local_addr()); + } + + Gpu::Buffer_id id() const + { + return _elem.id(); + } +}; + + +class Lima::Call +{ + private: + + /* + * Noncopyable + */ + Call(Call const &) = delete; + Call &operator=(Call const &) = delete; + + Genode::Env &_env { *vfs_gpu_env() }; + Genode::Heap _heap { _env.ram(), _env.rm() }; + + /***************** + ** Gpu session ** + *****************/ + + struct Gpu_context + { + int const fd; + unsigned long const _gpu_id; + + Gpu::Connection &_gpu { *vfs_gpu_connection(_gpu_id) }; + + using Id_space = Genode::Id_space; + Id_space::Element const _elem; + + Gpu_context(int fd, unsigned long gpu, + Genode::Id_space &space) + : fd { fd }, _gpu_id { gpu }, _elem { *this, space } { } + + virtual ~Gpu_context() + { + ::close(fd); + } + + unsigned long id() const + { + return _elem.id().value; + } + + Gpu::Connection& gpu() + { + return _gpu; + } + }; + + using Gpu_context_space = Genode::Id_space; + Gpu_context_space _gpu_context_space { }; + + Gpu_context &_create_ctx() + { + int const fd = ::open("/dev/gpu", 0); + if (fd < 0) { + Genode::error("Failed to open '/dev/gpu': ", + "try configure '' in 'dev' directory of VFS'"); + throw Gpu::Session::Invalid_state(); + } + + struct ::stat buf; + if (::fstat(fd, &buf) < 0) { + Genode::error("Could not stat '/dev/gpu'"); + ::close(fd); + throw Gpu::Session::Invalid_state(); + } + Gpu_context * context = + new (_heap) Gpu_context(fd, buf.st_ino, _gpu_context_space); + + return *context; + } + + struct Syncobj + { + /* + * Noncopyable + */ + Syncobj(Syncobj const &) = delete; + Syncobj &operator=(Syncobj const &) = delete; + + + Gpu_context *_gc { nullptr }; + Gpu::Sequence_number _seqno { 0 }; + + using Id_space = Genode::Id_space; + Id_space::Element const _elem; + + Syncobj(Id_space &space) + : _elem { *this, space } { } + + unsigned long id() const + { + return _elem.id().value; + } + + void adopt(Gpu_context &gc, Gpu::Sequence_number seqno) + { + _gc = &gc; + _seqno = seqno; + } + + Gpu_context &gpu_context() + { + if (!_gc) { + struct Invalid_gpu_context { }; + throw Invalid_gpu_context(); + } + + return *_gc; + } + + Gpu::Sequence_number seqno() const + { + return _seqno; + } + }; + Genode::Id_space _syncobj_space { }; + + struct Gpu_session + { + int const fd; + unsigned long const id; + + Gpu_session(int fd, unsigned long id) + : fd { fd }, id { id } { } + + virtual ~Gpu_session() + { + ::close(fd); + } + + Gpu::Connection &gpu() + { + return *vfs_gpu_connection(id); + } + }; + + Gpu_session _open_gpu() + { + int const fd = ::open("/dev/gpu", 0); + if (fd < 0) { + Genode::error("Failed to open '/dev/gpu': ", + "try configure '' in 'dev' directory of VFS'"); + throw Gpu::Session::Invalid_state(); + } + + struct ::stat buf; + if (::fstat(fd, &buf) < 0) { + Genode::error("Could not stat '/dev/gpu'"); + ::close(fd); + throw Gpu::Session::Invalid_state(); + } + + return Gpu_session { fd, buf.st_ino }; + } + + Gpu_session _gpu_session { _open_gpu() }; + + Gpu::Connection &_gpu { _gpu_session.gpu() }; + Gpu::Info_lima const &_gpu_info { + *_gpu.attached_info() }; + + Id_space _buffer_space { }; + + /* + * Play it safe, glmark2 apparently submits araound 110 KiB at + * some point. + */ + enum { EXEC_BUFFER_SIZE = 256u << 10 }; + Constructible _exec_buffer { }; + + void _wait_for_mapping(uint32_t handle, unsigned op) + { + Buffer_id const id { .value = handle }; + do { + if (_gpu.set_tiling(id, op)) + break; + + char buf; + (void)::read(_gpu_session.fd, &buf, sizeof(buf)); + } while (true); + } + + void _wait_for_syncobj(unsigned int handle) + { + Syncobj::Id_space::Id syncobj_id { .value = handle }; + + try { + auto wait = [&] (Syncobj &sync_obj) { + + Gpu_context &gc = sync_obj.gpu_context(); + do { + if (gc.gpu().complete(sync_obj.seqno())) + break; + + char buf; + (void)::read(gc.fd, &buf, sizeof(buf)); + } while (true); + }; + _syncobj_space.apply(syncobj_id, wait); + } catch (Genode::Id_space::Unknown_id) { } + } + + template + bool _apply_handle(uint32_t handle, FN const &fn) + { + Buffer_id const id { .value = handle }; + + bool found = false; + _buffer_space.apply(id, [&] (Buffer &b) { + fn(b); + found = true; + }); + + return found; + } + + Dataspace_capability _lookup_cap_from_handle(uint32_t handle) + { + Dataspace_capability cap { }; + auto lookup_cap = [&] (Buffer const &b) { + cap = b.cap; + }; + (void)_apply_handle(handle, lookup_cap); + return cap; + } + + /****************************** + ** Device DRM I/O controls ** + ******************************/ + + int _drm_lima_gem_info(drm_lima_gem_info &arg) + { + int result = -1; + (void)_apply_handle(arg.handle, [&] (Buffer &b) { + if (!b.mmap(_env)) + return; + arg.offset = reinterpret_cast<::uint64_t>(b.mmap_addr()); + + Gpu::addr_t const va = _gpu.query_buffer_ppgtt(b.id()); + if (va == (Gpu::addr_t)-1) + return; + arg.va = (uint32_t)va; + + result = 0; + }); + + return result; + } + + template + void _alloc_buffer(::uint64_t const size, FUNC const &fn) + { + size_t donate = size; + Buffer *buffer = nullptr; + + retry( + [&] () { + retry( + [&] () { + buffer = + new (&_heap) Buffer(_gpu, size, + _buffer_space); + }, + [&] () { + _gpu.upgrade_caps(2); + }); + }, + [&] () { + _gpu.upgrade_ram(donate); + }); + + if (buffer) + fn(*buffer); + } + + int _drm_lima_gem_create(drm_lima_gem_create &arg) + { + ::uint64_t const size = arg.size; + + try { + _alloc_buffer(size, [&](Buffer const &b) { + arg.handle = b.id().value; + }); + return 0; + } catch (...) { + return -1; + } + } + + int _drm_lima_gem_submit(drm_lima_gem_submit &arg) + { + Gpu_context::Id_space::Id ctx_id { .value = arg.ctx }; + + Syncobj::Id_space::Id syncobj_id { .value = arg.out_sync }; + + bool result = false; + _syncobj_space.apply(syncobj_id, [&] (Syncobj &sync_obj) { + + _gpu_context_space.apply(ctx_id, [&] (Gpu_context &gc) { + + size_t const payload_size = Lima::get_payload_size(arg); + if (payload_size > EXEC_BUFFER_SIZE) { + Genode::error(__func__, ": exec buffer too small (", + (unsigned)EXEC_BUFFER_SIZE, ") needed ", payload_size); + return; + } + + /* + * Copy each array flat to the exec buffer and adjust the + * addresses in the submit object. + */ + char *local_exec_buffer = (char*)_exec_buffer->mmap_addr(); + Genode::memset(local_exec_buffer, 0, EXEC_BUFFER_SIZE); + Lima::serialize(&arg, local_exec_buffer); + + try { + Gpu::Connection &gpu = gc.gpu(); + + Gpu::Sequence_number const seqno = + gpu.exec_buffer(_exec_buffer->id(), EXEC_BUFFER_SIZE); + + sync_obj.adopt(gc, seqno); + + result = true; + } catch (Gpu::Session::Invalid_state) { } + }); + }); + + return result ? 0 : -1; + } + + int _drm_lima_gem_wait(drm_lima_gem_wait &arg) + { + /* + * For the moment we do not handle timeouts + */ + (void)arg.timeout_ns; + _wait_for_mapping(arg.handle, arg.op); + return 0; + } + + int _drm_lima_get_param(drm_lima_get_param &arg) + { + if (arg.param > Gpu::Info_lima::MAX_LIMA_PARAMS) { + errno = EINVAL; + return -1; + } + + arg.value = _gpu_info.param[arg.param]; + return 0; + } + + int _drm_lima_ctx_create(drm_lima_ctx_create &arg) + { + try { + Gpu_context &ctx = _create_ctx(); + + arg.id = ctx.id(); + return 0; + } catch (... /* intentional catch-all ... */) { + /* ... as the lima GPU driver will not throw */ + } + return -1; + } + + int _drm_lima_ctx_free(drm_lima_ctx_free &arg) + { + Gpu_context::Id_space::Id id { .value = arg.id }; + + bool result = false; + auto free_ctx = [&] (Gpu_context &ctx) { + ::close(ctx.fd); + Genode::destroy(_heap, &ctx); + result = true; + }; + _gpu_context_space.apply(id, free_ctx); + + return result ? 0 : -1; + } + + int _device_ioctl(unsigned cmd, void *arg) + { + if (!arg) { + errno = EINVAL; + return -1; + } + + switch (cmd) { + case DRM_LIMA_CTX_CREATE: + return _drm_lima_ctx_create(*reinterpret_cast(arg)); + case DRM_LIMA_CTX_FREE: + return _drm_lima_ctx_free(*reinterpret_cast(arg)); + case DRM_LIMA_GEM_INFO: + return _drm_lima_gem_info(*reinterpret_cast(arg)); + case DRM_LIMA_GEM_CREATE: + return _drm_lima_gem_create(*reinterpret_cast(arg)); + case DRM_LIMA_GEM_SUBMIT: + return _drm_lima_gem_submit(*reinterpret_cast(arg)); + case DRM_LIMA_GEM_WAIT: + return _drm_lima_gem_wait(*reinterpret_cast(arg)); + case DRM_LIMA_GET_PARAM: + return _drm_lima_get_param(*reinterpret_cast(arg)); + default: break; + } + + return 0; + } + + /******************************* + ** Generic DRM I/O controls ** + *******************************/ + + int _drm_gem_close(drm_gem_close const &gem_close) + { + return _apply_handle(gem_close.handle, + [&] (Gpu::Buffer &b) { + destroy(_heap, &b); + }) ? 0 : -1; + } + + int _drm_version(drm_version &version) + { + version.version_major = 1; + version.version_minor = 1; + version.version_patchlevel = 0; + + /** + * Libdrm probes the length by calling version twice + * and the second time strings are allocated. + */ + + version.name_len = 1; + if (version.name) + version.name[0] = '\0'; + version.date_len = 1; + if (version.date) + version.date[0] = '\0'; + version.desc_len = 1; + if (version.desc) + version.desc[0] = '\0'; + + return 0; + } + + int _drm_syncobj_create(drm_syncobj_create &arg) + { + try { + Syncobj *obj = new (_heap) Syncobj(_syncobj_space); + arg.handle = (uint32_t)obj->id(); + return 0; + } catch (... /* XXX which exceptions can occur? */) { } + return -1; + } + + int _drm_syncobj_destroy(drm_syncobj_destroy &arg) + { + Syncobj::Id_space::Id id { .value = arg.handle }; + + bool result = false; + _syncobj_space.apply(id, [&] (Syncobj &obj) { + Genode::destroy(_heap, &obj); + result = true; + }); + return result ? 0 : -1; + } + + int _drm_syncobj_handle_to_fd(drm_syncobj_handle &arg) + { + arg.fd = arg.handle + SYNC_FD; + return 0; + } + + int _generic_ioctl(unsigned cmd, void *arg) + { + if (!arg) { + errno = EINVAL; + return -1; + } + + switch (cmd) { + case command_number(DRM_IOCTL_GEM_CLOSE): + return _drm_gem_close(*reinterpret_cast(arg)); + case command_number(DRM_IOCTL_VERSION): + return _drm_version(*reinterpret_cast(arg)); + case command_number(DRM_IOCTL_SYNCOBJ_CREATE): + return _drm_syncobj_create(*reinterpret_cast(arg)); + case command_number(DRM_IOCTL_SYNCOBJ_DESTROY): + return _drm_syncobj_destroy(*reinterpret_cast(arg)); + case command_number(DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD): + return _drm_syncobj_handle_to_fd(*reinterpret_cast(arg)); + default: + error("unhandled generic DRM ioctl: ", Genode::Hex(cmd)); + break; + } + + return -1; + } + + + public: + + static constexpr int const SYNC_FD { 384 }; + + Call() + { + try { + _exec_buffer.construct(_gpu, + (size_t)EXEC_BUFFER_SIZE, + _buffer_space); + } catch (...) { + throw Gpu::Session::Invalid_state(); + } + if (!_exec_buffer->mmap(_env)) + throw Gpu::Session::Invalid_state(); + } + + ~Call() + { + while (_gpu_context_space.apply_any([&] (Gpu_context &ctx) { + Genode::destroy(_heap, &ctx); })) { ; } + + while (_syncobj_space.apply_any([&] (Syncobj &obj) { + Genode::destroy(_heap, &obj); })) { ; } + } + + int ioctl(unsigned long request, void *arg) + { + bool const device_request = device_ioctl(request); + return device_request ? _device_ioctl(device_number(request), arg) + : _generic_ioctl(command_number(request), arg); + } + + void *mmap(unsigned long offset, unsigned long /* size */) + { + /* + * Buffer should have been mapped during GEM INFO call. + */ + return (void*)offset; + } + + void munmap(void *addr) + { + /* + * We rely on GEM CLOSE to destroy the buffer and thereby + * to remove the local mapping. AFAICT the 'munmap' is indeed + * (always) followed by the CLOSE I/O control. + */ + (void)addr; + } + + void wait_for_syncobj(unsigned int handle) + { + _wait_for_syncobj(handle); + } +}; + + +static Genode::Constructible _drm; + + +void lima_drm_init() +{ + /* make sure VFS is initialized */ + struct ::stat buf; + if (stat("/dev/gpu", &buf) < 0) { + Genode::error("'/dev/gpu' not accessible: ", + "try configure '' in 'dev' directory of VFS'"); + return; + } + + _drm.construct(); +} + + +static void dump_ioctl(unsigned long request) +{ + using namespace Genode; + + log("ioctl(request=", Hex(request), + (request & 0xe0000000u) == IOC_OUT ? " out" : + (request & 0xe0000000u) == IOC_IN ? " in" : + (request & 0xe0000000u) == IOC_INOUT ? " inout" : " void", + " len=", IOCPARM_LEN(request), + " cmd=", command_name(request), " (", Hex(command_number(request)), "))"); +} + + +int lima_drm_ioctl(unsigned long request, void *arg) +{ + if (verbose_ioctl) + dump_ioctl(request); + + try { + int ret = _drm->ioctl(request, arg); + + if (verbose_ioctl) + Genode::log("returned ", ret); + + return ret; + } catch (...) { } + + return -1; +} + + +void *lima_drm_mmap(off_t offset, size_t length) +{ + return _drm->mmap(offset, length); +} + + +int lima_drm_munmap(void *addr) +{ + _drm->munmap(addr); + return 0; +} + + +int lima_drm_poll(int fd) +{ + int const handle = fd - Lima::Call::SYNC_FD; + _drm->wait_for_syncobj((unsigned)handle); + return 0; +} diff --git a/repos/libports/src/lib/mesa/files.list b/repos/libports/src/lib/mesa/files.list index 2139e3ea97..153d765346 100644 --- a/repos/libports/src/lib/mesa/files.list +++ b/repos/libports/src/lib/mesa/files.list @@ -285,6 +285,7 @@ mesa-21.0.0/src/compiler/nir/nir_lower_double_ops.c mesa-21.0.0/src/compiler/nir/nir_lower_drawpixels.c mesa-21.0.0/src/compiler/nir/nir_lower_flatshade.c mesa-21.0.0/src/compiler/nir/nir_lower_flrp.c +mesa-21.0.0/src/compiler/nir/nir_lower_fragcoord_wtrans.c mesa-21.0.0/src/compiler/nir/nir_lower_frexp.c mesa-21.0.0/src/compiler/nir/nir_lower_global_vars_to_local.c mesa-21.0.0/src/compiler/nir/nir_lower_goto_ifs.c @@ -305,6 +306,7 @@ mesa-21.0.0/src/compiler/nir/nir_lower_passthrough_edgeflags.c mesa-21.0.0/src/compiler/nir/nir_lower_patch_vertices.c mesa-21.0.0/src/compiler/nir/nir_lower_phis_to_scalar.c mesa-21.0.0/src/compiler/nir/nir_lower_pntc_ytransform.c +mesa-21.0.0/src/compiler/nir/nir_lower_point_size.c mesa-21.0.0/src/compiler/nir/nir_lower_point_size_mov.c mesa-21.0.0/src/compiler/nir/nir_lower_regs_to_ssa.c mesa-21.0.0/src/compiler/nir/nir_lower_returns.c @@ -320,6 +322,7 @@ mesa-21.0.0/src/compiler/nir/nir_lower_var_copies.c mesa-21.0.0/src/compiler/nir/nir_lower_variable_initializers.c mesa-21.0.0/src/compiler/nir/nir_lower_vars_to_ssa.c mesa-21.0.0/src/compiler/nir/nir_lower_vec_to_movs.c +mesa-21.0.0/src/compiler/nir/nir_lower_viewport_transform.c mesa-21.0.0/src/compiler/nir/nir_lower_wpos_ytransform.c mesa-21.0.0/src/compiler/nir/nir_metadata.c mesa-21.0.0/src/compiler/nir/nir_move_vec_src_uses_to_dest.c @@ -733,6 +736,7 @@ mesa-21.0.0/src/gallium/auxiliary/util/u_screen.c mesa-21.0.0/src/gallium/auxiliary/util/u_screen.h mesa-21.0.0/src/gallium/auxiliary/util/u_simple_shaders.c mesa-21.0.0/src/gallium/auxiliary/util/u_simple_shaders.h +mesa-21.0.0/src/gallium/auxiliary/util/u_split_draw.c mesa-21.0.0/src/gallium/auxiliary/util/u_split_draw.h mesa-21.0.0/src/gallium/auxiliary/util/u_split_prim.h mesa-21.0.0/src/gallium/auxiliary/util/u_sse.h @@ -841,6 +845,63 @@ mesa-21.0.0/src/gallium/drivers/etnaviv/hw/state_3d.xml.h mesa-21.0.0/src/gallium/drivers/etnaviv/hw/state_blt.xml.h mesa-21.0.0/src/gallium/drivers/etnaviv/hw/state.xml.h mesa-21.0.0/src/gallium/drivers/etnaviv/hw/texdesc_3d.xml.h + +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/codegen.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/codegen.h +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/disasm.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/gpir.h +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/instr.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/lower.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/nir.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/node.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/optimize.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/reduce_scheduler.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/regalloc.c +mesa-21.0.0/src/gallium/drivers/lima/ir/gp/scheduler.c +mesa-21.0.0/src/gallium/drivers/lima/ir/lima_ir.h +mesa-21.0.0/src/gallium/drivers/lima/ir/lima_nir_algebraic.py +mesa-21.0.0/src/gallium/drivers/lima/ir/lima_nir_duplicate_consts.c +mesa-21.0.0/src/gallium/drivers/lima/ir/lima_nir_duplicate_intrinsic.c +mesa-21.0.0/src/gallium/drivers/lima/ir/lima_nir_lower_uniform_to_scalar.c +mesa-21.0.0/src/gallium/drivers/lima/ir/lima_nir_split_load_input.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/codegen.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/codegen.h +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/disasm.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/instr.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/liveness.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/lower.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/nir.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/node.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/node_to_instr.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/ppir.h +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/regalloc.c +mesa-21.0.0/src/gallium/drivers/lima/ir/pp/scheduler.c +mesa-21.0.0/src/gallium/drivers/lima/lima_bo.c +mesa-21.0.0/src/gallium/drivers/lima/lima_bo.h +mesa-21.0.0/src/gallium/drivers/lima/lima_context.c +mesa-21.0.0/src/gallium/drivers/lima/lima_context.h +mesa-21.0.0/src/gallium/drivers/lima/lima_draw.c +mesa-21.0.0/src/gallium/drivers/lima/lima_fence.c +mesa-21.0.0/src/gallium/drivers/lima/lima_fence.h +mesa-21.0.0/src/gallium/drivers/lima/lima_format.c +mesa-21.0.0/src/gallium/drivers/lima/lima_format.h +mesa-21.0.0/src/gallium/drivers/lima/lima_gpu.h +mesa-21.0.0/src/gallium/drivers/lima/lima_job.c +mesa-21.0.0/src/gallium/drivers/lima/lima_job.h +mesa-21.0.0/src/gallium/drivers/lima/lima_parser.c +mesa-21.0.0/src/gallium/drivers/lima/lima_parser.h +mesa-21.0.0/src/gallium/drivers/lima/lima_program.c +mesa-21.0.0/src/gallium/drivers/lima/lima_program.h +mesa-21.0.0/src/gallium/drivers/lima/lima_query.c +mesa-21.0.0/src/gallium/drivers/lima/lima_resource.c +mesa-21.0.0/src/gallium/drivers/lima/lima_resource.h +mesa-21.0.0/src/gallium/drivers/lima/lima_screen.c +mesa-21.0.0/src/gallium/drivers/lima/lima_screen.h +mesa-21.0.0/src/gallium/drivers/lima/lima_state.c +mesa-21.0.0/src/gallium/drivers/lima/lima_texture.c +mesa-21.0.0/src/gallium/drivers/lima/lima_texture.h +mesa-21.0.0/src/gallium/drivers/lima/lima_util.c +mesa-21.0.0/src/gallium/drivers/lima/lima_util.h mesa-21.0.0/src/gallium/drivers/softpipe/sp_buffer.c mesa-21.0.0/src/gallium/drivers/softpipe/sp_buffer.h mesa-21.0.0/src/gallium/drivers/softpipe/sp_clear.c @@ -934,6 +995,8 @@ mesa-21.0.0/src/gallium/include/pipe/p_video_state.h mesa-21.0.0/src/gallium/targets/dri/target.c mesa-21.0.0/src/gallium/winsys/etnaviv/drm/etnaviv_drm_public.h mesa-21.0.0/src/gallium/winsys/etnaviv/drm/etnaviv_drm_winsys.c +mesa-21.0.0/src/gallium/winsys/lima/drm/lima_drm_winsys.c +mesa-21.0.0/src/gallium/winsys/lima/drm/lima_drm_public.h mesa-21.0.0/src/gallium/winsys/sw/dri/dri_sw_winsys.c mesa-21.0.0/src/gallium/winsys/sw/dri/dri_sw_winsys.h mesa-21.0.0/src/gallium/winsys/sw/kms-dri/kms_dri_sw_winsys.h @@ -1584,6 +1647,10 @@ mesa-21.0.0/src/mesa/x86/norm_args.h mesa-21.0.0/src/mesa/x86/sse.h mesa-21.0.0/src/mesa/x86/x86_xform.h mesa-21.0.0/src/mesa/x86/xform_args.h +mesa-21.0.0/src/panfrost/shared/pan_minmax_cache.c +mesa-21.0.0/src/panfrost/shared/pan_minmax_cache.h +mesa-21.0.0/src/panfrost/shared/pan_tiling.c +mesa-21.0.0/src/panfrost/shared/pan_tiling.h mesa-21.0.0/src/util/anon_file.h mesa-21.0.0/src/util/bigmath.h mesa-21.0.0/src/util/bitscan.h diff --git a/repos/libports/src/lib/mesa/lima/drm_init.cc b/repos/libports/src/lib/mesa/lima/drm_init.cc new file mode 100644 index 0000000000..53c9ab7e6f --- /dev/null +++ b/repos/libports/src/lib/mesa/lima/drm_init.cc @@ -0,0 +1,27 @@ +/** + * \brief Initialize DRM libraries session interface + * \author Josef Soentgen + * \date 2021-04-30 + */ + +/* + * Copyright (C) 2021-2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* Genode includes */ +#include <../include/util/list.h> +#include + +#include + +extern "C" { +#include +} + +void genode_drm_init(void) +{ + drm_init(Libdrm::Driver::LIMA); +} diff --git a/repos/libports/src/lib/mesa/lima/platform_lima.c b/repos/libports/src/lib/mesa/lima/platform_lima.c new file mode 100644 index 0000000000..ae0e1053e0 --- /dev/null +++ b/repos/libports/src/lib/mesa/lima/platform_lima.c @@ -0,0 +1,269 @@ +/** + * \brief lima (mali) EGL-DRI2 back end + * \author Sebastian Sumpf + * \author Josef Soentgen + * \date 2021-04-30 + */ + +/* + * Copyright (C) 2021-2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ +/* + * Mesa + */ +#include +#include +/* + * Libc + */ +#include +#include + +/* + * Local + */ +#include + + +static int stride(int value) +{ + /* 32-bit RGB888 */ + return value * 4; +} + + +static void +dri2_genode_lima_put_image(__DRIdrawable * draw, int op, + int x, int y, int w, int h, + char *data, void *loaderPrivate) +{ + struct dri2_egl_surface *dri2_surf = loaderPrivate; + struct dri2_egl_display *dri2_dpy = dri2_egl_display(dri2_surf->base.Resource.Display); + struct Genode_egl_window *window = dri2_surf->g_win; + unsigned char *dst = window->addr; + + int src_stride; + int dst_stride = stride(dri2_surf->base.Width); + dri2_dpy->image->queryImage(dri2_surf->back_image, __DRI_IMAGE_ATTRIB_STRIDE, &src_stride); + + int copy_width = src_stride; + int x_offset = stride(x); + + dst += x_offset; + dst += y * dst_stride; + + /* copy width over stride boundary */ + if (copy_width > dst_stride - x_offset) + copy_width = dst_stride - x_offset; + + /* limit height */ + if (h > dri2_surf->base.Height - y) + h = dri2_surf->base.Height - y; + + /* copy to frame buffer and refresh */ + genode_blit(data, src_stride, dst, dst_stride, copy_width, h); +} + + +static EGLBoolean +dri2_genode_lima_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw) +{ + struct dri2_egl_surface *dri2_surf = dri2_egl_surface(draw); + struct dri2_egl_display *dri2_dpy = dri2_egl_display(dri2_surf->base.Resource.Display); + + dri2_flush_drawable_for_swapbuffers(disp, draw); + dri2_dpy->flush->invalidate(dri2_surf->dri_drawable); + + _EGLContext *ctx = _eglGetCurrentContext(); + struct dri2_egl_context *dri2_ctx = dri2_egl_context(ctx); + void *map_data = NULL; + int stride; + void *data = + dri2_dpy->image->mapImage(dri2_ctx->dri_context, dri2_surf->back_image, + 0, 0, + dri2_surf->base.Width, + dri2_surf->base.Height, + __DRI_IMAGE_TRANSFER_READ, &stride, + &map_data); + if (data) { + dri2_genode_lima_put_image(dri2_surf->dri_drawable, 0, 0, 0, + dri2_surf->base.Width, dri2_surf->base.Height, + (char *)data, (void *)dri2_surf); + + dri2_dpy->image->unmapImage(dri2_ctx->dri_context, + dri2_surf->back_image, map_data); + } + + return EGL_TRUE; +} + + +static struct dri2_egl_display_vtbl dri2_genode_display_vtbl = { + .authenticate = NULL, + .create_window_surface = dri2_genode_create_window_surface, + .create_pixmap_surface = dri2_genode_create_pixmap_surface, + .destroy_surface = dri2_genode_destroy_surface, + .swap_interval = dri2_genode_swap_interval, + .swap_buffers = dri2_genode_lima_swap_buffers, + .get_dri_drawable = dri2_surface_get_dri_drawable, +}; + + +static __DRIbuffer * +dri2_genode_get_buffers(__DRIdrawable * driDrawable, + int *width, int *height, + unsigned int *attachments, int count, + int *out_count, void *loaderPrivate) +{ + _eglError(EGL_BAD_PARAMETER, "dri2_genode_get_buffers not implemented"); + *out_count = 0; + return NULL; +} + + +static void +dri2_genode_flush_front_buffer(__DRIdrawable * driDrawable, void *loaderPrivate) +{ + _eglError(EGL_BAD_PARAMETER, "dri2_genode_flush_front_buffer not implemented"); +} + + +static __DRIbuffer * +dri2_genode_get_buffers_with_format(__DRIdrawable * driDrawable, + int *width, int *height, + unsigned int *attachments, int count, + int *out_count, void *loaderPrivate) +{ + _eglError(EGL_BAD_PARAMETER, "dri2_genode_get_buffers_with_format not implemented"); + *out_count = 0; + return NULL; +} + + +static int +dri2_genode_image_get_buffers(__DRIdrawable *driDrawable, + unsigned int format, + uint32_t *stamp, + void *loaderPrivate, + uint32_t buffer_mask, + struct __DRIimageList *buffers) +{ + struct dri2_egl_surface *dri2_surf = loaderPrivate; + + buffers->image_mask = 0; + buffers->front = NULL; + buffers->back = NULL; + + buffers->image_mask = __DRI_IMAGE_BUFFER_BACK; + buffers->back = dri2_surf->back_image; + + return 1; +} + + +static const __DRIdri2LoaderExtension dri2_loader_extension = { + .base = { __DRI_DRI2_LOADER, 3 }, + + .getBuffers = dri2_genode_get_buffers, + .flushFrontBuffer = dri2_genode_flush_front_buffer, + .getBuffersWithFormat = dri2_genode_get_buffers_with_format, +}; + + +static const __DRIimageLoaderExtension image_loader_extension = { + .base = { __DRI_IMAGE_LOADER, 1 }, + .getBuffers = dri2_genode_image_get_buffers, + .flushFrontBuffer = dri2_genode_flush_front_buffer, +}; + +static const __DRIextension *dri2_loader_extensions[] = { + &dri2_loader_extension.base, + &image_loader_extension.base, + &image_lookup_extension.base, + &background_callable_extension.base, + NULL, +}; + + + +static EGLBoolean dri2_initialize_genode_lima(_EGLDisplay *disp) +{ + struct dri2_egl_display *dri2_dpy; + static int rgb888_shifts[4] = { 16, 8, 0, 24 }; + static unsigned rgb888_sizes[4] = { 8, 8, 8, 8 }; + int i; + + /* initialize DRM back end */ + genode_drm_init(); + + dri2_dpy = calloc(1, sizeof *dri2_dpy); + if (!dri2_dpy) + return _eglError(EGL_BAD_ALLOC, "eglInitialize"); + + dri2_dpy->fd = 44; + dri2_dpy->driver_name = strdup("lima"); + + disp->DriverData = (void *)dri2_dpy; + if (!dri2_load_driver_dri3(disp)) + goto close_driver; + + dri2_dpy->dri2_major = 2; + dri2_dpy->dri2_minor = __DRI_DRI2_VERSION; + + dri2_dpy->loader_extensions = dri2_loader_extensions; + + /* + * The driver extensions are queried by the loader, where the + * extensions point to '__driDriverGetExtensions_lima' that + * in return is wraps the 'galliumdrm_driver_extensions'. + * The the third entry in the 'galliumdrm_driver_extensions' array + * points 'driDRI2Extension.base', which is the extension we are + * interested in. + * + * extern const __DRIextension **__driDriverGetExtensions_lima(void); + * dri2_dpy->driver_extensions = __driDriverGetExtensions_lima(); + */ + dri2_dpy->dri2 = (const __DRIdri2Extension*)dri2_dpy->driver_extensions[2]; + + if (!dri2_create_screen(disp)) + goto close_screen; + + if (!dri2_setup_extensions(disp)) + goto close_screen; + + dri2_setup_screen(disp); + + EGLint attrs[] = { + EGL_DEPTH_SIZE, 0, /* set in loop below (from DRI config) */ + EGL_NATIVE_VISUAL_TYPE, 0, + EGL_NATIVE_VISUAL_ID, 0, + EGL_NONE }; + + for (i = 0; dri2_dpy->driver_configs[i]; i++) { + /* set depth size in attrs */ + attrs[1] = dri2_dpy->driver_configs[i]->modes.depthBits; + dri2_add_config(disp, dri2_dpy->driver_configs[i], i, + EGL_WINDOW_BIT | EGL_PIXMAP_BIT | EGL_PBUFFER_BIT, + attrs, rgb888_shifts, rgb888_sizes); + } + + dri2_dpy->vtbl = &dri2_genode_display_vtbl; + + return EGL_TRUE; + +close_screen: + dlclose(dri2_dpy->driver); +close_driver: + free(dri2_dpy); + + return EGL_FALSE; +} + + +EGLBoolean dri2_initialize_genode_backend(_EGLDisplay *disp) +{ + return dri2_initialize_genode_lima(disp); +} diff --git a/repos/libports/src/lib/mesa/lima/target.mk b/repos/libports/src/lib/mesa/lima/target.mk new file mode 100644 index 0000000000..cff12952c1 --- /dev/null +++ b/repos/libports/src/lib/mesa/lima/target.mk @@ -0,0 +1,3 @@ +REQUIRES := arm_v8a +TARGET := dummy-mesa_gpu-lima +LIBS := mesa_gpu-lima diff --git a/repos/libports/src/lib/mesa/patches/lima.patch b/repos/libports/src/lib/mesa/patches/lima.patch new file mode 100644 index 0000000000..a8cc8a9243 --- /dev/null +++ b/repos/libports/src/lib/mesa/patches/lima.patch @@ -0,0 +1,12 @@ +--- a/src/lib/mesa/src/loader/loader.c +--- b/src/lib/mesa/src/loader/loader.c +@@ -473,6 +473,9 @@ + if (fd == 43) { + return strdup("iris"); + } ++ if (fd == 44) { ++ return strdup("lima"); ++ } + char *driver; + + /* Allow an environment variable to force choosing a different driver diff --git a/repos/libports/src/lib/mesa/patches/sync_wait.patch b/repos/libports/src/lib/mesa/patches/sync_wait.patch new file mode 100644 index 0000000000..e64e0754f2 --- /dev/null +++ b/repos/libports/src/lib/mesa/patches/sync_wait.patch @@ -0,0 +1,20 @@ +--- a/src/lib/mesa/src/util/libsync.h ++++ b/src/lib/mesa/src/util/libsync.h +@@ -65,6 +65,8 @@ + #define SYNC_IOC_MERGE _IOWR(SYNC_IOC_MAGIC, 3, struct sync_merge_data) + #endif + ++extern int drm_poll(struct pollfd *, nfds_t, int); ++ + static inline int sync_wait(int fd, int timeout) + { + struct pollfd fds = {0}; +@@ -74,7 +76,7 @@ + fds.events = POLLIN; + + do { +- ret = poll(&fds, 1, timeout); ++ ret = drm_poll(&fds, 1, timeout); + if (ret > 0) { + if (fds.revents & (POLLERR | POLLNVAL)) { + errno = EINVAL; From 558e2fc35e21a0cfafb1449159ca9bf9956e87ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Mon, 18 Jul 2022 14:03:35 +0200 Subject: [PATCH 100/354] libdrm/etnaviv: fix DRM version implementation Issue #4559. --- .../libports/src/lib/libdrm/ioctl_etnaviv.cc | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc b/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc index f8a0994926..2a1a44d765 100644 --- a/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc +++ b/repos/libports/src/lib/libdrm/ioctl_etnaviv.cc @@ -600,17 +600,24 @@ class Etnaviv::Call int _drm_version(drm_version &version) { - static char buffer[1] = { '\0' }; - version.version_major = 1; version.version_minor = 3; version.version_patchlevel = 0; - version.name_len = 0; - version.name = buffer; - version.date_len = 0; - version.date = buffer; - version.desc_len = 0; - version.desc = buffer; + + /** + * Libdrm probes the length by calling version twice + * and the second time strings are allocated. + */ + + version.name_len = 1; + if (version.name) + version.name[0] = '\0'; + version.date_len = 1; + if (version.date) + version.date[0] = '\0'; + version.desc_len = 1; + if (version.desc) + version.desc[0] = '\0'; return 0; } From c898a4770bfac8de1dc691e3e5e5b1dbbb7cc5eb Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 19 Jul 2022 11:00:02 +0200 Subject: [PATCH 101/354] dde_linux: initialize wait_bit subsystem This is needed to compile kernel/sched/wait_bit.c needed by x86 SMP as prerequisite for kernel/softirq.c. Ref genodelabs/genode#4562 --- repos/dde_linux/src/app/wireguard/dummies.c | 7 +++++++ repos/dde_linux/src/lib/lx_emul/start.c | 1 + 2 files changed, 8 insertions(+) diff --git a/repos/dde_linux/src/app/wireguard/dummies.c b/repos/dde_linux/src/app/wireguard/dummies.c index 102df15306..7b4004cbf8 100644 --- a/repos/dde_linux/src/app/wireguard/dummies.c +++ b/repos/dde_linux/src/app/wireguard/dummies.c @@ -283,3 +283,10 @@ __wsum csum_partial(const void * buff,int len,__wsum sum) { lx_emul_trace_and_stop(__func__); } + + +#include +void __init wait_bit_init(void) +{ + lx_emul_trace(__func__); +} diff --git a/repos/dde_linux/src/lib/lx_emul/start.c b/repos/dde_linux/src/lib/lx_emul/start.c index ebad304827..b12d7901e8 100644 --- a/repos/dde_linux/src/lib/lx_emul/start.c +++ b/repos/dde_linux/src/lib/lx_emul/start.c @@ -107,6 +107,7 @@ int lx_emul_init_task_function(void * dtb) jump_label_init(); kmem_cache_init(); + wait_bit_init(); radix_tree_init(); workqueue_init_early(); From ec1b060fc594e64b0c75f1d01a9cba124ff2587c Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 19 Jul 2022 11:03:00 +0200 Subject: [PATCH 102/354] dde_linux: x86 requirements for SMP Prepare shadow implementations in spinlocks, pagetable defines, and irq_stack assembler macros to be able to enable SMP on x86/PC. Ref genodelabs/genode#4562 --- .../shadow/arch/x86/include/asm/irq_stack.h | 39 +++++++++++++++++++ .../shadow/arch/x86/include/asm/pgtable.h | 2 + .../lx_emul/shadow/kernel/locking/spinlock.c | 26 +++++++------ 3 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h new file mode 100644 index 0000000000..26f321cd7e --- /dev/null +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h @@ -0,0 +1,39 @@ +/** + * \brief Shadow copy of asm/irq_stack.h + * \author Stefan Kalkowski + * \date 2022-06-29 + */ + +#ifndef _LX_EMUL__SHADOW__ARCH__X89__INCLUDE__ASM__IRQ_STACK_H_ +#define _LX_EMUL__SHADOW__ARCH__X89__INCLUDE__ASM__IRQ_STACK_H_ + +#include_next + +#undef call_on_stack +#undef ASM_CALL_ARG0 + +#define call_on_stack(stack, func, asm_call, argconstr...) \ +{ \ + register void *tos asm("r11"); \ + \ + tos = ((void *)(stack)); \ + \ + asm_inline volatile( \ + "movq %%rsp, (%[tos]) \n" \ + "movq %[tos], %%rsp \n" \ + \ + asm_call \ + \ + "popq %%rsp \n" \ + \ + : "+r" (tos), ASM_CALL_CONSTRAINT \ + : [__func] "r" (func), [tos] "r" (tos) argconstr \ + : "cc", "rax", "rcx", "rdx", "rsi", "rdi", "r8", "r9", "r10", \ + "memory" \ + ); \ +} + +#define ASM_CALL_ARG0 \ + "call *%P[__func] \n" + +#endif /* _LX_EMUL__SHADOW__ARCH__X89__INCLUDE__ASM__IRQ_STACK_H_ */ diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h index a1c3db06c3..08608cb80d 100644 --- a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/pgtable.h @@ -53,5 +53,7 @@ static inline int pud_none(pud_t pud) #endif +#define pmd_page(pmd) NULL + #endif /*_ASM__X86__PGTABLE_H */ diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c index 2e3104d54c..e3c7fcf73a 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c @@ -36,12 +36,6 @@ unsigned long __lockfunc _raw_spin_lock_irqsave(raw_spinlock_t * lock) } -void __lockfunc _raw_spin_unlock(raw_spinlock_t * lock) -{ - arch_spin_unlock(&lock->raw_lock); -} - - void __lockfunc _raw_spin_unlock_irqrestore(raw_spinlock_t * lock, unsigned long flags) { @@ -56,12 +50,6 @@ void __lockfunc _raw_spin_lock_irq(raw_spinlock_t * lock) } -void __lockfunc _raw_spin_unlock_irq(raw_spinlock_t * lock) -{ - _raw_spin_unlock_irqrestore(lock, 0); -} - - int __lockfunc _raw_spin_trylock(raw_spinlock_t * lock) { return arch_spin_trylock(&lock->raw_lock); @@ -74,7 +62,21 @@ void __lockfunc _raw_write_lock(rwlock_t * lock) } +#ifndef CONFIG_X86 +void __lockfunc __raw_spin_unlock(raw_spinlock_t * lock) +{ + arch_spin_unlock(&lock->raw_lock); +} + + +void __lockfunc _raw_spin_unlock_irq(raw_spinlock_t * lock) +{ + _raw_spin_unlock_irqrestore(lock, 0); +} + + void __lockfunc _raw_write_unlock(rwlock_t * lock) { arch_write_unlock(&(lock)->raw_lock); } +#endif From 596c20c199ce18ef414a55d3b69fe205944fad80 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 19 Jul 2022 11:06:52 +0200 Subject: [PATCH 103/354] pc: enable SMP and softirq/tasklets in lx_emul Enables symetric-multi-processor support in the Linux kernel configuration used as base for the driver ports for PC. This is done to be compliant with common usage of x86 drivers today. Moreover, this commit uses the original kernel source for softirq/tasklet implementation to get rid of the insufficient shadow implementation in the lx_emul sources. Ref genodelabs/genode#4562 --- .../shadow/arch/x86/include/asm/irq_stack.h | 6 + .../shadow/arch/x86/include/asm/percpu.h | 21 +++ .../lx_emul/shadow/arch/x86/kernel/irq_32.c | 25 +++ .../lx_emul/shadow/kernel/locking/spinlock.c | 136 ++++++++++++-- repos/pc/lib/import/import-pc_lx_emul.mk | 3 +- repos/pc/lib/mk/spec/x86_32/wifi.mk | 1 + repos/pc/lib/mk/wifi.inc | 1 - repos/pc/recipes/api/pc_linux/content.mk | 4 + .../drivers/framebuffer/intel/pc/dummies.c | 21 ++- .../framebuffer/intel/pc/generated_dummies.c | 25 +-- .../drivers/framebuffer/intel/pc/lx_emul.c | 1 - .../intel/pc/spec/x86_32/source.list | 2 + .../intel/pc/spec/x86_32/target.mk | 1 + .../intel/pc/spec/x86_64/source.list | 1 + .../drivers/framebuffer/intel/pc/target.inc | 1 - repos/pc/src/drivers/usb_host/pc/dummies.c | 8 + .../drivers/usb_host/pc/generated_dummies.c | 17 -- .../usb_host/pc/spec/x86_32/source.list | 4 + .../drivers/usb_host/pc/spec/x86_32/target.mk | 1 + .../usb_host/pc/spec/x86_64/source.list | 2 + repos/pc/src/drivers/usb_host/pc/target.inc | 2 - repos/pc/src/lib/pc/lx_emul/common_dummies.c | 173 ++++++++++++++++++ repos/pc/src/lib/pc/lx_emul/dep.list | 20 +- .../lib/pc/lx_emul/shadow/kernel/rcu/tiny.c | 1 + repos/pc/src/lib/pc/lx_emul/softirq.c | 40 ---- repos/pc/src/lib/wifi/dummies.c | 12 ++ repos/pc/src/lib/wifi/generated_dummies.c | 48 ++--- repos/pc/src/lib/wifi/lx_emul.c | 24 ++- repos/pc/src/lib/wifi/spec/x86_32/source.list | 3 + repos/pc/src/lib/wifi/spec/x86_64/source.list | 2 + repos/pc/src/pc_linux/target.inc | 2 +- repos/pc/src/test/driver_time/dummies.c | 8 + .../src/test/driver_time/generated_dummies.c | 32 +--- repos/pc/src/test/driver_time/source.list | 1 + repos/pc/src/test/driver_time/target.mk | 1 - 35 files changed, 485 insertions(+), 165 deletions(-) create mode 100644 repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/percpu.h create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq_32.c delete mode 100644 repos/pc/src/lib/pc/lx_emul/softirq.c diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h index 26f321cd7e..78e8fc33fe 100644 --- a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/irq_stack.h @@ -11,6 +11,7 @@ #undef call_on_stack #undef ASM_CALL_ARG0 +#undef do_softirq_own_stack #define call_on_stack(stack, func, asm_call, argconstr...) \ { \ @@ -36,4 +37,9 @@ #define ASM_CALL_ARG0 \ "call *%P[__func] \n" +#define do_softirq_own_stack() \ +{ \ + __do_softirq(); \ +} + #endif /* _LX_EMUL__SHADOW__ARCH__X89__INCLUDE__ASM__IRQ_STACK_H_ */ diff --git a/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/percpu.h b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/percpu.h new file mode 100644 index 0000000000..a053075138 --- /dev/null +++ b/repos/dde_linux/src/include/lx_emul/shadow/arch/x86/include/asm/percpu.h @@ -0,0 +1,21 @@ +/** + * \brief Shadow copy of asm/percpu.h + * \author Stefan Kalkowski + * \date 2022-06-29 + */ + +#ifndef _LX_EMUL__SHADOW__ARCH__X86__INCLUDE__ASM__PERCPU_H_ +#define _LX_EMUL__SHADOW__ARCH__X86__INCLUDE__ASM__PERCPU_H_ + +#include_next + +/* + * The original implementation uses gs or fs register + * to hold an cpu offset, which is not set correctly in our use-case + * where we use one cpu only anyway. + */ +#undef __percpu_prefix +#define __percpu_prefix "" + +#endif /* _LX_EMUL__SHADOW__ARCH__X86__INCLUDE__ASM__PERCPU_H_ */ + diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq_32.c b/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq_32.c new file mode 100644 index 0000000000..e8ff99c746 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq_32.c @@ -0,0 +1,25 @@ +/* + * \brief Replaces arch/x86/kernel/irq_32.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include + + +void do_softirq_own_stack(void) +{ + /* + * We have no IRQ stack to switch to anyway, + * so we stay here in contrast to the original + * implementation + */ + __do_softirq(); +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c index e3c7fcf73a..f9d1d87e1b 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/locking/spinlock.c @@ -21,12 +21,32 @@ #include +#ifndef CONFIG_INLINE_SPIN_LOCK void __lockfunc _raw_spin_lock(raw_spinlock_t * lock) { arch_spin_lock(&lock->raw_lock); } +#endif +#ifndef CONFIG_INLINE_SPIN_LOCK_BH +void __lockfunc _raw_spin_lock_bh(raw_spinlock_t * lock) +{ + __local_bh_disable_ip(_RET_IP_, SOFTIRQ_LOCK_OFFSET); + _raw_spin_lock(lock); +} +#endif + + +#ifndef CONFIG_INLINE_SPIN_LOCK_IRQ +void __lockfunc _raw_spin_lock_irq(raw_spinlock_t * lock) +{ + _raw_spin_lock_irqsave(lock); +} +#endif + + +#ifndef CONFIG_INLINE_SPIN_LOCK_IRQSAVE unsigned long __lockfunc _raw_spin_lock_irqsave(raw_spinlock_t * lock) { unsigned long flags; @@ -34,49 +54,131 @@ unsigned long __lockfunc _raw_spin_lock_irqsave(raw_spinlock_t * lock) _raw_spin_lock(lock); return flags; } +#endif +#ifndef CONFIG_INLINE_SPIN_TRYLOCK +int __lockfunc _raw_spin_trylock(raw_spinlock_t * lock) +{ + return arch_spin_trylock(&lock->raw_lock); +} +#endif + + +#ifdef CONFIG_UNINLINE_SPIN_UNLOCK +void __lockfunc _raw_spin_unlock(raw_spinlock_t * lock) +{ + arch_spin_unlock(&lock->raw_lock); +} +#endif + + +#ifndef CONFIG_INLINE_SPIN_UNLOCK_BH +void __lockfunc _raw_spin_unlock_bh(raw_spinlock_t * lock) +{ + _raw_spin_unlock(lock); + __local_bh_enable_ip(_RET_IP_, SOFTIRQ_LOCK_OFFSET); +} +#endif + + +#ifndef CONFIG_INLINE_SPIN_UNLOCK_IRQ +void __lockfunc _raw_spin_unlock_irq(raw_spinlock_t * lock) +{ + _raw_spin_unlock_irqrestore(lock, 0); +} +#endif + + +#ifndef CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE void __lockfunc _raw_spin_unlock_irqrestore(raw_spinlock_t * lock, unsigned long flags) { _raw_spin_unlock(lock); local_irq_restore(flags); } +#endif -void __lockfunc _raw_spin_lock_irq(raw_spinlock_t * lock) +#ifndef CONFIG_INLINE_READ_LOCK +void __lockfunc _raw_read_lock(rwlock_t * lock) { - _raw_spin_lock_irqsave(lock); + lx_emul_trace_and_stop(__func__); } +#endif -int __lockfunc _raw_spin_trylock(raw_spinlock_t * lock) +#ifndef CONFIG_INLINE_READ_LOCK_IRQSAVE +unsigned long __lockfunc _raw_read_lock_irqsave(rwlock_t * lock) { - return arch_spin_trylock(&lock->raw_lock); + unsigned long flags; + local_irq_save(flags); + arch_read_lock(&(lock)->raw_lock); + return flags; } +#endif +#ifndef CONFIG_INLINE_WRITE_UNLOCK_BH +void __lockfunc _raw_write_unlock_bh(rwlock_t * lock) +{ + arch_write_unlock(&(lock)->raw_lock); +} +#endif + + +#ifndef CONFIG_INLINE_READ_UNLOCK_BH +void __lockfunc _raw_read_unlock_bh(rwlock_t * lock) +{ + arch_read_unlock(&(lock)->raw_lock); +} +#endif + + +#ifndef CONFIG_INLINE_WRITE_LOCK void __lockfunc _raw_write_lock(rwlock_t * lock) { arch_write_lock(&(lock)->raw_lock); } +#endif -#ifndef CONFIG_X86 -void __lockfunc __raw_spin_unlock(raw_spinlock_t * lock) -{ - arch_spin_unlock(&lock->raw_lock); -} - - -void __lockfunc _raw_spin_unlock_irq(raw_spinlock_t * lock) -{ - _raw_spin_unlock_irqrestore(lock, 0); -} - - +#ifndef CONFIG_INLINE_WRITE_UNLOCK void __lockfunc _raw_write_unlock(rwlock_t * lock) { arch_write_unlock(&(lock)->raw_lock); } #endif + + +#ifndef CONFIG_INLINE_READ_UNLOCK_IRQRESTORE +void __lockfunc _raw_read_unlock_irqrestore(rwlock_t * lock,unsigned long flags) +{ + arch_read_unlock(&(lock)->raw_lock); + local_irq_restore(flags); +} +#endif + + +#ifndef CONFIG_INLINE_WRITE_LOCK_BH +void __lockfunc _raw_write_lock_bh(rwlock_t * lock) +{ + arch_write_lock(&(lock)->raw_lock); +} +#endif + + +#ifndef CONFIG_INLINE_WRITE_LOCK_IRQ +void __lockfunc _raw_write_lock_irq(rwlock_t * lock) +{ + arch_write_lock(&(lock)->raw_lock); +} +#endif + + +#ifndef CONFIG_INLINE_READ_LOCK_BH +void __lockfunc _raw_read_lock_bh(rwlock_t * lock) +{ + arch_read_lock(&(lock)->raw_lock); +} +#endif diff --git a/repos/pc/lib/import/import-pc_lx_emul.mk b/repos/pc/lib/import/import-pc_lx_emul.mk index 4e298d8c84..9cfc937409 100644 --- a/repos/pc/lib/import/import-pc_lx_emul.mk +++ b/repos/pc/lib/import/import-pc_lx_emul.mk @@ -21,8 +21,10 @@ SRC_CC += lx_emul/irq.cc SRC_CC += lx_emul/random.cc SRC_C += lx_emul/shadow/kernel/dma/mapping.c SRC_C += lx_emul/shadow/kernel/irq/spurious.c +SRC_C += lx_emul/shadow/kernel/locking/spinlock.c SRC_C += lx_emul/shadow/kernel/rcu/tree.c SRC_C += lx_emul/shadow/kernel/sched/sched.c +SRC_C += lx_emul/shadow/kernel/stop_machine.c SRC_C += lx_emul/shadow/lib/devres.c SRC_C += lx_emul/shadow/lib/smp_processor_id.c SRC_C += lx_emul/shadow/mm/memblock.c @@ -45,7 +47,6 @@ SRC_C += lx_emul/mapping.c SRC_C += lx_emul/page_alloc.c SRC_C += lx_emul/sched_core.c SRC_C += lx_emul/slab_common.c -SRC_C += lx_emul/softirq.c SRC_C += lx_emul/vmalloc.c SRC_C += lx_emul/delay.c diff --git a/repos/pc/lib/mk/spec/x86_32/wifi.mk b/repos/pc/lib/mk/spec/x86_32/wifi.mk index 6160802395..f136e992a4 100644 --- a/repos/pc/lib/mk/spec/x86_32/wifi.mk +++ b/repos/pc/lib/mk/spec/x86_32/wifi.mk @@ -3,3 +3,4 @@ include $(REP_DIR)/lib/mk/wifi.inc REQUIRES += 32bit SRC_C += lx_emul/spec/x86_32/atomic64_32.c +SRC_C += lx_emul/shadow/arch/x86/kernel/irq_32.c diff --git a/repos/pc/lib/mk/wifi.inc b/repos/pc/lib/mk/wifi.inc index aaa1a1aba8..1510384a19 100644 --- a/repos/pc/lib/mk/wifi.inc +++ b/repos/pc/lib/mk/wifi.inc @@ -40,7 +40,6 @@ CC_C_OPT += -DCONFIG_RFKILL_INPUT #CC_OPT += -DCONFIG_IWLWIFI_DEBUG -SRC_C += lx_emul/shadow/kernel/softirq.c SRC_C += lx_emul/shadow/lib/kobject_uevent.c vpath %.c $(REP_DIR)/src/lib/pc vpath %.cc $(REP_DIR)/src/lib/pc diff --git a/repos/pc/recipes/api/pc_linux/content.mk b/repos/pc/recipes/api/pc_linux/content.mk index 8da1762ab4..3f5fd64d3a 100644 --- a/repos/pc/recipes/api/pc_linux/content.mk +++ b/repos/pc/recipes/api/pc_linux/content.mk @@ -141,7 +141,10 @@ LX_FILES += arch/x86/include/asm/boot.h \ arch/x86/include/asm/pgtable_64.h \ arch/x86/include/asm/pgtable-invert.h \ arch/x86/include/asm/pkru.h \ + arch/x86/include/asm/qrwlock.h \ + arch/x86/include/asm/qspinlock.h \ arch/x86/include/asm/sigframe.h \ + arch/x86/include/asm/spinlock.h \ arch/x86/include/asm/suspend.h \ arch/x86/include/asm/suspend_32.h \ arch/x86/include/asm/suspend_64.h \ @@ -159,6 +162,7 @@ LX_FILES += arch/x86/include/asm/boot.h \ include/asm-generic/pgtable_uffd.h \ include/asm-generic/pgtable-nopmd.h \ include/asm-generic/pgtable-nopud.h \ + include/asm-generic/qrwlock.h \ include/asm-generic/qspinlock.h \ include/linux/arm-smccc.h \ include/linux/arm_sdei.h \ diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c index f70a11b8fd..32707a9de0 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c @@ -40,7 +40,6 @@ const guid_t pci_acpi_dsm_guid = void register_syscore_ops(struct syscore_ops * ops) { - wait_bit_init(); lx_emul_trace(__func__); } @@ -551,3 +550,23 @@ bool irq_work_needs_cpu(void) { return false; } + + +#include + +struct smp_ops smp_ops = { }; +EXPORT_SYMBOL_GPL(smp_ops); + + +#include + +u32 prandom_u32(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +int wbinvd_on_all_cpus(void) +{ + lx_emul_trace(__func__); +} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c index 898a69f001..e6c1c56582 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c @@ -1509,6 +1509,14 @@ void kmsg_dump(enum kmsg_dump_reason reason) } +#include + +void kvfree_call_rcu(struct rcu_head * head,rcu_callback_t func) +{ + lx_emul_trace_and_stop(__func__); +} + + #include void mark_page_accessed(struct page * page) @@ -1897,14 +1905,6 @@ int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int } -#include - -void srcu_drive_gp(struct work_struct * wp) -{ - lx_emul_trace_and_stop(__func__); -} - - #include bool static_key_initialized; @@ -1931,14 +1931,6 @@ void synchronize_rcu(void) } -#include - -void synchronize_srcu(struct srcu_struct * ssp) -{ - lx_emul_trace_and_stop(__func__); -} - - #include int task_work_add(struct task_struct * task,struct callback_head * work,enum task_work_notify_mode notify) @@ -2024,4 +2016,3 @@ void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) { lx_emul_trace_and_stop(__func__); } - diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c index 2c0c20a3b3..b26b9d32e2 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.c @@ -36,7 +36,6 @@ int acpi_disabled = 0; void intel_wopcm_init_early(struct intel_wopcm * wopcm) { - wait_bit_init(); lx_emul_trace(__func__); } diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list index 4defc3d70a..0e717db882 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list @@ -222,11 +222,13 @@ kernel/sched/swait.c kernel/sched/wait.c kernel/sched/wait_bit.c kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c +kernel/time/tick-broadcast.c kernel/time/tick-common.c kernel/time/tick-oneshot.c kernel/time/tick-sched.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/target.mk b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/target.mk index 6b20840600..d74c56df41 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/target.mk +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/target.mk @@ -2,3 +2,4 @@ include $(REP_DIR)/src/drivers/framebuffer/intel/pc/target.inc REQUIRES += 32bit SRC_C += lx_emul/spec/x86_32/atomic64_32.c +SRC_C += lx_emul/shadow/arch/x86/kernel/irq_32.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list index 518849f5cb..abdcec0de1 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list @@ -225,6 +225,7 @@ kernel/sched/swait.c kernel/sched/wait.c kernel/sched/wait_bit.c kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc index 04788d6894..5a50f3cf6e 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc @@ -21,7 +21,6 @@ SRC_C += lx_user.c SRC_C += gem.c SRC_C += lx_emul/common_dummies.c SRC_C += lx_emul/spec/x86/pci.c -SRC_C += lx_emul/shadow/kernel/softirq.c SRC_C += lx_emul/shadow/mm/page_alloc.c vpath %.c $(REL_PRG_DIR) diff --git a/repos/pc/src/drivers/usb_host/pc/dummies.c b/repos/pc/src/drivers/usb_host/pc/dummies.c index 7d7eb92d46..25bdeeaf2d 100644 --- a/repos/pc/src/drivers/usb_host/pc/dummies.c +++ b/repos/pc/src/drivers/usb_host/pc/dummies.c @@ -106,3 +106,11 @@ bool irq_work_needs_cpu(void) { return false; } + + +#include + +u32 prandom_u32(void) +{ + lx_emul_trace_and_stop(__func__); +} diff --git a/repos/pc/src/drivers/usb_host/pc/generated_dummies.c b/repos/pc/src/drivers/usb_host/pc/generated_dummies.c index aa37090621..2befa28591 100644 --- a/repos/pc/src/drivers/usb_host/pc/generated_dummies.c +++ b/repos/pc/src/drivers/usb_host/pc/generated_dummies.c @@ -517,14 +517,6 @@ int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int } -#include - -void srcu_drive_gp(struct work_struct * wp) -{ - lx_emul_trace_and_stop(__func__); -} - - #include bool static_key_initialized; @@ -538,14 +530,6 @@ int string_escape_mem(const char * src,size_t isz,char * dst,size_t osz,unsigned } -#include - -void synchronize_srcu(struct srcu_struct * ssp) -{ - lx_emul_trace_and_stop(__func__); -} - - #include int task_work_add(struct task_struct * task,struct callback_head * work,enum task_work_notify_mode notify) @@ -588,4 +572,3 @@ void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) { lx_emul_trace_and_stop(__func__); } - diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list index cde37ec2aa..1c750d29c8 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list @@ -62,6 +62,7 @@ kernel/irq/chip.c kernel/irq/devres.c kernel/irq/handle.c kernel/irq/irqdesc.c +kernel/irq/irqdomain.c kernel/irq/manage.c kernel/irq/resend.c kernel/kthread.c @@ -75,12 +76,15 @@ kernel/sched/clock.c kernel/sched/completion.c kernel/sched/swait.c kernel/sched/wait.c +kernel/sched/wait_bit.c kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c +kernel/time/tick-broadcast.c kernel/time/tick-common.c kernel/time/tick-oneshot.c kernel/time/tick-sched.c diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/target.mk b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/target.mk index 998cd5af96..571119e8fb 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/target.mk +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/target.mk @@ -3,3 +3,4 @@ include $(REP_DIR)/src/drivers/usb_host/pc/target.inc REQUIRES += 32bit SRC_C += lx_emul/spec/x86_32/atomic64_32.c +SRC_C += lx_emul/shadow/arch/x86/kernel/irq_32.c diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list index d16cd6ae87..38d72247eb 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list @@ -76,7 +76,9 @@ kernel/sched/clock.c kernel/sched/completion.c kernel/sched/swait.c kernel/sched/wait.c +kernel/sched/wait_bit.c kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c diff --git a/repos/pc/src/drivers/usb_host/pc/target.inc b/repos/pc/src/drivers/usb_host/pc/target.inc index 66dba2679f..1a6b805031 100644 --- a/repos/pc/src/drivers/usb_host/pc/target.inc +++ b/repos/pc/src/drivers/usb_host/pc/target.inc @@ -16,8 +16,6 @@ SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c)) SRC_C += common_dummies.c SRC_C += lx_emul/spec/x86/pci.c SRC_C += lx_emul/usb.c -SRC_C += lx_emul/shadow/kernel/softirq.c - SRC_C += lx_emul/shadow/lib/kobject_uevent.c vpath %.c $(REP_DIR)/src/lib/pc vpath %.cc $(REP_DIR)/src/lib/pc diff --git a/repos/pc/src/lib/pc/lx_emul/common_dummies.c b/repos/pc/src/lib/pc/lx_emul/common_dummies.c index a4086eccf5..140c876fd9 100644 --- a/repos/pc/src/lib/pc/lx_emul/common_dummies.c +++ b/repos/pc/src/lib/pc/lx_emul/common_dummies.c @@ -369,3 +369,176 @@ bool pat_enabled(void) lx_emul_trace(__func__); return true; } + + +#include + +atomic_t __num_online_cpus = ATOMIC_INIT(1); + +unsigned long __per_cpu_offset[NR_CPUS] = { 0UL }; + + +struct srcu_struct; +extern int __srcu_read_lock(struct srcu_struct * ssp); +int __srcu_read_lock(struct srcu_struct * ssp) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void cpu_hotplug_disable(void) +{ + lx_emul_trace(__func__); +} + + +#include + +void cpu_hotplug_enable(void) +{ + lx_emul_trace(__func__); +} + + +#include + +unsigned int cpumask_next(int n,const struct cpumask * srcp) +{ + lx_emul_trace(__func__); + return n + 1; +} + + +#include + +int cpumask_next_and(int n,const struct cpumask * src1p,const struct cpumask * src2p) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void do_set_cpus_allowed(struct task_struct * p,const struct cpumask * new_mask) +{ + lx_emul_trace(__func__); +} + + +#include + +const struct cpumask * housekeeping_cpumask(enum hk_flags flags) +{ + static struct cpumask ret; + lx_emul_trace(__func__); + return &ret; +} + + +#include + +bool housekeeping_enabled(enum hk_flags flags) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +unsigned int nr_cpu_ids = 1; + + +#include + +noinstr void rcu_irq_enter(void) +{ + lx_emul_trace(__func__); +} + + +#include + +void noinstr rcu_irq_exit(void) +{ + lx_emul_trace(__func__); +} + + +#include + +void rcu_softirq_qs(void) +{ + lx_emul_trace(__func__); +} + + +extern void synchronize_srcu(struct srcu_struct * ssp); +void synchronize_srcu(struct srcu_struct * ssp) +{ + lx_emul_trace_and_stop(__func__); +} + + +int cpu_number = 0; + +#ifdef CONFIG_X86_64 +DEFINE_PER_CPU(void *, hardirq_stack_ptr); +#endif +DEFINE_PER_CPU(bool, hardirq_stack_inuse); + + +#include + +DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); +EXPORT_PER_CPU_SYMBOL(irq_stat); + + +extern void rcu_read_unlock_strict(void); +void rcu_read_unlock_strict(void) +{ + lx_emul_trace(__func__); +} + + +DEFINE_PER_CPU_READ_MOSTLY(unsigned long, this_cpu_off) = 0; +EXPORT_PER_CPU_SYMBOL(this_cpu_off); + + +#include + +DEFINE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info); +EXPORT_PER_CPU_SYMBOL(cpu_info); + + +#include + +void wake_up_nohz_cpu(int cpu) +{ + lx_emul_trace(__func__); +} + + +#include + +void nohz_balance_enter_idle(int cpu) +{ + lx_emul_trace(__func__); +} + + +#include + +void quiet_vmstat(void) +{ + lx_emul_trace(__func__); +} + + +extern int idle_cpu(int cpu); +int idle_cpu(int cpu) +{ + lx_emul_trace(__func__); + return 1; +} diff --git a/repos/pc/src/lib/pc/lx_emul/dep.list b/repos/pc/src/lib/pc/lx_emul/dep.list index af3a269135..93acfc32d9 100644 --- a/repos/pc/src/lib/pc/lx_emul/dep.list +++ b/repos/pc/src/lib/pc/lx_emul/dep.list @@ -1,6 +1,7 @@ arch/x86/include/asm/acenv.h arch/x86/include/asm/acpi.h arch/x86/include/asm/alternative.h +arch/x86/include/asm/apic.h arch/x86/include/asm/apicdef.h arch/x86/include/asm/arch_hweight.h arch/x86/include/asm/asm.h @@ -39,6 +40,7 @@ arch/x86/include/asm/hw_irq.h arch/x86/include/asm/intel_ds.h arch/x86/include/asm/invpcid.h arch/x86/include/asm/irq.h +arch/x86/include/asm/irq_stack.h arch/x86/include/asm/irq_vectors.h arch/x86/include/asm/irq_work.h arch/x86/include/asm/irqdomain.h @@ -91,6 +93,8 @@ arch/x86/include/asm/shmparam.h arch/x86/include/asm/signal.h arch/x86/include/asm/smap.h arch/x86/include/asm/smp.h +arch/x86/include/asm/softirq_stack.h +arch/x86/include/asm/spinlock_types.h arch/x86/include/asm/stacktrace.h arch/x86/include/asm/static_call.h arch/x86/include/asm/string.h @@ -140,6 +144,7 @@ arch/x86/include/uapi/asm/signal.h arch/x86/include/uapi/asm/stat.h arch/x86/include/uapi/asm/swab.h arch/x86/include/uapi/asm/unistd.h +arch/x86/include/uapi/asm/vsyscall.h drivers/base/base.h drivers/base/power/power.h drivers/base/trace.h @@ -186,6 +191,7 @@ include/asm-generic/bug.h include/asm-generic/cacheflush.h include/asm-generic/compat.h include/asm-generic/delay.h +include/asm-generic/div64.h include/asm-generic/early_ioremap.h include/asm-generic/error-injection.h include/asm-generic/fixmap.h @@ -207,10 +213,13 @@ include/asm-generic/pci.h include/asm-generic/pci_iomap.h include/asm-generic/percpu.h include/asm-generic/pgtable-nop4d.h +include/asm-generic/qrwlock_types.h +include/asm-generic/qspinlock_types.h include/asm-generic/resource.h include/asm-generic/rwonce.h include/asm-generic/sections.h include/asm-generic/set_memory.h +include/asm-generic/softirq_stack.h include/asm-generic/termios.h include/asm-generic/tlb.h include/asm-generic/topology.h @@ -560,6 +569,7 @@ include/linux/ratelimit_types.h include/linux/rbtree.h include/linux/rbtree_augmented.h include/linux/rbtree_latch.h +include/linux/rcu_node_tree.h include/linux/rcu_segcblist.h include/linux/rcu_sync.h include/linux/rculist.h @@ -567,7 +577,7 @@ include/linux/rculist_bl.h include/linux/rculist_nulls.h include/linux/rcupdate.h include/linux/rcupdate_wait.h -include/linux/rcutiny.h +include/linux/rcutree.h include/linux/rcuwait.h include/linux/reboot.h include/linux/refcount.h @@ -579,6 +589,7 @@ include/linux/ring_buffer.h include/linux/rtc.h include/linux/rtnetlink.h include/linux/rwlock.h +include/linux/rwlock_api_smp.h include/linux/rwlock_types.h include/linux/rwsem.h include/linux/sbitmap.h @@ -602,6 +613,7 @@ include/linux/sched/nohz.h include/linux/sched/numa_balancing.h include/linux/sched/prio.h include/linux/sched/rt.h +include/linux/sched/sd_flags.h include/linux/sched/signal.h include/linux/sched/smt.h include/linux/sched/stat.h @@ -640,13 +652,11 @@ include/linux/socket.h include/linux/sockptr.h include/linux/sort.h include/linux/spinlock.h -include/linux/spinlock_api_up.h +include/linux/spinlock_api_smp.h include/linux/spinlock_types.h -include/linux/spinlock_types_up.h -include/linux/spinlock_up.h include/linux/splice.h include/linux/srcu.h -include/linux/srcutiny.h +include/linux/srcutree.h include/linux/stackdepot.h include/linux/stacktrace.h include/linux/stat.h diff --git a/repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c b/repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c index 4f8298cf0d..f7bfbe57a4 100644 --- a/repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c +++ b/repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c @@ -12,6 +12,7 @@ */ +#include #include void call_rcu(struct rcu_head * head,rcu_callback_t func) diff --git a/repos/pc/src/lib/pc/lx_emul/softirq.c b/repos/pc/src/lib/pc/lx_emul/softirq.c deleted file mode 100644 index 81c1440d98..0000000000 --- a/repos/pc/src/lib/pc/lx_emul/softirq.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * \brief Supplement for emulation of kernel/softirq.c - * \author Josef Soentgen - * \date 2022-04-05 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - - -#include - -void tasklet_setup(struct tasklet_struct * t, - void (* callback)(struct tasklet_struct *)) -{ - t->next = NULL; - t->state = 0; - atomic_set(&t->count, 0); - t->callback = callback; - t->use_callback = true; - t->data = 0; -} - - -void __tasklet_schedule(struct tasklet_struct * t) -{ - if (test_and_clear_bit(TASKLET_STATE_SCHED, &t->state)) - t->callback(t); -} - - -void __tasklet_hi_schedule(struct tasklet_struct * t) -{ - if (test_and_clear_bit(TASKLET_STATE_SCHED, &t->state)) - t->callback(t); -} diff --git a/repos/pc/src/lib/wifi/dummies.c b/repos/pc/src/lib/wifi/dummies.c index d1a6c29d2b..82af883041 100644 --- a/repos/pc/src/lib/wifi/dummies.c +++ b/repos/pc/src/lib/wifi/dummies.c @@ -318,3 +318,15 @@ bool irq_work_needs_cpu(void) { return false; } + + +#include + +struct smp_ops smp_ops = { }; +EXPORT_SYMBOL_GPL(smp_ops); + + +void synchronize_rcu_expedited(void) +{ + lx_emul_trace(__func__); +} diff --git a/repos/pc/src/lib/wifi/generated_dummies.c b/repos/pc/src/lib/wifi/generated_dummies.c index 4fa6817810..958ae3b0b2 100644 --- a/repos/pc/src/lib/wifi/generated_dummies.c +++ b/repos/pc/src/lib/wifi/generated_dummies.c @@ -283,14 +283,6 @@ int dev_ioctl(struct net * net,unsigned int cmd,struct ifreq * ifr,bool * need_c } -#include - -asmlinkage __visible void do_softirq(void) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void dst_release(struct dst_entry * dst) @@ -655,6 +647,22 @@ unsigned long long memparse(const char * ptr,char ** retptr) } +#include + +void migrate_disable(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void migrate_enable(void) +{ + lx_emul_trace_and_stop(__func__); +} + + #include const struct nla_policy nda_policy[] = {}; @@ -1110,17 +1118,17 @@ int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int } -#include +#include -void sock_diag_broadcast_destroy(struct sock * sk) +int smp_call_function_single_async(int cpu,struct __call_single_data * csd) { lx_emul_trace_and_stop(__func__); } -#include +#include -void srcu_drive_gp(struct work_struct * wp) +void sock_diag_broadcast_destroy(struct sock * sk) { lx_emul_trace_and_stop(__func__); } @@ -1152,14 +1160,6 @@ int string_escape_mem(const char * src,size_t isz,char * dst,size_t osz,unsigned int suppress_printk; -#include - -void synchronize_srcu(struct srcu_struct * ssp) -{ - lx_emul_trace_and_stop(__func__); -} - - #include int sysfs_rename_dir_ns(struct kobject * kobj,const char * new_name,const void * new_ns) @@ -1184,14 +1184,6 @@ struct callback_head * task_work_cancel(struct task_struct * task,task_work_func } -#include - -void tasklet_kill(struct tasklet_struct * t) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void unblank_screen(void) diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index c2d6dc2a3c..e5340ddf20 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -302,14 +302,6 @@ int task_work_add(struct task_struct * task,struct callback_head * work,enum tas } -#include - -void __raise_softirq_irqoff(unsigned int nr) -{ - raise_softirq(nr); -} - - #include void kfree_sensitive(const void *p) @@ -566,3 +558,19 @@ void rfkill_init(void) rfkill_task_struct_ptr = find_task_by_pid_ns(pid, NULL); } + + +#ifdef CONFIG_X86_32 +s64 arch_atomic64_add_return(s64 i, atomic64_t *v) +{ + v->counter += i; + return v->counter; +} +#endif + + +void kvfree_call_rcu(struct rcu_head * head,rcu_callback_t func) +{ + void *ptr = (void *) head - (unsigned long) func; + kvfree(ptr); +} diff --git a/repos/pc/src/lib/wifi/spec/x86_32/source.list b/repos/pc/src/lib/wifi/spec/x86_32/source.list index 3bc7badd53..94cbcb048b 100644 --- a/repos/pc/src/lib/wifi/spec/x86_32/source.list +++ b/repos/pc/src/lib/wifi/spec/x86_32/source.list @@ -148,12 +148,15 @@ kernel/sched/clock.c kernel/sched/completion.c kernel/sched/swait.c kernel/sched/wait.c +kernel/sched/wait_bit.c kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c +kernel/time/tick-broadcast.c kernel/time/tick-common.c kernel/time/tick-oneshot.c kernel/time/tick-sched.c diff --git a/repos/pc/src/lib/wifi/spec/x86_64/source.list b/repos/pc/src/lib/wifi/spec/x86_64/source.list index 2f7e2963c0..f6e3ae909b 100644 --- a/repos/pc/src/lib/wifi/spec/x86_64/source.list +++ b/repos/pc/src/lib/wifi/spec/x86_64/source.list @@ -148,7 +148,9 @@ kernel/sched/clock.c kernel/sched/completion.c kernel/sched/swait.c kernel/sched/wait.c +kernel/sched/wait_bit.c kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c diff --git a/repos/pc/src/pc_linux/target.inc b/repos/pc/src/pc_linux/target.inc index 90cb0bb1c5..ea452d107f 100644 --- a/repos/pc/src/pc_linux/target.inc +++ b/repos/pc/src/pc_linux/target.inc @@ -3,7 +3,7 @@ # # kernel fundamentals -LX_ENABLE += TTY SERIAL_EARLYCON SERIAL_OF_PLATFORM PRINTK HAS_IOMEM +LX_ENABLE += TTY SERIAL_EARLYCON SERIAL_OF_PLATFORM PRINTK HAS_IOMEM SMP # support disabling ticking during idle LX_ENABLE += NO_HZ_IDLE diff --git a/repos/pc/src/test/driver_time/dummies.c b/repos/pc/src/test/driver_time/dummies.c index 12522c1b78..7d57dedf2a 100644 --- a/repos/pc/src/test/driver_time/dummies.c +++ b/repos/pc/src/test/driver_time/dummies.c @@ -69,3 +69,11 @@ void register_syscore_ops(struct syscore_ops * ops) { lx_emul_trace(__func__); } + + +#include + +u32 prandom_u32(void) +{ + lx_emul_trace_and_stop(__func__); +} diff --git a/repos/pc/src/test/driver_time/generated_dummies.c b/repos/pc/src/test/driver_time/generated_dummies.c index ffd8e13205..a9436b07b2 100644 --- a/repos/pc/src/test/driver_time/generated_dummies.c +++ b/repos/pc/src/test/driver_time/generated_dummies.c @@ -23,6 +23,14 @@ const char * __clk_get_name(const struct clk * clk) } +#include + +void __srcu_read_unlock(struct srcu_struct * ssp,int idx) +{ + lx_emul_trace_and_stop(__func__); +} + + #include int printk_deferred(const char * fmt,...) @@ -86,22 +94,6 @@ int kobject_synth_uevent(struct kobject * kobj,const char * buf,size_t count) } -#include - -void synchronize_srcu(struct srcu_struct * ssp) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void __srcu_read_unlock(struct srcu_struct * ssp,int idx) -{ - lx_emul_trace_and_stop(__func__); -} - - #include int add_uevent_var(struct kobj_uevent_env * env,const char * format,...) @@ -205,14 +197,6 @@ int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int } -#include - -void srcu_drive_gp(struct work_struct * wp) -{ - lx_emul_trace_and_stop(__func__); -} - - #include unsigned long _copy_to_user(void __user * to,const void * from,unsigned long n) diff --git a/repos/pc/src/test/driver_time/source.list b/repos/pc/src/test/driver_time/source.list index de86489245..0bcffb7da8 100644 --- a/repos/pc/src/test/driver_time/source.list +++ b/repos/pc/src/test/driver_time/source.list @@ -29,6 +29,7 @@ kernel/sched/swait.c kernel/sched/wait.c kernel/sched/wait_bit.c kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c diff --git a/repos/pc/src/test/driver_time/target.mk b/repos/pc/src/test/driver_time/target.mk index 9f7387e135..ba7f8e5769 100644 --- a/repos/pc/src/test/driver_time/target.mk +++ b/repos/pc/src/test/driver_time/target.mk @@ -11,7 +11,6 @@ SRC_C += generated_dummies.c SRC_C += lx_emul/common_dummies.c SRC_C += lx_emul/shadow/lib/kobject_uevent.c SRC_C += lx_emul/shadow/drivers/char/random.c -SRC_C += lx_emul/shadow/kernel/softirq.c vpath %.c $(REP_DIR)/src/lib/pc vpath %.cc $(REP_DIR)/src/lib/pc From 8d7ade56045f3e9d669c9402386d917b4060d650 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 18 Jul 2022 16:41:10 +0200 Subject: [PATCH 104/354] lx_emul: fix single USB interface claim/release Fixes #4565 --- repos/dde_linux/src/lib/lx_emul/usb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/dde_linux/src/lib/lx_emul/usb.c b/repos/dde_linux/src/lib/lx_emul/usb.c index 6206216c62..0a4753e5b6 100644 --- a/repos/dde_linux/src/lib/lx_emul/usb.c +++ b/repos/dde_linux/src/lib/lx_emul/usb.c @@ -236,7 +236,7 @@ static int usb_rpc_call(void * data) num = udev->actconfig->desc.bNumInterfaces; } else { i = usb_rpc_args.iface_num; - num = i; + num = i + 1; } ret = 0; From eda6c6607c7d410851e254cf1b9e5bff8e4e1666 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 18 Jul 2022 16:44:52 +0200 Subject: [PATCH 105/354] Restore dynamic on/off in usb_webcam test Issue #4565 --- repos/libports/run/webcam.inc | 70 +++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/repos/libports/run/webcam.inc b/repos/libports/run/webcam.inc index e0d90fc2b1..bd74817677 100644 --- a/repos/libports/run/webcam.inc +++ b/repos/libports/run/webcam.inc @@ -40,7 +40,7 @@ build $build_components append config { - + @@ -110,33 +110,38 @@ append config { - - - } -append config $test_vfs_config -append config { - - - - - - - - - - + - + - - - - - + + + + + + + + + + + + + } +append config $test_vfs_config +append config { + + + + + + + + + @@ -146,20 +151,21 @@ append config { - - - - - - + + + - - - + + + + + + + - + From 359283968a65b318f50501a007b9067dff029408 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 20 Jul 2022 13:15:42 +0200 Subject: [PATCH 106/354] vbox6: improve NMI handling Fixes #4568 --- repos/ports/src/virtualbox6/sup_vcpu.cc | 134 +++++++++++++++++------- 1 file changed, 94 insertions(+), 40 deletions(-) diff --git a/repos/ports/src/virtualbox6/sup_vcpu.cc b/repos/ports/src/virtualbox6/sup_vcpu.cc index ec221099ce..e7f782d648 100644 --- a/repos/ports/src/virtualbox6/sup_vcpu.cc +++ b/repos/ports/src/virtualbox6/sup_vcpu.cc @@ -275,6 +275,40 @@ template void Sup::Vcpu_impl::_transfer_state_to_vcpu(CPUM } +/* + * Based on hmR0VmxImportGuestIntrState() + */ +static void handle_intr_state(PVMCPUCC pVCpu, CPUMCTX &ctx, Vcpu_state &state) +{ + auto const interrupt_state = state.intr_state.value(); + + if (!interrupt_state /* VMX_VMCS_GUEST_INT_STATE_NONE */) { + if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)) + VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS); + CPUMSetGuestNmiBlocking(pVCpu, false); + } else { + if (interrupt_state & (VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS | + VMX_VMCS_GUEST_INT_STATE_BLOCK_STI)) + EMSetInhibitInterruptsPC(pVCpu, ctx.rip); + else if (VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)) + VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS); + + bool const block_nmi = RT_BOOL(interrupt_state & + VMX_VMCS_GUEST_INT_STATE_BLOCK_NMI); + CPUMSetGuestNmiBlocking(pVCpu, block_nmi); + } + + /* prepare clearing blocking MOV SS or STI bits for next VM-entry */ + if (interrupt_state & (VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS | + VMX_VMCS_GUEST_INT_STATE_BLOCK_STI)) { + state.intr_state.charge(state.intr_state.value() & + ~unsigned(VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS | + VMX_VMCS_GUEST_INT_STATE_BLOCK_STI)); + state.actv_state.charge(VMX_VMCS_GUEST_ACTIVITY_ACTIVE); + } +} + + template void Sup::Vcpu_impl::_transfer_state_to_vbox(CPUMCTX &ctx) { Vcpu_state const &state { _vcpu.state() }; @@ -359,24 +393,13 @@ template void Sup::Vcpu_impl::_transfer_state_to_vbox(CPUM _cached_state.ctrl_primary = state.ctrl_primary.value(); _cached_state.ctrl_secondary = state.ctrl_secondary.value(); - /* clear blocking by MOV SS or STI bits */ - if (_vcpu.state().intr_state.value() & 3) { - _vcpu.state().intr_state.charge(state.intr_state.value() & ~3U); - _vcpu.state().actv_state.charge(VMX_VMCS_GUEST_ACTIVITY_ACTIVE); - } + /* handle guest interrupt state */ + handle_intr_state(pVCpu, ctx, _vcpu.state()); VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_TO_R3); _vmcpu.cpum.s.fUseFlags |= CPUM_USED_FPU_GUEST; - if (state.intr_state.value() != VMX_VMCS_GUEST_INT_STATE_NONE) { - Assert(state.intr_state.value() == VMX_VMCS_GUEST_INT_STATE_BLOCK_STI || - state.intr_state.value() == VMX_VMCS_GUEST_INT_STATE_BLOCK_MOVSS); - EMSetInhibitInterruptsPC(pVCpu, ctx.rip); - } else { - VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS); - } - APICSetTpr(pVCpu, tpr); /* import FPU state */ @@ -500,12 +523,6 @@ typename Sup::Vcpu_impl::Current_state Sup::Vcpu_impl::_handle_paused() Assert(state.flags.value() & X86_EFL_IF); - if (state.intr_state.value() != VMX_VMCS_GUEST_INT_STATE_NONE) - Genode::log("intr state ", Genode::Hex(state.intr_state.value()), - " ", Genode::Hex(state.intr_state.value() & 0xf)); - - Assert(state.intr_state.value() == VMX_VMCS_GUEST_INT_STATE_NONE); - /* * We got a pause exit during IRQ injection and the guest is ready for * IRQ injection. So, just continue running the vCPU. @@ -544,7 +561,6 @@ typename Sup::Vcpu_impl::Current_state Sup::Vcpu_impl::_handle_irq_window( PVMCPU pVCpu = &_vmcpu; - Assert(state.intr_state.value() == VMX_VMCS_GUEST_INT_STATE_NONE); Assert(state.flags.value() & X86_EFL_IF); Assert(!VMCPU_FF_IS_SET(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS)); Assert(!VMX_EXIT_INT_INFO_IS_VALID(state.inj_info.value())); @@ -588,34 +604,68 @@ typename Sup::Vcpu_impl::Current_state Sup::Vcpu_impl::_handle_irq_window( Assert(TRPMHasTrap(pVCpu)); /* interrupt can be dispatched */ - uint8_t u8Vector; - TRPMEVENT enmType; - SVMEVENT Event; - uint32_t u32ErrorCode; - RTGCUINT cr2; - - Event.u = 0; + uint8_t u8Vector { }; + TRPMEVENT event_type { TRPM_HARDWARE_INT }; + SVMEVENT event { }; + uint32_t errorcode { }; + RTGCUINT cr2 { }; /* If a new event is pending, then dispatch it now. */ - int rc = TRPMQueryTrapAll(pVCpu, &u8Vector, &enmType, &u32ErrorCode, &cr2, 0, 0); + int rc = TRPMQueryTrapAll(pVCpu, &u8Vector, &event_type, &errorcode, &cr2, 0, 0); AssertRC(rc); - Assert(enmType == TRPM_HARDWARE_INT); - Assert(u8Vector != X86_XCPT_NMI); + if (rc != VINF_SUCCESS) { + Genode::warning("no trap available"); + return RUNNING; + } + + /* based upon hmR0SvmTrpmTrapToPendingEvent */ + switch (event_type) { + case TRPM_TRAP: + event.n.u1Valid = 1; + event.n.u8Vector = u8Vector; + + switch (u8Vector) { + case X86_XCPT_NMI: + event.n.u3Type = SVM_EVENT_NMI; + + static_assert(SVM_EVENT_NMI == VMX_ENTRY_INT_INFO_TYPE_NMI, + "SVM vs VMX mismatch"); + break; + default: + Genode::error("unsupported injection case - " + "TRPM_TRAP, vector=", u8Vector); + Assert(!"unsupported injection case"); + return PAUSED; + } + break; + case TRPM_HARDWARE_INT: + event.n.u1Valid = 1; + event.n.u8Vector = u8Vector; + event.n.u3Type = SVM_EVENT_EXTERNAL_IRQ; + + static_assert(VMX_ENTRY_INT_INFO_TYPE_EXT_INT == SVM_EVENT_EXTERNAL_IRQ, + "SVM vs VMX mismatch"); + + break; + case TRPM_SOFTWARE_INT: + event.n.u1Valid = 1; + event.n.u8Vector = u8Vector; + event.n.u3Type = SVM_EVENT_SOFTWARE_INT; + + static_assert(VMX_ENTRY_INT_INFO_TYPE_SW_INT == SVM_EVENT_SOFTWARE_INT, + "SVM vs VMX mismatch"); + default: + Genode::error("unsupported injection case"); + Assert(!"unsupported injection case"); + return PAUSED; + } /* Clear the pending trap. */ rc = TRPMResetTrap(pVCpu); AssertRC(rc); - Event.n.u8Vector = u8Vector; - Event.n.u1Valid = 1; - Event.n.u32ErrorCode = u32ErrorCode; - - Assert(VMX_ENTRY_INT_INFO_TYPE_EXT_INT == SVM_EVENT_EXTERNAL_IRQ); - - Event.n.u3Type = VMX_ENTRY_INT_INFO_TYPE_EXT_INT; - - state.inj_info.charge(Event.u); - state.inj_error.charge(Event.n.u32ErrorCode); + state.inj_info.charge(event.u); + state.inj_error.charge(errorcode); return RUNNING; } @@ -749,6 +799,10 @@ template VBOXSTRICTRC Sup::Vcpu_impl::run() /* track guest mode changes - see VMM/VMMAll/IEMAllCImpl.cpp.h */ PGMChangeMode(pVCpu, ctx.cr0, ctx.cr4, ctx.msrEFER); + /* avoid assertion in EMHandleRCTmpl.h, normally set by SVMRO/VMXR0 */ + if (TRPMHasTrap(pVCpu)) + return VINF_EM_RAW_INJECT_TRPM_EVENT; + /* evaluated in VMM/include/EMHandleRCTmpl.h */ return rc; } From 8193f5571a6b737dda50ba38b0cf8d5f6cb0b368 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 1 Jul 2022 16:52:59 +0200 Subject: [PATCH 107/354] nic_router: batch packet stream signals genodelabs/genode#4555 --- repos/os/src/server/nic_router/dhcp_client.cc | 2 ++ repos/os/src/server/nic_router/interface.cc | 31 ++++++++++++++++--- repos/os/src/server/nic_router/interface.h | 8 +++++ repos/os/src/server/nic_router/nic_client.cc | 6 ++++ .../src/server/nic_router/nic_session_root.cc | 6 ++++ .../server/nic_router/uplink_session_root.cc | 6 ++++ 6 files changed, 55 insertions(+), 4 deletions(-) diff --git a/repos/os/src/server/nic_router/dhcp_client.cc b/repos/os/src/server/nic_router/dhcp_client.cc index 4440e3c22a..5db450af6e 100644 --- a/repos/os/src/server/nic_router/dhcp_client.cc +++ b/repos/os/src/server/nic_router/dhcp_client.cc @@ -228,4 +228,6 @@ void Dhcp_client::_send(Message_type msg_type, ip.total_length(size_guard.head_size() - ip_off); ip.update_checksum(); }); + + _interface.wakeup_source(); } diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 50491bcd5a..06d9939a72 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1538,7 +1538,7 @@ void Interface::_handle_pkt_stream_signal() * sending new packets in the subsequent steps of this handler. */ while (_source.ack_avail()) { - _source.release_packet(_source.get_acked_packet()); + _source.release_packet(_source.try_get_acked_packet()); } /* @@ -1567,6 +1567,23 @@ void Interface::_handle_pkt_stream_signal() _handle_pkt(); } } + + /* + * Since we use the try_*() variants of the packet-stream API, we + * haven't emitted any packet_avail, ack_avail, ready_to_submit or + * ready_to_ack signal up to now. We've removed packets from our sink's + * submit queue and might have forwarded it to any interface. We may have + * also removed acks from our sink's ack queue. + * + * We therefore wakeup all sources and our sink. Note that the packet-stream + * API takes care of emitting only the signals that are actually needed. + */ + _config().domains().for_each([&] (Domain &domain) { + domain.interfaces().for_each([&] (Interface &interface) { + interface.wakeup_source(); + }); + }); + wakeup_sink(); } @@ -1810,7 +1827,7 @@ void Interface::_send_submit_pkt(Packet_descriptor &pkt, } catch (Size_guard::Exceeded) { log("[", local_domain, "] snd ?"); } } - _source.submit_packet(pkt); + _source.try_submit_packet(pkt); } @@ -2132,6 +2149,13 @@ void Interface::_failed_to_send_packet_link() } +void Interface::_failed_to_send_packet_submit() +{ + if (_config().verbose()) { + log("[", _domain(), "] failed to send packet (queue full)"); } +} + + void Interface::_failed_to_send_packet_alloc() { if (_config().verbose()) { @@ -2254,14 +2278,13 @@ void Interface::handle_config_3() void Interface::_ack_packet(Packet_descriptor const &pkt) { - if (!_sink.ready_to_ack()) { + if (!_sink.try_ack_packet(pkt)) { if (_config().verbose()) { log("[", _domain(), "] leak packet (sink not ready to " "acknowledge)"); } return; } - _sink.acknowledge_packet(pkt); } diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 6ac3caf146..1556bcaabb 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -345,6 +345,8 @@ class Net::Interface : private Interface_list::Element void _failed_to_send_packet_link(); + void _failed_to_send_packet_submit(); + void _failed_to_send_packet_alloc(); void _send_icmp_dst_unreachable(Ipv4_address_prefix const &local_intf, @@ -394,6 +396,10 @@ class Net::Interface : private Interface_list::Element _failed_to_send_packet_link(); return; } + if (!_source.ready_to_submit()) { + _failed_to_send_packet_submit(); + return; + } try { Packet_descriptor pkt; void *pkt_base; @@ -456,6 +462,8 @@ class Net::Interface : private Interface_list::Element Interface_link_stats &icmp_stats() { return _icmp_stats; } Interface_object_stats &arp_stats() { return _arp_stats; } Interface_object_stats &dhcp_stats() { return _dhcp_stats; } + void wakeup_source() { _source.wakeup(); } + void wakeup_sink() { _sink.wakeup(); } }; #endif /* _INTERFACE_H_ */ diff --git a/repos/os/src/server/nic_router/nic_client.cc b/repos/os/src/server/nic_router/nic_client.cc index 28645c42d4..ede74c4aea 100644 --- a/repos/os/src/server/nic_router/nic_client.cc +++ b/repos/os/src/server/nic_router/nic_client.cc @@ -170,6 +170,12 @@ Net::Nic_client_interface::Nic_client_interface(Env &env, rx_channel()->sigh_packet_avail(_interface.pkt_stream_signal_handler()); tx_channel()->sigh_ack_avail (_interface.pkt_stream_signal_handler()); + /* + * We do not install ready_to_submit because submission is only triggered + * by incoming packets (and dropped if the submit queue is full). + * The ack queue should never be full otherwise we'll be leaking packets. + */ + /* initialize link state handling */ Nic::Connection::link_state_sigh(_session_link_state_handler); _session_link_state = Nic::Connection::link_state(); diff --git a/repos/os/src/server/nic_router/nic_session_root.cc b/repos/os/src/server/nic_router/nic_session_root.cc index 3efa739f42..a381081448 100644 --- a/repos/os/src/server/nic_router/nic_session_root.cc +++ b/repos/os/src/server/nic_router/nic_session_root.cc @@ -256,6 +256,12 @@ Nic_session_component(Session_env &session_env, /* install packet stream signal handlers */ _tx.sigh_packet_avail(_interface.pkt_stream_signal_handler()); _rx.sigh_ack_avail (_interface.pkt_stream_signal_handler()); + + /* + * We do not install ready_to_submit because submission is only triggered by + * incoming packets (and dropped if the submit queue is full). + * The ack queue should never be full otherwise we'll be leaking packets. + */ } diff --git a/repos/os/src/server/nic_router/uplink_session_root.cc b/repos/os/src/server/nic_router/uplink_session_root.cc index fb3beaf4de..e1430772a0 100644 --- a/repos/os/src/server/nic_router/uplink_session_root.cc +++ b/repos/os/src/server/nic_router/uplink_session_root.cc @@ -104,6 +104,12 @@ Net::Uplink_session_component::Uplink_session_component(Session_env /* install packet stream signal handlers */ _tx.sigh_packet_avail(_interface.pkt_stream_signal_handler()); _rx.sigh_ack_avail (_interface.pkt_stream_signal_handler()); + + /* + * We do not install ready_to_submit because submission is only triggered by + * incoming packets (and dropped if the submit queue is full). + * The ack queue should never be full otherwise we'll be leaking packets. + */ } From 6a308dacd71fcb09847f5a2e8732dafa03e2db22 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 1 Jul 2022 16:53:32 +0200 Subject: [PATCH 108/354] packet_stream: always emit ack_avail When using signal batching, ack_avail and packet_avail should always be emitted and preferred over ready_to_submit and ready_to_ack. A signal receiver might decide to not register the ready_to_* signals when it handles congestion by dropping packets. The Nic router is an example of such a signal receiver. genodelabs/genode#4555 --- repos/os/include/os/packet_stream.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/repos/os/include/os/packet_stream.h b/repos/os/include/os/packet_stream.h index bd9545de5b..6b42c0abfd 100644 --- a/repos/os/include/os/packet_stream.h +++ b/repos/os/include/os/packet_stream.h @@ -772,11 +772,12 @@ class Genode::Packet_stream_source : private Packet_stream_base * Wake up the packet sink if needed * * This method assumes that the same signal handler is used for - * the submit transmitter and the ack receiver. + * the submit transmitter and the ack receiver. The ack receiver is not + * signalled if the submit transmitter was already signalled. */ void wakeup() { - /* submit only one signal */ + /* submit only one signal, prefer submit transmitter over ack receiver */ _submit_transmitter.tx_wakeup() || _ack_receiver.rx_wakeup(); } @@ -930,12 +931,13 @@ class Genode::Packet_stream_sink : private Packet_stream_base * Wake up the packet source if needed * * This method assumes that the same signal handler is used for - * the submit receiver and the ack transmitter. + * the submit receiver and the ack transmitter. The submit receiver + * is not signalled if the ack transmitter was already signalled. */ void wakeup() { - /* submit only one signal */ - _submit_receiver.rx_wakeup() || _ack_transmitter.tx_wakeup(); + /* submit only one signal, prefer ack_avail signal over ready_to_submit */ + _ack_transmitter.tx_wakeup() || _submit_receiver.rx_wakeup(); } /** From 3ea910bf8324847a14b5c94235b9cb7b88b3a9e9 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 7 Jul 2022 15:14:56 +0200 Subject: [PATCH 109/354] packet_stream: reset wakeup_needed on wakeup() The wakeup call only emits a single signal as it assumed both are handled by the same signal handler. However, the original implementation did not reset the wakeup_needed variable properly. genodelabs/genode#4555 --- repos/os/include/os/packet_stream.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/repos/os/include/os/packet_stream.h b/repos/os/include/os/packet_stream.h index 6b42c0abfd..7705670654 100644 --- a/repos/os/include/os/packet_stream.h +++ b/repos/os/include/os/packet_stream.h @@ -444,13 +444,13 @@ class Genode::Packet_descriptor_receiver return packet; } - bool rx_wakeup() + bool rx_wakeup(bool omit_signal) { Genode::Mutex::Guard mutex_guard(_rx_queue_mutex); bool signal_submitted = false; - if (_rx_wakeup_needed) { + if (_rx_wakeup_needed && !omit_signal) { _tx_ready.submit(); signal_submitted = true; } @@ -778,7 +778,7 @@ class Genode::Packet_stream_source : private Packet_stream_base void wakeup() { /* submit only one signal, prefer submit transmitter over ack receiver */ - _submit_transmitter.tx_wakeup() || _ack_receiver.rx_wakeup(); + _ack_receiver.rx_wakeup(_submit_transmitter.tx_wakeup()); } /** @@ -937,7 +937,7 @@ class Genode::Packet_stream_sink : private Packet_stream_base void wakeup() { /* submit only one signal, prefer ack_avail signal over ready_to_submit */ - _ack_transmitter.tx_wakeup() || _submit_receiver.rx_wakeup(); + _submit_receiver.rx_wakeup(_ack_transmitter.tx_wakeup()); } /** From 735abca1b6be37515b61dabe7c4dd2594e566713 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 1 Jul 2022 16:32:25 +0200 Subject: [PATCH 110/354] nic_router: avoid marginal timeout updates The link dissolve timeout is updated for every packet, which leads to trigger_once() RPCs that only marginally change the scheduled timeout but significantly slow down the packet throughput. genodelabs/genode#4555 --- repos/base/include/timer/timeout.h | 2 + repos/base/include/timer_session/connection.h | 2 + .../server/nic_router/lazy_one_shot_timeout.h | 154 ++++++++++++++++++ repos/os/src/server/nic_router/link.cc | 3 +- repos/os/src/server/nic_router/link.h | 3 +- 5 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 repos/os/src/server/nic_router/lazy_one_shot_timeout.h diff --git a/repos/base/include/timer/timeout.h b/repos/base/include/timer/timeout.h index c9fab0c45a..a76178931d 100644 --- a/repos/base/include/timer/timeout.h +++ b/repos/base/include/timer/timeout.h @@ -123,6 +123,8 @@ class Genode::Timeout : private Noncopyable, void discard(); bool scheduled(); + + Microseconds deadline() const { return _deadline; } }; diff --git a/repos/base/include/timer_session/connection.h b/repos/base/include/timer_session/connection.h index cf126ca64b..4f24dea770 100644 --- a/repos/base/include/timer_session/connection.h +++ b/repos/base/include/timer_session/connection.h @@ -117,6 +117,8 @@ class Timer::One_shot_timeout : private Genode::Noncopyable, void discard() { _timeout.discard(); } bool scheduled() { return _timeout.scheduled(); } + + Microseconds deadline() const { return _timeout.deadline(); } }; diff --git a/repos/os/src/server/nic_router/lazy_one_shot_timeout.h b/repos/os/src/server/nic_router/lazy_one_shot_timeout.h new file mode 100644 index 0000000000..f88ae2725b --- /dev/null +++ b/repos/os/src/server/nic_router/lazy_one_shot_timeout.h @@ -0,0 +1,154 @@ +/* + * \brief A wrapper for Timer::One_shot_timeout with lazy re-scheduling + * \author Johannes Schlatow + * \date 2022-07-01 + * + * NOTE: This implementation is not thread safe and should only be used in + * single-threaded components. + * + * This implementation prevents re-scheduling when a timeout is frequently + * updated with only marginal changes. Timeouts within a certain accuracy + * threshold of the existing timeout will be ignored. Otherwise, earlier + * timeouts will always be re-scheduled whereas later timeouts are never + * applied immediately but only when the scheduled timeout occured. + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _LAZY_ONE_SHOT_TIMEOUT_H_ +#define _LAZY_ONE_SHOT_TIMEOUT_H_ + +/* Genode includes */ +#include + +namespace Net { + + template class Lazy_one_shot_timeout; +} + + +template +class Net::Lazy_one_shot_timeout +: + private Timer::One_shot_timeout> +{ + private: + + using One_shot_timeout = Timer::One_shot_timeout>; + using Microseconds = Genode::Microseconds; + using Duration = Genode::Duration; + using uint64_t = Genode::uint64_t; + using Handler_method = void (HANDLER::*)(Duration); + + Timer::Connection &_timer; + HANDLER &_object; + Handler_method const _method; + uint64_t const _tolerance_us; + uint64_t _postponed_deadline_us { 0 }; + + void _handle_timeout(Duration curr_time) + { + /* + * If the postponed deadline is set and more than tolerance + * microseconds in the future, skip calling the user handler and + * re-schedule with the postponed deadline instead. + */ + if (_postponed_deadline_us > 0) { + + uint64_t const curr_time_us { + curr_time.trunc_to_plain_us().value }; + + if (curr_time_us + _tolerance_us < _postponed_deadline_us) { + + One_shot_timeout::schedule( + Microseconds { _postponed_deadline_us - curr_time_us }); + + _postponed_deadline_us = 0; + return; + } + } + /* + * If not, call the user handler. + */ + (_object.*_method)(curr_time); + } + + public: + + using One_shot_timeout::discard; + using One_shot_timeout::scheduled; + + Lazy_one_shot_timeout(Timer::Connection &timer, + HANDLER &object, + Handler_method method, + Microseconds tolerance) + : + One_shot_timeout { timer, *this, + &Lazy_one_shot_timeout::_handle_timeout }, + _timer { timer }, + _object { object }, + _method { method }, + _tolerance_us { tolerance.value } + { } + + /** + * In contrast to the original 'schedule' method, this wrapper evalutes + * whether scheduling must be done immediately, can be postponed to + * '_handle_timeout', or can even be skipped. + * + * Scheduling is done immediately if + * the timeout is not active OR + * new deadline < old deadline - tolerance + * + * Scheduling is postponed to '_handle_timeout' if + * new deadline > old deadline + tolerance + * + * Scheduling is skipped if + * new deadline >= old deadline - tolerance AND + * new deadline <= old deadline + tolerance + */ + void schedule(Microseconds duration) + { + /* remove old postponed deadline */ + _postponed_deadline_us = 0; + + /* no special treatment if timeout is not scheduled */ + if (!scheduled()) { + One_shot_timeout::schedule(duration); + return; + } + uint64_t const curr_time_us { + _timer.curr_time().trunc_to_plain_us().value }; + + uint64_t const new_deadline_us { + duration.value <= ~(uint64_t)0 - curr_time_us ? + curr_time_us + duration.value : ~(uint64_t)0 }; + + uint64_t const old_deadline_us { One_shot_timeout::deadline().value }; + + if (new_deadline_us < old_deadline_us) { + /* + * The new deadline is earlier. If the old deadline is not + * accurate enough, re-schedule. Else, drop the new deadline. + */ + if (new_deadline_us < old_deadline_us - _tolerance_us) + One_shot_timeout::schedule(duration); + + } else { + /* + * The new deadline is later. If the old deadline is not + * accurate enough, remember the new deadline and apply it in + * '_handle_timeout'. Else, drop the new deadline. + */ + if (new_deadline_us > old_deadline_us + _tolerance_us) + _postponed_deadline_us = new_deadline_us; + } + } +}; + +#endif /* _LAZY_ONE_SHOT_TIMEOUT_H_ */ diff --git a/repos/os/src/server/nic_router/link.cc b/repos/os/src/server/nic_router/link.cc index 37210359aa..259aaa9a14 100644 --- a/repos/os/src/server/nic_router/link.cc +++ b/repos/os/src/server/nic_router/link.cc @@ -99,7 +99,8 @@ Link::Link(Interface &cln_interface, _config(config), _client_interface(cln_interface), _server_port_alloc(srv_port_alloc), - _dissolve_timeout(timer, *this, &Link::_handle_dissolve_timeout), + _dissolve_timeout(timer, *this, &Link::_handle_dissolve_timeout, + Microseconds { 100 * 1000 }), _dissolve_timeout_us(dissolve_timeout), _protocol(protocol), _client(cln_interface.domain(), cln_id, *this), diff --git a/repos/os/src/server/nic_router/link.h b/repos/os/src/server/nic_router/link.h index e3bf938c7a..50b8ec8d14 100644 --- a/repos/os/src/server/nic_router/link.h +++ b/repos/os/src/server/nic_router/link.h @@ -42,6 +42,7 @@ #include #include #include +#include namespace Net { @@ -187,7 +188,7 @@ class Net::Link : public Link_list::Element Reference _config; Interface &_client_interface; Pointer _server_port_alloc; - Timer::One_shot_timeout _dissolve_timeout; + Lazy_one_shot_timeout _dissolve_timeout; Genode::Microseconds _dissolve_timeout_us; L3_protocol const _protocol; Link_side _client; From 01c9c32573883a4a821be8044c2ed0e61269ef5e Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 7 Jul 2022 15:00:56 +0200 Subject: [PATCH 111/354] nic_router: relax timer accuracy for timestamps The NIC router uses the timer for relatively coarse-grained timeouts. It therefore suffices to update and store the current time when the NIC router is signalled and use the cached time instead. This prevents frequent syscalls or RPCs when acquiring the current time for every packet. genodelabs/genode#4555 --- repos/os/src/server/nic_router/cached_timer.h | 74 +++++++++++++++++++ .../os/src/server/nic_router/configuration.cc | 2 +- .../os/src/server/nic_router/configuration.h | 2 +- repos/os/src/server/nic_router/dhcp_client.cc | 2 +- repos/os/src/server/nic_router/dhcp_client.h | 6 +- repos/os/src/server/nic_router/dhcp_server.cc | 2 +- repos/os/src/server/nic_router/dhcp_server.h | 3 +- repos/os/src/server/nic_router/interface.cc | 4 +- repos/os/src/server/nic_router/interface.h | 4 +- .../server/nic_router/lazy_one_shot_timeout.h | 18 +++-- repos/os/src/server/nic_router/link.cc | 8 +- repos/os/src/server/nic_router/link.h | 8 +- repos/os/src/server/nic_router/main.cc | 3 +- repos/os/src/server/nic_router/nic_client.cc | 4 +- repos/os/src/server/nic_router/nic_client.h | 4 +- .../src/server/nic_router/nic_session_root.cc | 4 +- .../src/server/nic_router/nic_session_root.h | 6 +- repos/os/src/server/nic_router/report.cc | 2 +- repos/os/src/server/nic_router/report.h | 6 +- .../server/nic_router/uplink_session_root.cc | 4 +- .../server/nic_router/uplink_session_root.h | 6 +- 21 files changed, 128 insertions(+), 44 deletions(-) create mode 100644 repos/os/src/server/nic_router/cached_timer.h diff --git a/repos/os/src/server/nic_router/cached_timer.h b/repos/os/src/server/nic_router/cached_timer.h new file mode 100644 index 0000000000..0e7b4e2c12 --- /dev/null +++ b/repos/os/src/server/nic_router/cached_timer.h @@ -0,0 +1,74 @@ +/* + * \brief A wrapper for Timer::Connection that caches time values + * \author Johannes Schlatow + * \date 2022-07-07 + * + * This implementation aims for reducing the number of + * Timer::Connection::curr_time() that was found to be relatively + * expensive on base-hw (implies a syscall on each call) by assuming that + * a certain caching is fine with the accuracy requirements of the NIC router. + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CACHED_TIMER_H_ +#define _CACHED_TIMER_H_ + +/* Genode includes */ +#include + +namespace Net { + + class Cached_timer; +} + + +class Net::Cached_timer : public ::Timer::Connection +{ + private: + + using Duration = Genode::Duration; + using Microseconds = Genode::Microseconds; + + Duration _cached_time { Microseconds { 0 } }; + + public: + + Cached_timer (Genode::Env &env) + : + Timer::Connection { env } + { } + + /** + * Update cached time with current timer + */ + void update_cached_time() + { + _cached_time = Timer::Connection::curr_time(); + } + + /** + * Update cached time and return it + */ + Duration curr_time() override + { + update_cached_time(); + return cached_time(); + } + + + /*************** + ** Accessors ** + ***************/ + + Duration cached_time() const { return _cached_time; } + + void cached_time(Duration time) { _cached_time = time; } +}; + +#endif /* _CACHED_TIMER_H_ */ diff --git a/repos/os/src/server/nic_router/configuration.cc b/repos/os/src/server/nic_router/configuration.cc index 7bc6c80bb7..ba0428a5a6 100644 --- a/repos/os/src/server/nic_router/configuration.cc +++ b/repos/os/src/server/nic_router/configuration.cc @@ -105,7 +105,7 @@ Configuration::_init_icmp_type_3_code_on_fragm_ipv4(Xml_node const &node) const Configuration::Configuration(Env &env, Xml_node const node, Allocator &alloc, - Timer::Connection &timer, + Cached_timer &timer, Configuration &old_config, Quota const &shared_quota, Interface_list &interfaces) diff --git a/repos/os/src/server/nic_router/configuration.h b/repos/os/src/server/nic_router/configuration.h index 8eb0c1eb09..aa332a3f96 100644 --- a/repos/os/src/server/nic_router/configuration.h +++ b/repos/os/src/server/nic_router/configuration.h @@ -71,7 +71,7 @@ class Net::Configuration Configuration(Genode::Env &env, Genode::Xml_node const node, Genode::Allocator &alloc, - Timer::Connection &timer, + Cached_timer &timer, Configuration &old_config, Quota const &shared_quota, Interface_list &interfaces); diff --git a/repos/os/src/server/nic_router/dhcp_client.cc b/repos/os/src/server/nic_router/dhcp_client.cc index 5db450af6e..936d3a94cf 100644 --- a/repos/os/src/server/nic_router/dhcp_client.cc +++ b/repos/os/src/server/nic_router/dhcp_client.cc @@ -54,7 +54,7 @@ Configuration &Dhcp_client::_config() { return _domain().config(); }; Domain &Dhcp_client::_domain() { return _interface.domain(); } -Dhcp_client::Dhcp_client(Timer::Connection &timer, +Dhcp_client::Dhcp_client(Cached_timer &timer, Interface &interface) : _interface(interface), diff --git a/repos/os/src/server/nic_router/dhcp_client.h b/repos/os/src/server/nic_router/dhcp_client.h index f56e5e5ad4..887e9a6b99 100644 --- a/repos/os/src/server/nic_router/dhcp_client.h +++ b/repos/os/src/server/nic_router/dhcp_client.h @@ -14,8 +14,10 @@ #ifndef _DHCP_CLIENT_H_ #define _DHCP_CLIENT_H_ +/* local includes */ +#include + /* Genode includes */ -#include #include namespace Net { @@ -60,7 +62,7 @@ class Net::Dhcp_client public: - Dhcp_client(Timer::Connection &timer, + Dhcp_client(Cached_timer &timer, Interface &interface); void handle_dhcp_reply(Dhcp_packet &dhcp); diff --git a/repos/os/src/server/nic_router/dhcp_server.cc b/repos/os/src/server/nic_router/dhcp_server.cc index 698e7f4759..7c6d93a2a7 100644 --- a/repos/os/src/server/nic_router/dhcp_server.cc +++ b/repos/os/src/server/nic_router/dhcp_server.cc @@ -228,7 +228,7 @@ bool Dhcp_server::ready() const Dhcp_allocation::Dhcp_allocation(Interface &interface, Ipv4_address const &ip, Mac_address const &mac, - Timer::Connection &timer, + Cached_timer &timer, Microseconds lifetime) : _interface(interface), _ip(ip), _mac(mac), diff --git a/repos/os/src/server/nic_router/dhcp_server.h b/repos/os/src/server/nic_router/dhcp_server.h index e903e8f02e..36e7a0006a 100644 --- a/repos/os/src/server/nic_router/dhcp_server.h +++ b/repos/os/src/server/nic_router/dhcp_server.h @@ -20,6 +20,7 @@ #include #include #include +#include /* Genode includes */ #include @@ -171,7 +172,7 @@ class Net::Dhcp_allocation : public Genode::Avl_node, Dhcp_allocation(Interface &interface, Ipv4_address const &ip, Mac_address const &mac, - Timer::Connection &timer, + Cached_timer &timer, Genode::Microseconds lifetime); ~Dhcp_allocation(); diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 06d9939a72..45397450a9 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1532,6 +1532,8 @@ void Interface::_handle_pkt() void Interface::_handle_pkt_stream_signal() { + _timer.update_cached_time(); + /* * Release all sent packets that were already acknowledged by the counter * side. Doing this first frees packet-stream memory which facilitates @@ -1832,7 +1834,7 @@ void Interface::_send_submit_pkt(Packet_descriptor &pkt, Interface::Interface(Genode::Entrypoint &ep, - Timer::Connection &timer, + Cached_timer &timer, Mac_address const router_mac, Genode::Allocator &alloc, Mac_address const mac, diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 1556bcaabb..4c670b7164 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -140,7 +140,7 @@ class Net::Interface : private Interface_list::Element Mac_address const _mac; Reference _config; Interface_policy &_policy; - Timer::Connection &_timer; + Cached_timer &_timer; Genode::Allocator &_alloc; Pointer _domain { }; Arp_waiter_list _own_arp_waiters { }; @@ -375,7 +375,7 @@ class Net::Interface : private Interface_list::Element }; Interface(Genode::Entrypoint &ep, - Timer::Connection &timer, + Cached_timer &timer, Mac_address const router_mac, Genode::Allocator &alloc, Mac_address const mac, diff --git a/repos/os/src/server/nic_router/lazy_one_shot_timeout.h b/repos/os/src/server/nic_router/lazy_one_shot_timeout.h index f88ae2725b..16ebed173e 100644 --- a/repos/os/src/server/nic_router/lazy_one_shot_timeout.h +++ b/repos/os/src/server/nic_router/lazy_one_shot_timeout.h @@ -23,8 +23,8 @@ #ifndef _LAZY_ONE_SHOT_TIMEOUT_H_ #define _LAZY_ONE_SHOT_TIMEOUT_H_ -/* Genode includes */ -#include +/* local includes */ +#include namespace Net { @@ -45,7 +45,7 @@ class Net::Lazy_one_shot_timeout using uint64_t = Genode::uint64_t; using Handler_method = void (HANDLER::*)(Duration); - Timer::Connection &_timer; + Cached_timer &_timer; HANDLER &_object; Handler_method const _method; uint64_t const _tolerance_us; @@ -53,6 +53,8 @@ class Net::Lazy_one_shot_timeout void _handle_timeout(Duration curr_time) { + _timer.cached_time(curr_time); + /* * If the postponed deadline is set and more than tolerance * microseconds in the future, skip calling the user handler and @@ -83,10 +85,10 @@ class Net::Lazy_one_shot_timeout using One_shot_timeout::discard; using One_shot_timeout::scheduled; - Lazy_one_shot_timeout(Timer::Connection &timer, - HANDLER &object, - Handler_method method, - Microseconds tolerance) + Lazy_one_shot_timeout(Cached_timer &timer, + HANDLER &object, + Handler_method method, + Microseconds tolerance) : One_shot_timeout { timer, *this, &Lazy_one_shot_timeout::_handle_timeout }, @@ -123,7 +125,7 @@ class Net::Lazy_one_shot_timeout return; } uint64_t const curr_time_us { - _timer.curr_time().trunc_to_plain_us().value }; + _timer.cached_time().trunc_to_plain_us().value }; uint64_t const new_deadline_us { duration.value <= ~(uint64_t)0 - curr_time_us ? diff --git a/repos/os/src/server/nic_router/link.cc b/repos/os/src/server/nic_router/link.cc index 259aaa9a14..0d287ceb7e 100644 --- a/repos/os/src/server/nic_router/link.cc +++ b/repos/os/src/server/nic_router/link.cc @@ -90,7 +90,7 @@ Link::Link(Interface &cln_interface, Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Microseconds const dissolve_timeout, @@ -201,7 +201,7 @@ Tcp_link::Tcp_link(Interface &cln_interface, Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Interface_link_stats &stats) @@ -282,7 +282,7 @@ Udp_link::Udp_link(Interface &cln_interface, Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Interface_link_stats &stats) @@ -313,7 +313,7 @@ Icmp_link::Icmp_link(Interface &cln_interface, Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Interface_link_stats &stats) diff --git a/repos/os/src/server/nic_router/link.h b/repos/os/src/server/nic_router/link.h index 50b8ec8d14..ba5f9cb944 100644 --- a/repos/os/src/server/nic_router/link.h +++ b/repos/os/src/server/nic_router/link.h @@ -210,7 +210,7 @@ class Net::Link : public Link_list::Element Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Genode::Microseconds const dissolve_timeout, @@ -274,7 +274,7 @@ class Net::Tcp_link : public Link Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Interface_link_stats &stats); @@ -292,7 +292,7 @@ struct Net::Udp_link : Link Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Interface_link_stats &stats); @@ -310,7 +310,7 @@ struct Net::Icmp_link : Link Pointer srv_port_alloc, Domain &srv_domain, Link_side_id const &srv_id, - Timer::Connection &timer, + Cached_timer &timer, Configuration &config, L3_protocol const protocol, Interface_link_stats &stats); diff --git a/repos/os/src/server/nic_router/main.cc b/repos/os/src/server/nic_router/main.cc index adc205dc59..c2fdfa637e 100644 --- a/repos/os/src/server/nic_router/main.cc +++ b/repos/os/src/server/nic_router/main.cc @@ -21,6 +21,7 @@ #include #include #include +#include using namespace Net; using namespace Genode; @@ -35,7 +36,7 @@ class Net::Main Genode::Env &_env; Quota _shared_quota { }; Interface_list _interfaces { }; - Timer::Connection _timer { _env }; + Cached_timer _timer { _env }; Genode::Heap _heap { &_env.ram(), &_env.rm() }; Genode::Attached_rom_dataspace _config_rom { _env, "config" }; Reference _config { *new (_heap) Configuration { _config_rom.xml(), _heap } }; diff --git a/repos/os/src/server/nic_router/nic_client.cc b/repos/os/src/server/nic_router/nic_client.cc index ede74c4aea..e232b227e6 100644 --- a/repos/os/src/server/nic_router/nic_client.cc +++ b/repos/os/src/server/nic_router/nic_client.cc @@ -50,7 +50,7 @@ Net::Nic_client::Nic_client(Xml_node const &node, Allocator &alloc, Nic_client_tree &old_nic_clients, Env &env, - Timer::Connection &timer, + Cached_timer &timer, Interface_list &interfaces, Configuration &config) : @@ -150,7 +150,7 @@ bool Net::Nic_client_interface_base::interface_link_state() const **************************/ Net::Nic_client_interface::Nic_client_interface(Env &env, - Timer::Connection &timer, + Cached_timer &timer, Genode::Allocator &alloc, Interface_list &interfaces, Configuration &config, diff --git a/repos/os/src/server/nic_router/nic_client.h b/repos/os/src/server/nic_router/nic_client.h index 06c193eeab..5dbc780d0a 100644 --- a/repos/os/src/server/nic_router/nic_client.h +++ b/repos/os/src/server/nic_router/nic_client.h @@ -85,7 +85,7 @@ class Net::Nic_client : public Nic_client_base, Genode::Allocator &alloc, Nic_client_tree &old_nic_clients, Genode::Env &env, - Timer::Connection &timer, + Cached_timer &timer, Interface_list &interfaces, Configuration &config); @@ -160,7 +160,7 @@ class Net::Nic_client_interface : public Nic_client_interface_base, public: Nic_client_interface(Genode::Env &env, - Timer::Connection &timer, + Cached_timer &timer, Genode::Allocator &alloc, Interface_list &interfaces, Configuration &config, diff --git a/repos/os/src/server/nic_router/nic_session_root.cc b/repos/os/src/server/nic_router/nic_session_root.cc index a381081448..2efe2205cf 100644 --- a/repos/os/src/server/nic_router/nic_session_root.cc +++ b/repos/os/src/server/nic_router/nic_session_root.cc @@ -234,7 +234,7 @@ Nic_session_component:: Nic_session_component(Session_env &session_env, size_t const tx_buf_size, size_t const rx_buf_size, - Timer::Connection &timer, + Cached_timer &timer, Mac_address const mac, Mac_address const &router_mac, Session_label const &label, @@ -283,7 +283,7 @@ Nic_session_component::link_state_sigh(Signal_context_capability sigh) **********************/ Net::Nic_session_root::Nic_session_root(Env &env, - Timer::Connection &timer, + Cached_timer &timer, Allocator &alloc, Configuration &config, Quota &shared_quota, diff --git a/repos/os/src/server/nic_router/nic_session_root.h b/repos/os/src/server/nic_router/nic_session_root.h index 31926d6162..1b92414490 100644 --- a/repos/os/src/server/nic_router/nic_session_root.h +++ b/repos/os/src/server/nic_router/nic_session_root.h @@ -132,7 +132,7 @@ class Net::Nic_session_component : private Nic_session_component_base, Nic_session_component(Genode::Session_env &session_env, Genode::size_t const tx_buf_size, Genode::size_t const rx_buf_size, - Timer::Connection &timer, + Cached_timer &timer, Mac_address const mac, Mac_address const &router_mac, Genode::Session_label const &label, @@ -169,7 +169,7 @@ class Net::Nic_session_root enum { MAC_ALLOC_BASE = 0x02 }; Genode::Env &_env; - Timer::Connection &_timer; + Cached_timer &_timer; Mac_allocator _mac_alloc; Mac_address const _router_mac; Reference _config; @@ -189,7 +189,7 @@ class Net::Nic_session_root public: Nic_session_root(Genode::Env &env, - Timer::Connection &timer, + Cached_timer &timer, Genode::Allocator &alloc, Configuration &config, Quota &shared_quota, diff --git a/repos/os/src/server/nic_router/report.cc b/repos/os/src/server/nic_router/report.cc index 3299c1fd3c..22a9490e77 100644 --- a/repos/os/src/server/nic_router/report.cc +++ b/repos/os/src/server/nic_router/report.cc @@ -22,7 +22,7 @@ using namespace Genode; Net::Report::Report(bool const &verbose, Xml_node const node, - Timer::Connection &timer, + Cached_timer &timer, Domain_tree &domains, Quota const &shared_quota, Pd_session &pd, diff --git a/repos/os/src/server/nic_router/report.h b/repos/os/src/server/nic_router/report.h index 8255ccde5f..b205a57408 100644 --- a/repos/os/src/server/nic_router/report.h +++ b/repos/os/src/server/nic_router/report.h @@ -14,8 +14,10 @@ #ifndef _REPORT_H_ #define _REPORT_H_ +/* local includes */ +#include + /* Genode */ -#include #include namespace Genode { @@ -68,7 +70,7 @@ class Net::Report Report(bool const &verbose, Genode::Xml_node const node, - Timer::Connection &timer, + Cached_timer &timer, Domain_tree &domains, Quota const &shared_quota, Genode::Pd_session &pd, diff --git a/repos/os/src/server/nic_router/uplink_session_root.cc b/repos/os/src/server/nic_router/uplink_session_root.cc index e1430772a0..a0f4f75085 100644 --- a/repos/os/src/server/nic_router/uplink_session_root.cc +++ b/repos/os/src/server/nic_router/uplink_session_root.cc @@ -83,7 +83,7 @@ Net::Uplink_session_component::Interface_policy::determine_domain_name() const Net::Uplink_session_component::Uplink_session_component(Session_env &session_env, size_t const tx_buf_size, size_t const rx_buf_size, - Timer::Connection &timer, + Cached_timer &timer, Mac_address const mac, Session_label const &label, Interface_list &interfaces, @@ -118,7 +118,7 @@ Net::Uplink_session_component::Uplink_session_component(Session_env *************************/ Net::Uplink_session_root::Uplink_session_root(Env &env, - Timer::Connection &timer, + Cached_timer &timer, Allocator &alloc, Configuration &config, Quota &shared_quota, diff --git a/repos/os/src/server/nic_router/uplink_session_root.h b/repos/os/src/server/nic_router/uplink_session_root.h index d42bc532d3..70c6bc68f7 100644 --- a/repos/os/src/server/nic_router/uplink_session_root.h +++ b/repos/os/src/server/nic_router/uplink_session_root.h @@ -96,7 +96,7 @@ class Net::Uplink_session_component : private Uplink_session_component_base, Uplink_session_component(Genode::Session_env &session_env, Genode::size_t const tx_buf_size, Genode::size_t const rx_buf_size, - Timer::Connection &timer, + Cached_timer &timer, Mac_address const mac, Genode::Session_label const &label, Interface_list &interfaces, @@ -123,7 +123,7 @@ class Net::Uplink_session_root enum { MAC_ALLOC_BASE = 0x02 }; Genode::Env &_env; - Timer::Connection &_timer; + Cached_timer &_timer; Reference _config; Quota &_shared_quota; Interface_list &_interfaces; @@ -141,7 +141,7 @@ class Net::Uplink_session_root public: Uplink_session_root(Genode::Env &env, - Timer::Connection &timer, + Cached_timer &timer, Genode::Allocator &alloc, Configuration &config, Quota &shared_quota, From 95b3b36cd93a3922770c35ee7297d86a8888c66c Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 13 Jul 2022 19:11:15 +0200 Subject: [PATCH 112/354] nic_router: update checksums only once per packet The NIC router used to update IPv4 and layer 4 checksums of a packet for each interface it was sent to (say, all interfaces of the domain the packet was routed to). However, there was and is no technical reason for not doing it only once and then iterating over the interfaces with the already updated packet. This is what this commit does in an intent to raise the router's performance. Ref #4555 --- repos/os/src/server/nic_router/interface.cc | 65 ++++++++++----------- repos/os/src/server/nic_router/interface.h | 17 +++--- 2 files changed, 37 insertions(+), 45 deletions(-) diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 45397450a9..79a27de36c 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -293,28 +293,26 @@ void Interface::_destroy_link(Link &link) } -void Interface::_pass_prot(Ethernet_frame ð, - Size_guard &size_guard, - Ipv4_packet &ip, - L3_protocol const prot, - void *const prot_base, - size_t const prot_size) +void Interface::_pass_prot_to_domain(Domain &domain, + Ethernet_frame ð, + Size_guard &size_guard, + Ipv4_packet &ip, + L3_protocol const prot, + void *const prot_base, + size_t const prot_size) { - eth.src(_router_mac); - if (!_domain().use_arp()) { - eth.dst(_router_mac); - } - _update_checksum(prot, prot_base, prot_size, ip.src(), ip.dst(), ip.total_length()); - _pass_ip(eth, size_guard, ip); -} + _update_checksum( + prot, prot_base, prot_size, ip.src(), ip.dst(), ip.total_length()); - -void Interface::_pass_ip(Ethernet_frame ð, - Size_guard &size_guard, - Ipv4_packet &ip) -{ ip.update_checksum(); - send(eth, size_guard); + domain.interfaces().for_each([&] (Interface &interface) + { + eth.src(interface._router_mac); + if (!domain.use_arp()) { + eth.dst(interface._router_mac); + } + interface.send(eth, size_guard); + }); } @@ -606,9 +604,9 @@ void Interface::_nat_link_and_pass(Ethernet_frame ð, Link_side_id const remote_id = { ip.dst(), _dst_port(prot, prot_base), ip.src(), _src_port(prot, prot_base) }; _new_link(prot, local_id, remote_port_alloc, remote_domain, remote_id); - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface._pass_prot(eth, size_guard, ip, prot, prot_base, prot_size); - }); + _pass_prot_to_domain( + remote_domain, eth, size_guard, ip, prot, prot_base, prot_size); + } catch (Port_allocator_guard::Out_of_indices) { switch (prot) { case L3_protocol::TCP: _tcp_stats.refused_for_ports++; break; @@ -1001,11 +999,10 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, ip.dst(remote_side.src_ip()); _src_port(prot, prot_base, remote_side.dst_port()); _dst_port(prot, prot_base, remote_side.src_port()); + _pass_prot_to_domain( + remote_domain, eth, size_guard, ip, prot, prot_base, + prot_size); - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface._pass_prot( - eth, size_guard, ip, prot, prot_base, prot_size); - }); _link_packet(prot, prot_base, link, client); done = true; }, @@ -1249,11 +1246,10 @@ void Interface::_handle_ip(Ethernet_frame ð, ip.dst(remote_side.src_ip()); _src_port(prot, prot_base, remote_side.dst_port()); _dst_port(prot, prot_base, remote_side.src_port()); + _pass_prot_to_domain( + remote_domain, eth, size_guard, ip, prot, prot_base, + prot_size); - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface._pass_prot( - eth, size_guard, ip, prot, prot_base, prot_size); - }); _link_packet(prot, prot_base, link, client); done = true; }, @@ -1330,11 +1326,10 @@ void Interface::_handle_ip(Ethernet_frame ð, Domain &remote_domain = rule.domain(); _adapt_eth(eth, ip.dst(), pkt, remote_domain); - remote_domain.interfaces().for_each( - [&] (Interface &interface) { - interface._pass_ip(eth, size_guard, ip); - } - ); + ip.update_checksum(); + remote_domain.interfaces().for_each([&] (Interface &interface) { + interface.send(eth, size_guard); + }); done = true; }, [&] /* handle_no_match */ () { } diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 4c670b7164..7e585767e5 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -276,16 +276,13 @@ class Net::Interface : private Interface_list::Element Size_guard &size_guard, Domain &local_domain); - void _pass_prot(Ethernet_frame ð, - Size_guard &size_guard, - Ipv4_packet &ip, - L3_protocol const prot, - void *const prot_base, - Genode::size_t const prot_size); - - void _pass_ip(Ethernet_frame ð, - Size_guard &size_guard, - Ipv4_packet &ip); + void _pass_prot_to_domain(Domain &domain, + Ethernet_frame ð, + Size_guard &size_guard, + Ipv4_packet &ip, + L3_protocol const prot, + void *const prot_base, + Genode::size_t const prot_size); void _handle_pkt(); From 865ee192b4519968ee2a546c46a7cd4910c2e6c9 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 14 Jul 2022 15:32:09 +0200 Subject: [PATCH 113/354] nic_router: no checksum update on IP routing The router used to update IPv4 checksums when routing via an rule despite the fact that it doesn't change any IPv4 header fields in this case. Ref #4555 --- repos/os/src/server/nic_router/interface.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 79a27de36c..a8552648d8 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1326,7 +1326,6 @@ void Interface::_handle_ip(Ethernet_frame ð, Domain &remote_domain = rule.domain(); _adapt_eth(eth, ip.dst(), pkt, remote_domain); - ip.update_checksum(); remote_domain.interfaces().for_each([&] (Interface &interface) { interface.send(eth, size_guard); }); From 07d4a7c11fbe160d9220b92e39105f915f635515 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 15 Jul 2022 11:35:44 +0200 Subject: [PATCH 114/354] nic_router: no IPv4 checksum update on ICMP echo When sending an ICMP ECHO reply, the router merely swaps SRC and DST of the IPv4 header of the corresponding request and these changes cancel each other out in checksum calculation. Therefore, with this commit, the router skips updating the IPv4 checksum in this context. Ref #4555 --- repos/os/src/server/nic_router/interface.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index a8552648d8..2a7a838e52 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -961,9 +961,13 @@ void Interface::_send_icmp_echo_reply(Ethernet_frame ð, icmp.type(Icmp_packet::Type::ECHO_REPLY); icmp.code(Icmp_packet::Code::ECHO_REPLY); - /* update checksums and send */ + /* + * Update checksums and send + * + * Skip updating the IPv4 checksum because we have only swapped SRC and + * DST and these changes cancel each other out in checksum calculation. + */ icmp.update_checksum(icmp_sz - sizeof(Icmp_packet)); - ip.update_checksum(); send(eth, size_guard); } From 6b3ed6c75b30a3f1f04746e063ea326c32d768e1 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Sat, 16 Jul 2022 03:28:04 +0200 Subject: [PATCH 115/354] internet checksum: no default arg value Prevent public reflection of the only internally used 'init_sum' argument in 'uint16_t internet_checksum(...)' that, in addition, added a default value to the function interface. Ref #4555 --- repos/os/include/net/internet_checksum.h | 18 +++++----- repos/os/src/lib/net/internet_checksum.cc | 44 +++++++++++++++-------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/repos/os/include/net/internet_checksum.h b/repos/os/include/net/internet_checksum.h index 9ba0701eef..0768f9ca8d 100644 --- a/repos/os/include/net/internet_checksum.h +++ b/repos/os/include/net/internet_checksum.h @@ -42,16 +42,16 @@ namespace Net { } __attribute__((packed)); - Genode::uint16_t internet_checksum(Packed_uint16 const *addr, - Genode::size_t size, - Genode::addr_t init_sum = 0); + Genode::uint16_t internet_checksum(Packed_uint16 const *data_ptr, + Genode::size_t data_sz); - Genode::uint16_t internet_checksum_pseudo_ip(Packed_uint16 const *addr, - Genode::size_t size, - Genode::uint16_t size_be, - Ipv4_packet::Protocol ip_prot, - Ipv4_address &ip_src, - Ipv4_address &ip_dst); + Genode::uint16_t + internet_checksum_pseudo_ip(Packed_uint16 const *data_ptr, + Genode::size_t data_sz, + Genode::uint16_t ip_data_sz_be, + Ipv4_packet::Protocol ip_prot, + Ipv4_address &ip_src, + Ipv4_address &ip_dst); } #endif /* _NET__INTERNET_CHECKSUM_H_ */ diff --git a/repos/os/src/lib/net/internet_checksum.cc b/repos/os/src/lib/net/internet_checksum.cc index 6d18505488..3179560292 100644 --- a/repos/os/src/lib/net/internet_checksum.cc +++ b/repos/os/src/lib/net/internet_checksum.cc @@ -17,6 +17,11 @@ using namespace Net; using namespace Genode; + +/************************** + ** Unit-local utilities ** + **************************/ + struct Packed_uint8 { Genode::uint8_t value; @@ -24,21 +29,19 @@ struct Packed_uint8 } __attribute__((packed)); -uint16_t Net::internet_checksum(Packed_uint16 const *addr, - size_t size, - addr_t init_sum) +static uint16_t checksum_of_raw_data(Packed_uint16 const *data_ptr, + size_t data_sz, + addr_t sum) { /* add up bytes in pairs */ - addr_t sum = init_sum; - for (; size > 1; size -= sizeof(Packed_uint16)) { - sum += addr->value; - addr++; + for (; data_sz > 1; data_sz -= sizeof(Packed_uint16)) { + sum += data_ptr->value; + data_ptr++; } - /* add left-over byte, if any */ - if (size > 0) - sum += ((Packed_uint8 const *)addr)->value; - + if (data_sz > 0) { + sum += ((Packed_uint8 const *)data_ptr)->value; + } /* fold sum to 16-bit value */ while (addr_t const sum_rsh = sum >> 16) sum = (sum & 0xffff) + sum_rsh; @@ -48,8 +51,19 @@ uint16_t Net::internet_checksum(Packed_uint16 const *addr, } -uint16_t Net::internet_checksum_pseudo_ip(Packed_uint16 const *ip_data, - size_t ip_data_sz, +/*********************** + ** Internet_checksum ** + ***********************/ + +uint16_t Net::internet_checksum(Packed_uint16 const *data_ptr, + size_t data_sz) +{ + return checksum_of_raw_data(data_ptr, data_sz, 0); +} + + +uint16_t Net::internet_checksum_pseudo_ip(Packed_uint16 const *data_ptr, + size_t data_sz, uint16_t ip_data_sz_be, Ipv4_packet::Protocol ip_prot, Ipv4_address &ip_src, @@ -67,6 +81,6 @@ uint16_t Net::internet_checksum_pseudo_ip(Packed_uint16 const *ip_data, for (size_t i = 0; i < Ipv4_packet::ADDR_LEN; i += 2) sum += *(uint16_t*)&ip_src.addr[i] + *(uint16_t*)&ip_dst.addr[i]; - /* add up IP data bytes */ - return internet_checksum(ip_data, ip_data_sz, sum); + /* add up data bytes */ + return checksum_of_raw_data(data_ptr, data_sz, sum); } From d69e89f5cbdb1df2de67adf680c0170c493d095d Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Sat, 16 Jul 2022 11:04:56 +0200 Subject: [PATCH 116/354] internet checksum: use signed long for accumulator We used to use 'unsigned long' for the accumulating variable when calculating internet checksums. However, 'signed long' is more in accordance with RFC 1071 and will allow us to share the same back end for folding, once we implement incremental updating of internet checksums. Ref #4555 --- repos/os/src/lib/net/internet_checksum.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/os/src/lib/net/internet_checksum.cc b/repos/os/src/lib/net/internet_checksum.cc index 3179560292..9628fd6607 100644 --- a/repos/os/src/lib/net/internet_checksum.cc +++ b/repos/os/src/lib/net/internet_checksum.cc @@ -31,7 +31,7 @@ struct Packed_uint8 static uint16_t checksum_of_raw_data(Packed_uint16 const *data_ptr, size_t data_sz, - addr_t sum) + signed long sum) { /* add up bytes in pairs */ for (; data_sz > 1; data_sz -= sizeof(Packed_uint16)) { @@ -77,7 +77,7 @@ uint16_t Net::internet_checksum_pseudo_ip(Packed_uint16 const *data_ptr, * | 4 bytes | 4 bytes | 1 byte | 1 byte | 2 bytes | * -------------------------------------------------------------- */ - addr_t sum = host_to_big_endian((uint16_t)ip_prot) + ip_data_sz_be; + signed long sum { host_to_big_endian((uint16_t)ip_prot) + ip_data_sz_be }; for (size_t i = 0; i < Ipv4_packet::ADDR_LEN; i += 2) sum += *(uint16_t*)&ip_src.addr[i] + *(uint16_t*)&ip_dst.addr[i]; From b6d15fa3ab2b645df0e789ce7a2eb65133269884 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Sat, 16 Jul 2022 11:22:20 +0200 Subject: [PATCH 117/354] nic_router: incremental IPv4 checksum updates The checksums for forwarded/routed IPv4, used to be always re-calculated from scratch in the NIC router although the router changes only a few packet fields. This commit replaces the old approach whereever sensible with an algorithm for incremental checksum updates suggested in RFC 1071. The goal is to improve router performance. Ref #4555 --- repos/os/include/net/internet_checksum.h | 29 ++++++ repos/os/include/net/ipv4.h | 7 ++ repos/os/src/lib/net/internet_checksum.cc | 43 ++++++++- repos/os/src/lib/net/ipv4.cc | 20 ++++ repos/os/src/server/nic_router/interface.cc | 102 +++++++++++--------- repos/os/src/server/nic_router/interface.h | 19 ++-- 6 files changed, 165 insertions(+), 55 deletions(-) diff --git a/repos/os/include/net/internet_checksum.h b/repos/os/include/net/internet_checksum.h index 0768f9ca8d..8ff8ccd566 100644 --- a/repos/os/include/net/internet_checksum.h +++ b/repos/os/include/net/internet_checksum.h @@ -52,6 +52,35 @@ namespace Net { Ipv4_packet::Protocol ip_prot, Ipv4_address &ip_src, Ipv4_address &ip_dst); + + /** + * Accumulating modifier for incremental updates of internet checksums + */ + class Internet_checksum_diff + { + private: + + signed long _value { 0 }; + + public: + + /** + * Update modifier according to a data update in the target region + * + * PRECONDITIONS + * + * * The pointers must refer to data that is at an offset inside + * the checksum'd region that is a multiple of 2 bytes (16 bits). + */ + void add_up_diff(Packed_uint16 const *new_data_ptr, + Packed_uint16 const *old_data_ptr, + Genode::size_t data_sz); + + /** + * Return the given checksum with this modifier applied + */ + Genode::uint16_t apply_to(signed long sum) const; + }; } #endif /* _NET__INTERNET_CHECKSUM_H_ */ diff --git a/repos/os/include/net/ipv4.h b/repos/os/include/net/ipv4.h index 7609bd9b9d..ad01ceea83 100644 --- a/repos/os/include/net/ipv4.h +++ b/repos/os/include/net/ipv4.h @@ -27,8 +27,10 @@ namespace Genode { class Output; } namespace Net { + enum { IPV4_ADDR_LEN = 4 }; + class Internet_checksum_diff; class Ipv4_address; class Ipv4_packet; @@ -94,6 +96,8 @@ class Net::Ipv4_packet void update_checksum(); + void update_checksum(Internet_checksum_diff const &icd); + bool checksum_error() const; private: @@ -237,6 +241,9 @@ class Net::Ipv4_packet _offset_6_u16 = host_to_big_endian(be); } + void src(Ipv4_address v, Internet_checksum_diff &icd); + void dst(Ipv4_address v, Internet_checksum_diff &icd); + /********* ** log ** diff --git a/repos/os/src/lib/net/internet_checksum.cc b/repos/os/src/lib/net/internet_checksum.cc index 9628fd6607..0580337e90 100644 --- a/repos/os/src/lib/net/internet_checksum.cc +++ b/repos/os/src/lib/net/internet_checksum.cc @@ -29,6 +29,14 @@ struct Packed_uint8 } __attribute__((packed)); +static void fold_checksum_to_16_bits(signed long &sum) +{ + while (addr_t const remainder = sum >> 16) { + sum = (sum & 0xffff) + remainder; + } +} + + static uint16_t checksum_of_raw_data(Packed_uint16 const *data_ptr, size_t data_sz, signed long sum) @@ -42,9 +50,7 @@ static uint16_t checksum_of_raw_data(Packed_uint16 const *data_ptr, if (data_sz > 0) { sum += ((Packed_uint8 const *)data_ptr)->value; } - /* fold sum to 16-bit value */ - while (addr_t const sum_rsh = sum >> 16) - sum = (sum & 0xffff) + sum_rsh; + fold_checksum_to_16_bits(sum); /* return one's complement */ return (uint16_t)(~sum); @@ -84,3 +90,34 @@ uint16_t Net::internet_checksum_pseudo_ip(Packed_uint16 const *data_ptr, /* add up data bytes */ return checksum_of_raw_data(data_ptr, data_sz, sum); } + + +/**************************** + ** Internet_checksum_diff ** + ****************************/ + +void Internet_checksum_diff::add_up_diff(Packed_uint16 const *new_data_ptr, + Packed_uint16 const *old_data_ptr, + size_t data_sz) +{ + /* add up byte differences in pairs */ + signed long diff { 0 }; + for (; data_sz > 1; data_sz -= sizeof(Packed_uint16)) { + diff += old_data_ptr->value - new_data_ptr->value; + old_data_ptr++; + new_data_ptr++; + } + /* add difference of left-over byte, if any */ + if (data_sz > 0) { + diff += *(uint8_t *)old_data_ptr - *(uint8_t *)new_data_ptr; + } + _value += diff; +} + + +uint16_t Internet_checksum_diff::apply_to(signed long sum) const +{ + sum += _value; + fold_checksum_to_16_bits(sum); + return (uint16_t)sum; +} diff --git a/repos/os/src/lib/net/ipv4.cc b/repos/os/src/lib/net/ipv4.cc index e4383c54c8..e2a4e5646a 100644 --- a/repos/os/src/lib/net/ipv4.cc +++ b/repos/os/src/lib/net/ipv4.cc @@ -156,3 +156,23 @@ size_t Ipv4_packet::size(size_t max_size) const size_t const stated_size = total_length(); return stated_size < max_size ? stated_size : max_size; } + + +void Ipv4_packet::src(Ipv4_address v, Internet_checksum_diff &icd) +{ + icd.add_up_diff((Packed_uint16 *)&v.addr[0], (Packed_uint16 *)&_src[0], 4); + src(v); +} + + +void Ipv4_packet::dst(Ipv4_address v, Internet_checksum_diff &icd) +{ + icd.add_up_diff((Packed_uint16 *)&v.addr[0], (Packed_uint16 *)&_dst[0], 4); + dst(v); +} + + +void Ipv4_packet::update_checksum(Internet_checksum_diff const &icd) +{ + _checksum = icd.apply_to(_checksum); +} diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 2a7a838e52..114587a032 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include /* local includes */ @@ -293,18 +294,19 @@ void Interface::_destroy_link(Link &link) } -void Interface::_pass_prot_to_domain(Domain &domain, - Ethernet_frame ð, - Size_guard &size_guard, - Ipv4_packet &ip, - L3_protocol const prot, - void *const prot_base, - size_t const prot_size) +void Interface::_pass_prot_to_domain(Domain &domain, + Ethernet_frame ð, + Size_guard &size_guard, + Ipv4_packet &ip, + Internet_checksum_diff const &ip_icd, + L3_protocol const prot, + void *const prot_base, + size_t const prot_size) { _update_checksum( prot, prot_base, prot_size, ip.src(), ip.dst(), ip.total_length()); - ip.update_checksum(); + ip.update_checksum(ip_icd); domain.interfaces().for_each([&] (Interface &interface) { eth.src(interface._router_mac); @@ -576,15 +578,16 @@ void Interface::_adapt_eth(Ethernet_frame ð, } -void Interface::_nat_link_and_pass(Ethernet_frame ð, - Size_guard &size_guard, - Ipv4_packet &ip, - L3_protocol const prot, - void *const prot_base, - size_t const prot_size, - Link_side_id const &local_id, - Domain &local_domain, - Domain &remote_domain) +void Interface::_nat_link_and_pass(Ethernet_frame ð, + Size_guard &size_guard, + Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, + L3_protocol const prot, + void *const prot_base, + size_t const prot_size, + Link_side_id const &local_id, + Domain &local_domain, + Domain &remote_domain) { try { Pointer remote_port_alloc; @@ -596,7 +599,7 @@ void Interface::_nat_link_and_pass(Ethernet_frame ð, log("[", local_domain, "] using NAT rule: ", nat); } _src_port(prot, prot_base, nat.port_alloc(prot).alloc()); - ip.src(remote_domain.ip_config().interface().address); + ip.src(remote_domain.ip_config().interface().address, ip_icd); remote_port_alloc = nat.port_alloc(prot); }, [&] /* no_match */ () { } @@ -605,7 +608,8 @@ void Interface::_nat_link_and_pass(Ethernet_frame ð, ip.src(), _src_port(prot, prot_base) }; _new_link(prot, local_id, remote_port_alloc, remote_domain, remote_id); _pass_prot_to_domain( - remote_domain, eth, size_guard, ip, prot, prot_base, prot_size); + remote_domain, eth, size_guard, ip, ip_icd, prot, prot_base, + prot_size); } catch (Port_allocator_guard::Out_of_indices) { switch (prot) { @@ -975,6 +979,7 @@ void Interface::_send_icmp_echo_reply(Ethernet_frame ð, void Interface::_handle_icmp_query(Ethernet_frame ð, Size_guard &size_guard, Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, @@ -999,13 +1004,13 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, " link: ", link); } _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); - ip.src(remote_side.dst_ip()); - ip.dst(remote_side.src_ip()); + ip.src(remote_side.dst_ip(), ip_icd); + ip.dst(remote_side.src_ip(), ip_icd); _src_port(prot, prot_base, remote_side.dst_port()); _dst_port(prot, prot_base, remote_side.src_port()); _pass_prot_to_domain( - remote_domain, eth, size_guard, ip, prot, prot_base, - prot_size); + remote_domain, eth, size_guard, ip, ip_icd, prot, + prot_base, prot_size); _link_packet(prot, prot_base, link, client); done = true; @@ -1026,8 +1031,9 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, Domain &remote_domain = rule.domain(); _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); - _nat_link_and_pass(eth, size_guard, ip, prot, prot_base, prot_size, - local_id, local_domain, remote_domain); + _nat_link_and_pass(eth, size_guard, ip, ip_icd, prot, prot_base, + prot_size, local_id, local_domain, + remote_domain); done = true; }, @@ -1044,13 +1050,16 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, void Interface::_handle_icmp_error(Ethernet_frame ð, Size_guard &size_guard, Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, Packet_descriptor const &pkt, Domain &local_domain, Icmp_packet &icmp, size_t icmp_sz) { + Ipv4_packet &embed_ip { icmp.data(size_guard) }; + Internet_checksum_diff embed_ip_icd { }; + /* drop packet if embedded IP checksum invalid */ - Ipv4_packet &embed_ip = icmp.data(size_guard); if (embed_ip.checksum_error()) { throw Drop_packet("bad checksum in IP packet embedded in ICMP error"); } @@ -1078,20 +1087,20 @@ void Interface::_handle_icmp_error(Ethernet_frame ð, /* adapt source and destination of Ethernet frame and IP packet */ _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); if (remote_side.dst_ip() == remote_domain.ip_config().interface().address) { - ip.src(remote_side.dst_ip()); + ip.src(remote_side.dst_ip(), ip_icd); } - ip.dst(remote_side.src_ip()); + ip.dst(remote_side.src_ip(), ip_icd); /* adapt source and destination of embedded IP and transport packet */ - embed_ip.src(remote_side.src_ip()); - embed_ip.dst(remote_side.dst_ip()); + embed_ip.src(remote_side.src_ip(), embed_ip_icd); + embed_ip.dst(remote_side.dst_ip(), embed_ip_icd); _src_port(embed_prot, embed_prot_base, remote_side.src_port()); _dst_port(embed_prot, embed_prot_base, remote_side.dst_port()); /* update checksum of both IP headers and the ICMP header */ - embed_ip.update_checksum(); + embed_ip.update_checksum(embed_ip_icd); icmp.update_checksum(icmp_sz - sizeof(Icmp_packet)); - ip.update_checksum(); + ip.update_checksum(ip_icd); /* send adapted packet to all interfaces of remote domain */ remote_domain.interfaces().for_each([&] (Interface &interface) { @@ -1113,6 +1122,7 @@ void Interface::_handle_icmp_error(Ethernet_frame ð, void Interface::_handle_icmp(Ethernet_frame ð, Size_guard &size_guard, Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, @@ -1139,8 +1149,8 @@ void Interface::_handle_icmp(Ethernet_frame ð, /* try to act as ICMP router */ switch (icmp.type()) { case Icmp_packet::Type::ECHO_REPLY: - case Icmp_packet::Type::ECHO_REQUEST: _handle_icmp_query(eth, size_guard, ip, pkt, prot, prot_base, prot_size, local_domain); break; - case Icmp_packet::Type::DST_UNREACHABLE: _handle_icmp_error(eth, size_guard, ip, pkt, local_domain, icmp, prot_size); break; + case Icmp_packet::Type::ECHO_REQUEST: _handle_icmp_query(eth, size_guard, ip, ip_icd, pkt, prot, prot_base, prot_size, local_domain); break; + case Icmp_packet::Type::DST_UNREACHABLE: _handle_icmp_error(eth, size_guard, ip, ip_icd, pkt, local_domain, icmp, prot_size); break; default: Drop_packet("unhandled type in ICMP"); } } @@ -1150,8 +1160,10 @@ void Interface::_handle_ip(Ethernet_frame ð, Packet_descriptor const &pkt, Domain &local_domain) { + Ipv4_packet &ip { eth.data(size_guard) }; + Internet_checksum_diff ip_icd { }; + /* drop fragmented IPv4 as it isn't supported */ - Ipv4_packet &ip = eth.data(size_guard); Ipv4_address_prefix const &local_intf = local_domain.ip_config().interface(); if (ip.more_fragments() || ip.fragment_offset() != 0) { @@ -1222,8 +1234,8 @@ void Interface::_handle_ip(Ethernet_frame ð, } } else if (prot == L3_protocol::ICMP) { - _handle_icmp(eth, size_guard, ip, pkt, prot, prot_base, prot_size, - local_domain, local_intf); + _handle_icmp(eth, size_guard, ip, ip_icd, pkt, prot, prot_base, + prot_size, local_domain, local_intf); return; } @@ -1246,13 +1258,13 @@ void Interface::_handle_ip(Ethernet_frame ð, " link: ", link); } _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); - ip.src(remote_side.dst_ip()); - ip.dst(remote_side.src_ip()); + ip.src(remote_side.dst_ip(), ip_icd); + ip.dst(remote_side.src_ip(), ip_icd); _src_port(prot, prot_base, remote_side.dst_port()); _dst_port(prot, prot_base, remote_side.src_port()); _pass_prot_to_domain( - remote_domain, eth, size_guard, ip, prot, prot_base, - prot_size); + remote_domain, eth, size_guard, ip, ip_icd, prot, + prot_base, prot_size); _link_packet(prot, prot_base, link, client); done = true; @@ -1276,13 +1288,13 @@ void Interface::_handle_ip(Ethernet_frame ð, } Domain &remote_domain = rule.domain(); _adapt_eth(eth, rule.to_ip(), pkt, remote_domain); - ip.dst(rule.to_ip()); + ip.dst(rule.to_ip(), ip_icd); if (!(rule.to_port() == Port(0))) { _dst_port(prot, prot_base, rule.to_port()); } _nat_link_and_pass( - eth, size_guard, ip, prot, prot_base, prot_size, - local_id, local_domain, remote_domain); + eth, size_guard, ip, ip_icd, prot, prot_base, + prot_size, local_id, local_domain, remote_domain); done = true; }, @@ -1307,7 +1319,7 @@ void Interface::_handle_ip(Ethernet_frame ð, Domain &remote_domain = permit_rule.domain(); _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); _nat_link_and_pass( - eth, size_guard, ip, prot, prot_base, prot_size, + eth, size_guard, ip, ip_icd, prot, prot_base, prot_size, local_id, local_domain, remote_domain); done = true; diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 7e585767e5..b7e798c4a9 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -230,6 +230,7 @@ class Net::Interface : private Interface_list::Element void _handle_icmp_query(Ethernet_frame ð, Size_guard &size_guard, Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, @@ -239,6 +240,7 @@ class Net::Interface : private Interface_list::Element void _handle_icmp_error(Ethernet_frame ð, Size_guard &size_guard, Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, Packet_descriptor const &pkt, Domain &local_domain, Icmp_packet &icmp, @@ -247,6 +249,7 @@ class Net::Interface : private Interface_list::Element void _handle_icmp(Ethernet_frame ð, Size_guard &size_guard, Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, @@ -262,6 +265,7 @@ class Net::Interface : private Interface_list::Element void _nat_link_and_pass(Ethernet_frame ð, Size_guard &size_guard, Ipv4_packet &ip, + Internet_checksum_diff &ip_icd, L3_protocol const prot, void *const prot_base, Genode::size_t const prot_size, @@ -276,13 +280,14 @@ class Net::Interface : private Interface_list::Element Size_guard &size_guard, Domain &local_domain); - void _pass_prot_to_domain(Domain &domain, - Ethernet_frame ð, - Size_guard &size_guard, - Ipv4_packet &ip, - L3_protocol const prot, - void *const prot_base, - Genode::size_t const prot_size); + void _pass_prot_to_domain(Domain &domain, + Ethernet_frame ð, + Size_guard &size_guard, + Ipv4_packet &ip, + Internet_checksum_diff const &ip_icd, + L3_protocol const prot, + void *const prot_base, + Genode::size_t const prot_size); void _handle_pkt(); From 9a37ccfe291508c5199e10813117b16a5766ff44 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Sun, 17 Jul 2022 13:54:41 +0200 Subject: [PATCH 118/354] nic_router: incremental L4 checksum updates The checksums for forwarded/routed UDP, TCP and ICMP, used to be always re-calculated from scratch in the NIC router although the router changes only a few packet fields. This commit replaces the old approach whereever sensible with an algorithm for incremental checksum updates suggested in RFC 1071. The goal is to improve router performance. Ref #4555 --- repos/os/include/net/icmp.h | 5 + repos/os/include/net/internet_checksum.h | 5 + repos/os/include/net/ipv4.h | 3 + repos/os/include/net/tcp.h | 5 + repos/os/include/net/udp.h | 5 + repos/os/src/lib/net/icmp.cc | 26 ++++ repos/os/src/lib/net/internet_checksum.cc | 6 + repos/os/src/lib/net/ipv4.cc | 12 ++ repos/os/src/lib/net/tcp.cc | 22 +++ repos/os/src/lib/net/udp.cc | 22 +++ repos/os/src/server/nic_router/interface.cc | 162 +++++++++++--------- repos/os/src/server/nic_router/interface.h | 20 +-- 12 files changed, 214 insertions(+), 79 deletions(-) diff --git a/repos/os/include/net/icmp.h b/repos/os/include/net/icmp.h index f1da401979..288a56bb6f 100644 --- a/repos/os/include/net/icmp.h +++ b/repos/os/include/net/icmp.h @@ -114,6 +114,8 @@ class Net::Icmp_packet void update_checksum(Genode::size_t data_sz); + void update_checksum(Internet_checksum_diff const &icd); + bool checksum_error(Genode::size_t data_sz) const; @@ -157,6 +159,9 @@ class Net::Icmp_packet void query_id(Genode::uint16_t v) { _rest_of_header_u16[0] = host_to_big_endian(v); } void query_seq(Genode::uint16_t v) { _rest_of_header_u16[1] = host_to_big_endian(v); } + void type_and_code(Type t, Code c, Internet_checksum_diff &icd); + void query_id(Genode::uint16_t v, Internet_checksum_diff &icd); + /********* ** log ** diff --git a/repos/os/include/net/internet_checksum.h b/repos/os/include/net/internet_checksum.h index 8ff8ccd566..b0bfe27385 100644 --- a/repos/os/include/net/internet_checksum.h +++ b/repos/os/include/net/internet_checksum.h @@ -76,6 +76,11 @@ namespace Net { Packed_uint16 const *old_data_ptr, Genode::size_t data_sz); + /** + * Update this modifier by adding up another modifier + */ + void add_up_diff(Internet_checksum_diff const &icd); + /** * Return the given checksum with this modifier applied */ diff --git a/repos/os/include/net/ipv4.h b/repos/os/include/net/ipv4.h index ad01ceea83..41380a4e1d 100644 --- a/repos/os/include/net/ipv4.h +++ b/repos/os/include/net/ipv4.h @@ -98,6 +98,9 @@ class Net::Ipv4_packet void update_checksum(Internet_checksum_diff const &icd); + void update_checksum(Internet_checksum_diff const &icd, + Internet_checksum_diff &caused_icd); + bool checksum_error() const; private: diff --git a/repos/os/include/net/tcp.h b/repos/os/include/net/tcp.h index a4f38a66dd..8d0cec9a56 100644 --- a/repos/os/include/net/tcp.h +++ b/repos/os/include/net/tcp.h @@ -72,6 +72,8 @@ class Net::Tcp_packet Ipv4_address ip_dst, size_t tcp_size); + void update_checksum(Internet_checksum_diff const &icd); + /*************** ** Accessors ** @@ -99,6 +101,9 @@ class Net::Tcp_packet void src_port(Port p) { _src_port = host_to_big_endian(p.value); } void dst_port(Port p) { _dst_port = host_to_big_endian(p.value); } + void src_port(Port p, Internet_checksum_diff &icd); + void dst_port(Port p, Internet_checksum_diff &icd); + /********* ** log ** diff --git a/repos/os/include/net/udp.h b/repos/os/include/net/udp.h index fc1e50310f..f275aa14f2 100644 --- a/repos/os/include/net/udp.h +++ b/repos/os/include/net/udp.h @@ -84,6 +84,8 @@ class Net::Udp_packet void update_checksum(Ipv4_address ip_src, Ipv4_address ip_dst); + void update_checksum(Internet_checksum_diff const &icd); + bool checksum_error(Ipv4_address ip_src, Ipv4_address ip_dst) const; @@ -103,6 +105,9 @@ class Net::Udp_packet void src_port_big_endian(Genode::uint16_t v) { _src_port = v; } void dst_port_big_endian(Genode::uint16_t v) { _dst_port = v; } + void src_port(Port p, Internet_checksum_diff &icd); + void dst_port(Port p, Internet_checksum_diff &icd); + /********* ** log ** diff --git a/repos/os/src/lib/net/icmp.cc b/repos/os/src/lib/net/icmp.cc index 50d673a906..772d6ef634 100644 --- a/repos/os/src/lib/net/icmp.cc +++ b/repos/os/src/lib/net/icmp.cc @@ -34,7 +34,33 @@ void Icmp_packet::update_checksum(size_t data_sz) } +void Icmp_packet::update_checksum(Internet_checksum_diff const &icd) +{ + _checksum = icd.apply_to(_checksum); +} + + bool Icmp_packet::checksum_error(size_t data_sz) const { return internet_checksum((Packed_uint16 *)this, sizeof(Icmp_packet) + data_sz); } + + +void Icmp_packet::query_id(uint16_t v, Internet_checksum_diff &icd) +{ + uint16_t const v_be { host_to_big_endian(v) }; + icd.add_up_diff(( + Packed_uint16 *)&v_be, (Packed_uint16 *)&_rest_of_header_u16[0], 2); + + _rest_of_header_u16[0] = v_be; +} + + +void Icmp_packet::type_and_code(Type t, Code c, Internet_checksum_diff &icd) +{ + uint16_t const old_type_and_code { *(uint16_t*)this }; + type(t); + code(c); + icd.add_up_diff( + (Packed_uint16 *)&_type, (Packed_uint16 *)&old_type_and_code, 2); +} diff --git a/repos/os/src/lib/net/internet_checksum.cc b/repos/os/src/lib/net/internet_checksum.cc index 0580337e90..77ee15b70b 100644 --- a/repos/os/src/lib/net/internet_checksum.cc +++ b/repos/os/src/lib/net/internet_checksum.cc @@ -96,6 +96,12 @@ uint16_t Net::internet_checksum_pseudo_ip(Packed_uint16 const *data_ptr, ** Internet_checksum_diff ** ****************************/ +void Internet_checksum_diff::add_up_diff(Internet_checksum_diff const &icd) +{ + _value += icd._value; +} + + void Internet_checksum_diff::add_up_diff(Packed_uint16 const *new_data_ptr, Packed_uint16 const *old_data_ptr, size_t data_sz) diff --git a/repos/os/src/lib/net/ipv4.cc b/repos/os/src/lib/net/ipv4.cc index e2a4e5646a..cc33996343 100644 --- a/repos/os/src/lib/net/ipv4.cc +++ b/repos/os/src/lib/net/ipv4.cc @@ -176,3 +176,15 @@ void Ipv4_packet::update_checksum(Internet_checksum_diff const &icd) { _checksum = icd.apply_to(_checksum); } + + +void +Ipv4_packet::update_checksum(Internet_checksum_diff const &icd, + Internet_checksum_diff &caused_icd) +{ + uint16_t const new_checksum { icd.apply_to(_checksum) }; + caused_icd.add_up_diff( + (Packed_uint16 *)&new_checksum, (Packed_uint16 *)&_checksum, 2); + + _checksum = new_checksum; +} diff --git a/repos/os/src/lib/net/tcp.cc b/repos/os/src/lib/net/tcp.cc index d25d1ee277..f600454457 100644 --- a/repos/os/src/lib/net/tcp.cc +++ b/repos/os/src/lib/net/tcp.cc @@ -47,3 +47,25 @@ void Net::Tcp_packet::update_checksum(Ipv4_address ip_src, host_to_big_endian((uint16_t)tcp_size), Ipv4_packet::Protocol::TCP, ip_src, ip_dst); } + + +void Net::Tcp_packet::update_checksum(Internet_checksum_diff const &icd) +{ + _checksum = icd.apply_to(_checksum); +} + + +void Net::Tcp_packet::src_port(Port p, Internet_checksum_diff &icd) +{ + uint16_t const p_be { host_to_big_endian(p.value) }; + icd.add_up_diff((Packed_uint16 *)&p_be, (Packed_uint16 *)&_src_port, 2); + _src_port = p_be; +} + + +void Net::Tcp_packet::dst_port(Port p, Internet_checksum_diff &icd) +{ + uint16_t const p_be { host_to_big_endian(p.value) }; + icd.add_up_diff((Packed_uint16 *)&p_be, (Packed_uint16 *)&_dst_port, 2); + _dst_port = p_be; +} diff --git a/repos/os/src/lib/net/udp.cc b/repos/os/src/lib/net/udp.cc index 0c99cff1bb..766399dc6d 100644 --- a/repos/os/src/lib/net/udp.cc +++ b/repos/os/src/lib/net/udp.cc @@ -41,9 +41,31 @@ void Net::Udp_packet::update_checksum(Ipv4_address ip_src, } +void Net::Udp_packet::update_checksum(Internet_checksum_diff const &icd) +{ + _checksum = icd.apply_to(_checksum); +} + + bool Net::Udp_packet::checksum_error(Ipv4_address ip_src, Ipv4_address ip_dst) const { return internet_checksum_pseudo_ip((Packed_uint16 *)this, length(), _length, Ipv4_packet::Protocol::UDP, ip_src, ip_dst); } + + +void Net::Udp_packet::src_port(Port p, Internet_checksum_diff &icd) +{ + uint16_t const p_be { host_to_big_endian(p.value) }; + icd.add_up_diff((Packed_uint16 *)&p_be, (Packed_uint16 *)&_src_port, 2); + _src_port = p_be; +} + + +void Net::Udp_packet::dst_port(Port p, Internet_checksum_diff &icd) +{ + uint16_t const p_be { host_to_big_endian(p.value) }; + icd.add_up_diff((Packed_uint16 *)&p_be, (Packed_uint16 *)&_dst_port, 2); + _dst_port = p_be; +} diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 114587a032..83c869ad19 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -155,25 +155,21 @@ static void _link_packet(L3_protocol const prot, } -static void _update_checksum(L3_protocol const prot, - void *const prot_base, - size_t const prot_size, - Ipv4_address const src, - Ipv4_address const dst, - size_t const ip_size) +static void _l4_update_checksum(L3_protocol const prot, + void *const prot_base, + Internet_checksum_diff const &prot_icd) { switch (prot) { case L3_protocol::TCP: - ((Tcp_packet *)prot_base)->update_checksum(src, dst, prot_size); + ((Tcp_packet *)prot_base)->update_checksum(prot_icd); return; case L3_protocol::UDP: - ((Udp_packet *)prot_base)->update_checksum(src, dst); + ((Udp_packet *)prot_base)->update_checksum(prot_icd); return; case L3_protocol::ICMP: { Icmp_packet &icmp = *(Icmp_packet *)prot_base; - icmp.update_checksum(ip_size - sizeof(Ipv4_packet) - - sizeof(Icmp_packet)); + icmp.update_checksum(prot_icd); return; } default: throw Interface::Bad_transport_protocol(); } @@ -190,14 +186,15 @@ static Port _dst_port(L3_protocol const prot, void *const prot_base) } -static void _dst_port(L3_protocol const prot, - void *const prot_base, - Port const port) +static void _dst_port(L3_protocol const prot, + void *const prot_base, + Internet_checksum_diff &prot_icd, + Port const port) { switch (prot) { - case L3_protocol::TCP: (*(Tcp_packet *)prot_base).dst_port(port); return; - case L3_protocol::UDP: (*(Udp_packet *)prot_base).dst_port(port); return; - case L3_protocol::ICMP: (*(Icmp_packet *)prot_base).query_id(port.value); return; + case L3_protocol::TCP: (*(Tcp_packet *)prot_base).dst_port(port, prot_icd); return; + case L3_protocol::UDP: (*(Udp_packet *)prot_base).dst_port(port, prot_icd); return; + case L3_protocol::ICMP: (*(Icmp_packet *)prot_base).query_id(port.value, prot_icd); return; default: throw Interface::Bad_transport_protocol(); } } @@ -212,14 +209,15 @@ static Port _src_port(L3_protocol const prot, void *const prot_base) } -static void _src_port(L3_protocol const prot, - void *const prot_base, - Port const port) +static void _src_port(L3_protocol const prot, + void *const prot_base, + Internet_checksum_diff &prot_icd, + Port const port) { switch (prot) { - case L3_protocol::TCP: ((Tcp_packet *)prot_base)->src_port(port); return; - case L3_protocol::UDP: ((Udp_packet *)prot_base)->src_port(port); return; - case L3_protocol::ICMP: ((Icmp_packet *)prot_base)->query_id(port.value); return; + case L3_protocol::TCP: ((Tcp_packet *)prot_base)->src_port(port, prot_icd); return; + case L3_protocol::UDP: ((Udp_packet *)prot_base)->src_port(port, prot_icd); return; + case L3_protocol::ICMP: ((Icmp_packet *)prot_base)->query_id(port.value, prot_icd); return; default: throw Interface::Bad_transport_protocol(); } } @@ -301,11 +299,9 @@ void Interface::_pass_prot_to_domain(Domain &domain, Internet_checksum_diff const &ip_icd, L3_protocol const prot, void *const prot_base, - size_t const prot_size) + Internet_checksum_diff const &prot_icd) { - _update_checksum( - prot, prot_base, prot_size, ip.src(), ip.dst(), ip.total_length()); - + _l4_update_checksum(prot, prot_base, prot_icd); ip.update_checksum(ip_icd); domain.interfaces().for_each([&] (Interface &interface) { @@ -584,7 +580,7 @@ void Interface::_nat_link_and_pass(Ethernet_frame ð, Internet_checksum_diff &ip_icd, L3_protocol const prot, void *const prot_base, - size_t const prot_size, + Internet_checksum_diff &prot_icd, Link_side_id const &local_id, Domain &local_domain, Domain &remote_domain) @@ -598,8 +594,13 @@ void Interface::_nat_link_and_pass(Ethernet_frame ð, if(_config().verbose()) { log("[", local_domain, "] using NAT rule: ", nat); } - _src_port(prot, prot_base, nat.port_alloc(prot).alloc()); - ip.src(remote_domain.ip_config().interface().address, ip_icd); + _src_port(prot, prot_base, prot_icd, nat.port_alloc(prot).alloc()); + Internet_checksum_diff icd { }; + ip.src(remote_domain.ip_config().interface().address, icd); + ip_icd.add_up_diff(icd); + if (prot == L3_protocol::TCP || prot == L3_protocol::UDP) { + prot_icd.add_up_diff(icd); + } remote_port_alloc = nat.port_alloc(prot); }, [&] /* no_match */ () { } @@ -609,7 +610,7 @@ void Interface::_nat_link_and_pass(Ethernet_frame ð, _new_link(prot, local_id, remote_port_alloc, remote_domain, remote_id); _pass_prot_to_domain( remote_domain, eth, size_guard, ip, ip_icd, prot, prot_base, - prot_size); + prot_icd); } catch (Port_allocator_guard::Out_of_indices) { switch (prot) { @@ -945,11 +946,11 @@ void Interface::handle_interface_link_state() } -void Interface::_send_icmp_echo_reply(Ethernet_frame ð, - Ipv4_packet &ip, - Icmp_packet &icmp, - size_t icmp_sz, - Size_guard &size_guard) +void Interface::_send_icmp_echo_reply(Ethernet_frame ð, + Ipv4_packet &ip, + Icmp_packet &icmp, + Internet_checksum_diff &icmp_icd, + Size_guard &size_guard) { /* adapt Ethernet header */ Mac_address const eth_src = eth.src(); @@ -962,8 +963,9 @@ void Interface::_send_icmp_echo_reply(Ethernet_frame ð, ip.dst(ip_src); /* adapt ICMP header */ - icmp.type(Icmp_packet::Type::ECHO_REPLY); - icmp.code(Icmp_packet::Code::ECHO_REPLY); + icmp.type_and_code(Icmp_packet::Type::ECHO_REPLY, + Icmp_packet::Code::ECHO_REPLY, + icmp_icd); /* * Update checksums and send @@ -971,7 +973,7 @@ void Interface::_send_icmp_echo_reply(Ethernet_frame ð, * Skip updating the IPv4 checksum because we have only swapped SRC and * DST and these changes cancel each other out in checksum calculation. */ - icmp.update_checksum(icmp_sz - sizeof(Icmp_packet)); + icmp.update_checksum(icmp_icd); send(eth, size_guard); } @@ -983,7 +985,7 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, - size_t prot_size, + Internet_checksum_diff &prot_icd, Domain &local_domain) { Link_side_id const local_id = { ip.src(), _src_port(prot, prot_base), @@ -1004,13 +1006,18 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, " link: ", link); } _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); - ip.src(remote_side.dst_ip(), ip_icd); - ip.dst(remote_side.src_ip(), ip_icd); - _src_port(prot, prot_base, remote_side.dst_port()); - _dst_port(prot, prot_base, remote_side.src_port()); + Internet_checksum_diff icd { }; + ip.src(remote_side.dst_ip(), icd); + ip.dst(remote_side.src_ip(), icd); + ip_icd.add_up_diff(icd); + if (prot == L3_protocol::TCP || prot == L3_protocol::UDP) { + prot_icd.add_up_diff(icd); + } + _src_port(prot, prot_base, prot_icd, remote_side.dst_port()); + _dst_port(prot, prot_base, prot_icd, remote_side.src_port()); _pass_prot_to_domain( remote_domain, eth, size_guard, ip, ip_icd, prot, - prot_base, prot_size); + prot_base, prot_icd); _link_packet(prot, prot_base, link, client); done = true; @@ -1032,7 +1039,7 @@ void Interface::_handle_icmp_query(Ethernet_frame ð, Domain &remote_domain = rule.domain(); _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); _nat_link_and_pass(eth, size_guard, ip, ip_icd, prot, prot_base, - prot_size, local_id, local_domain, + prot_icd, local_id, local_domain, remote_domain); done = true; @@ -1054,7 +1061,7 @@ void Interface::_handle_icmp_error(Ethernet_frame ð, Packet_descriptor const &pkt, Domain &local_domain, Icmp_packet &icmp, - size_t icmp_sz) + Internet_checksum_diff &icmp_icd) { Ipv4_packet &embed_ip { icmp.data(size_guard) }; Internet_checksum_diff embed_ip_icd { }; @@ -1092,14 +1099,18 @@ void Interface::_handle_icmp_error(Ethernet_frame ð, ip.dst(remote_side.src_ip(), ip_icd); /* adapt source and destination of embedded IP and transport packet */ - embed_ip.src(remote_side.src_ip(), embed_ip_icd); - embed_ip.dst(remote_side.dst_ip(), embed_ip_icd); - _src_port(embed_prot, embed_prot_base, remote_side.src_port()); - _dst_port(embed_prot, embed_prot_base, remote_side.dst_port()); + Internet_checksum_diff icd { }; + embed_ip.src(remote_side.src_ip(), icd); + embed_ip.dst(remote_side.dst_ip(), icd); + embed_ip_icd.add_up_diff(icd); + + _src_port(embed_prot, embed_prot_base, icd, remote_side.src_port()); + _dst_port(embed_prot, embed_prot_base, icd, remote_side.dst_port()); /* update checksum of both IP headers and the ICMP header */ - embed_ip.update_checksum(embed_ip_icd); - icmp.update_checksum(icmp_sz - sizeof(Icmp_packet)); + embed_ip.update_checksum(embed_ip_icd, icd); + icmp_icd.add_up_diff(icd); + icmp.update_checksum(icmp_icd); ip.update_checksum(ip_icd); /* send adapted packet to all interfaces of remote domain */ @@ -1126,7 +1137,7 @@ void Interface::_handle_icmp(Ethernet_frame ð, Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, - size_t prot_size, + Internet_checksum_diff &prot_icd, Domain &local_domain, Ipv4_address_prefix const &local_intf) { @@ -1143,14 +1154,14 @@ void Interface::_handle_icmp(Ethernet_frame ð, if(_config().verbose()) { log("[", local_domain, "] act as ICMP Echo server"); } - _send_icmp_echo_reply(eth, ip, icmp, prot_size, size_guard); + _send_icmp_echo_reply(eth, ip, icmp, prot_icd, size_guard); return; } /* try to act as ICMP router */ switch (icmp.type()) { case Icmp_packet::Type::ECHO_REPLY: - case Icmp_packet::Type::ECHO_REQUEST: _handle_icmp_query(eth, size_guard, ip, ip_icd, pkt, prot, prot_base, prot_size, local_domain); break; - case Icmp_packet::Type::DST_UNREACHABLE: _handle_icmp_error(eth, size_guard, ip, ip_icd, pkt, local_domain, icmp, prot_size); break; + case Icmp_packet::Type::ECHO_REQUEST: _handle_icmp_query(eth, size_guard, ip, ip_icd, pkt, prot, prot_base, prot_icd, local_domain); break; + case Icmp_packet::Type::DST_UNREACHABLE: _handle_icmp_error(eth, size_guard, ip, ip_icd, pkt, local_domain, icmp, prot_icd); break; default: Drop_packet("unhandled type in ICMP"); } } @@ -1190,9 +1201,9 @@ void Interface::_handle_ip(Ethernet_frame ð, /* try to route via transport layer rules */ bool done { false }; try { - L3_protocol const prot = ip.protocol(); - size_t const prot_size = size_guard.unconsumed(); - void *const prot_base = _prot_base(prot, size_guard, ip); + L3_protocol const prot { ip.protocol() }; + void *const prot_base { _prot_base(prot, size_guard, ip) }; + Internet_checksum_diff prot_icd { }; /* try handling DHCP requests before trying any routing */ if (prot == L3_protocol::UDP) { @@ -1235,7 +1246,7 @@ void Interface::_handle_ip(Ethernet_frame ð, } else if (prot == L3_protocol::ICMP) { _handle_icmp(eth, size_guard, ip, ip_icd, pkt, prot, prot_base, - prot_size, local_domain, local_intf); + prot_icd, local_domain, local_intf); return; } @@ -1258,13 +1269,20 @@ void Interface::_handle_ip(Ethernet_frame ð, " link: ", link); } _adapt_eth(eth, remote_side.src_ip(), pkt, remote_domain); - ip.src(remote_side.dst_ip(), ip_icd); - ip.dst(remote_side.src_ip(), ip_icd); - _src_port(prot, prot_base, remote_side.dst_port()); - _dst_port(prot, prot_base, remote_side.src_port()); + + Internet_checksum_diff icd { }; + ip.src(remote_side.dst_ip(), icd); + ip.dst(remote_side.src_ip(), icd); + ip_icd.add_up_diff(icd); + if (prot == L3_protocol::TCP || prot == L3_protocol::UDP) { + prot_icd.add_up_diff(icd); + } + _src_port(prot, prot_base, prot_icd, remote_side.dst_port()); + _dst_port(prot, prot_base, prot_icd, remote_side.src_port()); + _pass_prot_to_domain( remote_domain, eth, size_guard, ip, ip_icd, prot, - prot_base, prot_size); + prot_base, prot_icd); _link_packet(prot, prot_base, link, client); done = true; @@ -1288,13 +1306,19 @@ void Interface::_handle_ip(Ethernet_frame ð, } Domain &remote_domain = rule.domain(); _adapt_eth(eth, rule.to_ip(), pkt, remote_domain); - ip.dst(rule.to_ip(), ip_icd); + + Internet_checksum_diff icd { }; + ip.dst(rule.to_ip(), icd); + ip_icd.add_up_diff(icd); + if (prot == L3_protocol::TCP || prot == L3_protocol::UDP) { + prot_icd.add_up_diff(icd); + } if (!(rule.to_port() == Port(0))) { - _dst_port(prot, prot_base, rule.to_port()); + _dst_port(prot, prot_base, prot_icd, rule.to_port()); } _nat_link_and_pass( eth, size_guard, ip, ip_icd, prot, prot_base, - prot_size, local_id, local_domain, remote_domain); + prot_icd, local_id, local_domain, remote_domain); done = true; }, @@ -1319,7 +1343,7 @@ void Interface::_handle_ip(Ethernet_frame ð, Domain &remote_domain = permit_rule.domain(); _adapt_eth(eth, local_id.dst_ip, pkt, remote_domain); _nat_link_and_pass( - eth, size_guard, ip, ip_icd, prot, prot_base, prot_size, + eth, size_guard, ip, ip_icd, prot, prot_base, prot_icd, local_id, local_domain, remote_domain); done = true; diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index b7e798c4a9..117e1e2a73 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -189,11 +189,11 @@ class Net::Interface : private Interface_list::Element Genode::uint32_t xid, Ipv4_address_prefix const &local_intf); - void _send_icmp_echo_reply(Ethernet_frame ð, - Ipv4_packet &ip, - Icmp_packet &icmp, - Genode::size_t icmp_sz, - Size_guard &size_guard); + void _send_icmp_echo_reply(Ethernet_frame ð, + Ipv4_packet &ip, + Icmp_packet &icmp, + Internet_checksum_diff &icmp_icd, + Size_guard &size_guard); Forward_rule_tree &_forward_rules(Domain &local_domain, L3_protocol const prot) const; @@ -234,7 +234,7 @@ class Net::Interface : private Interface_list::Element Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, - Genode::size_t prot_size, + Internet_checksum_diff &prot_icd, Domain &local_domain); void _handle_icmp_error(Ethernet_frame ð, @@ -244,7 +244,7 @@ class Net::Interface : private Interface_list::Element Packet_descriptor const &pkt, Domain &local_domain, Icmp_packet &icmp, - Genode::size_t icmp_sz); + Internet_checksum_diff &icmp_icd); void _handle_icmp(Ethernet_frame ð, Size_guard &size_guard, @@ -253,7 +253,7 @@ class Net::Interface : private Interface_list::Element Packet_descriptor const &pkt, L3_protocol prot, void *prot_base, - Genode::size_t prot_size, + Internet_checksum_diff &prot_icd, Domain &local_domain, Ipv4_address_prefix const &local_intf); @@ -268,7 +268,7 @@ class Net::Interface : private Interface_list::Element Internet_checksum_diff &ip_icd, L3_protocol const prot, void *const prot_base, - Genode::size_t const prot_size, + Internet_checksum_diff &prot_icd, Link_side_id const &local_id, Domain &local_domain, Domain &remote_domain); @@ -287,7 +287,7 @@ class Net::Interface : private Interface_list::Element Internet_checksum_diff const &ip_icd, L3_protocol const prot, void *const prot_base, - Genode::size_t const prot_size); + Internet_checksum_diff const &prot_icd); void _handle_pkt(); From 8df8f78fe2950f43b2ce916aa961581e5a660cd2 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Mon, 18 Jul 2022 11:18:31 +0200 Subject: [PATCH 119/354] nic_router_dhcp: fix signal handler in test client The test client did not react upon packet_avail and ack_avail signals. genodelabs/genode#4555 --- .../os/src/test/nic_router_dhcp/client/nic.cc | 4 ++-- .../os/src/test/nic_router_dhcp/client/nic.h | 20 ++++++++----------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/repos/os/src/test/nic_router_dhcp/client/nic.cc b/repos/os/src/test/nic_router_dhcp/client/nic.cc index dd835d63e3..87e2a9952b 100644 --- a/repos/os/src/test/nic_router_dhcp/client/nic.cc +++ b/repos/os/src/test/nic_router_dhcp/client/nic.cc @@ -18,14 +18,14 @@ using namespace Net; using namespace Genode; -void Net::Nic::_ready_to_ack() +void Net::Nic::_handle_source() { while (_source().ack_avail()) { _source().release_packet(_source().get_acked_packet()); } } -void Net::Nic::_ready_to_submit() +void Net::Nic::_handle_sink() { while (_sink().packet_avail()) { diff --git a/repos/os/src/test/nic_router_dhcp/client/nic.h b/repos/os/src/test/nic_router_dhcp/client/nic.h index b874c7f808..5005cd5360 100644 --- a/repos/os/src/test/nic_router_dhcp/client/nic.h +++ b/repos/os/src/test/nic_router_dhcp/client/nic.h @@ -61,10 +61,8 @@ class Net::Nic bool const &_verbose; ::Nic::Packet_allocator _pkt_alloc { &_alloc }; ::Nic::Connection _nic { _env, &_pkt_alloc, BUF_SIZE, BUF_SIZE }; - Signal_handler _sink_ack { _env.ep(), *this, &Nic::_ack_avail }; - Signal_handler _sink_submit { _env.ep(), *this, &Nic::_ready_to_submit }; - Signal_handler _source_ack { _env.ep(), *this, &Nic::_ready_to_ack }; - Signal_handler _source_submit { _env.ep(), *this, &Nic::_packet_avail }; + Signal_handler _sink_handler { _env.ep(), *this, &Nic::_handle_sink }; + Signal_handler _source_handler { _env.ep(), *this, &Nic::_handle_source }; Signal_handler _link_state_handler { _env.ep(), *this, &Nic::handle_link_state }; Mac_address const _mac { _nic.mac_address() }; @@ -76,10 +74,8 @@ class Net::Nic ** Packet-stream signal handlers ** ***********************************/ - void _ready_to_submit(); - void _ack_avail() { } - void _ready_to_ack(); - void _packet_avail() { } + void _handle_sink(); + void _handle_source(); public: @@ -93,10 +89,10 @@ class Net::Nic _handler (handler), _verbose (verbose) { - _nic.rx_channel()->sigh_ready_to_ack(_sink_ack); - _nic.rx_channel()->sigh_packet_avail(_sink_submit); - _nic.tx_channel()->sigh_ack_avail(_source_ack); - _nic.tx_channel()->sigh_ready_to_submit(_source_submit); + _nic.rx_channel()->sigh_ready_to_ack(_sink_handler); + _nic.rx_channel()->sigh_packet_avail(_sink_handler); + _nic.tx_channel()->sigh_ack_avail(_source_handler); + _nic.tx_channel()->sigh_ready_to_submit(_source_handler); _nic.link_state_sigh(_link_state_handler); } From 3e562bc9bb954225997dec453c16b4effa787a0d Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 16 Jun 2022 14:26:12 +0200 Subject: [PATCH 120/354] os: add nic_perf component The nic_perf component is used for benchmarking the throughput of Nic and Uplink sessions. genodelabs/genode#4555 --- repos/os/src/server/nic_perf/README | 46 ++++ repos/os/src/server/nic_perf/dhcp_client.cc | 245 +++++++++++++++++ repos/os/src/server/nic_perf/dhcp_client.h | 89 ++++++ repos/os/src/server/nic_perf/interface.cc | 254 ++++++++++++++++++ repos/os/src/server/nic_perf/interface.h | 153 +++++++++++ repos/os/src/server/nic_perf/main.cc | 123 +++++++++ repos/os/src/server/nic_perf/nic_client.h | 71 +++++ repos/os/src/server/nic_perf/nic_component.h | 142 ++++++++++ .../src/server/nic_perf/packet_generator.cc | 134 +++++++++ .../os/src/server/nic_perf/packet_generator.h | 116 ++++++++ repos/os/src/server/nic_perf/packet_stats.h | 90 +++++++ repos/os/src/server/nic_perf/target.mk | 7 + .../os/src/server/nic_perf/uplink_component.h | 195 ++++++++++++++ 13 files changed, 1665 insertions(+) create mode 100644 repos/os/src/server/nic_perf/README create mode 100644 repos/os/src/server/nic_perf/dhcp_client.cc create mode 100644 repos/os/src/server/nic_perf/dhcp_client.h create mode 100644 repos/os/src/server/nic_perf/interface.cc create mode 100644 repos/os/src/server/nic_perf/interface.h create mode 100644 repos/os/src/server/nic_perf/main.cc create mode 100644 repos/os/src/server/nic_perf/nic_client.h create mode 100644 repos/os/src/server/nic_perf/nic_component.h create mode 100644 repos/os/src/server/nic_perf/packet_generator.cc create mode 100644 repos/os/src/server/nic_perf/packet_generator.h create mode 100644 repos/os/src/server/nic_perf/packet_stats.h create mode 100644 repos/os/src/server/nic_perf/target.mk create mode 100644 repos/os/src/server/nic_perf/uplink_component.h diff --git a/repos/os/src/server/nic_perf/README b/repos/os/src/server/nic_perf/README new file mode 100644 index 0000000000..e49bf2032f --- /dev/null +++ b/repos/os/src/server/nic_perf/README @@ -0,0 +1,46 @@ +The 'nic_perf' component is a benchmark component for the Nic and Uplink +service. It can act as a Nic/Uplink server and a Nic client. The component +periodically logs the number of transmitted/received packets and the resulting +data rate. When enabled, it transmits continuous stream of UDP packets to a +predefined receiver as a test stimulus. + + +Basics +~~~~~~ + +This is an example configuration: + +! +! +! +! +! +! +! +! + +The 'period_ms' attribute specifies the logging intervall (in milliseconds). By +default, logging is disabled. The 'count' attribute defines after how may +periods the component exits. Session policies for connecting Nic/Uplink clients +are specified by '' nodes resp. a '' node. The component +opens a single Nic connection if a '' node is provided. + +All sub-nodes comprise an optional '' node and an optional '' +node. This is an overview of their attributes: + +:interface.ip: + Optional. Specifies the own IP address. If not specified, the component will + send DHCP requests to acquire an IP. + +:interface.dhcp_client_ip: + Optional. If specified, the component responds to DHCP requests with this IP + address. + +:tx.mtu: + Optional. Sets the size of the transmitted test packets. + +:tx.to: + Mandatory. Specifies the destination IP address. + +:tx.udp_port: + Mandatory. Specifies the destination port. diff --git a/repos/os/src/server/nic_perf/dhcp_client.cc b/repos/os/src/server/nic_perf/dhcp_client.cc new file mode 100644 index 0000000000..a26de4ee66 --- /dev/null +++ b/repos/os/src/server/nic_perf/dhcp_client.cc @@ -0,0 +1,245 @@ +/* + * \brief DHCP client state model + * \author Martin Stein + * \date 2016-08-24 + */ + +/* + * Copyright (C) 2016-2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include +#include + +/* Genode includes */ +#include + +enum { PKT_SIZE = 1024 }; + +struct Send_buffer_too_small : Genode::Exception { }; +struct Bad_send_dhcp_args : Genode::Exception { }; + +using namespace Genode; +using namespace Net; +using Message_type = Dhcp_packet::Message_type; +using Dhcp_options = Dhcp_packet::Options_aggregator; + + +/*************** + ** Utilities ** + ***************/ + +void append_param_req_list(Dhcp_options &dhcp_opts) +{ + dhcp_opts.append_param_req_list([&] (Dhcp_options::Parameter_request_list_data &data) { + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + data.append_param_req(); + }); +} + + +/***************** + ** Dhcp_client ** + *****************/ + +Dhcp_client::Dhcp_client(Timer::Connection &timer, + Nic_perf::Interface &interface) +: + _timeout(timer, *this, &Dhcp_client::_handle_timeout), + _interface(interface) +{ + _discover(); +} + + +void Dhcp_client::_discover() +{ + _set_state(State::SELECT, _discover_timeout); + _send(Message_type::DISCOVER, Ipv4_address(), Ipv4_address(), + Ipv4_address()); +} + + +void Dhcp_client::_rerequest(State next_state) +{ + _set_state(next_state, _rerequest_timeout(2)); + Ipv4_address const client_ip = _interface.ip(); + _send(Message_type::REQUEST, client_ip, Ipv4_address(), client_ip); +} + + +void Dhcp_client::_set_state(State state, Microseconds timeout) +{ + _state = state; + _timeout.schedule(timeout); +} + + +Microseconds Dhcp_client::_rerequest_timeout(unsigned lease_time_div_log2) +{ + /* FIXME limit the time because of shortcomings in timeout framework */ + enum { MAX_TIMEOUT_SEC = 3600 }; + uint64_t timeout_sec = _lease_time_sec >> lease_time_div_log2; + + if (timeout_sec > MAX_TIMEOUT_SEC) { + timeout_sec = MAX_TIMEOUT_SEC; + warning("Had to prune the state timeout of DHCP client"); + } + return Microseconds(timeout_sec * 1000 * 1000); +} + + +void Dhcp_client::_handle_timeout(Duration) +{ + switch (_state) { + case State::BOUND: _rerequest(State::RENEW); break; + case State::RENEW: _rerequest(State::REBIND); break; + default: _discover(); + } +} + + +void Dhcp_client::handle_dhcp(Dhcp_packet &dhcp, Ethernet_frame ð, Size_guard &) +{ + if (eth.dst() != _interface.mac() && + eth.dst() != Mac_address(0xff)) + { + throw Drop_packet_inform("DHCP client expects Ethernet targeting the router"); + } + + if (dhcp.client_mac() != _interface.mac()) { + throw Drop_packet_inform("DHCP client expects DHCP targeting the router"); } + + try { _handle_dhcp_reply(dhcp); } + catch (Dhcp_packet::Option_not_found) { + throw Drop_packet_inform("DHCP client misses DHCP option"); } +} + + +void Dhcp_client::_handle_dhcp_reply(Dhcp_packet &dhcp) +{ + Message_type const msg_type = + dhcp.option().value(); + + switch (_state) { + case State::SELECT: + + if (msg_type != Message_type::OFFER) { + throw Drop_packet_inform("DHCP client expects an offer"); + } + _set_state(State::REQUEST, _request_timeout); + _send(Message_type::REQUEST, Ipv4_address(), + dhcp.option().value(), + dhcp.yiaddr()); + break; + + case State::REQUEST: + { + if (msg_type != Message_type::ACK) { + throw Drop_packet_inform("DHCP client expects an acknowledgement"); + } + _lease_time_sec = dhcp.option().value(); + _set_state(State::BOUND, _rerequest_timeout(1)); + Ipv4_address dns_server; + try { dns_server = dhcp.option().value(); } + catch (Dhcp_packet::Option_not_found) { } + + _interface.ip(dhcp.yiaddr()); + log("Got IP address ", _interface.ip()); + break; + } + case State::RENEW: + case State::REBIND: + + if (msg_type != Message_type::ACK) { + throw Drop_packet_inform("DHCP client expects an acknowledgement"); + } + _set_state(State::BOUND, _rerequest_timeout(1)); + _lease_time_sec = dhcp.option().value(); + break; + + default: throw Drop_packet_inform("DHCP client doesn't expect a packet"); + } +} + + +void Dhcp_client::_send(Message_type msg_type, + Ipv4_address client_ip, + Ipv4_address server_ip, + Ipv4_address requested_ip) +{ + _interface.send(PKT_SIZE, [&] (void *pkt_base, Size_guard &size_guard) { + + /* create ETH header of the request */ + Ethernet_frame ð = Ethernet_frame::construct_at(pkt_base, size_guard); + eth.dst(Mac_address(0xff)); + eth.src(_interface.mac()); + eth.type(Ethernet_frame::Type::IPV4); + + /* create IP header of the request */ + enum { IPV4_TIME_TO_LIVE = 64 }; + size_t const ip_off = size_guard.head_size(); + Ipv4_packet &ip = eth.construct_at_data(size_guard); + ip.header_length(sizeof(Ipv4_packet) / 4); + ip.version(4); + ip.time_to_live(IPV4_TIME_TO_LIVE); + ip.protocol(Ipv4_packet::Protocol::UDP); + ip.src(client_ip); + ip.dst(Ipv4_address(0xff)); + + /* create UDP header of the request */ + size_t const udp_off = size_guard.head_size(); + Udp_packet &udp = ip.construct_at_data(size_guard); + udp.src_port(Port(Dhcp_packet::BOOTPC)); + udp.dst_port(Port(Dhcp_packet::BOOTPS)); + + /* create mandatory DHCP fields of the request */ + size_t const dhcp_off = size_guard.head_size(); + Dhcp_packet &dhcp = udp.construct_at_data(size_guard); + dhcp.op(Dhcp_packet::REQUEST); + dhcp.htype(Dhcp_packet::Htype::ETH); + dhcp.hlen(sizeof(Mac_address)); + dhcp.ciaddr(client_ip); + dhcp.client_mac(_interface.mac()); + dhcp.default_magic_cookie(); + + /* append DHCP option fields to the request */ + Dhcp_options dhcp_opts(dhcp, size_guard); + dhcp_opts.append_option(msg_type); + switch (msg_type) { + case Message_type::DISCOVER: + append_param_req_list(dhcp_opts); + dhcp_opts.append_option(_interface.mac()); + dhcp_opts.append_option(PKT_SIZE - dhcp_off); + break; + + case Message_type::REQUEST: + append_param_req_list(dhcp_opts); + dhcp_opts.append_option(_interface.mac()); + dhcp_opts.append_option(PKT_SIZE - dhcp_off); + if (_state == State::REQUEST) { + dhcp_opts.append_option(requested_ip); + dhcp_opts.append_option(server_ip); + } + break; + + default: + throw Bad_send_dhcp_args(); + } + dhcp_opts.append_option(); + + /* fill in header values that need the packet to be complete already */ + udp.length(size_guard.head_size() - udp_off); + udp.update_checksum(ip.src(), ip.dst()); + ip.total_length(size_guard.head_size() - ip_off); + ip.update_checksum(); + }); +} diff --git a/repos/os/src/server/nic_perf/dhcp_client.h b/repos/os/src/server/nic_perf/dhcp_client.h new file mode 100644 index 0000000000..0cb8a08622 --- /dev/null +++ b/repos/os/src/server/nic_perf/dhcp_client.h @@ -0,0 +1,89 @@ +/* + * \brief DHCP client state model + * \author Martin Stein + * \date 2016-08-24 + */ + +/* + * Copyright (C) 2016-2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _DHCP_CLIENT_H_ +#define _DHCP_CLIENT_H_ + +/* Genode includes */ +#include +#include + +namespace Nic_perf { class Interface; } + +namespace Net { + + /* external definition */ + class Ethernet_frame; + + /* local definition */ + class Dhcp_client; + class Drop_packet_inform; +} + + +struct Net::Drop_packet_inform : Genode::Exception +{ + char const *msg; + + Drop_packet_inform(char const *msg) : msg(msg) { } +}; + + +class Net::Dhcp_client +{ + private: + + enum class State + { + INIT = 0, SELECT = 1, REQUEST = 2, BOUND = 3, RENEW = 4, REBIND = 5 + }; + + enum { DISCOVER_TIMEOUT_SEC = 2 }; + enum { REQUEST_TIMEOUT_SEC = 2 }; + + State _state { State::INIT }; + Timer::One_shot_timeout _timeout; + unsigned long _lease_time_sec = 0; + Genode::Microseconds const _discover_timeout { (Genode::uint64_t)DISCOVER_TIMEOUT_SEC * 1000 * 1000 }; + Genode::Microseconds const _request_timeout { (Genode::uint64_t)REQUEST_TIMEOUT_SEC * 1000 * 1000 }; + Nic_perf::Interface &_interface; + + void _handle_dhcp_reply(Dhcp_packet &dhcp); + + void _handle_timeout(Genode::Duration); + + void _rerequest(State next_state); + + Genode::Microseconds _rerequest_timeout(unsigned lease_time_div_log2); + + void _set_state(State state, Genode::Microseconds timeout); + + void _send(Dhcp_packet::Message_type msg_type, + Ipv4_address client_ip, + Ipv4_address server_ip, + Ipv4_address requested_ip); + + void _discover(); + + public: + + Dhcp_client(Timer::Connection &timer, + Nic_perf::Interface &interface); + + void handle_dhcp(Dhcp_packet &dhcp, + Ethernet_frame ð, + Size_guard &size_guard); + +}; + +#endif /* _DHCP_CLIENT_H_ */ diff --git a/repos/os/src/server/nic_perf/interface.cc b/repos/os/src/server/nic_perf/interface.cc new file mode 100644 index 0000000000..3c1bab3e83 --- /dev/null +++ b/repos/os/src/server/nic_perf/interface.cc @@ -0,0 +1,254 @@ +/* + * \brief Base class for Nic/Uplink session components + * \author Johannes Schlatow + * \date 2022-06-15 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include + +/* Genode includes */ +#include +#include +#include + + +void Nic_perf::Interface::_handle_eth(void * pkt_base, size_t size) +{ + try { + + Size_guard size_guard(size); + Ethernet_frame ð = Ethernet_frame::cast_from(pkt_base, size_guard); + + switch (eth.type()) { + case Ethernet_frame::Type::ARP: + _handle_arp(eth, size_guard); + break; + case Ethernet_frame::Type::IPV4: + _handle_ip(eth, size_guard); + break; + default: + ; + } + } catch (Size_guard::Exceeded) { + warning("Size guard exceeded"); + } catch (Net::Drop_packet_inform e) { + error(e.msg); + } + + _stats.rx_packet(size); +} + + +void Nic_perf::Interface::_handle_arp(Ethernet_frame & eth, Size_guard & size_guard) +{ + Arp_packet &arp = eth.data(size_guard); + if (!arp.ethernet_ipv4()) + return; + + Ipv4_address old_src_ip { }; + + switch (arp.opcode()) { + case Arp_packet::REPLY: + _generator.handle_arp_reply(arp); + + break; + + case Arp_packet::REQUEST: + /* check whether the request targets us */ + if (arp.dst_ip() != _ip) + return; + + old_src_ip = arp.src_ip(); + arp.opcode(Arp_packet::REPLY); + arp.dst_mac(arp.src_mac()); + arp.src_mac(_mac); + arp.src_ip(arp.dst_ip()); + arp.dst_ip(old_src_ip); + eth.dst(arp.dst_mac()); + eth.src(_mac); + + send(size_guard.total_size(), [&] (void * pkt_base, Size_guard & size_guard) { + memcpy(pkt_base, (void*)ð, size_guard.total_size()); + }); + break; + + default: + ; + } +} + + +void Nic_perf::Interface::_handle_ip(Ethernet_frame & eth, Size_guard & size_guard) +{ + Ipv4_packet &ip = eth.data(size_guard); + if (ip.protocol() == Ipv4_packet::Protocol::UDP) { + + Udp_packet &udp = ip.data(size_guard); + if (Dhcp_packet::is_dhcp(&udp)) { + Dhcp_packet &dhcp = udp.data(size_guard); + switch (dhcp.op()) { + case Dhcp_packet::REQUEST: + _handle_dhcp_request(eth, dhcp); + break; + case Dhcp_packet::REPLY: + if (_dhcp_client.constructed()) { + _dhcp_client->handle_dhcp(dhcp, eth, size_guard); + } + break; + } + } + } +} + + +void Nic_perf::Interface::_handle_dhcp_request(Ethernet_frame & eth, Dhcp_packet & dhcp) +{ + Dhcp_packet::Message_type const msg_type = + dhcp.option().value(); + + switch (msg_type) { + case Dhcp_packet::Message_type::DISCOVER: + _send_dhcp_reply(eth, dhcp, Dhcp_packet::Message_type::OFFER); + break; + case Dhcp_packet::Message_type::REQUEST: + _send_dhcp_reply(eth, dhcp, Dhcp_packet::Message_type::ACK); + break; + default: + ; + } +} + + +void Nic_perf::Interface::_send_dhcp_reply(Ethernet_frame const & eth_req, + Dhcp_packet const & dhcp_req, + Dhcp_packet::Message_type msg_type) +{ + if (_ip == Ipv4_address()) + return; + + if (_dhcp_client_ip == Ipv4_address()) + return; + + enum { PKT_SIZE = 512 }; + send(PKT_SIZE, [&] (void *pkt_base, Size_guard &size_guard) { + + Ethernet_frame ð = Ethernet_frame::construct_at(pkt_base, size_guard); + if (msg_type == Dhcp_packet::Message_type::OFFER) { + eth.dst(Ethernet_frame::broadcast()); } + else { + eth.dst(eth_req.src()); } + eth.src(_mac); + eth.type(Ethernet_frame::Type::IPV4); + + /* create IP header of the reply */ + size_t const ip_off = size_guard.head_size(); + Ipv4_packet &ip = eth.construct_at_data(size_guard); + ip.header_length(sizeof(Ipv4_packet) / 4); + ip.version(4); + ip.time_to_live(64); + ip.protocol(Ipv4_packet::Protocol::UDP); + ip.src(_ip); + ip.dst(_dhcp_client_ip); + + /* create UDP header of the reply */ + size_t const udp_off = size_guard.head_size(); + Udp_packet &udp = ip.construct_at_data(size_guard); + udp.src_port(Port(Dhcp_packet::BOOTPS)); + udp.dst_port(Port(Dhcp_packet::BOOTPC)); + + /* create mandatory DHCP fields of the reply */ + Dhcp_packet &dhcp = udp.construct_at_data(size_guard); + dhcp.op(Dhcp_packet::REPLY); + dhcp.htype(Dhcp_packet::Htype::ETH); + dhcp.hlen(sizeof(Mac_address)); + dhcp.xid(dhcp_req.xid()); + if (msg_type == Dhcp_packet::Message_type::INFORM) { + dhcp.ciaddr(_dhcp_client_ip); } + else { + dhcp.yiaddr(_dhcp_client_ip); } + dhcp.siaddr(_ip); + dhcp.client_mac(dhcp_req.client_mac()); + dhcp.default_magic_cookie(); + + /* append DHCP option fields to the reply */ + Dhcp_packet::Options_aggregator dhcp_opts(dhcp, size_guard); + dhcp_opts.append_option(msg_type); + dhcp_opts.append_option(_ip); + dhcp_opts.append_option(86400); + dhcp_opts.append_option(_subnet_mask()); + dhcp_opts.append_option(_ip); + + dhcp_opts.append_dns_server([&] (Dhcp_options::Dns_server_data &data) { + data.append_address(_ip); + }); + dhcp_opts.append_option(Ipv4_packet::broadcast()); + dhcp_opts.append_option(); + + /* fill in header values that need the packet to be complete already */ + udp.length(size_guard.head_size() - udp_off); + udp.update_checksum(ip.src(), ip.dst()); + ip.total_length(size_guard.head_size() - ip_off); + ip.update_checksum(); + }); +} + + +void Nic_perf::Interface::handle_packet_stream() +{ + /* handle acks from client */ + while (_source.ack_avail()) + _source.release_packet(_source.try_get_acked_packet()); + + /* loop while we can make Rx progress */ + for (;;) { + if (!_sink.ready_to_ack()) + break; + + if (!_sink.packet_avail()) + break; + + Packet_descriptor const packet_from_client = _sink.try_get_packet(); + + if (_sink.packet_valid(packet_from_client)) { + _handle_eth(_sink.packet_content(packet_from_client), packet_from_client.size()); + if (!_sink.try_ack_packet(packet_from_client)) + break; + } + } + + /* skip sending if disabled or IP address is not set */ + if (!_generator.enabled() || _ip == Ipv4_address()) { + _sink.wakeup(); + _source.wakeup(); + return; + } + + /* loop while we can make Tx progress */ + for (;;) { + /* + * The client fails to pick up the packets from the rx channel. So we + * won't try to submit new packets. + */ + if (!_source.ready_to_submit()) + break; + + bool okay = + send(_generator.size(), [&] (void * pkt_base, Size_guard & size_guard) { + _generator.generate(pkt_base, size_guard, _mac, _ip); + }); + + if (!okay) + break; + } + + _sink.wakeup(); + _source.wakeup(); +} diff --git a/repos/os/src/server/nic_perf/interface.h b/repos/os/src/server/nic_perf/interface.h new file mode 100644 index 0000000000..4e2fab2ed0 --- /dev/null +++ b/repos/os/src/server/nic_perf/interface.h @@ -0,0 +1,153 @@ +/* + * \brief Base class for Nic/Uplink session components + * \author Johannes Schlatow + * \date 2022-06-15 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _INTERFACE_H_ +#define _INTERFACE_H_ + +/* local includes */ +#include +#include +#include + +/* Genode includes */ +#include +#include +#include +#include +#include + +namespace Nic_perf { + using namespace Genode; + using namespace Net; + + using Dhcp_options = Dhcp_packet::Options_aggregator; + + class Interface; + + using Interface_registry = Registry; +} + +class Nic_perf::Interface +{ + protected: + + using Sink = Nic::Packet_stream_sink; + using Source = Nic::Packet_stream_source; + + Interface_registry::Element _element; + Session_label _label; + + Packet_stats _stats; + Packet_generator _generator; + + bool _mac_from_policy; + + Mac_address _mac { }; + Mac_address const _default_mac; + Ipv4_address _ip { }; + Ipv4_address _dhcp_client_ip { }; + + Source &_source; + Sink &_sink; + + Constructible _dhcp_client { }; + Timer::Connection &_timer; + + static Ipv4_address _subnet_mask() + { + uint8_t buf[] = { 0xff, 0xff, 0xff, 0 }; + return Ipv4_address((void*)buf); + } + + void _handle_eth(void *, size_t); + void _handle_ip(Ethernet_frame &, Size_guard &); + void _handle_arp(Ethernet_frame &, Size_guard &); + void _handle_dhcp_request(Ethernet_frame &, Dhcp_packet &); + void _send_dhcp_reply(Ethernet_frame const &, Dhcp_packet const &, Dhcp_packet::Message_type); + + public: + + Interface(Interface_registry ®istry, + Session_label const &label, + Xml_node const &policy, + bool mac_from_policy, + Mac_address mac, + Source &source, + Sink &sink, + Timer::Connection &timer) + : _element(registry, *this), + _label(label), + _stats(_label), + _generator(timer, *this), + _mac_from_policy(mac_from_policy), + _default_mac(mac), + _source(source), + _sink(sink), + _timer(timer) + { apply_config(policy); } + + void apply_config(Xml_node const &config) + { + _generator.apply_config(config); + + /* restore defaults when applied to empty/incomplete config */ + _mac = _default_mac; + _ip = Ipv4_address(); + _dhcp_client_ip = Ipv4_address(); + + _dhcp_client.destruct(); + + config.with_sub_node("interface", [&] (Xml_node node) { + _ip = node.attribute_value("ip", _ip); + _dhcp_client_ip = node.attribute_value("dhcp_client_ip", _dhcp_client_ip); + + if (_mac_from_policy) + _mac = node.attribute_value("mac", _mac); + }); + + if (_ip == Ipv4_address()) + _dhcp_client.construct(_timer, *this); + } + + Session_label const &label() const { return _label; } + Packet_stats &packet_stats() { return _stats; } + + Mac_address const &mac() const { return _mac; } + Ipv4_address const &ip() const { return _ip; } + void ip(Ipv4_address const &ip) { _ip = ip; } + + void handle_packet_stream(); + + template + bool send(size_t pkt_size, FUNC && write_to_pkt) + { + if (!pkt_size) + return false; + + try { + Packet_descriptor pkt = _source.alloc_packet(pkt_size); + void *pkt_base = _source.packet_content(pkt); + + Size_guard size_guard { pkt_size }; + write_to_pkt(pkt_base, size_guard); + + _source.try_submit_packet(pkt); + } catch (...) { return false; } + + _stats.tx_packet(pkt_size); + + return true; + } +}; + +#endif /* _INTERFACE_H_ */ diff --git a/repos/os/src/server/nic_perf/main.cc b/repos/os/src/server/nic_perf/main.cc new file mode 100644 index 0000000000..44373ef1f4 --- /dev/null +++ b/repos/os/src/server/nic_perf/main.cc @@ -0,0 +1,123 @@ +/* + * \brief Throughput benchmark component for Nic and Uplink sessions + * \author Johannes Schlatow + * \date 2022-06-14 + * + * This component continously sends/receives UDP packets via a Nic or Uplink + * session in order to benchmark the throughput. + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include +#include +#include +#include + +/* Genode includes */ +#include +#include +#include +#include +#include +#include + +namespace Nic_perf { + class Main; + + using namespace Genode; +} + + +struct Nic_perf::Main +{ + using Periodic_timeout = Timer::Periodic_timeout

; + + Env &_env; + + Heap _heap { _env.ram(), _env.rm() }; + + Timer::Connection _timer { _env }; + + Attached_rom_dataspace _config { _env, "config" }; + + unsigned _period_ms { 5000 }; + + unsigned _count { 10000 }; + + Interface_registry _registry { }; + + Nic_perf::Nic_root _nic_root { _env, _heap, _registry, _config, _timer }; + + Nic_perf::Uplink_root _uplink_root { _env, _heap, _registry, _config, _timer }; + + Constructible _nic_client { }; + + Genode::Signal_handler
_config_handler = + { _env.ep(), *this, &Main::_handle_config }; + + Constructible _timeout { }; + + void _handle_config() + { + _config.update(); + + _registry.for_each([&] (Interface &interface) { + with_matching_policy(interface.label(), _config.xml(), + [&] (Xml_node const &policy) { + interface.apply_config(policy); + }, + [&] () { /* no matches */ + interface.apply_config(Xml_node("")); + } + ); + }); + + if (_nic_client.constructed()) + _nic_client.destruct(); + + if (_config.xml().has_sub_node("nic-client")) + _nic_client.construct(_env, _heap, _config.xml().sub_node("nic-client"), _registry, _timer); + + _period_ms = _config.xml().attribute_value("period_ms", _period_ms); + _count = _config.xml().attribute_value("count", _count); + + _timeout.conditional(_count && _period_ms, + _timer, *this, &Main::_handle_timeout, Microseconds(_period_ms*1000)); + } + + void _handle_timeout(Genode::Duration) + { + _registry.for_each([&] (Interface &interface) { + Packet_stats &stats = interface.packet_stats(); + + stats.calculate_throughput(_period_ms); + log(stats); + stats.reset(); + }); + + _count--; + if (!_count) + _env.parent().exit(0); + } + + Main(Env &env) : _env(env) + { + _env.parent().announce(_env.ep().manage(_nic_root)); + _env.parent().announce(_env.ep().manage(_uplink_root)); + + _config.sigh(_config_handler); + + _handle_config(); + } +}; + + +void Component::construct(Genode::Env &env) { static Nic_perf::Main main(env); } + diff --git a/repos/os/src/server/nic_perf/nic_client.h b/repos/os/src/server/nic_perf/nic_client.h new file mode 100644 index 0000000000..c88c07b9d8 --- /dev/null +++ b/repos/os/src/server/nic_perf/nic_client.h @@ -0,0 +1,71 @@ +/* + * \brief Nic client + * \author Johannes Schlatow + * \date 2022-06-16 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _NIC_CLIENT_H_ +#define _NIC_CLIENT_H_ + +/* local includes */ +#include + +/* Genode includes */ +#include +#include +#include + +namespace Nic_perf { + class Nic_client; + + using namespace Genode; +} + + +class Nic_perf::Nic_client +{ + private: + enum { BUF_SIZE = Nic::Session::QUEUE_SIZE * Nic::Packet_allocator::DEFAULT_PACKET_SIZE }; + + Env &_env; + Nic::Packet_allocator _pkt_alloc; + Nic::Connection _nic { _env, &_pkt_alloc, BUF_SIZE, BUF_SIZE }; + Interface _interface; + + Signal_handler _packet_stream_handler + { _env.ep(), *this, &Nic_client::_handle_packet_stream }; + + void _handle_packet_stream() { + _interface.handle_packet_stream(); } + + public: + + Nic_client(Env &env, + Genode::Allocator &alloc, + Xml_node const &policy, + Interface_registry ®istry, + Timer::Connection &timer) + : + _env(env), + _pkt_alloc(&alloc), + _interface(registry, "nic-client", policy, false, Mac_address(), + *_nic.tx(), *_nic.rx(), timer) + { + _nic.rx_channel()->sigh_ready_to_ack(_packet_stream_handler); + _nic.rx_channel()->sigh_packet_avail(_packet_stream_handler); + _nic.tx_channel()->sigh_ack_avail(_packet_stream_handler); + _nic.tx_channel()->sigh_ready_to_submit(_packet_stream_handler); + + _interface.handle_packet_stream(); + } +}; + + +#endif /* _NIC_CLIENT_H_ */ diff --git a/repos/os/src/server/nic_perf/nic_component.h b/repos/os/src/server/nic_perf/nic_component.h new file mode 100644 index 0000000000..66898cf148 --- /dev/null +++ b/repos/os/src/server/nic_perf/nic_component.h @@ -0,0 +1,142 @@ +/* + * \brief Nic root and session component + * \author Johannes Schlatow + * \date 2022-06-16 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _NIC_ROOT_H_ +#define _NIC_ROOT_H_ + +/* local includes */ +#include + +/* Genode includes */ +#include +#include +#include +#include + +namespace Nic_perf { + class Nic_session_component; + class Nic_root; + + using namespace Genode; +} + + +class Nic_perf::Nic_session_component : public Nic::Session_component +{ + private: + + Interface _interface; + + static Mac_address _default_mac_address() + { + char buf[] = {2,3,4,5,6,7}; + Mac_address result((void*)buf); + return result; + } + + void _handle_packet_stream() override { + _interface.handle_packet_stream(); } + + public: + + Nic_session_component(size_t const tx_buf_size, + size_t const rx_buf_size, + Allocator &rx_block_md_alloc, + Env &env, + Session_label const &label, + Xml_node const &policy, + Interface_registry ®istry, + Timer::Connection &timer) + : + Nic::Session_component(tx_buf_size, rx_buf_size, CACHED, + rx_block_md_alloc, env), + _interface(registry, label, policy, true, _default_mac_address(), + *_rx.source(), *_tx.sink(), timer) + { _interface.handle_packet_stream(); } + + /***************************** + * Session_component methods * + *****************************/ + + Nic::Mac_address mac_address() override { + char buf[] = {2,3,4,5,6,8}; + Mac_address result((void*)buf); + return result; + } + + bool link_state() override + { + /* XXX always return true, for now */ + return true; + } +}; + + +class Nic_perf::Nic_root : public Root_component +{ + private: + Env &_env; + Attached_rom_dataspace &_config; + Interface_registry &_registry; + Timer::Connection &_timer; + + protected: + + Nic_session_component *_create_session(char const *args) override + { + size_t ram_quota = Arg_string::find_arg(args, "ram_quota" ).ulong_value(0); + size_t tx_buf_size = Arg_string::find_arg(args, "tx_buf_size").ulong_value(0); + size_t rx_buf_size = Arg_string::find_arg(args, "rx_buf_size").ulong_value(0); + + /* deplete ram quota by the memory needed for the session structure */ + size_t session_size = max(4096UL, (size_t)sizeof(Nic_session_component)); + if (ram_quota < session_size) + throw Insufficient_ram_quota(); + + /* + * Check if donated ram quota suffices for both communication + * buffers and check for overflow + */ + if (tx_buf_size + rx_buf_size < tx_buf_size || + tx_buf_size + rx_buf_size > ram_quota - session_size) { + error("insufficient 'ram_quota', got ", ram_quota, ", " + "need ", tx_buf_size + rx_buf_size + session_size); + throw Insufficient_ram_quota(); + } + + Session_label label = label_from_args(args); + + Session_policy policy(label, _config.xml()); + + return new (md_alloc()) Nic_session_component(tx_buf_size, rx_buf_size, + *md_alloc(), _env, label, policy, + _registry, _timer); + } + + public: + + Nic_root(Env &env, + Allocator &md_alloc, + Interface_registry ®istry, + Attached_rom_dataspace &config, + Timer::Connection &timer) + : + Root_component(&env.ep().rpc_ep(), &md_alloc), + _env(env), + _config(config), + _registry(registry), + _timer(timer) + { } +}; + +#endif /* _NIC_ROOT_H_ */ diff --git a/repos/os/src/server/nic_perf/packet_generator.cc b/repos/os/src/server/nic_perf/packet_generator.cc new file mode 100644 index 0000000000..8825f63e44 --- /dev/null +++ b/repos/os/src/server/nic_perf/packet_generator.cc @@ -0,0 +1,134 @@ +/* + * \brief Packet generator + * \author Johannes Schlatow + * \date 2022-06-14 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include +#include + +void Nic_perf::Packet_generator::_handle_timeout(Genode::Duration) +{ + /* re-issue ARP request */ + if (_state == WAIT_ARP_REPLY) + _state = NEED_ARP_REQUEST; + + _interface.handle_packet_stream(); +} + +void Nic_perf::Packet_generator::handle_arp_reply(Arp_packet const & arp) +{ + if (arp.src_ip() != _dst_ip) + return; + + if (_state != WAIT_ARP_REPLY) + return; + + _timeout.discard(); + + _dst_mac = arp.src_mac(); + _state = READY; +} + + +void Nic_perf::Packet_generator::_generate_arp_request(void * pkt_base, + Size_guard & size_guard, + Mac_address const & from_mac, + Ipv4_address const & from_ip) +{ + if (from_ip == Ipv4_address()) { + error("Ip address not set"); + throw Ip_address_not_set(); + } + + Ethernet_frame ð = Ethernet_frame::construct_at(pkt_base, size_guard); + eth.dst(Mac_address(0xff)); + eth.src(from_mac); + eth.type(Ethernet_frame::Type::ARP); + + Arp_packet &arp = eth.construct_at_data(size_guard); + arp.hardware_address_type(Arp_packet::ETHERNET); + arp.protocol_address_type(Arp_packet::IPV4); + arp.hardware_address_size(sizeof(Mac_address)); + arp.protocol_address_size(sizeof(Ipv4_address)); + arp.opcode(Arp_packet::REQUEST); + arp.src_mac(from_mac); + arp.src_ip(from_ip); + arp.dst_mac(Mac_address(0xff)); + arp.dst_ip(_dst_ip); +} + + +void Nic_perf::Packet_generator::_generate_test_packet(void * pkt_base, + Size_guard & size_guard, + Mac_address const & from_mac, + Ipv4_address const & from_ip) +{ + if (from_ip == Ipv4_address()) { + error("Ip address not set"); + throw Ip_address_not_set(); + } + + if (_dst_port == Port(0)) { + error("Udp port not set"); + throw Udp_port_not_set(); + } + + Ethernet_frame ð = Ethernet_frame::construct_at(pkt_base, size_guard); + eth.dst(_dst_mac); + eth.src(from_mac); + eth.type(Ethernet_frame::Type::IPV4); + + size_t const ip_off = size_guard.head_size(); + Ipv4_packet &ip = eth.construct_at_data(size_guard); + ip.header_length(sizeof(Ipv4_packet) / 4); + ip.version(4); + ip.time_to_live(64); + ip.protocol(Ipv4_packet::Protocol::UDP); + ip.src(from_ip); + ip.dst(_dst_ip); + + size_t udp_off = size_guard.head_size(); + Udp_packet &udp = ip.construct_at_data(size_guard); + udp.src_port(Port(0)); + udp.dst_port(_dst_port); + + /* inflate packet up to _mtu */ + size_guard.consume_head(size_guard.unconsumed()); + + /* fill in length fields and checksums */ + udp.length(size_guard.head_size() - udp_off); + udp.update_checksum(ip.src(), ip.dst()); + ip.total_length(size_guard.head_size() - ip_off); + ip.update_checksum(); +} + + +void Nic_perf::Packet_generator::generate(void * pkt_base, + Size_guard & size_guard, + Mac_address const & from_mac, + Ipv4_address const & from_ip) +{ + switch (_state) { + case READY: + _generate_test_packet(pkt_base, size_guard, from_mac, from_ip); + break; + case NEED_ARP_REQUEST: + _generate_arp_request(pkt_base, size_guard, from_mac, from_ip); + _state = WAIT_ARP_REPLY; + _timeout.schedule(Microseconds { 1000 * 1000 }); + break; + case MUTED: + case WAIT_ARP_REPLY: + throw Not_ready(); + break; + } +} diff --git a/repos/os/src/server/nic_perf/packet_generator.h b/repos/os/src/server/nic_perf/packet_generator.h new file mode 100644 index 0000000000..ffb73fe1d2 --- /dev/null +++ b/repos/os/src/server/nic_perf/packet_generator.h @@ -0,0 +1,116 @@ +/* + * \brief Packet generator + * \author Johannes Schlatow + * \date 2022-06-14 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PACKET_GENERATOR_H_ +#define _PACKET_GENERATOR_H_ + +/* Genode includes */ +#include +#include +#include +#include +#include +#include + +namespace Nic_perf { + using namespace Genode; + using namespace Net; + + class Interface; + class Packet_generator; +} + +class Nic_perf::Packet_generator +{ + public: + struct Not_ready : Exception { }; + struct Ip_address_not_set : Exception { }; + struct Udp_port_not_set : Exception { }; + + private: + + enum State { MUTED, NEED_ARP_REQUEST, WAIT_ARP_REPLY, READY }; + + size_t _mtu { 1024 }; + bool _enable { false }; + Ipv4_address _dst_ip { }; + Port _dst_port { 0 }; + Mac_address _dst_mac { }; + State _state { MUTED }; + + Timer::One_shot_timeout _timeout; + Nic_perf::Interface &_interface; + + void _generate_arp_request(void *, Size_guard &, Mac_address const &, Ipv4_address const &); + + void _generate_test_packet(void *, Size_guard &, Mac_address const &, Ipv4_address const &); + + void _handle_timeout(Genode::Duration); + + public: + + Packet_generator(Timer::Connection &timer, Nic_perf::Interface &interface) + : _timeout(timer, *this, &Packet_generator::_handle_timeout), + _interface(interface) + { } + + void apply_config(Xml_node const &config) + { + Ipv4_address old_ip = _dst_ip; + + /* restore defaults */ + _dst_ip = Ipv4_address(); + _dst_port = Port(0); + _enable = false; + _state = MUTED; + + config.with_sub_node("tx", [&] (Xml_node node) { + _mtu = node.attribute_value("mtu", _mtu); + _dst_ip = node.attribute_value("to", _dst_ip); + _dst_port = node.attribute_value("udp_port", _dst_port); + _enable = true; + _state = READY; + }); + + /* redo ARP resolution if dst ip changed */ + if (old_ip != _dst_ip) { + _dst_mac = Mac_address(); + + if (_enable) + _state = NEED_ARP_REQUEST; + } + } + + bool enabled() const { return _enable; } + + size_t size() const + { + switch (_state) { + case READY: + return _mtu; + case NEED_ARP_REQUEST: + return Ethernet_frame::MIN_SIZE + sizeof(uint32_t); + case WAIT_ARP_REPLY: + case MUTED: + return 0; + } + + return 0; + } + + void handle_arp_reply(Arp_packet const & arp); + + void generate(void *, Size_guard &, Mac_address const &, Ipv4_address const &); +}; + +#endif /* _PACKET_GENERATOR_H_ */ diff --git a/repos/os/src/server/nic_perf/packet_stats.h b/repos/os/src/server/nic_perf/packet_stats.h new file mode 100644 index 0000000000..f61835a069 --- /dev/null +++ b/repos/os/src/server/nic_perf/packet_stats.h @@ -0,0 +1,90 @@ +/* + * \brief Packet statistics + * \author Johannes Schlatow + * \date 2022-06-14 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PACKET_STATS_H_ +#define _PACKET_STATS_H_ + +/* Genode includes */ +#include + +namespace Nic_perf { + using namespace Genode; + + class Packet_stats; +} + +class Nic_perf::Packet_stats +{ + private: + + Session_label const &_label; + + size_t _sent_cnt { 0 }; + size_t _recv_cnt { 0 }; + size_t _sent_bytes { 0 }; + size_t _recv_bytes { 0 }; + unsigned _period_ms { 0 }; + float _rx_mbit_sec { 0.0 }; + float _tx_mbit_sec { 0.0 }; + + public: + + Packet_stats(Session_label const & label) + : _label(label) + { } + + void reset() + { + _sent_cnt = 0; + _recv_cnt = 0; + _sent_bytes = 0; + _recv_bytes = 0; + _rx_mbit_sec = 0; + _tx_mbit_sec = 0; + } + + void rx_packet(size_t bytes) + { + _recv_cnt++; + _recv_bytes += bytes; + } + + void tx_packet(size_t bytes) + { + _sent_cnt++; + _sent_bytes += bytes; + } + + void calculate_throughput(unsigned period_ms) + { + _period_ms = period_ms; + + if (_period_ms == 0) return; + + _rx_mbit_sec = (float)(_recv_bytes * 8ULL) / (float)(period_ms*1000ULL); + _tx_mbit_sec = (float)(_sent_bytes * 8ULL) / (float)(period_ms*1000ULL); + } + + void print(Output &out) const + { + Genode::print(out, "# Stats for session ", _label, "\n"); + Genode::print(out, " Received ", _recv_cnt, " packets in ", + _period_ms, "ms at ", _rx_mbit_sec, "Mbit/s\n"); + Genode::print(out, " Sent ", _sent_cnt, " packets in ", + _period_ms, "ms at ", _tx_mbit_sec, "Mbit/s\n"); + } + +}; + + +#endif /* _PACKET_STATS_H_ */ diff --git a/repos/os/src/server/nic_perf/target.mk b/repos/os/src/server/nic_perf/target.mk new file mode 100644 index 0000000000..5445365b49 --- /dev/null +++ b/repos/os/src/server/nic_perf/target.mk @@ -0,0 +1,7 @@ +TARGET = nic_perf +SRC_CC = main.cc interface.cc packet_generator.cc dhcp_client.cc +LIBS = base net + +INC_DIR += $(PRG_DIR) + +CC_CXX_WARN_STRICT_CONVERSION = diff --git a/repos/os/src/server/nic_perf/uplink_component.h b/repos/os/src/server/nic_perf/uplink_component.h new file mode 100644 index 0000000000..48098f5eca --- /dev/null +++ b/repos/os/src/server/nic_perf/uplink_component.h @@ -0,0 +1,195 @@ +/* + * \brief Uplink root and session component + * \author Johannes Schlatow + * \date 2022-06-17 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _UPLINK_ROOT_H_ +#define _UPLINK_ROOT_H_ + +/* local includes */ +#include + +/* Genode includes */ +#include +#include +#include +#include +#include + +namespace Nic_perf { + class Uplink_session_base; + class Uplink_session_component; + class Uplink_root; + + using namespace Genode; +} + + +class Nic_perf::Uplink_session_base +{ + friend class Uplink_session_component; + + private: + + class Buffer + { + private: + + Ram_allocator &_ram_alloc; + Ram_dataspace_capability _ram_ds; + + public: + + Buffer(Ram_allocator &ram_alloc, + size_t const size) + : + _ram_alloc { ram_alloc }, + _ram_ds { ram_alloc.alloc(size) } + { } + + ~Buffer() { _ram_alloc.free(_ram_ds); } + + Dataspace_capability ds() const { return _ram_ds; } + }; + + Env &_env; + Allocator &_alloc; + Nic::Packet_allocator _packet_alloc; + Buffer _tx_buf; + Buffer _rx_buf; + + public: + + Uplink_session_base(Env &env, + size_t tx_buf_size, + size_t rx_buf_size, + Allocator &alloc) + : + _env { env }, + _alloc { alloc }, + _packet_alloc { &_alloc }, + _tx_buf { _env.ram(), tx_buf_size }, + _rx_buf { _env.ram(), rx_buf_size } + { } +}; + + +class Nic_perf::Uplink_session_component : private Uplink_session_base, + public Uplink::Session_rpc_object +{ + private: + + Interface _interface; + Signal_handler _packet_stream_handler + { _env.ep(), *this, &Uplink_session_component::_handle_packet_stream }; + + void _handle_packet_stream() { + _interface.handle_packet_stream(); } + + public: + + Uplink_session_component(size_t const tx_buf_size, + size_t const rx_buf_size, + Allocator &alloc, + Env &env, + Session_label const &label, + Xml_node const &policy, + Interface_registry ®istry, + Mac_address mac, + Timer::Connection &timer) + : + Uplink_session_base(env, tx_buf_size, rx_buf_size, alloc), + Uplink::Session_rpc_object(env.rm(), _tx_buf.ds(), _rx_buf.ds(), + &_packet_alloc, env.ep().rpc_ep()), + _interface(registry, label, policy, false, mac, + *_rx.source(), *_tx.sink(), timer) + { + _interface.handle_packet_stream(); + + _tx.sigh_ready_to_ack (_packet_stream_handler); + _tx.sigh_packet_avail (_packet_stream_handler); + _rx.sigh_ack_avail (_packet_stream_handler); + _rx.sigh_ready_to_submit(_packet_stream_handler); + } +}; + + +class Nic_perf::Uplink_root : public Root_component +{ + private: + Env &_env; + Attached_rom_dataspace &_config; + Interface_registry &_registry; + Timer::Connection &_timer; + + protected: + + Uplink_session_component *_create_session(char const *args) override + { + size_t ram_quota = Arg_string::find_arg(args, "ram_quota" ).ulong_value(0); + size_t tx_buf_size = Arg_string::find_arg(args, "tx_buf_size").ulong_value(0); + size_t rx_buf_size = Arg_string::find_arg(args, "rx_buf_size").ulong_value(0); + + /* deplete ram quota by the memory needed for the session structure */ + size_t session_size = max(4096UL, (size_t)sizeof(Uplink_session_component)); + if (ram_quota < session_size) + throw Insufficient_ram_quota(); + + /* + * Check if donated ram quota suffices for both communication + * buffers and check for overflow + */ + if (tx_buf_size + rx_buf_size < tx_buf_size || + tx_buf_size + rx_buf_size > ram_quota - session_size) { + error("insufficient 'ram_quota', got ", ram_quota, ", " + "need ", tx_buf_size + rx_buf_size + session_size); + throw Insufficient_ram_quota(); + } + + enum { MAC_STR_LENGTH = 19 }; + char mac_str [MAC_STR_LENGTH]; + Arg mac_arg { Arg_string::find_arg(args, "mac_address") }; + + if (!mac_arg.valid()) + throw Service_denied(); + + mac_arg.string(mac_str, MAC_STR_LENGTH, ""); + Mac_address mac { }; + ascii_to(mac_str, mac); + if (mac == Mac_address { }) + throw Service_denied(); + + Session_label label = label_from_args(args); + + Session_policy policy(label, _config.xml()); + + return new (md_alloc()) Uplink_session_component(tx_buf_size, rx_buf_size, + *md_alloc(), _env, label, policy, + _registry, mac, _timer); + } + + public: + + Uplink_root(Env &env, + Allocator &md_alloc, + Interface_registry ®istry, + Attached_rom_dataspace &config, + Timer::Connection &timer) + : + Root_component(&env.ep().rpc_ep(), &md_alloc), + _env(env), + _config(config), + _registry(registry), + _timer(timer) + { } +}; + +#endif /* _UPLINK_ROOT_H_ */ From a2b74af59ae2f53eb2cffc4307fb7871610e21a9 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Tue, 21 Jun 2022 11:44:47 +0200 Subject: [PATCH 121/354] depot: add nic_perf recipes genodelabs/genode#4555 --- repos/os/recipes/pkg/test-nic_perf/README | 1 + repos/os/recipes/pkg/test-nic_perf/archives | 2 + repos/os/recipes/pkg/test-nic_perf/hash | 1 + repos/os/recipes/pkg/test-nic_perf/runtime | 62 +++++++++++++ .../recipes/pkg/test-nic_perf_router/README | 1 + .../recipes/pkg/test-nic_perf_router/archives | 3 + .../os/recipes/pkg/test-nic_perf_router/hash | 1 + .../recipes/pkg/test-nic_perf_router/runtime | 91 +++++++++++++++++++ repos/os/recipes/src/nic_perf/content.mk | 2 + repos/os/recipes/src/nic_perf/hash | 1 + repos/os/recipes/src/nic_perf/used_apis | 6 ++ 11 files changed, 171 insertions(+) create mode 100644 repos/os/recipes/pkg/test-nic_perf/README create mode 100644 repos/os/recipes/pkg/test-nic_perf/archives create mode 100644 repos/os/recipes/pkg/test-nic_perf/hash create mode 100644 repos/os/recipes/pkg/test-nic_perf/runtime create mode 100644 repos/os/recipes/pkg/test-nic_perf_router/README create mode 100644 repos/os/recipes/pkg/test-nic_perf_router/archives create mode 100644 repos/os/recipes/pkg/test-nic_perf_router/hash create mode 100644 repos/os/recipes/pkg/test-nic_perf_router/runtime create mode 100644 repos/os/recipes/src/nic_perf/content.mk create mode 100644 repos/os/recipes/src/nic_perf/hash create mode 100644 repos/os/recipes/src/nic_perf/used_apis diff --git a/repos/os/recipes/pkg/test-nic_perf/README b/repos/os/recipes/pkg/test-nic_perf/README new file mode 100644 index 0000000000..eccd77488e --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf/README @@ -0,0 +1 @@ +Throughput test of nic session. diff --git a/repos/os/recipes/pkg/test-nic_perf/archives b/repos/os/recipes/pkg/test-nic_perf/archives new file mode 100644 index 0000000000..af4ab8951c --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf/archives @@ -0,0 +1,2 @@ +_/src/init +_/src/nic_perf diff --git a/repos/os/recipes/pkg/test-nic_perf/hash b/repos/os/recipes/pkg/test-nic_perf/hash new file mode 100644 index 0000000000..3665408e53 --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf/hash @@ -0,0 +1 @@ +2022-07-20 1f60286a89084f20f78030e5ab885488c45375ae diff --git a/repos/os/recipes/pkg/test-nic_perf/runtime b/repos/os/recipes/pkg/test-nic_perf/runtime new file mode 100644 index 0000000000..f434095992 --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf/runtime @@ -0,0 +1,62 @@ + + + + + + + + [init] child "nic_perf_tx" exited with exit value 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/os/recipes/pkg/test-nic_perf_router/README b/repos/os/recipes/pkg/test-nic_perf_router/README new file mode 100644 index 0000000000..c43fcce423 --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf_router/README @@ -0,0 +1 @@ +Throughput test of nic router. diff --git a/repos/os/recipes/pkg/test-nic_perf_router/archives b/repos/os/recipes/pkg/test-nic_perf_router/archives new file mode 100644 index 0000000000..6d22704a6a --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf_router/archives @@ -0,0 +1,3 @@ +_/src/init +_/src/nic_router +_/src/nic_perf diff --git a/repos/os/recipes/pkg/test-nic_perf_router/hash b/repos/os/recipes/pkg/test-nic_perf_router/hash new file mode 100644 index 0000000000..a2c6d55597 --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf_router/hash @@ -0,0 +1 @@ +2022-07-20 b7af3d9a0e3ac2e39169c3159c94bbf0dd104cd8 diff --git a/repos/os/recipes/pkg/test-nic_perf_router/runtime b/repos/os/recipes/pkg/test-nic_perf_router/runtime new file mode 100644 index 0000000000..4246f3db87 --- /dev/null +++ b/repos/os/recipes/pkg/test-nic_perf_router/runtime @@ -0,0 +1,91 @@ + + + + + + + + [init] child "nic_perf_tx" exited with exit value 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/os/recipes/src/nic_perf/content.mk b/repos/os/recipes/src/nic_perf/content.mk new file mode 100644 index 0000000000..b5ad31b0d5 --- /dev/null +++ b/repos/os/recipes/src/nic_perf/content.mk @@ -0,0 +1,2 @@ +SRC_DIR = src/server/nic_perf +include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/os/recipes/src/nic_perf/hash b/repos/os/recipes/src/nic_perf/hash new file mode 100644 index 0000000000..79fb6317cd --- /dev/null +++ b/repos/os/recipes/src/nic_perf/hash @@ -0,0 +1 @@ +2022-07-20 d2054f04c036d888ce04cf741e4073c333d35db4 diff --git a/repos/os/recipes/src/nic_perf/used_apis b/repos/os/recipes/src/nic_perf/used_apis new file mode 100644 index 0000000000..e1fe665c5d --- /dev/null +++ b/repos/os/recipes/src/nic_perf/used_apis @@ -0,0 +1,6 @@ +base +os +net +nic_session +uplink_session +timer_session From e2086ac8e4b50f508f3f4a6e3a46caae5370c05f Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Wed, 20 Jul 2022 10:27:19 +0200 Subject: [PATCH 122/354] nic_router: change max_packets_per_signal default According to a benchmarking series on Zynq (base-hw) and x260 (base-nova) using test-nic_perf_router, increasing the 'max_packets_per_signal' has a significant effect on the packet throughput. By increasing the default value from 32 to 150, we could gain a few hundred Mbit/s. Increasing the value further does not seem to have such a strong effect, though. genodelabs/genode#4555 --- repos/os/src/server/nic_router/README | 2 +- repos/os/src/server/nic_router/configuration.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/os/src/server/nic_router/README b/repos/os/src/server/nic_router/README index eae491da8c..942d6ab578 100644 --- a/repos/os/src/server/nic_router/README +++ b/repos/os/src/server/nic_router/README @@ -793,7 +793,7 @@ this can lead to starvation of the other interfaces. Thus, the maximum number of packets handled per signal is limited by default. This limit can be configured as follows (default value shown): -! +! When set to zero, the limit is deactivated, meaning that the router always handles all available packets of an interface. diff --git a/repos/os/src/server/nic_router/configuration.cc b/repos/os/src/server/nic_router/configuration.cc index ba0428a5a6..2c54344b6e 100644 --- a/repos/os/src/server/nic_router/configuration.cc +++ b/repos/os/src/server/nic_router/configuration.cc @@ -111,7 +111,7 @@ Configuration::Configuration(Env &env, Interface_list &interfaces) : _alloc { alloc }, - _max_packets_per_signal { node.attribute_value("max_packets_per_signal", (unsigned long)32) }, + _max_packets_per_signal { node.attribute_value("max_packets_per_signal", (unsigned long)150) }, _verbose { node.attribute_value("verbose", false) }, _verbose_packets { node.attribute_value("verbose_packets", false) }, _verbose_packet_drop { node.attribute_value("verbose_packet_drop", false) }, From 433029c3a6549ca534616af51b100481d4773a35 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 28 Jun 2022 22:14:26 +0200 Subject: [PATCH 123/354] nic_router: find ARP cache entries w/o exceptions Replaces the former implementation of the 'find_by_ip' method at the data structure for ARP cache entries. This method used to return a reference to the found object and threw an exception if no matching object was found. The new implementation doesn't return anything and doesn't throw exceptions. It takes two lambda arguments instead. One for handling the case that a match was found with a reference to the matching object as argument and another for handling the case that no object matches. This way, expensive exception handling can be avoided and object references stay in a local scope. Ref #4555 --- repos/os/src/server/nic_router/arp_cache.cc | 22 ------ repos/os/src/server/nic_router/arp_cache.h | 47 +++++++++++-- repos/os/src/server/nic_router/interface.cc | 76 ++++++++++++--------- 3 files changed, 86 insertions(+), 59 deletions(-) diff --git a/repos/os/src/server/nic_router/arp_cache.cc b/repos/os/src/server/nic_router/arp_cache.cc index 6f8e0b1b0e..6493abf6af 100644 --- a/repos/os/src/server/nic_router/arp_cache.cc +++ b/repos/os/src/server/nic_router/arp_cache.cc @@ -37,19 +37,6 @@ bool Arp_cache_entry::_higher(Ipv4_address const &ip) const } -Arp_cache_entry const & -Arp_cache_entry::find_by_ip(Ipv4_address const &ip) const -{ - if (ip == _ip) { - return *this; } - - Arp_cache_entry const *const entry = child(_higher(ip)); - if (!entry) { - throw Arp_cache::No_match(); } - - return entry->find_by_ip(ip); -} - void Arp_cache_entry::print(Output &output) const { Genode::print(output, _ip, " > ", _mac); @@ -79,15 +66,6 @@ void Arp_cache::new_entry(Ipv4_address const &ip, Mac_address const &mac) } -Arp_cache_entry const &Arp_cache::find_by_ip(Ipv4_address const &ip) const -{ - if (!first()) { - throw No_match(); } - - return first()->find_by_ip(ip); -} - - void Arp_cache::destroy_entries_with_mac(Mac_address const &mac) { for (unsigned curr = 0; curr < NR_OF_ENTRIES; curr++) { diff --git a/repos/os/src/server/nic_router/arp_cache.h b/repos/os/src/server/nic_router/arp_cache.h index e1fca9f484..18a5042f76 100644 --- a/repos/os/src/server/nic_router/arp_cache.h +++ b/repos/os/src/server/nic_router/arp_cache.h @@ -42,7 +42,33 @@ class Net::Arp_cache_entry : public Genode::Avl_node Arp_cache_entry(Ipv4_address const &ip, Mac_address const &mac); - Arp_cache_entry const &find_by_ip(Ipv4_address const &ip) const; + template + + void find_by_ip(Ipv4_address const &ip, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (ip != _ip) { + + Arp_cache_entry *const entry_ptr { + Avl_node::child( + _higher(ip)) }; + + if (entry_ptr != nullptr) { + + entry_ptr->find_by_ip( + ip, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } else { + + handle_match(*this); + } + } /************** @@ -83,15 +109,28 @@ class Net::Arp_cache : public Genode::Avl_tree public: - struct No_match : Genode::Exception { }; - Arp_cache(Domain const &domain) : _domain(domain) { } void new_entry(Ipv4_address const &ip, Mac_address const &mac); void destroy_entries_with_mac(Mac_address const &mac); - Arp_cache_entry const &find_by_ip(Ipv4_address const &ip) const; + template + + void find_by_ip(Ipv4_address const &ip, + HANDLE_MATCH_FN && handle_match, + HANDLE_NO_MATCH_FN && handle_no_match) const + { + if (first() != nullptr) { + + first()->find_by_ip(ip, handle_match, handle_no_match); + + } else { + + handle_no_match(); + } + } void destroy_all_entries(); }; diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 83c869ad19..24e6d7b270 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -558,18 +558,25 @@ void Interface::_adapt_eth(Ethernet_frame ð, if (remote_domain.use_arp()) { Ipv4_address const &hop_ip = remote_domain.next_hop(dst_ip); - try { eth.dst(remote_domain.arp_cache().find_by_ip(hop_ip).mac()); } - catch (Arp_cache::No_match) { - remote_domain.interfaces().for_each([&] (Interface &interface) { - interface._broadcast_arp_request(remote_ip_cfg.interface().address, - hop_ip); - }); - try { new (_alloc) Arp_waiter { *this, remote_domain, hop_ip, pkt }; } - catch (Out_of_ram) { throw Free_resources_and_retry_handle_eth(); } - catch (Out_of_caps) { throw Free_resources_and_retry_handle_eth(); } - throw Packet_postponed(); - } - + remote_domain.arp_cache().find_by_ip( + hop_ip, + [&] /* handle_match */ (Arp_cache_entry const &entry) + { + eth.dst(entry.mac()); + }, + [&] /* handle_no_match */ () + { + remote_domain.interfaces().for_each([&] (Interface &interface) + { + interface._broadcast_arp_request( + remote_ip_cfg.interface().address, hop_ip); + }); + try { new (_alloc) Arp_waiter { *this, remote_domain, hop_ip, pkt }; } + catch (Out_of_ram) { throw Free_resources_and_retry_handle_eth(); } + catch (Out_of_caps) { throw Free_resources_and_retry_handle_eth(); } + throw Packet_postponed(); + } + ); } } @@ -1416,29 +1423,32 @@ void Interface::_handle_arp_reply(Ethernet_frame ð, Arp_packet &arp, Domain &local_domain) { - try { - /* check wether a matching ARP cache entry already exists */ - local_domain.arp_cache().find_by_ip(arp.src_ip()); - if (_config().verbose()) { - log("[", local_domain, "] ARP entry already exists"); } - } - catch (Arp_cache::No_match) { - - /* by now, no matching ARP cache entry exists, so create one */ - Ipv4_address const ip = arp.src_ip(); - local_domain.arp_cache().new_entry(ip, arp.src_mac()); - - /* continue handling of packets that waited for the entry */ - for (Arp_waiter_list_element *waiter_le = local_domain.foreign_arp_waiters().first(); - waiter_le; ) + local_domain.arp_cache().find_by_ip( + arp.src_ip(), + [&] /* handle_match */ (Arp_cache_entry const &) { - Arp_waiter &waiter = *waiter_le->object(); - waiter_le = waiter_le->next(); - if (ip != waiter.ip()) { continue; } - waiter.src()._continue_handle_eth(local_domain, waiter.packet()); - destroy(waiter.src()._alloc, &waiter); + /* check wether a matching ARP cache entry already exists */ + if (_config().verbose()) { + log("[", local_domain, "] ARP entry already exists"); } + }, + [&] /* handle_no_match */ () + { + /* by now, no matching ARP cache entry exists, so create one */ + Ipv4_address const ip = arp.src_ip(); + local_domain.arp_cache().new_entry(ip, arp.src_mac()); + + /* continue handling of packets that waited for the entry */ + for (Arp_waiter_list_element *waiter_le = local_domain.foreign_arp_waiters().first(); + waiter_le; ) + { + Arp_waiter &waiter = *waiter_le->object(); + waiter_le = waiter_le->next(); + if (ip != waiter.ip()) { continue; } + waiter.src()._continue_handle_eth(local_domain, waiter.packet()); + destroy(waiter.src()._alloc, &waiter); + } } - } + ); Ipv4_address_prefix const &local_intf = local_domain.ip_config().interface(); if (local_intf.prefix_matches(arp.dst_ip()) && arp.dst_ip() != local_intf.address) From 3f69457a94a8729b3d721b39493c39ac5a0c721f Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Mon, 25 Jul 2022 17:04:12 +0200 Subject: [PATCH 124/354] pc/intel: add intel_fb test to autopilot --- repos/pc/run/intel_fb.run | 20 ++++++++++++++++++-- tool/autopilot.list | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/repos/pc/run/intel_fb.run b/repos/pc/run/intel_fb.run index 7265214d59..9fee27180e 100644 --- a/repos/pc/run/intel_fb.run +++ b/repos/pc/run/intel_fb.run @@ -1,3 +1,15 @@ +assert_spec x86_64 + +if {[get_cmd_switch --autopilot] && [have_include "power_on/qemu"]} { + puts "Run script does not support autopilot mode on Qemu" + exit 0 +} + +if {[get_cmd_switch --autopilot] && [have_board linux]} { + puts "Autopilot mode is not supported on this platform." + exit 0 +} + # # Build # @@ -59,7 +71,7 @@ append config { - + @@ -218,4 +230,8 @@ append_platform_drv_boot_modules build_boot_image $boot_modules -run_genode_until forever +if { [get_cmd_switch --autopilot] } { + run_genode_until {\[init -\> init_dynamic -\> intel_fb_drv\] HDMI-A-2: enable.*} 30 +} else { + run_genode_until forever +} diff --git a/tool/autopilot.list b/tool/autopilot.list index 13728a833b..559e9d6954 100644 --- a/tool/autopilot.list +++ b/tool/autopilot.list @@ -19,6 +19,7 @@ gdb_monitor hello ieee754 init_smp +intel_fb libc_integration libc_vfs_fs_ext2 libc_vfs_fs_fat From e32157e21b95b72e31536dfb8b6f5b8a698cf2d9 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Thu, 21 Jul 2022 15:43:58 +0200 Subject: [PATCH 125/354] nic_router: packet allocation w/o exceptions In overload situations, i.e. when a sender fills up the entire buffer, we land in situations where the sender receives an ack_avail signal, releases one packet, allocates and sends a packet and fails to allocate a second packet. This is especially relevant if the receiver does not batch ack_avail signals (such as vfs_lwip). In those ping-pong scheduling scenarios, the overhead from catching the Packet_alloc_failed exception becomes significant. In case of the NIC router, we will land in an overload situation if the sender is faster than the receiver. The packet buffer will be filled up at some point and the NIC router starts to drop packets. For every dropped packet, we currently have to catch the Packet_alloc_failed exception. This commit adds a new method alloc_packet_attempt to Packet_stream_source that has almost the same signature as the older alloc_packet method but returns an Attempt object. As the method already used the allocator back end exception-less, changes on lower levels were not needed. Furthermore, the NIC router was modified to use the new exception-less alloc_packet_attempt instead of alloc_packet. Ref #4555 --- repos/os/include/os/packet_stream.h | 27 +++++++++++++++++++ repos/os/src/server/nic_router/interface.cc | 9 ------- repos/os/src/server/nic_router/interface.h | 29 +++++++++------------ 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/repos/os/include/os/packet_stream.h b/repos/os/include/os/packet_stream.h index 7705670654..7a7a498b26 100644 --- a/repos/os/include/os/packet_stream.h +++ b/repos/os/include/os/packet_stream.h @@ -639,6 +639,10 @@ class Genode::Packet_stream_source : private Packet_stream_base class Saturated_submit_queue : Exception { }; class Empty_ack_queue : Exception { }; + enum class Alloc_packet_error { FAILED }; + + using Alloc_packet_result = Attempt; + /** * Constructor * @@ -726,6 +730,29 @@ class Genode::Packet_stream_source : private Packet_stream_base throw Packet_alloc_failed(); }); } + /** + * Allocate packet without throwing exceptions + * + * \param size size of packet in bytes + * \param align alignment of packet as log2 value, default is 1 byte + * \return an Attempt object that either contains an error or a + * packet descriptor with an assigned range within the + * bulk buffer shared between source and sink + */ + Alloc_packet_result alloc_packet_attempt(Genode::size_t size, unsigned align = PACKET_ALIGNMENT) + { + if (size == 0) + return Packet_descriptor(0, 0); + + return _packet_alloc.alloc_aligned(size, align).convert( + + [&] (void *base) { + return Packet_descriptor((Genode::off_t)base, size); }, + + [&] (Allocator::Alloc_error) { + return Alloc_packet_error::FAILED; }); + } + /** * Get pointer to the content of the specified packet * diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 24e6d7b270..f7a6282b52 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1850,15 +1850,6 @@ void Interface::send(Ethernet_frame ð, } -void Interface::_send_alloc_pkt(Packet_descriptor &pkt, - void * &pkt_base, - size_t pkt_size) -{ - pkt = _source.alloc_packet(pkt_size); - pkt_base = _source.packet_content(pkt); -} - - void Interface::_send_submit_pkt(Packet_descriptor &pkt, void * &pkt_base, size_t pkt_size) diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 117e1e2a73..9661c3f160 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -307,10 +307,6 @@ class Net::Interface : private Interface_list::Element void _ack_packet(Packet_descriptor const &pkt); - void _send_alloc_pkt(Genode::Packet_descriptor &pkt, - void * &pkt_base, - Genode::size_t pkt_size); - void _send_submit_pkt(Genode::Packet_descriptor &pkt, void * &pkt_base, Genode::size_t pkt_size); @@ -402,18 +398,19 @@ class Net::Interface : private Interface_list::Element _failed_to_send_packet_submit(); return; } - try { - Packet_descriptor pkt; - void *pkt_base; - - _send_alloc_pkt(pkt, pkt_base, pkt_size); - Size_guard size_guard(pkt_size); - write_to_pkt(pkt_base, size_guard); - _send_submit_pkt(pkt, pkt_base, pkt_size); - } - catch (Packet_stream_source::Packet_alloc_failed) { - _failed_to_send_packet_alloc(); - } + _source.alloc_packet_attempt(pkt_size).with_result( + [&] (Packet_descriptor pkt) + { + void *pkt_base { _source.packet_content(pkt) }; + Size_guard size_guard(pkt_size); + write_to_pkt(pkt_base, size_guard); + _send_submit_pkt(pkt, pkt_base, pkt_size); + }, + [&] (Packet_stream_source::Alloc_packet_error) + { + _failed_to_send_packet_alloc(); + } + ); } void send(Ethernet_frame ð, From 92a5fa9bed194b925f39d9267f856dcba932bfbd Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 22 Jul 2022 16:08:33 +0200 Subject: [PATCH 126/354] lx_emul: remove usb device reset in session close Ref genodelabs/genode#4566 --- repos/dde_linux/src/lib/lx_emul/usb.c | 1 - 1 file changed, 1 deletion(-) diff --git a/repos/dde_linux/src/lib/lx_emul/usb.c b/repos/dde_linux/src/lib/lx_emul/usb.c index 0a4753e5b6..b3d8053849 100644 --- a/repos/dde_linux/src/lib/lx_emul/usb.c +++ b/repos/dde_linux/src/lib/lx_emul/usb.c @@ -258,7 +258,6 @@ static int usb_rpc_call(void * data) urbs->in_delete = 1; usb_kill_anchored_urbs(&urbs->submitted); urbs->in_delete = 0; - usb_reset_device(udev); } usb_rpc_args.ret = ret; From 560747c22e8594e9ff255e8c6cf70d00fded69da Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 29 Jun 2022 15:29:34 +0200 Subject: [PATCH 127/354] lx_emul: active config validation in usb driver Fix genodelabs/genode#4567 --- repos/dde_linux/src/lib/lx_emul/usb.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/repos/dde_linux/src/lib/lx_emul/usb.c b/repos/dde_linux/src/lib/lx_emul/usb.c index b3d8053849..ed328119cd 100644 --- a/repos/dde_linux/src/lib/lx_emul/usb.c +++ b/repos/dde_linux/src/lib/lx_emul/usb.c @@ -233,7 +233,7 @@ static int usb_rpc_call(void * data) if (usb_rpc_args.call == RELEASE_ALL) { i = 0; - num = udev->actconfig->desc.bNumInterfaces; + num = (udev->actconfig) ? udev->actconfig->desc.bNumInterfaces : 0; } else { i = usb_rpc_args.iface_num; num = i + 1; @@ -771,7 +771,7 @@ static int raw_notify(struct notifier_block *nb, unsigned long action, void *dat * policies. */ unsigned long class; - unsigned i; + unsigned i, num; struct usb_iface_urbs *urbs = (struct usb_iface_urbs*) kmalloc(sizeof(struct usb_iface_urbs), GFP_KERNEL); init_usb_anchor(&urbs->submitted); @@ -779,8 +779,12 @@ static int raw_notify(struct notifier_block *nb, unsigned long action, void *dat dev_set_drvdata(&udev->dev, urbs); - for (i = 0; i < udev->actconfig->desc.bNumInterfaces; i++) { - struct usb_interface * iface = udev->actconfig->interface[i]; + class = 0; + num = (udev->actconfig) ? + udev->actconfig->desc.bNumInterfaces : 0; + for (i = 0; i < num; i++) { + struct usb_interface * iface = + (udev->actconfig) ? udev->actconfig->interface[i] : NULL; if (!iface || !iface->cur_altsetting) continue; if (i == 0 || iface->cur_altsetting->desc.bInterfaceClass == From 48eacb6f799b4f0f57c673ccb6e53e4bc777024d Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 30 Jun 2022 09:52:42 +0200 Subject: [PATCH 128/354] qemu-usb: handle Interface_not_found exceptions Fix genodelabs/genode#4572 --- repos/libports/src/lib/qemu-usb/host.cc | 35 ++++++++++++++----------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/repos/libports/src/lib/qemu-usb/host.cc b/repos/libports/src/lib/qemu-usb/host.cc index 233435aa07..624bf1a8ed 100644 --- a/repos/libports/src/lib/qemu-usb/host.cc +++ b/repos/libports/src/lib/qemu-usb/host.cc @@ -269,7 +269,8 @@ struct Usb_host_device : List::Element for (unsigned i = 0; i < cdescr.num_interfaces; i++) { try { usb_raw.release_interface(i); } - catch (Usb::Session::Device_not_found) { return; } + catch (Usb::Session::Device_not_found) { return; } + catch (Usb::Session::Interface_not_found) { return; } } } @@ -287,7 +288,7 @@ struct Usb_host_device : List::Element usb_raw.claim_interface(i); } catch (Usb::Session::Interface_already_claimed) { result = false; - } + } catch (Usb::Session::Interface_not_found) { } } if (!result) error("device already claimed"); @@ -675,22 +676,24 @@ struct Usb_host_device : List::Element catch (Usb::Session::Device_not_found) { return; } for (unsigned i = 0; i < cdescr.num_interfaces; i++) { - Usb::Interface_descriptor iface; - uint8_t const altsetting = udev->altsetting[i]; - usb_raw.interface_descriptor(i, altsetting, &iface); - for (unsigned k = 0; k < iface.num_endpoints; k++) { - Usb::Endpoint_descriptor endp; - usb_raw.endpoint_descriptor(i, altsetting, k, &endp); + try { + Usb::Interface_descriptor iface; + uint8_t const altsetting = udev->altsetting[i]; + usb_raw.interface_descriptor(i, altsetting, &iface); + for (unsigned k = 0; k < iface.num_endpoints; k++) { + Usb::Endpoint_descriptor endp; + usb_raw.endpoint_descriptor(i, altsetting, k, &endp); - int const pid = (endp.address & USB_DIR_IN) ? USB_TOKEN_IN : USB_TOKEN_OUT; - int const ep = (endp.address & 0xf); - uint8_t const type = (endp.attributes & 0x3); + int const pid = (endp.address & USB_DIR_IN) ? USB_TOKEN_IN : USB_TOKEN_OUT; + int const ep = (endp.address & 0xf); + uint8_t const type = (endp.attributes & 0x3); - usb_ep_set_max_packet_size(udev, pid, ep, endp.max_packet_size); - usb_ep_set_type(udev, pid, ep, type); - usb_ep_set_ifnum(udev, pid, ep, i); - usb_ep_set_halted(udev, pid, ep, 0); - } + usb_ep_set_max_packet_size(udev, pid, ep, endp.max_packet_size); + usb_ep_set_type(udev, pid, ep, type); + usb_ep_set_ifnum(udev, pid, ep, i); + usb_ep_set_halted(udev, pid, ep, 0); + } + } catch (Usb::Session::Interface_not_found) { } } } }; From 89f9e7a3ee77504adca887e3f09aa7be6e8caca1 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 21 Jul 2022 11:13:02 +0200 Subject: [PATCH 129/354] lx_emul: consolidate SMP + NO_HZ_IDLE * Move common SMP and NO_HZ_IDLE variables and functions into generic lx_emul shadow implementations, and integrate them into the common lx_emul import rules * Enable SMP and NO_HZ_IDLE within virt_linux kernel configuration * Adapt pc drivers and wireguard accordingly * Use original Linux softirq implementation in wireguard * Remove erroneous softirq shadow implementation Ref genodelabs/genode#4540 Ref genodelabs/genode#4562 --- repos/dde_linux/lib/import/import-lx_emul.mk | 2 +- .../lib/import/import-lx_emul_common.inc | 20 +- .../mk/spec/arm_64/wireguard_lx_inc_dirs.mk | 2 - .../lib/mk/wireguard_lx_inc_dirs.inc | 2 - .../recipes/src/wireguard/content.mk | 67 +- repos/dde_linux/src/app/wireguard/dep.list | 40 + repos/dde_linux/src/app/wireguard/dummies.c | 7 +- .../app/wireguard/genode_c_api/wireguard.c | 8 +- repos/dde_linux/src/app/wireguard/lx_emul.c | 26 +- .../src/app/wireguard/spec/arm_64/dep.list | 1063 ----------------- .../app/wireguard/spec/arm_64/dummies_arch.c | 28 - .../wireguard/spec/arm_64/generated_dummies.c | 23 +- .../wireguard/spec/arm_64/genode_c_api_arch.c | 7 - .../src/app/wireguard/spec/arm_64/source.list | 7 +- .../src/app/wireguard/spec/x86_64/dep.list | 1041 ---------------- .../app/wireguard/spec/x86_64/dummies_arch.c | 1 + .../wireguard/spec/x86_64/generated_dummies.c | 78 +- .../wireguard/spec/x86_64/genode_c_api_arch.c | 5 - .../src/app/wireguard/spec/x86_64/source.list | 6 + .../lib/lx_emul/shadow/arch/x86/kernel/irq.c | 18 + .../shadow/arch/x86/kernel/setup_percpu.c | 25 + .../src/lib/lx_emul/shadow/kernel/cpu.c | 1 + .../src/lib/lx_emul/shadow/kernel/irq_work.c | 20 + .../src/lib/lx_emul/shadow/kernel/rcu/tree.c | 38 +- .../lib/lx_emul/shadow/kernel/sched/core.c | 23 +- .../lib/lx_emul/shadow/kernel/sched/cputime.c | 17 + .../lib/lx_emul/shadow/kernel/sched/fair.c | 17 + .../lx_emul/shadow/kernel/sched/isolation.c | 30 + .../lib/lx_emul/shadow/kernel/sched/loadavg.c | 20 + .../src/lib/lx_emul/shadow/kernel/softirq.c | 84 -- .../src/lib/lx_emul/shadow/lib/cpumask.c | 30 + .../src/lib/lx_emul/shadow/mm/vmstat.c | 18 + repos/dde_linux/src/virt_linux/target.inc | 5 +- repos/pc/lib/import/import-pc_lx_emul.mk | 5 - .../drivers/framebuffer/intel/pc/dummies.c | 24 - repos/pc/src/drivers/usb_host/pc/dummies.c | 24 - repos/pc/src/lib/pc/lx_emul/common_dummies.c | 133 --- repos/pc/src/lib/pc/lx_emul/dep.list | 2 + .../lib/pc/lx_emul/shadow/kernel/rcu/tiny.c | 31 - repos/pc/src/lib/wifi/dummies.c | 24 - repos/pc/src/test/driver_time/dummies.c | 25 - 41 files changed, 403 insertions(+), 2644 deletions(-) create mode 100644 repos/dde_linux/src/app/wireguard/dep.list delete mode 100644 repos/dde_linux/src/app/wireguard/spec/arm_64/dep.list delete mode 100644 repos/dde_linux/src/app/wireguard/spec/x86_64/dep.list create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/setup_percpu.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/kernel/irq_work.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/cputime.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/fair.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/isolation.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/loadavg.c delete mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/lib/cpumask.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/mm/vmstat.c delete mode 100644 repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c diff --git a/repos/dde_linux/lib/import/import-lx_emul.mk b/repos/dde_linux/lib/import/import-lx_emul.mk index fe19478aaf..4411a696de 100644 --- a/repos/dde_linux/lib/import/import-lx_emul.mk +++ b/repos/dde_linux/lib/import/import-lx_emul.mk @@ -9,4 +9,4 @@ LX_GEN_DIR := $(LIB_CACHE_DIR)/virt_linux_generated -include $(call select_from_repositories,lib/import/import-lx_emul_common.inc) -SRC_CC += lx_kit/memory_non_dma.cc +SRC_CC += lx_kit/memory_non_dma.cc diff --git a/repos/dde_linux/lib/import/import-lx_emul_common.inc b/repos/dde_linux/lib/import/import-lx_emul_common.inc index 4e8113d401..6845a15452 100644 --- a/repos/dde_linux/lib/import/import-lx_emul_common.inc +++ b/repos/dde_linux/lib/import/import-lx_emul_common.inc @@ -18,17 +18,29 @@ SRC_CC += lx_emul/task.cc SRC_CC += lx_emul/time.cc SRC_C += lx_emul/clocksource.c -SRC_C += lx_emul/start.c SRC_C += lx_emul/shadow/fs/exec.c SRC_C += lx_emul/shadow/kernel/cpu.c SRC_C += lx_emul/shadow/kernel/exit.c SRC_C += lx_emul/shadow/kernel/fork.c +SRC_C += lx_emul/shadow/kernel/irq_work.c +SRC_C += lx_emul/shadow/kernel/locking/spinlock.c SRC_C += lx_emul/shadow/kernel/pid.c SRC_C += lx_emul/shadow/kernel/printk/printk.c +SRC_C += lx_emul/shadow/kernel/rcu/tree.c +SRC_C += lx_emul/shadow/kernel/sched/cputime.c SRC_C += lx_emul/shadow/kernel/sched/core.c +SRC_C += lx_emul/shadow/kernel/sched/fair.c +SRC_C += lx_emul/shadow/kernel/sched/isolation.c +SRC_C += lx_emul/shadow/kernel/sched/loadavg.c +SRC_C += lx_emul/shadow/kernel/sched/sched.c +SRC_C += lx_emul/shadow/kernel/smp.c +SRC_C += lx_emul/shadow/kernel/stop_machine.c +SRC_C += lx_emul/shadow/lib/cpumask.c SRC_C += lx_emul/shadow/mm/percpu.c SRC_C += lx_emul/shadow/mm/slab_common.c SRC_C += lx_emul/shadow/mm/slub.c +SRC_C += lx_emul/shadow/mm/vmstat.c +SRC_C += lx_emul/start.c SRC_C += lx_emul/virt_to_page.c SRC_CC += lx_kit/console.cc @@ -44,6 +56,9 @@ LX_ARCH := x86 GEN_ARCH := x86 SPEC_ARCH := x86_32 +SRC_C += lx_emul/shadow/arch/x86/kernel/irq.c +SRC_C += lx_emul/shadow/arch/x86/kernel/setup_percpu.c + # temporarily add the following include path for x86 platform_session wrapper INC_DIR += $(DDE_LINUX_DIR)/src/include/spec/x86/lx_kit endif @@ -53,6 +68,9 @@ LX_ARCH := x86 GEN_ARCH := x86 SPEC_ARCH := x86_64 +SRC_C += lx_emul/shadow/arch/x86/kernel/irq.c +SRC_C += lx_emul/shadow/arch/x86/kernel/setup_percpu.c + # temporarily add the following include path for x86 platform_session wrapper INC_DIR += $(DDE_LINUX_DIR)/src/include/spec/x86/lx_kit endif diff --git a/repos/dde_linux/lib/mk/spec/arm_64/wireguard_lx_inc_dirs.mk b/repos/dde_linux/lib/mk/spec/arm_64/wireguard_lx_inc_dirs.mk index fc175013ee..f75fb7b75f 100644 --- a/repos/dde_linux/lib/mk/spec/arm_64/wireguard_lx_inc_dirs.mk +++ b/repos/dde_linux/lib/mk/spec/arm_64/wireguard_lx_inc_dirs.mk @@ -6,12 +6,10 @@ PRG_DIR := $(REP_DIR)/src/app/wireguard/spec/arm_64 GEN_PRG_DIR := $(PRG_DIR)/../.. SRC_C += arch/arm64/kernel/smp.c -SRC_C += kernel/smp.c SRC_C += arch/arm64/kernel/cpufeature.c vpath arch/arm64/kernel/cpufeature.c $(GEN_PRG_DIR)/lx_emul/shadow vpath arch/arm64/kernel/smp.c $(REP_DIR)/src/lib/lx_emul/shadow -vpath kernel/smp.c $(REP_DIR)/src/lib/lx_emul/shadow SRC_S += arch/arm64/crypto/poly1305-core.S diff --git a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc index f224718051..c881e4d1ab 100644 --- a/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc +++ b/repos/dde_linux/lib/mk/wireguard_lx_inc_dirs.inc @@ -17,12 +17,10 @@ SRC_C += dummies_arch.c SRC_C += lx_emul.c SRC_C += wireguard.c SRC_C += genode_c_api_arch.c -SRC_C += softirq.c vpath wireguard.c $(GEN_PRG_DIR)/genode_c_api vpath %.c $(PRG_DIR) vpath %.c $(GEN_PRG_DIR) -vpath softirq.c $(REP_DIR)/src/lib/lx_emul/shadow/kernel INC_DIR += $(PRG_DIR) INC_DIR += $(GEN_PRG_DIR) diff --git a/repos/dde_linux/recipes/src/wireguard/content.mk b/repos/dde_linux/recipes/src/wireguard/content.mk index da199a672d..176abfc302 100644 --- a/repos/dde_linux/recipes/src/wireguard/content.mk +++ b/repos/dde_linux/recipes/src/wireguard/content.mk @@ -46,45 +46,43 @@ LX_ABS_DIR := $(addsuffix /$(LX_REL_DIR),$(PORT_DIR)) # ingredients needed for creating a Linux build directory / generated headers LX_FILES += Kbuild \ Makefile \ + arch/arm64/Makefile \ + arch/arm64/boot/dts \ + arch/arm64/configs \ + arch/arm64/crypto/poly1305-armv8.pl \ + arch/arm64/include \ + arch/arm64/kernel/asm-offsets.c \ + arch/arm64/kernel/vdso/Makefile \ + arch/arm64/kernel/vdso/gen_vdso_offsets.sh \ + arch/arm64/kernel/vdso/note.S \ + arch/arm64/kernel/vdso/sigreturn.S \ + arch/arm64/kernel/vdso/vdso.lds.S \ + arch/arm64/kernel/vdso/vgettimeofday.c \ + arch/arm64/tools/Makefile \ + arch/arm64/tools/cpucaps \ + arch/arm64/tools/gen-cpucaps.awk \ arch/x86/Makefile \ arch/x86/Makefile_32.cpu \ arch/x86/configs \ arch/x86/entry/syscalls/Makefile \ arch/x86/entry/syscalls/syscall_32.tbl \ arch/x86/entry/syscalls/syscall_64.tbl \ - arch/x86/include/asm/Kbuild \ - arch/x86/include/asm/atomic64_32.h \ - arch/x86/include/asm/cmpxchg_32.h \ - arch/x86/include/asm/string.h \ - arch/x86/include/asm/string_32.h \ - arch/x86/include/asm/string_64.h \ - arch/x86/include/uapi/asm/Kbuild \ - arch/x86/include/uapi/asm/posix_types.h \ - arch/x86/include/uapi/asm/posix_types_32.h \ - arch/x86/include/uapi/asm/posix_types_64.h \ + arch/x86/include \ + arch/x86/kernel/asm-offsets.c \ + arch/x86/kernel/asm-offsets_64.c \ arch/x86/tools/Makefile \ arch/x86/tools/relocs.c \ arch/x86/tools/relocs.h \ arch/x86/tools/relocs_32.c \ arch/x86/tools/relocs_64.c \ arch/x86/tools/relocs_common.c \ - arch/arm64/Makefile \ - arch/arm64/configs \ - arch/arm64/boot/dts \ - arch/arm64/include/asm/Kbuild \ - arch/arm64/include/uapi/asm/Kbuild \ - arch/arm64/tools/Makefile \ - arch/arm64/tools/gen-cpucaps.awk \ - arch/arm64/tools/cpucaps \ - include/asm-generic/bitops/fls64.h \ - include/asm-generic/Kbuild \ - include/linux/compiler-version.h \ - include/linux/kbuild.h \ - include/linux/license.h \ - include/uapi/Kbuild \ - include/uapi/asm-generic/Kbuild \ + include \ + kernel/bounds.c \ kernel/configs/tiny-base.config \ kernel/configs/tiny.config \ + kernel/time/timeconst.bc \ + lib/vdso/Makefile \ + lib/vdso/gettimeofday.c \ scripts/Kbuild.include \ scripts/Makefile \ scripts/Makefile.asm-generic \ @@ -93,8 +91,8 @@ LX_FILES += Kbuild \ scripts/Makefile.extrawarn \ scripts/Makefile.host \ scripts/Makefile.lib \ - scripts/asn1_compiler.c \ scripts/as-version.sh \ + scripts/asn1_compiler.c \ scripts/atomic/check-atomics.sh \ scripts/basic/Makefile \ scripts/basic/fixdep.c \ @@ -125,23 +123,6 @@ LX_FILES += $(addprefix scripts/kconfig/,$(LX_SCRIPTS_KCONFIG_FILES)) \ LX_FILES += $(shell cd $(LX_ABS_DIR); find -name "Kconfig*" -printf "%P\n") -# needed for generated/asm-offsets.h -LX_FILES += arch/x86/kernel/asm-offsets.c \ - arch/x86/kernel/asm-offsets_64.c \ - kernel/bounds.c \ - kernel/time/timeconst.bc \ - arch/arm64/kernel/vdso/vgettimeofday.c \ - arch/arm64/kernel/vdso/note.S \ - arch/arm64/kernel/vdso/vdso.lds.S \ - arch/arm64/kernel/asm-offsets.c \ - arch/arm64/kernel/vdso/Makefile \ - lib/vdso/Makefile \ - arch/arm64/kernel/vdso/sigreturn.S \ - lib/vdso/gettimeofday.c \ - include/vdso/datapage.h \ - arch/arm64/kernel/vdso/gen_vdso_offsets.sh \ - arch/arm64/crypto/poly1305-armv8.pl \ - # add content listed in the repository's source.list or dep.list files LX_FILE_LISTS := $(shell find -H $(REP_DIR) -name dep.list -or -name source.list) LX_FILES += $(shell cat $(LX_FILE_LISTS)) diff --git a/repos/dde_linux/src/app/wireguard/dep.list b/repos/dde_linux/src/app/wireguard/dep.list new file mode 100644 index 0000000000..2ef8cb4b42 --- /dev/null +++ b/repos/dde_linux/src/app/wireguard/dep.list @@ -0,0 +1,40 @@ +crypto/internal.h +drivers/net/wireguard/allowedips.h +drivers/net/wireguard/cookie.h +drivers/net/wireguard/device.h +drivers/net/wireguard/messages.h +drivers/net/wireguard/netlink.h +drivers/net/wireguard/noise.h +drivers/net/wireguard/peer.h +drivers/net/wireguard/peerlookup.h +drivers/net/wireguard/queueing.h +drivers/net/wireguard/ratelimiter.h +drivers/net/wireguard/selftest/allowedips.c +drivers/net/wireguard/selftest/counter.c +drivers/net/wireguard/selftest/ratelimiter.c +drivers/net/wireguard/socket.h +drivers/net/wireguard/timers.h +drivers/net/wireguard/version.h +kernel/irq/debug.h +kernel/irq/internals.h +kernel/irq/settings.h +kernel/locking/lock_events.h +kernel/locking/lock_events_list.h +kernel/locking/mutex.h +kernel/sched/autogroup.h +kernel/sched/cpudeadline.h +kernel/sched/cpupri.h +kernel/sched/features.h +kernel/sched/sched.h +kernel/sched/stats.h +kernel/smpboot.h +kernel/time/ntp_internal.h +kernel/time/tick-internal.h +kernel/time/tick-sched.h +kernel/time/timekeeping.h +kernel/time/timekeeping_internal.h +kernel/workqueue_internal.h +lib/kstrtox.h +mm/internal.h +mm/slab.h +net/core/datagram.h diff --git a/repos/dde_linux/src/app/wireguard/dummies.c b/repos/dde_linux/src/app/wireguard/dummies.c index 7b4004cbf8..19976a3a1b 100644 --- a/repos/dde_linux/src/app/wireguard/dummies.c +++ b/repos/dde_linux/src/app/wireguard/dummies.c @@ -285,8 +285,9 @@ __wsum csum_partial(const void * buff,int len,__wsum sum) } -#include -void __init wait_bit_init(void) +#include + +void kvfree(const void * addr) { - lx_emul_trace(__func__); + lx_emul_trace_and_stop(__func__); } diff --git a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c index 8dab6c1514..b2435551f4 100644 --- a/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c +++ b/repos/dde_linux/src/app/wireguard/genode_c_api/wireguard.c @@ -220,10 +220,6 @@ _genode_wg_set_device(struct genl_info *info) } -void genode_wg_arch_net_dev_init(struct net_device *net_dev, - int *pcpu_refcnt); - - static void _genode_wg_config_add_dev(genode_wg_u16_t listen_port, const genode_wg_u8_t * const priv_key) @@ -237,10 +233,8 @@ _genode_wg_config_add_dev(genode_wg_u16_t listen_port, /* prepare environment for the execution of 'wg_set_device' */ _genode_wg_net_dev.public_data.rtnl_link_ops = _genode_wg_rtnl_link_ops; + _genode_wg_net_dev.public_data.pcpu_refcnt = &_genode_wg_net_dev.pcpu_refcnt; _genode_wg_net_dev.pcpu_refcnt = 0; - genode_wg_arch_net_dev_init( - genode_wg_net_device(), &_genode_wg_net_dev.pcpu_refcnt); - _genode_wg_sk_buff.sk = &_genode_wg_sock; _genode_wg_sock.sk_user_data = &_genode_wg_net_dev.private_data; diff --git a/repos/dde_linux/src/app/wireguard/lx_emul.c b/repos/dde_linux/src/app/wireguard/lx_emul.c index e3cf11c81c..f2a4a1517b 100644 --- a/repos/dde_linux/src/app/wireguard/lx_emul.c +++ b/repos/dde_linux/src/app/wireguard/lx_emul.c @@ -276,26 +276,6 @@ struct rtable * ip_route_output_flow(struct net * net,struct flowi4 * flp4,const } -#include - -int __cond_resched(void) -{ - if (should_resched(0)) { - schedule(); - return 1; - } - return 0; -} - - -#include - -void call_rcu(struct rcu_head * head,rcu_callback_t func) -{ - func(head); -} - - #include void kfree_sensitive(const void * p) @@ -383,3 +363,9 @@ bool __do_once_start(bool * done,unsigned long * flags) { return !*done; } + + +#ifdef CONFIG_X86_64 +DEFINE_PER_CPU(void *, hardirq_stack_ptr); +#endif +DEFINE_PER_CPU(bool, hardirq_stack_inuse); diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/dep.list b/repos/dde_linux/src/app/wireguard/spec/arm_64/dep.list deleted file mode 100644 index d23b27d185..0000000000 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/dep.list +++ /dev/null @@ -1,1063 +0,0 @@ -arch/arm64/include/asm/alternative.h -arch/arm64/include/asm/alternative-macros.h -arch/arm64/include/asm/arch_gicv3.h -arch/arm64/include/asm/archrandom.h -arch/arm64/include/asm/arch_timer.h -arch/arm64/include/asm/asm-bug.h -arch/arm64/include/asm/asm-offsets.h -arch/arm64/include/asm/assembler.h -arch/arm64/include/asm/atomic.h -arch/arm64/include/asm/atomic_ll_sc.h -arch/arm64/include/asm/barrier.h -arch/arm64/include/asm/bitops.h -arch/arm64/include/asm/bitrev.h -arch/arm64/include/asm/boot.h -arch/arm64/include/asm/brk-imm.h -arch/arm64/include/asm/bug.h -arch/arm64/include/asm/cacheflush.h -arch/arm64/include/asm/cache.h -arch/arm64/include/asm/checksum.h -arch/arm64/include/asm/clocksource.h -arch/arm64/include/asm/cmpxchg.h -arch/arm64/include/asm/compat.h -arch/arm64/include/asm/compiler.h -arch/arm64/include/asm/cpufeature.h -arch/arm64/include/asm/cputype.h -arch/arm64/include/asm/current.h -arch/arm64/include/asm/daifflags.h -arch/arm64/include/asm/debug-monitors.h -arch/arm64/include/asm/device.h -arch/arm64/include/asm/elf.h -arch/arm64/include/asm/esr.h -arch/arm64/include/asm/exec.h -arch/arm64/include/asm/extable.h -arch/arm64/include/asm/fixmap.h -arch/arm64/include/asm/fpsimd.h -arch/arm64/include/asm/ftrace.h -arch/arm64/include/asm/hardirq.h -arch/arm64/include/asm/hw_breakpoint.h -arch/arm64/include/asm/hwcap.h -arch/arm64/include/asm/hyp_image.h -arch/arm64/include/asm/insn-def.h -arch/arm64/include/asm/insn.h -arch/arm64/include/asm/io.h -arch/arm64/include/asm/irqflags.h -arch/arm64/include/asm/irq.h -arch/arm64/include/asm/irq_work.h -arch/arm64/include/asm/kasan.h -arch/arm64/include/asm/kernel-pgtable.h -arch/arm64/include/asm/kgdb.h -arch/arm64/include/asm/kprobes.h -arch/arm64/include/asm/kvm_arm.h -arch/arm64/include/asm/kvm_asm.h -arch/arm64/include/asm/kvm_host.h -arch/arm64/include/asm/kvm_types.h -arch/arm64/include/asm/linkage.h -arch/arm64/include/asm/lse.h -arch/arm64/include/asm/memory.h -arch/arm64/include/asm/mmu_context.h -arch/arm64/include/asm/mmu.h -arch/arm64/include/asm/module.h -arch/arm64/include/asm/mte-def.h -arch/arm64/include/asm/mte.h -arch/arm64/include/asm/mte-kasan.h -arch/arm64/include/asm/neon.h -arch/arm64/include/asm/page-def.h -arch/arm64/include/asm/page.h -arch/arm64/include/asm/percpu.h -arch/arm64/include/asm/perf_event.h -arch/arm64/include/asm/pgtable.h -arch/arm64/include/asm/pgtable-hwdef.h -arch/arm64/include/asm/pgtable-prot.h -arch/arm64/include/asm/pgtable-types.h -arch/arm64/include/asm/pointer_auth.h -arch/arm64/include/asm/preempt.h -arch/arm64/include/asm/processor.h -arch/arm64/include/asm/proc-fns.h -arch/arm64/include/asm/ptrace.h -arch/arm64/include/asm/rwonce.h -arch/arm64/include/asm/sections.h -arch/arm64/include/asm/set_memory.h -arch/arm64/include/asm/shmparam.h -arch/arm64/include/asm/signal32.h -arch/arm64/include/asm/signal.h -arch/arm64/include/asm/simd.h -arch/arm64/include/asm/smp.h -arch/arm64/include/asm/smp_plat.h -arch/arm64/include/asm/sparsemem.h -arch/arm64/include/asm/spectre.h -arch/arm64/include/asm/spinlock.h -arch/arm64/include/asm/spinlock_types.h -arch/arm64/include/asm/stack_pointer.h -arch/arm64/include/asm/stat.h -arch/arm64/include/asm/string.h -arch/arm64/include/asm/suspend.h -arch/arm64/include/asm/syscall_wrapper.h -arch/arm64/include/asm/sysreg.h -arch/arm64/include/asm/thread_info.h -arch/arm64/include/asm/timex.h -arch/arm64/include/asm/tlbflush.h -arch/arm64/include/asm/tlb.h -arch/arm64/include/asm/topology.h -arch/arm64/include/asm/uaccess.h -arch/arm64/include/asm/unistd.h -arch/arm64/include/asm/vdso/clocksource.h -arch/arm64/include/asm/vdso/gettimeofday.h -arch/arm64/include/asm/vdso.h -arch/arm64/include/asm/vdso/processor.h -arch/arm64/include/asm/virt.h -arch/arm64/include/asm/vmalloc.h -arch/arm64/include/asm/word-at-a-time.h -arch/arm64/include/uapi/asm/auxvec.h -arch/arm64/include/uapi/asm/bitsperlong.h -arch/arm64/include/uapi/asm/bpf_perf_event.h -arch/arm64/include/uapi/asm/byteorder.h -arch/arm64/include/uapi/asm/fcntl.h -arch/arm64/include/uapi/asm/hwcap.h -arch/arm64/include/uapi/asm/kvm.h -arch/arm64/include/uapi/asm/param.h -arch/arm64/include/uapi/asm/perf_regs.h -arch/arm64/include/uapi/asm/posix_types.h -arch/arm64/include/uapi/asm/ptrace.h -arch/arm64/include/uapi/asm/sigcontext.h -arch/arm64/include/uapi/asm/signal.h -arch/arm64/include/uapi/asm/sve_context.h -arch/arm64/include/uapi/asm/unistd.h -crypto/internal.h -drivers/net/wireguard/allowedips.h -drivers/net/wireguard/cookie.h -drivers/net/wireguard/device.h -drivers/net/wireguard/messages.h -drivers/net/wireguard/netlink.h -drivers/net/wireguard/noise.h -drivers/net/wireguard/peer.h -drivers/net/wireguard/peerlookup.h -drivers/net/wireguard/queueing.h -drivers/net/wireguard/ratelimiter.h -drivers/net/wireguard/socket.h -drivers/net/wireguard/timers.h -drivers/net/wireguard/version.h -include/acpi/acbuffer.h -include/acpi/acconfig.h -include/acpi/acexcep.h -include/acpi/acnames.h -include/acpi/acoutput.h -include/acpi/acpi.h -include/acpi/acpi_numa.h -include/acpi/acpiosxf.h -include/acpi/acpixf.h -include/acpi/acrestyp.h -include/acpi/actbl1.h -include/acpi/actbl2.h -include/acpi/actbl3.h -include/acpi/actbl.h -include/acpi/actypes.h -include/acpi/apei.h -include/acpi/ghes.h -include/acpi/hed.h -include/acpi/platform/acenvex.h -include/acpi/platform/acenv.h -include/acpi/platform/acgccex.h -include/acpi/platform/acgcc.h -include/acpi/platform/aclinuxex.h -include/acpi/platform/aclinux.h -include/asm-generic/atomic-instrumented.h -include/asm-generic/atomic-long.h -include/asm-generic/barrier.h -include/asm-generic/bitops/arch_hweight.h -include/asm-generic/bitops/atomic.h -include/asm-generic/bitops/builtin-__ffs.h -include/asm-generic/bitops/builtin-ffs.h -include/asm-generic/bitops/builtin-__fls.h -include/asm-generic/bitops/builtin-fls.h -include/asm-generic/bitops/const_hweight.h -include/asm-generic/bitops/ext2-atomic-setbit.h -include/asm-generic/bitops/ffz.h -include/asm-generic/bitops/find.h -include/asm-generic/bitops/fls64.h -include/asm-generic/bitops/hweight.h -include/asm-generic/bitops/le.h -include/asm-generic/bitops/lock.h -include/asm-generic/bitops/non-atomic.h -include/asm-generic/bitops/sched.h -include/asm-generic/bitsperlong.h -include/asm-generic/bug.h -include/asm-generic/cacheflush.h -include/asm-generic/checksum.h -include/asm-generic/compat.h -include/asm-generic/delay.h -include/asm-generic/div64.h -include/asm-generic/dma.h -include/asm-generic/early_ioremap.h -include/asm-generic/emergency-restart.h -include/asm-generic/error-injection.h -include/asm-generic/export.h -include/asm-generic/fixmap.h -include/asm-generic/getorder.h -include/asm-generic/hardirq.h -include/asm-generic/hw_irq.h -include/asm-generic/int-ll64.h -include/asm-generic/ioctl.h -include/asm-generic/io.h -include/asm-generic/irq.h -include/asm-generic/irq_regs.h -include/asm-generic/kdebug.h -include/asm-generic/kmap_size.h -include/asm-generic/kprobes.h -include/asm-generic/kvm_para.h -include/asm-generic/local64.h -include/asm-generic/local.h -include/asm-generic/memory_model.h -include/asm-generic/mm_hooks.h -include/asm-generic/mmiowb.h -include/asm-generic/mmu_context.h -include/asm-generic/module.h -include/asm-generic/msi.h -include/asm-generic/param.h -include/asm-generic/pci_iomap.h -include/asm-generic/percpu.h -include/asm-generic/pgtable-nop4d.h -include/asm-generic/pgtable-nopud.h -include/asm-generic/pgtable_uffd.h -include/asm-generic/qrwlock.h -include/asm-generic/qrwlock_types.h -include/asm-generic/qspinlock.h -include/asm-generic/qspinlock_types.h -include/asm-generic/resource.h -include/asm-generic/rwonce.h -include/asm-generic/sections.h -include/asm-generic/set_memory.h -include/asm-generic/shmparam.h -include/asm-generic/signal.h -include/asm-generic/timex.h -include/asm-generic/tlb.h -include/asm-generic/topology.h -include/asm-generic/trace_clock.h -include/asm-generic/unaligned.h -include/asm-generic/user.h -include/clocksource/arm_arch_timer.h -include/crypto/aead.h -include/crypto/algapi.h -include/crypto/blake2s.h -include/crypto/chacha20poly1305.h -include/crypto/chacha.h -include/crypto/curve25519.h -include/crypto/hash.h -include/crypto/internal/aead.h -include/crypto/internal/blake2s.h -include/crypto/internal/chacha.h -include/crypto/internal/cipher.h -include/crypto/internal/hash.h -include/crypto/internal/poly1305.h -include/crypto/internal/simd.h -include/crypto/internal/skcipher.h -include/crypto/poly1305.h -include/crypto/scatterwalk.h -include/crypto/sha1.h -include/crypto/skcipher.h -include/kvm/arm_arch_timer.h -include/kvm/arm_pmu.h -include/kvm/arm_vgic.h -include/kvm/iodev.h -include/linux/acpi.h -include/linux/alarmtimer.h -include/linux/align.h -include/linux/arch_topology.h -include/linux/arm_sdei.h -include/linux/arm-smccc.h -include/linux/assoc_array.h -include/linux/atomic-arch-fallback.h -include/linux/atomic.h -include/linux/audit.h -include/linux/auxvec.h -include/linux/backing-dev-defs.h -include/linux/binfmts.h -include/linux/bio.h -include/linux/bitfield.h -include/linux/bitmap.h -include/linux/bitops.h -include/linux/bitrev.h -include/linux/bits.h -include/linux/bit_spinlock.h -include/linux/blk-cgroup.h -include/linux/blkdev.h -include/linux/blk_types.h -include/linux/bottom_half.h -include/linux/bpf-cgroup.h -include/linux/bpf.h -include/linux/bpf-netns.h -include/linux/bpfptr.h -include/linux/bsg.h -include/linux/bug.h -include/linux/build_bug.h -include/linux/buildid.h -include/linux/build-salt.h -include/linux/bvec.h -include/linux/byteorder/generic.h -include/linux/byteorder/little_endian.h -include/linux/cache.h -include/linux/capability.h -include/linux/cdev.h -include/linux/cfi.h -include/linux/cgroup-defs.h -include/linux/cgroup.h -include/linux/clk.h -include/linux/clk-provider.h -include/linux/clockchips.h -include/linux/clocksource.h -include/linux/clocksource_ids.h -include/linux/compat.h -include/linux/compiler_attributes.h -include/linux/compiler-gcc.h -include/linux/compiler.h -include/linux/compiler_types.h -include/linux/compiler-version.h -include/linux/completion.h -include/linux/const.h -include/linux/context_tracking.h -include/linux/context_tracking_state.h -include/linux/cper.h -include/linux/cpufeature.h -include/linux/cpufreq.h -include/linux/cpu.h -include/linux/cpuhotplug.h -include/linux/cpuidle.h -include/linux/cpumask.h -include/linux/cpuset.h -include/linux/crc32.h -include/linux/crc-ccitt.h -include/linux/cred.h -include/linux/crypto.h -include/linux/ctype.h -include/linux/dax.h -include/linux/dcache.h -include/linux/dccp.h -include/linux/debugfs.h -include/linux/debug_locks.h -include/linux/debugobjects.h -include/linux/delayacct.h -include/linux/delayed_call.h -include/linux/delay.h -include/linux/device/bus.h -include/linux/device/class.h -include/linux/device/driver.h -include/linux/device.h -include/linux/dev_printk.h -include/linux/dma-direction.h -include/linux/dma-mapping.h -include/linux/dqblk_qtree.h -include/linux/dqblk_v1.h -include/linux/dqblk_v2.h -include/linux/dynamic_queue_limits.h -include/linux/elevator.h -include/linux/elf.h -include/linux/elfnote.h -include/linux/energy_model.h -include/linux/err.h -include/linux/errname.h -include/linux/errno.h -include/linux/error-injection.h -include/linux/errqueue.h -include/linux/errseq.h -include/linux/etherdevice.h -include/linux/ethtool.h -include/linux/eventfd.h -include/linux/export.h -include/linux/fault-inject.h -include/linux/fault-inject-usercopy.h -include/linux/fcntl.h -include/linux/file.h -include/linux/filter.h -include/linux/fips.h -include/linux/firmware.h -include/linux/flex_proportions.h -include/linux/freelist.h -include/linux/freezer.h -include/linux/fs.h -include/linux/fs_types.h -include/linux/ftrace.h -include/linux/ftrace_irq.h -include/linux/fwnode.h -include/linux/genetlink.h -include/linux/genhd.h -include/linux/gfp.h -include/linux/gpio/consumer.h -include/linux/hardirq.h -include/linux/hash.h -include/linux/hashtable.h -include/linux/highmem.h -include/linux/highmem-internal.h -include/linux/highuid.h -include/linux/hrtimer_defs.h -include/linux/hrtimer.h -include/linux/huge_mm.h -include/linux/hugetlb.h -include/linux/hugetlb_inline.h -include/linux/icmp.h -include/linux/icmpv6.h -include/linux/idr.h -include/linux/if_arp.h -include/linux/if_ether.h -include/linux/if_link.h -include/linux/if_pppol2tp.h -include/linux/if_pppox.h -include/linux/if_tunnel.h -include/linux/if_vlan.h -include/linux/igmp.h -include/linux/in6.h -include/linux/indirect_call_wrapper.h -include/linux/inetdevice.h -include/linux/inet.h -include/linux/in.h -include/linux/init.h -include/linux/init_task.h -include/linux/instrumentation.h -include/linux/instrumented.h -include/linux/interrupt.h -include/linux/interval_tree.h -include/linux/iocontext.h -include/linux/io.h -include/linux/iopoll.h -include/linux/ioport.h -include/linux/ioprio.h -include/linux/ipc.h -include/linux/ip.h -include/linux/ipv6.h -include/linux/ipv6_route.h -include/linux/irqbypass.h -include/linux/irqchip/arm-gic-common.h -include/linux/irqchip/arm-gic-v4.h -include/linux/irqchip/arm-vgic-info.h -include/linux/irqchip.h -include/linux/irqdesc.h -include/linux/irqdomain.h -include/linux/irqflags.h -include/linux/irq.h -include/linux/irqhandler.h -include/linux/irqnr.h -include/linux/irqreturn.h -include/linux/irq_work.h -include/linux/jhash.h -include/linux/jiffies.h -include/linux/jump_label.h -include/linux/jump_label_ratelimit.h -include/linux/kallsyms.h -include/linux/kasan-checks.h -include/linux/kasan.h -include/linux/kbuild.h -include/linux/kconfig.h -include/linux/kcov.h -include/linux/kcsan-checks.h -include/linux/kcsan.h -include/linux/kdebug.h -include/linux/kdev_t.h -include/linux/kernel.h -include/linux/kernel_read_file.h -include/linux/kernel_stat.h -include/linux/kernfs.h -include/linux/kern_levels.h -include/linux/key.h -include/linux/kgdb.h -include/linux/klist.h -include/linux/kmemleak.h -include/linux/kmod.h -include/linux/kobject.h -include/linux/kobject_ns.h -include/linux/kprobes.h -include/linux/kref.h -include/linux/kstrtox.h -include/linux/kthread.h -include/linux/ktime.h -include/linux/kvm_dirty_ring.h -include/linux/kvm_host.h -include/linux/kvm_para.h -include/linux/kvm_types.h -include/linux/l2tp.h -include/linux/latencytop.h -include/linux/limits.h -include/linux/linkage.h -include/linux/linkmode.h -include/linux/list_bl.h -include/linux/list.h -include/linux/list_lru.h -include/linux/list_nulls.h -include/linux/livepatch.h -include/linux/llist.h -include/linux/local_lock.h -include/linux/local_lock_internal.h -include/linux/lockdep.h -include/linux/lockdep_types.h -include/linux/lockref.h -include/linux/log2.h -include/linux/logic_pio.h -include/linux/math64.h -include/linux/math.h -include/linux/mdio.h -include/linux/memblock.h -include/linux/memcontrol.h -include/linux/mem_encrypt.h -include/linux/memory_hotplug.h -include/linux/mempolicy.h -include/linux/mempool.h -include/linux/memremap.h -include/linux/migrate.h -include/linux/migrate_mode.h -include/linux/mii.h -include/linux/mii_timestamper.h -include/linux/minmax.h -include/linux/mmap_lock.h -include/linux/mmdebug.h -include/linux/mm.h -include/linux/mm_types.h -include/linux/mm_types_task.h -include/linux/mmu_context.h -include/linux/mmu_notifier.h -include/linux/mmzone.h -include/linux/mod_devicetable.h -include/linux/module.h -include/linux/moduleparam.h -include/linux/mount.h -include/linux/mpls.h -include/linux/msi.h -include/linux/mutex.h -include/linux/netdev_features.h -include/linux/netdevice.h -include/linux/netfilter_defs.h -include/linux/netfilter.h -include/linux/netfilter_ipv4.h -include/linux/netfilter/nf_conntrack_common.h -include/linux/netfilter/nf_conntrack_dccp.h -include/linux/netfilter/nf_conntrack_proto_gre.h -include/linux/netfilter/nf_conntrack_sctp.h -include/linux/netfilter/nf_conntrack_tcp.h -include/linux/netfilter/x_tables.h -include/linux/net.h -include/linux/netlink.h -include/linux/nfs_fs_i.h -include/linux/nmi.h -include/linux/node.h -include/linux/nodemask.h -include/linux/nospec.h -include/linux/notifier.h -include/linux/ns_common.h -include/linux/nsproxy.h -include/linux/numa.h -include/linux/nvmem-provider.h -include/linux/of_address.h -include/linux/of_clk.h -include/linux/of_fdt.h -include/linux/of.h -include/linux/of_irq.h -include/linux/once.h -include/linux/once_lite.h -include/linux/osq_lock.h -include/linux/overflow.h -include/linux/pageblock-flags.h -include/linux/page_counter.h -include/linux/page_ext.h -include/linux/page-flags.h -include/linux/page-flags-layout.h -include/linux/pagemap.h -include/linux/page_ref.h -include/linux/panic.h -include/linux/path.h -include/linux/percpu_counter.h -include/linux/percpu-defs.h -include/linux/percpu.h -include/linux/percpu-refcount.h -include/linux/percpu-rwsem.h -include/linux/perf_event.h -include/linux/perf_regs.h -include/linux/personality.h -include/linux/pfn.h -include/linux/pgtable.h -include/linux/phy.h -include/linux/phylink.h -include/linux/pid.h -include/linux/pid_namespace.h -include/linux/pipe_fs_i.h -include/linux/platform_data/dsa.h -include/linux/platform_device.h -include/linux/plist.h -include/linux/pm.h -include/linux/pm_qos.h -include/linux/pm_runtime.h -include/linux/pm_wakeup.h -include/linux/poison.h -include/linux/poll.h -include/linux/posix-timers.h -include/linux/ppp_channel.h -include/linux/ppp_defs.h -include/linux/prandom.h -include/linux/preempt.h -include/linux/prefetch.h -include/linux/printk.h -include/linux/proc_fs.h -include/linux/profile.h -include/linux/projid.h -include/linux/property.h -include/linux/psci.h -include/linux/psi.h -include/linux/psi_types.h -include/linux/ptp_classify.h -include/linux/ptrace.h -include/linux/ptr_ring.h -include/linux/pvclock_gtod.h -include/linux/quota.h -include/linux/radix-tree.h -include/linux/random.h -include/linux/range.h -include/linux/ratelimit.h -include/linux/ratelimit_types.h -include/linux/rbtree.h -include/linux/rbtree_latch.h -include/linux/rculist_bl.h -include/linux/rculist.h -include/linux/rculist_nulls.h -include/linux/rcu_node_tree.h -include/linux/rcupdate.h -include/linux/rcupdate_wait.h -include/linux/rcu_segcblist.h -include/linux/rcu_sync.h -include/linux/rcutree.h -include/linux/rcuwait.h -include/linux/reboot.h -include/linux/refcount.h -include/linux/resource_ext.h -include/linux/resource.h -include/linux/restart_block.h -include/linux/rhashtable-types.h -include/linux/ring_buffer.h -include/linux/rtc.h -include/linux/rtnetlink.h -include/linux/rwlock_api_smp.h -include/linux/rwlock.h -include/linux/rwlock_types.h -include/linux/rwsem.h -include/linux/sbitmap.h -include/linux/scatterlist.h -include/linux/sched/autogroup.h -include/linux/sched/clock.h -include/linux/sched_clock.h -include/linux/sched/coredump.h -include/linux/sched/cpufreq.h -include/linux/sched/cputime.h -include/linux/sched/deadline.h -include/linux/sched/debug.h -include/linux/sched.h -include/linux/sched/hotplug.h -include/linux/sched/idle.h -include/linux/sched/init.h -include/linux/sched/isolation.h -include/linux/sched/jobctl.h -include/linux/sched/loadavg.h -include/linux/sched/mm.h -include/linux/sched/nohz.h -include/linux/sched/numa_balancing.h -include/linux/sched/prio.h -include/linux/sched/rt.h -include/linux/sched/sd_flags.h -include/linux/sched/signal.h -include/linux/sched/smt.h -include/linux/sched/stat.h -include/linux/sched/sysctl.h -include/linux/sched/task.h -include/linux/sched/task_stack.h -include/linux/sched/topology.h -include/linux/sched/types.h -include/linux/sched/user.h -include/linux/sched/wake_q.h -include/linux/sched/xacct.h -include/linux/sctp.h -include/linux/seccomp.h -include/linux/securebits.h -include/linux/security.h -include/linux/semaphore.h -include/linux/sem.h -include/linux/seq_buf.h -include/linux/seq_file.h -include/linux/seq_file_net.h -include/linux/seqlock.h -include/linux/set_memory.h -include/linux/shm.h -include/linux/shrinker.h -include/linux/signal.h -include/linux/signal_types.h -include/linux/siphash.h -include/linux/sizes.h -include/linux/skbuff.h -include/linux/slab.h -include/linux/smp.h -include/linux/smp_types.h -include/linux/socket.h -include/linux/sockptr.h -include/linux/spinlock_api_smp.h -include/linux/spinlock.h -include/linux/spinlock_types.h -include/linux/splice.h -include/linux/srcu.h -include/linux/srcutree.h -include/linux/stackdepot.h -include/linux/stacktrace.h -include/linux/stat.h -include/linux/static_call.h -include/linux/static_call_types.h -include/linux/static_key.h -include/linux/stddef.h -include/linux/stop_machine.h -include/linux/string.h -include/linux/stringhash.h -include/linux/string_helpers.h -include/linux/stringify.h -include/linux/suspend.h -include/linux/swab.h -include/linux/swait.h -include/linux/swap.h -include/linux/sync_core.h -include/linux/syscalls.h -include/linux/syscall_user_dispatch.h -include/linux/syscore_ops.h -include/linux/sysctl.h -include/linux/sysfs.h -include/linux/task_io_accounting.h -include/linux/task_work.h -include/linux/tcp.h -include/linux/textsearch.h -include/linux/thread_info.h -include/linux/threads.h -include/linux/tick.h -include/linux/time32.h -include/linux/time64.h -include/linux/timecounter.h -include/linux/time.h -include/linux/timekeeper_internal.h -include/linux/timekeeping.h -include/linux/timer.h -include/linux/timerqueue.h -include/linux/timex.h -include/linux/topology.h -include/linux/trace_clock.h -include/linux/trace_events.h -include/linux/tracepoint-defs.h -include/linux/tracepoint.h -include/linux/trace_recursion.h -include/linux/trace_seq.h -include/linux/tsacct_kern.h -include/linux/typecheck.h -include/linux/types.h -include/linux/u64_stats_sync.h -include/linux/uaccess.h -include/linux/udp.h -include/linux/uidgid.h -include/linux/uio.h -include/linux/umh.h -include/linux/unaligned/packed_struct.h -include/linux/uprobes.h -include/linux/userfaultfd_k.h -include/linux/user_namespace.h -include/linux/uts.h -include/linux/utsname.h -include/linux/uuid.h -include/linux/vmalloc.h -include/linux/vm_event_item.h -include/linux/vmpressure.h -include/linux/vmstat.h -include/linux/vtime.h -include/linux/wait_bit.h -include/linux/wait.h -include/linux/win_minmax.h -include/linux/workqueue.h -include/linux/writeback.h -include/linux/ww_mutex.h -include/linux/xarray.h -include/net/addrconf.h -include/net/arp.h -include/net/checksum.h -include/net/devlink.h -include/net/dsa.h -include/net/dsfield.h -include/net/dst_cache.h -include/net/dst.h -include/net/dst_metadata.h -include/net/dst_ops.h -include/net/fib_notifier.h -include/net/fib_rules.h -include/net/flow_dissector.h -include/net/flow.h -include/net/flow_offload.h -include/net/genetlink.h -include/net/gen_stats.h -include/net/gre.h -include/net/gro_cells.h -include/net/icmp.h -include/net/if_inet6.h -include/net/inet_connection_sock.h -include/net/inet_ecn.h -include/net/inet_frag.h -include/net/inetpeer.h -include/net/inet_sock.h -include/net/inet_timewait_sock.h -include/net/ip6_checksum.h -include/net/ip6_fib.h -include/net/ip6_route.h -include/net/ip_fib.h -include/net/ip.h -include/net/ip_tunnels.h -include/net/ipv6.h -include/net/ipv6_stubs.h -include/net/l3mdev.h -include/net/lwtunnel.h -include/net/mpls.h -include/net/mptcp.h -include/net/ndisc.h -include/net/neighbour.h -include/net/netfilter/ipv4/nf_conntrack_ipv4.h -include/net/netfilter/ipv6/nf_conntrack_ipv6.h -include/net/netfilter/nf_conntrack.h -include/net/netfilter/nf_conntrack_tuple.h -include/net/netlink.h -include/net/net_namespace.h -include/net/netns/bpf.h -include/net/netns/can.h -include/net/netns/core.h -include/net/netns/generic.h -include/net/netns/hash.h -include/net/netns/ieee802154_6lowpan.h -include/net/netns/ipv4.h -include/net/netns/ipv6.h -include/net/netns/mib.h -include/net/netns/mpls.h -include/net/netns/netfilter.h -include/net/netns/nexthop.h -include/net/netns/nftables.h -include/net/netns/packet.h -include/net/netns/sctp.h -include/net/netns/smc.h -include/net/netns/unix.h -include/net/netns/xdp.h -include/net/netns/xfrm.h -include/net/netns/x_tables.h -include/net/netprio_cgroup.h -include/net/nexthop.h -include/net/page_pool.h -include/net/pptp.h -include/net/protocol.h -include/net/request_sock.h -include/net/route.h -include/net/rtnetlink.h -include/net/sch_generic.h -include/net/scm.h -include/net/snmp.h -include/net/sock.h -include/net/switchdev.h -include/net/tcp_states.h -include/net/timewait_sock.h -include/net/tipc.h -include/net/udp.h -include/net/udp_tunnel.h -include/net/xdp.h -include/net/xfrm.h -include/scsi/fc/fc_fcoe.h -include/trace/define_trace.h -include/trace/events/irq.h -include/trace/events/power.h -include/trace/events/sched.h -include/trace/events/skb.h -include/trace/events/timer.h -include/trace/events/workqueue.h -include/trace/syscall.h -include/uapi/asm-generic/bitsperlong.h -include/uapi/asm-generic/errno-base.h -include/uapi/asm-generic/errno.h -include/uapi/asm-generic/fcntl.h -include/uapi/asm-generic/hugetlb_encode.h -include/uapi/asm-generic/int-ll64.h -include/uapi/asm-generic/ioctl.h -include/uapi/asm-generic/ioctls.h -include/uapi/asm-generic/ipcbuf.h -include/uapi/asm-generic/kvm_para.h -include/uapi/asm-generic/param.h -include/uapi/asm-generic/poll.h -include/uapi/asm-generic/posix_types.h -include/uapi/asm-generic/resource.h -include/uapi/asm-generic/sembuf.h -include/uapi/asm-generic/shmbuf.h -include/uapi/asm-generic/siginfo.h -include/uapi/asm-generic/signal-defs.h -include/uapi/asm-generic/signal.h -include/uapi/asm-generic/socket.h -include/uapi/asm-generic/sockios.h -include/uapi/asm-generic/stat.h -include/uapi/asm-generic/swab.h -include/uapi/asm-generic/types.h -include/uapi/asm-generic/unistd.h -include/uapi/linux/aio_abi.h -include/uapi/linux/arm_sdei.h -include/uapi/linux/audit.h -include/uapi/linux/auxvec.h -include/uapi/linux/batadv_packet.h -include/uapi/linux/binfmts.h -include/uapi/linux/blkzoned.h -include/uapi/linux/bpf_common.h -include/uapi/linux/bpf.h -include/uapi/linux/bpf_perf_event.h -include/uapi/linux/bsg.h -include/uapi/linux/byteorder/little_endian.h -include/uapi/linux/capability.h -include/uapi/linux/cgroupstats.h -include/uapi/linux/const.h -include/uapi/linux/cryptouser.h -include/uapi/linux/dccp.h -include/uapi/linux/devlink.h -include/uapi/linux/dqblk_xfs.h -include/uapi/linux/elf-em.h -include/uapi/linux/elf.h -include/uapi/linux/errno.h -include/uapi/linux/errqueue.h -include/uapi/linux/ethtool.h -include/uapi/linux/eventpoll.h -include/uapi/linux/fcntl.h -include/uapi/linux/fib_rules.h -include/uapi/linux/filter.h -include/uapi/linux/fs.h -include/uapi/linux/genetlink.h -include/uapi/linux/gen_stats.h -include/uapi/linux/hdlc/ioctl.h -include/uapi/linux/icmp.h -include/uapi/linux/icmpv6.h -include/uapi/linux/if_addr.h -include/uapi/linux/if_arp.h -include/uapi/linux/if_bonding.h -include/uapi/linux/if_ether.h -include/uapi/linux/if.h -include/uapi/linux/if_link.h -include/uapi/linux/if_packet.h -include/uapi/linux/if_pppol2tp.h -include/uapi/linux/if_pppox.h -include/uapi/linux/if_tunnel.h -include/uapi/linux/if_vlan.h -include/uapi/linux/igmp.h -include/uapi/linux/in6.h -include/uapi/linux/in.h -include/uapi/linux/in_route.h -include/uapi/linux/ioctl.h -include/uapi/linux/ipc.h -include/uapi/linux/ip.h -include/uapi/linux/ipsec.h -include/uapi/linux/ipv6.h -include/uapi/linux/ipv6_route.h -include/uapi/linux/irqnr.h -include/uapi/linux/kcov.h -include/uapi/linux/kdev_t.h -include/uapi/linux/kernel.h -include/uapi/linux/kvm.h -include/uapi/linux/kvm_para.h -include/uapi/linux/l2tp.h -include/uapi/linux/libc-compat.h -include/uapi/linux/limits.h -include/uapi/linux/lwtunnel.h -include/uapi/linux/magic.h -include/uapi/linux/major.h -include/uapi/linux/mdio.h -include/uapi/linux/membarrier.h -include/uapi/linux/mempolicy.h -include/uapi/linux/mii.h -include/uapi/linux/mpls.h -include/uapi/linux/neighbour.h -include/uapi/linux/netdevice.h -include/uapi/linux/netfilter.h -include/uapi/linux/netfilter_ipv4.h -include/uapi/linux/netfilter/nf_conntrack_common.h -include/uapi/linux/netfilter/nf_conntrack_sctp.h -include/uapi/linux/netfilter/nf_conntrack_tcp.h -include/uapi/linux/netfilter/nf_conntrack_tuple_common.h -include/uapi/linux/netfilter/nf_tables.h -include/uapi/linux/netfilter/x_tables.h -include/uapi/linux/net.h -include/uapi/linux/netlink.h -include/uapi/linux/net_tstamp.h -include/uapi/linux/openat2.h -include/uapi/linux/param.h -include/uapi/linux/perf_event.h -include/uapi/linux/personality.h -include/uapi/linux/pfkeyv2.h -include/uapi/linux/pkt_cls.h -include/uapi/linux/pkt_sched.h -include/uapi/linux/poll.h -include/uapi/linux/posix_types.h -include/uapi/linux/ppp_defs.h -include/uapi/linux/prctl.h -include/uapi/linux/ptrace.h -include/uapi/linux/quota.h -include/uapi/linux/random.h -include/uapi/linux/reboot.h -include/uapi/linux/resource.h -include/uapi/linux/route.h -include/uapi/linux/rseq.h -include/uapi/linux/rtc.h -include/uapi/linux/rtnetlink.h -include/uapi/linux/sched.h -include/uapi/linux/sched/types.h -include/uapi/linux/sctp.h -include/uapi/linux/seccomp.h -include/uapi/linux/securebits.h -include/uapi/linux/sem.h -include/uapi/linux/shm.h -include/uapi/linux/signal.h -include/uapi/linux/snmp.h -include/uapi/linux/socket.h -include/uapi/linux/sockios.h -include/uapi/linux/stat.h -include/uapi/linux/stddef.h -include/uapi/linux/string.h -include/uapi/linux/swab.h -include/uapi/linux/sysctl.h -include/uapi/linux/sysinfo.h -include/uapi/linux/taskstats.h -include/uapi/linux/tcp.h -include/uapi/linux/time.h -include/uapi/linux/time_types.h -include/uapi/linux/timex.h -include/uapi/linux/types.h -include/uapi/linux/udp.h -include/uapi/linux/uio.h -include/uapi/linux/unistd.h -include/uapi/linux/utsname.h -include/uapi/linux/uuid.h -include/uapi/linux/wait.h -include/uapi/linux/wireguard.h -include/uapi/linux/xfrm.h -include/vdso/bits.h -include/vdso/clocksource.h -include/vdso/const.h -include/vdso/helpers.h -include/vdso/jiffies.h -include/vdso/ktime.h -include/vdso/limits.h -include/vdso/math64.h -include/vdso/processor.h -include/vdso/time32.h -include/vdso/time64.h -include/vdso/time.h -kernel/irq/debug.h -kernel/irq/internals.h -kernel/irq/settings.h -kernel/locking/lock_events.h -kernel/locking/lock_events_list.h -kernel/locking/mutex.h -kernel/sched/autogroup.h -kernel/sched/cpudeadline.h -kernel/sched/cpupri.h -kernel/sched/features.h -kernel/sched/sched.h -kernel/sched/stats.h -kernel/time/ntp_internal.h -kernel/time/tick-internal.h -kernel/time/tick-sched.h -kernel/time/timekeeping.h -kernel/time/timekeeping_internal.h -kernel/workqueue_internal.h -lib/kstrtox.h -mm/internal.h -mm/slab.h -net/core/datagram.h diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/dummies_arch.c b/repos/dde_linux/src/app/wireguard/spec/arm_64/dummies_arch.c index db645de314..054286f06a 100644 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/dummies_arch.c +++ b/repos/dde_linux/src/app/wireguard/spec/arm_64/dummies_arch.c @@ -29,11 +29,6 @@ bool cpu_have_feature(unsigned int num) u64 vabits_actual; -void rcu_read_unlock_strict(void) -{ - lx_emul_trace(__func__); -} - unsigned long __must_check __arch_copy_to_user(void __user *to, const void *from, unsigned long n) { lx_emul_trace_and_stop(__func__); @@ -82,32 +77,9 @@ void __init generic_sched_clock_init(void) lx_emul_trace(__func__); } -#include - -void do_set_cpus_allowed(struct task_struct * p,const struct cpumask * new_mask) -{ - lx_emul_trace(__func__); -} - - #include void __init of_core_init(void) { lx_emul_trace(__func__); } - -#include - -int stop_machine(cpu_stop_fn_t fn,void * data,const struct cpumask * cpus) -{ - return (*fn)(data); -} - - -#include - -void kvfree(const void * addr) -{ - lx_emul_trace_and_stop(__func__); -} diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c b/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c index 14a7b6862b..974b8083fd 100644 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c +++ b/repos/dde_linux/src/app/wireguard/spec/arm_64/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-05-04 + * \date 2022-07-21 */ #include @@ -141,6 +141,11 @@ void flush_dcache_page(struct page * page) } +#include + +bool force_irqthreads; + + #include void free_netdev(struct net_device * dev) @@ -498,25 +503,17 @@ int printk_deferred(const char * fmt,...) } -#include +#include -void queued_read_lock_slowpath(struct qrwlock * lock) +void rcu_irq_enter_irqson(void) { lx_emul_trace_and_stop(__func__); } -#include +#include -void queued_spin_lock_slowpath(struct qspinlock * lock,u32 val) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void queued_write_lock_slowpath(struct qrwlock * lock) +void rcu_irq_exit_irqson(void) { lx_emul_trace_and_stop(__func__); } diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/genode_c_api_arch.c b/repos/dde_linux/src/app/wireguard/spec/arm_64/genode_c_api_arch.c index 533e6f70e2..99d03081fb 100644 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/genode_c_api_arch.c +++ b/repos/dde_linux/src/app/wireguard/spec/arm_64/genode_c_api_arch.c @@ -1,13 +1,6 @@ #include -void genode_wg_arch_net_dev_init(struct net_device *net_dev, - int *pcpu_refcnt) -{ - net_dev->pcpu_refcnt = pcpu_refcnt; -} - - void finalize_system_capabilities(void); diff --git a/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list b/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list index ab9a46de1e..d7beff11fb 100644 --- a/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list +++ b/repos/dde_linux/src/app/wireguard/spec/arm_64/source.list @@ -7,7 +7,6 @@ arch/arm64/lib/strlen.S crypto/skcipher.c crypto/api.c lib/hweight.c -lib/cpumask.c crypto/algapi.c crypto/memneq.c crypto/scatterwalk.c @@ -33,13 +32,19 @@ kernel/sched/clock.c kernel/sched/completion.c kernel/sched/swait.c kernel/sched/wait.c +kernel/sched/wait_bit.c +kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-broadcast.c +kernel/time/tick-broadcast-hrtimer.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/dep.list b/repos/dde_linux/src/app/wireguard/spec/x86_64/dep.list deleted file mode 100644 index b7261639d7..0000000000 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/dep.list +++ /dev/null @@ -1,1041 +0,0 @@ -arch/x86/include/asm/alternative.h -arch/x86/include/asm/apicdef.h -arch/x86/include/asm/arch_hweight.h -arch/x86/include/asm/archrandom.h -arch/x86/include/asm/asm.h -arch/x86/include/asm/atomic64_64.h -arch/x86/include/asm/atomic.h -arch/x86/include/asm/barrier.h -arch/x86/include/asm/bitops.h -arch/x86/include/asm/bug.h -arch/x86/include/asm/cacheflush.h -arch/x86/include/asm/cache.h -arch/x86/include/asm/checksum_64.h -arch/x86/include/asm/checksum.h -arch/x86/include/asm/clocksource.h -arch/x86/include/asm/cmpxchg_64.h -arch/x86/include/asm/cmpxchg.h -arch/x86/include/asm/compat.h -arch/x86/include/asm/cpu_entry_area.h -arch/x86/include/asm/cpufeature.h -arch/x86/include/asm/cpufeatures.h -arch/x86/include/asm/cpumask.h -arch/x86/include/asm/current.h -arch/x86/include/asm/delay.h -arch/x86/include/asm/desc_defs.h -arch/x86/include/asm/desc.h -arch/x86/include/asm/device.h -arch/x86/include/asm/disabled-features.h -arch/x86/include/asm/div64.h -arch/x86/include/asm/elf.h -arch/x86/include/asm/emergency-restart.h -arch/x86/include/asm/exec.h -arch/x86/include/asm/extable.h -arch/x86/include/asm/fixmap.h -arch/x86/include/asm/fpu/api.h -arch/x86/include/asm/fpu/types.h -arch/x86/include/asm/fpu/xstate.h -arch/x86/include/asm/frame.h -arch/x86/include/asm/fsgsbase.h -arch/x86/include/asm/ftrace.h -arch/x86/include/asm/hardirq.h -arch/x86/include/asm/hw_breakpoint.h -arch/x86/include/asm/hw_irq.h -arch/x86/include/asm/ia32.h -arch/x86/include/asm/intel_ds.h -arch/x86/include/asm/intel-family.h -arch/x86/include/asm/invpcid.h -arch/x86/include/asm/io.h -arch/x86/include/asm/irqflags.h -arch/x86/include/asm/irq.h -arch/x86/include/asm/irq_vectors.h -arch/x86/include/asm/irq_work.h -arch/x86/include/asm/ist.h -arch/x86/include/asm/kaslr.h -arch/x86/include/asm/kdebug.h -arch/x86/include/asm/kprobes.h -arch/x86/include/asm/kvm_para.h -arch/x86/include/asm/linkage.h -arch/x86/include/asm/local.h -arch/x86/include/asm/math_emu.h -arch/x86/include/asm/mem_encrypt.h -arch/x86/include/asm/mmu_context.h -arch/x86/include/asm/mmu.h -arch/x86/include/asm/module.h -arch/x86/include/asm/msr.h -arch/x86/include/asm/msr-index.h -arch/x86/include/asm/nops.h -arch/x86/include/asm/nospec-branch.h -arch/x86/include/asm/orc_types.h -arch/x86/include/asm/page_64.h -arch/x86/include/asm/page_64_types.h -arch/x86/include/asm/page.h -arch/x86/include/asm/page_types.h -arch/x86/include/asm/paravirt.h -arch/x86/include/asm/percpu.h -arch/x86/include/asm/perf_event.h -arch/x86/include/asm/pgtable_64.h -arch/x86/include/asm/pgtable_64_types.h -arch/x86/include/asm/pgtable_areas.h -arch/x86/include/asm/pgtable.h -arch/x86/include/asm/pgtable-invert.h -arch/x86/include/asm/pgtable_types.h -arch/x86/include/asm/pkru.h -arch/x86/include/asm/posix_types.h -arch/x86/include/asm/preempt.h -arch/x86/include/asm/processor-flags.h -arch/x86/include/asm/processor.h -arch/x86/include/asm/proto.h -arch/x86/include/asm/pti.h -arch/x86/include/asm/ptrace.h -arch/x86/include/asm/required-features.h -arch/x86/include/asm/rmwcc.h -arch/x86/include/asm/sections.h -arch/x86/include/asm/segment.h -arch/x86/include/asm/set_memory.h -arch/x86/include/asm/shmparam.h -arch/x86/include/asm/sigframe.h -arch/x86/include/asm/signal.h -arch/x86/include/asm/simd.h -arch/x86/include/asm/smap.h -arch/x86/include/asm/smp.h -arch/x86/include/asm/sparsemem.h -arch/x86/include/asm/special_insns.h -arch/x86/include/asm/stacktrace.h -arch/x86/include/asm/static_call.h -arch/x86/include/asm/string_64.h -arch/x86/include/asm/string.h -arch/x86/include/asm/suspend_64.h -arch/x86/include/asm/suspend.h -arch/x86/include/asm/sync_core.h -arch/x86/include/asm/syscall_wrapper.h -arch/x86/include/asm/text-patching.h -arch/x86/include/asm/thread_info.h -arch/x86/include/asm/timex.h -arch/x86/include/asm/tlbbatch.h -arch/x86/include/asm/tlbflush.h -arch/x86/include/asm/tlb.h -arch/x86/include/asm/topology.h -arch/x86/include/asm/trace_clock.h -arch/x86/include/asm/tsc.h -arch/x86/include/asm/uaccess_64.h -arch/x86/include/asm/uaccess.h -arch/x86/include/asm/unistd.h -arch/x86/include/asm/unwind_hints.h -arch/x86/include/asm/user32.h -arch/x86/include/asm/user_64.h -arch/x86/include/asm/user.h -arch/x86/include/asm/vdso/clocksource.h -arch/x86/include/asm/vdso.h -arch/x86/include/asm/vdso/processor.h -arch/x86/include/asm/vmalloc.h -arch/x86/include/asm/vmxfeatures.h -arch/x86/include/asm/word-at-a-time.h -arch/x86/include/asm/x86_init.h -arch/x86/include/uapi/asm/auxvec.h -arch/x86/include/uapi/asm/bitsperlong.h -arch/x86/include/uapi/asm/bootparam.h -arch/x86/include/uapi/asm/byteorder.h -arch/x86/include/uapi/asm/hw_breakpoint.h -arch/x86/include/uapi/asm/ist.h -arch/x86/include/uapi/asm/kvm_para.h -arch/x86/include/uapi/asm/ldt.h -arch/x86/include/uapi/asm/msr.h -arch/x86/include/uapi/asm/perf_regs.h -arch/x86/include/uapi/asm/posix_types_64.h -arch/x86/include/uapi/asm/processor-flags.h -arch/x86/include/uapi/asm/ptrace-abi.h -arch/x86/include/uapi/asm/ptrace.h -arch/x86/include/uapi/asm/sembuf.h -arch/x86/include/uapi/asm/shmbuf.h -arch/x86/include/uapi/asm/sigcontext.h -arch/x86/include/uapi/asm/siginfo.h -arch/x86/include/uapi/asm/signal.h -arch/x86/include/uapi/asm/stat.h -arch/x86/include/uapi/asm/swab.h -arch/x86/include/uapi/asm/ucontext.h -arch/x86/include/uapi/asm/unistd.h -arch/x86/include/uapi/asm/vsyscall.h -crypto/internal.h -drivers/net/wireguard/allowedips.h -drivers/net/wireguard/cookie.h -drivers/net/wireguard/device.h -drivers/net/wireguard/messages.h -drivers/net/wireguard/netlink.h -drivers/net/wireguard/noise.h -drivers/net/wireguard/peer.h -drivers/net/wireguard/peerlookup.h -drivers/net/wireguard/queueing.h -drivers/net/wireguard/ratelimiter.h -drivers/net/wireguard/selftest/allowedips.c -drivers/net/wireguard/selftest/counter.c -drivers/net/wireguard/selftest/ratelimiter.c -drivers/net/wireguard/socket.h -drivers/net/wireguard/timers.h -drivers/net/wireguard/version.h -include/acpi/acbuffer.h -include/acpi/acconfig.h -include/acpi/acexcep.h -include/acpi/acnames.h -include/acpi/acoutput.h -include/acpi/acpi.h -include/acpi/acpi_numa.h -include/acpi/acpiosxf.h -include/acpi/acpixf.h -include/acpi/acrestyp.h -include/acpi/actbl1.h -include/acpi/actbl2.h -include/acpi/actbl3.h -include/acpi/actbl.h -include/acpi/actypes.h -include/acpi/platform/acenvex.h -include/acpi/platform/acenv.h -include/acpi/platform/acgccex.h -include/acpi/platform/acgcc.h -include/acpi/platform/aclinuxex.h -include/acpi/platform/aclinux.h -include/asm-generic/atomic-instrumented.h -include/asm-generic/atomic-long.h -include/asm-generic/barrier.h -include/asm-generic/bitops/const_hweight.h -include/asm-generic/bitops/ext2-atomic-setbit.h -include/asm-generic/bitops/find.h -include/asm-generic/bitops/instrumented-atomic.h -include/asm-generic/bitops/instrumented-lock.h -include/asm-generic/bitops/instrumented-non-atomic.h -include/asm-generic/bitops/le.h -include/asm-generic/bitops/sched.h -include/asm-generic/bitsperlong.h -include/asm-generic/bug.h -include/asm-generic/cacheflush.h -include/asm-generic/compat.h -include/asm-generic/delay.h -include/asm-generic/div64.h -include/asm-generic/early_ioremap.h -include/asm-generic/error-injection.h -include/asm-generic/export.h -include/asm-generic/fixmap.h -include/asm-generic/getorder.h -include/asm-generic/int-ll64.h -include/asm-generic/ioctl.h -include/asm-generic/io.h -include/asm-generic/iomap.h -include/asm-generic/irq_regs.h -include/asm-generic/kmap_size.h -include/asm-generic/kprobes.h -include/asm-generic/local64.h -include/asm-generic/memory_model.h -include/asm-generic/mmiowb.h -include/asm-generic/mmu_context.h -include/asm-generic/module.h -include/asm-generic/param.h -include/asm-generic/pci_iomap.h -include/asm-generic/percpu.h -include/asm-generic/pgtable-nop4d.h -include/asm-generic/pgtable_uffd.h -include/asm-generic/resource.h -include/asm-generic/rwonce.h -include/asm-generic/sections.h -include/asm-generic/set_memory.h -include/asm-generic/tlb.h -include/asm-generic/topology.h -include/asm-generic/unaligned.h -include/crypto/algapi.h -include/crypto/blake2s.h -include/crypto/chacha20poly1305.h -include/crypto/chacha.h -include/crypto/curve25519.h -include/crypto/hash.h -include/crypto/internal/blake2s.h -include/crypto/internal/chacha.h -include/crypto/internal/cipher.h -include/crypto/internal/hash.h -include/crypto/internal/kpp.h -include/crypto/internal/poly1305.h -include/crypto/internal/simd.h -include/crypto/internal/skcipher.h -include/crypto/kpp.h -include/crypto/poly1305.h -include/crypto/scatterwalk.h -include/crypto/sha1.h -include/crypto/skcipher.h -include/linux/acpi.h -include/linux/alarmtimer.h -include/linux/align.h -include/linux/apm_bios.h -include/linux/arch_topology.h -include/linux/assoc_array.h -include/linux/atomic-arch-fallback.h -include/linux/atomic.h -include/linux/audit.h -include/linux/auxvec.h -include/linux/backing-dev-defs.h -include/linux/binfmts.h -include/linux/bio.h -include/linux/bitmap.h -include/linux/bitops.h -include/linux/bitrev.h -include/linux/bits.h -include/linux/bit_spinlock.h -include/linux/blk-cgroup.h -include/linux/blkdev.h -include/linux/blk_types.h -include/linux/bottom_half.h -include/linux/bpf-cgroup.h -include/linux/bpf.h -include/linux/bpf-netns.h -include/linux/bpfptr.h -include/linux/bsg.h -include/linux/bug.h -include/linux/build_bug.h -include/linux/buildid.h -include/linux/bvec.h -include/linux/byteorder/generic.h -include/linux/byteorder/little_endian.h -include/linux/cache.h -include/linux/capability.h -include/linux/cc_platform.h -include/linux/cdev.h -include/linux/cfi.h -include/linux/cgroup-defs.h -include/linux/cgroup.h -include/linux/clk.h -include/linux/clk-provider.h -include/linux/clockchips.h -include/linux/clocksource.h -include/linux/clocksource_ids.h -include/linux/compat.h -include/linux/compiler_attributes.h -include/linux/compiler-gcc.h -include/linux/compiler.h -include/linux/compiler_types.h -include/linux/compiler-version.h -include/linux/completion.h -include/linux/const.h -include/linux/context_tracking.h -include/linux/context_tracking_state.h -include/linux/cpufreq.h -include/linux/cpu.h -include/linux/cpuhotplug.h -include/linux/cpuidle.h -include/linux/cpumask.h -include/linux/cpuset.h -include/linux/crc32.h -include/linux/crc-ccitt.h -include/linux/cred.h -include/linux/crypto.h -include/linux/ctype.h -include/linux/dax.h -include/linux/dcache.h -include/linux/dccp.h -include/linux/debugfs.h -include/linux/debug_locks.h -include/linux/debugobjects.h -include/linux/delayacct.h -include/linux/delayed_call.h -include/linux/delay.h -include/linux/device/bus.h -include/linux/device/class.h -include/linux/device/driver.h -include/linux/device.h -include/linux/dev_printk.h -include/linux/dma-direction.h -include/linux/dma-mapping.h -include/linux/dqblk_qtree.h -include/linux/dqblk_v1.h -include/linux/dqblk_v2.h -include/linux/dynamic_queue_limits.h -include/linux/edd.h -include/linux/elevator.h -include/linux/elf.h -include/linux/energy_model.h -include/linux/err.h -include/linux/errname.h -include/linux/errno.h -include/linux/error-injection.h -include/linux/errqueue.h -include/linux/errseq.h -include/linux/etherdevice.h -include/linux/ethtool.h -include/linux/eventfd.h -include/linux/export.h -include/linux/fault-inject.h -include/linux/fault-inject-usercopy.h -include/linux/fcntl.h -include/linux/file.h -include/linux/filter.h -include/linux/fips.h -include/linux/firmware.h -include/linux/flex_proportions.h -include/linux/freelist.h -include/linux/freezer.h -include/linux/fs.h -include/linux/fs_types.h -include/linux/ftrace.h -include/linux/ftrace_irq.h -include/linux/fwnode.h -include/linux/genetlink.h -include/linux/genhd.h -include/linux/gfp.h -include/linux/gpio/consumer.h -include/linux/hardirq.h -include/linux/hash.h -include/linux/hashtable.h -include/linux/highmem.h -include/linux/highmem-internal.h -include/linux/highuid.h -include/linux/hrtimer_defs.h -include/linux/hrtimer.h -include/linux/huge_mm.h -include/linux/hugetlb.h -include/linux/hugetlb_inline.h -include/linux/icmp.h -include/linux/icmpv6.h -include/linux/idr.h -include/linux/if_arp.h -include/linux/if_ether.h -include/linux/if_link.h -include/linux/if_pppol2tp.h -include/linux/if_pppox.h -include/linux/if_tunnel.h -include/linux/if_vlan.h -include/linux/igmp.h -include/linux/in6.h -include/linux/indirect_call_wrapper.h -include/linux/inetdevice.h -include/linux/inet.h -include/linux/in.h -include/linux/init.h -include/linux/init_task.h -include/linux/instrumentation.h -include/linux/instrumented.h -include/linux/interrupt.h -include/linux/interval_tree.h -include/linux/iocontext.h -include/linux/io.h -include/linux/iopoll.h -include/linux/ioport.h -include/linux/ioprio.h -include/linux/ipc.h -include/linux/ip.h -include/linux/ipv6.h -include/linux/ipv6_route.h -include/linux/irqchip.h -include/linux/irqdesc.h -include/linux/irqdomain.h -include/linux/irqflags.h -include/linux/irq.h -include/linux/irqhandler.h -include/linux/irqnr.h -include/linux/irqreturn.h -include/linux/irq_work.h -include/linux/jhash.h -include/linux/jiffies.h -include/linux/jump_label.h -include/linux/jump_label_ratelimit.h -include/linux/kallsyms.h -include/linux/kasan-checks.h -include/linux/kasan.h -include/linux/kbuild.h -include/linux/kconfig.h -include/linux/kcov.h -include/linux/kcsan-checks.h -include/linux/kcsan.h -include/linux/kdebug.h -include/linux/kdev_t.h -include/linux/kernel.h -include/linux/kernel_read_file.h -include/linux/kernel_stat.h -include/linux/kernfs.h -include/linux/kern_levels.h -include/linux/key.h -include/linux/klist.h -include/linux/kmemleak.h -include/linux/kmod.h -include/linux/kobject.h -include/linux/kobject_ns.h -include/linux/kprobes.h -include/linux/kref.h -include/linux/kstrtox.h -include/linux/kthread.h -include/linux/ktime.h -include/linux/kvm_para.h -include/linux/l2tp.h -include/linux/latencytop.h -include/linux/limits.h -include/linux/linkage.h -include/linux/linkmode.h -include/linux/list_bl.h -include/linux/list.h -include/linux/list_lru.h -include/linux/list_nulls.h -include/linux/livepatch.h -include/linux/llist.h -include/linux/local_lock.h -include/linux/local_lock_internal.h -include/linux/lockdep.h -include/linux/lockdep_types.h -include/linux/lockref.h -include/linux/log2.h -include/linux/logic_pio.h -include/linux/math64.h -include/linux/math.h -include/linux/mdio.h -include/linux/memcontrol.h -include/linux/mem_encrypt.h -include/linux/memory_hotplug.h -include/linux/mempolicy.h -include/linux/mempool.h -include/linux/memremap.h -include/linux/migrate.h -include/linux/migrate_mode.h -include/linux/mii.h -include/linux/mii_timestamper.h -include/linux/minmax.h -include/linux/mmap_lock.h -include/linux/mmdebug.h -include/linux/mm.h -include/linux/mm_types.h -include/linux/mm_types_task.h -include/linux/mmu_context.h -include/linux/mmu_notifier.h -include/linux/mmzone.h -include/linux/mod_devicetable.h -include/linux/module.h -include/linux/moduleparam.h -include/linux/mount.h -include/linux/mpls.h -include/linux/mutex.h -include/linux/netdev_features.h -include/linux/netdevice.h -include/linux/netfilter_defs.h -include/linux/netfilter.h -include/linux/netfilter_ipv4.h -include/linux/netfilter/nf_conntrack_common.h -include/linux/netfilter/nf_conntrack_dccp.h -include/linux/netfilter/nf_conntrack_proto_gre.h -include/linux/netfilter/nf_conntrack_sctp.h -include/linux/netfilter/nf_conntrack_tcp.h -include/linux/netfilter/x_tables.h -include/linux/net.h -include/linux/netlink.h -include/linux/nfs_fs_i.h -include/linux/nmi.h -include/linux/node.h -include/linux/nodemask.h -include/linux/notifier.h -include/linux/ns_common.h -include/linux/nsproxy.h -include/linux/numa.h -include/linux/nvmem-provider.h -include/linux/objtool.h -include/linux/of_clk.h -include/linux/of_fdt.h -include/linux/of.h -include/linux/once.h -include/linux/once_lite.h -include/linux/osq_lock.h -include/linux/overflow.h -include/linux/pageblock-flags.h -include/linux/page_counter.h -include/linux/page_ext.h -include/linux/page-flags.h -include/linux/page-flags-layout.h -include/linux/pagemap.h -include/linux/page_ref.h -include/linux/panic.h -include/linux/path.h -include/linux/percpu_counter.h -include/linux/percpu-defs.h -include/linux/percpu.h -include/linux/percpu-refcount.h -include/linux/percpu-rwsem.h -include/linux/perf_event.h -include/linux/perf_regs.h -include/linux/personality.h -include/linux/pfn.h -include/linux/pgtable.h -include/linux/phy.h -include/linux/phylink.h -include/linux/pid.h -include/linux/pid_namespace.h -include/linux/pipe_fs_i.h -include/linux/pkeys.h -include/linux/platform_data/dsa.h -include/linux/platform_device.h -include/linux/plist.h -include/linux/pm.h -include/linux/pm_qos.h -include/linux/pm_runtime.h -include/linux/pm_wakeup.h -include/linux/poison.h -include/linux/poll.h -include/linux/posix-timers.h -include/linux/ppp_channel.h -include/linux/ppp_defs.h -include/linux/prandom.h -include/linux/preempt.h -include/linux/prefetch.h -include/linux/printk.h -include/linux/proc_fs.h -include/linux/profile.h -include/linux/projid.h -include/linux/property.h -include/linux/psi.h -include/linux/psi_types.h -include/linux/ptp_classify.h -include/linux/ptrace.h -include/linux/ptr_ring.h -include/linux/pvclock_gtod.h -include/linux/quota.h -include/linux/radix-tree.h -include/linux/random.h -include/linux/range.h -include/linux/ratelimit.h -include/linux/ratelimit_types.h -include/linux/rbtree.h -include/linux/rbtree_latch.h -include/linux/rculist_bl.h -include/linux/rculist.h -include/linux/rculist_nulls.h -include/linux/rcupdate.h -include/linux/rcupdate_wait.h -include/linux/rcu_segcblist.h -include/linux/rcu_sync.h -include/linux/rcutiny.h -include/linux/rcuwait.h -include/linux/reboot.h -include/linux/refcount.h -include/linux/resource_ext.h -include/linux/resource.h -include/linux/restart_block.h -include/linux/rhashtable-types.h -include/linux/ring_buffer.h -include/linux/rtc.h -include/linux/rtnetlink.h -include/linux/rwlock.h -include/linux/rwlock_types.h -include/linux/rwsem.h -include/linux/sbitmap.h -include/linux/scatterlist.h -include/linux/sched/autogroup.h -include/linux/sched/clock.h -include/linux/sched_clock.h -include/linux/sched/coredump.h -include/linux/sched/cpufreq.h -include/linux/sched/cputime.h -include/linux/sched/deadline.h -include/linux/sched/debug.h -include/linux/sched.h -include/linux/sched/hotplug.h -include/linux/sched/idle.h -include/linux/sched/init.h -include/linux/sched/isolation.h -include/linux/sched/jobctl.h -include/linux/sched/loadavg.h -include/linux/sched/mm.h -include/linux/sched/nohz.h -include/linux/sched/numa_balancing.h -include/linux/sched/prio.h -include/linux/sched/rt.h -include/linux/sched/signal.h -include/linux/sched/smt.h -include/linux/sched/stat.h -include/linux/sched/sysctl.h -include/linux/sched/task.h -include/linux/sched/task_stack.h -include/linux/sched/topology.h -include/linux/sched/types.h -include/linux/sched/user.h -include/linux/sched/wake_q.h -include/linux/sched/xacct.h -include/linux/screen_info.h -include/linux/sctp.h -include/linux/seccomp.h -include/linux/securebits.h -include/linux/security.h -include/linux/semaphore.h -include/linux/sem.h -include/linux/seq_buf.h -include/linux/seq_file.h -include/linux/seq_file_net.h -include/linux/seqlock.h -include/linux/set_memory.h -include/linux/shm.h -include/linux/shrinker.h -include/linux/signal.h -include/linux/signal_types.h -include/linux/siphash.h -include/linux/sizes.h -include/linux/skbuff.h -include/linux/slab.h -include/linux/smp.h -include/linux/smp_types.h -include/linux/socket.h -include/linux/sockptr.h -include/linux/spinlock_api_up.h -include/linux/spinlock.h -include/linux/spinlock_types.h -include/linux/spinlock_types_up.h -include/linux/spinlock_up.h -include/linux/splice.h -include/linux/srcu.h -include/linux/srcutiny.h -include/linux/stackdepot.h -include/linux/stacktrace.h -include/linux/stat.h -include/linux/static_call.h -include/linux/static_call_types.h -include/linux/static_key.h -include/linux/stddef.h -include/linux/stop_machine.h -include/linux/string.h -include/linux/stringhash.h -include/linux/string_helpers.h -include/linux/stringify.h -include/linux/suspend.h -include/linux/swab.h -include/linux/swait.h -include/linux/swap.h -include/linux/sync_core.h -include/linux/syscalls.h -include/linux/syscall_user_dispatch.h -include/linux/syscore_ops.h -include/linux/sysctl.h -include/linux/sysfs.h -include/linux/task_io_accounting.h -include/linux/task_work.h -include/linux/tcp.h -include/linux/textsearch.h -include/linux/thread_info.h -include/linux/threads.h -include/linux/tick.h -include/linux/time32.h -include/linux/time64.h -include/linux/timecounter.h -include/linux/time.h -include/linux/timekeeper_internal.h -include/linux/timekeeping.h -include/linux/timer.h -include/linux/timerqueue.h -include/linux/timex.h -include/linux/topology.h -include/linux/trace_clock.h -include/linux/trace_events.h -include/linux/tracepoint-defs.h -include/linux/tracepoint.h -include/linux/trace_recursion.h -include/linux/trace_seq.h -include/linux/tsacct_kern.h -include/linux/typecheck.h -include/linux/types.h -include/linux/u64_stats_sync.h -include/linux/uaccess.h -include/linux/udp.h -include/linux/uidgid.h -include/linux/uio.h -include/linux/umh.h -include/linux/unaligned/packed_struct.h -include/linux/uprobes.h -include/linux/userfaultfd_k.h -include/linux/user_namespace.h -include/linux/utsname.h -include/linux/uuid.h -include/linux/vmalloc.h -include/linux/vm_event_item.h -include/linux/vmpressure.h -include/linux/vmstat.h -include/linux/vtime.h -include/linux/wait_bit.h -include/linux/wait.h -include/linux/win_minmax.h -include/linux/workqueue.h -include/linux/writeback.h -include/linux/ww_mutex.h -include/linux/xarray.h -include/net/addrconf.h -include/net/arp.h -include/net/checksum.h -include/net/devlink.h -include/net/dsa.h -include/net/dsfield.h -include/net/dst_cache.h -include/net/dst.h -include/net/dst_metadata.h -include/net/dst_ops.h -include/net/fib_notifier.h -include/net/fib_rules.h -include/net/flow_dissector.h -include/net/flow.h -include/net/flow_offload.h -include/net/genetlink.h -include/net/gen_stats.h -include/net/gre.h -include/net/gro_cells.h -include/net/icmp.h -include/net/if_inet6.h -include/net/inet_connection_sock.h -include/net/inet_ecn.h -include/net/inet_frag.h -include/net/inetpeer.h -include/net/inet_sock.h -include/net/inet_timewait_sock.h -include/net/ip6_checksum.h -include/net/ip6_fib.h -include/net/ip6_route.h -include/net/ip_fib.h -include/net/ip.h -include/net/ip_tunnels.h -include/net/ipv6.h -include/net/ipv6_stubs.h -include/net/l3mdev.h -include/net/lwtunnel.h -include/net/mpls.h -include/net/mptcp.h -include/net/ndisc.h -include/net/neighbour.h -include/net/netfilter/ipv4/nf_conntrack_ipv4.h -include/net/netfilter/ipv6/nf_conntrack_ipv6.h -include/net/netfilter/nf_conntrack.h -include/net/netfilter/nf_conntrack_tuple.h -include/net/netlink.h -include/net/net_namespace.h -include/net/netns/bpf.h -include/net/netns/can.h -include/net/netns/core.h -include/net/netns/generic.h -include/net/netns/hash.h -include/net/netns/ieee802154_6lowpan.h -include/net/netns/ipv4.h -include/net/netns/ipv6.h -include/net/netns/mib.h -include/net/netns/mpls.h -include/net/netns/netfilter.h -include/net/netns/nexthop.h -include/net/netns/nftables.h -include/net/netns/packet.h -include/net/netns/sctp.h -include/net/netns/smc.h -include/net/netns/unix.h -include/net/netns/xdp.h -include/net/netns/xfrm.h -include/net/netns/x_tables.h -include/net/netprio_cgroup.h -include/net/nexthop.h -include/net/page_pool.h -include/net/pptp.h -include/net/protocol.h -include/net/request_sock.h -include/net/route.h -include/net/rtnetlink.h -include/net/sch_generic.h -include/net/scm.h -include/net/snmp.h -include/net/sock.h -include/net/switchdev.h -include/net/tcp_states.h -include/net/timewait_sock.h -include/net/tipc.h -include/net/udp.h -include/net/udp_tunnel.h -include/net/xdp.h -include/net/xfrm.h -include/scsi/fc/fc_fcoe.h -include/trace/define_trace.h -include/trace/events/irq.h -include/trace/events/power.h -include/trace/events/sched.h -include/trace/events/skb.h -include/trace/events/timer.h -include/trace/events/tlb.h -include/trace/events/workqueue.h -include/trace/syscall.h -include/uapi/asm-generic/bitsperlong.h -include/uapi/asm-generic/bpf_perf_event.h -include/uapi/asm-generic/errno-base.h -include/uapi/asm-generic/errno.h -include/uapi/asm-generic/fcntl.h -include/uapi/asm-generic/hugetlb_encode.h -include/uapi/asm-generic/int-ll64.h -include/uapi/asm-generic/ioctl.h -include/uapi/asm-generic/ipcbuf.h -include/uapi/asm-generic/param.h -include/uapi/asm-generic/poll.h -include/uapi/asm-generic/posix_types.h -include/uapi/asm-generic/resource.h -include/uapi/asm-generic/shmbuf.h -include/uapi/asm-generic/siginfo.h -include/uapi/asm-generic/signal-defs.h -include/uapi/asm-generic/socket.h -include/uapi/asm-generic/sockios.h -include/uapi/asm-generic/types.h -include/uapi/asm-generic/ucontext.h -include/uapi/linux/aio_abi.h -include/uapi/linux/apm_bios.h -include/uapi/linux/audit.h -include/uapi/linux/auxvec.h -include/uapi/linux/batadv_packet.h -include/uapi/linux/binfmts.h -include/uapi/linux/blkzoned.h -include/uapi/linux/bpf_common.h -include/uapi/linux/bpf.h -include/uapi/linux/bpf_perf_event.h -include/uapi/linux/bsg.h -include/uapi/linux/byteorder/little_endian.h -include/uapi/linux/capability.h -include/uapi/linux/cgroupstats.h -include/uapi/linux/const.h -include/uapi/linux/dccp.h -include/uapi/linux/devlink.h -include/uapi/linux/dqblk_xfs.h -include/uapi/linux/edd.h -include/uapi/linux/elf-em.h -include/uapi/linux/elf.h -include/uapi/linux/errno.h -include/uapi/linux/errqueue.h -include/uapi/linux/ethtool.h -include/uapi/linux/eventpoll.h -include/uapi/linux/fcntl.h -include/uapi/linux/fib_rules.h -include/uapi/linux/filter.h -include/uapi/linux/fs.h -include/uapi/linux/genetlink.h -include/uapi/linux/gen_stats.h -include/uapi/linux/hdlc/ioctl.h -include/uapi/linux/icmp.h -include/uapi/linux/icmpv6.h -include/uapi/linux/if_addr.h -include/uapi/linux/if_arp.h -include/uapi/linux/if_bonding.h -include/uapi/linux/if_ether.h -include/uapi/linux/if.h -include/uapi/linux/if_link.h -include/uapi/linux/if_packet.h -include/uapi/linux/if_pppol2tp.h -include/uapi/linux/if_pppox.h -include/uapi/linux/if_tunnel.h -include/uapi/linux/if_vlan.h -include/uapi/linux/igmp.h -include/uapi/linux/in6.h -include/uapi/linux/in.h -include/uapi/linux/in_route.h -include/uapi/linux/ioctl.h -include/uapi/linux/ipc.h -include/uapi/linux/ip.h -include/uapi/linux/ipsec.h -include/uapi/linux/ipv6.h -include/uapi/linux/ipv6_route.h -include/uapi/linux/irqnr.h -include/uapi/linux/kcov.h -include/uapi/linux/kdev_t.h -include/uapi/linux/kernel.h -include/uapi/linux/kvm_para.h -include/uapi/linux/l2tp.h -include/uapi/linux/libc-compat.h -include/uapi/linux/limits.h -include/uapi/linux/lwtunnel.h -include/uapi/linux/magic.h -include/uapi/linux/major.h -include/uapi/linux/mdio.h -include/uapi/linux/membarrier.h -include/uapi/linux/mempolicy.h -include/uapi/linux/mii.h -include/uapi/linux/mpls.h -include/uapi/linux/neighbour.h -include/uapi/linux/netdevice.h -include/uapi/linux/netfilter.h -include/uapi/linux/netfilter_ipv4.h -include/uapi/linux/netfilter/nf_conntrack_common.h -include/uapi/linux/netfilter/nf_conntrack_sctp.h -include/uapi/linux/netfilter/nf_conntrack_tcp.h -include/uapi/linux/netfilter/nf_conntrack_tuple_common.h -include/uapi/linux/netfilter/nf_tables.h -include/uapi/linux/netfilter/x_tables.h -include/uapi/linux/net.h -include/uapi/linux/netlink.h -include/uapi/linux/net_tstamp.h -include/uapi/linux/openat2.h -include/uapi/linux/param.h -include/uapi/linux/perf_event.h -include/uapi/linux/personality.h -include/uapi/linux/pfkeyv2.h -include/uapi/linux/pkt_cls.h -include/uapi/linux/pkt_sched.h -include/uapi/linux/poll.h -include/uapi/linux/posix_types.h -include/uapi/linux/ppp_defs.h -include/uapi/linux/ptrace.h -include/uapi/linux/quota.h -include/uapi/linux/random.h -include/uapi/linux/reboot.h -include/uapi/linux/resource.h -include/uapi/linux/route.h -include/uapi/linux/rseq.h -include/uapi/linux/rtc.h -include/uapi/linux/rtnetlink.h -include/uapi/linux/sched.h -include/uapi/linux/sched/types.h -include/uapi/linux/screen_info.h -include/uapi/linux/sctp.h -include/uapi/linux/seccomp.h -include/uapi/linux/securebits.h -include/uapi/linux/sem.h -include/uapi/linux/shm.h -include/uapi/linux/signal.h -include/uapi/linux/snmp.h -include/uapi/linux/socket.h -include/uapi/linux/sockios.h -include/uapi/linux/stat.h -include/uapi/linux/stddef.h -include/uapi/linux/string.h -include/uapi/linux/swab.h -include/uapi/linux/sysctl.h -include/uapi/linux/sysinfo.h -include/uapi/linux/taskstats.h -include/uapi/linux/tcp.h -include/uapi/linux/time.h -include/uapi/linux/time_types.h -include/uapi/linux/timex.h -include/uapi/linux/types.h -include/uapi/linux/udp.h -include/uapi/linux/uio.h -include/uapi/linux/unistd.h -include/uapi/linux/utsname.h -include/uapi/linux/uuid.h -include/uapi/linux/wait.h -include/uapi/linux/wireguard.h -include/uapi/linux/xfrm.h -include/uapi/video/edid.h -include/vdso/bits.h -include/vdso/clocksource.h -include/vdso/const.h -include/vdso/jiffies.h -include/vdso/ktime.h -include/vdso/limits.h -include/vdso/math64.h -include/vdso/time32.h -include/vdso/time64.h -include/vdso/time.h -include/video/edid.h -kernel/irq/debug.h -kernel/irq/internals.h -kernel/irq/settings.h -kernel/locking/lock_events.h -kernel/locking/lock_events_list.h -kernel/locking/mutex.h -kernel/sched/autogroup.h -kernel/sched/cpudeadline.h -kernel/sched/cpupri.h -kernel/sched/features.h -kernel/sched/sched.h -kernel/sched/stats.h -kernel/time/ntp_internal.h -kernel/time/tick-internal.h -kernel/time/tick-sched.h -kernel/time/timekeeping.h -kernel/time/timekeeping_internal.h -kernel/workqueue_internal.h -lib/kstrtox.h -mm/internal.h -mm/slab.h -net/core/datagram.h diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/dummies_arch.c b/repos/dde_linux/src/app/wireguard/spec/x86_64/dummies_arch.c index 701702b0b8..1ca0ae2628 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/dummies_arch.c +++ b/repos/dde_linux/src/app/wireguard/spec/x86_64/dummies_arch.c @@ -24,3 +24,4 @@ void clocksource_arch_init(struct clocksource * cs) struct cpuinfo_x86 boot_cpu_data __read_mostly; + diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c b/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c index 4b3ad3dc9a..8b9969ecce 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c +++ b/repos/dde_linux/src/app/wireguard/spec/x86_64/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-01-25 + * \date 2022-07-19 */ #include @@ -39,22 +39,6 @@ int __ipv6_addr_type(const struct in6_addr * addr) } -#include - -struct irq_domain * __irq_domain_add(struct fwnode_handle * fwnode,int size,irq_hw_number_t hwirq_max,int direct_max,const struct irq_domain_ops * ops,void * host_data) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -struct irq_desc * __irq_resolve_mapping(struct irq_domain * domain,irq_hw_number_t hwirq,unsigned int * irq) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void __put_page(struct page * page) @@ -118,21 +102,6 @@ void ack_bad_irq(unsigned int irq) } -extern int cpu_has_xfeatures(u64 xfeatures_needed,const char ** feature_name); -int cpu_has_xfeatures(u64 xfeatures_needed,const char ** feature_name) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -int crypto_register_skciphers(struct skcipher_alg * algs,int count) -{ - lx_emul_trace_and_stop(__func__); -} - - #include struct net_device * dev_get_by_index(struct net * net,int ifindex) @@ -157,6 +126,11 @@ asmlinkage __visible void dump_stack(void) } +#include + +bool force_irqthreads; + + #include void free_netdev(struct net_device * dev) @@ -307,9 +281,9 @@ int ipv6_chk_addr(struct net * net,const struct in6_addr * addr,const struct net } -#include +#include -void irq_domain_free_irqs_common(struct irq_domain * domain,unsigned int virq,unsigned int nr_irqs) +int irq_can_set_affinity(unsigned int irq) { lx_emul_trace_and_stop(__func__); } @@ -322,9 +296,9 @@ bool irq_fpu_usable(void) } -#include +#include -void irq_set_default_host(struct irq_domain * domain) +int irq_set_affinity(unsigned int irq,const struct cpumask * cpumask) { lx_emul_trace_and_stop(__func__); } @@ -381,17 +355,20 @@ int kstrtoll(const char * s,unsigned int base,long long * res) } -#include +#include -void kvfree(const void * addr) +void migrate_disable(void) { lx_emul_trace_and_stop(__func__); } -#include +#include -unsigned long lpj_fine; +void migrate_enable(void) +{ + lx_emul_trace_and_stop(__func__); +} #include @@ -410,6 +387,14 @@ void page_frag_free(void * addr) } +#include + +void percpu_counter_add_batch(struct percpu_counter * fbc,s64 amount,s32 batch) +{ + lx_emul_trace_and_stop(__func__); +} + + #include int printk_deferred(const char * fmt,...) @@ -466,17 +451,9 @@ void skb_set_owner_w(struct sk_buff * skb,struct sock * sk) } -#include +#include -int skcipher_walk_done(struct skcipher_walk * walk,int err) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -int skcipher_walk_virt(struct skcipher_walk * walk,struct skcipher_request * req,bool atomic) +int smp_call_function_single(int cpu,smp_call_func_t func,void * info,int wait) { lx_emul_trace_and_stop(__func__); } @@ -570,3 +547,4 @@ void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) { lx_emul_trace_and_stop(__func__); } + diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/genode_c_api_arch.c b/repos/dde_linux/src/app/wireguard/spec/x86_64/genode_c_api_arch.c index 355baaa7f6..d70c07afb7 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/genode_c_api_arch.c +++ b/repos/dde_linux/src/app/wireguard/spec/x86_64/genode_c_api_arch.c @@ -1,11 +1,6 @@ #include -void genode_wg_arch_net_dev_init(struct net_device *net_dev, - int *pcpu_refcnt) -{ -} - void genode_wg_arch_lx_user_init(void) { } diff --git a/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list b/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list index 4c769c642d..e04f0c5516 100644 --- a/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list +++ b/repos/dde_linux/src/app/wireguard/spec/x86_64/source.list @@ -27,12 +27,16 @@ drivers/net/wireguard/socket.c drivers/net/wireguard/timers.c kernel/kthread.c kernel/locking/mutex.c +kernel/locking/osq_lock.c kernel/locking/rwsem.c kernel/notifier.c kernel/sched/clock.c kernel/sched/completion.c kernel/sched/swait.c kernel/sched/wait.c +kernel/sched/wait_bit.c +kernel/smpboot.c +kernel/softirq.c kernel/time/clockevents.c kernel/time/clocksource.c kernel/time/hrtimer.c @@ -40,6 +44,8 @@ kernel/time/jiffies.c kernel/time/ntp.c kernel/time/tick-broadcast.c kernel/time/tick-common.c +kernel/time/tick-oneshot.c +kernel/time/tick-sched.c kernel/time/time.c kernel/time/timeconv.c kernel/time/timecounter.c diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq.c b/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq.c new file mode 100644 index 0000000000..b9b28fb934 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/irq.c @@ -0,0 +1,18 @@ +/* + * \brief Replaces arch/x86/kernel/irq.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); +EXPORT_PER_CPU_SYMBOL(irq_stat); diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/setup_percpu.c b/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/setup_percpu.c new file mode 100644 index 0000000000..1fd7c5c81b --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/arch/x86/kernel/setup_percpu.c @@ -0,0 +1,25 @@ +/* + * \brief Replaces arch/x86/kernel/setup_percpu.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +int cpu_number = 0; + + +DEFINE_PER_CPU_READ_MOSTLY(unsigned long, this_cpu_off) = 0; +EXPORT_PER_CPU_SYMBOL(this_cpu_off); + + +unsigned long __per_cpu_offset[NR_CPUS] = { 0UL }; + diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/cpu.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/cpu.c index ebf3d4ad72..451ce8fecf 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/cpu.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/cpu.c @@ -16,6 +16,7 @@ #include #include +atomic_t __num_online_cpus = ATOMIC_INIT(1); struct cpumask __cpu_online_mask = { .bits[0] = 1 }; struct cpumask __cpu_possible_mask = { .bits[0] = 1 }; struct cpumask __cpu_present_mask = { .bits[0] = 1 }; diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/irq_work.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/irq_work.c new file mode 100644 index 0000000000..ee63a59352 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/irq_work.c @@ -0,0 +1,20 @@ +/* + * \brief Replaces kernel/irq_work.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include + + +bool irq_work_needs_cpu(void) +{ + return false; +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c index 34728a0dc2..a01492894f 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/rcu/tree.c @@ -11,15 +11,23 @@ * version 2. */ +#include #include #include /* KTIME_MAX */ +#include +#include +#include -extern void __rcu_read_lock(void); +#ifdef CONFIG_PREEMPT_RCU void __rcu_read_lock(void) { } -extern void __rcu_read_unlock(void); void __rcu_read_unlock(void) { } +#endif + +extern void rcu_read_unlock_strict(void); +void rcu_read_unlock_strict(void) { } + int rcu_needs_cpu(u64 basemono, u64 *nextevt) { @@ -27,3 +35,29 @@ int rcu_needs_cpu(u64 basemono, u64 *nextevt) *nextevt = KTIME_MAX; return 0; } + + +noinstr void rcu_irq_enter(void) { } + + +void noinstr rcu_irq_exit(void) { } + + +void rcu_softirq_qs(void) { } + + +void call_rcu(struct rcu_head * head, + rcu_callback_t func) +{ + /* + * In case func is a small offset kvfree should be + * called directly, see 'rcu_reclaim_tiny'. + */ + enum { KVFREE_RCU_OFFSET = 4096, }; + if (func < (rcu_callback_t)KVFREE_RCU_OFFSET) { + kvfree((void*)head - (unsigned long)func); + return; + } + + func(head); +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c index 5f81b1feba..8ea839d7d3 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/core.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -44,6 +45,10 @@ typedef unsigned int wait_task_inactive_match_state_t; #endif +DEFINE_PER_CPU(struct kernel_stat, kstat); +EXPORT_PER_CPU_SYMBOL(kstat); + + void set_user_nice(struct task_struct * p, long nice) { p->static_prio = NICE_TO_PRIO(nice); @@ -183,7 +188,6 @@ int wake_up_state(struct task_struct * p, unsigned int state) #ifdef CONFIG_SMP - unsigned long wait_task_inactive(struct task_struct * p, wait_task_inactive_match_state_t match_state) { @@ -206,15 +210,20 @@ int set_cpus_allowed_ptr(struct task_struct * p, } -#ifdef CONFIG_NO_HZ_COMMON +void do_set_cpus_allowed(struct task_struct * p, + const struct cpumask * new_mask) { } + +#ifdef CONFIG_NO_HZ_COMMON int get_nohz_timer_target(void) { return 0; } -#endif -#endif + +void wake_up_nohz_cpu(int cpu) { } +#endif /* CONFIG_NO_HZ_COMMON */ +#endif /* CONFIG_SMP */ static bool __wake_q_add(struct wake_q_head *head, struct task_struct *task) @@ -253,3 +262,9 @@ void wake_up_q(struct wake_q_head *head) put_task_struct(task); } } + + +int idle_cpu(int cpu) +{ + return 1; +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/cputime.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/cputime.c new file mode 100644 index 0000000000..902546a971 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/cputime.c @@ -0,0 +1,17 @@ +/* + * \brief Replaces kernel/sched/cputime.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include + + +void account_idle_ticks(unsigned long ticks) { } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/fair.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/fair.c new file mode 100644 index 0000000000..a0c8414d44 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/fair.c @@ -0,0 +1,17 @@ +/* + * \brief Replaces kernel/sched/fair.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include <../kernel/sched/sched.h> +#include + +void nohz_balance_enter_idle(int cpu) { } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/isolation.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/isolation.c new file mode 100644 index 0000000000..a56efa38fc --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/isolation.c @@ -0,0 +1,30 @@ +/* + * \brief Replaces kernel/sched/isolation.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + + +#include + + +#ifdef CONFIG_CPU_ISOLATION +const struct cpumask * housekeeping_cpumask(enum hk_flags flags) +{ + static struct cpumask dummy; + return &dummy; +} + + +bool housekeeping_enabled(enum hk_flags flags) +{ + return false; +} +#endif diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/loadavg.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/loadavg.c new file mode 100644 index 0000000000..35e380659b --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/sched/loadavg.c @@ -0,0 +1,20 @@ +/* + * \brief Replaces kernel/sched/loadavg.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include + + +void calc_load_nohz_start(void) { } + + +void calc_load_nohz_stop(void) { } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c deleted file mode 100644 index 542f1a8110..0000000000 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/softirq.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * \brief Replaces kernel/softirq.c - * \author Stefan Kalkowski - * \date 2021-03-16 - */ - -/* - * Copyright (C) 2021 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#include -#include -#include - -#define CREATE_TRACE_POINTS -#include - -#include - -irq_cpustat_t irq_stat; - -int __init __weak arch_probe_nr_irqs(void) -{ - return 0; -} - -int __init __weak arch_early_irq_init(void) -{ - return 0; -} - -unsigned int __weak arch_dynirq_lower_bound(unsigned int from) -{ - return from; -} - -static struct softirq_action actions[NR_SOFTIRQS]; - -void open_softirq(int nr, void (* action)(struct softirq_action *)) -{ - if (nr >= NR_SOFTIRQS) { - printk("Error: %s nr=%d exceeds softirq limit\n", __func__, nr); - return; - } - - actions[nr].action = action; -} - - -inline void raise_softirq_irqoff(unsigned int nr) -{ - if (nr >= NR_SOFTIRQS || !actions[nr].action) - return; - - actions[nr].action(&actions[nr]); -} - - -void raise_softirq(unsigned int nr) -{ - raise_softirq_irqoff(nr); -} - - -void __local_bh_enable_ip(unsigned long ip,unsigned int cnt) -{ - /* - * Called by write_unlock_bh, which reverts preempt_cnt by the - * value SOFTIRQ_LOCK_OFFSET. - */ - __preempt_count_sub(cnt); -} - - -void __init softirq_init(void) {} - - -void irq_enter(void) {} - - -void irq_exit(void) {} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/lib/cpumask.c b/repos/dde_linux/src/lib/lx_emul/shadow/lib/cpumask.c new file mode 100644 index 0000000000..ef9943d427 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/lib/cpumask.c @@ -0,0 +1,30 @@ +/* + * \brief Replaces lib/cpumask.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + +unsigned int cpumask_next(int n,const struct cpumask * srcp) +{ + return n + 1; +} + + +int cpumask_next_and(int n, + const struct cpumask * src1p, + const struct cpumask * src2p) +{ + return n + 1; +} + + diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/mm/vmstat.c b/repos/dde_linux/src/lib/lx_emul/shadow/mm/vmstat.c new file mode 100644 index 0000000000..28e6940fc5 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/mm/vmstat.c @@ -0,0 +1,18 @@ +/* + * \brief Replaces mm/vmstat.c + * \author Stefan Kalkowski + * \date 2022-07-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include + + +void quiet_vmstat(void) { } diff --git a/repos/dde_linux/src/virt_linux/target.inc b/repos/dde_linux/src/virt_linux/target.inc index dd8f184c19..de692f8aee 100644 --- a/repos/dde_linux/src/virt_linux/target.inc +++ b/repos/dde_linux/src/virt_linux/target.inc @@ -3,7 +3,10 @@ # # kernel fundamentals -LX_ENABLE += TTY SERIAL_EARLYCON SERIAL_OF_PLATFORM PRINTK HAS_IOMEM +LX_ENABLE += TTY SERIAL_EARLYCON SERIAL_OF_PLATFORM PRINTK HAS_IOMEM SMP + +# support disabling ticking during idle +LX_ENABLE += NO_HZ_IDLE # initrd support LX_ENABLE += BINFMT_ELF BLK_DEV_INITRD diff --git a/repos/pc/lib/import/import-pc_lx_emul.mk b/repos/pc/lib/import/import-pc_lx_emul.mk index 9cfc937409..5f9b724e7f 100644 --- a/repos/pc/lib/import/import-pc_lx_emul.mk +++ b/repos/pc/lib/import/import-pc_lx_emul.mk @@ -21,10 +21,6 @@ SRC_CC += lx_emul/irq.cc SRC_CC += lx_emul/random.cc SRC_C += lx_emul/shadow/kernel/dma/mapping.c SRC_C += lx_emul/shadow/kernel/irq/spurious.c -SRC_C += lx_emul/shadow/kernel/locking/spinlock.c -SRC_C += lx_emul/shadow/kernel/rcu/tree.c -SRC_C += lx_emul/shadow/kernel/sched/sched.c -SRC_C += lx_emul/shadow/kernel/stop_machine.c SRC_C += lx_emul/shadow/lib/devres.c SRC_C += lx_emul/shadow/lib/smp_processor_id.c SRC_C += lx_emul/shadow/mm/memblock.c @@ -51,7 +47,6 @@ SRC_C += lx_emul/vmalloc.c SRC_C += lx_emul/delay.c SRC_C += lx_emul/shadow/fs/libfs.c -SRC_C += lx_emul/shadow/kernel/rcu/tiny.c SRC_C += lx_emul/shadow/lib/logic_iomem.c SRC_C += lx_emul/shadow/drivers/char/random.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c index 32707a9de0..f888f8b94e 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c @@ -528,30 +528,6 @@ void intel_dsb_commit(const struct intel_crtc_state *crtc_state) } -void calc_load_nohz_start(void) -{ - lx_emul_trace(__func__); -} - - -void calc_load_nohz_stop(void) -{ - lx_emul_trace(__func__); -} - - -void account_idle_ticks(unsigned long ticks) -{ - lx_emul_trace(__func__); -} - - -bool irq_work_needs_cpu(void) -{ - return false; -} - - #include struct smp_ops smp_ops = { }; diff --git a/repos/pc/src/drivers/usb_host/pc/dummies.c b/repos/pc/src/drivers/usb_host/pc/dummies.c index 25bdeeaf2d..66714bec4d 100644 --- a/repos/pc/src/drivers/usb_host/pc/dummies.c +++ b/repos/pc/src/drivers/usb_host/pc/dummies.c @@ -84,30 +84,6 @@ int __printk_ratelimit(const char * func) } -void calc_load_nohz_start(void) -{ - lx_emul_trace(__func__); -} - - -void calc_load_nohz_stop(void) -{ - lx_emul_trace(__func__); -} - - -void account_idle_ticks(unsigned long ticks) -{ - lx_emul_trace(__func__); -} - - -bool irq_work_needs_cpu(void) -{ - return false; -} - - #include u32 prandom_u32(void) diff --git a/repos/pc/src/lib/pc/lx_emul/common_dummies.c b/repos/pc/src/lib/pc/lx_emul/common_dummies.c index 140c876fd9..d2c0189ffa 100644 --- a/repos/pc/src/lib/pc/lx_emul/common_dummies.c +++ b/repos/pc/src/lib/pc/lx_emul/common_dummies.c @@ -43,11 +43,6 @@ const struct trace_print_flags vmaflag_names[] = { {0,NULL}}; const struct trace_print_flags pageflag_names[] = { {0,NULL}}; -#include - -struct kernel_stat kstat; - - #include /* @@ -371,13 +366,6 @@ bool pat_enabled(void) } -#include - -atomic_t __num_online_cpus = ATOMIC_INIT(1); - -unsigned long __per_cpu_offset[NR_CPUS] = { 0UL }; - - struct srcu_struct; extern int __srcu_read_lock(struct srcu_struct * ssp); int __srcu_read_lock(struct srcu_struct * ssp) @@ -402,78 +390,6 @@ void cpu_hotplug_enable(void) } -#include - -unsigned int cpumask_next(int n,const struct cpumask * srcp) -{ - lx_emul_trace(__func__); - return n + 1; -} - - -#include - -int cpumask_next_and(int n,const struct cpumask * src1p,const struct cpumask * src2p) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void do_set_cpus_allowed(struct task_struct * p,const struct cpumask * new_mask) -{ - lx_emul_trace(__func__); -} - - -#include - -const struct cpumask * housekeeping_cpumask(enum hk_flags flags) -{ - static struct cpumask ret; - lx_emul_trace(__func__); - return &ret; -} - - -#include - -bool housekeeping_enabled(enum hk_flags flags) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -unsigned int nr_cpu_ids = 1; - - -#include - -noinstr void rcu_irq_enter(void) -{ - lx_emul_trace(__func__); -} - - -#include - -void noinstr rcu_irq_exit(void) -{ - lx_emul_trace(__func__); -} - - -#include - -void rcu_softirq_qs(void) -{ - lx_emul_trace(__func__); -} - - extern void synchronize_srcu(struct srcu_struct * ssp); void synchronize_srcu(struct srcu_struct * ssp) { @@ -481,64 +397,15 @@ void synchronize_srcu(struct srcu_struct * ssp) } -int cpu_number = 0; - #ifdef CONFIG_X86_64 DEFINE_PER_CPU(void *, hardirq_stack_ptr); #endif DEFINE_PER_CPU(bool, hardirq_stack_inuse); -#include - -DEFINE_PER_CPU_SHARED_ALIGNED(irq_cpustat_t, irq_stat); -EXPORT_PER_CPU_SYMBOL(irq_stat); - - -extern void rcu_read_unlock_strict(void); -void rcu_read_unlock_strict(void) -{ - lx_emul_trace(__func__); -} - - -DEFINE_PER_CPU_READ_MOSTLY(unsigned long, this_cpu_off) = 0; -EXPORT_PER_CPU_SYMBOL(this_cpu_off); - - #include DEFINE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info); EXPORT_PER_CPU_SYMBOL(cpu_info); -#include - -void wake_up_nohz_cpu(int cpu) -{ - lx_emul_trace(__func__); -} - - -#include - -void nohz_balance_enter_idle(int cpu) -{ - lx_emul_trace(__func__); -} - - -#include - -void quiet_vmstat(void) -{ - lx_emul_trace(__func__); -} - - -extern int idle_cpu(int cpu); -int idle_cpu(int cpu) -{ - lx_emul_trace(__func__); - return 1; -} diff --git a/repos/pc/src/lib/pc/lx_emul/dep.list b/repos/pc/src/lib/pc/lx_emul/dep.list index 93acfc32d9..0d4aea3f98 100644 --- a/repos/pc/src/lib/pc/lx_emul/dep.list +++ b/repos/pc/src/lib/pc/lx_emul/dep.list @@ -17,6 +17,7 @@ arch/x86/include/asm/cmpxchg.h arch/x86/include/asm/compat.h arch/x86/include/asm/cpu_entry_area.h arch/x86/include/asm/cpufeatures.h +arch/x86/include/asm/cpu.h arch/x86/include/asm/cpumask.h arch/x86/include/asm/delay.h arch/x86/include/asm/desc.h @@ -239,6 +240,7 @@ include/linux/atomic.h include/linux/audit.h include/linux/auxvec.h include/linux/backing-dev-defs.h +include/linux/bcd.h include/linux/binfmts.h include/linux/bio.h include/linux/bit_spinlock.h diff --git a/repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c b/repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c deleted file mode 100644 index f7bfbe57a4..0000000000 --- a/repos/pc/src/lib/pc/lx_emul/shadow/kernel/rcu/tiny.c +++ /dev/null @@ -1,31 +0,0 @@ -/* - * \brief Replaces kernel/rcu/tiny.c - * \author Josef Soentgen - * \date 2022-04-05 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - - -#include -#include - -void call_rcu(struct rcu_head * head,rcu_callback_t func) -{ - /* - * In case func is a small offset kvfree should be - * called directly, see 'rcu_reclaim_tiny'. - */ - enum { KVFREE_RCU_OFFSET = 4096, }; - if (func < (rcu_callback_t)KVFREE_RCU_OFFSET) { - kvfree((void*)head - (unsigned long)func); - return; - } - - func(head); -} diff --git a/repos/pc/src/lib/wifi/dummies.c b/repos/pc/src/lib/wifi/dummies.c index 82af883041..16fbf04a48 100644 --- a/repos/pc/src/lib/wifi/dummies.c +++ b/repos/pc/src/lib/wifi/dummies.c @@ -296,30 +296,6 @@ int net_ratelimit(void) } -void calc_load_nohz_start(void) -{ - lx_emul_trace(__func__); -} - - -void calc_load_nohz_stop(void) -{ - lx_emul_trace(__func__); -} - - -void account_idle_ticks(unsigned long ticks) -{ - lx_emul_trace(__func__); -} - - -bool irq_work_needs_cpu(void) -{ - return false; -} - - #include struct smp_ops smp_ops = { }; diff --git a/repos/pc/src/test/driver_time/dummies.c b/repos/pc/src/test/driver_time/dummies.c index 7d57dedf2a..188ff680d6 100644 --- a/repos/pc/src/test/driver_time/dummies.c +++ b/repos/pc/src/test/driver_time/dummies.c @@ -29,31 +29,6 @@ #include -void calc_load_nohz_start(void) -{ - lx_emul_trace(__func__); -} - - -void calc_load_nohz_stop(void) -{ - lx_emul_trace(__func__); -} - - -void account_idle_ticks(unsigned long ticks) -{ - lx_emul_trace(__func__); -} - - - -bool irq_work_needs_cpu(void) -{ - return false; -} - - int ___ratelimit(struct ratelimit_state * rs, const char * func) { /* From 3868df9f8bc6806bf66c51f9fa1a1c06a804ae82 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 26 Jul 2022 11:38:46 +0200 Subject: [PATCH 130/354] nic_router_dhcp_*: raise timeouts On okl4, pistachio, sel4 the test didn't come up fast enough in order to still experience the first configuration of NIC router #1. This commit doubles the lifetime of the first configuration of NIC router #1 to 4 seconds and raises the overall test timeout accordingly. Ref #4555 --- repos/os/run/nic_router_dhcp.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/os/run/nic_router_dhcp.inc b/repos/os/run/nic_router_dhcp.inc index 294aa3cc73..61dcc2b2f0 100644 --- a/repos/os/run/nic_router_dhcp.inc +++ b/repos/os/run/nic_router_dhcp.inc @@ -72,7 +72,7 @@ append config { - + @@ -364,4 +364,4 @@ append done_string ".* DNS domain name: genode.org.*\n" } -run_genode_until $done_string 30 +run_genode_until $done_string 35 From 6c5d2253c9fa1657da6ef9ee88bf954ef8fac01e Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 26 Jul 2022 11:50:58 +0200 Subject: [PATCH 131/354] sel4: increase caps in filesystem tests fixes x86_32/64 libc_vfs_fs_ext2 and libc_vfs_fs_fat --- repos/libports/run/libc_vfs_filesystem_test.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/libports/run/libc_vfs_filesystem_test.inc b/repos/libports/run/libc_vfs_filesystem_test.inc index c683027e16..6c2386a87a 100644 --- a/repos/libports/run/libc_vfs_filesystem_test.inc +++ b/repos/libports/run/libc_vfs_filesystem_test.inc @@ -87,7 +87,7 @@ append config { - + From e2b61231aead9900431b3a097d211fd98a479d65 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 26 Jul 2022 14:05:01 +0200 Subject: [PATCH 132/354] pc: avoid use usleep_range in m/udelay emulation m/udelay is called with closed interrupts. Linux contrib code expects no other task to be run respectively to be re-scheduled. usleep_range leads to executing other tasks, which causes assertions in "spinlock taken twice" or "unexpected preempt count" errors, seen on runtime with wifi_drv and intel_fb. The assertion triggered with the changes by #4562. --- .../intel/pc/shadow/asm/vdso/processor.h | 6 +-- repos/pc/src/lib/pc/lx_emul/delay.c | 46 ++++++++++++++++--- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/shadow/asm/vdso/processor.h b/repos/pc/src/drivers/framebuffer/intel/pc/shadow/asm/vdso/processor.h index db54ee6637..08414f0c1a 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/shadow/asm/vdso/processor.h +++ b/repos/pc/src/drivers/framebuffer/intel/pc/shadow/asm/vdso/processor.h @@ -19,9 +19,6 @@ #ifndef __ASSEMBLY__ #include -#include - -extern u64 jiffies_64; static __always_inline void rep_nop(void) @@ -33,8 +30,7 @@ static __always_inline void rep_nop(void) static __always_inline void cpu_relax(void) { /* break busy loop of slchi() in drivers/i2c/algos/i2c-algo-bit.c */ - u64 const us = jiffies_to_usecs(1); - usleep_range(us, us); + __udelay(100); } #endif /* __ASSEMBLY__ */ diff --git a/repos/pc/src/lib/pc/lx_emul/delay.c b/repos/pc/src/lib/pc/lx_emul/delay.c index 05d9063b6c..febbbd9a1e 100644 --- a/repos/pc/src/lib/pc/lx_emul/delay.c +++ b/repos/pc/src/lib/pc/lx_emul/delay.c @@ -1,6 +1,7 @@ /* * \brief Supplement for emulation for linux/include/asm-generic/delay.h * \author Josef Soentgen + * \author Alexander Boettcher * \date 2022-05-05 */ @@ -14,21 +15,54 @@ #include #include +#include #include void __const_udelay(unsigned long xloops) { - unsigned long usecs = xloops / 0x10C7UL; - if (usecs < 100) - lx_emul_time_udelay(usecs); - else - usleep_range(usecs, usecs * 10); + unsigned long const usecs = xloops / 0x10C7UL; + __udelay(usecs); } void __udelay(unsigned long usecs) { - lx_emul_time_udelay(usecs); + /* + * Account for delays summing up to equivalent of 1 jiffie during + * jiffies_64 stays same. When 1 jiffie is reached in sum, + * increase jiffie_64 to break endless loops, seen in + * * intel_fb - cpu_relax(void) emulation used by + * busy loop of slchi() in drivers/i2c/algos/i2c-algo-bit.c + * * wifi_drv - net/wireless/intel/iwlwif* code during error code handling + */ + static uint64_t last_jiffie = 0; + static unsigned long delayed_sum = 0; + + if (jiffies_64 == last_jiffie) { + delayed_sum += usecs; + } else { + last_jiffie = jiffies_64; + delayed_sum = usecs; + } + + if (usecs < 100) + lx_emul_time_udelay(usecs); + else { + unsigned long slept = 0; + while (slept < usecs) { + lx_emul_time_udelay(100); + slept += 100; + } + } + + /* + * When delays sum up to the equivalent of 1 jiffie, + * increase it to break endless loops. + */ + if (delayed_sum >= jiffies_to_usecs(1)) { + jiffies_64 ++; + delayed_sum = 0; + } } From a6a856cb70b0a51720dc3069fe8aa51139029d17 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Tue, 26 Jul 2022 20:05:05 +0200 Subject: [PATCH 133/354] dde_ipxe: fix allocation errors under high TX load Under high TX load, 'irq_handler()' is rarely executed but packets are still received since 'netdev_poll()' is called for every TX packet. 'netdev_poll()' not only handles completed transmissions but also puts the IO buffers of received packets into the RX queue and refills the RX ring by allocating more IO buffers. However, the IO buffers can only be freed after they have been dequeued and passed to the 'rx_callback()'. Since this was only done by 'irq_handler()', we exhaust the slab allocator under high TX load. A fix for this is to process the RX queue not only in the IRQ handler but also when transmitting packets. genodelabs/genode#4555 --- repos/dde_ipxe/src/lib/dde_ipxe/nic.c | 37 +++++++++++++++++++-------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c index 4650fbe91a..73c25ff550 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c +++ b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c @@ -174,6 +174,30 @@ static unsigned scan_pci(void) return NO_DEVICE_FOUND; } +/** + * Helper for pulling packets from RX queue. + * + * Must be called within dde_lock. + */ +int process_rx_data() +{ + struct io_buffer *iobuf; + + int received = 0; + + while ((iobuf = netdev_rx_dequeue(net_dev))) { + dde_lock_leave(); + if (rx_callback) { + rx_callback(1, iobuf->data, iob_len(iobuf)); + received++; + } + dde_lock_enter(); + free_iob(iobuf); + } + + return received; +} + /** * IRQ handler registered at DDE @@ -190,17 +214,7 @@ static void irq_handler(void *p) for (unsigned retry = 0; (retry < 2) && !processed_rx_data; retry++) { /* poll the device for packets and also link-state changes */ netdev_poll(net_dev); - - struct io_buffer *iobuf; - while ((iobuf = netdev_rx_dequeue(net_dev))) { - dde_lock_leave(); - if (rx_callback) { - rx_callback(1, iobuf->data, iob_len(iobuf)); - processed_rx_data = 1; - } - dde_lock_enter(); - free_iob(iobuf); - } + processed_rx_data = process_rx_data(); } dde_lock_leave(); @@ -282,6 +296,7 @@ int dde_ipxe_nic_tx(unsigned if_index, const char *packet, unsigned packet_len) netdev_poll(net_dev); netdev_tx(net_dev, iob_disown(iobuf)); + process_rx_data(); dde_lock_leave(); return 0; From 49c6e010498f6966d7bcd7014eb90fcdda7c86bd Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 25 Jul 2022 11:35:51 +0200 Subject: [PATCH 134/354] qemu-usb: ignore invalid USB data packets Fix genodelabs/genode#4574 --- repos/libports/src/lib/qemu-usb/host.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/repos/libports/src/lib/qemu-usb/host.cc b/repos/libports/src/lib/qemu-usb/host.cc index 624bf1a8ed..a1933b2b22 100644 --- a/repos/libports/src/lib/qemu-usb/host.cc +++ b/repos/libports/src/lib/qemu-usb/host.cc @@ -790,7 +790,8 @@ static void usb_host_handle_data(USBDevice *udev, USBPacket *p) return; default: error("not supported data request"); - break; + p->status = USB_RET_NAK; + return; } try { From 5bf3e72d37bb0cd4886a7e99ad2396a6f3095128 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 25 Jul 2022 13:47:56 +0200 Subject: [PATCH 135/354] pci: return correct I/O port base from BAR The base address of I/O ports has a different encoding than those of I/O memory. This needs to be encountered in the PCI config helper utilities. Fix genodelabs/genode#4576 --- repos/os/include/pci/config.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/repos/os/include/pci/config.h b/repos/os/include/pci/config.h index 4e5b61db59..3cb8931b1f 100644 --- a/repos/os/include/pci/config.h +++ b/repos/os/include/pci/config.h @@ -129,8 +129,12 @@ struct Pci::Config : Genode::Mmio Genode::uint64_t addr() { - return (bit64() ? ((Genode::uint64_t)read()<<32) : 0UL) - | Bar_32bit::Memory_base::masked(read()); + if (memory()) + return (bit64() + ? ((Genode::uint64_t)read()<<32) : 0UL) + | Bar_32bit::Memory_base::masked(read()); + else + return Bar_32bit::Io_base::masked(read()); } }; From 2cc6c1adef6d6bd9e8b7b9b3bdd8c3ed44b0a80d Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 25 Jul 2022 14:04:25 +0200 Subject: [PATCH 136/354] pci: export BAR indices, sub-vendor, -product, rev The pci_decode has to extract the additional fields from the PCI configuration space. The platform driver again has to parse and forward the knowledge too. The PCI BAR indices are exported when info="yes" is set in the policy node for the corresponding session. Fix genodelabs/genode#4577 --- repos/os/include/pci/config.h | 8 +- repos/os/include/pci/types.h | 2 + repos/os/src/app/pci_decode/main.cc | 84 +++++++++++-------- repos/os/src/app/pci_decode/target.mk | 9 +- repos/os/src/drivers/platform/device.cc | 13 ++- repos/os/src/drivers/platform/device.h | 77 ++++++++++++----- .../src/drivers/platform/device_component.cc | 9 +- .../src/drivers/platform/device_component.h | 12 +-- repos/os/src/drivers/platform/pci.cc | 7 +- 9 files changed, 142 insertions(+), 79 deletions(-) diff --git a/repos/os/include/pci/config.h b/repos/os/include/pci/config.h index 3cb8931b1f..a4d49be11d 100644 --- a/repos/os/include/pci/config.h +++ b/repos/os/include/pci/config.h @@ -64,6 +64,7 @@ struct Pci::Config : Genode::Mmio struct Class_code_rev_id : Register<0x8, 32> { + struct Revision : Bitfield<0, 8> {}; struct Class_code : Bitfield<8, 24> {}; }; @@ -522,10 +523,10 @@ struct Pci::Config : Genode::Mmio if (!reg0.valid()) continue; if (reg0.memory()) { + memory(reg0.addr(), reg0.size(), i); if (reg0.bit64()) i++; - memory(reg0.addr(), reg0.size()); } else - io(reg0.addr(), reg0.size()); + io(reg0.addr(), reg0.size(), i); } }; }; @@ -541,6 +542,9 @@ struct Pci::Config_type0 : Pci::Config Base_address bar3 { base() + BASE_ADDRESS_0 + 0xc }; Base_address bar4 { base() + BASE_ADDRESS_0 + 0x10 }; Base_address bar5 { base() + BASE_ADDRESS_0 + 0x14 }; + + struct Subsystem_vendor : Register<0x2c, 16> { }; + struct Subsystem_device : Register<0x2e, 16> { }; }; diff --git a/repos/os/include/pci/types.h b/repos/os/include/pci/types.h index d18c219b9e..9376e39f62 100644 --- a/repos/os/include/pci/types.h +++ b/repos/os/include/pci/types.h @@ -15,6 +15,7 @@ #define __INCLUDE__PCI__TYPES_H__ #include +#include #include namespace Pci { @@ -41,6 +42,7 @@ namespace Pci { using vendor_t = Genode::uint16_t; using device_t = Genode::uint16_t; using class_t = Genode::uint32_t; + using rev_t = Genode::uint8_t; } diff --git a/repos/os/src/app/pci_decode/main.cc b/repos/os/src/app/pci_decode/main.cc index dff83fc295..1cabfd02c6 100644 --- a/repos/os/src/app/pci_decode/main.cc +++ b/repos/os/src/app/pci_decode/main.cc @@ -70,18 +70,12 @@ struct Main void Main::parse_pci_function(Bdf bdf, Config & cfg, addr_t cfg_phys_base, - Xml_generator & generator) + Xml_generator & gen) { cfg.scan(); - Config::Vendor::access_t vendor = cfg.read(); - Config::Device::access_t device = cfg.read(); - Config::Header_type::Type::access_t type = - cfg.read(); - Config::Class_code_rev_id::Class_code::access_t dclass = - cfg.read(); - - if (type) { + /* check for bridges */ + if (cfg.read()) { for_bridge(bdf.bus, [&] (Bridge & parent) { Config_type1 bcfg(cfg.base()); new (heap) Bridge(parent.sub_bridges, bdf, @@ -94,34 +88,52 @@ void Main::parse_pci_function(Bdf bdf, bool msi_x = cfg.msi_x_cap.constructed(); irq_pin_t irq_pin = cfg.read(); - generator.node("device", [&] + gen.node("device", [&] { - generator.attribute("name", Bdf::string(bdf)); - generator.attribute("type", "pci"); + auto string = [&] (uint64_t v) { return String<16>(Hex(v)); }; - generator.node("pci-config", [&] + gen.attribute("name", Bdf::string(bdf)); + gen.attribute("type", "pci"); + + gen.node("pci-config", [&] { - generator.attribute("address", String<16>(Hex(cfg_phys_base))); - generator.attribute("bus", String<16>(Hex(bdf.bus))); - generator.attribute("device", String<16>(Hex(bdf.dev))); - generator.attribute("function", String<16>(Hex(bdf.fn))); - generator.attribute("vendor_id", String<16>(Hex(vendor))); - generator.attribute("device_id", String<16>(Hex(device))); - generator.attribute("class", String<16>(Hex(dclass))); - generator.attribute("bridge", cfg.bridge() ? "yes" : "no"); + using C = Config; + using C0 = Config_type0; + using Cc = Config::Class_code_rev_id; + + gen.attribute("address", string(cfg_phys_base)); + gen.attribute("bus", string(bdf.bus)); + gen.attribute("device", string(bdf.dev)); + gen.attribute("function", string(bdf.fn)); + gen.attribute("vendor_id", string(cfg.read())); + gen.attribute("device_id", string(cfg.read())); + gen.attribute("class", string(cfg.read())); + gen.attribute("revision", string(cfg.read())); + gen.attribute("bridge", cfg.bridge() ? "yes" : "no"); + if (!cfg.bridge()) { + C0 cfg0(cfg.base()); + gen.attribute("sub_vendor_id", + string(cfg0.read())); + gen.attribute("sub_device_id", + string(cfg0.read())); + } }); - cfg.for_each_bar([&] (uint64_t addr, size_t size) { - generator.node("io_mem", [&] + cfg.for_each_bar([&] (uint64_t addr, size_t size, unsigned bar) { + gen.node("io_mem", [&] { - generator.attribute("address", String<16>(Hex(addr))); - generator.attribute("size", String<16>(Hex(size))); + gen.attribute("pci_bar", bar); + gen.attribute("address", string(addr)); + gen.attribute("size", string(size)); }); - }, [&] (uint64_t addr, size_t size) { - generator.node("io_port_range", [&] + }, [&] (uint64_t addr, size_t size, unsigned bar) { + gen.node("io_port_range", [&] { - generator.attribute("address", String<16>(Hex(addr))); - generator.attribute("size", String<16>(Hex(size))); + gen.attribute("pci_bar", bar); + gen.attribute("address", string(addr)); + + /* on x86 I/O ports can be in range 0-64KB only */ + gen.attribute("size", string(size & 0xffff)); }); }); @@ -130,17 +142,17 @@ void Main::parse_pci_function(Bdf bdf, if (!irq_pin) return; - generator.node("irq", [&] + gen.node("irq", [&] { if (msi_capable && msi_x) { - generator.attribute("type", "msi-x"); - generator.attribute("number", msi_number++); + gen.attribute("type", "msi-x"); + gen.attribute("number", msi_number++); return; } if (msi_capable && msi) { - generator.attribute("type", "msi"); - generator.attribute("number", msi_number++); + gen.attribute("type", "msi"); + gen.attribute("number", msi_number++); return; } @@ -152,9 +164,9 @@ void Main::parse_pci_function(Bdf bdf, }); irq_override_list.for_each([&] (Irq_override & io) { - io.generate(generator, irq); }); + io.generate(gen, irq); }); - generator.attribute("number", irq); + gen.attribute("number", irq); }); }); } diff --git a/repos/os/src/app/pci_decode/target.mk b/repos/os/src/app/pci_decode/target.mk index 00aab2c32b..fa21870027 100644 --- a/repos/os/src/app/pci_decode/target.mk +++ b/repos/os/src/app/pci_decode/target.mk @@ -1,4 +1,5 @@ -TARGET = pci_decode -LIBS = base -SRC_CC = main.cc -INC_DIR = $(PRG_DIR) +TARGET = pci_decode +REQUIRES = x86 +LIBS = base +SRC_CC = main.cc +INC_DIR = $(PRG_DIR) diff --git a/repos/os/src/drivers/platform/device.cc b/repos/os/src/drivers/platform/device.cc index 27962a06cf..af30b9f288 100644 --- a/repos/os/src/drivers/platform/device.cc +++ b/repos/os/src/drivers/platform/device.cc @@ -124,6 +124,8 @@ void Driver::Device::generate(Xml_generator & xml, bool info) const xml.attribute("used", _owner.valid()); _io_mem_list.for_each([&] (Io_mem const & io_mem) { xml.node("io_mem", [&] () { + if (io_mem.bar.valid()) + xml.attribute("pci_bar", io_mem.bar.number); if (!info) return; xml.attribute("phys_addr", String<16>(Hex(io_mem.range.start))); @@ -137,12 +139,14 @@ void Driver::Device::generate(Xml_generator & xml, bool info) const xml.attribute("number", irq.number); }); }); - _io_port_range_list.for_each([&] (Io_port_range const & io_port_range) { + _io_port_range_list.for_each([&] (Io_port_range const & iop) { xml.node("io_port_range", [&] () { + if (iop.bar.valid()) + xml.attribute("pci_bar", iop.bar.number); if (!info) return; - xml.attribute("phys_addr", String<16>(Hex(io_port_range.addr))); - xml.attribute("size", String<16>(Hex(io_port_range.size))); + xml.attribute("phys_addr", String<16>(Hex(iop.range.addr))); + xml.attribute("size", String<16>(Hex(iop.range.size))); }); }); _property_list.for_each([&] (Property const & p) { @@ -164,6 +168,9 @@ void Driver::Device::generate(Xml_generator & xml, bool info) const xml.attribute("vendor_id", String<16>(Hex(pci.vendor_id))); xml.attribute("device_id", String<16>(Hex(pci.device_id))); xml.attribute("class", String<16>(Hex(pci.class_code))); + xml.attribute("revision", String<16>(Hex(pci.revision))); + xml.attribute("sub_vendor_id", String<16>(Hex(pci.sub_vendor_id))); + xml.attribute("sub_device_id", String<16>(Hex(pci.sub_device_id))); }); }); }); diff --git a/repos/os/src/drivers/platform/device.h b/repos/os/src/drivers/platform/device.h index 828022311b..63411c5dec 100644 --- a/repos/os/src/drivers/platform/device.h +++ b/repos/os/src/drivers/platform/device.h @@ -53,7 +53,15 @@ class Driver::Device : private List_model::Element using Name = Genode::String<64>; using Type = Genode::String<64>; - using Range = Platform::Device_interface::Range; + + struct Pci_bar + { + enum { INVALID = 255 }; + + unsigned char number { INVALID }; + + bool valid() const { return number < INVALID; } + }; struct Owner { @@ -71,9 +79,13 @@ class Driver::Device : private List_model::Element struct Io_mem : List_model::Element { - Range range; + using Range = Platform::Device_interface::Range; - Io_mem(Range range) : range(range) {} + Pci_bar bar; + Range range; + + Io_mem(Pci_bar bar, Range range) + : bar(bar), range(range) {} }; struct Irq : List_model::Element @@ -90,11 +102,13 @@ class Driver::Device : private List_model::Element struct Io_port_range : List_model::Element { - uint16_t addr; - uint16_t size; + struct Range { uint16_t addr; uint16_t size; }; - Io_port_range(uint16_t addr, uint16_t size) - : addr(addr), size(size) {} + Pci_bar bar; + Range range; + + Io_port_range(Pci_bar bar, Range range) + : bar(bar), range(range) {} }; struct Property : List_model::Element @@ -153,6 +167,9 @@ class Driver::Device : private List_model::Element Pci::vendor_t vendor_id; Pci::device_t device_id; Pci::class_t class_code; + Pci::rev_t revision; + Pci::vendor_t sub_vendor_id; + Pci::device_t sub_device_id; bool bridge; Pci_config(addr_t addr, @@ -162,6 +179,9 @@ class Driver::Device : private List_model::Element Pci::vendor_t vendor_id, Pci::device_t device_id, Pci::class_t class_code, + Pci::rev_t revision, + Pci::vendor_t sub_vendor_id, + Pci::device_t sub_device_id, bool bridge) : addr(addr), @@ -171,6 +191,9 @@ class Driver::Device : private List_model::Element vendor_id(vendor_id), device_id(device_id), class_code(class_code), + revision(revision), + sub_vendor_id(sub_vendor_id), + sub_device_id(sub_device_id), bridge(bridge) {} }; @@ -202,7 +225,7 @@ class Driver::Device : private List_model::Element { unsigned idx = 0; _io_port_range_list.for_each([&] (Io_port_range const & ipr) { - fn(idx++, ipr.addr, ipr.size); }); + fn(idx++, ipr.range); }); } template void for_pci_config(FN const & fn) const @@ -360,6 +383,9 @@ struct Driver::Irq_update_policy : Genode::List_model::Update_polic struct Driver::Io_mem_update_policy : Genode::List_model::Update_policy { + using Range = Device::Io_mem::Range; + using Bar = Device::Pci_bar; + Genode::Allocator & alloc; Io_mem_update_policy(Genode::Allocator & alloc) : alloc(alloc) {} @@ -369,17 +395,18 @@ struct Driver::Io_mem_update_policy : Genode::List_model::Update Element & create_element(Genode::Xml_node node) { - Device::Range range { node.attribute_value("address", 0), - node.attribute_value("size", 0) }; - return *(new (alloc) Element(range)); + Bar bar { node.attribute_value("pci_bar", Bar::INVALID) }; + Range range { node.attribute_value("address", 0), + node.attribute_value("size", 0) }; + return *(new (alloc) Element(bar, range)); } void update_element(Element &, Genode::Xml_node) {} static bool element_matches_xml_node(Element const & iomem, Genode::Xml_node node) { - Device::Range range { node.attribute_value("address", 0), - node.attribute_value("size", 0) }; + Range range { node.attribute_value("address", 0), + node.attribute_value("size", 0) }; return (range.start == iomem.range.start) && (range.size == iomem.range.size); } @@ -393,6 +420,9 @@ struct Driver::Io_mem_update_policy : Genode::List_model::Update struct Driver::Io_port_update_policy : Genode::List_model::Update_policy { + using Range = Device::Io_port_range::Range; + using Bar = Device::Pci_bar; + Genode::Allocator & alloc; Io_port_update_policy(Genode::Allocator & alloc) : alloc(alloc) {} @@ -402,18 +432,19 @@ struct Driver::Io_port_update_policy Element & create_element(Genode::Xml_node node) { - uint16_t addr = node.attribute_value("address", 0); - uint16_t size = node.attribute_value("size", 0); - return *(new (alloc) Element(addr, size)); + Bar bar { node.attribute_value("pci_bar", Bar::INVALID) }; + Range range { node.attribute_value("address", 0), + node.attribute_value("size", 0) }; + return *(new (alloc) Element(bar, range)); } void update_element(Element &, Genode::Xml_node) {} static bool element_matches_xml_node(Element const & ipr, Genode::Xml_node node) { - uint16_t addr = node.attribute_value("address", 0); - uint16_t size = node.attribute_value("size", 0); - return addr == ipr.addr && size == ipr.size; + Range range { node.attribute_value("address", 0), + node.attribute_value("size", 0) }; + return range.addr == ipr.range.addr && range.size == ipr.range.size; } static bool node_is_element(Genode::Xml_node node) @@ -573,10 +604,16 @@ struct Driver::Pci_config_update_policy device_t device_id = node.attribute_value("device_id", 0xffff); class_t class_code = node.attribute_value("class", 0xff); + rev_t rev = node.attribute_value("revision", 0xff); + vendor_t sub_v_id = node.attribute_value("sub_vendor_id", + 0xffff); + device_t sub_d_id = node.attribute_value("sub_device_id", + 0xffff); bool bridge = node.attribute_value("bridge", false); return *(new (alloc) Element(addr, bus_num, dev_num, func_num, - vendor_id, device_id, class_code, bridge)); + vendor_id, device_id, class_code, + rev, sub_v_id, sub_d_id, bridge)); } void update_element(Element &, Genode::Xml_node) {} diff --git a/repos/os/src/drivers/platform/device_component.cc b/repos/os/src/drivers/platform/device_component.cc index 282278fcd9..c36bd4ace8 100644 --- a/repos/os/src/drivers/platform/device_component.cc +++ b/repos/os/src/drivers/platform/device_component.cc @@ -103,7 +103,8 @@ Genode::Io_port_session_capability Device_component::io_port_range(unsigned idx) return; if (!ipr.io_port_range.constructed()) - ipr.io_port_range.construct(_session.env(), ipr.addr, ipr.size); + ipr.io_port_range.construct(_session.env(), ipr.range.addr, + ipr.range.size); cap = ipr.io_port_range->cap(); }); @@ -154,15 +155,13 @@ Device_component::Device_component(Registry & registry, new (session.heap()) Io_mem(_io_mem_registry, idx, range); }); - device.for_each_io_port_range([&] (unsigned idx, uint16_t addr, - uint16_t size) + device.for_each_io_port_range([&] (unsigned idx, Io_port_range::Range range) { session.ram_quota_guard().withdraw(Ram_quota{Io_port_session::RAM_QUOTA}); _ram_quota += Io_port_session::RAM_QUOTA; session.cap_quota_guard().withdraw(Cap_quota{Io_port_session::CAP_QUOTA}); _cap_quota += Io_port_session::CAP_QUOTA; - new (session.heap()) Io_port_range(_io_port_range_registry, - idx, addr, size); + new (session.heap()) Io_port_range(_io_port_range_registry, idx, range); }); device.for_pci_config([&] (Device::Pci_config const & cfg) diff --git a/repos/os/src/drivers/platform/device_component.h b/repos/os/src/drivers/platform/device_component.h index c890e267d3..e568fd3ece 100644 --- a/repos/os/src/drivers/platform/device_component.h +++ b/repos/os/src/drivers/platform/device_component.h @@ -73,18 +73,18 @@ class Driver::Device_component : public Rpc_object::Element { + using Range = Device::Io_port_range::Range; + unsigned idx; - uint16_t addr; - uint16_t size; + Range range; Constructible io_port_range {}; Io_port_range(Registry & registry, - unsigned idx, - uint16_t addr, - uint16_t size) + unsigned idx, + Range range) : Registry::Element(registry, *this), - idx(idx), addr(addr), size(size) {} + idx(idx), range(range) {} }; struct Pci_config diff --git a/repos/os/src/drivers/platform/pci.cc b/repos/os/src/drivers/platform/pci.cc index 45df1afd52..4f2bc08350 100644 --- a/repos/os/src/drivers/platform/pci.cc +++ b/repos/os/src/drivers/platform/pci.cc @@ -47,12 +47,13 @@ struct Config_helper Config::Command::Bus_master_enable::set(cmd, 1); /* enable memory space when I/O mem is defined */ - _dev.for_each_io_mem([&] (unsigned, Driver::Device::Range) { + _dev.for_each_io_mem([&] (unsigned, Driver::Device::Io_mem::Range) { Config::Command::Memory_space_enable::set(cmd, 1); }); /* enable i/o space when I/O ports are defined */ - _dev.for_each_io_port_range([&] (unsigned, uint16_t, uint16_t) { - Config::Command::Io_space_enable::set(cmd, 1); }); + _dev.for_each_io_port_range( + [&] (unsigned, Driver::Device::Io_port_range::Range) { + Config::Command::Io_space_enable::set(cmd, 1); }); _config.write(cmd); } From 8f9b5e9bd29d8a23404f512f03bebf7b2a7d663d Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 25 Jul 2022 14:34:48 +0200 Subject: [PATCH 137/354] depot: src package for pci_decode Ref genodelabs/genode#4578 --- repos/os/recipes/src/pci_decode/content.mk | 6 ++++++ repos/os/recipes/src/pci_decode/hash | 1 + repos/os/recipes/src/pci_decode/used_apis | 3 +++ 3 files changed, 10 insertions(+) create mode 100644 repos/os/recipes/src/pci_decode/content.mk create mode 100644 repos/os/recipes/src/pci_decode/hash create mode 100644 repos/os/recipes/src/pci_decode/used_apis diff --git a/repos/os/recipes/src/pci_decode/content.mk b/repos/os/recipes/src/pci_decode/content.mk new file mode 100644 index 0000000000..18a31b2f3e --- /dev/null +++ b/repos/os/recipes/src/pci_decode/content.mk @@ -0,0 +1,6 @@ +SRC_DIR = src/app/pci_decode +include $(GENODE_DIR)/repos/base/recipes/src/content.inc + +content: $(GENODE_DIR)/repos/os/include/pci + mkdir -p include + cp -r $< include/ diff --git a/repos/os/recipes/src/pci_decode/hash b/repos/os/recipes/src/pci_decode/hash new file mode 100644 index 0000000000..77debe6239 --- /dev/null +++ b/repos/os/recipes/src/pci_decode/hash @@ -0,0 +1 @@ +2022-05-24-d 7e08ac5d61c5a116395a114a527e155adabd391d diff --git a/repos/os/recipes/src/pci_decode/used_apis b/repos/os/recipes/src/pci_decode/used_apis new file mode 100644 index 0000000000..69a94c6d26 --- /dev/null +++ b/repos/os/recipes/src/pci_decode/used_apis @@ -0,0 +1,3 @@ +base +os +report_session From 413e2baa1ce2a592b88b2404fa80996a68c515c6 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 25 Jul 2022 14:36:08 +0200 Subject: [PATCH 138/354] platform_drv: PCI assignment failure is no error When there is no I/O MMU available the assignment is failing too, although this is no error but normal behaviour. Ref genodelabs/genode#4578 --- repos/os/src/drivers/platform/device_pd.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/os/src/drivers/platform/device_pd.cc b/repos/os/src/drivers/platform/device_pd.cc index 6b7cb0ce65..9fe5d88904 100644 --- a/repos/os/src/drivers/platform/device_pd.cc +++ b/repos/os/src/drivers/platform/device_pd.cc @@ -117,7 +117,7 @@ void Device_pd::assign_pci(Io_mem_dataspace_capability const io_mem_cap, /* try to assign pci device to this protection domain */ if (!_pd.assign_pci(addr, Pci::Bdf::rid(bdf))) - error("Assignment of PCI device ", bdf, " to device PD failed!"); + log("Assignment of PCI device ", bdf, " to device PD failed, no IOMMU?!"); /* we don't need the mapping anymore */ _address_space.detach(addr); From 9dfc2caa111aef58e2d47d0a364e9dcda80c1aae Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Mon, 25 Jul 2022 15:11:31 +0200 Subject: [PATCH 139/354] platform_drv: add UHCI PCI quirks Implement BIOS handover and Intel resume register update apart from device driver to circumvent export of PCI config space to drivers. Ref genodelabs/genode#4578 --- repos/os/src/drivers/platform/pci.cc | 5 ++ repos/os/src/drivers/platform/pci_uhci.h | 63 ++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 repos/os/src/drivers/platform/pci_uhci.h diff --git a/repos/os/src/drivers/platform/pci.cc b/repos/os/src/drivers/platform/pci.cc index 4f2bc08350..d37d9bab4f 100644 --- a/repos/os/src/drivers/platform/pci.cc +++ b/repos/os/src/drivers/platform/pci.cc @@ -18,10 +18,12 @@ #include #include #include +#include using namespace Genode; using namespace Pci; + struct Config_helper { Driver::Device const & _dev; @@ -56,6 +58,9 @@ struct Config_helper Config::Command::Io_space_enable::set(cmd, 1); }); _config.write(cmd); + + /* apply different PCI quirks, bios handover etc. */ + Driver::pci_uhci_quirks(_cfg, _config.base()); } void disable() diff --git a/repos/os/src/drivers/platform/pci_uhci.h b/repos/os/src/drivers/platform/pci_uhci.h new file mode 100644 index 0000000000..9d52a9bdd5 --- /dev/null +++ b/repos/os/src/drivers/platform/pci_uhci.h @@ -0,0 +1,63 @@ +/* + * \brief Platform driver - PCI UHCI utilities + * \author Stefan Kalkowski + * \date 2022-06-02 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include + +namespace Driver { + static void pci_uhci_quirks(Device::Pci_config cfg, addr_t base); +} + + +void Driver::pci_uhci_quirks(Device::Pci_config cfg, addr_t base) +{ + enum { UHCI_CLASS_CODE = 0xc0300 }; + + if (cfg.class_code != UHCI_CLASS_CODE) + return; + + /* PCI configuration register for UHCI */ + struct Uhci : Mmio + { + struct Usb_legacy_support : Register<0xc0, 16> + { + struct Trap_by_60h_read_status : Bitfield<8, 1> {}; + struct Trap_by_60h_write_status : Bitfield<9, 1> {}; + struct Trap_by_64h_read_status : Bitfield<10,1> {}; + struct Trap_by_64h_write_status : Bitfield<11,1> {}; + struct Usb_pirq_enable : Bitfield<13,1> {}; + struct End_of_a20gate_pass_through_status : Bitfield<15,1> {}; + }; + + struct Usb_resume_intel : Register<0xc4, 16> {}; + + using Mmio::Mmio; + }; + + Uhci config(base); + + using Reg = Uhci::Usb_legacy_support; + + /* BIOS handover */ + Reg::access_t reg = 0; + Reg::Trap_by_60h_read_status::set(reg,1); + Reg::Trap_by_60h_write_status::set(reg,1); + Reg::Trap_by_64h_read_status::set(reg,1); + Reg::Trap_by_64h_write_status::set(reg,1); + Reg::End_of_a20gate_pass_through_status::set(reg,1); + Reg::Usb_pirq_enable::set(reg,1); + config.write(reg); + + if (cfg.vendor_id == 0x8086) + config.write(0); +} From 8255053242d47585efb6e55f0e28b55c2b3bd4d0 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 27 Jul 2022 17:30:17 +0200 Subject: [PATCH 140/354] platform_drv: export Intel graphics PCI infos Provide additional PCI register information inside the pci-config part of the devices ROM for clients able to access an Intel graphic card, namely the GMCH control register content, which contains for instance the GTT size and stolen memory size. Ref genodelabs/genode#4578 --- repos/os/src/drivers/platform/common.h | 2 +- repos/os/src/drivers/platform/device.cc | 9 +- repos/os/src/drivers/platform/device.h | 9 +- .../src/drivers/platform/device_component.cc | 15 ++- .../src/drivers/platform/device_component.h | 2 + .../drivers/platform/device_model_policy.cc | 2 +- repos/os/src/drivers/platform/pci.cc | 11 ++ repos/os/src/drivers/platform/pci.h | 4 + .../src/drivers/platform/pci_intel_graphics.h | 124 ++++++++++++++++++ .../src/drivers/platform/session_component.cc | 5 +- .../src/drivers/platform/session_component.h | 1 - 11 files changed, 165 insertions(+), 19 deletions(-) create mode 100644 repos/os/src/drivers/platform/pci_intel_graphics.h diff --git a/repos/os/src/drivers/platform/common.h b/repos/os/src/drivers/platform/common.h index 559a4de6e9..49adc6a7f4 100644 --- a/repos/os/src/drivers/platform/common.h +++ b/repos/os/src/drivers/platform/common.h @@ -24,7 +24,7 @@ class Driver::Common : Device_reporter Attached_rom_dataspace _devices_rom { _env, _rom_name.string() }; Heap _heap { _env.ram(), _env.rm() }; Sliced_heap _sliced_heap { _env.ram(), _env.rm() }; - Device_model _devices { _heap, *this }; + Device_model _devices { _env, _heap, *this }; Signal_handler _dev_handler { _env.ep(), *this, &Common::_handle_devices }; Driver::Root _root; diff --git a/repos/os/src/drivers/platform/device.cc b/repos/os/src/drivers/platform/device.cc index af30b9f288..f26a9fe93c 100644 --- a/repos/os/src/drivers/platform/device.cc +++ b/repos/os/src/drivers/platform/device.cc @@ -79,7 +79,7 @@ void Driver::Device::acquire(Session_component & sc) } }); - pci_enable(sc.env(), sc.device_pd(), *this); + pci_enable(_env, sc.device_pd(), *this); sc.update_devices_rom(); _model.device_status_changed(); } @@ -90,7 +90,7 @@ void Driver::Device::release(Session_component & sc) if (!(_owner == sc)) return; - pci_disable(sc.env(), *this); + pci_disable(_env, *this); _reset_domain_list.for_each([&] (Reset_domain & r) { @@ -171,14 +171,15 @@ void Driver::Device::generate(Xml_generator & xml, bool info) const xml.attribute("revision", String<16>(Hex(pci.revision))); xml.attribute("sub_vendor_id", String<16>(Hex(pci.sub_vendor_id))); xml.attribute("sub_device_id", String<16>(Hex(pci.sub_device_id))); + pci_device_specific_info(*this, _env, _model, xml); }); }); }); } -Driver::Device::Device(Device_model & model, Name name, Type type) -: _model(model), _name(name), _type(type) { } +Driver::Device::Device(Env & env, Device_model & model, Name name, Type type) +: _env(env), _model(model), _name(name), _type(type) { } Driver::Device::~Device() diff --git a/repos/os/src/drivers/platform/device.h b/repos/os/src/drivers/platform/device.h index 63411c5dec..8c631c6ca1 100644 --- a/repos/os/src/drivers/platform/device.h +++ b/repos/os/src/drivers/platform/device.h @@ -197,7 +197,7 @@ class Driver::Device : private List_model::Element bridge(bridge) {} }; - Device(Device_model & model, Name name, Type type); + Device(Env & env, Device_model & model, Name name, Type type); virtual ~Device(); Name name() const; @@ -253,6 +253,7 @@ class Driver::Device : private List_model::Element friend class List_model; friend class List; + Env & _env; Device_model & _model; Name const _name; Type const _type; @@ -287,6 +288,7 @@ class Driver::Device_model : { private: + Env & _env; Heap & _heap; Device_reporter & _reporter; List_model _model { }; @@ -300,9 +302,10 @@ class Driver::Device_model : void update(Xml_node const & node); void device_status_changed(); - Device_model(Heap & heap, + Device_model(Env & env, + Heap & heap, Device_reporter & reporter) - : _heap(heap), _reporter(reporter) { } + : _env(env), _heap(heap), _reporter(reporter) { } ~Device_model() { _model.destroy_all_elements(*this); } diff --git a/repos/os/src/drivers/platform/device_component.cc b/repos/os/src/drivers/platform/device_component.cc index c36bd4ace8..5733249c45 100644 --- a/repos/os/src/drivers/platform/device_component.cc +++ b/repos/os/src/drivers/platform/device_component.cc @@ -49,7 +49,7 @@ Device_component::io_mem(unsigned idx, Range &range, Cache cache) return; if (!iomem.io_mem.constructed()) - iomem.io_mem.construct(_session.env(), + iomem.io_mem.construct(_env, iomem.range.start, iomem.range.size, cache == WRITE_COMBINED); @@ -79,11 +79,11 @@ Genode::Irq_session_capability Device_component::irq(unsigned idx) else error("MSI(-x) detected for device without pci-config!"); } - irq.irq.construct(_session.env(), irq.number, irq.mode, irq.polarity, + irq.irq.construct(_env, irq.number, irq.mode, irq.polarity, pci_cfg_addr); Irq_session::Info info = irq.irq->info(); if (info.type == Irq_session::Info::MSI) - pci_msi_enable(_session.env(), pci_cfg_addr, info); + pci_msi_enable(_env, pci_cfg_addr, info); } cap = irq.irq->cap(); @@ -103,7 +103,7 @@ Genode::Io_port_session_capability Device_component::io_port_range(unsigned idx) return; if (!ipr.io_port_range.constructed()) - ipr.io_port_range.construct(_session.env(), ipr.range.addr, + ipr.io_port_range.construct(_env, ipr.range.addr, ipr.range.size); cap = ipr.io_port_range->cap(); @@ -114,9 +114,14 @@ Genode::Io_port_session_capability Device_component::io_port_range(unsigned idx) Device_component::Device_component(Registry & registry, + Env & env, Driver::Session_component & session, Driver::Device & device) -: _session(session), _device(device.name()), _reg_elem(registry, *this) +: + _env(env), + _session(session), + _device(device.name()), + _reg_elem(registry, *this) { session.cap_quota_guard().withdraw(Cap_quota{1}); _cap_quota += 1; diff --git a/repos/os/src/drivers/platform/device_component.h b/repos/os/src/drivers/platform/device_component.h index e568fd3ece..ce1a5e4f97 100644 --- a/repos/os/src/drivers/platform/device_component.h +++ b/repos/os/src/drivers/platform/device_component.h @@ -95,6 +95,7 @@ class Driver::Device_component : public Rpc_object & registry, + Env & env, Session_component & session, Driver::Device & device); ~Device_component(); @@ -113,6 +114,7 @@ class Driver::Device_component : public Rpc_object #include #include +#include using namespace Genode; using namespace Pci; @@ -172,3 +173,13 @@ bool Driver::pci_device_matches(Session_policy const & policy, return ret; } + + +void Driver::pci_device_specific_info(Device const & dev, + Env & env, + Device_model & model, + Xml_generator & xml) +{ + dev.for_pci_config([&] (Device::Pci_config const cfg) { + Driver::pci_intel_graphics_info(cfg, env, model, xml); }); +} diff --git a/repos/os/src/drivers/platform/pci.h b/repos/os/src/drivers/platform/pci.h index c5b9290ad5..ce36bb2927 100644 --- a/repos/os/src/drivers/platform/pci.h +++ b/repos/os/src/drivers/platform/pci.h @@ -28,6 +28,10 @@ namespace Driver { Genode::Irq_session::Info const info); bool pci_device_matches(Genode::Session_policy const & policy, Device const & dev); + void pci_device_specific_info(Device const & dev, + Env & env, + Device_model & model, + Xml_generator & xml); } #endif /* _SRC__DRIVERS__PLATFORM__PCI_H_ */ diff --git a/repos/os/src/drivers/platform/pci_intel_graphics.h b/repos/os/src/drivers/platform/pci_intel_graphics.h new file mode 100644 index 0000000000..630f5ecd43 --- /dev/null +++ b/repos/os/src/drivers/platform/pci_intel_graphics.h @@ -0,0 +1,124 @@ +/* + * \brief Platform driver - PCI intel graphics utilities + * \author Stefan Kalkowski + * \date 2022-06-02 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include +#include + +namespace Driver { + void pci_intel_graphics_info(Device::Pci_config cfg, + Env & env, + Device_model & model, + Xml_generator & xml); +} + + +static inline unsigned pci_intel_graphics_generation(Pci::device_t id) +{ + struct Device_gen { + Pci::device_t id; + unsigned gen; + }; + + static Device_gen intel_gpu_generations[] = { + { 0x7121, 1 }, { 0x7123, 1 }, { 0x7125, 1 }, { 0x1132, 1 }, + { 0x3577, 2 }, { 0x2562, 2 }, { 0x3582, 2 }, { 0x358e, 2 }, + { 0x2572, 2 }, { 0x2582, 3 }, { 0x258a, 3 }, { 0x2592, 3 }, + { 0x2772, 3 }, { 0x27a2, 3 }, { 0x27ae, 3 }, { 0x29b2, 3 }, + { 0x29c2, 3 }, { 0x29d2, 3 }, { 0xa001, 3 }, { 0xa011, 3 }, + { 0x2972, 4 }, { 0x2982, 4 }, { 0x2992, 4 }, { 0x29a2, 4 }, + { 0x2a02, 4 }, { 0x2a12, 4 }, { 0x2a42, 4 }, { 0x2e02, 4 }, + { 0x2e12, 4 }, { 0x2e22, 4 }, { 0x2e32, 4 }, { 0x2e42, 4 }, + { 0x2e92, 4 }, { 0x0042, 5 }, { 0x0046, 5 }, { 0x0102, 6 }, + { 0x010a, 6 }, { 0x0112, 6 }, { 0x0122, 6 }, { 0x0106, 6 }, + { 0x0116, 6 }, { 0x0126, 6 }, { 0x0156, 6 }, { 0x0166, 6 }, + { 0x0152, 7 }, { 0x015a, 7 }, { 0x0162, 7 }, { 0x016a, 7 }, + { 0x0a02, 7 }, { 0x0a06, 7 }, { 0x0a0a, 7 }, { 0x0a0b, 7 }, + { 0x0a0e, 7 }, { 0x0402, 7 }, { 0x0406, 7 }, { 0x040a, 7 }, + { 0x040b, 7 }, { 0x040e, 7 }, { 0x0c02, 7 }, { 0x0c06, 7 }, + { 0x0c0a, 7 }, { 0x0c0b, 7 }, { 0x0c0e, 7 }, { 0x0d02, 7 }, + { 0x0d06, 7 }, { 0x0d0a, 7 }, { 0x0d0b, 7 }, { 0x0d0e, 7 }, + { 0x0a12, 7 }, { 0x0a16, 7 }, { 0x0a1a, 7 }, { 0x0a1b, 7 }, + { 0x0a1e, 7 }, { 0x0412, 7 }, { 0x0416, 7 }, { 0x041a, 7 }, + { 0x041b, 7 }, { 0x041e, 7 }, { 0x0c12, 7 }, { 0x0c16, 7 }, + { 0x0c1a, 7 }, { 0x0c1b, 7 }, { 0x0c1e, 7 }, { 0x0d12, 7 }, + { 0x0d16, 7 }, { 0x0d1a, 7 }, { 0x0d1b, 7 }, { 0x0d1e, 7 }, + { 0x0a22, 7 }, { 0x0a26, 7 }, { 0x0a2a, 7 }, { 0x0a2b, 7 }, + { 0x0a2e, 7 }, { 0x0422, 7 }, { 0x0426, 7 }, { 0x042a, 7 }, + { 0x042b, 7 }, { 0x042e, 7 }, { 0x0c22, 7 }, { 0x0c26, 7 }, + { 0x0c2a, 7 }, { 0x0c2b, 7 }, { 0x0c2e, 7 }, { 0x0d22, 7 }, + { 0x0d26, 7 }, { 0x0d2a, 7 }, { 0x0d2b, 7 }, { 0x0d2e, 7 }, + { 0x0f30, 7 }, { 0x0f31, 7 }, { 0x0f32, 7 }, { 0x0f33, 7 }, + }; + for (unsigned i = 0; + i < (sizeof(intel_gpu_generations)/(sizeof(Device_gen))); + i++) { + if (id == intel_gpu_generations[i].id) + return intel_gpu_generations[i].gen; + }; + + /* + * If we do not find something in the array, we assume its + * generation 8 or higher + */ + return 8; +}; + + +void Driver::pci_intel_graphics_info(Device::Pci_config cfg, + Env & env, + Device_model & model, + Xml_generator & xml) +{ + enum { + GPU_CLASS_MASK = 0xff0000, + GPU_CLASS_ID = 0x030000, + VENDOR_INTEL = 0x8086 + }; + + if (((cfg.class_code & GPU_CLASS_MASK) != GPU_CLASS_ID) || + (cfg.vendor_id != VENDOR_INTEL)) + return; + + /* PCI configuration registers of host bridge */ + struct Host_bridge : Mmio + { + struct Gen_old_gmch_control : Register<0x52, 16> {}; + struct Gen_6_7_gmch_control : Register<0x50, 16> {}; + struct Gen_gmch_control : Register<0x52, 16> {}; + + using Mmio::Mmio; + }; + + /* find host bridge */ + model.for_each([&] (Device const & dev) { + dev.for_pci_config([&] (Device::Pci_config const cfg) { + if (cfg.bus_num || cfg.dev_num || cfg.func_num) + return; + + Attached_io_mem_dataspace io_mem(env, cfg.addr, 0x1000); + Host_bridge config((addr_t)io_mem.local_addr()); + unsigned gen = pci_intel_graphics_generation(cfg.device_id); + uint16_t gmch = 0; + + if (gen < 6) + gmch = config.read(); + else if (gen < 8) + gmch = config.read(); + else + gmch = config.read(); + + xml.attribute("intel_gmch_control", String<16>(Hex(gmch))); + }); + }); +} diff --git a/repos/os/src/drivers/platform/session_component.cc b/repos/os/src/drivers/platform/session_component.cc index cefc1ad5da..6f15cb535b 100644 --- a/repos/os/src/drivers/platform/session_component.cc +++ b/repos/os/src/drivers/platform/session_component.cc @@ -24,7 +24,7 @@ Genode::Capability Session_component::_acquire(Device & device) { Device_component * dc = new (heap()) - Device_component(_device_registry, *this, device); + Device_component(_device_registry, _env, *this, device); device.acquire(*this); return _env.ep().rpc_ep().manage(dc); }; @@ -112,9 +112,6 @@ void Session_component::produce_xml(Xml_generator &xml) } -Genode::Env & Session_component::env() { return _env; } - - Genode::Heap & Session_component::heap() { return _md_alloc; } diff --git a/repos/os/src/drivers/platform/session_component.h b/repos/os/src/drivers/platform/session_component.h index f4a0d63124..dbc91b660a 100644 --- a/repos/os/src/drivers/platform/session_component.h +++ b/repos/os/src/drivers/platform/session_component.h @@ -56,7 +56,6 @@ class Driver::Session_component ~Session_component(); - Env & env(); Heap & heap(); Device_pd & device_pd(); From bc665384c3a928e2e06e7a1215b010568d0793b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 21 Jul 2022 15:56:22 +0200 Subject: [PATCH 141/354] dde_linux: free stack on task destruction Issue #4575. --- repos/dde_linux/src/lib/lx_kit/task.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/repos/dde_linux/src/lib/lx_kit/task.cc b/repos/dde_linux/src/lib/lx_kit/task.cc index 1cf1102aa7..a6951b1918 100644 --- a/repos/dde_linux/src/lib/lx_kit/task.cc +++ b/repos/dde_linux/src/lib/lx_kit/task.cc @@ -41,6 +41,13 @@ static inline void * _alloc_stack(const char * name) } +static inline void _free_stack(void *addr) +{ + Genode::Thread * th = Genode::Thread::myself(); + th->free_secondary_stack(addr); +} + + Task::State Task::state() const { return _state; } @@ -152,4 +159,8 @@ Task::Task(int (* func)(void*), } -Task::~Task() { _scheduler.remove(*this); } +Task::~Task() +{ + _scheduler.remove(*this); + _free_stack(_stack); +} From 3d8c1080b14c6797725f9db788480e8075386e5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Thu, 21 Jul 2022 16:09:25 +0200 Subject: [PATCH 142/354] dde_linux: remove exited tasks The commit introduces means to mark a task for destruction that is removed on the next scheduling cycle. This fixes stack leakage from dynamic kworker tasks. Issue #4575. --- repos/dde_linux/src/include/lx_emul/task.h | 2 ++ repos/dde_linux/src/include/lx_kit/task.h | 11 ++++++++++- .../dde_linux/src/lib/lx_emul/shadow/kernel/exit.c | 4 ++++ repos/dde_linux/src/lib/lx_emul/task.cc | 6 ++++++ repos/dde_linux/src/lib/lx_kit/scheduler.cc | 13 ++++++++++++- repos/dde_linux/src/lib/lx_kit/task.cc | 13 +++++++++++++ 6 files changed, 47 insertions(+), 2 deletions(-) diff --git a/repos/dde_linux/src/include/lx_emul/task.h b/repos/dde_linux/src/include/lx_emul/task.h index 487c8eed39..3873bdff22 100644 --- a/repos/dde_linux/src/include/lx_emul/task.h +++ b/repos/dde_linux/src/include/lx_emul/task.h @@ -46,6 +46,8 @@ void *lx_emul_task_stack(struct task_struct const * task); char lx_emul_task_another_runnable(void); +void lx_emul_task_mark_for_removal(struct task_struct const * task); + #ifdef __cplusplus } #endif diff --git a/repos/dde_linux/src/include/lx_kit/task.h b/repos/dde_linux/src/include/lx_kit/task.h index c75a0eb506..d222665944 100644 --- a/repos/dde_linux/src/include/lx_kit/task.h +++ b/repos/dde_linux/src/include/lx_kit/task.h @@ -34,7 +34,7 @@ class Lx_kit::Task : public Genode::List::Element using Name = String<64>; - enum State { INIT, RUNNING, BLOCKED }; + enum State { INIT, RUNNING, BLOCKED, DESTROY }; enum Type { NORMAL, IRQ_HANDLER, TIME_HANDLER }; private: @@ -100,6 +100,15 @@ class Lx_kit::Task : public Genode::List::Element * Shortcut to enter blocking state and request scheduling */ void block_and_schedule(); + + /** + * Mark for destruction + * + * Let the scheduler clean up the task when a new one is added. + */ + void mark_for_destruction(); + + bool destroy() const; }; #endif /* _LX_KIT__TASK_H_ */ diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/exit.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/exit.c index b2ca7576ba..d6e78cb9c6 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/exit.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/exit.c @@ -16,6 +16,7 @@ #include #include +#include int rcuwait_wake_up(struct rcuwait * w) @@ -38,6 +39,9 @@ void __noreturn do_exit(long code) complete(tsk->vfork_done); current->flags |= PF_NOFREEZE; + + lx_emul_task_mark_for_removal(tsk); + schedule(); BUG(); } diff --git a/repos/dde_linux/src/lib/lx_emul/task.cc b/repos/dde_linux/src/lib/lx_emul/task.cc index 04ba17b4fb..fd3f82934b 100644 --- a/repos/dde_linux/src/lib/lx_emul/task.cc +++ b/repos/dde_linux/src/lib/lx_emul/task.cc @@ -108,3 +108,9 @@ extern "C" char lx_emul_task_another_runnable() return Lx_kit::env().scheduler.another_runnable(&task); } + + +extern "C" void lx_emul_task_mark_for_removal(struct task_struct const *t) +{ + Lx_kit::env().scheduler.task((void*)t).mark_for_destruction(); +} diff --git a/repos/dde_linux/src/lib/lx_kit/scheduler.cc b/repos/dde_linux/src/lib/lx_kit/scheduler.cc index 646464ba1d..7f64977fb0 100644 --- a/repos/dde_linux/src/lib/lx_kit/scheduler.cc +++ b/repos/dde_linux/src/lib/lx_kit/scheduler.cc @@ -21,7 +21,7 @@ #include #include -#include +#include #include using namespace Genode; @@ -119,6 +119,17 @@ void Scheduler::schedule() /* update jiffies before running task */ //Lx::timer_update_jiffies(); + for (Task * t = _present_list.first(); t; ) { + + Task *tmp = t; + t = t->next(); + + if (!tmp->destroy()) + continue; + + Genode::destroy(Lx_kit::env().heap, tmp); + } + for (Task * t = _present_list.first(); t; t = t->next()) { if (!t->runnable()) diff --git a/repos/dde_linux/src/lib/lx_kit/task.cc b/repos/dde_linux/src/lib/lx_kit/task.cc index a6951b1918..ce9771d112 100644 --- a/repos/dde_linux/src/lib/lx_kit/task.cc +++ b/repos/dde_linux/src/lib/lx_kit/task.cc @@ -27,6 +27,7 @@ bool Task::runnable() const case INIT: return true; case RUNNING: return true; case BLOCKED: return false; + case DESTROY: return false; } error("Invalid task state?!"); return false; @@ -139,6 +140,18 @@ void Task::block_and_schedule() } +void Task::mark_for_destruction() +{ + _state = DESTROY; +} + + +bool Task::destroy() const +{ + return _state == DESTROY; +} + + Task::Task(int (* func)(void*), void * arg, void * lx_task, From 1dd69eeb6c62278fc4c1703850c1ada764fc11d9 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 8 Aug 2022 14:20:07 +0200 Subject: [PATCH 143/354] lx_emul: skip USB config setting if already set Skip SET_CONFIGURATION requests if the device already has the selected config as active config. This workaround prevents issues with Linux guests in VirtualBox and SDC-reader passthrough. Thanks to Peter for the patch. --- repos/dde_linux/src/lib/lx_emul/usb.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/repos/dde_linux/src/lib/lx_emul/usb.c b/repos/dde_linux/src/lib/lx_emul/usb.c index ed328119cd..17b6728bf6 100644 --- a/repos/dde_linux/src/lib/lx_emul/usb.c +++ b/repos/dde_linux/src/lib/lx_emul/usb.c @@ -366,6 +366,17 @@ static genode_usb_request_ret_t handle_config_request(unsigned cfg_idx, void * data) { struct usb_device * udev = (struct usb_device *) data; + + if (udev && udev->actconfig + && udev->actconfig->desc.bConfigurationValue == cfg_idx) { + /* + * Skip SET_CONFIGURATION requests if the device already has the + * selected config as active config. This workaround prevents issues + * with Linux guests in vbox and SDC-reader passthrough. + */ + return NO_ERROR; + } + return (usb_set_configuration(udev, cfg_idx)) ? UNKNOWN_ERROR : NO_ERROR; } From a4ec06a3b7822cc84c05e16d142e947d9cc22d01 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 1 Aug 2022 10:18:11 +0200 Subject: [PATCH 144/354] nic_router: no empty DNS servers opt in DHCP reply The NIC router used to add the DNS servers field to DHCP replies regardless of whether there were DNS servers or not. As reported by a Genode user, the empty DNS server field irritated at least Windows 10 guests (Vbox 6) that connected to the NIC router. This resulted in Windows 10 ignoring DHCP offers from the router with such characteristic. With this commit adding the DNS server DHCP option is skipped if there are no DNS servers at the corresponding DHCP server or the domain IP config the server shall fetch its DNS servers from. Fixes #4581 --- repos/os/src/server/nic_router/dhcp_server.cc | 10 ++++++++++ repos/os/src/server/nic_router/dhcp_server.h | 2 ++ repos/os/src/server/nic_router/interface.cc | 17 ++++++++++++----- repos/os/src/server/nic_router/ipv4_config.h | 11 ++++++----- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/repos/os/src/server/nic_router/dhcp_server.cc b/repos/os/src/server/nic_router/dhcp_server.cc index 7c6d93a2a7..f46c27e20a 100644 --- a/repos/os/src/server/nic_router/dhcp_server.cc +++ b/repos/os/src/server/nic_router/dhcp_server.cc @@ -78,6 +78,16 @@ void Dhcp_server_base::_invalid(Domain const &domain, ** Dhcp_server ** *****************/ +bool Dhcp_server::dns_servers_empty() const +{ + if (_dns_config_from.valid()) { + + return _resolve_dns_config_from().dns_servers_empty(); + } + return _dns_servers.empty(); +} + + Dhcp_server::Dhcp_server(Xml_node const node, Domain &domain, Allocator &alloc, diff --git a/repos/os/src/server/nic_router/dhcp_server.h b/repos/os/src/server/nic_router/dhcp_server.h index 36e7a0006a..a3e43d537e 100644 --- a/repos/os/src/server/nic_router/dhcp_server.h +++ b/repos/os/src/server/nic_router/dhcp_server.h @@ -125,6 +125,8 @@ class Net::Dhcp_server : private Genode::Noncopyable, } } + bool dns_servers_empty() const; + Dns_domain_name const &dns_domain_name() const { if (_dns_config_from.valid()) { diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index f7a6282b52..c471a30653 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -687,11 +687,18 @@ void Interface::_send_dhcp_reply(Dhcp_server const &dhcp_srv, dhcp_opts.append_option(local_intf.subnet_mask()); dhcp_opts.append_option(local_intf.address); - dhcp_opts.append_dns_server([&] (Dhcp_options::Dns_server_data &data) { - dhcp_srv.for_each_dns_server_ip([&] (Ipv4_address const &addr) { - data.append_address(addr); - }); - }); + if (not dhcp_srv.dns_servers_empty()) { + + dhcp_opts.append_dns_server( + [&] (Dhcp_options::Dns_server_data &data) + { + dhcp_srv.for_each_dns_server_ip( + [&] (Ipv4_address const &addr) + { + data.append_address(addr); + }); + }); + } dhcp_srv.dns_domain_name().with_string( [&] (Dns_domain_name::String const &str) { diff --git a/repos/os/src/server/nic_router/ipv4_config.h b/repos/os/src/server/nic_router/ipv4_config.h index af9602a744..a505b11356 100644 --- a/repos/os/src/server/nic_router/ipv4_config.h +++ b/repos/os/src/server/nic_router/ipv4_config.h @@ -91,11 +91,12 @@ class Net::Ipv4_config ** Accessors ** ***************/ - bool valid() const { return _valid; } - Ipv4_address_prefix const &interface() const { return _interface; } - Ipv4_address const &gateway() const { return _gateway; } - bool gateway_valid() const { return _gateway_valid; } - Dns_domain_name const &dns_domain_name() const { return _dns_domain_name; } + bool valid() const { return _valid; } + Ipv4_address_prefix const &interface() const { return _interface; } + Ipv4_address const &gateway() const { return _gateway; } + bool gateway_valid() const { return _gateway_valid; } + Dns_domain_name const &dns_domain_name() const { return _dns_domain_name; } + bool dns_servers_empty() const { return _dns_servers.empty(); } }; #endif /* _IPV4_CONFIG_H_ */ From bda276f498e355073eafb938eade0ba55c761872 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Wed, 27 Jul 2022 10:58:11 +0200 Subject: [PATCH 145/354] vfs_oss: implement 'SNDCTL_DSP_SETTRIGGER' command Fixes #4579 --- repos/libports/src/lib/libc/vfs_plugin.cc | 36 ++++++++- repos/libports/src/lib/vfs/oss/README | 8 ++ repos/libports/src/lib/vfs/oss/vfs_oss.cc | 95 ++++++++++++++++++++--- 3 files changed, 129 insertions(+), 10 deletions(-) diff --git a/repos/libports/src/lib/libc/vfs_plugin.cc b/repos/libports/src/lib/libc/vfs_plugin.cc index 56abd0d337..7ffc3dacbc 100644 --- a/repos/libports/src/lib/libc/vfs_plugin.cc +++ b/repos/libports/src/lib/libc/vfs_plugin.cc @@ -1682,7 +1682,41 @@ Libc::Vfs_plugin::_ioctl_sndctl(File_descriptor *fd, unsigned long request, char if (!argp) return { true, EINVAL }; - /* dummy implementation */ + int mask = *(int *)argp; + + if (((fd->flags & O_ACCMODE) == O_RDONLY) || + ((fd->flags & O_ACCMODE) == O_RDWR)) { + + char enable_input_string[2]; + + ::snprintf(enable_input_string, sizeof(enable_input_string), + "%u", (mask & PCM_ENABLE_INPUT) ? 1 : 0); + + Absolute_path enable_input_path = ioctl_dir(*fd); + enable_input_path.append_element("enable_input"); + File_descriptor *enable_input_fd = open(enable_input_path.base(), O_WRONLY); + if (!enable_input_fd) + return { true, ENOTSUP }; + write(enable_input_fd, enable_input_string, sizeof(enable_input_string)); + close(enable_input_fd); + } + + if (((fd->flags & O_ACCMODE) == O_WRONLY) || + ((fd->flags & O_ACCMODE) == O_RDWR)) { + + char enable_output_string[2]; + + ::snprintf(enable_output_string, sizeof(enable_output_string), + "%u", (mask & PCM_ENABLE_OUTPUT) ? 1 : 0); + + Absolute_path enable_output_path = ioctl_dir(*fd); + enable_output_path.append_element("enable_output"); + File_descriptor *enable_output_fd = open(enable_output_path.base(), O_WRONLY); + if (!enable_output_fd) + return { true, ENOTSUP }; + write(enable_output_fd, enable_output_string, sizeof(enable_output_string)); + close(enable_output_fd); + } handled = true; diff --git a/repos/libports/src/lib/vfs/oss/README b/repos/libports/src/lib/vfs/oss/README index 3f66208634..799643e29a 100644 --- a/repos/libports/src/lib/vfs/oss/README +++ b/repos/libports/src/lib/vfs/oss/README @@ -71,6 +71,14 @@ presents all files: * halt_output (wo): writing anything into this file halts output processing. Corresponding OSS commands: SNDCTL_DSP_HALT + * enable_input (rw): writing 1 or 0 into this file enables or disables + input processing. + Corresponding OSS commands: SNDCTL_DSP_SETTRIGGER + + * enable_output (rw): writing 1 or 0 into this file enables or disables + output processing. + Corresponding OSS commands: SNDCTL_DSP_SETTRIGGER + In its current state the plugin is merely enough to use simple applications requiring nothing more than a minimal set of the OSSv4 API. It does not allow altering of all parameters and will only work when 44100Hz/s16le is used. diff --git a/repos/libports/src/lib/vfs/oss/vfs_oss.cc b/repos/libports/src/lib/vfs/oss/vfs_oss.cc index 806b530da8..9939e8b338 100644 --- a/repos/libports/src/lib/vfs/oss/vfs_oss.cc +++ b/repos/libports/src/lib/vfs/oss/vfs_oss.cc @@ -193,6 +193,9 @@ struct Vfs::Oss_file_system::Audio Audio(Audio const &); Audio &operator = (Audio const &); + bool _audio_out_enabled { true }; + bool _audio_in_enabled { true }; + bool _audio_out_started { false }; bool _audio_in_started { false }; @@ -208,6 +211,23 @@ struct Vfs::Oss_file_system::Audio size_t _read_sample_offset { 0 }; size_t _write_sample_offset { 0 }; + void _start_input() + { + if (!_audio_in_started && _audio_in_enabled) { + _in->start(); + _audio_in_started = true; + } + } + + void _start_output() + { + if (!_audio_out_started && _audio_out_enabled) { + _out[0]->start(); + _out[1]->start(); + _audio_out_started = true; + } + } + public: Audio(Genode::Env &env, @@ -302,6 +322,28 @@ struct Vfs::Oss_file_system::Audio } } + void enable_input(bool enable) + { + if (enable) { + _audio_in_enabled = true; + _start_input(); + } else { + halt_input(); + _audio_in_enabled = false; + } + } + + void enable_output(bool enable) + { + if (enable) { + _audio_out_enabled = true; + _start_output(); + } else { + halt_output(); + _audio_out_enabled = false; + } + } + /* * Handle Audio_out progress signal. * @@ -404,10 +446,7 @@ struct Vfs::Oss_file_system::Audio { out_size = 0; - if (!_audio_in_started) { - _in->start(); - _audio_in_started = true; - } + _start_input(); if (_info.ifrag_bytes == 0) { /* block */ @@ -493,11 +532,7 @@ struct Vfs::Oss_file_system::Audio return false; } - if (!_audio_out_started) { - _audio_out_started = true; - _out[0]->start(); - _out[1]->start(); - } + _start_output(); unsigned stream_samples_written = 0; @@ -756,6 +791,8 @@ struct Vfs::Oss_file_system::Local_factory : File_system_factory Readonly_value_file_system _optr_samples_fs { "optr_samples", 0LL }; Readonly_value_file_system _optr_fifo_samples_fs { "optr_fifo_samples", 0U }; Value_file_system _play_underruns_fs { "play_underruns", 0U }; + Value_file_system _enable_input_fs { "enable_input", 1U }; + Value_file_system _enable_output_fs { "enable_output", 1U }; /* WO files */ Value_file_system _halt_input_fs { "halt_input", 0U }; @@ -773,6 +810,18 @@ struct Vfs::Oss_file_system::Local_factory : File_system_factory Audio _audio { _env.env(), _info, _info_fs }; + Genode::Watch_handler _enable_input_handler { + _enable_input_fs, "/enable_input", + _env.alloc(), + *this, + &Vfs::Oss_file_system::Local_factory::_enable_input_changed }; + + Genode::Watch_handler _enable_output_handler { + _enable_output_fs, "/enable_output", + _env.alloc(), + *this, + &Vfs::Oss_file_system::Local_factory::_enable_output_changed }; + Genode::Watch_handler _halt_input_handler { _halt_input_fs, "/halt_input", _env.alloc(), @@ -829,6 +878,18 @@ struct Vfs::Oss_file_system::Local_factory : File_system_factory ** Watch handlers ** ********************/ + void _enable_input_changed() + { + bool enable = (bool)_enable_input_fs.value(); + _audio.enable_input(enable); + } + + void _enable_output_changed() + { + bool enable = (bool)_enable_output_fs.value(); + _audio.enable_output(enable); + } + void _halt_input_changed() { _audio.halt_input(); @@ -988,6 +1049,14 @@ struct Vfs::Oss_file_system::Local_factory : File_system_factory if (node.has_type(Value_file_system::type_name())) { + if (_enable_input_fs.matches(node)) { + return &_enable_input_fs; + } + + if (_enable_output_fs.matches(node)) { + return &_enable_output_fs; + } + if (_halt_input_fs.matches(node)) { return &_halt_input_fs; } @@ -1060,6 +1129,14 @@ class Vfs::Oss_file_system::Compound_file_system : private Local_factory, xml.attribute("name", "format"); }); + xml.node("value", [&] { + xml.attribute("name", "enable_input"); + }); + + xml.node("value", [&] { + xml.attribute("name", "enable_output"); + }); + xml.node("value", [&] { xml.attribute("name", "halt_input"); }); From 3f8bde125434ac8b80015661f15df7dadb7ae625 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Wed, 27 Jul 2022 10:53:43 +0200 Subject: [PATCH 146/354] vbox6: don't call blocking 'read()' to start audio recording Fixes #4580 --- repos/ports/ports/virtualbox6.hash | 2 +- .../ports/src/virtualbox6/patches/audio.patch | 27 +++++++++++++++++++ repos/ports/src/virtualbox6/patches/series | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 repos/ports/src/virtualbox6/patches/audio.patch diff --git a/repos/ports/ports/virtualbox6.hash b/repos/ports/ports/virtualbox6.hash index d2c1ce40bc..9fe7342901 100644 --- a/repos/ports/ports/virtualbox6.hash +++ b/repos/ports/ports/virtualbox6.hash @@ -1 +1 @@ -db7d6d9b9ab32c34fcfb371dfc9e100b208ee982 +b59f4f8ca00b96a40a93f736676f5b4e830cbd01 diff --git a/repos/ports/src/virtualbox6/patches/audio.patch b/repos/ports/src/virtualbox6/patches/audio.patch new file mode 100644 index 0000000000..e9bb749269 --- /dev/null +++ b/repos/ports/src/virtualbox6/patches/audio.patch @@ -0,0 +1,27 @@ +diff --git a/src/virtualbox6/src/VBox/Devices/Audio/DrvHostAudioOss.cpp b/src/virtualbox6/src/VBox/Devices/Audio/DrvHostAudioOss.cpp +index d67f2bb..ea99bee 100644 +--- a/src/virtualbox6/src/VBox/Devices/Audio/DrvHostAudioOss.cpp ++++ b/src/virtualbox6/src/VBox/Devices/Audio/DrvHostAudioOss.cpp +@@ -836,6 +836,13 @@ static DECLCALLBACK(uint32_t) drvHstAudOssHA_StreamGetReadable(PPDMIHOSTAUDIO pI + AssertMsgStmt(cbRet <= cbBuf, ("fragsize*fragments: %d, cbBuf=%#x\n", cbRet, cbBuf), 0); + } + ++ /* ++ * On Genode the 'SNDCTL_DSP_SETTRIGGER' command should have started ++ * the recording. If no recording data arrives because of some error ++ * on the path (for example a crashed driver), the 'read()' call in ++ * the following section would block the VM, which is not desired. ++ */ ++#if 0 + /* + * HACK ALERT! To force the stream to start recording, we read a frame + * here if we get back that there are zero bytes available +@@ -854,7 +861,7 @@ static DECLCALLBACK(uint32_t) drvHstAudOssHA_StreamGetReadable(PPDMIHOSTAUDIO pI + RT_NOREF(cbRead); + LogFunc(("Dummy read for '%s' returns %zd (errno=%d)\n", pStreamOSS->Cfg.szName, cbRead, errno)); + } +- ++#endif + Log4Func(("returns %#x (%u) [cbBuf=%#x]\n", cbRet, cbRet, cbBuf)); + return cbRet; + } diff --git a/repos/ports/src/virtualbox6/patches/series b/repos/ports/src/virtualbox6/patches/series index 5534551873..01f24ee894 100644 --- a/repos/ports/src/virtualbox6/patches/series +++ b/repos/ports/src/virtualbox6/patches/series @@ -9,3 +9,4 @@ rttimer.patch devsvga.patch shaderlib.patch svga.patch +audio.patch From 11b964b759711754aa993d30903c887305ab5a64 Mon Sep 17 00:00:00 2001 From: Peter Krummenacher Date: Mon, 25 Jul 2022 10:00:02 +0200 Subject: [PATCH 147/354] audio_in_session: fix wrong buffer in content Fixes #4573 --- repos/os/include/audio_in_session/audio_in_session.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/os/include/audio_in_session/audio_in_session.h b/repos/os/include/audio_in_session/audio_in_session.h index 8f2cc1f394..c01fe7abd8 100644 --- a/repos/os/include/audio_in_session/audio_in_session.h +++ b/repos/os/include/audio_in_session/audio_in_session.h @@ -80,7 +80,7 @@ class Audio_in::Packet Genode::memcpy(_data, data, (samples > PERIOD ? PERIOD : samples) * SAMPLE_SIZE); if (samples < PERIOD) - Genode::memset(data + samples, 0, (PERIOD - samples) * SAMPLE_SIZE); + Genode::memset(_data + samples, 0, (PERIOD - samples) * SAMPLE_SIZE); } /** From eeb40d0cc21360d3f00d046cd9a20d3507f1f792 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 10 Aug 2022 11:42:55 +0200 Subject: [PATCH 148/354] vbox5_genode_usb_hid_raw: configure static RTC This prevents Warning: clock_gettime(): missing real-time clock log messages. Related to #4561 --- repos/ports/run/vbox5_genode_usb_hid_raw.run | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/repos/ports/run/vbox5_genode_usb_hid_raw.run b/repos/ports/run/vbox5_genode_usb_hid_raw.run index aeed73f926..474bb751ef 100644 --- a/repos/ports/run/vbox5_genode_usb_hid_raw.run +++ b/repos/ports/run/vbox5_genode_usb_hid_raw.run @@ -213,12 +213,15 @@ append config { - + + + 2022-08-10 00:01 + - + From 2e266dfe3c09ce2cc6f4d4086fb57c8f813f91b4 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 10 Aug 2022 13:11:57 +0200 Subject: [PATCH 149/354] vbox5_genode_usb_hid_raw: support --depot-auto-update ... in nested run. --- repos/ports/run/vbox5_genode_usb_hid_raw.run | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/repos/ports/run/vbox5_genode_usb_hid_raw.run b/repos/ports/run/vbox5_genode_usb_hid_raw.run index 474bb751ef..ee50ff7c80 100644 --- a/repos/ports/run/vbox5_genode_usb_hid_raw.run +++ b/repos/ports/run/vbox5_genode_usb_hid_raw.run @@ -239,6 +239,11 @@ puts "--- executing the 'usb_hid_raw' run script to generate the 'usb_hid_raw.is global specs global repositories +set depot_auto_update "" +if {[get_cmd_switch --depot-auto-update]} { + set depot_auto_update "--depot-auto-update" +} + exec -ignorestderr \ $::argv0 \ --genode-dir [genode_dir] \ @@ -248,6 +253,7 @@ exec -ignorestderr \ --repositories "$repositories" \ --depot-dir [depot_dir] \ --depot-user [depot_user] \ + $depot_auto_update \ --cross-dev-prefix "[cross_dev_prefix]" \ --include boot_dir/nova \ --include image/iso \ From cf904e0a5d92fe7c5b467454d7b49870f615ad92 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Mon, 2 Aug 2021 17:17:28 +0200 Subject: [PATCH 150/354] vfs: add append mode to New_file genodelabs/genode#4352 --- repos/os/include/os/vfs.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/repos/os/include/os/vfs.h b/repos/os/include/os/vfs.h index 66cf242681..0fe34ee528 100644 --- a/repos/os/include/os/vfs.h +++ b/repos/os/include/os/vfs.h @@ -683,7 +683,9 @@ class Genode::New_file : Noncopyable Vfs::File_system &_fs; Vfs::Vfs_handle &_handle; - Vfs::Vfs_handle &_init_handle(Directory &dir, Directory::Path const &rel_path) + Vfs::Vfs_handle &_init_handle(Directory &dir, + Directory::Path const &rel_path, + bool append) { /* create compound directory */ { @@ -708,7 +710,11 @@ class Genode::New_file : Noncopyable throw Create_failed(); } - handle_ptr->fs().ftruncate(handle_ptr, 0); + Vfs::Directory_service::Stat stat { }; + if (!append) + handle_ptr->fs().ftruncate(handle_ptr, 0); + else if (handle_ptr->ds().stat(path.string(), stat) == Vfs::Directory_service::STAT_OK) + handle_ptr->seek(stat.size); return *handle_ptr; } @@ -720,10 +726,10 @@ class Genode::New_file : Noncopyable * * \throw Create_failed */ - New_file(Directory &dir, Directory::Path const &path) + New_file(Directory &dir, Directory::Path const &path, bool append = false) : _ep(dir._ep), _alloc(dir._alloc), _fs(dir._fs), - _handle(_init_handle(dir, path)) + _handle(_init_handle(dir, path, append)) { } ~New_file() From 73dad70356fe90df4aa4d98ee7baabbbedf01ac7 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Wed, 1 Dec 2021 18:42:52 +0100 Subject: [PATCH 151/354] trace: add checkpoint event genodelabs/genode#4352 --- repos/base/include/base/trace/events.h | 30 +++++++++++++++++++ repos/base/include/base/trace/policy.h | 17 ++++++----- repos/os/include/trace/policy.h | 17 ++++++----- .../src/lib/trace/policy/div_zero/policy.cc | 6 ++++ .../src/lib/trace/policy/log_output/policy.cc | 5 ++++ repos/os/src/lib/trace/policy/null/policy.cc | 5 ++++ .../src/lib/trace/policy/rpc_name/policy.cc | 5 ++++ repos/os/src/lib/trace/policy/table.cc | 1 + 8 files changed, 70 insertions(+), 16 deletions(-) diff --git a/repos/base/include/base/trace/events.h b/repos/base/include/base/trace/events.h index 0b6f61e48a..b5a084d015 100644 --- a/repos/base/include/base/trace/events.h +++ b/repos/base/include/base/trace/events.h @@ -25,6 +25,7 @@ namespace Genode { namespace Trace { struct Rpc_reply; struct Signal_submit; struct Signal_received; + struct Checkpoint; } } @@ -121,4 +122,33 @@ struct Genode::Trace::Signal_received }; +struct Genode::Trace::Checkpoint +{ + enum Type : unsigned char { + UNDEF = 0x0, + START = 0x1, + END = 0x2, + OBJ_NEW = 0x10, + OBJ_DEL = 0x11, + OBJ_STATE = 0x12, + EXCEPTION = 0xfe, + FAILURE = 0xff + }; + + char const *name; + unsigned long const data; + Type const type; + void *addr; + + Checkpoint(char const *name, unsigned long data, void *addr, Type type=Type::UNDEF) + : name(name), data(data), type(type), addr(addr) + { + Thread::trace(this); + } + + size_t generate(Policy_module &policy, char *dst) const { + return policy.checkpoint(dst, name, data, addr, type); } +}; + + #endif /* _INCLUDE__BASE__TRACE__EVENTS_H_ */ diff --git a/repos/base/include/base/trace/policy.h b/repos/base/include/base/trace/policy.h index 969c7ff062..ea9b514484 100644 --- a/repos/base/include/base/trace/policy.h +++ b/repos/base/include/base/trace/policy.h @@ -31,14 +31,15 @@ namespace Genode { */ struct Genode::Trace::Policy_module { - size_t (*max_event_size) (); - size_t (*log_output) (char *, char const *, size_t); - size_t (*rpc_call) (char *, char const *, Msgbuf_base const &); - size_t (*rpc_returned) (char *, char const *, Msgbuf_base const &); - size_t (*rpc_dispatch) (char *, char const *); - size_t (*rpc_reply) (char *, char const *); - size_t (*signal_submit) (char *, unsigned const); - size_t (*signal_received) (char *, Signal_context const &, unsigned const); + size_t (*max_event_size) (); + size_t (*checkpoint) (char *, char const *, unsigned long, void *, unsigned char); + size_t (*log_output) (char *, char const *, size_t); + size_t (*rpc_call) (char *, char const *, Msgbuf_base const &); + size_t (*rpc_returned) (char *, char const *, Msgbuf_base const &); + size_t (*rpc_dispatch) (char *, char const *); + size_t (*rpc_reply) (char *, char const *); + size_t (*signal_submit) (char *, unsigned const); + size_t (*signal_received) (char *, Signal_context const &, unsigned const); }; #endif /* _INCLUDE__BASE__TRACE__POLICY_H_ */ diff --git a/repos/os/include/trace/policy.h b/repos/os/include/trace/policy.h index 6304c35003..1a2698c6cb 100644 --- a/repos/os/include/trace/policy.h +++ b/repos/os/include/trace/policy.h @@ -21,11 +21,12 @@ namespace Genode { struct Signal_context; } -extern "C" size_t max_event_size (); -extern "C" size_t log_output (char *dst, char const *log_message, size_t len); -extern "C" size_t rpc_call (char *dst, char const *rpc_name, Genode::Msgbuf_base const &); -extern "C" size_t rpc_returned (char *dst, char const *rpc_name, Genode::Msgbuf_base const &); -extern "C" size_t rpc_dispatch (char *dst, char const *rpc_name); -extern "C" size_t rpc_reply (char *dst, char const *rpc_name); -extern "C" size_t signal_submit (char *dst, unsigned const); -extern "C" size_t signal_receive (char *dst, Genode::Signal_context const &, unsigned); +extern "C" size_t max_event_size (); +extern "C" size_t checkpoint (char *dst, char const *name, unsigned long, void *, unsigned char); +extern "C" size_t log_output (char *dst, char const *log_message, size_t len); +extern "C" size_t rpc_call (char *dst, char const *rpc_name, Genode::Msgbuf_base const &); +extern "C" size_t rpc_returned (char *dst, char const *rpc_name, Genode::Msgbuf_base const &); +extern "C" size_t rpc_dispatch (char *dst, char const *rpc_name); +extern "C" size_t rpc_reply (char *dst, char const *rpc_name); +extern "C" size_t signal_submit (char *dst, unsigned const); +extern "C" size_t signal_receive (char *dst, Genode::Signal_context const &, unsigned); diff --git a/repos/os/src/lib/trace/policy/div_zero/policy.cc b/repos/os/src/lib/trace/policy/div_zero/policy.cc index ce34e53a22..a5d57efb7f 100644 --- a/repos/os/src/lib/trace/policy/div_zero/policy.cc +++ b/repos/os/src/lib/trace/policy/div_zero/policy.cc @@ -18,6 +18,12 @@ size_t max_event_size() return MAX_EVENT_SIZE; } + +size_t checkpoint(char *dst, char const *, unsigned long, void *, unsigned char) +{ + return div_zero(); +} + size_t log_output(char *dst, char const *log_message, size_t len) { return div_zero(); diff --git a/repos/os/src/lib/trace/policy/log_output/policy.cc b/repos/os/src/lib/trace/policy/log_output/policy.cc index a0a825f99e..287839cfb7 100644 --- a/repos/os/src/lib/trace/policy/log_output/policy.cc +++ b/repos/os/src/lib/trace/policy/log_output/policy.cc @@ -10,6 +10,11 @@ size_t max_event_size() return MAX_EVENT_SIZE; } +size_t checkpoint(char *dst, char const *, unsigned long, void *, unsigned char) +{ + return 0; +} + size_t log_output(char *dst, char const *log_message, size_t len) { len = min(len, MAX_EVENT_SIZE); diff --git a/repos/os/src/lib/trace/policy/null/policy.cc b/repos/os/src/lib/trace/policy/null/policy.cc index d65c5de9d1..f79e16390f 100644 --- a/repos/os/src/lib/trace/policy/null/policy.cc +++ b/repos/os/src/lib/trace/policy/null/policy.cc @@ -7,6 +7,11 @@ size_t max_event_size() return 0; } +size_t checkpoint(char *dst, char const *, unsigned long, void *, unsigned char) +{ + return 0; +} + size_t log_output(char *dst, char const *log_message, size_t len) { return 0; diff --git a/repos/os/src/lib/trace/policy/rpc_name/policy.cc b/repos/os/src/lib/trace/policy/rpc_name/policy.cc index 0521d92b4c..effeffe4de 100644 --- a/repos/os/src/lib/trace/policy/rpc_name/policy.cc +++ b/repos/os/src/lib/trace/policy/rpc_name/policy.cc @@ -10,6 +10,11 @@ size_t max_event_size() return MAX_EVENT_SIZE; } +size_t checkpoint(char *, char const *, unsigned long, void *, unsigned char) +{ + return 0; +} + size_t log_output(char *dst, char const *log_message, size_t len) { return 0; diff --git a/repos/os/src/lib/trace/policy/table.cc b/repos/os/src/lib/trace/policy/table.cc index 2541f60749..09efbb7d67 100644 --- a/repos/os/src/lib/trace/policy/table.cc +++ b/repos/os/src/lib/trace/policy/table.cc @@ -19,6 +19,7 @@ extern "C" { Genode::Trace::Policy_module policy_jump_table = { max_event_size, + checkpoint, log_output, rpc_call, rpc_returned, From 80a422e590acff6b85fa249bc435771a46c48996 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Wed, 1 Dec 2021 18:47:03 +0100 Subject: [PATCH 152/354] trace: add GENODE_TRACE_CHECKPOINT macros genodelabs/genode#4352 --- repos/base/include/trace/probe.h | 85 ++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 repos/base/include/trace/probe.h diff --git a/repos/base/include/trace/probe.h b/repos/base/include/trace/probe.h new file mode 100644 index 0000000000..6a09ea7084 --- /dev/null +++ b/repos/base/include/trace/probe.h @@ -0,0 +1,85 @@ +/* + * \brief Trace probes + * \author Johannes Schlatow + * \date 2021-12-01 + * + * Convenience macros for creating user-defined trace checkpoints. + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _INCLUDE__TRACE__PROBE_H_ +#define _INCLUDE__TRACE__PROBE_H_ + +#include + +namespace Genode { namespace Trace { + + class Duration + { + private: + + char const *_name; + unsigned long const _data; + + Duration(Duration const &) = delete; + + Duration & operator = (Duration const &) = delete; + + public: + + Duration(char const * name, unsigned long data) + : _name(name), _data(data) + { Checkpoint(_name, _data, nullptr, Checkpoint::Type::START); } + + ~Duration() + { Checkpoint(_name, _data, nullptr, Checkpoint::Type::END); } + }; + +} } + + +/** + * Trace a single checkpoint named after the current function. + * + * The argument 'data' specifies the payload as an unsigned value. + */ +#define GENODE_TRACE_CHECKPOINT(data) \ + Genode::Trace::Checkpoint(__PRETTY_FUNCTION__, (unsigned long)data, nullptr); + + +/** + * Variant of 'GENODE_TRACE_CHECKPOINT' that accepts the name of the checkpoint as argument. + * + * The argument 'data' specifies the payload as an unsigned value. + * The argument 'name' specifies the name of the checkpoint. + */ +#define GENODE_TRACE_CHECKPOINT_NAMED(data, name) \ + Genode::Trace::Checkpoint(name, (unsigned long)data, nullptr); + + +/** + * Trace a pair of checkpoints when entering and leaving the current scope. + * + * The argument 'data' specifies the payload as an unsigned value. + */ +#define GENODE_TRACE_DURATION(data) \ + Genode::Trace::Duration duration(__PRETTY_FUNCTION__, (unsigned long)data); + + +/** + * Variant of 'GENODE_TRACE_DURATION' that accepts the name of the checkpoints as argument. + * + * The argument 'data' specifies the payload as an unsigned value. + * The argument 'name' specifies the names of the checkpoints + */ +#define GENODE_TRACE_DURATION_NAMED(data, name) \ + Genode::Trace::Duration duration(name, (unsigned long)data); + + +#endif /* _INCLUDE__TRACE__PROBE_H_ */ From 086f3efef21ff3f143480ac1d6e90a9a20664ded Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 13 May 2022 13:24:51 +0200 Subject: [PATCH 153/354] trace: add trace_eth_packet event genodelabs/genode#4352 --- repos/base/include/base/trace/events.h | 30 +++++++++++++++++++ repos/base/include/base/trace/policy.h | 1 + repos/os/include/trace/policy.h | 1 + .../src/lib/trace/policy/div_zero/policy.cc | 4 +++ .../src/lib/trace/policy/log_output/policy.cc | 5 ++++ repos/os/src/lib/trace/policy/null/policy.cc | 5 ++++ .../src/lib/trace/policy/rpc_name/policy.cc | 5 ++++ repos/os/src/lib/trace/policy/table.cc | 1 + 8 files changed, 52 insertions(+) diff --git a/repos/base/include/base/trace/events.h b/repos/base/include/base/trace/events.h index b5a084d015..b5d6026174 100644 --- a/repos/base/include/base/trace/events.h +++ b/repos/base/include/base/trace/events.h @@ -26,6 +26,7 @@ namespace Genode { namespace Trace { struct Signal_submit; struct Signal_received; struct Checkpoint; + struct Ethernet_packet; } } @@ -151,4 +152,33 @@ struct Genode::Trace::Checkpoint }; +struct Genode::Trace::Ethernet_packet +{ + enum Direction : char { + RECV = 0x0, + SENT = 0x1 + }; + + char const *name; + Direction direction; + char *data; + size_t length; + + Ethernet_packet(char const *name, Direction direction, char *data, size_t len) + : name(name), direction(direction), data(data), length(len) + { + Thread::trace(this); + } + + Ethernet_packet(char const *name, Direction direction, void *data, size_t len) + : name(name), direction(direction), data((char*)data), length(len) + { + Thread::trace(this); + } + + size_t generate(Policy_module &policy, char *dst) const { + return policy.trace_eth_packet(dst, name, direction == Direction::SENT, data, length); } +}; + + #endif /* _INCLUDE__BASE__TRACE__EVENTS_H_ */ diff --git a/repos/base/include/base/trace/policy.h b/repos/base/include/base/trace/policy.h index ea9b514484..05b8b2dd5a 100644 --- a/repos/base/include/base/trace/policy.h +++ b/repos/base/include/base/trace/policy.h @@ -32,6 +32,7 @@ namespace Genode { struct Genode::Trace::Policy_module { size_t (*max_event_size) (); + size_t (*trace_eth_packet) (char *, char const *, bool, char *, size_t); size_t (*checkpoint) (char *, char const *, unsigned long, void *, unsigned char); size_t (*log_output) (char *, char const *, size_t); size_t (*rpc_call) (char *, char const *, Msgbuf_base const &); diff --git a/repos/os/include/trace/policy.h b/repos/os/include/trace/policy.h index 1a2698c6cb..c387302459 100644 --- a/repos/os/include/trace/policy.h +++ b/repos/os/include/trace/policy.h @@ -22,6 +22,7 @@ namespace Genode { } extern "C" size_t max_event_size (); +extern "C" size_t trace_eth_packet (char *dst, char const *name, bool out, char *data, size_t len); extern "C" size_t checkpoint (char *dst, char const *name, unsigned long, void *, unsigned char); extern "C" size_t log_output (char *dst, char const *log_message, size_t len); extern "C" size_t rpc_call (char *dst, char const *rpc_name, Genode::Msgbuf_base const &); diff --git a/repos/os/src/lib/trace/policy/div_zero/policy.cc b/repos/os/src/lib/trace/policy/div_zero/policy.cc index a5d57efb7f..acc6eeb183 100644 --- a/repos/os/src/lib/trace/policy/div_zero/policy.cc +++ b/repos/os/src/lib/trace/policy/div_zero/policy.cc @@ -18,6 +18,10 @@ size_t max_event_size() return MAX_EVENT_SIZE; } +size_t trace_eth_packet(char *, char const *, bool, char *, size_t) +{ + return 0; +} size_t checkpoint(char *dst, char const *, unsigned long, void *, unsigned char) { diff --git a/repos/os/src/lib/trace/policy/log_output/policy.cc b/repos/os/src/lib/trace/policy/log_output/policy.cc index 287839cfb7..7684adef22 100644 --- a/repos/os/src/lib/trace/policy/log_output/policy.cc +++ b/repos/os/src/lib/trace/policy/log_output/policy.cc @@ -10,6 +10,11 @@ size_t max_event_size() return MAX_EVENT_SIZE; } +size_t trace_eth_packet(char *, char const *, bool, char *, size_t) +{ + return 0; +} + size_t checkpoint(char *dst, char const *, unsigned long, void *, unsigned char) { return 0; diff --git a/repos/os/src/lib/trace/policy/null/policy.cc b/repos/os/src/lib/trace/policy/null/policy.cc index f79e16390f..76fb18c9f6 100644 --- a/repos/os/src/lib/trace/policy/null/policy.cc +++ b/repos/os/src/lib/trace/policy/null/policy.cc @@ -7,6 +7,11 @@ size_t max_event_size() return 0; } +size_t trace_eth_packet(char *, char const *, bool, char *, size_t) +{ + return 0; +} + size_t checkpoint(char *dst, char const *, unsigned long, void *, unsigned char) { return 0; diff --git a/repos/os/src/lib/trace/policy/rpc_name/policy.cc b/repos/os/src/lib/trace/policy/rpc_name/policy.cc index effeffe4de..a1293f43a4 100644 --- a/repos/os/src/lib/trace/policy/rpc_name/policy.cc +++ b/repos/os/src/lib/trace/policy/rpc_name/policy.cc @@ -10,6 +10,11 @@ size_t max_event_size() return MAX_EVENT_SIZE; } +size_t trace_eth_packet(char *, char const *, bool, char *, size_t) +{ + return 0; +} + size_t checkpoint(char *, char const *, unsigned long, void *, unsigned char) { return 0; diff --git a/repos/os/src/lib/trace/policy/table.cc b/repos/os/src/lib/trace/policy/table.cc index 09efbb7d67..e92331d297 100644 --- a/repos/os/src/lib/trace/policy/table.cc +++ b/repos/os/src/lib/trace/policy/table.cc @@ -19,6 +19,7 @@ extern "C" { Genode::Trace::Policy_module policy_jump_table = { max_event_size, + trace_eth_packet, checkpoint, log_output, rpc_call, From cee0c9858cd2dc7f6bdb39d9a529b5ba668cd12a Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Tue, 17 May 2022 13:45:55 +0200 Subject: [PATCH 154/354] trace_buffer: add object() accessor genodelabs/genode#4352 --- repos/base/include/base/trace/buffer.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/base/include/base/trace/buffer.h b/repos/base/include/base/trace/buffer.h index 59222f5e89..4ad84bb640 100644 --- a/repos/base/include/base/trace/buffer.h +++ b/repos/base/include/base/trace/buffer.h @@ -257,6 +257,9 @@ class Genode::Trace::Simple_buffer size_t length() const { return _entry->len; } char const *data() const { return _entry->data; } + template + T const &object() const { return *reinterpret_cast(data()); } + /* return whether entry is valid, i.e. length field is present */ bool last() const { return _entry == 0; } From 810bbc04841c03c36427d2d4897ebbca74947d51 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Wed, 18 May 2022 12:17:40 +0200 Subject: [PATCH 155/354] nic_router: add trace_packets config option genodelabs/genode#4352 --- repos/os/src/server/nic_router/README | 26 +++++++++++++++++-- repos/os/src/server/nic_router/config.xsd | 2 ++ .../os/src/server/nic_router/configuration.cc | 2 ++ .../os/src/server/nic_router/configuration.h | 2 ++ repos/os/src/server/nic_router/domain.cc | 2 ++ repos/os/src/server/nic_router/domain.h | 2 ++ repos/os/src/server/nic_router/interface.cc | 13 ++++++++++ 7 files changed, 47 insertions(+), 2 deletions(-) diff --git a/repos/os/src/server/nic_router/README b/repos/os/src/server/nic_router/README index 942d6ab578..3f37f74e38 100644 --- a/repos/os/src/server/nic_router/README +++ b/repos/os/src/server/nic_router/README @@ -743,7 +743,7 @@ Whether to log router decisions and optional hints. ! ! -! +! Whether to log most important protocol header fields of each packet that is received or sent (ETH, IPv4, ARP, UDP, TCP, DHCP, ICMP). The value @@ -751,7 +751,7 @@ affects all domains without a local value. ! ! -! +! Whether to log each packet drop and the rational behind it. The value affects all domains without a local value. @@ -762,6 +762,28 @@ Whether to log most important changes in the state of a domain (number of interfaces assigned, current IPv4 config). +Tracing +~~~~~~~ + +You can use Genode's TRACE service to capture all packets that traverse the +router. This requires a monitor component such as the trace-recorder component +that provides and activates a corresponding trace buffer and trace policy. +More precisely, packet tracing is realised via the 'trace_eth_packet()' hook +that needs to be implemented by the trace policy. Note that packet tracing must +also be enabled in the router configuration. + +This is how you can configure whether to trace packets (default values shown): + +! +! +! + +If enabled, 'trace_eth_packet()' is called for every packet received or sent by +the router. The attribute in the tag applies only for packets +received and sent by that domain. The attribute in the tag sets the +default value for all tags without a local setting. + + Other configuration attributes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/repos/os/src/server/nic_router/config.xsd b/repos/os/src/server/nic_router/config.xsd index 35fc2975bb..3b46a1d104 100644 --- a/repos/os/src/server/nic_router/config.xsd +++ b/repos/os/src/server/nic_router/config.xsd @@ -171,6 +171,7 @@ + @@ -182,6 +183,7 @@ + diff --git a/repos/os/src/server/nic_router/configuration.cc b/repos/os/src/server/nic_router/configuration.cc index 2c54344b6e..388930f922 100644 --- a/repos/os/src/server/nic_router/configuration.cc +++ b/repos/os/src/server/nic_router/configuration.cc @@ -36,6 +36,7 @@ Configuration::Configuration(Xml_node const node, _verbose_packets { false }, _verbose_packet_drop { false }, _verbose_domain_state { false }, + _trace_packets { false }, _icmp_echo_server { false }, _icmp_type_3_code_on_fragm_ipv4 { 0 }, _dhcp_discover_timeout { 0 }, @@ -116,6 +117,7 @@ Configuration::Configuration(Env &env, _verbose_packets { node.attribute_value("verbose_packets", false) }, _verbose_packet_drop { node.attribute_value("verbose_packet_drop", false) }, _verbose_domain_state { node.attribute_value("verbose_domain_state", false) }, + _trace_packets { node.attribute_value("trace_packets", false) }, _icmp_echo_server { node.attribute_value("icmp_echo_server", true) }, _icmp_type_3_code_on_fragm_ipv4 { _init_icmp_type_3_code_on_fragm_ipv4(node) }, _dhcp_discover_timeout { read_sec_attr(node, "dhcp_discover_timeout_sec", 10) }, diff --git a/repos/os/src/server/nic_router/configuration.h b/repos/os/src/server/nic_router/configuration.h index aa332a3f96..2f157d8bbe 100644 --- a/repos/os/src/server/nic_router/configuration.h +++ b/repos/os/src/server/nic_router/configuration.h @@ -39,6 +39,7 @@ class Net::Configuration bool const _verbose_packets; bool const _verbose_packet_drop; bool const _verbose_domain_state; + bool const _trace_packets; bool const _icmp_echo_server; Icmp_packet::Code const _icmp_type_3_code_on_fragm_ipv4; Genode::Microseconds const _dhcp_discover_timeout; @@ -92,6 +93,7 @@ class Net::Configuration bool verbose_packets() const { return _verbose_packets; } bool verbose_packet_drop() const { return _verbose_packet_drop; } bool verbose_domain_state() const { return _verbose_domain_state; } + bool trace_packets() const { return _trace_packets; } bool icmp_echo_server() const { return _icmp_echo_server; } Icmp_packet::Code icmp_type_3_code_on_fragm_ipv4() const { return _icmp_type_3_code_on_fragm_ipv4; } Genode::Microseconds dhcp_discover_timeout() const { return _dhcp_discover_timeout; } diff --git a/repos/os/src/server/nic_router/domain.cc b/repos/os/src/server/nic_router/domain.cc index 2cede36955..a162527c44 100644 --- a/repos/os/src/server/nic_router/domain.cc +++ b/repos/os/src/server/nic_router/domain.cc @@ -196,6 +196,8 @@ Domain::Domain(Configuration &config, Xml_node const node, Allocator &alloc) config.verbose_packets()) }, _verbose_packet_drop { node.attribute_value("verbose_packet_drop", config.verbose_packet_drop()) }, + _trace_packets { node.attribute_value("trace_packets", + config.trace_packets()) }, _icmp_echo_server { node.attribute_value("icmp_echo_server", config.icmp_echo_server()) }, _use_arp { _node.attribute_value("use_arp", true) }, diff --git a/repos/os/src/server/nic_router/domain.h b/repos/os/src/server/nic_router/domain.h index 376fd582ee..2dfa4f234a 100644 --- a/repos/os/src/server/nic_router/domain.h +++ b/repos/os/src/server/nic_router/domain.h @@ -142,6 +142,7 @@ class Net::Domain : public Domain_base, Genode::size_t _rx_bytes { 0 }; bool const _verbose_packets; bool const _verbose_packet_drop; + bool const _trace_packets; bool const _icmp_echo_server; bool const _use_arp; Genode::Session_label const _label; @@ -236,6 +237,7 @@ class Net::Domain : public Domain_base, bool verbose_packets() const { return _verbose_packets; } bool verbose_packet_drop() const { return _verbose_packet_drop; } + bool trace_packets() const { return _trace_packets; } bool icmp_echo_server() const { return _icmp_echo_server; } bool use_arp() const { return _use_arp; } Genode::Session_label const &label() const { return _label; } diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index c471a30653..77df57ff0d 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1756,6 +1756,12 @@ void Interface::_handle_eth(void *const eth_base, if (local_domain.verbose_packets()) { log("[", local_domain, "] rcv ", eth); } + if (local_domain.trace_packets()) + Genode::Trace::Ethernet_packet(local_domain.name().string(), + Genode::Trace::Ethernet_packet::Direction::RECV, + eth_base, + size_guard.total_size()); + /* try to handle ethernet frame */ try { _handle_eth(eth, size_guard, pkt, local_domain); } catch (Free_resources_and_retry_handle_eth) { @@ -1871,6 +1877,13 @@ void Interface::_send_submit_pkt(Packet_descriptor &pkt, } catch (Size_guard::Exceeded) { log("[", local_domain, "] snd ?"); } } + + if (local_domain.trace_packets()) + Genode::Trace::Ethernet_packet(local_domain.name().string(), + Genode::Trace::Ethernet_packet::Direction::SENT, + pkt_base, + pkt_size); + _source.try_submit_packet(pkt); } From 062881a4846623d3ac467da734890b11d89871ca Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 20 May 2022 15:28:21 +0200 Subject: [PATCH 156/354] trace: add types for ctf tracing genodelabs/genode#4352 --- repos/gems/include/ctf/event_header.h | 45 +++++++++ repos/gems/include/ctf/events/named.h | 34 +++++++ repos/gems/include/ctf/packet_types.h | 133 ++++++++++++++++++++++++++ repos/gems/include/ctf/timestamp.h | 40 ++++++++ repos/gems/recipes/api/ctf/content.mk | 8 ++ repos/gems/recipes/api/ctf/hash | 1 + 6 files changed, 261 insertions(+) create mode 100644 repos/gems/include/ctf/event_header.h create mode 100644 repos/gems/include/ctf/events/named.h create mode 100644 repos/gems/include/ctf/packet_types.h create mode 100644 repos/gems/include/ctf/timestamp.h create mode 100644 repos/gems/recipes/api/ctf/content.mk create mode 100644 repos/gems/recipes/api/ctf/hash diff --git a/repos/gems/include/ctf/event_header.h b/repos/gems/include/ctf/event_header.h new file mode 100644 index 0000000000..3a1bd972b6 --- /dev/null +++ b/repos/gems/include/ctf/event_header.h @@ -0,0 +1,45 @@ +/* + * \brief Generic type for CTF event headers + * \author Johannes Schlatow + * \date 2021-08-03 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CTF__EVENT_HEADER_H_ +#define _CTF__EVENT_HEADER_H_ + +#include +#include +#include + +namespace Ctf { + using namespace Genode::Trace; + + struct Event_header_base; +} + +/** + * Base type for CTF trace events. The event type is identifed by its id. + */ +struct Ctf::Event_header_base +{ + const uint8_t _id; + Timestamp_base _timestamp { (Timestamp_base)Trace::timestamp() }; + + Timestamp_base timestamp() const { return _timestamp; } + void timestamp(Timestamp_base ts) { _timestamp = ts; } + + Event_header_base(uint8_t id) + : _id(id) + { } + +} __attribute__((packed)); + + +#endif /* _CTF__EVENT_HEADER_H_ */ diff --git a/repos/gems/include/ctf/events/named.h b/repos/gems/include/ctf/events/named.h new file mode 100644 index 0000000000..13efdef9ef --- /dev/null +++ b/repos/gems/include/ctf/events/named.h @@ -0,0 +1,34 @@ +/* + * \brief Ctf trace event for logging names + * \author Johannes Schlatow + * \date 2021-08-03 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CTF__EVENTS__NAMED_H_ +#define _CTF__EVENTS__NAMED_H_ + +#include + +namespace Ctf { + struct Named_event; +} + +/** + * Base type for CTF trace events with a string as payload. + */ +struct Ctf::Named_event +{ + char _name[0]; + + Named_event(const char *name, size_t len) { + Genode::copy_cstring(_name, name, len); } +} __attribute__((packed)); + +#endif /* _CTF__EVENTS__NAMED_H_ */ diff --git a/repos/gems/include/ctf/packet_types.h b/repos/gems/include/ctf/packet_types.h new file mode 100644 index 0000000000..5e4d7a6ed8 --- /dev/null +++ b/repos/gems/include/ctf/packet_types.h @@ -0,0 +1,133 @@ +/* + * \brief Packet header and context types + * \author Johannes Schlatow + * \date 2021-08-04 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CTF__PACKET_TYPES_H_ +#define _CTF__PACKET_TYPES_H_ + +#include +#include +#include + +namespace Ctf { + using namespace Genode; + using Genode::Trace::Thread_name; + struct Packet_header; +} + +/** + * Definition of our CTF packet header. A CTF stream may contain multiple + * packets that bundle an arbitrary number of events. In order to reduce the + * payload for every CTF event, we put shared information (such as session and + * thread name) into the packet header. + * + * See https://diamon.org/ctf/ for the CTF spec. + */ +struct Ctf::Packet_header +{ + uint32_t _magic { 0xC1FC1FC1 }; + uint32_t _stream_id { }; + Timestamp_base _timestamp_start { }; + Timestamp_base _timestamp_end { }; + uint32_t _total_length { }; + uint16_t _hdr_length { sizeof(Packet_header) * 8 }; + uint16_t _affinity { }; + uint8_t _priority { }; + char _session_and_thread[0] { }; + + struct Affinity : Register<16> + { + struct Xpos : Bitfield<0,4> { }; + struct Ypos : Bitfield<4,4> { }; + struct Width : Bitfield<8,4> { }; + struct Height : Bitfield<12,4> { }; + }; + + Packet_header(Session_label const &label, + Thread_name const &thread, + Genode::Affinity::Location const &affinity, + unsigned priority, + Genode::size_t buflen, + unsigned streamid=0) + : _stream_id(streamid), + _affinity(Affinity::Xpos::bits((uint16_t)affinity.xpos()) | + Affinity::Ypos::bits((uint16_t)affinity.ypos()) | + Affinity::Width::bits((uint16_t)affinity.width()) | + Affinity::Height::bits((uint16_t)affinity.height())), + _priority((uint8_t)priority) + { + Genode::size_t char_offset = 0; + + if (_hdr_length/8 < buflen) { + Genode::size_t sess_len = Genode::min(label.length(), buflen - _hdr_length/8); + Genode::copy_cstring(&_session_and_thread[char_offset], label.string(), sess_len); + _hdr_length += (uint16_t)(sess_len * 8); + char_offset = sess_len; + } + + if (_hdr_length/8 < buflen) { + Genode::size_t thread_len = Genode::min(thread.length(), buflen - _hdr_length/8); + Genode::copy_cstring(&_session_and_thread[char_offset], thread.string(), thread_len); + _hdr_length += (uint16_t)(thread_len * 8); + } + + _total_length = _hdr_length; + } + + void reset() + { + _total_length = _hdr_length; + _timestamp_start = 0; + _timestamp_end = 0; + } + + /** + * If event fits into provided buffer, update struct with timestamp and + * length of new event. Makes sure that timestamps are monotonically + * increasing and calls the provided functor(char * ptr, Timestamp_base ts), + * where ptr is the target address and ts is the updated timestamp. + */ + template + void append_event(char * buffer, + Genode::size_t bufsz, + Timestamp_base timestamp, + Genode::size_t length, + FUNC && fn) + { + using Ctf::Timestamp; + + /* check whether event fits into buffer */ + if (total_length_bytes()+length > bufsz) + return; + + /* update timestamps */ + if (_timestamp_start == 0) + _timestamp_start = timestamp; + else if (Timestamp::extended() && + Timestamp::Base::get(_timestamp_end) > Timestamp::Base::get(timestamp)) { + /* timer wrapped, increase manually managed offset */ + Timestamp::Extension::set(_timestamp_end, Timestamp::Extension::get(_timestamp_end)+1); + } + Timestamp::Base::set(_timestamp_end, timestamp); + + /* call provided functor with target address and modified timestamp */ + fn(&buffer[total_length_bytes()], _timestamp_end); + + _total_length += (uint32_t)(length * 8); + } + + uint32_t total_length_bytes() const { return _total_length / 8; } + bool empty() const { return _total_length <= _hdr_length; } + +} __attribute__((packed)); + +#endif /* _CTF__PACKET_TYPES_H_ */ diff --git a/repos/gems/include/ctf/timestamp.h b/repos/gems/include/ctf/timestamp.h new file mode 100644 index 0000000000..96bbc7ece7 --- /dev/null +++ b/repos/gems/include/ctf/timestamp.h @@ -0,0 +1,40 @@ +/* + * \brief Generic timestamp for CTF traces + * \author Johannes Schlatow + * \date 2021-08-04 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CTF__TIMESTAMP_H_ +#define _CTF__TIMESTAMP_H_ + +#include +#include + +namespace Ctf { + using namespace Genode; + + /* generic fixed-width timestamp type for different Trace::Timestamp widths */ + template + struct _Timestamp : Register<64> { + static constexpr bool extended() { return PWIDTH < 64; } + + /* define _PWIDTH to get a valid Extension Bitfield even for 64-bit */ + enum { _PWIDTH = PWIDTH < 64 ? PWIDTH : 0 }; + + struct Base : Bitfield<0, PWIDTH> { }; + struct Extension : Bitfield<_PWIDTH, 64-_PWIDTH> { }; + }; + + typedef _Timestamp Timestamp; + + typedef uint64_t __attribute__((aligned(1))) Timestamp_base; +} + +#endif /* _CTF__TIMESTAMP_H_ */ diff --git a/repos/gems/recipes/api/ctf/content.mk b/repos/gems/recipes/api/ctf/content.mk new file mode 100644 index 0000000000..7719c2ad68 --- /dev/null +++ b/repos/gems/recipes/api/ctf/content.mk @@ -0,0 +1,8 @@ +content: include/ctf LICENSE + +include/ctf: + $(mirror_from_rep_dir) + +LICENSE: + cp $(GENODE_DIR)/LICENSE $@ + diff --git a/repos/gems/recipes/api/ctf/hash b/repos/gems/recipes/api/ctf/hash new file mode 100644 index 0000000000..e59df5832b --- /dev/null +++ b/repos/gems/recipes/api/ctf/hash @@ -0,0 +1 @@ +2022-05-11 73fe945a53926f04e8062293aa2c2ce39541fc85 From 758ba3855eb890ceac37b603eb38fb4594a83db3 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 20 May 2022 14:24:15 +0200 Subject: [PATCH 157/354] trace: add types for trace_recorder policies genodelabs/genode#4352 --- .../gems/include/trace_recorder_policy/ctf.h | 30 ++++ .../trace_recorder_policy/ctf_stream0.h | 116 +++++++++++++++ .../include/trace_recorder_policy/event.h | 64 +++++++++ .../include/trace_recorder_policy/pcapng.h | 135 ++++++++++++++++++ .../api/trace_recorder_policy/content.mk | 8 ++ .../recipes/api/trace_recorder_policy/hash | 1 + 6 files changed, 354 insertions(+) create mode 100644 repos/gems/include/trace_recorder_policy/ctf.h create mode 100644 repos/gems/include/trace_recorder_policy/ctf_stream0.h create mode 100644 repos/gems/include/trace_recorder_policy/event.h create mode 100644 repos/gems/include/trace_recorder_policy/pcapng.h create mode 100644 repos/gems/recipes/api/trace_recorder_policy/content.mk create mode 100644 repos/gems/recipes/api/trace_recorder_policy/hash diff --git a/repos/gems/include/trace_recorder_policy/ctf.h b/repos/gems/include/trace_recorder_policy/ctf.h new file mode 100644 index 0000000000..82c3f961e7 --- /dev/null +++ b/repos/gems/include/trace_recorder_policy/ctf.h @@ -0,0 +1,30 @@ +/* + * \brief CTF event base type for the trace recorder + * \author Johannes Schlatow + * \date 2022-05-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _TRACE_RECORDER_POLICY__CTF_H_ +#define _TRACE_RECORDER_POLICY__CTF_H_ + +#include +#include + +namespace Trace_recorder { struct Ctf_event; } + +struct Trace_recorder::Ctf_event : Trace_event, + Ctf::Event_header_base +{ + static Event_type Type() { return Event_type::CTF; } + + Ctf_event(Genode::uint8_t id) : Ctf::Event_header_base(id) { } +} __attribute__((packed)); + +#endif /* _TRACE_RECORDER_POLICY__CTF_H_ */ diff --git a/repos/gems/include/trace_recorder_policy/ctf_stream0.h b/repos/gems/include/trace_recorder_policy/ctf_stream0.h new file mode 100644 index 0000000000..c13d64b271 --- /dev/null +++ b/repos/gems/include/trace_recorder_policy/ctf_stream0.h @@ -0,0 +1,116 @@ +/* + * \brief Stream id 0 + * \author Johannes Schlatow + * \date 2021-08-04 + * + * Defines CTF events for our CTF stream with id 0. This must match the + * metadata file. + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _TRACE_RECORDER_POLICY__CTF_STREAM0_H_ +#define _TRACE_RECORDER_POLICY__CTF_STREAM0_H_ + +#include + +#include +#include + +namespace Ctf { + struct Rpc_call; + struct Rpc_returned; + struct Rpc_dispatch; + struct Rpc_reply; + struct Signal_submit; + struct Signal_receive; + struct Checkpoint; +} + + +struct Ctf::Rpc_call : Trace_recorder::Ctf_event, + Ctf::Named_event +{ + Rpc_call(const char *name, size_t len) + : Trace_recorder::Ctf_event(1), + Named_event(name, len) + { } +} __attribute__((packed)); + + +struct Ctf::Rpc_returned : Trace_recorder::Ctf_event, + Ctf::Named_event +{ + Rpc_returned(const char *name, size_t len) + : Trace_recorder::Ctf_event(2), + Named_event(name, len) + { } +} __attribute__((packed)); + + +struct Ctf::Rpc_dispatch : Trace_recorder::Ctf_event, + Ctf::Named_event +{ + Rpc_dispatch(const char *name, size_t len) + : Trace_recorder::Ctf_event(3), + Named_event(name, len) + { } +} __attribute__((packed)); + + +struct Ctf::Rpc_reply : Trace_recorder::Ctf_event, + Ctf::Named_event +{ + Rpc_reply(const char *name, size_t len) + : Trace_recorder::Ctf_event(4), + Named_event(name, len) + { } +} __attribute__((packed)); + + +struct Ctf::Signal_submit : Trace_recorder::Ctf_event +{ + uint32_t _number; + + Signal_submit(uint32_t number) + : Trace_recorder::Ctf_event(5), + _number(number) + { } +} __attribute__((packed)); + + +struct Ctf::Signal_receive : Trace_recorder::Ctf_event +{ + uint32_t _number; + uint64_t _context; + + Signal_receive(uint32_t number, void* context) + : Trace_recorder::Ctf_event(6), + _number(number), + _context((uint64_t)context) + { } +} __attribute__((packed)); + + +struct Ctf::Checkpoint : Trace_recorder::Ctf_event +{ + uint32_t _data; + uint64_t _addr; + uint8_t _type; + Named_event _named; + + Checkpoint(const char *name, size_t len, uint32_t data, void* addr, uint8_t type) + : Trace_recorder::Ctf_event(7), + _data(data), + _addr((uint64_t)addr), + _type(type), + _named(name, len) + { } +} __attribute__((packed)); + +#endif /* _TRACE_RECORDER_POLICY__CTF_STREAM0_H_ */ diff --git a/repos/gems/include/trace_recorder_policy/event.h b/repos/gems/include/trace_recorder_policy/event.h new file mode 100644 index 0000000000..2b5f50273f --- /dev/null +++ b/repos/gems/include/trace_recorder_policy/event.h @@ -0,0 +1,64 @@ +/* + * \brief Wrapper type for trace events with sub-types + * \author Johannes Schlatow + * \date 2022-05-20 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _TRACE_RECORDER_POLICY__EVENT_H_ +#define _TRACE_RECORDER_POLICY__EVENT_H_ + +#include + +namespace Trace_recorder { + enum Event_type { PCAPNG = 1, CTF }; + + struct Trace_event_base; + + template + struct Trace_event; +} + + +struct Trace_recorder::Trace_event_base +{ + struct Cast_failed : Genode::Exception { }; + + const Event_type _type; + + Trace_event_base(Event_type type) + : _type(type) + { } + + Event_type type() const { return _type; } + + template + T const &event() const + { + if (_type != T::Type()) + throw Cast_failed(); + + return *reinterpret_cast(this); + } + + /* define placement new since construct_at in policy inflates policy size */ + void *operator new(__SIZE_TYPE__, void *p) { return p; } +} __attribute__((packed)); + + +template +struct Trace_recorder::Trace_event : Trace_event_base +{ + Trace_event() + : Trace_event_base(TYPE) + { } + +} __attribute__((packed)); + +#endif /* _TRACE_RECORDER_POLICY__EVENT_H_ */ diff --git a/repos/gems/include/trace_recorder_policy/pcapng.h b/repos/gems/include/trace_recorder_policy/pcapng.h new file mode 100644 index 0000000000..4dfeb82b86 --- /dev/null +++ b/repos/gems/include/trace_recorder_policy/pcapng.h @@ -0,0 +1,135 @@ +/* + * \brief Types used by trace policy for pcapng events + * \author Johannes Schlatow + * \date 2022-05-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _TRACE_RECORDER_POLICY__PCAPNG_H_ +#define _TRACE_RECORDER_POLICY__PCAPNG_H_ + +#include +#include +#include +#include + +namespace Pcapng { + using namespace Genode; + + /* Link type as defined in Interface Description Block */ + enum Link_type { ETHERNET = 1 }; + + struct Interface_name; + struct Traced_packet; +} + +namespace Trace_recorder { + using namespace Genode; + + class Pcapng_event; +}; + + +struct Pcapng::Interface_name +{ + enum : uint8_t { MAX_NAME_LEN = 40 }; + + uint16_t const _link_type; + uint8_t _name_len; + char _name[0] { }; + + Interface_name(Link_type type, bool out, char const *cstr) + : _link_type(type), + _name_len((uint8_t)(Genode::Cstring(cstr, MAX_NAME_LEN-5).length() + 1)) + { + copy_cstring(_name, cstr, _name_len); + if (out) { + copy_cstring(&_name[_name_len-1], "_out", 5); + _name_len += 4; + } else { + copy_cstring(&_name[_name_len-1], "_in", 4); + _name_len += 3; + } + } + + /* length including null-termination */ + uint8_t data_length() const { return _name_len; } + + char const *string() const { return _name; } + +} __attribute__((packed)); + + +/** + * Struct capturing a traced packet. Intended to be easily convertible into an Enhanced_packet_block. + */ +struct Pcapng::Traced_packet +{ + uint32_t _captured_length; + uint32_t _original_length; + uint32_t _packet_data[0] { }; + + Traced_packet(uint32_t packet_size, void *packet_ptr, uint32_t max_captured_length) + : _captured_length(min(max_captured_length, packet_size)), + _original_length(packet_size) + { memcpy(_packet_data, packet_ptr, _captured_length); } + + /* copy constructor */ + Traced_packet(Traced_packet const &packet) + : _captured_length(packet._captured_length), + _original_length(packet._original_length) + { memcpy(_packet_data, packet._packet_data, _captured_length); } + + uint32_t data_length() const { return _captured_length; } + + size_t total_length() const { return sizeof(Traced_packet) + _captured_length; } + +} __attribute__((packed)); + + +/** + * Struct used by trace policy, bundles Timestamp, Interface_name and Traced_packet. + */ +class Trace_recorder::Pcapng_event : public Trace_event +{ + private: + using Interface_name = Pcapng::Interface_name; + using Traced_packet = Pcapng::Traced_packet; + + Trace::Timestamp const _timestamp { Trace::timestamp() }; + Interface_name const _interface; + + /* _interface must be the last member since it has variable size */ + + void *_data() { return (void*)((addr_t)this + sizeof(Pcapng_event) + _interface.data_length()); } + void const *_data() const { return (void*)((addr_t)this + sizeof(Pcapng_event) + _interface.data_length()); } + + public: + + static Event_type Type() { return Event_type::PCAPNG; } + + static size_t max_size(size_t max_capture_len) { + return sizeof(Pcapng_event) + Interface_name::MAX_NAME_LEN + sizeof(Traced_packet) + max_capture_len; } + + Pcapng_event(Pcapng::Link_type type, char const *cstr, bool out, uint32_t packet_sz, void *packet_ptr, uint32_t max_captured_len) + : _interface(type, out, cstr) + { + /* construct Traced_packet after Interface_name */ + construct_at(_data(), packet_sz, packet_ptr, max_captured_len); + } + + Traced_packet const &packet() const { return *reinterpret_cast(_data()); } + Interface_name const &interface() const { return _interface; } + Trace::Timestamp timestamp() const { return _timestamp; } + size_t total_length() const { + return sizeof(Pcapng_event) + _interface.data_length() + packet().total_length(); } + +} __attribute__((packed)); + +#endif /* _TRACE_RECORDER_POLICY__PCAPNG_H_ */ diff --git a/repos/gems/recipes/api/trace_recorder_policy/content.mk b/repos/gems/recipes/api/trace_recorder_policy/content.mk new file mode 100644 index 0000000000..36930d8898 --- /dev/null +++ b/repos/gems/recipes/api/trace_recorder_policy/content.mk @@ -0,0 +1,8 @@ +content: include/trace_recorder_policy LICENSE + +include/trace_recorder_policy: + $(mirror_from_rep_dir) + +LICENSE: + cp $(GENODE_DIR)/LICENSE $@ + diff --git a/repos/gems/recipes/api/trace_recorder_policy/hash b/repos/gems/recipes/api/trace_recorder_policy/hash new file mode 100644 index 0000000000..58d988eea1 --- /dev/null +++ b/repos/gems/recipes/api/trace_recorder_policy/hash @@ -0,0 +1 @@ +2022-05-17-e 58691b64af0e4c77ced434a0f40b00226f143767 From be20b715ca1b27a3f374b83753a51ed1805ed630 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 20 May 2022 14:26:18 +0200 Subject: [PATCH 158/354] trace_recorder: add ctf policy genodelabs/genode#4352 --- .../lib/trace_recorder/policy/ctf0/policy.cc | 80 +++++++++++++++++++ .../lib/trace_recorder/policy/ctf0/target.mk | 5 ++ .../src/lib/trace_recorder/policy/policy.inc | 41 ++++++++++ .../src/lib/trace_recorder/policy/policy.ld | 15 ++++ .../src/lib/trace_recorder/policy/table.cc | 32 ++++++++ 5 files changed, 173 insertions(+) create mode 100644 repos/gems/src/lib/trace_recorder/policy/ctf0/policy.cc create mode 100644 repos/gems/src/lib/trace_recorder/policy/ctf0/target.mk create mode 100644 repos/gems/src/lib/trace_recorder/policy/policy.inc create mode 100644 repos/gems/src/lib/trace_recorder/policy/policy.ld create mode 100644 repos/gems/src/lib/trace_recorder/policy/table.cc diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0/policy.cc b/repos/gems/src/lib/trace_recorder/policy/ctf0/policy.cc new file mode 100644 index 0000000000..a072019b3a --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/ctf0/policy.cc @@ -0,0 +1,80 @@ +#include +#include +#include + +using namespace Genode; +using namespace Ctf; + +enum { MAX_EVENT_SIZE = 64 }; + +size_t max_event_size() +{ + return MAX_EVENT_SIZE; +} + +size_t trace_eth_packet(char *, char const *, bool, char *, size_t) +{ + return 0; +} + +size_t checkpoint(char *dst, char const *name, unsigned long data, void *addr, unsigned char type) +{ + size_t len = strlen(name) + 1; + + new (dst) Checkpoint(name, len, data, addr, type); + + return len + sizeof(Checkpoint); +} + +size_t log_output(char *dst, char const *log_message, size_t len) { + return 0; +} + +size_t rpc_call(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_call(rpc_name, len); + + return len + sizeof(Rpc_call); +} + +size_t rpc_returned(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_returned(rpc_name, len); + + return len + sizeof(Rpc_returned); +} + +size_t rpc_dispatch(char *dst, char const *rpc_name) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_dispatch(rpc_name, len); + + return len + sizeof(Rpc_dispatch); +} + +size_t rpc_reply(char *dst, char const *rpc_name) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_reply(rpc_name, len); + + return len + sizeof(Rpc_reply); +} + +size_t signal_submit(char *dst, unsigned const num) +{ + new (dst) Signal_submit(num); + + return sizeof(Signal_submit); +} + +size_t signal_receive(char *dst, Signal_context const & context, unsigned num) +{ + new (dst) Signal_receive(num, (void*)&context); + return 0; +} diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0/target.mk b/repos/gems/src/lib/trace_recorder/policy/ctf0/target.mk new file mode 100644 index 0000000000..5ca9d7bb90 --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/ctf0/target.mk @@ -0,0 +1,5 @@ +TARGET = ctf0_policy + +TARGET_POLICY = ctf0 + +include $(PRG_DIR)/../policy.inc diff --git a/repos/gems/src/lib/trace_recorder/policy/policy.inc b/repos/gems/src/lib/trace_recorder/policy/policy.inc new file mode 100644 index 0000000000..c26be00471 --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/policy.inc @@ -0,0 +1,41 @@ +# +# \brief Common build rules for creating trace-policy modules +# \author Josef Soentgen +# \date 2013-08-12 +# + +CXX_OPT = -g -ffreestanding -fPIC -fno-exceptions -fno-rtti \ + -nostdinc -nostdlib -MMD + +CXX_OPT += $(CC_CXX_OPT_STD) + +LD_SCRIPT= $(PRG_DIR)/../policy.ld + +-include *.d +-include ../*.d + +table.o: table.cc + $(MSG_COMP)$@ + $(VERBOSE)$(CXX) -c $(CC_MARCH) $(CXX_OPT) $(INCLUDES) $< -o $@ + +policy.o: policy.cc + $(MSG_COMP)$@ + $(VERBOSE)$(CXX) -c $(CC_MARCH) $(CXX_OPT) $(INCLUDES) $< -o $@ + +$(TARGET_POLICY).elf: table.o policy.o + $(MSG_LINK)$@ + $(VERBOSE)$(LD) $(LD_MARCH) -T $(LD_SCRIPT) -Ttext=0 \ + $^ $(shell $(CXX) $(CC_MARCH) -print-libgcc-file-name) -o $@ + +$(INSTALL_DIR)/$(TARGET_POLICY): $(TARGET_POLICY).elf + $(VERBOSE)$(OBJCOPY) -O binary $< $@ + +$(TARGET): $(INSTALL_DIR)/$(TARGET_POLICY) + +clean cleanall: clean_policy + +clean_policy: + $(VERBOSE)$(RM) ../*.o ../*.d *.o *.d $(TARGET_POLICY).elf \ + $(BUILD_BASE_DIR)/bin/$(TARGET_POLICY) + +vpath table.cc $(REP_DIR)/src/lib/trace_recorder/policy diff --git a/repos/gems/src/lib/trace_recorder/policy/policy.ld b/repos/gems/src/lib/trace_recorder/policy/policy.ld new file mode 100644 index 0000000000..4a5e7bbdbb --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/policy.ld @@ -0,0 +1,15 @@ +PHDRS { rw PT_LOAD; } +SECTIONS { + + .text : { + *(.data.rel) /* must be first because it contains policy module header */ + *(.data) + *(.rodata .rodata.*) + *(.text .text.*) + *(.bss) + *(.got.plt) + *(.got) + } : rw + + /DISCARD/ : { *(.*) } +} diff --git a/repos/gems/src/lib/trace_recorder/policy/table.cc b/repos/gems/src/lib/trace_recorder/policy/table.cc new file mode 100644 index 0000000000..e92331d297 --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/table.cc @@ -0,0 +1,32 @@ +/* + * \brief Header of tracing policy module + * \author Norman Feske + * \date 2013-08-15 + */ + +/* + * Copyright (C) 2013-2017 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include + +extern "C" { + + Genode::Trace::Policy_module policy_jump_table = + { + max_event_size, + trace_eth_packet, + checkpoint, + log_output, + rpc_call, + rpc_returned, + rpc_dispatch, + rpc_reply, + signal_submit, + signal_receive + }; +} From 53f576e50e7a9304bc1472211f7b165a52e442ef Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 20 May 2022 14:26:40 +0200 Subject: [PATCH 159/354] trace_recorder: add pcapng policy genodelabs/genode#4352 --- .../trace_recorder/policy/pcapng/policy.cc | 60 +++++++++++++++++++ .../trace_recorder/policy/pcapng/target.mk | 5 ++ 2 files changed, 65 insertions(+) create mode 100644 repos/gems/src/lib/trace_recorder/policy/pcapng/policy.cc create mode 100644 repos/gems/src/lib/trace_recorder/policy/pcapng/target.mk diff --git a/repos/gems/src/lib/trace_recorder/policy/pcapng/policy.cc b/repos/gems/src/lib/trace_recorder/policy/pcapng/policy.cc new file mode 100644 index 0000000000..3d76c23e7f --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/pcapng/policy.cc @@ -0,0 +1,60 @@ +#include +#include + +using namespace Genode; + +enum { MAX_CAPTURE_LEN = 100 }; + + +size_t max_event_size() { + return Trace_recorder::Pcapng_event::max_size(MAX_CAPTURE_LEN); } + + +size_t trace_eth_packet(char *dst, char const *if_name, bool out, char *pkt_data, size_t pkt_len) +{ + using namespace Pcapng; + Trace_recorder::Pcapng_event *e = + new (dst) Trace_recorder::Pcapng_event(Link_type::ETHERNET, if_name, out, pkt_len, pkt_data, MAX_CAPTURE_LEN); + + return e->total_length(); +} + +size_t checkpoint(char *dst, char const *, unsigned long, void *, unsigned char) +{ + return 0; +} + +size_t log_output(char *dst, char const *log_message, size_t len) +{ + return 0; +} + +size_t rpc_call(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + return 0; +} + +size_t rpc_returned(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + return 0; +} + +size_t rpc_dispatch(char *dst, char const *rpc_name) +{ + return 0; +} + +size_t rpc_reply(char *dst, char const *rpc_name) +{ + return 0; +} + +size_t signal_submit(char *dst, unsigned const) +{ + return 0; +} + +size_t signal_receive(char *dst, Signal_context const &, unsigned) +{ + return 0; +} diff --git a/repos/gems/src/lib/trace_recorder/policy/pcapng/target.mk b/repos/gems/src/lib/trace_recorder/policy/pcapng/target.mk new file mode 100644 index 0000000000..ff7affa0cc --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/pcapng/target.mk @@ -0,0 +1,5 @@ +TARGET = pcapng_policy + +TARGET_POLICY = pcapng + +include $(PRG_DIR)/../policy.inc From ef742001e8755a7d135674ec15f19b2118e46ac7 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 20 May 2022 14:33:07 +0200 Subject: [PATCH 160/354] trace_recorder: implementation genodelabs/genode#4352 --- repos/gems/recipes/pkg/trace_recorder/README | 1 + .../gems/recipes/pkg/trace_recorder/archives | 4 + repos/gems/recipes/pkg/trace_recorder/hash | 1 + repos/gems/recipes/pkg/trace_recorder/runtime | 28 +++ .../recipes/raw/trace_recorder/content.mk | 4 + repos/gems/recipes/raw/trace_recorder/hash | 1 + .../recipes/src/trace_recorder/content.mk | 9 + repos/gems/recipes/src/trace_recorder/hash | 1 + .../gems/recipes/src/trace_recorder/used_apis | 8 + .../src/trace_recorder_policy/content.mk | 2 + .../recipes/src/trace_recorder_policy/hash | 1 + .../src/trace_recorder_policy/used_apis | 5 + repos/gems/run/trace_recorder_ctf.run | 175 ++++++++++++++++ repos/gems/run/trace_recorder_pcapng.run | 163 +++++++++++++++ repos/gems/src/app/trace_recorder/README | 56 ++++++ repos/gems/src/app/trace_recorder/backend.h | 57 ++++++ repos/gems/src/app/trace_recorder/config.xsd | 59 ++++++ .../src/app/trace_recorder/ctf/backend.cc | 59 ++++++ .../gems/src/app/trace_recorder/ctf/backend.h | 96 +++++++++ .../gems/src/app/trace_recorder/ctf/metadata | 121 +++++++++++ .../src/app/trace_recorder/ctf/metadata.h | 106 ++++++++++ .../app/trace_recorder/ctf/packet_header.h} | 8 +- .../src/app/trace_recorder/ctf/write_buffer.h | 82 ++++++++ repos/gems/src/app/trace_recorder/main.cc | 77 +++++++ repos/gems/src/app/trace_recorder/monitor.cc | 189 ++++++++++++++++++ repos/gems/src/app/trace_recorder/monitor.h | 148 ++++++++++++++ .../src/app/trace_recorder/named_registry.h | 102 ++++++++++ .../src/app/trace_recorder/pcapng/backend.cc | 136 +++++++++++++ .../src/app/trace_recorder/pcapng/backend.h | 90 +++++++++ .../src/app/trace_recorder/pcapng/block.h | 88 ++++++++ .../pcapng/enhanced_packet_block.h | 81 ++++++++ .../pcapng/interface_description_block.h | 82 ++++++++ .../pcapng/interface_registry.h | 101 ++++++++++ .../src/app/trace_recorder/pcapng/option.h | 69 +++++++ .../pcapng/section_header_block.h | 71 +++++++ .../app/trace_recorder/pcapng/write_buffer.h | 79 ++++++++ repos/gems/src/app/trace_recorder/policy.cc | 33 +++ repos/gems/src/app/trace_recorder/policy.h | 68 +++++++ .../src/app/trace_recorder/subject_info.h | 39 ++++ repos/gems/src/app/trace_recorder/target.mk | 5 + .../app/trace_recorder/timestamp_calibrator.h | 127 ++++++++++++ repos/gems/src/app/trace_recorder/writer.h | 62 ++++++ 42 files changed, 2690 insertions(+), 4 deletions(-) create mode 100644 repos/gems/recipes/pkg/trace_recorder/README create mode 100644 repos/gems/recipes/pkg/trace_recorder/archives create mode 100644 repos/gems/recipes/pkg/trace_recorder/hash create mode 100644 repos/gems/recipes/pkg/trace_recorder/runtime create mode 100644 repos/gems/recipes/raw/trace_recorder/content.mk create mode 100644 repos/gems/recipes/raw/trace_recorder/hash create mode 100644 repos/gems/recipes/src/trace_recorder/content.mk create mode 100644 repos/gems/recipes/src/trace_recorder/hash create mode 100644 repos/gems/recipes/src/trace_recorder/used_apis create mode 100644 repos/gems/recipes/src/trace_recorder_policy/content.mk create mode 100644 repos/gems/recipes/src/trace_recorder_policy/hash create mode 100644 repos/gems/recipes/src/trace_recorder_policy/used_apis create mode 100644 repos/gems/run/trace_recorder_ctf.run create mode 100644 repos/gems/run/trace_recorder_pcapng.run create mode 100644 repos/gems/src/app/trace_recorder/README create mode 100644 repos/gems/src/app/trace_recorder/backend.h create mode 100644 repos/gems/src/app/trace_recorder/config.xsd create mode 100644 repos/gems/src/app/trace_recorder/ctf/backend.cc create mode 100644 repos/gems/src/app/trace_recorder/ctf/backend.h create mode 100644 repos/gems/src/app/trace_recorder/ctf/metadata create mode 100644 repos/gems/src/app/trace_recorder/ctf/metadata.h rename repos/gems/{include/ctf/packet_types.h => src/app/trace_recorder/ctf/packet_header.h} (96%) create mode 100644 repos/gems/src/app/trace_recorder/ctf/write_buffer.h create mode 100644 repos/gems/src/app/trace_recorder/main.cc create mode 100644 repos/gems/src/app/trace_recorder/monitor.cc create mode 100644 repos/gems/src/app/trace_recorder/monitor.h create mode 100644 repos/gems/src/app/trace_recorder/named_registry.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/backend.cc create mode 100644 repos/gems/src/app/trace_recorder/pcapng/backend.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/block.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/enhanced_packet_block.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/interface_description_block.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/interface_registry.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/option.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/section_header_block.h create mode 100644 repos/gems/src/app/trace_recorder/pcapng/write_buffer.h create mode 100644 repos/gems/src/app/trace_recorder/policy.cc create mode 100644 repos/gems/src/app/trace_recorder/policy.h create mode 100644 repos/gems/src/app/trace_recorder/subject_info.h create mode 100644 repos/gems/src/app/trace_recorder/target.mk create mode 100644 repos/gems/src/app/trace_recorder/timestamp_calibrator.h create mode 100644 repos/gems/src/app/trace_recorder/writer.h diff --git a/repos/gems/recipes/pkg/trace_recorder/README b/repos/gems/recipes/pkg/trace_recorder/README new file mode 100644 index 0000000000..4c6233b377 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_recorder/README @@ -0,0 +1 @@ +Trace recorder for collecting continuous traces in file system. diff --git a/repos/gems/recipes/pkg/trace_recorder/archives b/repos/gems/recipes/pkg/trace_recorder/archives new file mode 100644 index 0000000000..15ce2383f4 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_recorder/archives @@ -0,0 +1,4 @@ +_/src/trace_recorder_policy +_/src/trace_recorder +_/raw/trace_recorder +_/src/vfs diff --git a/repos/gems/recipes/pkg/trace_recorder/hash b/repos/gems/recipes/pkg/trace_recorder/hash new file mode 100644 index 0000000000..74b75c363c --- /dev/null +++ b/repos/gems/recipes/pkg/trace_recorder/hash @@ -0,0 +1 @@ +2022-05-11 b0ff8e7876af3b8bd5fcf7d4055290d029e29198 diff --git a/repos/gems/recipes/pkg/trace_recorder/runtime b/repos/gems/recipes/pkg/trace_recorder/runtime new file mode 100644 index 0000000000..ac1937b812 --- /dev/null +++ b/repos/gems/recipes/pkg/trace_recorder/runtime @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/gems/recipes/raw/trace_recorder/content.mk b/repos/gems/recipes/raw/trace_recorder/content.mk new file mode 100644 index 0000000000..aee25ae047 --- /dev/null +++ b/repos/gems/recipes/raw/trace_recorder/content.mk @@ -0,0 +1,4 @@ +content: metadata + +metadata: + cp $(REP_DIR)/src/app/trace_recorder/ctf/$@ $@ diff --git a/repos/gems/recipes/raw/trace_recorder/hash b/repos/gems/recipes/raw/trace_recorder/hash new file mode 100644 index 0000000000..4d5fe455a4 --- /dev/null +++ b/repos/gems/recipes/raw/trace_recorder/hash @@ -0,0 +1 @@ +2022-05-11 5e78bddea021b50315ea907a1cd003162439da22 diff --git a/repos/gems/recipes/src/trace_recorder/content.mk b/repos/gems/recipes/src/trace_recorder/content.mk new file mode 100644 index 0000000000..b922f72a76 --- /dev/null +++ b/repos/gems/recipes/src/trace_recorder/content.mk @@ -0,0 +1,9 @@ +MIRROR_FROM_REP_DIR := src/app/trace_recorder + +content: $(MIRROR_FROM_REP_DIR) LICENSE + +$(MIRROR_FROM_REP_DIR): + $(mirror_from_rep_dir) + +LICENSE: + cp $(GENODE_DIR)/LICENSE $@ diff --git a/repos/gems/recipes/src/trace_recorder/hash b/repos/gems/recipes/src/trace_recorder/hash new file mode 100644 index 0000000000..d7866bc6f8 --- /dev/null +++ b/repos/gems/recipes/src/trace_recorder/hash @@ -0,0 +1 @@ +2022-05-11 2cc9c248476c5b323740496cc1da0bf4fdbae1f9 diff --git a/repos/gems/recipes/src/trace_recorder/used_apis b/repos/gems/recipes/src/trace_recorder/used_apis new file mode 100644 index 0000000000..0652c7ef28 --- /dev/null +++ b/repos/gems/recipes/src/trace_recorder/used_apis @@ -0,0 +1,8 @@ +base +os +so +vfs +ctf +rtc_session +trace +trace_recorder_policy diff --git a/repos/gems/recipes/src/trace_recorder_policy/content.mk b/repos/gems/recipes/src/trace_recorder_policy/content.mk new file mode 100644 index 0000000000..efd6f92d7f --- /dev/null +++ b/repos/gems/recipes/src/trace_recorder_policy/content.mk @@ -0,0 +1,2 @@ +SRC_DIR = src/lib/trace_recorder/policy +include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/gems/recipes/src/trace_recorder_policy/hash b/repos/gems/recipes/src/trace_recorder_policy/hash new file mode 100644 index 0000000000..63238dc288 --- /dev/null +++ b/repos/gems/recipes/src/trace_recorder_policy/hash @@ -0,0 +1 @@ +2022-05-17 2c7fca33754a0cb26bc494a276cb285cdb6650d7 diff --git a/repos/gems/recipes/src/trace_recorder_policy/used_apis b/repos/gems/recipes/src/trace_recorder_policy/used_apis new file mode 100644 index 0000000000..b55b67f02f --- /dev/null +++ b/repos/gems/recipes/src/trace_recorder_policy/used_apis @@ -0,0 +1,5 @@ +base +os +ctf +trace +trace_recorder_policy diff --git a/repos/gems/run/trace_recorder_ctf.run b/repos/gems/run/trace_recorder_ctf.run new file mode 100644 index 0000000000..4310428a11 --- /dev/null +++ b/repos/gems/run/trace_recorder_ctf.run @@ -0,0 +1,175 @@ +assert_spec linux + +# check that babeltrace2 is present +set babeltrace_missing [catch { + spawn babeltrace2 -V + expect { + {Babeltrace 2.*} { } + eof { return } + timeout { return } + } +}] + +if {$babeltrace_missing} { + puts "\nPlease install babeltrace2 on your host system." + exit 1; +} + +build { server/lx_fs } + +create_boot_directory + +import_from_depot \ + [depot_user]/src/[base_src] \ + [depot_user]/src/init \ + [depot_user]/src/libc \ + [depot_user]/src/rom_logger \ + [depot_user]/src/report_rom \ + [depot_user]/src/vfs \ + [depot_user]/src/dummy_rtc_drv \ + [depot_user]/src/trace_recorder \ + [depot_user]/raw/trace_recorder \ + [depot_user]/src/trace_recorder_policy \ + [depot_user]/src/dynamic_rom + +install_config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +exec rm -rf bin/fs +exec mkdir -p bin/fs + +build_boot_image { lx_fs + fs } + +append qemu_args " -nographic " + +run_genode_until {Enabled ctf writer for init -> rom_logger -> ep} 20 +set spawn_id [output_spawn_id] +run_genode_until {} 60 $spawn_id + +# trace file has non-zero size +exec test -s bin/fs/0-0-0\ 0\:0\:0/init/rom_logger/ep + +# check generated trace by reading CTF trace as fast as possible using a dummy output +exec babeltrace2 bin/fs/0-0-0\ 0\:0\:0/init/rom_logger --output-format=dummy diff --git a/repos/gems/run/trace_recorder_pcapng.run b/repos/gems/run/trace_recorder_pcapng.run new file mode 100644 index 0000000000..27d6770b7c --- /dev/null +++ b/repos/gems/run/trace_recorder_pcapng.run @@ -0,0 +1,163 @@ +assert_spec linux + +# check that python-pcapng is present +set python_pcapng_missing [catch { + spawn -noecho sh -c "echo \"import pcapng\" | python" + expect { + {No module} { return } + {not found} { return } + eof { } + } +}] + +if {$python_pcapng_missing} { + puts "\nPlease install python-pcapng on your host system." + exit 1; +} + +build { server/lx_fs app/ping } + +create_boot_directory + +import_from_depot \ + [depot_user]/src/[base_src] \ + [depot_user]/src/init \ + [depot_user]/src/libc \ + [depot_user]/src/nic_router \ + [depot_user]/src/vfs \ + [depot_user]/src/linux_rtc_drv \ + [depot_user]/src/trace_recorder \ + [depot_user]/raw/trace_recorder \ + [depot_user]/src/trace_recorder_policy \ + [depot_user]/src/dynamic_rom + +install_config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +exec rm -rf bin/fs +exec mkdir -p bin/fs/ + +build_boot_image { lx_fs + fs + ping } + +append qemu_args " -nographic " + +run_genode_until {Enabled pcapng writer for init -> nic_router -> ep} 15 +set spawn_id [output_spawn_id] + +run_genode_until {.*child "ping" exited with exit value 0.*} 60 $spawn_id + +set pcap_file [exec find bin/fs -name nic_router.pcapng] + +# trace file has non-zero size? +exec test -s $pcap_file + +# create python script for pcapng parsing +set fd [open [run_dir]/genode/check_pcapng.py "w"] +puts $fd { +import sys +import pcapng + +with open(sys.argv[1], "rb") as fp: + scanner = pcapng.FileScanner(fp) + for block in pcapng.FileScanner(fp): + pass +} +close $fd + +# check generated trace by python script +exec python [run_dir]/genode/check_pcapng.py $pcap_file + diff --git a/repos/gems/src/app/trace_recorder/README b/repos/gems/src/app/trace_recorder/README new file mode 100644 index 0000000000..47c3ef5990 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/README @@ -0,0 +1,56 @@ +The trace recorder uses Genode's trace session to insert trace policies and +periodically process the trace buffers to record continuous traces in a file +system. The trace recorder comprises multiple backends that produce different +output formats. + +An examplary configuration is shown below: + +! +! +! +! +! +! + +The mandatory argument 'period_ms' specifies the trace-buffer sampling period +in milliseconds. The 'enable' attribute activates trace recording. +Whenever the 'enable' attribute is toggled from "no" to "yes", a new directory +is created (using the real-time clock) to record a new set of traces. + +The '' node can contain an arbitray number of '' nodes by which +the plugin determines what components and threads are traced. +The specified 'label_suffix', 'label_prefix' and/or 'label' attributes are +matched against the component labels. By default, all threads of the matching +component(s) will be traced. The mandatory 'policy' attribute specifies the name +of the trace policy to be applied to the matching threads. + +Every '' node must contain at least one sub-node specifying what +backend(s) shall be used for trace output. Currently, the following backends are +available: + +:'ctf': + Produces CTF (common trace format) traces of component interactions + and checkpoints. These traces can be processed with babeltrace or + visualised with TraceCompass. Note that the ctf backend opens a ROM + session "metadata" that is used as a blueprint for the + [https://diamon.org/ctf/ - CTF metadata file] created with the trace + files. Currently, only the frequency of the specified clock is adapted. + The metadata file is required for deserialisation of trace data. + +:'pcapng': + Captures packets (e.g. Ethernet packets) in a pcapng file that can be read + by wireshark, for instance. + + +The '' node may take the following optional attributes: + +:'enable': Enables/starts tracing (default: 'no') + +:'target_root': Sets the target root directory for trace output. + + +Furthermore, the '' nodes may take the following optional attributes: + +:'thread': Restricts the tracing to a certain thread of the matching component(s). + +:'buffer': Sets the size of the trace buffer (default: '64K'). diff --git a/repos/gems/src/app/trace_recorder/backend.h b/repos/gems/src/app/trace_recorder/backend.h new file mode 100644 index 0000000000..0dbb4ac1dc --- /dev/null +++ b/repos/gems/src/app/trace_recorder/backend.h @@ -0,0 +1,57 @@ +/* + * \brief Factory base for creating writers + * \author Johannes Schlatow + * \date 2022-05-11 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _BACKEND_H_ +#define _BACKEND_H_ + +/* local includes */ +#include +#include + +namespace Trace_recorder { + class Backend_base; + + using Backends = Named_registry; +} + + +class Trace_recorder::Backend_base : Backends::Element +{ + protected: + friend class Backends::Element; + friend class Avl_node; + friend class Avl_tree; + + public: + + using Name = Backends::Element::Name; + using Backends::Element::name; + using Backends::Element::Element; + + Backend_base(Backends & registry, Name const &name) + : Backends::Element(registry, name) + { } + + virtual ~Backend_base() { } + + /*************** + ** Interface ** + ***************/ + + virtual Writer_base &create_writer(Genode::Allocator &, + Genode::Registry &, + Directory &, + Directory::Path const &) = 0; +}; + +#endif /* _BACKEND_H_ */ diff --git a/repos/gems/src/app/trace_recorder/config.xsd b/repos/gems/src/app/trace_recorder/config.xsd new file mode 100644 index 0000000000..737dc5bac3 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/config.xsd @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/gems/src/app/trace_recorder/ctf/backend.cc b/repos/gems/src/app/trace_recorder/ctf/backend.cc new file mode 100644 index 0000000000..ad1188d4fd --- /dev/null +++ b/repos/gems/src/app/trace_recorder/ctf/backend.cc @@ -0,0 +1,59 @@ +/* + * \brief CTF backend + * \author Johannes Schlatow + * \date 2022-05-11 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include + +using namespace Ctf; + +void Writer::start_iteration(Directory &root, + Directory::Path const &path, + ::Subject_info const &info) +{ + _file_path = Directory::join(path, info.thread_name()); + + try { + _dst_file.construct(root, _file_path, true); + + /* initialise packet header */ + _packet_buffer.init_header(info); + } + catch (New_file::Create_failed) { + error("Could not create file."); } +} + +void Writer::process_event(Trace_recorder::Trace_event_base const &trace_event, size_t length) +{ + if (!_dst_file.constructed()) return; + + if (trace_event.type() != Trace_recorder::Event_type::CTF) return; + + try { + /* write to file if buffer is full */ + if (_packet_buffer.bytes_remaining() < length) + _packet_buffer.write_to_file(*_dst_file, _file_path); + + _packet_buffer.add_event(trace_event.event(), length - sizeof(Trace_event_base)); + + } + catch (Buffer::Buffer_too_small) { + error("Packet buffer overflow. (Trace buffer wrapped during read?)"); } +} + +void Writer::end_iteration() +{ + /* write buffer to file */ + _packet_buffer.write_to_file(*_dst_file, _file_path); + + _dst_file.destruct(); +} diff --git a/repos/gems/src/app/trace_recorder/ctf/backend.h b/repos/gems/src/app/trace_recorder/ctf/backend.h new file mode 100644 index 0000000000..77dd6596d1 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/ctf/backend.h @@ -0,0 +1,96 @@ +/* + * \brief CTF backend + * \author Johannes Schlatow + * \date 2021-08-02 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CTF__BACKEND_H_ +#define _CTF__BACKEND_H_ + +/* local includes */ +#include +#include +#include +#include + +#include +#include + +namespace Ctf { + using namespace Trace_recorder; + + using Genode::Directory; + using Genode::New_file; + + using Buffer = Write_buffer<32*1024>; + + class Backend; + class Writer; +} + + +class Ctf::Writer : public Trace_recorder::Writer_base +{ + private: + Buffer &_packet_buffer; + Constructible _dst_file { }; + Directory::Path _file_path { }; + + public: + Writer(Genode::Registry ®istry, Buffer &packet_buffer) + : Writer_base(registry), + _packet_buffer(packet_buffer) + { } + + virtual void start_iteration(Directory &, + Directory::Path const &, + ::Subject_info const &) override; + + virtual void process_event(Trace_recorder::Trace_event_base const &, Genode::size_t) override; + + virtual void end_iteration() override; +}; + + +class Ctf::Backend : Trace_recorder::Backend_base +{ + private: + + Attached_rom_dataspace _metadata_rom; + Metadata _metadata; + + Buffer _packet_buf { }; + + public: + + Backend(Env &env, Timestamp_calibrator const &ts_calibrator, Backends &backends) + : Backend_base(backends, "ctf"), + _metadata_rom(env, "metadata"), + _metadata(_metadata_rom, ts_calibrator.ticks_per_second()) + { } + + Writer_base &create_writer(Genode::Allocator &alloc, + Genode::Registry ®istry, + Directory &root, + Directory::Path const &path) override + { + /* copy metadata file while adapting clock declaration */ + Directory::Path metadata_path { Directory::join(path, "metadata") }; + if (!root.file_exists(metadata_path)) { + New_file metadata_file { root, metadata_path }; + _metadata.write_file(metadata_file); + } + + return *new (alloc) Writer(registry, _packet_buf); + } +}; + + +#endif /* _CTF__BACKEND_H_ */ diff --git a/repos/gems/src/app/trace_recorder/ctf/metadata b/repos/gems/src/app/trace_recorder/ctf/metadata new file mode 100644 index 0000000000..2e314f6ce2 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/ctf/metadata @@ -0,0 +1,121 @@ +/* CTF 1.8 */ + +typealias integer { size = 8; align = 8; signed = false; } := uint8_t; +typealias uint8_t := char; +typealias integer { size = 16; align = 8; signed = false; } := uint16_t; +typealias integer { size = 32; align = 8; signed = false; } := uint32_t; +typealias integer { size = 64; align = 8; signed = false; } := uint64_t; +typealias integer { size = 4; align = 1; signed = false; } := uint4_t; + +trace { + major = 1; + minor = 8; + uuid = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"; + byte_order = le; + packet.header := struct { + uint32_t magic; + uint32_t stream_id; + }; +}; + +clock { + name = "monotonic"; + freq = 1000000000; /* Frequency, in Hz (DO NOT REMOVE) */ +}; + +typealias integer { + size = 64; align = 8; signed = false; + map = clock.monotonic.value; +} := uint64_tsc_t; + +struct packet_context { + uint64_tsc_t timestamp_begin; + uint64_tsc_t timestamp_end; + uint32_t packet_size; + uint16_t _hdrsz; + uint4_t xpos; + uint4_t ypos; + uint4_t width; + uint4_t height; + uint8_t priority; + string session_label; + string thread_name; +}; + +struct event_header { + uint8_t id; + uint64_tsc_t timestamp; +} align(8); + +stream { + id = 0; + event.header := struct event_header; + packet.context := struct packet_context; +}; + +event { + name = "Rpc_call"; + id = 1; + stream_id = 0; + fields := struct { + string _name; + }; +}; + +event { + name = "Rpc_returned"; + id = 2; + stream_id = 0; + fields := struct { + string _name; + }; +}; + +event { + name = "Rpc_dispatch"; + id = 3; + stream_id = 0; + fields := struct { + string _name; + }; +}; + +event { + name = "Rpc_reply"; + id = 4; + stream_id = 0; + fields := struct { + string _name; + }; +}; + +event { + name = "Signal_submit"; + id = 5; + stream_id = 0; + fields := struct { + uint32_t _number; + }; +}; + +event { + name = "Signal_receive"; + id = 6; + stream_id = 0; + fields := struct { + uint32_t _number; + uint64_t _context; + }; +}; + +event { + name = "Checkpoint"; + id = 7; + stream_id = 0; + fields := struct { + uint32_t _data; + uint64_t _addr; + uint8_t _type; + string _name; + }; +}; diff --git a/repos/gems/src/app/trace_recorder/ctf/metadata.h b/repos/gems/src/app/trace_recorder/ctf/metadata.h new file mode 100644 index 0000000000..e4978afa06 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/ctf/metadata.h @@ -0,0 +1,106 @@ +/* + * \brief Metadata file writer + * \author Johannes Schlatow + * \date 2021-12-02 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CTF__METADATA_H_ +#define _CTF__METADATA_H_ + +#include +#include +#include + +namespace Ctf { + using namespace Genode; + + class Metadata; +} + +class Ctf::Metadata +{ + private: + Attached_rom_dataspace &_metadata_rom; + uint64_t _timestamp_freq; + + template + bool _with_metadata_rom(PROLOGUE && prologue, + EPILOGUE && epilogue) const + { + using Token = Genode::Token; + char const * rom_start = _metadata_rom.local_addr(); + size_t const rom_size = _metadata_rom.size(); + + Token token { rom_start, rom_size }; + + for (; token; token = token.next()) { + if (token.type() == Token::IDENT) { + if (token.matches("freq") && token.len() == 4) { + + prologue(rom_start, token.next().start() - rom_start); + + token = token.next_after("\n"); + + /* find null termination */ + char const * rom_end = token.start(); + for (; rom_end < rom_start+rom_size && rom_end && *rom_end; rom_end++); + + epilogue(token.start(), rom_end - token.start()); + + return true; + } + } + } + + error("Error parsing metadata ROM. Could not find 'freq' definition."); + return false; + } + + public: + + Metadata(Attached_rom_dataspace & metadata_rom, uint64_t freq) + : _metadata_rom(metadata_rom), + _timestamp_freq(freq) + { } + + void write_file(Genode::New_file & dst) const + { + using namespace Genode; + + bool write_error = false; + + auto write = [&] (char const *str) + { + if (dst.append(str, strlen(str)) != New_file::Append_result::OK) + write_error = true; + }; + Buffered_output<32, decltype(write)> output(write); + + _with_metadata_rom( + /* prologue, up to 'freq' */ + [&] (char const * start, size_t len) { + if (dst.append(start, len) != New_file::Append_result::OK) + write_error = true; + + print(output, " = ", _timestamp_freq, ";\n"); + }, + /* epilogue, everything after '\n' */ + [&] (char const * start, size_t len) { + if (dst.append(start, len) != New_file::Append_result::OK) + write_error = true; + }); + + if (write_error) + error("Write to 'metadata' failed"); + } +}; + + +#endif /* _CTF__METADATA_H_ */ diff --git a/repos/gems/include/ctf/packet_types.h b/repos/gems/src/app/trace_recorder/ctf/packet_header.h similarity index 96% rename from repos/gems/include/ctf/packet_types.h rename to repos/gems/src/app/trace_recorder/ctf/packet_header.h index 5e4d7a6ed8..1dfeaef220 100644 --- a/repos/gems/include/ctf/packet_types.h +++ b/repos/gems/src/app/trace_recorder/ctf/packet_header.h @@ -1,5 +1,5 @@ /* - * \brief Packet header and context types + * \brief Packet header * \author Johannes Schlatow * \date 2021-08-04 */ @@ -11,8 +11,8 @@ * under the terms of the GNU Affero General Public License version 3. */ -#ifndef _CTF__PACKET_TYPES_H_ -#define _CTF__PACKET_TYPES_H_ +#ifndef _CTF__PACKET_HEADER_H_ +#define _CTF__PACKET_HEADER_H_ #include #include @@ -130,4 +130,4 @@ struct Ctf::Packet_header } __attribute__((packed)); -#endif /* _CTF__PACKET_TYPES_H_ */ +#endif /* _CTF__PACKET_HEADER_H_ */ diff --git a/repos/gems/src/app/trace_recorder/ctf/write_buffer.h b/repos/gems/src/app/trace_recorder/ctf/write_buffer.h new file mode 100644 index 0000000000..5ee76f3122 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/ctf/write_buffer.h @@ -0,0 +1,82 @@ +/* + * \brief Convenience helper for creating a CTF packet + * \author Johannes Schlatow + * \date 2021-08-06 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _CTF__WRITE_BUFFER_H_ +#define _CTF__WRITE_BUFFER_H_ + +/* local includes */ +#include +#include + +/* Genode includes */ +#include +#include + +namespace Ctf { + template + class Write_buffer; +} + +template +class Ctf::Write_buffer +{ + public: + struct Buffer_too_small : Genode::Exception { }; + + private: + char _buffer[BUFSIZE] { }; + + Packet_header &_header() { return *(Packet_header*)_buffer; } + + public: + + void init_header(::Subject_info const &info) + { + construct_at(_buffer, + info.session_label(), + info.thread_name(), + info.affinity(), + info.priority(), + BUFSIZE); + } + + void add_event(Ctf::Event_header_base const &event, Genode::size_t length) + { + _header().append_event(_buffer, BUFSIZE, + event.timestamp(), length, + [&] (char * ptr, Timestamp_base ts) + { + /* copy event into buffer */ + memcpy(ptr, &event, length); + + /* update timestamp */ + ((Event_header_base *)ptr)->timestamp(ts); + }); + } + + void write_to_file(Genode::New_file &dst, Genode::Directory::Path const &path) + { + if (_header().empty()) + return; + + if (dst.append(_buffer, _header().total_length_bytes()) != New_file::Append_result::OK) + error("Write error for ", path); + + _header().reset(); + } + + Genode::size_t bytes_remaining() { return BUFSIZE - _header().total_length_bytes(); } +}; + + +#endif /* _CTF__WRITE_BUFFER_H_ */ diff --git a/repos/gems/src/app/trace_recorder/main.cc b/repos/gems/src/app/trace_recorder/main.cc new file mode 100644 index 0000000000..7650f3e18b --- /dev/null +++ b/repos/gems/src/app/trace_recorder/main.cc @@ -0,0 +1,77 @@ +/* + * \brief Record traces and store in file system + * \author Johannes Schlatow + * \date 2022-05-09 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include + +/* Genode includes */ +#include +#include +#include + +namespace Trace_recorder { + using namespace Genode; + + struct Main; +} + + +class Trace_recorder::Main +{ + private: + Env &_env; + + Heap _heap { _env.ram(), _env.rm() }; + Monitor _monitor { _env, _heap }; + + Attached_rom_dataspace _config_rom { _env, "config" }; + + Signal_handler
_config_handler { _env.ep(), *this, &Main::_handle_config }; + + bool _enabled { false }; + + void _handle_config(); + + public: + + Main(Env & env) + : _env(env) + { + _config_rom.sigh(_config_handler); + + _handle_config(); + } +}; + + +void Trace_recorder::Main::_handle_config() +{ + _config_rom.update(); + + bool old_enabled { _enabled }; + + _enabled = _config_rom.xml().attribute_value("enable", false); + + if (old_enabled == _enabled) { + warning("Config update postponed. Need to toggle 'enable' attribute."); + return; + } + + if (_enabled) + _monitor.start(_config_rom.xml()); + else + _monitor.stop(); +} + + +void Component::construct(Genode::Env &env) { static Trace_recorder::Main main(env); } diff --git a/repos/gems/src/app/trace_recorder/monitor.cc b/repos/gems/src/app/trace_recorder/monitor.cc new file mode 100644 index 0000000000..f10cc016d3 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/monitor.cc @@ -0,0 +1,189 @@ +/* + * \brief Frontend for controlling the TRACE session + * \author Johannes Schlatow + * \date 2022-05-09 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include "monitor.h" + +using namespace Genode; + +Directory::Path Trace_recorder::Monitor::Trace_directory::subject_path(::Subject_info const &info) +{ + typedef Path Label_path; + + Label_path label_path = path_from_label(info.session_label().string()); + Directory::Path subject_path(Directory::join(_path, label_path.string())); + + return subject_path; +} + + +void Trace_recorder::Monitor::Attached_buffer::process_events(Trace_directory &trace_directory) +{ + /* start iteration for every writer */ + _writers.for_each([&] (Writer_base &writer) { + writer.start_iteration(trace_directory.root(), + trace_directory.subject_path(info()), + info()); + }); + + /* iterate entries and pass each entry to every writer */ + _buffer.for_each_new_entry([&] (Trace::Buffer::Entry &entry) { + if (entry.length() == 0) + return true; + + _writers.for_each([&] (Writer_base &writer) { + writer.process_event(entry.object(), entry.length()); + }); + + return true; + }); + + /* end iteration for every writer */ + _writers.for_each([&] (Writer_base &writer) { writer.end_iteration(); }); +} + + +Session_policy Trace_recorder::Monitor::_session_policy(Trace::Subject_info const &info, Xml_node config) +{ + Session_label const label(info.session_label()); + Session_policy policy(label, config); + + /* must have policy attribute */ + if (!policy.has_attribute("policy")) + throw Session_policy::No_policy_defined(); + + if (policy.has_attribute("thread")) + if (policy.attribute_value("thread", Trace::Thread_name()) != info.thread_name()) + throw Session_policy::No_policy_defined(); + + return policy; +} + + +void Trace_recorder::Monitor::_handle_timeout() +{ + _trace_buffers.for_each([&] (Attached_buffer &buf) { + buf.process_events(*_trace_directory); + }); +} + + +void Trace_recorder::Monitor::start(Xml_node config) +{ + stop(); + + /* create new trace directory */ + _trace_directory.construct(_env, _alloc, config, _rtc); + + /* find matching subjects according to config and start tracing */ + _trace.for_each_subject_info([&] (Trace::Subject_id const &id, + Trace::Subject_info const &info) { + try { + /* skip dead subjects */ + if (info.state() == Trace::Subject_info::DEAD) + return; + + /* check if there is a matching policy in the XML config */ + Session_policy session_policy = _session_policy(info, config); + + if (!session_policy.has_attribute("policy")) + return; + + Number_of_bytes buffer_sz = + session_policy.attribute_value("buffer", Number_of_bytes(DEFAULT_BUFFER_SIZE)); + + /* find and assign policy; create/insert if not present */ + Policy::Name const policy_name = session_policy.attribute_value("policy", Policy::Name()); + bool create = true; + _policies.apply(policy_name, [&] (Policy & policy) { + _trace.trace(id, policy.id(), buffer_sz); + create = false; + }); + + /* create policy if it did not exist */ + if (create) { + Policy &policy = *new (_alloc) Policy(_env, _trace, policy_name, _policies); + _trace.trace(id, policy.id(), buffer_sz); + } + + log("Inserting trace policy \"", policy_name, "\" into ", + info.session_label(), " -> ", info.thread_name()); + + /* attach and remember trace buffer */ + Attached_buffer &buffer = *new (_alloc) Attached_buffer(_trace_buffers, + _env, + _trace.buffer(id), + info, + id); + + /* create and register writers at trace buffer */ + session_policy.for_each_sub_node([&] (Xml_node & node) { + bool present = false; + _backends.apply(node.type(), [&] (Backend_base &backend) { + backend.create_writer(_alloc, + buffer.writers(), + _trace_directory->root(), + _trace_directory->subject_path(buffer.info())); + present = true; + }); + + if (!present) + error("No writer available for <", node.type(), "/>."); + else + log("Enabled ", node.type(), " writer for ", info.session_label(), + " -> ", info.thread_name()); + }); + } + catch (Session_policy::No_policy_defined) { return; } + }); + + /* register timeout */ + unsigned period_ms { 0 }; + if (!config.has_attribute("period_ms")) + error("missing XML attribute 'period_ms'"); + else + period_ms = config.attribute_value("period_ms", period_ms); + + _timer.trigger_periodic(period_ms * 1000); +} + + +void Trace_recorder::Monitor::stop() +{ + _timer.trigger_periodic(0); + + _trace_buffers.for_each([&] (Attached_buffer &buf) { + try { + /* stop tracing */ + _trace.pause(buf.subject_id()); + } catch (Trace::Nonexistent_subject) { } + + /* read remaining events from buffers */ + buf.process_events(*_trace_directory); + + /* destroy writers */ + buf.writers().for_each([&] (Writer_base &writer) { + destroy(_alloc, &writer); + }); + + /* destroy buffer */ + destroy(_alloc, &buf); + + try { + /* detach buffer */ + _trace.free(buf.subject_id()); + } catch (Trace::Nonexistent_subject) { } + }); + + _trace_directory.destruct(); +} diff --git a/repos/gems/src/app/trace_recorder/monitor.h b/repos/gems/src/app/trace_recorder/monitor.h new file mode 100644 index 0000000000..64b5511bff --- /dev/null +++ b/repos/gems/src/app/trace_recorder/monitor.h @@ -0,0 +1,148 @@ +/* + * \brief Frontend for controlling the TRACE session + * \author Johannes Schlatow + * \date 2022-05-09 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _MONITOR_H_ +#define _MONITOR_H_ + +/* local includes */ +#include +#include +#include +#include +#include +#include + +/* Genode includes */ +#include +#include +#include +#include +#include + +namespace Trace_recorder { + using namespace Genode; + + class Monitor; +} + +class Trace_recorder::Monitor +{ + private: + enum { DEFAULT_BUFFER_SIZE = 64 * 1024 }; + enum { TRACE_SESSION_RAM = 1024 * 1024 }; + enum { TRACE_SESSION_ARG_BUFFER = 128 * 1024 }; + + class Trace_directory + { + private: + Root_directory _root; + Directory::Path _path; + + public: + + static Directory::Path root_from_config(Xml_node &config) { + return config.attribute_value("target_root", Directory::Path("/")); } + + Trace_directory(Env &env, + Allocator &alloc, + Xml_node &config, + Rtc::Connection &rtc) + : _root(env, alloc, config.sub_node("vfs")), + _path(Directory::join(root_from_config(config), rtc.current_time())) + { }; + + Directory &root() { return _root; } + Directory::Path subject_path(::Subject_info const &info); + }; + + class Attached_buffer + { + private: + + Env &_env; + Trace_buffer _buffer; + Registry::Element _element; + Subject_info _info; + Trace::Subject_id _subject_id; + Registry _writers { }; + + public: + + Attached_buffer(Registry ®istry, + Genode::Env &env, + Genode::Dataspace_capability ds, + Trace::Subject_info const &info, + Trace::Subject_id id) + : _env(env), + _buffer(*((Trace::Buffer*)_env.rm().attach(ds))), + _element(registry, *this), + _info(info), + _subject_id(id) + { } + + ~Attached_buffer() + { + _env.rm().detach(_buffer.address()); + } + + void process_events(Trace_directory &); + + Registry &writers() { return _writers; } + + Subject_info const &info() const { return _info; } + Trace::Subject_id const subject_id() const { return _subject_id; } + }; + + Env &_env; + Allocator &_alloc; + Registry _trace_buffers { }; + Policies _policies { }; + Backends _backends { }; + Constructible _trace_directory { }; + + Rtc::Connection _rtc { _env }; + Timer::Connection _timer { _env }; + Trace::Connection _trace { _env, + TRACE_SESSION_RAM, + TRACE_SESSION_ARG_BUFFER, + 0 }; + + Signal_handler _timeout_handler { _env.ep(), + *this, + &Monitor::_handle_timeout }; + + Timestamp_calibrator _ts_calibrator { _env, _rtc, _timer }; + + /* built-in backends */ + Ctf::Backend _ctf_backend { _env, _ts_calibrator, _backends }; + Pcapng::Backend _pcapng_backend { _alloc, _ts_calibrator, _backends }; + + /* methods */ + Session_policy _session_policy(Trace::Subject_info const &info, Xml_node config); + void _handle_timeout(); + + public: + + Monitor(Env &env, Allocator &alloc) + : _env(env), + _alloc(alloc) + { + _timer.sigh(_timeout_handler); + } + + void start(Xml_node config); + void stop(); +}; + + +#endif /* _MONITOR_H_ */ diff --git a/repos/gems/src/app/trace_recorder/named_registry.h b/repos/gems/src/app/trace_recorder/named_registry.h new file mode 100644 index 0000000000..51e29f98b1 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/named_registry.h @@ -0,0 +1,102 @@ +/* + * \brief Utility for finding objecs by name + * \author Norman Feske + * \date 2021-11-11 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _NAMED_REGISTRY_H_ +#define _NAMED_REGISTRY_H_ + +#include +#include +#include + +namespace Trace_recorder { + using namespace Genode; + + template class Named_registry; + + template + static inline bool operator > (String const &s1, String const &s2) + { + return strcmp(s1.string(), s2.string()) > 0; + } +} + +template +class Trace_recorder::Named_registry : Noncopyable +{ + private: + + Avl_tree _tree { }; + + public: + + class Element : private Avl_node + { + public: + + using Name = Genode::String<64>; + Name const name; + + private: + + Named_registry &_registry; + + bool higher(T const *other) const { return name > other->name; } + + friend class Avl_tree; + friend class Avl_node; + friend class Named_registry; + + static T *_matching_sub_tree(T &curr, Name const &name) + { + typename Avl_node::Side side = (curr.name > name); + + return curr.Avl_node::child(side); + } + + public: + + Element(Named_registry ®istry, Name const &name) + : + name(name), _registry(registry) + { + _registry._tree.insert(this); + } + + ~Element() + { + _registry._tree.remove(this); + } + }; + + template + void apply(typename Element::Name const &name, FN && fn) + { + T *curr_ptr = _tree.first(); + for (;;) { + if (!curr_ptr) + return; + + if (curr_ptr->name == name) { + fn(*curr_ptr); + return; + } + + curr_ptr = Element::_matching_sub_tree(*curr_ptr, name); + } + } + + template + void for_each(FN && fn) { _tree.for_each(fn); } +}; + +#endif /* _NAMED_REGISTRY_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/backend.cc b/repos/gems/src/app/trace_recorder/pcapng/backend.cc new file mode 100644 index 0000000000..20f5da2ca2 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/backend.cc @@ -0,0 +1,136 @@ +/* + * \brief PCAPNG backend + * \author Johannes Schlatow + * \date 2022-05-13 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include +#include +#include +#include + +using namespace Pcapng; +using Append_error = Buffer::Append_error; +using Append_result = Buffer::Append_result; +using Pcapng_event = Trace_recorder::Pcapng_event; + + +void Writer::start_iteration(Directory &root, + Directory::Path const &path, + ::Subject_info const &) +{ + /* write to '${path}.pcapng */ + Path pcap_file { path }; + pcap_file.append(".pcapng"); + + _file_path = Directory::Path(pcap_file.string()); + + /* append to file */ + try { + _dst_file.construct(root, _file_path, true); + + _interface_registry.clear(); + _buffer.clear(); + _buffer.append(); + _empty_section = true; + } + catch (New_file::Create_failed) { + error("Could not create file."); } +} + + +void Writer::process_event(Trace_recorder::Trace_event_base const &trace_event, size_t length) +{ + if (!_dst_file.constructed()) return; + + if (trace_event.type() != Trace_recorder::Event_type::PCAPNG) return; + + /* event is of type Pcapng::Trace_event */ + Pcapng_event const &event = trace_event.event(); + + /* map interface name to id of interface description block (IDB) */ + unsigned id = 0; + bool buffer_full = false; + _interface_registry.from_name(event.interface(), + [&] (Interface const &iface) { + /* IDB alread exists */ + id = iface.id(); + }, + [&] (Interface_name const &if_name, unsigned if_id) { /* IDB must be created */ + id = if_id; + Append_result result = + _buffer.append(if_name, + Enhanced_packet_block::MAX_CAPTURE_LENGTH); + + result.with_error([&] (Append_error err) { + switch (err) + { + case Append_error::OUT_OF_MEM: + /* non-error, write to file and retry */ + buffer_full = true; + break; + case Append_error::OVERFLOW: + error("Interface_description_block exceeds its MAX_SIZE"); + break; + } + }); + return !buffer_full; + } + ); + + /* add enhanced packet block to buffer */ + if (!buffer_full) { + uint64_t us_since_epoch = _ts_calibrator.epoch_from_timestamp_in_us(event.timestamp()); + Append_result result = _buffer.append(id, event.packet(), us_since_epoch); + + result.with_error([&] (Append_error err) { + switch (err) + { + case Append_error::OUT_OF_MEM: + /* non-error, write to file and retry */ + buffer_full = true; + break; + case Append_error::OVERFLOW: + error("Enhanced_packet_block exceeds its MAX_SIZE"); + break; + } + }); + } + + /* write to file if buffer is full and process current event again */ + if (buffer_full) { + _buffer.write_to_file(*_dst_file, _file_path); + process_event(event, length); + } + else { + _empty_section = false; + } +} + + +void Writer::end_iteration() +{ + /* write buffer to file */ + if (!_empty_section) + _buffer.write_to_file(*_dst_file, _file_path); + + _buffer.clear(); + _dst_file.destruct(); +} + + +Trace_recorder::Writer_base &Backend::create_writer(Genode::Allocator &alloc, + Genode::Registry ®istry, + Directory &, + Directory::Path const &) +{ + return *new (alloc) Writer(registry, _interface_registry, _buffer, _ts_calibrator); +} diff --git a/repos/gems/src/app/trace_recorder/pcapng/backend.h b/repos/gems/src/app/trace_recorder/pcapng/backend.h new file mode 100644 index 0000000000..957b6d1590 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/backend.h @@ -0,0 +1,90 @@ +/* + * \brief PCAPNG backend + * \author Johannes Schlatow + * \date 2022-05-13 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__BACKEND_H_ +#define _PCAPNG__BACKEND_H_ + +/* local includes */ +#include +#include +#include +#include + +/* Genode includes */ +#include + +namespace Pcapng { + using namespace Trace_recorder; + + using Genode::Directory; + using Genode::New_file; + + using Buffer = Write_buffer<32*1024>; + + class Backend; + class Writer; +} + + +class Pcapng::Writer : public Trace_recorder::Writer_base +{ + private: + Interface_registry &_interface_registry; + Buffer &_buffer; + Timestamp_calibrator const &_ts_calibrator; + Constructible _dst_file { }; + Directory::Path _file_path { }; + bool _empty_section { false }; + + public: + Writer(Genode::Registry ®istry, Interface_registry &interface_registry, Buffer &buffer, Timestamp_calibrator const &ts_calibrator) + : Writer_base(registry), + _interface_registry(interface_registry), + _buffer(buffer), + _ts_calibrator(ts_calibrator) + { } + + virtual void start_iteration(Directory &, + Directory::Path const &, + ::Subject_info const &) override; + + virtual void process_event(Trace_recorder::Trace_event_base const &, Genode::size_t) override; + + virtual void end_iteration() override; +}; + + +class Pcapng::Backend : Trace_recorder::Backend_base +{ + private: + + Interface_registry _interface_registry; + Buffer _buffer { }; + Timestamp_calibrator const &_ts_calibrator; + + public: + + Backend(Allocator &alloc, Timestamp_calibrator const &ts_calibrator, Backends &backends) + : Backend_base(backends, "pcapng"), + _interface_registry(alloc), + _ts_calibrator(ts_calibrator) + { } + + Writer_base &create_writer(Genode::Allocator &, + Genode::Registry &, + Directory &, + Directory::Path const &) override; +}; + + +#endif /* _PCAPNG__BACKEND_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/block.h b/repos/gems/src/app/trace_recorder/pcapng/block.h new file mode 100644 index 0000000000..c621f864bb --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/block.h @@ -0,0 +1,88 @@ +/* + * \brief Generic type for PCAPNG blocks + * \author Johannes Schlatow + * \date 2022-05-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__BLOCK_H_ +#define _PCAPNG__BLOCK_H_ + +/* Genode includes */ +#include + +namespace Pcapng { + struct Block_base; + + template + struct Block; +} + +struct Pcapng::Block_base +{ + /** + * Layout: ----- 32-bit ----- + * | Type | + * ------------------ + * | Length | + * ------------------ + * | ... | + * ------------------ + * | Length | + * ------------------ + */ + + uint32_t const _type; + uint32_t _length { 0 }; + + static constexpr uint32_t padded_size(uint32_t hdr_sz) + { + /* add padding to 4-byte boundary */ + const uint32_t hdr_sz_padded = Genode::align_addr(hdr_sz, 2); + + return hdr_sz_padded; + } + + static constexpr uint32_t block_size(uint32_t sz) + { + return padded_size(sz) + sizeof(uint32_t); + } + + Block_base(uint32_t type) + : _type(type) + { } + + void commit(uint32_t hdr_sz) + { + const uint32_t hdr_sz_padded = padded_size(hdr_sz); + + _length = hdr_sz_padded + sizeof(uint32_t); + + /* store length also after payload to support backward navigation */ + ((uint32_t*)this)[hdr_sz_padded/4] = _length; + } + + bool has_type(uint32_t type) const { return _type == type; } + uint32_t size() const { return _length; } + +} __attribute__((packed)); + + +template +struct Pcapng::Block : Pcapng::Block_base +{ + Block() + : Block_base(TYPE_ID) + { } + + static uint32_t type() { return TYPE_ID; }; + +} __attribute__((packed)); + +#endif /* _PCAPNG__BLOCK_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/enhanced_packet_block.h b/repos/gems/src/app/trace_recorder/pcapng/enhanced_packet_block.h new file mode 100644 index 0000000000..f9ec1fdd25 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/enhanced_packet_block.h @@ -0,0 +1,81 @@ +/* + * \brief Enhanced packet block + * \author Johannes Schlatow + * \date 2022-05-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__ENHANCED_PACKET_BLOCK_H_ +#define _PCAPNG__ENHANCED_PACKET_BLOCK_H_ + +/* local includes */ +#include + +/* Genode includes */ +#include + +namespace Pcapng { + using namespace Genode; + + struct Enhanced_packet_block; +} + + +/* converts Traced_packet into a Pcapng block structure */ +struct Pcapng::Enhanced_packet_block : Block<0x6> +{ + /** + * Layout: -------- 32-bit ------- + * | 0x00000006 | + * ----------------------- + * | Length | + * ----------------------- + * | Interface ID | + * ----------------------- + * | Timestamp High | + * ----------------------- + * | Timestamp Low | + * ----------------------- + * | Captured Length | + * ----------------------- + * | Original Length | + * ----------------------- + * | Packet Data | + * | ... | + * | (padded) | + * ----------------------- + * | Length | + * ----------------------- + */ + + uint32_t _interface_id; + uint32_t _timestamp_high; + uint32_t _timestamp_low; + Traced_packet _data; + + enum { + MAX_CAPTURE_LENGTH = 1600, + MAX_SIZE = block_size(sizeof(Block_base) + + sizeof(_interface_id) + + sizeof(_timestamp_high) + + sizeof(_timestamp_low) + + sizeof(Traced_packet) + + MAX_CAPTURE_LENGTH) + }; + + Enhanced_packet_block(uint32_t interface_id, Traced_packet const &packet, uint64_t timestamp) + : _interface_id(interface_id), + _timestamp_high((uint32_t)(timestamp >> 32)), + _timestamp_low(timestamp & 0xFFFFFFFF), + _data(packet) + { commit(sizeof(Enhanced_packet_block) + _data.data_length()); } + +} __attribute__((packed)); + +#endif /* _PCAPNG__ENHANCED_PACKET_BLOCK_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/interface_description_block.h b/repos/gems/src/app/trace_recorder/pcapng/interface_description_block.h new file mode 100644 index 0000000000..55ac4e7b3e --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/interface_description_block.h @@ -0,0 +1,82 @@ +/* + * \brief Interface description block + * \author Johannes Schlatow + * \date 2022-05-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__INTERFACE_DESCRIPTION_BLOCK_H_ +#define _PCAPNG__INTERFACE_DESCRIPTION_BLOCK_H_ + +/* local includes */ +#include +#include + +/* genode includes */ +#include + +namespace Pcapng { + using namespace Genode; + + struct Interface_description_block; +} + + +struct Pcapng::Interface_description_block : Block<0x1> +{ + /** + * Layout: -------- 32-bit ------- + * | 0x00000001 | + * ----------------------- + * | Length | + * ----------------------- + * | LinkType | Reserved | + * ----------------------- + * | SnapLen | + * ----------------------- + * | 0x0002 | NameLen | + * ----------------------- + * | Name | + * | ... | + * | (padded) | + * ----------------------- + * | 0x0001 | 0x0000 | + * ----------------------- + * | Length | + * ----------------------- + */ + + uint16_t const _link_type; + uint16_t const _reserved { 0 }; + uint32_t _snaplen; + uint32_t _data[0] { }; + + enum { + MAX_SIZE = block_size(sizeof(Block_base) + + Interface_name::MAX_NAME_LEN + + sizeof(_link_type) + + sizeof(_reserved) + + sizeof(_snaplen) + + sizeof(Option_ifname) + + sizeof(Option_end)) + }; + + Interface_description_block(Interface_name const &name, uint32_t snaplen) + : _link_type(name._link_type), + _snaplen(snaplen) + { + Option_ifname &opt_ifname = *construct_at(&_data[0], name); + Option_end &opt_end = *construct_at (&_data[opt_ifname.total_length()/4]); + + commit((uint32_t)sizeof(Interface_description_block) + opt_ifname.total_length() + opt_end.total_length()); + } + +} __attribute__((packed)); + +#endif /* _PCAPNG__INTERFACE_DESCRIPTION_BLOCK_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/interface_registry.h b/repos/gems/src/app/trace_recorder/pcapng/interface_registry.h new file mode 100644 index 0000000000..de1063cbf8 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/interface_registry.h @@ -0,0 +1,101 @@ +/* + * \brief Registry for storing interfaces description blocks + * \author Johannes Schlatow + * \date 2022-05-16 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__INTERFACE_REGISTRY_H_ +#define _PCAPNG__INTERFACE_REGISTRY_H_ + +/* local includes */ +#include +#include + +namespace Pcapng { + using namespace Trace_recorder; + using namespace Genode; + + class Interface; + class Interface_registry; +} + + +class Pcapng::Interface +{ + public: + + using Name = String; + + private: + + Name const _name; + unsigned const _id; + + Registry::Element _element; + + public: + + Interface(Name const &name, unsigned id, Registry ®istry) + : _name(name), + _id(id), + _element(registry, *this) + { } + + /************* + * Accessors * + *************/ + + unsigned id() const { return _id; } + Name const &name() const { return _name; } +}; + + +class Pcapng::Interface_registry : private Registry +{ + private: + + unsigned _next_id { 0 }; + Allocator &_alloc; + + public: + + Interface_registry(Allocator &alloc) + : _alloc(alloc) + { } + + /* apply to existing Interface or create new one */ + template + void from_name(Interface_name const &name, FUNC_EXISTS && fn_exists, FUNC_NEW && fn_new) + { + bool found = false; + for_each([&] (Interface const &iface) { + if (iface.name() == name.string()) { + found = true; + fn_exists(iface); + } + }); + + /* create new interface */ + if (!found) { + if (fn_new(name, _next_id)) + new (_alloc) Interface(Interface::Name(name.string()), _next_id++, *this); + } + } + + void clear() + { + for_each([&] (Interface &iface) { destroy(_alloc, &iface); }); + + _next_id = 0; + } +}; + + +#endif /* _PCAPNG__INTERFACE_REGISTRY_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/option.h b/repos/gems/src/app/trace_recorder/pcapng/option.h new file mode 100644 index 0000000000..38addc84ad --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/option.h @@ -0,0 +1,69 @@ +/* + * \brief Option fields + * \author Johannes Schlatow + * \date 2022-05-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__OPTION_H_ +#define _PCAPNG__OPTION_H_ + +#include + +namespace Pcapng { + using namespace Genode; + + template + struct Option; + + struct Option_ifname; + struct Option_end; +} + +template +struct Pcapng::Option +{ + uint16_t _type { TYPE }; + uint16_t _length; + uint32_t _data[0]; + + static uint16_t padded_size(uint16_t sz) { + return (uint16_t)align_addr((uint32_t)sz, 2); } + + Option(uint16_t length) + : _length(length) + { } + + template + T *data() { return (T*)_data; } + + uint16_t total_length() const { return padded_size(sizeof(Option) + _length); } +} __attribute__((packed)); + + +struct Pcapng::Option_end : Option<1> +{ + Option_end() : Option(0) { } +} __attribute__((packed)); + + +struct Pcapng::Option_ifname : Option<2> +{ + static uint16_t padded_size(Interface_name const &name) { + return (uint16_t)align_addr((uint32_t)name.data_length() - 1, 2); } + + Option_ifname(Interface_name const &name) + : Option((uint16_t)(name.data_length()-1)) + { + /* copy string leaving out null-termination */ + memcpy(data(), name.string(), name.data_length()-1); + } +} __attribute__((packed)); + +#endif /* _PCAPNG__OPTION_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/section_header_block.h b/repos/gems/src/app/trace_recorder/pcapng/section_header_block.h new file mode 100644 index 0000000000..4bec4917bc --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/section_header_block.h @@ -0,0 +1,71 @@ +/* + * \brief Section header block + * \author Johannes Schlatow + * \date 2022-05-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__SECTION_HEADER_BLOCK_H_ +#define _PCAPNG__SECTION_HEADER_BLOCK_H_ + +/* local includes */ +#include + +namespace Pcapng { + using namespace Genode; + + struct Section_header_block; +} + + +struct Pcapng::Section_header_block : Block<0x0A0D0D0A> +{ + /** + * Layout: ----- 32-bit ---- + * | 0x0A0D0D0A | + * ----------------- + * | Length | + * ----------------- + * | 0x1A2B3C4D | + * ----------------- + * | Major | Minor | + * ----------------- + * | SectionLen Hi | + * ----------------- + * | SectionLen Lo | + * ----------------- + * | Length | + * ----------------- + */ + + uint32_t const _byte_order_magic { 0x1A2B3C4D }; + uint16_t const _major_version { 1 }; + uint16_t const _minor_version { 0 }; + uint64_t const _section_length { 0xFFFFFFFFFFFFFFFF }; /* unspecified */ + + enum : size_t { + MAX_SIZE = block_size(sizeof(Block_base) + + sizeof(_byte_order_magic) + + sizeof(_major_version) + + sizeof(_minor_version) + + sizeof(_section_length)) + }; + + Section_header_block() + { commit(sizeof(Section_header_block)); } + + /** + * XXX instead of using an unspecified section length, we could add an + * interface similar to Ctf::Packet_header for append sub-blocks and + * keeping track of the length field. + */ + +} __attribute__((packed)); + +#endif /* _PCAPNG__SECTION_HEADER_BLOCK_H_ */ diff --git a/repos/gems/src/app/trace_recorder/pcapng/write_buffer.h b/repos/gems/src/app/trace_recorder/pcapng/write_buffer.h new file mode 100644 index 0000000000..e7c0f34bd8 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/pcapng/write_buffer.h @@ -0,0 +1,79 @@ +/* + * \brief Convenience helper for batching pcapng blocks before writing to file + * \author Johannes Schlatow + * \date 2022-05-16 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _PCAPNG__WRITE_BUFFER_H_ +#define _PCAPNG__WRITE_BUFFER_H_ + +/* Genode includes */ +#include +#include + +namespace Pcapng +{ + using namespace Genode; + + template + class Write_buffer; +} + +template +class Pcapng::Write_buffer +{ + public: + + enum class Append_error { OUT_OF_MEM, OVERFLOW }; + struct Append_ok { }; + using Append_result = Attempt; + + private: + + size_t _total_length { 0 }; + char _buffer[BUFSIZE] { }; + + public: + + template + Append_result append(ARGS &&... args) + { + if (T::MAX_SIZE > BUFSIZE || _total_length > BUFSIZE - T::MAX_SIZE) + return Append_error::OUT_OF_MEM; + + void *ptr = &_buffer[_total_length]; + + T const &block = *construct_at(ptr, args...); + + if (block.size() > T::MAX_SIZE) { + error("block size of ", block.size(), " exceeds reserved size ", (unsigned)T::MAX_SIZE); + return Append_error::OVERFLOW; + } + + _total_length += block.size(); + + return Append_ok(); + } + + void write_to_file(Genode::New_file &dst, Directory::Path const &path) + { + if (_total_length == 0) + return; + + if (dst.append(_buffer, _total_length) != New_file::Append_result::OK) + error("Write error for ", path); + + clear(); + } + + void clear() { _total_length = 0; } +}; + +#endif /* _PCAPNG__WRITE_BUFFER_H_ */ diff --git a/repos/gems/src/app/trace_recorder/policy.cc b/repos/gems/src/app/trace_recorder/policy.cc new file mode 100644 index 0000000000..03bd389a42 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/policy.cc @@ -0,0 +1,33 @@ +/* + * \brief Installs and maintains a tracing policy + * \author Johannes Schlatow + * \date 2022-05-10 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +/* local includes */ +#include + +using namespace Genode; + +Trace_recorder::Policy::Policy(Env &env, + Trace::Connection &trace, + Policy::Name const &name, + Policies ®istry) +: + Policies::Element(registry, name), + _env(env), _trace(trace), _rom(env, name.string()) +{ + Dataspace_capability dst_ds = _trace.policy(_id); + void *dst = _env.rm().attach(dst_ds); + void *src = _env.rm().attach(_ds); + memcpy(dst, src, _size); + _env.rm().detach(dst); + _env.rm().detach(src); +} diff --git a/repos/gems/src/app/trace_recorder/policy.h b/repos/gems/src/app/trace_recorder/policy.h new file mode 100644 index 0000000000..1c7737b870 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/policy.h @@ -0,0 +1,68 @@ +/* + * \brief Installs and maintains a tracing policy + * \author Johannes Schlatow + * \date 2022-05-10 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _POLICY_H_ +#define _POLICY_H_ + +/* local includes */ +#include + +/* Genode includes */ +#include +#include +#include + +namespace Trace_recorder { + class Policy; + + using Policies = Named_registry; +} + + +/** + * Installs and maintains a tracing policy + */ +class Trace_recorder::Policy : Policies::Element +{ + private: + friend class Policies::Element; + friend class Genode::Avl_node; + friend class Genode::Avl_tree; + + Genode::Env &_env; + Genode::Trace::Connection &_trace; + Genode::Rom_connection _rom; + Genode::Rom_dataspace_capability const _ds { _rom.dataspace() }; + Genode::size_t const _size { Genode::Dataspace_client(_ds).size() }; + Genode::Trace::Policy_id const _id { _trace.alloc_policy(_size) }; + + public: + + using Name = Policies::Element::Name; + using Policies::Element::name; + using Policies::Element::Element; + + Policy(Genode::Env &env, + Genode::Trace::Connection &trace, + Name const &name, + Policies ®istry); + + + /*************** + ** Accessors ** + ***************/ + + Genode::Trace::Policy_id id() const { return _id; } +}; + +#endif /* _POLICY_H_ */ diff --git a/repos/gems/src/app/trace_recorder/subject_info.h b/repos/gems/src/app/trace_recorder/subject_info.h new file mode 100644 index 0000000000..c26dd35411 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/subject_info.h @@ -0,0 +1,39 @@ +/* + * \brief Helper for storing static parts of Trace::Subject_info + * \author Johannes Schlatow + * \date 2021-08-06 + */ + +/* + * Copyright (C) 2021 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _SUBJECT_INFO_H_ +#define _SUBJECT_INFO_H_ + +#include + +struct Subject_info +{ + Genode::Session_label _session_label; + Genode::Trace::Thread_name _thread_name; + Genode::Affinity::Location _affinity; + unsigned _priority; + + Subject_info(Genode::Trace::Subject_info const &info) + : _session_label(info.session_label()), + _thread_name(info.thread_name()), + _affinity(info.affinity()), + _priority(info.execution_time().priority) + { } + + Genode::Session_label const &session_label() const { return _session_label; } + Genode::Trace::Thread_name const &thread_name() const { return _thread_name; } + Genode::Affinity::Location const &affinity() const { return _affinity; } + unsigned priority() const { return _priority; } +}; + +#endif /* _SUBJECT_INFO_H_ */ diff --git a/repos/gems/src/app/trace_recorder/target.mk b/repos/gems/src/app/trace_recorder/target.mk new file mode 100644 index 0000000000..4660175b93 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/target.mk @@ -0,0 +1,5 @@ +TARGET = trace_recorder +INC_DIR += $(PRG_DIR) +SRC_CC = main.cc monitor.cc policy.cc ctf/backend.cc pcapng/backend.cc +CONFIG_XSD = config.xsd +LIBS += base vfs diff --git a/repos/gems/src/app/trace_recorder/timestamp_calibrator.h b/repos/gems/src/app/trace_recorder/timestamp_calibrator.h new file mode 100644 index 0000000000..2675890fe6 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/timestamp_calibrator.h @@ -0,0 +1,127 @@ +/* + * \brief Helper for converting Trace::Timestamp to epoch + * \author Johannes Schlatow + * \date 2022-05-19 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _TIMESTAMP_CALIBRATOR_H_ +#define _TIMESTAMP_CALIBRATOR_H_ + +/* Genode includes */ +#include +#include +#include +#include + +namespace Trace_recorder { + using namespace Genode; + + class Timestamp_calibrator; +} + + +class Trace_recorder::Timestamp_calibrator +{ + private: + + uint64_t const _frequency_hz; + uint64_t const _epoch_start_in_us; + Trace::Timestamp const _ts_start { Trace::timestamp() }; + + enum : uint64_t { + USEC_PER_SEC = 1000ULL * 1000ULL, + USEC_PER_MIN = USEC_PER_SEC * 60, + USEC_PER_HOUR = USEC_PER_MIN * 60, + USEC_PER_DAY = USEC_PER_HOUR * 24, + }; + + static uint64_t _day_of_year(Rtc::Timestamp time) + { + /* look up table, starts with month=0 */ + unsigned days_until_month[] = { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; + + uint64_t result = time.day + days_until_month[time.month]; + + /* check for leap year */ + if (time.month >= 3) { + if ((time.year % 1000) == 0 || ((time.year % 4) == 0 && !(time.year % 100) == 0)) + return result + 1; + } + + return result; + } + + uint64_t _timestamp_frequency(Env &env, Timer::Connection &timer) + { + using namespace Genode; + + /* try getting tsc frequency from platform info, measure if failed */ + try { + Attached_rom_dataspace const platform_info (env, "platform_info"); + Xml_node const hardware = platform_info.xml().sub_node("hardware"); + uint64_t const tsc_freq = hardware.sub_node("tsc").attribute_value("freq_khz", 0ULL); + bool const invariant = hardware.sub_node("tsc").attribute_value("invariant", true); + + if (!invariant) + error("No invariant TSC available"); + + if (tsc_freq) + return tsc_freq * 1000ULL; + } catch (...) { } + + warning("Falling back to measured timestamp frequency"); + /* measure frequency using timer */ + Trace::Timestamp start = Trace::timestamp(); + timer.msleep(1000); + return (Trace::timestamp() - start); + } + + uint64_t _current_epoch_us(Rtc::Connection &rtc) + { + Rtc::Timestamp const current_time { rtc.current_time() }; + + // assuming year > 2000 or year == 0 + uint64_t usec_until_y2k = (30*365 + 30/4) * USEC_PER_DAY; + uint64_t years_since_y2k = current_time.year ? current_time.year - 2000 : 0; + uint64_t days_since_y2k = years_since_y2k * 365 + years_since_y2k/4 - + years_since_y2k/100 + + years_since_y2k/1000 + + _day_of_year(current_time); + + return usec_until_y2k + + days_since_y2k * USEC_PER_DAY + + current_time.hour * USEC_PER_HOUR + + current_time.minute * USEC_PER_MIN + + current_time.second * USEC_PER_SEC + + current_time.microsecond; + } + + public: + + Timestamp_calibrator(Env &env, Rtc::Connection &rtc, Timer::Connection &timer) + : _frequency_hz (_timestamp_frequency(env, timer)), + _epoch_start_in_us(_current_epoch_us(rtc)) + { + log("Timestamp frequency is ", _frequency_hz, "Hz"); + } + + uint64_t ticks_per_second() const { return _frequency_hz; } + + uint64_t epoch_from_timestamp_in_us(Trace::Timestamp ts) const + { + /* intentionally ignoring timestamp wraparounds */ + uint64_t ts_diff = ts - _ts_start; + + return _epoch_start_in_us + (ts_diff / (ticks_per_second() / USEC_PER_SEC)); + } +}; + + +#endif /* _TIMESTAMP_CALIBRATOR_H_ */ diff --git a/repos/gems/src/app/trace_recorder/writer.h b/repos/gems/src/app/trace_recorder/writer.h new file mode 100644 index 0000000000..5dd95074e0 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/writer.h @@ -0,0 +1,62 @@ +/* + * \brief Base class for processing traces and writing outputs + * \author Johannes Schlatow + * \date 2022-05-11 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _WRITER_H_ +#define _WRITER_H_ + +/* local includes */ +#include + +/* Genode includes */ +#include +#include +#include +#include + +namespace Trace_recorder { + class Writer_base; + + using Directory = Genode::Directory; + using Writer_registry = Genode::Registry; +} + + +class Trace_recorder::Writer_base +{ + protected: + + Writer_registry::Element _element; + + public: + + Writer_base(Writer_registry ®istry) + : _element(registry, *this) + { } + + virtual ~Writer_base() { } + + /*************** + ** Interface ** + ***************/ + + virtual void start_iteration(Directory &, + Directory::Path const &, + ::Subject_info const &) = 0; + + virtual void process_event(Trace_recorder::Trace_event_base const &, Genode::size_t) = 0; + + virtual void end_iteration() = 0; +}; + + +#endif /* _WRITER_H_ */ From e4aceb7845f4a736ac4b345f1267a36e536093e7 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 3 Jun 2022 11:13:48 +0200 Subject: [PATCH 161/354] trace_recorder: add combined ctf + pcapng policy genodelabs/genode#4352 --- repos/gems/recipes/pkg/trace_recorder/runtime | 1 + repos/gems/run/trace_recorder.run | 194 ++++++++++++++++++ .../policy/ctf0_pcapng/policy.cc | 83 ++++++++ .../policy/ctf0_pcapng/target.mk | 5 + 4 files changed, 283 insertions(+) create mode 100644 repos/gems/run/trace_recorder.run create mode 100644 repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/policy.cc create mode 100644 repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk diff --git a/repos/gems/recipes/pkg/trace_recorder/runtime b/repos/gems/recipes/pkg/trace_recorder/runtime index ac1937b812..9636c920bc 100644 --- a/repos/gems/recipes/pkg/trace_recorder/runtime +++ b/repos/gems/recipes/pkg/trace_recorder/runtime @@ -13,6 +13,7 @@ + diff --git a/repos/gems/run/trace_recorder.run b/repos/gems/run/trace_recorder.run new file mode 100644 index 0000000000..f29544d2e9 --- /dev/null +++ b/repos/gems/run/trace_recorder.run @@ -0,0 +1,194 @@ +assert_spec linux + +# check that babeltrace2 is present +set babeltrace_missing [catch { + spawn babeltrace2 -V + expect { + {Babeltrace 2.*} { } + eof { return } + timeout { return } + } +}] + +if {$babeltrace_missing} { + puts "\nPlease install babeltrace2 on your host system." + exit 1; +} + +# check that python-pcapng is present +set python_pcapng_missing [catch { + spawn -noecho sh -c "echo \"import pcapng\" | python" + expect { + {No module} { return } + {not found} { return } + eof { } + } +}] + +if {$python_pcapng_missing} { + puts "\nPlease install python-pcapng on your host system." + exit 1; +} + +build { app/ping server/lx_fs } + +create_boot_directory + +import_from_depot \ + [depot_user]/src/[base_src] \ + [depot_user]/src/init \ + [depot_user]/src/libc \ + [depot_user]/src/nic_router \ + [depot_user]/src/report_rom \ + [depot_user]/src/vfs \ + [depot_user]/src/linux_rtc_drv \ + [depot_user]/src/trace_recorder \ + [depot_user]/raw/trace_recorder \ + [depot_user]/src/trace_recorder_policy \ + [depot_user]/src/dynamic_rom + +install_config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +exec rm -rf bin/fs +exec mkdir -p bin/fs + +build_boot_image { lx_fs + fs + ping } + +append qemu_args " -nographic " + +run_genode_until {Enabled ctf writer for init -> ping -> ep} 20 +set spawn_id [output_spawn_id] +run_genode_until {.*child "ping" exited with exit value 0.*} 60 $spawn_id + +####################### +# validate CTF output # +####################### + +set ctf_path [exec find bin/fs -type d -name nic_router] +exec test -s $ctf_path/ep + +# check generated trace by reading CTF trace as fast as possible using a dummy output +exec babeltrace2 $ctf_path --output-format=dummy + + +########################## +# validate PCAPNG output # +########################## + +# create python script for pcapng parsing +set fd [open [run_dir]/genode/check_pcapng.py "w"] +puts $fd { +import sys +import pcapng + +with open(sys.argv[1], "rb") as fp: + scanner = pcapng.FileScanner(fp) + for block in pcapng.FileScanner(fp): + pass +} +close $fd + +set pcap_file [exec find bin/fs -name nic_router.pcapng] +exec test -s $pcap_file + +# check generated trace by python script +exec python [run_dir]/genode/check_pcapng.py $pcap_file diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/policy.cc b/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/policy.cc new file mode 100644 index 0000000000..0f1e795d75 --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/policy.cc @@ -0,0 +1,83 @@ +#include +#include +#include +#include + +using namespace Genode; +using namespace Ctf; + +enum { MAX_CAPTURE_LEN = 100 }; + +size_t max_event_size() { + return Trace_recorder::Pcapng_event::max_size(MAX_CAPTURE_LEN); } + +size_t trace_eth_packet(char *dst, char const *if_name, bool out, char *pkt_data, size_t pkt_len) +{ + using namespace Pcapng; + Trace_recorder::Pcapng_event *e = + new (dst) Trace_recorder::Pcapng_event(Link_type::ETHERNET, if_name, out, pkt_len, pkt_data, MAX_CAPTURE_LEN); + + return e->total_length(); +} + +size_t checkpoint(char *dst, char const *name, unsigned long data, void *addr, unsigned char type) +{ + size_t len = strlen(name) + 1; + + new (dst) Checkpoint(name, len, data, addr, type); + + return len + sizeof(Checkpoint); +} + +size_t log_output(char *dst, char const *log_message, size_t len) { + return 0; +} + +size_t rpc_call(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_call(rpc_name, len); + + return len + sizeof(Rpc_call); +} + +size_t rpc_returned(char *dst, char const *rpc_name, Msgbuf_base const &) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_returned(rpc_name, len); + + return len + sizeof(Rpc_returned); +} + +size_t rpc_dispatch(char *dst, char const *rpc_name) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_dispatch(rpc_name, len); + + return len + sizeof(Rpc_dispatch); +} + +size_t rpc_reply(char *dst, char const *rpc_name) +{ + size_t len = strlen(rpc_name) + 1; + + new (dst) Rpc_reply(rpc_name, len); + + return len + sizeof(Rpc_reply); +} + +size_t signal_submit(char *dst, unsigned const num) +{ + new (dst) Signal_submit(num); + + return sizeof(Signal_submit); +} + +size_t signal_receive(char *dst, Signal_context const & context, unsigned num) +{ + new (dst) Signal_receive(num, (void*)&context); + return 0; +} diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk b/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk new file mode 100644 index 0000000000..078d1e4d65 --- /dev/null +++ b/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk @@ -0,0 +1,5 @@ +TARGET = ctf0_pcapng + +TARGET_POLICY = ctf0_pcapng + +include $(PRG_DIR)/../policy.inc From c462720c2810c72af36bd41c0bb931d383661ae8 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Mon, 16 Aug 2021 11:37:10 +0200 Subject: [PATCH 162/354] trace_recorder: add TraceCompass analyses Define custom analyses that can be imported into TraceCompass (>= 7.3) for evaluating the traced component interactions and checkpoints. genodelabs/genode#4352 --- .../app/trace_recorder/checkpointanalysis.xml | 108 ++++++++ .../app/trace_recorder/componentanalysis.xml | 262 ++++++++++++++++++ 2 files changed, 370 insertions(+) create mode 100644 repos/gems/src/app/trace_recorder/checkpointanalysis.xml create mode 100644 repos/gems/src/app/trace_recorder/componentanalysis.xml diff --git a/repos/gems/src/app/trace_recorder/checkpointanalysis.xml b/repos/gems/src/app/trace_recorder/checkpointanalysis.xml new file mode 100644 index 0000000000..e8041bf38f --- /dev/null +++ b/repos/gems/src/app/trace_recorder/checkpointanalysis.xml @@ -0,0 +1,108 @@ + + + + + + + + diff --git a/repos/gems/src/app/trace_recorder/componentanalysis.xml b/repos/gems/src/app/trace_recorder/componentanalysis.xml new file mode 100644 index 0000000000..0bba7d0092 --- /dev/null +++ b/repos/gems/src/app/trace_recorder/componentanalysis.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + From b5c780993c263d19dcb87fc1a06f3106be143ecf Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Tue, 9 Aug 2022 13:32:38 +0200 Subject: [PATCH 163/354] board: Rename virt_qemu to virt_qemu_ Instead of having a generic "virt_qemu" board use "virt_qemu_" in order to have a clean distinction between boards. Current supported boards are "virt_qemu_arm_v7a", "virt_qemu_arm_v8a", and "virt_qemu_riscv". issue #4034 --- repos/base-hw/board/{virt_qemu => virt_qemu_arm_v7a}/arch | 1 - .../{virt_qemu => virt_qemu_arm_v7a}/image_link_address | 0 repos/base-hw/board/virt_qemu_arm_v8a/arch | 1 + repos/base-hw/board/virt_qemu_arm_v8a/image_link_address | 1 + ...-hw-virt_qemu.mk => bootstrap-hw-virt_qemu_arm_v7a.mk} | 4 ++-- ...{core-hw-virt_qemu.mk => core-hw-virt_qemu_arm_v7a.mk} | 2 +- ...-hw-virt_qemu.mk => bootstrap-hw-virt_qemu_arm_v8a.mk} | 4 ++-- ...{core-hw-virt_qemu.mk => core-hw-virt_qemu_arm_v8a.mk} | 2 +- repos/base-hw/recipes/src/base-hw-virt_qemu/content.mk | 4 ---- .../recipes/src/base-hw-virt_qemu_arm_v7a/content.mk | 4 ++++ repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash | 1 + .../used_apis | 0 .../recipes/src/base-hw-virt_qemu_arm_v8a/content.mk | 4 ++++ .../{base-hw-virt_qemu => base-hw-virt_qemu_arm_v8a}/hash | 0 .../recipes/src/base-hw-virt_qemu_arm_v8a/used_apis | 2 ++ .../board/{virt_qemu => virt_qemu_arm_v7a}/board.h | 0 .../board/{virt_qemu => virt_qemu_arm_v7a}/platform.cc | 0 .../board/{virt_qemu_64 => virt_qemu_arm_v8a}/board.h | 0 .../board/{virt_qemu_64 => virt_qemu_arm_v8a}/platform.cc | 0 .../core/board/{virt_qemu => virt_qemu_arm_v7a}/board.h | 0 .../board/{virt_qemu_64 => virt_qemu_arm_v8a}/board.h | 0 .../base/board/{virt_qemu => virt_qemu_arm_v7a}/qemu_args | 3 +-- repos/base/board/virt_qemu_arm_v8a/qemu_args | 8 ++++++++ repos/dde_linux/run/vfs_cfg.run | 2 +- repos/dde_rump/run/libc_vfs_fs_ext2.run | 2 +- repos/dde_rump/run/rump_ext2.run | 2 +- repos/gems/run/aes_cbc_4k.run | 2 +- repos/gems/run/depot_download.run | 2 +- repos/gems/run/fs_query.run | 2 +- repos/gems/run/vfs_import.run | 2 +- repos/libports/run/extract.run | 2 +- repos/libports/run/fetchurl.inc | 2 +- repos/libports/run/libc_vfs_fs_fat.run | 2 +- repos/libports/run/lwip.run | 2 +- repos/libports/run/nic_bridge.run | 2 +- repos/libports/run/nic_router.inc | 2 +- .../README | 0 .../archives | 2 +- .../hash | 0 .../pkg/drivers_interactive-virt_qemu_arm_v8a/README | 3 +++ .../pkg/drivers_interactive-virt_qemu_arm_v8a/archives | 6 ++++++ .../pkg/drivers_interactive-virt_qemu_arm_v8a/hash | 1 + .../README | 0 .../archives | 2 +- .../hash | 0 repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/README | 3 +++ .../os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/archives | 4 ++++ repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash | 1 + .../content.mk | 2 +- .../drivers.config | 0 .../event_filter.config | 0 .../hash | 0 repos/os/recipes/raw/drivers_nic-virt_qemu/content.mk | 4 ---- repos/os/recipes/raw/drivers_nic-virt_qemu_arm/content.mk | 4 ++++ .../drivers.config | 0 .../hash | 0 repos/os/run/fb_bench.run | 2 +- repos/os/run/nic_dump.run | 2 +- repos/os/run/nic_router_disable_arp.run | 2 +- repos/os/run/nic_router_flood.run | 2 +- repos/os/run/ping.run | 2 +- repos/os/run/ping_nic_router.run | 2 +- repos/os/run/sd_card_bench.run | 2 +- repos/os/run/timeout.run | 2 +- repos/os/run/vmm_arm.run | 3 ++- repos/ports/run/verify.run | 2 +- tool/builddir/build.conf/run_arm_v7 | 6 +++--- tool/builddir/build.conf/run_arm_v8 | 6 +++--- tool/builddir/build.conf/run_riscv | 4 ++-- tool/run/power_on/qemu | 7 ------- 70 files changed, 85 insertions(+), 58 deletions(-) rename repos/base-hw/board/{virt_qemu => virt_qemu_arm_v7a}/arch (50%) rename repos/base-hw/board/{virt_qemu => virt_qemu_arm_v7a}/image_link_address (100%) create mode 100644 repos/base-hw/board/virt_qemu_arm_v8a/arch create mode 100644 repos/base-hw/board/virt_qemu_arm_v8a/image_link_address rename repos/base-hw/lib/mk/spec/arm_v7/{bootstrap-hw-virt_qemu.mk => bootstrap-hw-virt_qemu_arm_v7a.mk} (76%) rename repos/base-hw/lib/mk/spec/arm_v7/{core-hw-virt_qemu.mk => core-hw-virt_qemu_arm_v7a.mk} (93%) rename repos/base-hw/lib/mk/spec/arm_v8/{bootstrap-hw-virt_qemu.mk => bootstrap-hw-virt_qemu_arm_v8a.mk} (77%) rename repos/base-hw/lib/mk/spec/arm_v8/{core-hw-virt_qemu.mk => core-hw-virt_qemu_arm_v8a.mk} (92%) delete mode 100644 repos/base-hw/recipes/src/base-hw-virt_qemu/content.mk create mode 100644 repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/content.mk create mode 100644 repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash rename repos/base-hw/recipes/src/{base-hw-virt_qemu => base-hw-virt_qemu_arm_v7a}/used_apis (100%) create mode 100644 repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/content.mk rename repos/base-hw/recipes/src/{base-hw-virt_qemu => base-hw-virt_qemu_arm_v8a}/hash (100%) create mode 100644 repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/used_apis rename repos/base-hw/src/bootstrap/board/{virt_qemu => virt_qemu_arm_v7a}/board.h (100%) rename repos/base-hw/src/bootstrap/board/{virt_qemu => virt_qemu_arm_v7a}/platform.cc (100%) rename repos/base-hw/src/bootstrap/board/{virt_qemu_64 => virt_qemu_arm_v8a}/board.h (100%) rename repos/base-hw/src/bootstrap/board/{virt_qemu_64 => virt_qemu_arm_v8a}/platform.cc (100%) rename repos/base-hw/src/core/board/{virt_qemu => virt_qemu_arm_v7a}/board.h (100%) rename repos/base-hw/src/core/board/{virt_qemu_64 => virt_qemu_arm_v8a}/board.h (100%) rename repos/base/board/{virt_qemu => virt_qemu_arm_v7a}/qemu_args (61%) create mode 100644 repos/base/board/virt_qemu_arm_v8a/qemu_args rename repos/os/recipes/pkg/{drivers_interactive-virt_qemu => drivers_interactive-virt_qemu_arm_v7a}/README (100%) rename repos/os/recipes/pkg/{drivers_interactive-virt_qemu => drivers_interactive-virt_qemu_arm_v7a}/archives (71%) rename repos/os/recipes/pkg/{drivers_interactive-virt_qemu => drivers_interactive-virt_qemu_arm_v7a}/hash (100%) create mode 100644 repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/README create mode 100644 repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/archives create mode 100644 repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash rename repos/os/recipes/pkg/{drivers_nic-virt_qemu => drivers_nic-virt_qemu_arm_v7a}/README (100%) rename repos/os/recipes/pkg/{drivers_nic-virt_qemu => drivers_nic-virt_qemu_arm_v7a}/archives (64%) rename repos/os/recipes/pkg/{drivers_nic-virt_qemu => drivers_nic-virt_qemu_arm_v7a}/hash (100%) create mode 100644 repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/README create mode 100644 repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/archives create mode 100644 repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash rename repos/os/recipes/raw/{drivers_interactive-virt_qemu => drivers_interactive-virt_qemu_arm}/content.mk (73%) rename repos/os/recipes/raw/{drivers_interactive-virt_qemu => drivers_interactive-virt_qemu_arm}/drivers.config (100%) rename repos/os/recipes/raw/{drivers_interactive-virt_qemu => drivers_interactive-virt_qemu_arm}/event_filter.config (100%) rename repos/os/recipes/raw/{drivers_interactive-virt_qemu => drivers_interactive-virt_qemu_arm}/hash (100%) delete mode 100644 repos/os/recipes/raw/drivers_nic-virt_qemu/content.mk create mode 100644 repos/os/recipes/raw/drivers_nic-virt_qemu_arm/content.mk rename repos/os/recipes/raw/{drivers_nic-virt_qemu => drivers_nic-virt_qemu_arm}/drivers.config (100%) rename repos/os/recipes/raw/{drivers_nic-virt_qemu => drivers_nic-virt_qemu_arm}/hash (100%) diff --git a/repos/base-hw/board/virt_qemu/arch b/repos/base-hw/board/virt_qemu_arm_v7a/arch similarity index 50% rename from repos/base-hw/board/virt_qemu/arch rename to repos/base-hw/board/virt_qemu_arm_v7a/arch index cd8d498319..16c61114d8 100644 --- a/repos/base-hw/board/virt_qemu/arch +++ b/repos/base-hw/board/virt_qemu_arm_v7a/arch @@ -1,2 +1 @@ arm_v7a -arm_v8a diff --git a/repos/base-hw/board/virt_qemu/image_link_address b/repos/base-hw/board/virt_qemu_arm_v7a/image_link_address similarity index 100% rename from repos/base-hw/board/virt_qemu/image_link_address rename to repos/base-hw/board/virt_qemu_arm_v7a/image_link_address diff --git a/repos/base-hw/board/virt_qemu_arm_v8a/arch b/repos/base-hw/board/virt_qemu_arm_v8a/arch new file mode 100644 index 0000000000..ae398b9a2e --- /dev/null +++ b/repos/base-hw/board/virt_qemu_arm_v8a/arch @@ -0,0 +1 @@ +arm_v8a diff --git a/repos/base-hw/board/virt_qemu_arm_v8a/image_link_address b/repos/base-hw/board/virt_qemu_arm_v8a/image_link_address new file mode 100644 index 0000000000..f8742e5363 --- /dev/null +++ b/repos/base-hw/board/virt_qemu_arm_v8a/image_link_address @@ -0,0 +1 @@ +0x40000000 diff --git a/repos/base-hw/lib/mk/spec/arm_v7/bootstrap-hw-virt_qemu.mk b/repos/base-hw/lib/mk/spec/arm_v7/bootstrap-hw-virt_qemu_arm_v7a.mk similarity index 76% rename from repos/base-hw/lib/mk/spec/arm_v7/bootstrap-hw-virt_qemu.mk rename to repos/base-hw/lib/mk/spec/arm_v7/bootstrap-hw-virt_qemu_arm_v7a.mk index d4351334e5..b26a3dc66e 100644 --- a/repos/base-hw/lib/mk/spec/arm_v7/bootstrap-hw-virt_qemu.mk +++ b/repos/base-hw/lib/mk/spec/arm_v7/bootstrap-hw-virt_qemu_arm_v7a.mk @@ -1,6 +1,6 @@ -REP_INC_DIR += src/bootstrap/board/virt_qemu +REP_INC_DIR += src/bootstrap/board/virt_qemu_arm_v7a -SRC_CC += bootstrap/board/virt_qemu/platform.cc +SRC_CC += bootstrap/board/virt_qemu_arm_v7a/platform.cc SRC_CC += bootstrap/spec/arm/arm_v7_cpu.cc SRC_CC += bootstrap/spec/arm/cortex_a15_cpu.cc SRC_CC += bootstrap/spec/arm/gicv2.cc diff --git a/repos/base-hw/lib/mk/spec/arm_v7/core-hw-virt_qemu.mk b/repos/base-hw/lib/mk/spec/arm_v7/core-hw-virt_qemu_arm_v7a.mk similarity index 93% rename from repos/base-hw/lib/mk/spec/arm_v7/core-hw-virt_qemu.mk rename to repos/base-hw/lib/mk/spec/arm_v7/core-hw-virt_qemu_arm_v7a.mk index 477b70eb93..e6830f1877 100644 --- a/repos/base-hw/lib/mk/spec/arm_v7/core-hw-virt_qemu.mk +++ b/repos/base-hw/lib/mk/spec/arm_v7/core-hw-virt_qemu_arm_v7a.mk @@ -1,4 +1,4 @@ -REP_INC_DIR += src/core/board/virt_qemu +REP_INC_DIR += src/core/board/virt_qemu_arm_v7a REP_INC_DIR += src/core/spec/arm/virtualization # add C++ sources diff --git a/repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-virt_qemu.mk b/repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-virt_qemu_arm_v8a.mk similarity index 77% rename from repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-virt_qemu.mk rename to repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-virt_qemu_arm_v8a.mk index c6d06d592f..65ac7ac5cb 100644 --- a/repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-virt_qemu.mk +++ b/repos/base-hw/lib/mk/spec/arm_v8/bootstrap-hw-virt_qemu_arm_v8a.mk @@ -1,8 +1,8 @@ -REP_INC_DIR += src/bootstrap/board/virt_qemu_64 +REP_INC_DIR += src/bootstrap/board/virt_qemu_arm_v8a SRC_CC += bootstrap/spec/arm/gicv3.cc SRC_CC += bootstrap/spec/arm_64/cortex_a53_mmu.cc -SRC_CC += bootstrap/board/virt_qemu_64/platform.cc +SRC_CC += bootstrap/board/virt_qemu_arm_v8a/platform.cc SRC_CC += lib/base/arm_64/kernel/interface.cc SRC_CC += spec/64bit/memory_map.cc SRC_S += bootstrap/spec/arm_64/crt0.s diff --git a/repos/base-hw/lib/mk/spec/arm_v8/core-hw-virt_qemu.mk b/repos/base-hw/lib/mk/spec/arm_v8/core-hw-virt_qemu_arm_v8a.mk similarity index 92% rename from repos/base-hw/lib/mk/spec/arm_v8/core-hw-virt_qemu.mk rename to repos/base-hw/lib/mk/spec/arm_v8/core-hw-virt_qemu_arm_v8a.mk index 27e337f0fe..41825db29d 100644 --- a/repos/base-hw/lib/mk/spec/arm_v8/core-hw-virt_qemu.mk +++ b/repos/base-hw/lib/mk/spec/arm_v8/core-hw-virt_qemu_arm_v8a.mk @@ -1,4 +1,4 @@ -REP_INC_DIR += src/core/board/virt_qemu_64 +REP_INC_DIR += src/core/board/virt_qemu_arm_v8a REP_INC_DIR += src/core/spec/arm/virtualization # add C++ sources diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu/content.mk b/repos/base-hw/recipes/src/base-hw-virt_qemu/content.mk deleted file mode 100644 index 2d331b60be..0000000000 --- a/repos/base-hw/recipes/src/base-hw-virt_qemu/content.mk +++ /dev/null @@ -1,4 +0,0 @@ -CONTENT += src/core/board/virt_qemu_64 \ - src/bootstrap/board/virt_qemu_64 - -include $(GENODE_DIR)/repos/base-hw/recipes/src/base-hw_content.inc diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/content.mk b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/content.mk new file mode 100644 index 0000000000..38ce9bebad --- /dev/null +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/content.mk @@ -0,0 +1,4 @@ +CONTENT += src/core/board/virt_qemu_arm_v7a \ + src/bootstrap/board/virt_qemu_arm_v7a + +include $(GENODE_DIR)/repos/base-hw/recipes/src/base-hw_content.inc diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash new file mode 100644 index 0000000000..dd479c2c5b --- /dev/null +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash @@ -0,0 +1 @@ +2022-08-10 70b4f8849f5c72c7d76985d7d5d2dbbd68bb7808 diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu/used_apis b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/used_apis similarity index 100% rename from repos/base-hw/recipes/src/base-hw-virt_qemu/used_apis rename to repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/used_apis diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/content.mk b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/content.mk new file mode 100644 index 0000000000..7b0ace030f --- /dev/null +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/content.mk @@ -0,0 +1,4 @@ +CONTENT += src/core/board/virt_qemu_arm_v8a \ + src/bootstrap/board/virt_qemu_arm_v8a + +include $(GENODE_DIR)/repos/base-hw/recipes/src/base-hw_content.inc diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash similarity index 100% rename from repos/base-hw/recipes/src/base-hw-virt_qemu/hash rename to repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/used_apis b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/used_apis new file mode 100644 index 0000000000..ed9b772565 --- /dev/null +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/used_apis @@ -0,0 +1,2 @@ +base-hw +base diff --git a/repos/base-hw/src/bootstrap/board/virt_qemu/board.h b/repos/base-hw/src/bootstrap/board/virt_qemu_arm_v7a/board.h similarity index 100% rename from repos/base-hw/src/bootstrap/board/virt_qemu/board.h rename to repos/base-hw/src/bootstrap/board/virt_qemu_arm_v7a/board.h diff --git a/repos/base-hw/src/bootstrap/board/virt_qemu/platform.cc b/repos/base-hw/src/bootstrap/board/virt_qemu_arm_v7a/platform.cc similarity index 100% rename from repos/base-hw/src/bootstrap/board/virt_qemu/platform.cc rename to repos/base-hw/src/bootstrap/board/virt_qemu_arm_v7a/platform.cc diff --git a/repos/base-hw/src/bootstrap/board/virt_qemu_64/board.h b/repos/base-hw/src/bootstrap/board/virt_qemu_arm_v8a/board.h similarity index 100% rename from repos/base-hw/src/bootstrap/board/virt_qemu_64/board.h rename to repos/base-hw/src/bootstrap/board/virt_qemu_arm_v8a/board.h diff --git a/repos/base-hw/src/bootstrap/board/virt_qemu_64/platform.cc b/repos/base-hw/src/bootstrap/board/virt_qemu_arm_v8a/platform.cc similarity index 100% rename from repos/base-hw/src/bootstrap/board/virt_qemu_64/platform.cc rename to repos/base-hw/src/bootstrap/board/virt_qemu_arm_v8a/platform.cc diff --git a/repos/base-hw/src/core/board/virt_qemu/board.h b/repos/base-hw/src/core/board/virt_qemu_arm_v7a/board.h similarity index 100% rename from repos/base-hw/src/core/board/virt_qemu/board.h rename to repos/base-hw/src/core/board/virt_qemu_arm_v7a/board.h diff --git a/repos/base-hw/src/core/board/virt_qemu_64/board.h b/repos/base-hw/src/core/board/virt_qemu_arm_v8a/board.h similarity index 100% rename from repos/base-hw/src/core/board/virt_qemu_64/board.h rename to repos/base-hw/src/core/board/virt_qemu_arm_v8a/board.h diff --git a/repos/base/board/virt_qemu/qemu_args b/repos/base/board/virt_qemu_arm_v7a/qemu_args similarity index 61% rename from repos/base/board/virt_qemu/qemu_args rename to repos/base/board/virt_qemu_arm_v7a/qemu_args index 2d21c33626..183d6293ad 100644 --- a/repos/base/board/virt_qemu/qemu_args +++ b/repos/base/board/virt_qemu_arm_v7a/qemu_args @@ -1,9 +1,8 @@ -m 2048 +-M virt,virtualization=true -cpu cortex-a15 -smp 2 -global virtio-mmio.force-legacy=false -device virtio-net-device,bus=virtio-mmio-bus.0,netdev=net0 -device virtio-mouse-device -device virtio-keyboard-device -device virtio-gpu-device -netdev user,id=net0 -arm_v8a: -M virt,virtualization=true,gic-version=3 -cpu cortex-a53 -smp 4 -arm_v7a: -M virt,virtualization=true -cpu cortex-a15 -smp 2 diff --git a/repos/base/board/virt_qemu_arm_v8a/qemu_args b/repos/base/board/virt_qemu_arm_v8a/qemu_args new file mode 100644 index 0000000000..a9c9e5f1f4 --- /dev/null +++ b/repos/base/board/virt_qemu_arm_v8a/qemu_args @@ -0,0 +1,8 @@ +-m 2048 +-M virt,virtualization=true,gic-version=3 -cpu cortex-a53 -smp 4 +-global virtio-mmio.force-legacy=false +-device virtio-net-device,bus=virtio-mmio-bus.0,netdev=net0 +-device virtio-mouse-device +-device virtio-keyboard-device +-device virtio-gpu-device +-netdev user,id=net0 diff --git a/repos/dde_linux/run/vfs_cfg.run b/repos/dde_linux/run/vfs_cfg.run index 55419cc29b..abdf0eef57 100644 --- a/repos/dde_linux/run/vfs_cfg.run +++ b/repos/dde_linux/run/vfs_cfg.run @@ -1,4 +1,4 @@ -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/dde_rump/run/libc_vfs_fs_ext2.run b/repos/dde_rump/run/libc_vfs_fs_ext2.run index 581236094d..55be02619e 100644 --- a/repos/dde_rump/run/libc_vfs_fs_ext2.run +++ b/repos/dde_rump/run/libc_vfs_fs_ext2.run @@ -1,4 +1,4 @@ -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/dde_rump/run/rump_ext2.run b/repos/dde_rump/run/rump_ext2.run index a7dea12adf..c44c156c66 100644 --- a/repos/dde_rump/run/rump_ext2.run +++ b/repos/dde_rump/run/rump_ext2.run @@ -2,7 +2,7 @@ if {[have_spec arm]} { assert_spec arm_v7 } -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/gems/run/aes_cbc_4k.run b/repos/gems/run/aes_cbc_4k.run index 6c5872b973..c2e6950583 100644 --- a/repos/gems/run/aes_cbc_4k.run +++ b/repos/gems/run/aes_cbc_4k.run @@ -3,7 +3,7 @@ set block_number 12345 set test_rounds 10000 -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/gems/run/depot_download.run b/repos/gems/run/depot_download.run index 00466a20c7..56e7aa5bc4 100644 --- a/repos/gems/run/depot_download.run +++ b/repos/gems/run/depot_download.run @@ -5,7 +5,7 @@ if {[have_board linux] || [have_board rpi3] || [have_board imx53_qsb_tz]} { exit 0 } -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/gems/run/fs_query.run b/repos/gems/run/fs_query.run index 2492146f73..fec0651a92 100644 --- a/repos/gems/run/fs_query.run +++ b/repos/gems/run/fs_query.run @@ -1,6 +1,6 @@ create_boot_directory -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/gems/run/vfs_import.run b/repos/gems/run/vfs_import.run index d0d963dd6f..6f2346bcea 100644 --- a/repos/gems/run/vfs_import.run +++ b/repos/gems/run/vfs_import.run @@ -1,4 +1,4 @@ -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/libports/run/extract.run b/repos/libports/run/extract.run index 699e69c553..3369bdc1c3 100644 --- a/repos/libports/run/extract.run +++ b/repos/libports/run/extract.run @@ -1,6 +1,6 @@ create_boot_directory -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/libports/run/fetchurl.inc b/repos/libports/run/fetchurl.inc index 1a218d36e0..c81d851462 100644 --- a/repos/libports/run/fetchurl.inc +++ b/repos/libports/run/fetchurl.inc @@ -10,7 +10,7 @@ if {[have_board rpi3] || [have_board imx53_qsb_tz]} { } if {[get_cmd_switch --autopilot] && ([have_board linux] || - [have_board riscv_qemu])} { + [have_board virt_qemu_riscv])} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/libports/run/libc_vfs_fs_fat.run b/repos/libports/run/libc_vfs_fs_fat.run index cbf12c61f3..d6079385c1 100644 --- a/repos/libports/run/libc_vfs_fs_fat.run +++ b/repos/libports/run/libc_vfs_fs_fat.run @@ -1,4 +1,4 @@ -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/libports/run/lwip.run b/repos/libports/run/lwip.run index 8881d41d53..144db0030c 100644 --- a/repos/libports/run/lwip.run +++ b/repos/libports/run/lwip.run @@ -25,7 +25,7 @@ if {[have_board linux] || [have_board rpi3]} { puts "\n Run script is not supported on this platform. \n"; exit 0 } -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/libports/run/nic_bridge.run b/repos/libports/run/nic_bridge.run index 7aac8e2276..12b1f6199f 100644 --- a/repos/libports/run/nic_bridge.run +++ b/repos/libports/run/nic_bridge.run @@ -8,7 +8,7 @@ if {[have_board rpi3]} { exit 0 } -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/libports/run/nic_router.inc b/repos/libports/run/nic_router.inc index 6e0fd49dc9..fd8539c946 100644 --- a/repos/libports/run/nic_router.inc +++ b/repos/libports/run/nic_router.inc @@ -1,4 +1,4 @@ -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu/README b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/README similarity index 100% rename from repos/os/recipes/pkg/drivers_interactive-virt_qemu/README rename to repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/README diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu/archives b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/archives similarity index 71% rename from repos/os/recipes/pkg/drivers_interactive-virt_qemu/archives rename to repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/archives index 9b392ccf04..bb1b5d8f0f 100644 --- a/repos/os/recipes/pkg/drivers_interactive-virt_qemu/archives +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/archives @@ -3,4 +3,4 @@ _/src/virtio_input_drv _/src/platform_drv _/src/event_filter _/src/virtdev_rom -_/raw/drivers_interactive-virt_qemu +_/raw/drivers_interactive-virt_qemu_arm diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash similarity index 100% rename from repos/os/recipes/pkg/drivers_interactive-virt_qemu/hash rename to repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/README b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/README new file mode 100644 index 0000000000..3273ce23de --- /dev/null +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/README @@ -0,0 +1,3 @@ + + Device drivers needed to run interactive + scenarios on the Virt platform as emulated by Qemu diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/archives b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/archives new file mode 100644 index 0000000000..bb1b5d8f0f --- /dev/null +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/archives @@ -0,0 +1,6 @@ +_/src/virtio_fb_drv +_/src/virtio_input_drv +_/src/platform_drv +_/src/event_filter +_/src/virtdev_rom +_/raw/drivers_interactive-virt_qemu_arm diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash new file mode 100644 index 0000000000..52ad32bde8 --- /dev/null +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash @@ -0,0 +1 @@ +2022-08-10 1f5b06e3adabbb73ba2b6e24edf621b15cfafa9a diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu/README b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/README similarity index 100% rename from repos/os/recipes/pkg/drivers_nic-virt_qemu/README rename to repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/README diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu/archives b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/archives similarity index 64% rename from repos/os/recipes/pkg/drivers_nic-virt_qemu/archives rename to repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/archives index 9aae66c752..c947c8bdc9 100644 --- a/repos/os/recipes/pkg/drivers_nic-virt_qemu/archives +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/archives @@ -1,4 +1,4 @@ -_/raw/drivers_nic-virt_qemu +_/raw/drivers_nic-virt_qemu_arm _/src/virtdev_rom _/src/platform_drv _/src/virtio_nic_drv diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash similarity index 100% rename from repos/os/recipes/pkg/drivers_nic-virt_qemu/hash rename to repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/README b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/README new file mode 100644 index 0000000000..b9ad938515 --- /dev/null +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/README @@ -0,0 +1,3 @@ + + Device drivers needed for scenarios + using one network interface diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/archives b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/archives new file mode 100644 index 0000000000..c947c8bdc9 --- /dev/null +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/archives @@ -0,0 +1,4 @@ +_/raw/drivers_nic-virt_qemu_arm +_/src/virtdev_rom +_/src/platform_drv +_/src/virtio_nic_drv diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash new file mode 100644 index 0000000000..c51748fa16 --- /dev/null +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash @@ -0,0 +1 @@ +2022-08-10 8cc0b5d0e02903c31134630d4244ec9135cb5560 diff --git a/repos/os/recipes/raw/drivers_interactive-virt_qemu/content.mk b/repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/content.mk similarity index 73% rename from repos/os/recipes/raw/drivers_interactive-virt_qemu/content.mk rename to repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/content.mk index 54b94f2896..c954b65ba9 100644 --- a/repos/os/recipes/raw/drivers_interactive-virt_qemu/content.mk +++ b/repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/content.mk @@ -1,7 +1,7 @@ content: drivers.config event_filter.config en_us.chargen special.chargen drivers.config event_filter.config: - cp $(REP_DIR)/recipes/raw/drivers_interactive-virt_qemu/$@ $@ + cp $(REP_DIR)/recipes/raw/drivers_interactive-virt_qemu_arm/$@ $@ en_us.chargen special.chargen: cp $(REP_DIR)/src/server/event_filter/$@ $@ diff --git a/repos/os/recipes/raw/drivers_interactive-virt_qemu/drivers.config b/repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/drivers.config similarity index 100% rename from repos/os/recipes/raw/drivers_interactive-virt_qemu/drivers.config rename to repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/drivers.config diff --git a/repos/os/recipes/raw/drivers_interactive-virt_qemu/event_filter.config b/repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/event_filter.config similarity index 100% rename from repos/os/recipes/raw/drivers_interactive-virt_qemu/event_filter.config rename to repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/event_filter.config diff --git a/repos/os/recipes/raw/drivers_interactive-virt_qemu/hash b/repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/hash similarity index 100% rename from repos/os/recipes/raw/drivers_interactive-virt_qemu/hash rename to repos/os/recipes/raw/drivers_interactive-virt_qemu_arm/hash diff --git a/repos/os/recipes/raw/drivers_nic-virt_qemu/content.mk b/repos/os/recipes/raw/drivers_nic-virt_qemu/content.mk deleted file mode 100644 index 78a408f9d6..0000000000 --- a/repos/os/recipes/raw/drivers_nic-virt_qemu/content.mk +++ /dev/null @@ -1,4 +0,0 @@ -content: drivers.config - -drivers.config: - cp $(REP_DIR)/recipes/raw/drivers_nic-virt_qemu/$@ $@ diff --git a/repos/os/recipes/raw/drivers_nic-virt_qemu_arm/content.mk b/repos/os/recipes/raw/drivers_nic-virt_qemu_arm/content.mk new file mode 100644 index 0000000000..0dca8b503e --- /dev/null +++ b/repos/os/recipes/raw/drivers_nic-virt_qemu_arm/content.mk @@ -0,0 +1,4 @@ +content: drivers.config + +drivers.config: + cp $(REP_DIR)/recipes/raw/drivers_nic-virt_qemu_arm/$@ $@ diff --git a/repos/os/recipes/raw/drivers_nic-virt_qemu/drivers.config b/repos/os/recipes/raw/drivers_nic-virt_qemu_arm/drivers.config similarity index 100% rename from repos/os/recipes/raw/drivers_nic-virt_qemu/drivers.config rename to repos/os/recipes/raw/drivers_nic-virt_qemu_arm/drivers.config diff --git a/repos/os/recipes/raw/drivers_nic-virt_qemu/hash b/repos/os/recipes/raw/drivers_nic-virt_qemu_arm/hash similarity index 100% rename from repos/os/recipes/raw/drivers_nic-virt_qemu/hash rename to repos/os/recipes/raw/drivers_nic-virt_qemu_arm/hash diff --git a/repos/os/run/fb_bench.run b/repos/os/run/fb_bench.run index f764505b0f..65a907520a 100644 --- a/repos/os/run/fb_bench.run +++ b/repos/os/run/fb_bench.run @@ -9,7 +9,7 @@ if {[have_board imx7d_sabre] || } if {[get_cmd_switch --autopilot] && ([have_spec linux] || - [have_board riscv_qemu])} { + [have_board virt_qemu_riscv])} { puts "\nAutopilot run is not supported on this platform\n" exit 0 } diff --git a/repos/os/run/nic_dump.run b/repos/os/run/nic_dump.run index 96324f1fd5..315195a083 100644 --- a/repos/os/run/nic_dump.run +++ b/repos/os/run/nic_dump.run @@ -4,7 +4,7 @@ if {[have_spec foc] || [have_spec linux] || [have_board rpi3] || exit 0 } -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/os/run/nic_router_disable_arp.run b/repos/os/run/nic_router_disable_arp.run index 6a60925cdf..23890b73f6 100644 --- a/repos/os/run/nic_router_disable_arp.run +++ b/repos/os/run/nic_router_disable_arp.run @@ -5,7 +5,7 @@ if {![have_include power_on/qemu] || [have_spec foc] || [have_spec linux] || exit 0 } -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/os/run/nic_router_flood.run b/repos/os/run/nic_router_flood.run index b5d555710e..6f67f12247 100644 --- a/repos/os/run/nic_router_flood.run +++ b/repos/os/run/nic_router_flood.run @@ -7,7 +7,7 @@ if {![have_include power_on/qemu] || exit 0 } -if {[get_cmd_switch --autopilot] && ([have_board riscv_qemu] || +if {[get_cmd_switch --autopilot] && ([have_board virt_qemu_riscv] || [have_board zynq_qemu])} { puts "Autopilot mode is not supported on this platform." exit 0 diff --git a/repos/os/run/ping.run b/repos/os/run/ping.run index 58c57ee607..2caac903c1 100644 --- a/repos/os/run/ping.run +++ b/repos/os/run/ping.run @@ -38,7 +38,7 @@ if {[have_spec foc] || [have_board rpi3] || [have_board imx53_qsb_tz]} { } if {[get_cmd_switch --autopilot] && ([have_spec linux] || - [have_board riscv_qemu])} { + [have_board virt_qemu_riscv])} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/os/run/ping_nic_router.run b/repos/os/run/ping_nic_router.run index 67e781abd5..b447ada897 100644 --- a/repos/os/run/ping_nic_router.run +++ b/repos/os/run/ping_nic_router.run @@ -4,7 +4,7 @@ if {[have_spec foc] || [have_spec linux] || [have_board rpi3] || exit 0 } -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/os/run/sd_card_bench.run b/repos/os/run/sd_card_bench.run index 9e239a5fdb..e3a2b9226c 100644 --- a/repos/os/run/sd_card_bench.run +++ b/repos/os/run/sd_card_bench.run @@ -1,7 +1,7 @@ # # Check for platform support # -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/repos/os/run/timeout.run b/repos/os/run/timeout.run index 8a872a81fd..ad6afb56ca 100644 --- a/repos/os/run/timeout.run +++ b/repos/os/run/timeout.run @@ -10,7 +10,7 @@ proc fast_polling_buf_size { } { if {[expr [have_board pbxa9] && [have_spec foc]]} { return 40000000 } if {[expr [have_board imx53_qsb_tz] && [have_spec hw]]} { return 40000000 } if {[expr [have_board rpi] && [have_spec hw]]} { return 40000000 } - if {[expr [have_board riscv_qemu] && [have_spec hw]]} { return 15000000 } + if {[expr [have_board virt_qemu_riscv] && [have_spec hw]]} { return 15000000 } return 80000000 } diff --git a/repos/os/run/vmm_arm.run b/repos/os/run/vmm_arm.run index d5b5e54bbe..06a8ada3ae 100644 --- a/repos/os/run/vmm_arm.run +++ b/repos/os/run/vmm_arm.run @@ -7,7 +7,8 @@ assert_spec hw if { ![have_board imx7d_sabre] && ![have_board imx8q_evk] && - ![have_board virt_qemu]} { + ![have_board virt_qemu_arm_v7a] && + ![have_board virt_qemu_arm_v8a]} { puts "Run script is not supported on this platform" exit 0 } diff --git a/repos/ports/run/verify.run b/repos/ports/run/verify.run index 6d145b8213..7d69ee1bb0 100644 --- a/repos/ports/run/verify.run +++ b/repos/ports/run/verify.run @@ -1,4 +1,4 @@ -if {[get_cmd_switch --autopilot] && [have_board riscv_qemu]} { +if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { puts "Autopilot mode is not supported on this platform." exit 0 } diff --git a/tool/builddir/build.conf/run_arm_v7 b/tool/builddir/build.conf/run_arm_v7 index 722bae3f91..8b399f2b85 100644 --- a/tool/builddir/build.conf/run_arm_v7 +++ b/tool/builddir/build.conf/run_arm_v7 @@ -5,13 +5,13 @@ QEMU_RUN_OPT := --include power_on/qemu --include log/qemu #KERNEL ?= hw # board to use (imx53_qsb, imx53_qsb_tz, imx6q_sabrelite, imx7d_sabre, -# nit6_solox, pbxa9, usb_armory, virt_qemu, wand_quad, +# nit6_solox, pbxa9, usb_armory, virt_qemu_arm_v7a, wand_quad, # or zynq_qemu) #BOARD ?= pbxa9 # local variable for run-tool arguments that depend on the used board -BOARD_RUN_OPT(pbxa9) = $(QEMU_RUN_OPT) -BOARD_RUN_OPT(virt_qemu) = $(QEMU_RUN_OPT) +BOARD_RUN_OPT(pbxa9) = $(QEMU_RUN_OPT) +BOARD_RUN_OPT(virt_qemu_arm_v7a) = $(QEMU_RUN_OPT) ## ## Qemu arguments, effective when using the run tool's 'power_on/qemu' back end diff --git a/tool/builddir/build.conf/run_arm_v8 b/tool/builddir/build.conf/run_arm_v8 index 976840ef17..192eea86f6 100644 --- a/tool/builddir/build.conf/run_arm_v8 +++ b/tool/builddir/build.conf/run_arm_v8 @@ -8,9 +8,9 @@ QEMU_RUN_OPT := --include power_on/qemu --include log/qemu #BOARD ?= rpi3 # local variable for run-tool arguments that depend on the used board -BOARD_RUN_OPT(linux) := --include power_on/linux --include log/linux -BOARD_RUN_OPT(rpi3) := $(QEMU_RUN_OPT) -BOARD_RUN_OPT(virt_qemu) := $(QEMU_RUN_OPT) +BOARD_RUN_OPT(linux) := --include power_on/linux --include log/linux +BOARD_RUN_OPT(rpi3) := $(QEMU_RUN_OPT) +BOARD_RUN_OPT(virt_qemu_arm_v8a) := $(QEMU_RUN_OPT) ## ## Qemu arguments, effective when using the run tool's 'power_on/qemu' back end diff --git a/tool/builddir/build.conf/run_riscv b/tool/builddir/build.conf/run_riscv index 9ae807a2e1..eaf00f0105 100644 --- a/tool/builddir/build.conf/run_riscv +++ b/tool/builddir/build.conf/run_riscv @@ -5,7 +5,7 @@ QEMU_RUN_OPT := --include power_on/qemu --include log/qemu KERNEL ?= hw # board to use (riscv_qemu) -BOARD ?= riscv_qemu +BOARD ?= virt_qemu_riscv # local variable for run-tool arguments that depend on the used board -BOARD_RUN_OPT(riscv_qemu) = $(QEMU_RUN_OPT) +BOARD_RUN_OPT(virt_qemu_riscv) = $(QEMU_RUN_OPT) diff --git a/tool/run/power_on/qemu b/tool/run/power_on/qemu index 06ebc518fd..d1cf7437a2 100644 --- a/tool/run/power_on/qemu +++ b/tool/run/power_on/qemu @@ -54,18 +54,11 @@ proc board_qemu_args { } { ## # Each line is appended to qemu_args. - # Arguments might be general or restricted to a particular spec as follows: - # general arguments - # arm_v7a: arguments for arm_v7a # set qemu_args "" foreach line [split $file_content "\n"] { - if {[regexp {^([\w]+):(.*)$} $line dummy spec arg]} { - if {[have_spec $spec]} { append qemu_args " $arg" } - } else { # general arguments append qemu_args " $line" - } } return $qemu_args From 48711c6f8b8f0488cc476e86bddea5a0b1504822 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 12 Aug 2022 13:49:05 +0200 Subject: [PATCH 164/354] sculpt: hook for audio-driver integration This patch allows the leitzentrale subsystem to control an audio driver hosted in the drivers subsystem. An example use case is the toggling of the speaker during phone calls. --- repos/gems/run/sculpt.run | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index ac575b1b43..f6f5c2f92c 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -389,6 +389,8 @@ install_config { + + From 44e2cd14a0a29b86de96d89a62065f8160bbb84c Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 17 Aug 2022 11:47:40 +0200 Subject: [PATCH 165/354] depot: update recipe hashes --- repos/base-fiasco/recipes/src/base-fiasco/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash | 2 +- repos/base-foc/recipes/src/base-foc-pbxa9/hash | 2 +- repos/base-foc/recipes/src/base-foc-pc/hash | 2 +- repos/base-foc/recipes/src/base-foc-rpi3/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash | 2 +- repos/base-hw/recipes/src/base-hw-nit6_solox/hash | 2 +- repos/base-hw/recipes/src/base-hw-pbxa9/hash | 2 +- repos/base-hw/recipes/src/base-hw-pc/hash | 2 +- repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash | 2 +- repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash | 2 +- repos/base-linux/recipes/api/base-linux/hash | 2 +- repos/base-linux/recipes/src/base-linux/hash | 2 +- repos/base-nova/recipes/api/base-nova/hash | 2 +- repos/base-nova/recipes/src/base-nova/hash | 2 +- repos/base-okl4/recipes/src/base-okl4/hash | 2 +- repos/base-pistachio/recipes/src/base-pistachio/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-x86/hash | 2 +- repos/base/recipes/api/base/hash | 2 +- repos/base/recipes/api/timer_session/hash | 2 +- repos/base/recipes/pkg/test-ds_ownership/hash | 2 +- repos/base/recipes/pkg/test-entrypoint/hash | 2 +- repos/base/recipes/pkg/test-log/hash | 2 +- repos/base/recipes/pkg/test-mmio/hash | 2 +- repos/base/recipes/pkg/test-new_delete/hash | 2 +- repos/base/recipes/pkg/test-reconstructible/hash | 2 +- repos/base/recipes/pkg/test-registry/hash | 2 +- repos/base/recipes/pkg/test-rm_fault/hash | 2 +- repos/base/recipes/pkg/test-rm_fault_no_nox/hash | 2 +- repos/base/recipes/pkg/test-rm_nested/hash | 2 +- repos/base/recipes/pkg/test-rm_stress/hash | 2 +- repos/base/recipes/pkg/test-sanitizer/hash | 2 +- repos/base/recipes/pkg/test-stack_smash/hash | 2 +- repos/base/recipes/pkg/test-synced_interface/hash | 2 +- repos/base/recipes/pkg/test-timer/hash | 2 +- repos/base/recipes/pkg/test-tls/hash | 2 +- repos/base/recipes/pkg/test-token/hash | 2 +- repos/base/recipes/pkg/test-xml_generator/hash | 2 +- repos/base/recipes/pkg/test-xml_node/hash | 2 +- repos/base/recipes/src/test-ds_ownership/hash | 2 +- repos/base/recipes/src/test-entrypoint/hash | 2 +- repos/base/recipes/src/test-log/hash | 2 +- repos/base/recipes/src/test-mmio/hash | 2 +- repos/base/recipes/src/test-new_delete/hash | 2 +- repos/base/recipes/src/test-reconstructible/hash | 2 +- repos/base/recipes/src/test-registry/hash | 2 +- repos/base/recipes/src/test-rm_fault/hash | 2 +- repos/base/recipes/src/test-rm_nested/hash | 2 +- repos/base/recipes/src/test-rm_stress/hash | 2 +- repos/base/recipes/src/test-sanitizer/hash | 2 +- repos/base/recipes/src/test-segfault/hash | 2 +- repos/base/recipes/src/test-stack_smash/hash | 2 +- repos/base/recipes/src/test-synced_interface/hash | 2 +- repos/base/recipes/src/test-timer/hash | 2 +- repos/base/recipes/src/test-tls/hash | 2 +- repos/base/recipes/src/test-token/hash | 2 +- repos/base/recipes/src/test-xml_generator/hash | 2 +- repos/base/recipes/src/test-xml_node/hash | 2 +- repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash | 2 +- repos/dde_bsd/recipes/src/bsd_audio_drv/hash | 2 +- repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash | 2 +- repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash | 2 +- repos/dde_linux/recipes/pkg/usb_modem_drv/hash | 2 +- repos/dde_linux/recipes/pkg/wireguard/hash | 2 +- repos/dde_linux/recipes/src/fec_nic_drv/hash | 2 +- repos/dde_linux/recipes/src/legacy_usb_host_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_hid_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_modem_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_net_drv/hash | 2 +- repos/dde_linux/recipes/src/vfs_lxip/hash | 2 +- repos/dde_linux/recipes/src/wireguard/hash | 2 +- repos/dde_rump/recipes/src/rump/hash | 2 +- repos/demo/recipes/src/demo/hash | 2 +- repos/gems/recipes/api/ctf/hash | 2 +- repos/gems/recipes/api/trace_recorder_policy/hash | 2 +- repos/gems/recipes/pkg/backdrop/hash | 2 +- repos/gems/recipes/pkg/cbe_check/hash | 2 +- repos/gems/recipes/pkg/cbe_demo/hash | 2 +- repos/gems/recipes/pkg/cbe_fs/hash | 2 +- repos/gems/recipes/pkg/cbe_init/hash | 2 +- repos/gems/recipes/pkg/cbe_shell/hash | 2 +- repos/gems/recipes/pkg/cbe_ta_fs/hash | 2 +- repos/gems/recipes/pkg/cbe_ta_vfs/hash | 2 +- repos/gems/recipes/pkg/cbe_vbox5-nova/hash | 2 +- repos/gems/recipes/pkg/cbe_vfs/hash | 2 +- repos/gems/recipes/pkg/cbe_vm_fs/hash | 2 +- repos/gems/recipes/pkg/depot_download/hash | 2 +- repos/gems/recipes/pkg/download_coreplus/hash | 2 +- repos/gems/recipes/pkg/drivers_managed-pc/hash | 2 +- repos/gems/recipes/pkg/drivers_nic-pc/hash | 2 +- repos/gems/recipes/pkg/file_vault/hash | 2 +- repos/gems/recipes/pkg/fonts_fs/hash | 2 +- repos/gems/recipes/pkg/motif_decorator/hash | 2 +- repos/gems/recipes/pkg/motif_wm/hash | 2 +- repos/gems/recipes/pkg/nano3d/hash | 2 +- repos/gems/recipes/pkg/sculpt/hash | 2 +- repos/gems/recipes/pkg/sculpt_distribution-pc/hash | 2 +- repos/gems/recipes/pkg/sculpt_distribution/hash | 2 +- repos/gems/recipes/pkg/sticks_blue_backdrop/hash | 2 +- repos/gems/recipes/pkg/terminal/hash | 2 +- repos/gems/recipes/pkg/test-depot_query_index/hash | 2 +- repos/gems/recipes/pkg/test-fs_tool/hash | 2 +- repos/gems/recipes/pkg/test-libc_vfs_audit/hash | 2 +- repos/gems/recipes/pkg/themed_decorator/hash | 2 +- repos/gems/recipes/pkg/themed_wm/hash | 2 +- repos/gems/recipes/pkg/touch_keyboard/hash | 2 +- repos/gems/recipes/pkg/trace_fs/hash | 2 +- repos/gems/recipes/pkg/trace_recorder/hash | 2 +- repos/gems/recipes/pkg/window_layouter/hash | 2 +- repos/gems/recipes/pkg/wm/hash | 2 +- repos/gems/recipes/raw/drivers_managed-pc/hash | 2 +- repos/gems/recipes/raw/trace_recorder/hash | 2 +- repos/gems/recipes/src/backdrop/hash | 2 +- repos/gems/recipes/src/cbe/hash | 2 +- repos/gems/recipes/src/cpu_load_display/hash | 2 +- repos/gems/recipes/src/decorator/hash | 2 +- repos/gems/recipes/src/depot_deploy/hash | 2 +- repos/gems/recipes/src/depot_download_manager/hash | 2 +- repos/gems/recipes/src/depot_query/hash | 2 +- repos/gems/recipes/src/driver_manager/hash | 2 +- repos/gems/recipes/src/file_terminal/hash | 2 +- repos/gems/recipes/src/file_vault/hash | 2 +- repos/gems/recipes/src/fs_query/hash | 2 +- repos/gems/recipes/src/fs_tool/hash | 2 +- repos/gems/recipes/src/gpt_write/hash | 2 +- repos/gems/recipes/src/gui_fader/hash | 2 +- repos/gems/recipes/src/menu_view/hash | 2 +- repos/gems/recipes/src/mixer_gui_qt/hash | 2 +- repos/gems/recipes/src/nano3d/hash | 2 +- repos/gems/recipes/src/sculpt_manager/hash | 2 +- repos/gems/recipes/src/terminal/hash | 2 +- repos/gems/recipes/src/test-tiled_wm/hash | 2 +- repos/gems/recipes/src/text_area/hash | 2 +- repos/gems/recipes/src/themed_decorator/hash | 2 +- repos/gems/recipes/src/touch_keyboard/hash | 2 +- repos/gems/recipes/src/trace_recorder/hash | 2 +- repos/gems/recipes/src/trace_recorder_policy/hash | 2 +- repos/gems/recipes/src/vfs_audit/hash | 2 +- repos/gems/recipes/src/vfs_gpu/hash | 2 +- repos/gems/recipes/src/vfs_import/hash | 2 +- repos/gems/recipes/src/vfs_pipe/hash | 2 +- repos/gems/recipes/src/vfs_trace/hash | 2 +- repos/gems/recipes/src/vfs_ttf/hash | 2 +- repos/gems/recipes/src/window_layouter/hash | 2 +- repos/gems/recipes/src/wm/hash | 2 +- repos/libports/recipes/api/gmp/hash | 2 +- repos/libports/recipes/api/libc/hash | 2 +- repos/libports/recipes/api/libdrm/hash | 2 +- repos/libports/recipes/api/qt5/hash | 2 +- repos/libports/recipes/pkg/acpica/hash | 2 +- repos/libports/recipes/pkg/gcov/hash | 2 +- repos/libports/recipes/pkg/mesa_gears/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-cpu/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-intel/hash | 2 +- repos/libports/recipes/pkg/pdf_view/hash | 2 +- repos/libports/recipes/pkg/qt5_textedit/hash | 2 +- repos/libports/recipes/pkg/system_clock-pc/hash | 2 +- repos/libports/recipes/pkg/system_rtc-linux/hash | 2 +- repos/libports/recipes/pkg/system_rtc-pc/hash | 2 +- repos/libports/recipes/pkg/test-expat/hash | 2 +- repos/libports/recipes/pkg/test-ldso/hash | 2 +- repos/libports/recipes/pkg/test-libc/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lwip/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lxip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash | 2 +- repos/libports/recipes/pkg/test-libc_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_execve/hash | 2 +- repos/libports/recipes/pkg/test-libc_fifo_pipe/hash | 2 +- repos/libports/recipes/pkg/test-libc_fork/hash | 2 +- repos/libports/recipes/pkg/test-libc_getenv/hash | 2 +- repos/libports/recipes/pkg/test-libc_pipe/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_ram/hash | 2 +- repos/libports/recipes/pkg/test-pthread/hash | 2 +- repos/libports/recipes/pkg/test-sequence/hash | 2 +- repos/libports/recipes/pkg/test-spark/hash | 2 +- repos/libports/recipes/pkg/test-spark_exception/hash | 2 +- repos/libports/recipes/pkg/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/pkg/test-stdcxx/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash | 2 +- repos/libports/recipes/pkg/usb_webcam/hash | 2 +- repos/libports/recipes/src/acpica/hash | 2 +- repos/libports/recipes/src/curl/hash | 2 +- repos/libports/recipes/src/expat/hash | 2 +- repos/libports/recipes/src/extract/hash | 2 +- repos/libports/recipes/src/fetchurl/hash | 2 +- repos/libports/recipes/src/ffi/hash | 2 +- repos/libports/recipes/src/freetype/hash | 2 +- repos/libports/recipes/src/fs_utils/hash | 2 +- repos/libports/recipes/src/gcov/hash | 2 +- repos/libports/recipes/src/gmp/hash | 2 +- repos/libports/recipes/src/icu/hash | 2 +- repos/libports/recipes/src/jbig2dec/hash | 2 +- repos/libports/recipes/src/jpeg/hash | 2 +- repos/libports/recipes/src/libarchive/hash | 2 +- repos/libports/recipes/src/libc/hash | 2 +- repos/libports/recipes/src/libdrm/hash | 2 +- repos/libports/recipes/src/libiconv/hash | 2 +- repos/libports/recipes/src/liblzma/hash | 2 +- repos/libports/recipes/src/libpng/hash | 2 +- repos/libports/recipes/src/libqgenodeviewwidget/hash | 2 +- repos/libports/recipes/src/libqpluginwidget/hash | 2 +- repos/libports/recipes/src/libsparkcrypto/hash | 2 +- repos/libports/recipes/src/libssh/hash | 2 +- repos/libports/recipes/src/libusb/hash | 2 +- repos/libports/recipes/src/libuvc/hash | 2 +- repos/libports/recipes/src/libyuv/hash | 2 +- repos/libports/recipes/src/mesa/hash | 2 +- repos/libports/recipes/src/mesa_gears/hash | 2 +- repos/libports/recipes/src/mupdf/hash | 2 +- repos/libports/recipes/src/ncurses/hash | 2 +- repos/libports/recipes/src/openjpeg/hash | 2 +- repos/libports/recipes/src/openssl/hash | 2 +- repos/libports/recipes/src/pcre/hash | 2 +- repos/libports/recipes/src/pcre16/hash | 2 +- repos/libports/recipes/src/pdf_view/hash | 2 +- repos/libports/recipes/src/posix/hash | 2 +- repos/libports/recipes/src/qt5_base/hash | 2 +- repos/libports/recipes/src/qt5_calculatorform/hash | 2 +- repos/libports/recipes/src/qt5_component/hash | 2 +- repos/libports/recipes/src/qt5_declarative/hash | 2 +- repos/libports/recipes/src/qt5_graphicaleffects/hash | 2 +- repos/libports/recipes/src/qt5_launchpad/hash | 2 +- repos/libports/recipes/src/qt5_openglwindow/hash | 2 +- repos/libports/recipes/src/qt5_quickcontrols/hash | 2 +- repos/libports/recipes/src/qt5_quickcontrols2/hash | 2 +- repos/libports/recipes/src/qt5_samegame/hash | 2 +- repos/libports/recipes/src/qt5_svg/hash | 2 +- repos/libports/recipes/src/qt5_testqstring/hash | 2 +- repos/libports/recipes/src/qt5_tetrix/hash | 2 +- repos/libports/recipes/src/qt5_textedit/hash | 2 +- repos/libports/recipes/src/qt5_virtualkeyboard/hash | 2 +- repos/libports/recipes/src/qt5_virtualkeyboard_example/hash | 2 +- repos/libports/recipes/src/sanitizer/hash | 2 +- repos/libports/recipes/src/spark/hash | 2 +- repos/libports/recipes/src/stdcxx/hash | 2 +- repos/libports/recipes/src/stdin2out/hash | 2 +- repos/libports/recipes/src/system_rtc/hash | 2 +- repos/libports/recipes/src/test-expat/hash | 2 +- repos/libports/recipes/src/test-ldso/hash | 2 +- repos/libports/recipes/src/test-libc/hash | 2 +- repos/libports/recipes/src/test-libc_connect/hash | 2 +- repos/libports/recipes/src/test-libc_counter/hash | 2 +- repos/libports/recipes/src/test-libc_execve/hash | 2 +- repos/libports/recipes/src/test-libc_fifo_pipe/hash | 2 +- repos/libports/recipes/src/test-libc_fork/hash | 2 +- repos/libports/recipes/src/test-libc_getenv/hash | 2 +- repos/libports/recipes/src/test-libc_pipe/hash | 2 +- repos/libports/recipes/src/test-libc_vfs/hash | 2 +- repos/libports/recipes/src/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/src/test-netty/hash | 2 +- repos/libports/recipes/src/test-pthread/hash | 2 +- repos/libports/recipes/src/test-qpluginwidget/hash | 2 +- repos/libports/recipes/src/test-qt_core/hash | 2 +- repos/libports/recipes/src/test-qt_core_cmake/hash | 2 +- repos/libports/recipes/src/test-qt_quick/hash | 2 +- repos/libports/recipes/src/test-spark/hash | 2 +- repos/libports/recipes/src/test-spark_exception/hash | 2 +- repos/libports/recipes/src/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/src/test-stdcxx/hash | 2 +- repos/libports/recipes/src/test-tcp/hash | 2 +- repos/libports/recipes/src/usb_webcam/hash | 2 +- repos/libports/recipes/src/vesa_drv/hash | 2 +- repos/libports/recipes/src/vfs_fatfs/hash | 2 +- repos/libports/recipes/src/vfs_jitterentropy/hash | 2 +- repos/libports/recipes/src/vfs_libusb/hash | 2 +- repos/libports/recipes/src/vfs_lwip/hash | 2 +- repos/libports/recipes/src/vfs_oss/hash | 2 +- repos/libports/recipes/src/zlib/hash | 2 +- repos/os/recipes/api/audio_in_session/hash | 2 +- repos/os/recipes/api/block_session/hash | 2 +- repos/os/recipes/api/genode_c_api/hash | 2 +- repos/os/recipes/api/gpu_session/hash | 2 +- repos/os/recipes/api/net/hash | 2 +- repos/os/recipes/api/nic_session/hash | 2 +- repos/os/recipes/api/os/hash | 2 +- repos/os/recipes/api/platform_session/hash | 2 +- repos/os/recipes/api/trace/hash | 2 +- repos/os/recipes/api/uplink_session/hash | 2 +- repos/os/recipes/pkg/black_hole/hash | 2 +- repos/os/recipes/pkg/chroot/hash | 2 +- repos/os/recipes/pkg/clipboard/hash | 2 +- repos/os/recipes/pkg/cpu_balancer/hash | 2 +- repos/os/recipes/pkg/cpu_balancer_config/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-linux/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pc/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash | 2 +- repos/os/recipes/pkg/drivers_nic-linux/hash | 2 +- repos/os/recipes/pkg/drivers_nic-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash | 2 +- repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash | 2 +- repos/os/recipes/pkg/fs_report/hash | 2 +- repos/os/recipes/pkg/fs_rom/hash | 2 +- repos/os/recipes/pkg/mixer/hash | 2 +- repos/os/recipes/pkg/nic_router-nat/hash | 2 +- repos/os/recipes/pkg/nit_focus/hash | 2 +- repos/os/recipes/pkg/recall_fs/hash | 2 +- repos/os/recipes/pkg/report_rom/hash | 2 +- repos/os/recipes/pkg/rom_filter/hash | 2 +- repos/os/recipes/pkg/rom_reporter/hash | 2 +- repos/os/recipes/pkg/test-black_hole/hash | 2 +- repos/os/recipes/pkg/test-capture/hash | 2 +- repos/os/recipes/pkg/test-clipboard/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config_loader/hash | 2 +- repos/os/recipes/pkg/test-fault_detection/hash | 2 +- repos/os/recipes/pkg/test-fs_packet/hash | 2 +- repos/os/recipes/pkg/test-fs_report/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_fs/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_ram/hash | 2 +- repos/os/recipes/pkg/test-init/hash | 2 +- repos/os/recipes/pkg/test-init_loop/hash | 2 +- repos/os/recipes/pkg/test-lx_block/hash | 2 +- repos/os/recipes/pkg/test-nic_loopback/hash | 2 +- repos/os/recipes/pkg/test-nic_perf/hash | 2 +- repos/os/recipes/pkg/test-nic_perf_router/hash | 2 +- repos/os/recipes/pkg/test-part_block_gpt/hash | 2 +- repos/os/recipes/pkg/test-part_block_mbr/hash | 2 +- repos/os/recipes/pkg/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/pkg/test-read_only_rom/hash | 2 +- repos/os/recipes/pkg/test-report_rom/hash | 2 +- repos/os/recipes/pkg/test-resource_request/hash | 2 +- repos/os/recipes/pkg/test-resource_yield/hash | 2 +- repos/os/recipes/pkg/test-rom_filter/hash | 2 +- repos/os/recipes/pkg/test-rtc/hash | 2 +- repos/os/recipes/pkg/test-sandbox/hash | 2 +- repos/os/recipes/pkg/test-signal/hash | 2 +- repos/os/recipes/pkg/test-slab/hash | 2 +- repos/os/recipes/pkg/test-terminal_crosslink/hash | 2 +- repos/os/recipes/pkg/test-trace/hash | 2 +- repos/os/recipes/pkg/test-trace_buffer/hash | 2 +- repos/os/recipes/pkg/test-trace_logger/hash | 2 +- repos/os/recipes/pkg/test-utf8/hash | 2 +- repos/os/recipes/pkg/test-vfs_block/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_fs/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_ram/hash | 2 +- repos/os/recipes/pkg/test-weak_ptr/hash | 2 +- repos/os/recipes/pkg/trace_logger/hash | 2 +- repos/os/recipes/pkg/vfs/hash | 2 +- repos/os/recipes/pkg/vfs_block/hash | 2 +- repos/os/recipes/src/acpi_drv/hash | 2 +- repos/os/recipes/src/ahci_drv/hash | 2 +- repos/os/recipes/src/black_hole/hash | 2 +- repos/os/recipes/src/block_tester/hash | 2 +- repos/os/recipes/src/boot_fb_drv/hash | 2 +- repos/os/recipes/src/cached_fs_rom/hash | 2 +- repos/os/recipes/src/chroot/hash | 2 +- repos/os/recipes/src/clipboard/hash | 2 +- repos/os/recipes/src/cpu_balancer/hash | 2 +- repos/os/recipes/src/cpu_burner/hash | 2 +- repos/os/recipes/src/dummy/hash | 2 +- repos/os/recipes/src/dummy_rtc_drv/hash | 2 +- repos/os/recipes/src/dynamic_rom/hash | 2 +- repos/os/recipes/src/event_filter/hash | 2 +- repos/os/recipes/src/fb_sdl/hash | 2 +- repos/os/recipes/src/fs_report/hash | 2 +- repos/os/recipes/src/fs_rom/hash | 2 +- repos/os/recipes/src/global_keys_handler/hash | 2 +- repos/os/recipes/src/gui_fb/hash | 2 +- repos/os/recipes/src/init/hash | 2 +- repos/os/recipes/src/input_event_bridge/hash | 2 +- repos/os/recipes/src/intel_gpu_drv/hash | 2 +- repos/os/recipes/src/lan9118_nic_drv/hash | 2 +- repos/os/recipes/src/linux_nic_drv/hash | 2 +- repos/os/recipes/src/linux_rtc_drv/hash | 2 +- repos/os/recipes/src/loader/hash | 2 +- repos/os/recipes/src/log_core/hash | 2 +- repos/os/recipes/src/log_terminal/hash | 2 +- repos/os/recipes/src/lx_block/hash | 2 +- repos/os/recipes/src/lx_fs/hash | 2 +- repos/os/recipes/src/mixer/hash | 2 +- repos/os/recipes/src/nic_bridge/hash | 2 +- repos/os/recipes/src/nic_loopback/hash | 2 +- repos/os/recipes/src/nic_perf/hash | 2 +- repos/os/recipes/src/nic_router/hash | 2 +- repos/os/recipes/src/nit_focus/hash | 2 +- repos/os/recipes/src/nitpicker/hash | 2 +- repos/os/recipes/src/nvme_drv/hash | 2 +- repos/os/recipes/src/part_block/hash | 2 +- repos/os/recipes/src/pbxa9_drivers/hash | 2 +- repos/os/recipes/src/pci_decode/hash | 2 +- repos/os/recipes/src/platform_drv/hash | 2 +- repos/os/recipes/src/ps2_drv/hash | 2 +- repos/os/recipes/src/report_rom/hash | 2 +- repos/os/recipes/src/rom_filter/hash | 2 +- repos/os/recipes/src/rom_logger/hash | 2 +- repos/os/recipes/src/rom_reporter/hash | 2 +- repos/os/recipes/src/rom_to_file/hash | 2 +- repos/os/recipes/src/rtc_drv/hash | 2 +- repos/os/recipes/src/sandbox/hash | 2 +- repos/os/recipes/src/sequence/hash | 2 +- repos/os/recipes/src/shim/hash | 2 +- repos/os/recipes/src/terminal_crosslink/hash | 2 +- repos/os/recipes/src/terminal_log/hash | 2 +- repos/os/recipes/src/test-black_hole/hash | 2 +- repos/os/recipes/src/test-bomb/hash | 2 +- repos/os/recipes/src/test-capture/hash | 2 +- repos/os/recipes/src/test-clipboard/hash | 2 +- repos/os/recipes/src/test-dynamic_config/hash | 2 +- repos/os/recipes/src/test-fault_detection/hash | 2 +- repos/os/recipes/src/test-fs_packet/hash | 2 +- repos/os/recipes/src/test-fs_report/hash | 2 +- repos/os/recipes/src/test-immutable_rom/hash | 2 +- repos/os/recipes/src/test-init/hash | 2 +- repos/os/recipes/src/test-init_loop/hash | 2 +- repos/os/recipes/src/test-nic_loopback/hash | 2 +- repos/os/recipes/src/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/src/test-report_rom/hash | 2 +- repos/os/recipes/src/test-resource_request/hash | 2 +- repos/os/recipes/src/test-resource_yield/hash | 2 +- repos/os/recipes/src/test-rtc/hash | 2 +- repos/os/recipes/src/test-sandbox/hash | 2 +- repos/os/recipes/src/test-signal/hash | 2 +- repos/os/recipes/src/test-slab/hash | 2 +- repos/os/recipes/src/test-terminal_crosslink/hash | 2 +- repos/os/recipes/src/test-trace/hash | 2 +- repos/os/recipes/src/test-trace_buffer/hash | 2 +- repos/os/recipes/src/test-trace_logger/hash | 2 +- repos/os/recipes/src/test-utf8/hash | 2 +- repos/os/recipes/src/test-vfs_capture/hash | 2 +- repos/os/recipes/src/test-vfs_stress/hash | 2 +- repos/os/recipes/src/test-weak_ptr/hash | 2 +- repos/os/recipes/src/top/hash | 2 +- repos/os/recipes/src/trace_logger/hash | 2 +- repos/os/recipes/src/trace_policy/hash | 2 +- repos/os/recipes/src/trace_subject_reporter/hash | 2 +- repos/os/recipes/src/usb_block_drv/hash | 2 +- repos/os/recipes/src/vfs/hash | 2 +- repos/os/recipes/src/vfs_block/hash | 2 +- repos/os/recipes/src/vfs_capture/hash | 2 +- repos/os/recipes/src/vfs_tap/hash | 2 +- repos/os/recipes/src/virt_qemu_drivers/hash | 2 +- repos/os/recipes/src/virtdev_rom/hash | 2 +- repos/os/recipes/src/virtio_fb_drv/hash | 2 +- repos/os/recipes/src/virtio_input_drv/hash | 2 +- repos/os/recipes/src/virtio_nic_drv/hash | 2 +- repos/os/recipes/src/vmm/hash | 2 +- repos/pc/recipes/api/pc_linux/hash | 2 +- repos/pc/recipes/pkg/test_usb_host_drv-pc/hash | 2 +- repos/pc/recipes/pkg/wifi/hash | 2 +- repos/pc/recipes/src/pc_intel_fb_drv/hash | 2 +- repos/pc/recipes/src/pc_usb_host_drv/hash | 2 +- repos/pc/recipes/src/pc_wifi_drv/hash | 2 +- repos/ports/recipes/pkg/report_dump/hash | 2 +- repos/ports/recipes/pkg/system_shell/hash | 2 +- repos/ports/recipes/pkg/vbox5-nova-capture/hash | 2 +- repos/ports/recipes/pkg/vbox5-nova-sculpt/hash | 2 +- repos/ports/recipes/pkg/vbox5/hash | 2 +- repos/ports/recipes/pkg/vbox6-capture/hash | 2 +- repos/ports/recipes/pkg/vbox6/hash | 2 +- repos/ports/recipes/src/bash-minimal/hash | 2 +- repos/ports/recipes/src/bash/hash | 2 +- repos/ports/recipes/src/binutils_x86/hash | 2 +- repos/ports/recipes/src/coreutils-minimal/hash | 2 +- repos/ports/recipes/src/coreutils/hash | 2 +- repos/ports/recipes/src/diffutils/hash | 2 +- repos/ports/recipes/src/e2fsprogs-minimal/hash | 2 +- repos/ports/recipes/src/e2fsprogs/hash | 2 +- repos/ports/recipes/src/findutils/hash | 2 +- repos/ports/recipes/src/gcc_x86/hash | 2 +- repos/ports/recipes/src/gnumake/hash | 2 +- repos/ports/recipes/src/grep/hash | 2 +- repos/ports/recipes/src/less/hash | 2 +- repos/ports/recipes/src/lighttpd/hash | 2 +- repos/ports/recipes/src/sed/hash | 2 +- repos/ports/recipes/src/tar/hash | 2 +- repos/ports/recipes/src/tclsh/hash | 2 +- repos/ports/recipes/src/vbox5-nova/hash | 2 +- repos/ports/recipes/src/vbox5/hash | 2 +- repos/ports/recipes/src/vbox6/hash | 2 +- repos/ports/recipes/src/verify/hash | 2 +- repos/ports/recipes/src/vim-minimal/hash | 2 +- repos/ports/recipes/src/vim/hash | 2 +- repos/ports/recipes/src/which/hash | 2 +- 490 files changed, 490 insertions(+), 490 deletions(-) diff --git a/repos/base-fiasco/recipes/src/base-fiasco/hash b/repos/base-fiasco/recipes/src/base-fiasco/hash index e295e18337..87d4d1f687 100644 --- a/repos/base-fiasco/recipes/src/base-fiasco/hash +++ b/repos/base-fiasco/recipes/src/base-fiasco/hash @@ -1 +1 @@ -2022-05-24 1790ce242c001ed77aab9695f69923a44d1dc1d1 +2022-08-16 e534748e020cd5dc93ab4404372a29ad5b602997 diff --git a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash index 4746445245..ee6952bcd6 100644 --- a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash +++ b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-05-24 f7900083623a2009d35234c47d2475dea8f6cf53 +2022-08-16 9d46cde324a47bdb94c5a40b116d8bb2af4a8313 diff --git a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash index f276f3e23e..d0dd38dfe4 100644 --- a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash +++ b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash @@ -1 +1 @@ -2022-05-24 f7d228f6419c2fc9b1b0faf4ba8d88862ba61e81 +2022-08-16 1a57ae9061fe959d39aee9462564190e9c32c66d diff --git a/repos/base-foc/recipes/src/base-foc-pbxa9/hash b/repos/base-foc/recipes/src/base-foc-pbxa9/hash index 9db655430c..fcbaff0096 100644 --- a/repos/base-foc/recipes/src/base-foc-pbxa9/hash +++ b/repos/base-foc/recipes/src/base-foc-pbxa9/hash @@ -1 +1 @@ -2022-05-24 391b798b7c1d1b44ff65d855980eb41a8f4a87c1 +2022-08-16 7c5a975641686041296b1bb278faf7f364944e7d diff --git a/repos/base-foc/recipes/src/base-foc-pc/hash b/repos/base-foc/recipes/src/base-foc-pc/hash index 0ae034bc12..20fe04d21c 100644 --- a/repos/base-foc/recipes/src/base-foc-pc/hash +++ b/repos/base-foc/recipes/src/base-foc-pc/hash @@ -1 +1 @@ -2022-05-24 79eab679e71dd70803b0e1647a23e2ba86c76f50 +2022-08-16 a36a65376e4e1eb956f994ac9178b677da9109f3 diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/hash b/repos/base-foc/recipes/src/base-foc-rpi3/hash index 4b5f6173ab..2623559a56 100644 --- a/repos/base-foc/recipes/src/base-foc-rpi3/hash +++ b/repos/base-foc/recipes/src/base-foc-rpi3/hash @@ -1 +1 @@ -2022-05-24 7a16aeb081d1392c36d83f526936f17cc9560442 +2022-08-16 fa673b32b8129a566d9fcec8ffc02a354a28eef8 diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash index b22493af83..4eb0a58e97 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash @@ -1 +1 @@ -2022-05-24 ab1cb582165e76bda4abf27870f44ad7d1ae5b6d +2022-08-16 976389f5b9bf479eb53b488e07ca8554579a80cd diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash index 31bad89aab..e2d6858f2c 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash @@ -1 +1 @@ -2022-05-24 0fff6ce83b962b3fd54cf6eda0a157cb0cb0c9d5 +2022-08-16 b16d04981a6473a3a660ad73773a4e1f3fc28a57 diff --git a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash index 5259a2354f..191cb39dd5 100644 --- a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash +++ b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-05-24 8c17512664a648eaed876c815ea678770eda3280 +2022-08-16 cdc56b2ecedfe3c2f7e6d5e62af5474ef0c48ca3 diff --git a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash index 31826aea8e..52944d28e2 100644 --- a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash +++ b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash @@ -1 +1 @@ -2022-05-24 edc396d9bc9a2ebf73590e70c1363020226909be +2022-08-16 66fac9533e8ab4ab3bd4da72667217a49433c2b5 diff --git a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash index a2e240820d..8487232b2c 100644 --- a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash +++ b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash @@ -1 +1 @@ -2022-05-24 da90478c4c0b8993041bc59488eedb124e680e78 +2022-08-16 4b063a759881c71edf7b691c0c3ca6be53bfc024 diff --git a/repos/base-hw/recipes/src/base-hw-pbxa9/hash b/repos/base-hw/recipes/src/base-hw-pbxa9/hash index 8842770459..db13501cf9 100644 --- a/repos/base-hw/recipes/src/base-hw-pbxa9/hash +++ b/repos/base-hw/recipes/src/base-hw-pbxa9/hash @@ -1 +1 @@ -2022-05-24 1b34e317209c48bfc88af6118db32be261ce3e0c +2022-08-16 602b0ae5f92f3153e6267f84af376740b60aa8a6 diff --git a/repos/base-hw/recipes/src/base-hw-pc/hash b/repos/base-hw/recipes/src/base-hw-pc/hash index 93f152f935..ab15d67f6b 100644 --- a/repos/base-hw/recipes/src/base-hw-pc/hash +++ b/repos/base-hw/recipes/src/base-hw-pc/hash @@ -1 +1 @@ -2022-05-24 46e9f88209bbc95228d3882cc0831770315402e4 +2022-08-16 2fb951388a23e0946b59c578bf89cd7dad15acb2 diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash index dd479c2c5b..75f22c9c02 100644 --- a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-08-10 70b4f8849f5c72c7d76985d7d5d2dbbd68bb7808 +2022-08-16 6ee865a580e3b2f02c849f33ed9fe11aae091020 diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash index 7bb55aaf3c..cc91bef30a 100644 --- a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-05-24 bb6c39c093a24d2ec4ff1d00e397529c51e95fa7 +2022-08-16 0f58d67423c454b9515d6f15d54d3c551b5b8ae4 diff --git a/repos/base-linux/recipes/api/base-linux/hash b/repos/base-linux/recipes/api/base-linux/hash index 8c49e019b3..f53eb9d91a 100644 --- a/repos/base-linux/recipes/api/base-linux/hash +++ b/repos/base-linux/recipes/api/base-linux/hash @@ -1 +1 @@ -2022-04-12 dcb2c9200b333adb17f9a8737620cbd84f641408 +2022-08-16 91752536f87f43d676cf7e253f16c64abf9f61fe diff --git a/repos/base-linux/recipes/src/base-linux/hash b/repos/base-linux/recipes/src/base-linux/hash index 8ae6c7808f..0f3ba7af75 100644 --- a/repos/base-linux/recipes/src/base-linux/hash +++ b/repos/base-linux/recipes/src/base-linux/hash @@ -1 +1 @@ -2022-05-24 4aea382035415c79bf5d551642ebfa64d42e4d21 +2022-08-16 4dc61f609cc1463fb117308b79759841b4fb6cc4 diff --git a/repos/base-nova/recipes/api/base-nova/hash b/repos/base-nova/recipes/api/base-nova/hash index ee7a3a50cc..b78b563f5a 100644 --- a/repos/base-nova/recipes/api/base-nova/hash +++ b/repos/base-nova/recipes/api/base-nova/hash @@ -1 +1 @@ -2022-05-24 91bc8d51bbe703d56f5671019d14e4636f21bf1f +2022-08-16 8cce75f6c0f82547860fd8a6cba96c41bc91b4cf diff --git a/repos/base-nova/recipes/src/base-nova/hash b/repos/base-nova/recipes/src/base-nova/hash index 3fce06004a..baba447d51 100644 --- a/repos/base-nova/recipes/src/base-nova/hash +++ b/repos/base-nova/recipes/src/base-nova/hash @@ -1 +1 @@ -2022-05-24 8b59a28ade1392bae4aa772bbead1584a2dde1de +2022-08-16 1b85e2d0e99b3b3b5d92878617ad67e73c2c8274 diff --git a/repos/base-okl4/recipes/src/base-okl4/hash b/repos/base-okl4/recipes/src/base-okl4/hash index 606a20a29b..053ab370c3 100644 --- a/repos/base-okl4/recipes/src/base-okl4/hash +++ b/repos/base-okl4/recipes/src/base-okl4/hash @@ -1 +1 @@ -2022-05-24 3b2acba4ebd649394e26217802598cf650a4b226 +2022-08-16 e0e57471d5a897d780df161f1f71e68088ff1312 diff --git a/repos/base-pistachio/recipes/src/base-pistachio/hash b/repos/base-pistachio/recipes/src/base-pistachio/hash index 73e511a7ee..92921f1796 100644 --- a/repos/base-pistachio/recipes/src/base-pistachio/hash +++ b/repos/base-pistachio/recipes/src/base-pistachio/hash @@ -1 +1 @@ -2022-05-24 ca2c90ebcbaa61ade7373d6ea48a608912cd2629 +2022-08-16 df65a6ce6f08fdb3e2e6566f3875647b6bfb5a16 diff --git a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash index e47ab7ffe0..6763926985 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-05-24 5d9558d34f4bd3f3e34d9b175fe3eb37be3561be +2022-08-16 9b8a170e9f6c8513fa23d93e8d2e8eb12cc9adef diff --git a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash index 5ef0c29af4..ace002a838 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash @@ -1 +1 @@ -2022-05-24 70a360e5c7b6aed126fb99fc3666cfce030cf53e +2022-08-16 099e1ac07d7de00dcac4a2b142d434dcc60cb8ef diff --git a/repos/base-sel4/recipes/src/base-sel4-x86/hash b/repos/base-sel4/recipes/src/base-sel4-x86/hash index 00c88112bc..db7be90c56 100644 --- a/repos/base-sel4/recipes/src/base-sel4-x86/hash +++ b/repos/base-sel4/recipes/src/base-sel4-x86/hash @@ -1 +1 @@ -2022-05-24 fa03ec1bf7ea9b643319d67dbd52e146e0d98189 +2022-08-16 14567dc0c8966c6fedbe70314800f504eb0d3136 diff --git a/repos/base/recipes/api/base/hash b/repos/base/recipes/api/base/hash index 4d1cf22bc1..f994618997 100644 --- a/repos/base/recipes/api/base/hash +++ b/repos/base/recipes/api/base/hash @@ -1 +1 @@ -2022-05-24 d4b5b53bc270cebd87bf01a93c6da241077aad42 +2022-08-16 5b0bde48d766966cd1a93d10eecde7b16346430f diff --git a/repos/base/recipes/api/timer_session/hash b/repos/base/recipes/api/timer_session/hash index 29f62381b1..6c61c2e233 100644 --- a/repos/base/recipes/api/timer_session/hash +++ b/repos/base/recipes/api/timer_session/hash @@ -1 +1 @@ -2021-04-19 8628f8283cc104fdfd196d88fb029becaa39b258 +2022-08-16 1f83bc046ed3bb0c4fe6915e608d566dd5483e61 diff --git a/repos/base/recipes/pkg/test-ds_ownership/hash b/repos/base/recipes/pkg/test-ds_ownership/hash index ea2d8baf94..d52b16f08a 100644 --- a/repos/base/recipes/pkg/test-ds_ownership/hash +++ b/repos/base/recipes/pkg/test-ds_ownership/hash @@ -1 +1 @@ -2022-05-24 5e486a0f27fdda0a70b9275d62257d98e26589c8 +2022-08-16 bb38c5ce26ac0e34402eb04e3a4b0e8ffb2bc51b diff --git a/repos/base/recipes/pkg/test-entrypoint/hash b/repos/base/recipes/pkg/test-entrypoint/hash index 53f437789c..15e8bc3acf 100644 --- a/repos/base/recipes/pkg/test-entrypoint/hash +++ b/repos/base/recipes/pkg/test-entrypoint/hash @@ -1 +1 @@ -2022-05-24 e35abe047c7ec7fe02c0939de16bfc80ed421d38 +2022-08-16 fd08282d7f205a11ff579e5dfe7e594d91a0981a diff --git a/repos/base/recipes/pkg/test-log/hash b/repos/base/recipes/pkg/test-log/hash index b451eee8c5..6e420ddb9c 100644 --- a/repos/base/recipes/pkg/test-log/hash +++ b/repos/base/recipes/pkg/test-log/hash @@ -1 +1 @@ -2022-05-24 79d43c7e33381048618dbd7ba6ca34a3eda23f6c +2022-08-16 893763c982c47d66fcb30b1451221b3b63010a5c diff --git a/repos/base/recipes/pkg/test-mmio/hash b/repos/base/recipes/pkg/test-mmio/hash index 19ea6f0fc4..150d494bea 100644 --- a/repos/base/recipes/pkg/test-mmio/hash +++ b/repos/base/recipes/pkg/test-mmio/hash @@ -1 +1 @@ -2022-05-24 4b2af7d33e8264d080be962d0a4d9a6404ec4bc0 +2022-08-16 1f0f8a5f881c1c6056509ec9f7c3a488384f1ef8 diff --git a/repos/base/recipes/pkg/test-new_delete/hash b/repos/base/recipes/pkg/test-new_delete/hash index f062e54171..388cb0684a 100644 --- a/repos/base/recipes/pkg/test-new_delete/hash +++ b/repos/base/recipes/pkg/test-new_delete/hash @@ -1 +1 @@ -2022-05-24 ed1f37d2213211897d5360c9a8f32404d670722a +2022-08-16 f5fd87f6260f0672dc020504231044a7fcc58144 diff --git a/repos/base/recipes/pkg/test-reconstructible/hash b/repos/base/recipes/pkg/test-reconstructible/hash index d7f9a74766..422c790881 100644 --- a/repos/base/recipes/pkg/test-reconstructible/hash +++ b/repos/base/recipes/pkg/test-reconstructible/hash @@ -1 +1 @@ -2022-05-24 f09098d18ca36bc8829a673be78dd80460c3d65e +2022-08-16 0f22464fce71f3b14ccf1510de2622ce11650fd1 diff --git a/repos/base/recipes/pkg/test-registry/hash b/repos/base/recipes/pkg/test-registry/hash index 53ada5cd94..3e9984f9d4 100644 --- a/repos/base/recipes/pkg/test-registry/hash +++ b/repos/base/recipes/pkg/test-registry/hash @@ -1 +1 @@ -2022-05-24 3f91b26dbd239c52bb9af22e8f7713743ee851f4 +2022-08-16 bc476502ed58f7639bb6f995ba9c539fa61b497c diff --git a/repos/base/recipes/pkg/test-rm_fault/hash b/repos/base/recipes/pkg/test-rm_fault/hash index 49196a6937..6c97880bf3 100644 --- a/repos/base/recipes/pkg/test-rm_fault/hash +++ b/repos/base/recipes/pkg/test-rm_fault/hash @@ -1 +1 @@ -2022-05-24 edbf57617935a054a681e097a611006496ed4c88 +2022-08-16 9e5b7cf00ca56acfcb09649a9fdfde07dcc94909 diff --git a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash index 877b7bcb89..b3267724ac 100644 --- a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash +++ b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash @@ -1 +1 @@ -2022-05-24 ce2c9008ed6ea0db13999e9c6ab77a098d4f94a0 +2022-08-16 f66b057816ab43c6dad98677f5d5311008932745 diff --git a/repos/base/recipes/pkg/test-rm_nested/hash b/repos/base/recipes/pkg/test-rm_nested/hash index 67b68c9a7d..6682f5ecea 100644 --- a/repos/base/recipes/pkg/test-rm_nested/hash +++ b/repos/base/recipes/pkg/test-rm_nested/hash @@ -1 +1 @@ -2022-05-24 afd4f2249a2d56bb6b29b6c0d24923ef2ec215c9 +2022-08-16 ff560be7eb0c0fe18d7e0c2392b213aeea4dd869 diff --git a/repos/base/recipes/pkg/test-rm_stress/hash b/repos/base/recipes/pkg/test-rm_stress/hash index 3d9787edac..aaf031f369 100644 --- a/repos/base/recipes/pkg/test-rm_stress/hash +++ b/repos/base/recipes/pkg/test-rm_stress/hash @@ -1 +1 @@ -2022-05-24 436a166f1c4371619d7a64bf879dd0ce2dc75429 +2022-08-16 a7da6ed04e06e24376afa7b4c32001d154a2d709 diff --git a/repos/base/recipes/pkg/test-sanitizer/hash b/repos/base/recipes/pkg/test-sanitizer/hash index 3662cf1783..a265ecf45b 100644 --- a/repos/base/recipes/pkg/test-sanitizer/hash +++ b/repos/base/recipes/pkg/test-sanitizer/hash @@ -1 +1 @@ -2022-05-24 3877f6f98ff7c3921bdb7b2b83f40a161e9cd5bb +2022-08-16 fc4ea2119bcc280fa6eb571023b2efd341964268 diff --git a/repos/base/recipes/pkg/test-stack_smash/hash b/repos/base/recipes/pkg/test-stack_smash/hash index bc4fb94d4a..a8d2053c5d 100644 --- a/repos/base/recipes/pkg/test-stack_smash/hash +++ b/repos/base/recipes/pkg/test-stack_smash/hash @@ -1 +1 @@ -2022-05-24 00a8e3979871b2a0ab67088c3d2b57454ed653f9 +2022-08-16 643cd59a60257a79723ffb5cd02eb0ce436026f2 diff --git a/repos/base/recipes/pkg/test-synced_interface/hash b/repos/base/recipes/pkg/test-synced_interface/hash index aaff8bb4c0..99cb691d10 100644 --- a/repos/base/recipes/pkg/test-synced_interface/hash +++ b/repos/base/recipes/pkg/test-synced_interface/hash @@ -1 +1 @@ -2022-05-24 ab7b5f631d4abf8b01ed6b08c4da83b4164564a8 +2022-08-16 2f5213838988a7d5716ff01fe4a619f2617ac165 diff --git a/repos/base/recipes/pkg/test-timer/hash b/repos/base/recipes/pkg/test-timer/hash index 15136b90af..807888cae0 100644 --- a/repos/base/recipes/pkg/test-timer/hash +++ b/repos/base/recipes/pkg/test-timer/hash @@ -1 +1 @@ -2022-05-24 91ed52185381c38cf7e425fb0c351b46c4548b4f +2022-08-16 a1c2ff739e13c3690e06f7f2e012a01d89d86ea2 diff --git a/repos/base/recipes/pkg/test-tls/hash b/repos/base/recipes/pkg/test-tls/hash index f185bc03db..6e64cea44d 100644 --- a/repos/base/recipes/pkg/test-tls/hash +++ b/repos/base/recipes/pkg/test-tls/hash @@ -1 +1 @@ -2022-05-24 7ff4d04d0b470eb6974b633bb0dca1212158f625 +2022-08-16 be31b3becdb4a0cec705ffb53b642288b5c2853a diff --git a/repos/base/recipes/pkg/test-token/hash b/repos/base/recipes/pkg/test-token/hash index 4e94f5e5d6..4a45ee9528 100644 --- a/repos/base/recipes/pkg/test-token/hash +++ b/repos/base/recipes/pkg/test-token/hash @@ -1 +1 @@ -2022-05-24 b96b88fee3e0946fea12a44cea94963b2b16d173 +2022-08-16 d025ee10d1ebcc9512c202d318de498af80ff0e9 diff --git a/repos/base/recipes/pkg/test-xml_generator/hash b/repos/base/recipes/pkg/test-xml_generator/hash index 0340fa2e62..09b361cdd6 100644 --- a/repos/base/recipes/pkg/test-xml_generator/hash +++ b/repos/base/recipes/pkg/test-xml_generator/hash @@ -1 +1 @@ -2022-05-24 c2d9a2849fe51277372d301c9a46d034c4674ab9 +2022-08-16 30f3ee5bcd83caf78c4c364275e04170ed7b29a0 diff --git a/repos/base/recipes/pkg/test-xml_node/hash b/repos/base/recipes/pkg/test-xml_node/hash index 09ab49e610..65217a1b4b 100644 --- a/repos/base/recipes/pkg/test-xml_node/hash +++ b/repos/base/recipes/pkg/test-xml_node/hash @@ -1 +1 @@ -2022-05-24 88eb29b90a1e663e1f58de04a6a178f3a035f3f5 +2022-08-16 7c6a58b7586c720c425c3a6e995ad872b0941c4f diff --git a/repos/base/recipes/src/test-ds_ownership/hash b/repos/base/recipes/src/test-ds_ownership/hash index 4dcb62cd3d..5fd86abccb 100644 --- a/repos/base/recipes/src/test-ds_ownership/hash +++ b/repos/base/recipes/src/test-ds_ownership/hash @@ -1 +1 @@ -2022-05-24 715bfaa6ea0bff54c0e2477c1bbccf56c0bfc935 +2022-08-16 fabb4fc2beca7b9b6dc9eca7ac7dd79bc642d206 diff --git a/repos/base/recipes/src/test-entrypoint/hash b/repos/base/recipes/src/test-entrypoint/hash index 066abed7fa..766d9e65b7 100644 --- a/repos/base/recipes/src/test-entrypoint/hash +++ b/repos/base/recipes/src/test-entrypoint/hash @@ -1 +1 @@ -2022-05-24 05d5db1ec0b7fff36e8526fe701873731fd08660 +2022-08-16 7a6149a061516b3dab0d79946799077f2fdaf82e diff --git a/repos/base/recipes/src/test-log/hash b/repos/base/recipes/src/test-log/hash index c2a6422cbb..6a88008ec5 100644 --- a/repos/base/recipes/src/test-log/hash +++ b/repos/base/recipes/src/test-log/hash @@ -1 +1 @@ -2022-05-24 7d26fbbb584ab24b8156eda78a8eca5bc9e1122f +2022-08-16 9fc828a8d00fa6edbd014e8e0e137efa59016089 diff --git a/repos/base/recipes/src/test-mmio/hash b/repos/base/recipes/src/test-mmio/hash index f51cd1f6dc..c010eb445f 100644 --- a/repos/base/recipes/src/test-mmio/hash +++ b/repos/base/recipes/src/test-mmio/hash @@ -1 +1 @@ -2022-05-24 6542fc1df645f45c9fc71b5c18b458a9e630470d +2022-08-16 214342e38d16d6cc5a958c5a31b0c183f0fc07e2 diff --git a/repos/base/recipes/src/test-new_delete/hash b/repos/base/recipes/src/test-new_delete/hash index 2235c35484..bfa6dc7d11 100644 --- a/repos/base/recipes/src/test-new_delete/hash +++ b/repos/base/recipes/src/test-new_delete/hash @@ -1 +1 @@ -2022-05-24 67caefb3bbf5926dbd2ca46bbe933882de542db3 +2022-08-16 7419335660cdf46925682e63e870cefc96218b81 diff --git a/repos/base/recipes/src/test-reconstructible/hash b/repos/base/recipes/src/test-reconstructible/hash index a21bfcb092..9761579754 100644 --- a/repos/base/recipes/src/test-reconstructible/hash +++ b/repos/base/recipes/src/test-reconstructible/hash @@ -1 +1 @@ -2022-05-24 915f8bebfcdbfe4ef499ea94985303bacebeb8e8 +2022-08-16 fe1fb852373ae0ec5a1d037848987f17182ced2c diff --git a/repos/base/recipes/src/test-registry/hash b/repos/base/recipes/src/test-registry/hash index 400b893782..c0dbb1114c 100644 --- a/repos/base/recipes/src/test-registry/hash +++ b/repos/base/recipes/src/test-registry/hash @@ -1 +1 @@ -2022-05-24 e1e3559b2f3010d96d19e81cbaa6abbeb07c6251 +2022-08-16 f88e0eaa03ddc6ae4c43b403e30289c64d60a037 diff --git a/repos/base/recipes/src/test-rm_fault/hash b/repos/base/recipes/src/test-rm_fault/hash index 27bdb498e9..7c5da0b931 100644 --- a/repos/base/recipes/src/test-rm_fault/hash +++ b/repos/base/recipes/src/test-rm_fault/hash @@ -1 +1 @@ -2022-05-24 93812b90ee88b44d4fc3b26af77ad0344359e51a +2022-08-16 19e8de9d39edfc0be3dec78ea76612319125251a diff --git a/repos/base/recipes/src/test-rm_nested/hash b/repos/base/recipes/src/test-rm_nested/hash index 07f64a4053..ff48547d1f 100644 --- a/repos/base/recipes/src/test-rm_nested/hash +++ b/repos/base/recipes/src/test-rm_nested/hash @@ -1 +1 @@ -2022-05-24 465cc6225756312ca657c39d5a398fd276088118 +2022-08-16 ed1da91fd8761a86398fd5ffd7d51b5031f253ca diff --git a/repos/base/recipes/src/test-rm_stress/hash b/repos/base/recipes/src/test-rm_stress/hash index 92fcbd61b0..850a4be816 100644 --- a/repos/base/recipes/src/test-rm_stress/hash +++ b/repos/base/recipes/src/test-rm_stress/hash @@ -1 +1 @@ -2022-05-24 dd009dd4ea58101e1c15e5bd38cad4241f726fa4 +2022-08-16 ba1361206cbf38a0e5e504a54aa80a7476587bdc diff --git a/repos/base/recipes/src/test-sanitizer/hash b/repos/base/recipes/src/test-sanitizer/hash index 0cb0636545..47adaeef53 100644 --- a/repos/base/recipes/src/test-sanitizer/hash +++ b/repos/base/recipes/src/test-sanitizer/hash @@ -1 +1 @@ -2022-05-24 34b25aabaef3112a38eb0a24a13cf6e42da6ba65 +2022-08-16 842db678209d6002b7464f97554b2d2c270f1ac1 diff --git a/repos/base/recipes/src/test-segfault/hash b/repos/base/recipes/src/test-segfault/hash index 35e8c15921..35b4c9c138 100644 --- a/repos/base/recipes/src/test-segfault/hash +++ b/repos/base/recipes/src/test-segfault/hash @@ -1 +1 @@ -2022-05-24 632e59190a6bcfe40a5a88ecff9f05e2924a43b1 +2022-08-16 6ad34c4033532ebd2c35b2d4cba2b580d540db57 diff --git a/repos/base/recipes/src/test-stack_smash/hash b/repos/base/recipes/src/test-stack_smash/hash index 8d2194a103..fb42d6b825 100644 --- a/repos/base/recipes/src/test-stack_smash/hash +++ b/repos/base/recipes/src/test-stack_smash/hash @@ -1 +1 @@ -2022-05-24 4e254230305117e2ce5dd2c13caa650ea65251e7 +2022-08-16 29c2c57805f03d97e60adb996f125dccaea97e3c diff --git a/repos/base/recipes/src/test-synced_interface/hash b/repos/base/recipes/src/test-synced_interface/hash index 7ef1668a45..da8ca63628 100644 --- a/repos/base/recipes/src/test-synced_interface/hash +++ b/repos/base/recipes/src/test-synced_interface/hash @@ -1 +1 @@ -2022-05-24 f9126bd0df2b402150c7ef76138d5ecb8cee05d4 +2022-08-16 0ba7bd421207fa25c831a620562f192ef65fa459 diff --git a/repos/base/recipes/src/test-timer/hash b/repos/base/recipes/src/test-timer/hash index f49d5f06e7..fb4c107cc1 100644 --- a/repos/base/recipes/src/test-timer/hash +++ b/repos/base/recipes/src/test-timer/hash @@ -1 +1 @@ -2022-05-24 402acbf040b8f905dcc0979700f6077d36dc707d +2022-08-16 2f9b3021e230cae35eb83c93e2443fc6c384be99 diff --git a/repos/base/recipes/src/test-tls/hash b/repos/base/recipes/src/test-tls/hash index 824a9dd8ab..b419cdc0ba 100644 --- a/repos/base/recipes/src/test-tls/hash +++ b/repos/base/recipes/src/test-tls/hash @@ -1 +1 @@ -2022-05-24 4ddec10779302c6d0c47ccbeba806fe1278e182b +2022-08-16 e3dd40eecc9cbdaa0d93e4df5683b489aab46e9a diff --git a/repos/base/recipes/src/test-token/hash b/repos/base/recipes/src/test-token/hash index da0f7e3805..8937d408e3 100644 --- a/repos/base/recipes/src/test-token/hash +++ b/repos/base/recipes/src/test-token/hash @@ -1 +1 @@ -2022-05-24 f04c4162857259fd48d864e9076ae401c9093dbb +2022-08-16 82a5115d3dd0fafa6651e2a9882b84dc050b3c6f diff --git a/repos/base/recipes/src/test-xml_generator/hash b/repos/base/recipes/src/test-xml_generator/hash index 7ac579a8e7..4e45daae20 100644 --- a/repos/base/recipes/src/test-xml_generator/hash +++ b/repos/base/recipes/src/test-xml_generator/hash @@ -1 +1 @@ -2022-05-24 e91f2b05a682df2206b8f487b7cb01cc8150350e +2022-08-16 a7e2d9c92df3eda0a67edb88a59f77c8076c14df diff --git a/repos/base/recipes/src/test-xml_node/hash b/repos/base/recipes/src/test-xml_node/hash index d9feccf844..acc24675ad 100644 --- a/repos/base/recipes/src/test-xml_node/hash +++ b/repos/base/recipes/src/test-xml_node/hash @@ -1 +1 @@ -2022-05-24 39a7ce53177b2bad4928846f40b8ef542d8f6840 +2022-08-16 e6f255004c047c175fa1231ade558c715bb1ae43 diff --git a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash index 19fe882a08..a4184c4e41 100644 --- a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash @@ -1 +1 @@ -2022-05-24 1457c977583577de2e68eae2ac492c7a95ba9e4c +2022-08-16 e3596f7dbd27f8d1b1417756edd2671aa8af69f0 diff --git a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash index 17fbba3f23..ba7b93f3ed 100644 --- a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash @@ -1 +1 @@ -2022-05-24 d468d19c3211d09086b582583fa745223ff47594 +2022-08-16 b12fb3b37d02fc0c393c60c1b89530a0722d5da0 diff --git a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash index 3f117fd4a5..76278dac19 100644 --- a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash @@ -1 +1 @@ -2022-05-24 d7226793ef4487760e21fbac216881184e04de20 +2022-08-16 db75551120abafec59c954fc471c70980fcd7fc2 diff --git a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash index 39972f8311..e78c4f0f5c 100644 --- a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash @@ -1 +1 @@ -2022-05-24 489d48889bcec01cac3c2646f24edab38128ed7c +2022-08-16 ef03ed8a9eae9bbb3169a8ca76dda171b9a2d9b5 diff --git a/repos/dde_linux/recipes/pkg/usb_modem_drv/hash b/repos/dde_linux/recipes/pkg/usb_modem_drv/hash index 2292f3de86..2d9b473c80 100644 --- a/repos/dde_linux/recipes/pkg/usb_modem_drv/hash +++ b/repos/dde_linux/recipes/pkg/usb_modem_drv/hash @@ -1 +1 @@ -2022-05-24 a1fe806ad3eff74a72a20a55bd767f7dc0c60e4c +2022-08-16 2912232ef71ceac186c185516882959092a9f83f diff --git a/repos/dde_linux/recipes/pkg/wireguard/hash b/repos/dde_linux/recipes/pkg/wireguard/hash index 9b104ee704..cadc82d183 100644 --- a/repos/dde_linux/recipes/pkg/wireguard/hash +++ b/repos/dde_linux/recipes/pkg/wireguard/hash @@ -1 +1 @@ -2022-05-30 df4643bec2abd7dcda642c33407d9a535ce1a61b +2022-08-16 010043115f58437dfe3453e6a34471b124d2ad00 diff --git a/repos/dde_linux/recipes/src/fec_nic_drv/hash b/repos/dde_linux/recipes/src/fec_nic_drv/hash index 51c175e0dc..734dae52e9 100644 --- a/repos/dde_linux/recipes/src/fec_nic_drv/hash +++ b/repos/dde_linux/recipes/src/fec_nic_drv/hash @@ -1 +1 @@ -2022-05-24 733a3d62781441ccc1302914a8d10c81507fafba +2022-08-16 84c0eabcb564df9f5a9b5aed7046dab885fc6d96 diff --git a/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash b/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash index de52ea93bc..1ea4509177 100644 --- a/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash +++ b/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash @@ -1 +1 @@ -2022-05-24 e8be5432cf36bf81e66ba5de4d2b7755b5e29996 +2022-08-16 4a06190b6908ebd6a85c5321eebb4847ecf0e073 diff --git a/repos/dde_linux/recipes/src/usb_hid_drv/hash b/repos/dde_linux/recipes/src/usb_hid_drv/hash index 6d38b5f6ca..a4c5e91c19 100644 --- a/repos/dde_linux/recipes/src/usb_hid_drv/hash +++ b/repos/dde_linux/recipes/src/usb_hid_drv/hash @@ -1 +1 @@ -2022-05-24 127ff152eb7a0389ac22df1d9ce01266df3cd334 +2022-08-16 f0c52c535d3653584c61a7fd66b3738b358f9bfe diff --git a/repos/dde_linux/recipes/src/usb_modem_drv/hash b/repos/dde_linux/recipes/src/usb_modem_drv/hash index 9b967296a3..bff49ef980 100644 --- a/repos/dde_linux/recipes/src/usb_modem_drv/hash +++ b/repos/dde_linux/recipes/src/usb_modem_drv/hash @@ -1 +1 @@ -2022-05-24 67b288c9a2839cfec87b321e4c48423442bb3258 +2022-08-16 3e8796fa97f2bec961974e563a31ed420e3a79c4 diff --git a/repos/dde_linux/recipes/src/usb_net_drv/hash b/repos/dde_linux/recipes/src/usb_net_drv/hash index 621c6503eb..3443a4056b 100644 --- a/repos/dde_linux/recipes/src/usb_net_drv/hash +++ b/repos/dde_linux/recipes/src/usb_net_drv/hash @@ -1 +1 @@ -2022-05-24 a8b1b27362028681e150f633193e0a2b04959ae6 +2022-08-16 55454eaa8b8fefe05022d6dfab88a4ad9f588e96 diff --git a/repos/dde_linux/recipes/src/vfs_lxip/hash b/repos/dde_linux/recipes/src/vfs_lxip/hash index 7a6cb759bd..aad2ab4993 100644 --- a/repos/dde_linux/recipes/src/vfs_lxip/hash +++ b/repos/dde_linux/recipes/src/vfs_lxip/hash @@ -1 +1 @@ -2022-05-24 e2e1aeccae81c50a202a4c30e97cf9d8eaebe334 +2022-08-16 8a4248611806c23da3dc9afe94dfb30bf79887a5 diff --git a/repos/dde_linux/recipes/src/wireguard/hash b/repos/dde_linux/recipes/src/wireguard/hash index d5286cc67b..8e47fa205b 100644 --- a/repos/dde_linux/recipes/src/wireguard/hash +++ b/repos/dde_linux/recipes/src/wireguard/hash @@ -1 +1 @@ -2022-05-30 62dd9825171f48904fdcedde1d6a23bf5905f625 +2022-08-16 a0eda49af90e83bbfc1f8ac869d8530fc852f338 diff --git a/repos/dde_rump/recipes/src/rump/hash b/repos/dde_rump/recipes/src/rump/hash index 0e91a2cb64..2dba2bc106 100644 --- a/repos/dde_rump/recipes/src/rump/hash +++ b/repos/dde_rump/recipes/src/rump/hash @@ -1 +1 @@ -2022-05-24 1eacc4b967c6ce3c9eb2813c9bd9787a2793ea29 +2022-08-16 4caebc0fb1112ded7b12cc1a5e46c2d2ab4e850c diff --git a/repos/demo/recipes/src/demo/hash b/repos/demo/recipes/src/demo/hash index 9ef4cc3eef..be3bdeaf08 100644 --- a/repos/demo/recipes/src/demo/hash +++ b/repos/demo/recipes/src/demo/hash @@ -1 +1 @@ -2022-05-24 88f477c3600c0d200730fa6de97a606796fe2e01 +2022-08-16 78bfb716145f90ea2a815afea05824ae6dee3e58 diff --git a/repos/gems/recipes/api/ctf/hash b/repos/gems/recipes/api/ctf/hash index e59df5832b..d21df2ec5f 100644 --- a/repos/gems/recipes/api/ctf/hash +++ b/repos/gems/recipes/api/ctf/hash @@ -1 +1 @@ -2022-05-11 73fe945a53926f04e8062293aa2c2ce39541fc85 +2022-08-16 3973272d8228531216c6da93fbfb90d9b97ea1ae diff --git a/repos/gems/recipes/api/trace_recorder_policy/hash b/repos/gems/recipes/api/trace_recorder_policy/hash index 58d988eea1..573adf7d6f 100644 --- a/repos/gems/recipes/api/trace_recorder_policy/hash +++ b/repos/gems/recipes/api/trace_recorder_policy/hash @@ -1 +1 @@ -2022-05-17-e 58691b64af0e4c77ced434a0f40b00226f143767 +2022-08-16 16f6c171a1c63a0f833849bd2d567dc5c08da4a0 diff --git a/repos/gems/recipes/pkg/backdrop/hash b/repos/gems/recipes/pkg/backdrop/hash index b48982a227..e654897568 100644 --- a/repos/gems/recipes/pkg/backdrop/hash +++ b/repos/gems/recipes/pkg/backdrop/hash @@ -1 +1 @@ -2022-05-24 a885d9521053635c48f61e28b3cb0a78888b8e15 +2022-08-16 59806d8706140776d2e40e6e23fe7e0b6863b841 diff --git a/repos/gems/recipes/pkg/cbe_check/hash b/repos/gems/recipes/pkg/cbe_check/hash index c024cec296..a26bef0320 100644 --- a/repos/gems/recipes/pkg/cbe_check/hash +++ b/repos/gems/recipes/pkg/cbe_check/hash @@ -1 +1 @@ -2022-05-24 a0b521697a15819555a1694cd1b96d3e3b2d9105 +2022-08-16 e1177941ffb6b987990cb1bef689502cc0f82873 diff --git a/repos/gems/recipes/pkg/cbe_demo/hash b/repos/gems/recipes/pkg/cbe_demo/hash index 78f7fecc65..b26ff67ddf 100644 --- a/repos/gems/recipes/pkg/cbe_demo/hash +++ b/repos/gems/recipes/pkg/cbe_demo/hash @@ -1 +1 @@ -2022-05-24 27fc8bcd533f6b0afe6b9d029d4a361271e44d87 +2022-08-16 c2871ccb08ae3151aee77e9ce65746c4390a16e8 diff --git a/repos/gems/recipes/pkg/cbe_fs/hash b/repos/gems/recipes/pkg/cbe_fs/hash index 0faca77710..5090763877 100644 --- a/repos/gems/recipes/pkg/cbe_fs/hash +++ b/repos/gems/recipes/pkg/cbe_fs/hash @@ -1 +1 @@ -2022-05-24 2e424cd6684b3d2b214093287f9f3be3b95c55c0 +2022-08-16 2e420919feeb2b9cee422f6546fc8d9ebc137802 diff --git a/repos/gems/recipes/pkg/cbe_init/hash b/repos/gems/recipes/pkg/cbe_init/hash index 8356028253..092542fc4b 100644 --- a/repos/gems/recipes/pkg/cbe_init/hash +++ b/repos/gems/recipes/pkg/cbe_init/hash @@ -1 +1 @@ -2022-05-24 7dcebe22a915bfdece1f9339defc679406de529c +2022-08-16 3981ebb8393c3741b7e22185ed199452fd0c3d32 diff --git a/repos/gems/recipes/pkg/cbe_shell/hash b/repos/gems/recipes/pkg/cbe_shell/hash index a58625ba73..e8df6eb180 100644 --- a/repos/gems/recipes/pkg/cbe_shell/hash +++ b/repos/gems/recipes/pkg/cbe_shell/hash @@ -1 +1 @@ -2022-05-24 81e6ccbe97736168fcd026b8bccc2618679cb788 +2022-08-16 83f8301c67e39da125c5e85daeadf9eca6d1ce35 diff --git a/repos/gems/recipes/pkg/cbe_ta_fs/hash b/repos/gems/recipes/pkg/cbe_ta_fs/hash index 3929321a16..f423ba1ea2 100644 --- a/repos/gems/recipes/pkg/cbe_ta_fs/hash +++ b/repos/gems/recipes/pkg/cbe_ta_fs/hash @@ -1 +1 @@ -2022-05-24 722917a6a4301f8787c3709ad676f5c50ac25d1c +2022-08-16 cc899060bf9c910b221b76648c50fc5a36c168d6 diff --git a/repos/gems/recipes/pkg/cbe_ta_vfs/hash b/repos/gems/recipes/pkg/cbe_ta_vfs/hash index 08a750fc64..788d4c0da4 100644 --- a/repos/gems/recipes/pkg/cbe_ta_vfs/hash +++ b/repos/gems/recipes/pkg/cbe_ta_vfs/hash @@ -1 +1 @@ -2022-05-24 85c85e0eb07c87480914774db4ddb82e9f28e920 +2022-08-16 8c8977036c5c5c2448b74ff0376792742cbd1b1a diff --git a/repos/gems/recipes/pkg/cbe_vbox5-nova/hash b/repos/gems/recipes/pkg/cbe_vbox5-nova/hash index 8ad2d08683..20da39dc31 100644 --- a/repos/gems/recipes/pkg/cbe_vbox5-nova/hash +++ b/repos/gems/recipes/pkg/cbe_vbox5-nova/hash @@ -1 +1 @@ -2022-05-24 a9c7a0c3c1a9ec2934c104643e836e2d9538ffea +2022-08-16 99768bfbddf80bc65e3243e528f78a6c7dcebd8a diff --git a/repos/gems/recipes/pkg/cbe_vfs/hash b/repos/gems/recipes/pkg/cbe_vfs/hash index 5981c5bc27..99420043bd 100644 --- a/repos/gems/recipes/pkg/cbe_vfs/hash +++ b/repos/gems/recipes/pkg/cbe_vfs/hash @@ -1 +1 @@ -2022-05-24 e86bbafffa638456478d08e64cfe03ae806133b1 +2022-08-16 52fb7d0a3a607a08a86afde5926763a711deb897 diff --git a/repos/gems/recipes/pkg/cbe_vm_fs/hash b/repos/gems/recipes/pkg/cbe_vm_fs/hash index 90bc9e00ad..61911c6707 100644 --- a/repos/gems/recipes/pkg/cbe_vm_fs/hash +++ b/repos/gems/recipes/pkg/cbe_vm_fs/hash @@ -1 +1 @@ -2022-05-24 e8977dfb258777f6f2c7c0e9773eec834b99e421 +2022-08-16 bf69711fb2ccc3fe8b868e833c588b359a56b9a0 diff --git a/repos/gems/recipes/pkg/depot_download/hash b/repos/gems/recipes/pkg/depot_download/hash index 9bdab6250b..00641feb36 100644 --- a/repos/gems/recipes/pkg/depot_download/hash +++ b/repos/gems/recipes/pkg/depot_download/hash @@ -1 +1 @@ -2022-05-24 350813ba14085b373ed6258958957ef255f7dd2b +2022-08-16 bff3b61f77461f377656ad970b19f6aeabd45879 diff --git a/repos/gems/recipes/pkg/download_coreplus/hash b/repos/gems/recipes/pkg/download_coreplus/hash index efc9ed0e58..66f248f296 100644 --- a/repos/gems/recipes/pkg/download_coreplus/hash +++ b/repos/gems/recipes/pkg/download_coreplus/hash @@ -1 +1 @@ -2022-05-24 337a868a3bb1b78dcc444a00085475466b97cac3 +2022-08-16 b310b2e1d71a69b9b137fd4c9ea6fc6b5697a389 diff --git a/repos/gems/recipes/pkg/drivers_managed-pc/hash b/repos/gems/recipes/pkg/drivers_managed-pc/hash index 3f6980e0ad..51e0fd8905 100644 --- a/repos/gems/recipes/pkg/drivers_managed-pc/hash +++ b/repos/gems/recipes/pkg/drivers_managed-pc/hash @@ -1 +1 @@ -2022-05-30 7094b6d796ba8dd5dceff07c2dbbaee1a7a8aaad +2022-08-16 b9a2b70f34ee948babd2ecf0d021dfd4578c28ff diff --git a/repos/gems/recipes/pkg/drivers_nic-pc/hash b/repos/gems/recipes/pkg/drivers_nic-pc/hash index 90adae196f..2cad4e2017 100644 --- a/repos/gems/recipes/pkg/drivers_nic-pc/hash +++ b/repos/gems/recipes/pkg/drivers_nic-pc/hash @@ -1 +1 @@ -2022-05-24 7581d7f5f0f29b9783be7919257b86a3e0edee8e +2022-08-16 b898fc0da496b88764dc84625dd0bf2bacc99d6e diff --git a/repos/gems/recipes/pkg/file_vault/hash b/repos/gems/recipes/pkg/file_vault/hash index 5f31dee41a..4d8095ccf7 100644 --- a/repos/gems/recipes/pkg/file_vault/hash +++ b/repos/gems/recipes/pkg/file_vault/hash @@ -1 +1 @@ -2022-05-24 8af43e29647c4e160c431648ec95d6a940c380fd +2022-08-16 0e649d01ac650200f18e254161991adf84e0af60 diff --git a/repos/gems/recipes/pkg/fonts_fs/hash b/repos/gems/recipes/pkg/fonts_fs/hash index 2f363117c7..ecb08b1afe 100644 --- a/repos/gems/recipes/pkg/fonts_fs/hash +++ b/repos/gems/recipes/pkg/fonts_fs/hash @@ -1 +1 @@ -2022-05-24 22b35a3956f513f276b45217bc73b16977da474a +2022-08-16 d81f436a222efa504fa5748a19ef81a7e50c4274 diff --git a/repos/gems/recipes/pkg/motif_decorator/hash b/repos/gems/recipes/pkg/motif_decorator/hash index 4e6115401b..0a0a897a37 100644 --- a/repos/gems/recipes/pkg/motif_decorator/hash +++ b/repos/gems/recipes/pkg/motif_decorator/hash @@ -1 +1 @@ -2022-05-24 5221a5b55413c71bba43ec2018f447781e77a188 +2022-08-16 cae3dcef1d227e2aea3c694691f35cf225aa6a63 diff --git a/repos/gems/recipes/pkg/motif_wm/hash b/repos/gems/recipes/pkg/motif_wm/hash index 48eef44904..c75cd11c49 100644 --- a/repos/gems/recipes/pkg/motif_wm/hash +++ b/repos/gems/recipes/pkg/motif_wm/hash @@ -1 +1 @@ -2022-05-24 667c5900447994d743f08dcc0db3394790e24fc1 +2022-08-16 8aa9ca40ed8b79193d87bc9f7da1df3c0dc05eaa diff --git a/repos/gems/recipes/pkg/nano3d/hash b/repos/gems/recipes/pkg/nano3d/hash index 39035f96e3..0da3b7fb60 100644 --- a/repos/gems/recipes/pkg/nano3d/hash +++ b/repos/gems/recipes/pkg/nano3d/hash @@ -1 +1 @@ -2022-05-24 094d8373f062edcfaf9f9e601228ee6990e42dc3 +2022-08-16 209f5316a45bc867f330d28ecb8287a66525db9f diff --git a/repos/gems/recipes/pkg/sculpt/hash b/repos/gems/recipes/pkg/sculpt/hash index 37e6553e7e..deb4f3a9dc 100644 --- a/repos/gems/recipes/pkg/sculpt/hash +++ b/repos/gems/recipes/pkg/sculpt/hash @@ -1 +1 @@ -2022-05-24 508dda17ee70c812db130a39880fa6f6d16922cb +2022-08-16 2d0784a7b4045de3eb2e4eafa29cf4fdcacb0d02 diff --git a/repos/gems/recipes/pkg/sculpt_distribution-pc/hash b/repos/gems/recipes/pkg/sculpt_distribution-pc/hash index e6af2aec33..4188ed111b 100644 --- a/repos/gems/recipes/pkg/sculpt_distribution-pc/hash +++ b/repos/gems/recipes/pkg/sculpt_distribution-pc/hash @@ -1 +1 @@ -2022-05-30 2192261dfb7488769ecd5f136fa1104f707fa7dc +2022-08-16 6840533c0c72a91d5cb052fc483ed3a6c773422b diff --git a/repos/gems/recipes/pkg/sculpt_distribution/hash b/repos/gems/recipes/pkg/sculpt_distribution/hash index fe4a4de748..edb8105431 100644 --- a/repos/gems/recipes/pkg/sculpt_distribution/hash +++ b/repos/gems/recipes/pkg/sculpt_distribution/hash @@ -1 +1 @@ -2022-05-24 5dea5eb603f1458daff4ede8579479425065eb99 +2022-08-16 02713ca4ec148bc3598c05c468575fc0c72cd5f8 diff --git a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash index c13e420e00..79ee703c15 100644 --- a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash +++ b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash @@ -1 +1 @@ -2022-05-24 816def6829e16d1b5c15b9c852cc0bf7ac261b42 +2022-08-16 48ae7d5122199d57adf4bd69b7f15b362309c123 diff --git a/repos/gems/recipes/pkg/terminal/hash b/repos/gems/recipes/pkg/terminal/hash index 6dfcff8091..651fb70cd3 100644 --- a/repos/gems/recipes/pkg/terminal/hash +++ b/repos/gems/recipes/pkg/terminal/hash @@ -1 +1 @@ -2022-05-24 e4bb5df866fde9b894a91df40cb5355cbbd145db +2022-08-16 c7f829c3caa20441ac753ec348e6a43417ab7706 diff --git a/repos/gems/recipes/pkg/test-depot_query_index/hash b/repos/gems/recipes/pkg/test-depot_query_index/hash index e27042745b..4f246c9019 100644 --- a/repos/gems/recipes/pkg/test-depot_query_index/hash +++ b/repos/gems/recipes/pkg/test-depot_query_index/hash @@ -1 +1 @@ -2022-05-24 d1d68fc662bb7a33d5c9286d6393f88badc27047 +2022-08-16 8e324daf7663d5b544e78d2afc8f01e230ded998 diff --git a/repos/gems/recipes/pkg/test-fs_tool/hash b/repos/gems/recipes/pkg/test-fs_tool/hash index 0e8411302a..6beee6fdbe 100644 --- a/repos/gems/recipes/pkg/test-fs_tool/hash +++ b/repos/gems/recipes/pkg/test-fs_tool/hash @@ -1 +1 @@ -2022-05-24 a0c08b2e3353637d2b3e969a34fb26d39a95f8d3 +2022-08-16 bd15bf5d6312b6496de270e1b6a27729b1b03a75 diff --git a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash index 9d50d642cb..ee2d49fc1d 100644 --- a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash +++ b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash @@ -1 +1 @@ -2022-05-24 256fce2e74cc228b587a5e5ad94f90f3cdc8741d +2022-08-16 9e7edad43e72177c5e0c8355491fd81764f6ce49 diff --git a/repos/gems/recipes/pkg/themed_decorator/hash b/repos/gems/recipes/pkg/themed_decorator/hash index 9041da2664..b16186fb3b 100644 --- a/repos/gems/recipes/pkg/themed_decorator/hash +++ b/repos/gems/recipes/pkg/themed_decorator/hash @@ -1 +1 @@ -2022-05-24 a81f7bf1268353f1f7ca125ffc04e6fb41abbc10 +2022-08-16 e97c5eacaa6ce23f0a3e9a5ec372b482046a0585 diff --git a/repos/gems/recipes/pkg/themed_wm/hash b/repos/gems/recipes/pkg/themed_wm/hash index 438ade44ac..60689d3969 100644 --- a/repos/gems/recipes/pkg/themed_wm/hash +++ b/repos/gems/recipes/pkg/themed_wm/hash @@ -1 +1 @@ -2022-05-24 962aa3e5d86346e7ac52ff1cea7b73ff5f33cd72 +2022-08-16 182891b39395da40496f60739cd60beb28ae7224 diff --git a/repos/gems/recipes/pkg/touch_keyboard/hash b/repos/gems/recipes/pkg/touch_keyboard/hash index 5602f59a76..3ef6a70405 100644 --- a/repos/gems/recipes/pkg/touch_keyboard/hash +++ b/repos/gems/recipes/pkg/touch_keyboard/hash @@ -1 +1 @@ -2022-05-24 f353a687414678d3c980f7130585e8569799e960 +2022-08-16 12ae2f79f09fbcac654620f26e7a5de171002b23 diff --git a/repos/gems/recipes/pkg/trace_fs/hash b/repos/gems/recipes/pkg/trace_fs/hash index 7c653d78c4..a623d15d03 100644 --- a/repos/gems/recipes/pkg/trace_fs/hash +++ b/repos/gems/recipes/pkg/trace_fs/hash @@ -1 +1 @@ -2022-05-24 6f64ea04639e3e26a71ddb4c734ea9f994068e5d +2022-08-16 d8da0f3462660c9b71f9b72ce470697330c9add1 diff --git a/repos/gems/recipes/pkg/trace_recorder/hash b/repos/gems/recipes/pkg/trace_recorder/hash index 74b75c363c..6d443cd972 100644 --- a/repos/gems/recipes/pkg/trace_recorder/hash +++ b/repos/gems/recipes/pkg/trace_recorder/hash @@ -1 +1 @@ -2022-05-11 b0ff8e7876af3b8bd5fcf7d4055290d029e29198 +2022-08-16 d0db92f2ed914c325c05bdbaecec2e8af767e3da diff --git a/repos/gems/recipes/pkg/window_layouter/hash b/repos/gems/recipes/pkg/window_layouter/hash index 91454cdf97..d8f72b4cbf 100644 --- a/repos/gems/recipes/pkg/window_layouter/hash +++ b/repos/gems/recipes/pkg/window_layouter/hash @@ -1 +1 @@ -2022-05-24 e667ae6ee6a5be5bf3ef686e9a1a760a8c8eca68 +2022-08-16 c7031222316021e82805c6470df9b2a8b13b25bc diff --git a/repos/gems/recipes/pkg/wm/hash b/repos/gems/recipes/pkg/wm/hash index dff5caf6be..6c54e79379 100644 --- a/repos/gems/recipes/pkg/wm/hash +++ b/repos/gems/recipes/pkg/wm/hash @@ -1 +1 @@ -2022-05-24 8d32b3f34eb5787cfc393d83c61ecf2ce3572295 +2022-08-16 6e79a90c5b50e98394755c5938a4fc473dabb7eb diff --git a/repos/gems/recipes/raw/drivers_managed-pc/hash b/repos/gems/recipes/raw/drivers_managed-pc/hash index ef19cf0c8d..1333ec8f13 100644 --- a/repos/gems/recipes/raw/drivers_managed-pc/hash +++ b/repos/gems/recipes/raw/drivers_managed-pc/hash @@ -1 +1 @@ -2022-04-12 275a251214823aa7441d241ac41798813141eab9 +2022-08-16 03784cecadd706e212b68b5276df6f6ea10a7868 diff --git a/repos/gems/recipes/raw/trace_recorder/hash b/repos/gems/recipes/raw/trace_recorder/hash index 4d5fe455a4..6cf891392e 100644 --- a/repos/gems/recipes/raw/trace_recorder/hash +++ b/repos/gems/recipes/raw/trace_recorder/hash @@ -1 +1 @@ -2022-05-11 5e78bddea021b50315ea907a1cd003162439da22 +2022-08-16 7445d1d4ae578788de7c7c7b6a006360d5cb9bd2 diff --git a/repos/gems/recipes/src/backdrop/hash b/repos/gems/recipes/src/backdrop/hash index e7aeba63ae..a73a6f1143 100644 --- a/repos/gems/recipes/src/backdrop/hash +++ b/repos/gems/recipes/src/backdrop/hash @@ -1 +1 @@ -2022-05-24 79ae212fd231fca74d8a037ceec31dcab1660040 +2022-08-16 545f7a4ecc7c34610c75ebc18a364237a907e24b diff --git a/repos/gems/recipes/src/cbe/hash b/repos/gems/recipes/src/cbe/hash index 033012e4de..d7b3e4934e 100644 --- a/repos/gems/recipes/src/cbe/hash +++ b/repos/gems/recipes/src/cbe/hash @@ -1 +1 @@ -2022-05-24 16b7e9617fe7d2ad4b274c4d7a29127cabcbc816 +2022-08-16 e4276d71789ffc3336036b6d9f690fd526984a4c diff --git a/repos/gems/recipes/src/cpu_load_display/hash b/repos/gems/recipes/src/cpu_load_display/hash index e20a5fe40f..03c8652e69 100644 --- a/repos/gems/recipes/src/cpu_load_display/hash +++ b/repos/gems/recipes/src/cpu_load_display/hash @@ -1 +1 @@ -2022-05-24 eac96f09dcc402ebc08edd94753e9ebc100d25f5 +2022-08-16 4dec47a393bf4d0527940a064c904c6332744fbb diff --git a/repos/gems/recipes/src/decorator/hash b/repos/gems/recipes/src/decorator/hash index 1493f5acc4..d2cf5c5a58 100644 --- a/repos/gems/recipes/src/decorator/hash +++ b/repos/gems/recipes/src/decorator/hash @@ -1 +1 @@ -2022-05-24 e3b35293f02eff8cf2ea08839c22eed98c515e70 +2022-08-16 984b18713342cbb7435e42b38117a37f4ae898db diff --git a/repos/gems/recipes/src/depot_deploy/hash b/repos/gems/recipes/src/depot_deploy/hash index 6e9401bb8e..98a31631e2 100644 --- a/repos/gems/recipes/src/depot_deploy/hash +++ b/repos/gems/recipes/src/depot_deploy/hash @@ -1 +1 @@ -2022-05-24 fa0dd14af6117be8a3c90ac1d4838687da9cb6d8 +2022-08-16 0e07f6dd1e7eee1be9134660708b09535d610ae0 diff --git a/repos/gems/recipes/src/depot_download_manager/hash b/repos/gems/recipes/src/depot_download_manager/hash index 91b4d14744..fc236e77a3 100644 --- a/repos/gems/recipes/src/depot_download_manager/hash +++ b/repos/gems/recipes/src/depot_download_manager/hash @@ -1 +1 @@ -2022-05-24 9b40ffdb8d3e918700186139b102babe09eb73be +2022-08-16 0d18c9273cf245ee727966eab8ca49e8923ba87c diff --git a/repos/gems/recipes/src/depot_query/hash b/repos/gems/recipes/src/depot_query/hash index 97556f6ac2..ea064f4a4e 100644 --- a/repos/gems/recipes/src/depot_query/hash +++ b/repos/gems/recipes/src/depot_query/hash @@ -1 +1 @@ -2022-05-24 8f44473323f3b60073e10637580d5b1ddf78215d +2022-08-16 9385f285b23988cbb91f5c6ff782724327afda97 diff --git a/repos/gems/recipes/src/driver_manager/hash b/repos/gems/recipes/src/driver_manager/hash index 4702d20d87..50da0beec3 100644 --- a/repos/gems/recipes/src/driver_manager/hash +++ b/repos/gems/recipes/src/driver_manager/hash @@ -1 +1 @@ -2022-05-24 b5d206e413a9c9a075f98d6912373102b51f06e4 +2022-08-16 e00a9ca7a7b49165111728033891e90f8f556c53 diff --git a/repos/gems/recipes/src/file_terminal/hash b/repos/gems/recipes/src/file_terminal/hash index f997f0c48a..e37aa85ea9 100644 --- a/repos/gems/recipes/src/file_terminal/hash +++ b/repos/gems/recipes/src/file_terminal/hash @@ -1 +1 @@ -2022-05-24 cbec1310dcb93d1b87f6c435a1030a92e28a880e +2022-08-16 b72b23f93176ab7cdcf32de810e2be09414f2792 diff --git a/repos/gems/recipes/src/file_vault/hash b/repos/gems/recipes/src/file_vault/hash index 1b07936c39..b13af2070f 100644 --- a/repos/gems/recipes/src/file_vault/hash +++ b/repos/gems/recipes/src/file_vault/hash @@ -1 +1 @@ -2022-05-24 fcaf57ebb2136406b4e377297ca747cef36c520b +2022-08-16 0291359a2d92f965d3c517444a5e606d3bcf517a diff --git a/repos/gems/recipes/src/fs_query/hash b/repos/gems/recipes/src/fs_query/hash index 10e8c660b8..15bf153341 100644 --- a/repos/gems/recipes/src/fs_query/hash +++ b/repos/gems/recipes/src/fs_query/hash @@ -1 +1 @@ -2022-05-24 6a8a43bdaa08c5ce9670e3decc50864f52e6fe26 +2022-08-16 2c20c6ab22d05b3c0b02eb02b5339414340da408 diff --git a/repos/gems/recipes/src/fs_tool/hash b/repos/gems/recipes/src/fs_tool/hash index aefdca6f9d..e324553667 100644 --- a/repos/gems/recipes/src/fs_tool/hash +++ b/repos/gems/recipes/src/fs_tool/hash @@ -1 +1 @@ -2022-05-24 36cb234dcac0baf3b2f11b1dd3b68c4c3c37ee5e +2022-08-16 4c8be38b441df43c1c91c186ce3d50817ae34a22 diff --git a/repos/gems/recipes/src/gpt_write/hash b/repos/gems/recipes/src/gpt_write/hash index bcd6ed1e2b..ab3138adb4 100644 --- a/repos/gems/recipes/src/gpt_write/hash +++ b/repos/gems/recipes/src/gpt_write/hash @@ -1 +1 @@ -2022-05-24 1414fb3817c9c7a53f3dd0c3ff3dec8b976548f9 +2022-08-16 d01c17e04b7a37983aafe704adb5a71c9d930f3b diff --git a/repos/gems/recipes/src/gui_fader/hash b/repos/gems/recipes/src/gui_fader/hash index 1591c57cfd..9f8b6f7587 100644 --- a/repos/gems/recipes/src/gui_fader/hash +++ b/repos/gems/recipes/src/gui_fader/hash @@ -1 +1 @@ -2022-05-24 d32c2fcf66d623a7b438be09a228e225caf8764b +2022-08-16 35c86d3f5488038409f557eb95b03ca206fa8096 diff --git a/repos/gems/recipes/src/menu_view/hash b/repos/gems/recipes/src/menu_view/hash index e70f7a5271..fd3d1a49c5 100644 --- a/repos/gems/recipes/src/menu_view/hash +++ b/repos/gems/recipes/src/menu_view/hash @@ -1 +1 @@ -2022-05-24 fa54d07499522f874eb2b5faeb3149c9cabc1ff1 +2022-08-16 14d3c35e8dafef4594f98ab26dc366d9b1aed8cc diff --git a/repos/gems/recipes/src/mixer_gui_qt/hash b/repos/gems/recipes/src/mixer_gui_qt/hash index 7346120514..401a3a9d23 100644 --- a/repos/gems/recipes/src/mixer_gui_qt/hash +++ b/repos/gems/recipes/src/mixer_gui_qt/hash @@ -1 +1 @@ -2022-05-24 c886157cf85d41133b32951dde09533d6c76d413 +2022-08-16 3db7ed5e192c6d9d87b188cd99d3af709c9877ab diff --git a/repos/gems/recipes/src/nano3d/hash b/repos/gems/recipes/src/nano3d/hash index 548f98648a..f46dbf3553 100644 --- a/repos/gems/recipes/src/nano3d/hash +++ b/repos/gems/recipes/src/nano3d/hash @@ -1 +1 @@ -2022-05-24 10dede981c5276f1d641f7a200476f9cb673bf8a +2022-08-16 a4ccc27651a0a1a78326e0c7e66f595e08e175f2 diff --git a/repos/gems/recipes/src/sculpt_manager/hash b/repos/gems/recipes/src/sculpt_manager/hash index 3f3b3095ff..d1533b230b 100644 --- a/repos/gems/recipes/src/sculpt_manager/hash +++ b/repos/gems/recipes/src/sculpt_manager/hash @@ -1 +1 @@ -2022-05-24 a3e02783000b635dd969667d6b774011af3f67dd +2022-08-16 79c8ab656fbecb77612225888d5f0c0de7631bee diff --git a/repos/gems/recipes/src/terminal/hash b/repos/gems/recipes/src/terminal/hash index 64d4c0bb90..f91abfc740 100644 --- a/repos/gems/recipes/src/terminal/hash +++ b/repos/gems/recipes/src/terminal/hash @@ -1 +1 @@ -2022-05-24 be516317b8ae54b30b3f77367901524541d936cc +2022-08-16 12505c9c0b762b3c8caddb85fdfca98f8d4aee26 diff --git a/repos/gems/recipes/src/test-tiled_wm/hash b/repos/gems/recipes/src/test-tiled_wm/hash index 586d064658..2649d85f09 100644 --- a/repos/gems/recipes/src/test-tiled_wm/hash +++ b/repos/gems/recipes/src/test-tiled_wm/hash @@ -1 +1 @@ -2022-05-24 83a1e9437bedd37c96606738030147248e0895fe +2022-08-16 a9fe5c8ceeae39fe2418f831fc6f9fc1409bbfd2 diff --git a/repos/gems/recipes/src/text_area/hash b/repos/gems/recipes/src/text_area/hash index a373fa9130..a80e071a52 100644 --- a/repos/gems/recipes/src/text_area/hash +++ b/repos/gems/recipes/src/text_area/hash @@ -1 +1 @@ -2022-05-24 328740a9d7fd289a4f6b0b9ed9a5589733872578 +2022-08-16 805ca65974e79e261ed19258485f2a8b3f7d701b diff --git a/repos/gems/recipes/src/themed_decorator/hash b/repos/gems/recipes/src/themed_decorator/hash index cd9d16fc84..9ca852fac9 100644 --- a/repos/gems/recipes/src/themed_decorator/hash +++ b/repos/gems/recipes/src/themed_decorator/hash @@ -1 +1 @@ -2022-05-24 95d4851091f271bb67f6e3c8b5488dcf0e6d4060 +2022-08-16 e14a27ba0a0da74192be32a5c5a548a0f5db3552 diff --git a/repos/gems/recipes/src/touch_keyboard/hash b/repos/gems/recipes/src/touch_keyboard/hash index 97b553c900..e9fe7c0675 100644 --- a/repos/gems/recipes/src/touch_keyboard/hash +++ b/repos/gems/recipes/src/touch_keyboard/hash @@ -1 +1 @@ -2022-05-24 2b152d650ec1f4b103f56230489bc4f62142f02e +2022-08-16 b1f07e56a5aa80e1944697878808f8d52330fa4a diff --git a/repos/gems/recipes/src/trace_recorder/hash b/repos/gems/recipes/src/trace_recorder/hash index d7866bc6f8..6f5b895197 100644 --- a/repos/gems/recipes/src/trace_recorder/hash +++ b/repos/gems/recipes/src/trace_recorder/hash @@ -1 +1 @@ -2022-05-11 2cc9c248476c5b323740496cc1da0bf4fdbae1f9 +2022-08-16 3da52b4ea03ba0b7829e4a6dde1beaae1aa962d2 diff --git a/repos/gems/recipes/src/trace_recorder_policy/hash b/repos/gems/recipes/src/trace_recorder_policy/hash index 63238dc288..8d6db360c9 100644 --- a/repos/gems/recipes/src/trace_recorder_policy/hash +++ b/repos/gems/recipes/src/trace_recorder_policy/hash @@ -1 +1 @@ -2022-05-17 2c7fca33754a0cb26bc494a276cb285cdb6650d7 +2022-08-16 441606edbd1ffd0e105d7eef09609167bffe2452 diff --git a/repos/gems/recipes/src/vfs_audit/hash b/repos/gems/recipes/src/vfs_audit/hash index fa6c2f7265..664672e868 100644 --- a/repos/gems/recipes/src/vfs_audit/hash +++ b/repos/gems/recipes/src/vfs_audit/hash @@ -1 +1 @@ -2022-05-24 ebc9dbe7f9d3a380c9a507e2ac39a7233ba2ccce +2022-08-16 fe85fc1e9224c18e608d636a9b886beb8e246689 diff --git a/repos/gems/recipes/src/vfs_gpu/hash b/repos/gems/recipes/src/vfs_gpu/hash index 8af9b47734..619d469d92 100644 --- a/repos/gems/recipes/src/vfs_gpu/hash +++ b/repos/gems/recipes/src/vfs_gpu/hash @@ -1 +1 @@ -2022-05-24 8b8c7cb99dafbfef75c07e1f32cfcb2c6fc4c86f +2022-08-16 013aa5cce89c47349cab67f752b3d04c818adeda diff --git a/repos/gems/recipes/src/vfs_import/hash b/repos/gems/recipes/src/vfs_import/hash index b285acfab0..97fed33091 100644 --- a/repos/gems/recipes/src/vfs_import/hash +++ b/repos/gems/recipes/src/vfs_import/hash @@ -1 +1 @@ -2022-05-24 d1145c962cdbd84ae5364f5897631c1b0c81e584 +2022-08-16 0ba225be4d19fb4b9311360d59fbc85a10de03a2 diff --git a/repos/gems/recipes/src/vfs_pipe/hash b/repos/gems/recipes/src/vfs_pipe/hash index 3427f7d28a..2da29d813f 100644 --- a/repos/gems/recipes/src/vfs_pipe/hash +++ b/repos/gems/recipes/src/vfs_pipe/hash @@ -1 +1 @@ -2022-05-24 0b036d99b988fe16730b98bde7a3489a728082f5 +2022-08-16 b721657deca0684b95c134cf39f180122853a587 diff --git a/repos/gems/recipes/src/vfs_trace/hash b/repos/gems/recipes/src/vfs_trace/hash index 7fc5a0e41e..691e05af93 100644 --- a/repos/gems/recipes/src/vfs_trace/hash +++ b/repos/gems/recipes/src/vfs_trace/hash @@ -1 +1 @@ -2022-05-24 e914cde5a27603278fb305a50891c0ea8cd54634 +2022-08-16 fd86a26c8b28191b6c82b11c919bd4330f49d3e0 diff --git a/repos/gems/recipes/src/vfs_ttf/hash b/repos/gems/recipes/src/vfs_ttf/hash index d65d75ed0f..565568f708 100644 --- a/repos/gems/recipes/src/vfs_ttf/hash +++ b/repos/gems/recipes/src/vfs_ttf/hash @@ -1 +1 @@ -2022-05-24 568c027dfb6e77223008a83bbb9e2a230cb0b473 +2022-08-16 eba4588332957efaf5ae5f0630076a726cac1a43 diff --git a/repos/gems/recipes/src/window_layouter/hash b/repos/gems/recipes/src/window_layouter/hash index 2dc4ab17ba..893b013770 100644 --- a/repos/gems/recipes/src/window_layouter/hash +++ b/repos/gems/recipes/src/window_layouter/hash @@ -1 +1 @@ -2022-05-24 ab08adbea53fafadb39f1df13d34e7c9d78714ae +2022-08-16 2af270c7b599198acded112561b60c8a2635e52b diff --git a/repos/gems/recipes/src/wm/hash b/repos/gems/recipes/src/wm/hash index 64d602a303..6906a598e4 100644 --- a/repos/gems/recipes/src/wm/hash +++ b/repos/gems/recipes/src/wm/hash @@ -1 +1 @@ -2022-05-24 1447996da98683c26796f6fab7cfe910ee45dbba +2022-08-16 ae7d3bbec37cdffe22a4bc56031d6f97d26218bb diff --git a/repos/libports/recipes/api/gmp/hash b/repos/libports/recipes/api/gmp/hash index 45cb5555b1..6a1e2b760f 100644 --- a/repos/libports/recipes/api/gmp/hash +++ b/repos/libports/recipes/api/gmp/hash @@ -1 +1 @@ -2021-02-22 85dd7243bee149bbd1a691c89182fe9bd0fd1835 +2022-08-16 d4a72d7d1594d587711791b324466c3c0103c38b diff --git a/repos/libports/recipes/api/libc/hash b/repos/libports/recipes/api/libc/hash index e77dd6fadc..188a7c19b9 100644 --- a/repos/libports/recipes/api/libc/hash +++ b/repos/libports/recipes/api/libc/hash @@ -1 +1 @@ -2022-02-27 3dcf917b63918950d2c45c15d72847ed309468cb +2022-08-16 c8b5df1b82d23ae95d1164cc62e909afd1e60b0f diff --git a/repos/libports/recipes/api/libdrm/hash b/repos/libports/recipes/api/libdrm/hash index 6e252fce6a..132163e5ae 100644 --- a/repos/libports/recipes/api/libdrm/hash +++ b/repos/libports/recipes/api/libdrm/hash @@ -1 +1 @@ -2021-11-29 82e8cd40bd7c44247a7559f1db8374538e714b05 +2022-08-16 4b9e10789ce5311dfa3aa688ce0e0dbee532e13f diff --git a/repos/libports/recipes/api/qt5/hash b/repos/libports/recipes/api/qt5/hash index 70a9796a26..ca3313769e 100644 --- a/repos/libports/recipes/api/qt5/hash +++ b/repos/libports/recipes/api/qt5/hash @@ -1 +1 @@ -2021-01-22 4856d458c6d53bb57d3e61e4a81fc5b06eaa8e2b +2022-08-16 01e14e6a7d9d1cb8ed87df3e52cda3db5724ad0a diff --git a/repos/libports/recipes/pkg/acpica/hash b/repos/libports/recipes/pkg/acpica/hash index 3f63d6b7e3..ba638288a3 100644 --- a/repos/libports/recipes/pkg/acpica/hash +++ b/repos/libports/recipes/pkg/acpica/hash @@ -1 +1 @@ -2022-05-24 b1075721a92e875333d8b96d78c158c1d1288550 +2022-08-16 9db33912ab6585ec9eee9470bcb3663eadf24295 diff --git a/repos/libports/recipes/pkg/gcov/hash b/repos/libports/recipes/pkg/gcov/hash index 8f42a7d528..675a277264 100644 --- a/repos/libports/recipes/pkg/gcov/hash +++ b/repos/libports/recipes/pkg/gcov/hash @@ -1 +1 @@ -2022-05-24 03da3e26ba9ed52b75338d1b3c64c5ea447cadb2 +2022-08-16 9a94057d1c627500455edeca2cda2d765d1211cc diff --git a/repos/libports/recipes/pkg/mesa_gears/hash b/repos/libports/recipes/pkg/mesa_gears/hash index 8fa1d4bec0..ae8af6a7c7 100644 --- a/repos/libports/recipes/pkg/mesa_gears/hash +++ b/repos/libports/recipes/pkg/mesa_gears/hash @@ -1 +1 @@ -2022-05-24 81812410d94da51b3c1019553140b5c5d232ede6 +2022-08-16 fc3bd553d12cf85d362484b2e4b0774aaaaad173 diff --git a/repos/libports/recipes/pkg/mesa_gpu-cpu/hash b/repos/libports/recipes/pkg/mesa_gpu-cpu/hash index d032bf204d..f8a6f9a520 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-cpu/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-cpu/hash @@ -1 +1 @@ -2022-05-24 feff7105f296557e932377c8d0dd0211efda3e0a +2022-08-16 a1623ff07aa8162c961fcaf778f09a9167cef1c1 diff --git a/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash b/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash index 59ef074a8d..f5be5058c4 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash @@ -1 +1 @@ -2022-05-24 1fe9669720b0f61b9953baaa2dc36576a3c5e866 +2022-08-16 399dd53cc5f4fe11d2f27b2b37c1a697a59b1c36 diff --git a/repos/libports/recipes/pkg/mesa_gpu-intel/hash b/repos/libports/recipes/pkg/mesa_gpu-intel/hash index 673b1c80e8..240aa0e9a0 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-intel/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-intel/hash @@ -1 +1 @@ -2022-05-24 2c0dfe3c79d85972f8946340b6a29aca6c3ed30c +2022-08-16 62c32e7a11ebfd1cdc7000919f5af08eadc949b4 diff --git a/repos/libports/recipes/pkg/pdf_view/hash b/repos/libports/recipes/pkg/pdf_view/hash index f3faf2c704..63cb1444d1 100644 --- a/repos/libports/recipes/pkg/pdf_view/hash +++ b/repos/libports/recipes/pkg/pdf_view/hash @@ -1 +1 @@ -2022-05-24 43a153dd7796b69e2705aa8a2d6c1763cdae7c0b +2022-08-16 a8a3297bd0ceaad985a3360cb730eb98e3b6f102 diff --git a/repos/libports/recipes/pkg/qt5_textedit/hash b/repos/libports/recipes/pkg/qt5_textedit/hash index 8abf3d623a..a20ce1ec76 100644 --- a/repos/libports/recipes/pkg/qt5_textedit/hash +++ b/repos/libports/recipes/pkg/qt5_textedit/hash @@ -1 +1 @@ -2022-05-24 a78e8b3b90d0fec6c9bd4f54e5ae9e373cb0c1c9 +2022-08-16 15c4962a00020459048f62f1b9c518b8ba5ccea8 diff --git a/repos/libports/recipes/pkg/system_clock-pc/hash b/repos/libports/recipes/pkg/system_clock-pc/hash index 41f5159588..1d6bbaec1c 100644 --- a/repos/libports/recipes/pkg/system_clock-pc/hash +++ b/repos/libports/recipes/pkg/system_clock-pc/hash @@ -1 +1 @@ -2022-05-24 491f3407cd7fc93f9fb50f4736362117f57a0900 +2022-08-16 b916e39a9aca8e74eeb33353f1f8c0b386f32b7f diff --git a/repos/libports/recipes/pkg/system_rtc-linux/hash b/repos/libports/recipes/pkg/system_rtc-linux/hash index ff9ba1c79e..f4a4abdd17 100644 --- a/repos/libports/recipes/pkg/system_rtc-linux/hash +++ b/repos/libports/recipes/pkg/system_rtc-linux/hash @@ -1 +1 @@ -2022-05-24 83007e26ddab12746ccd935efacf9634dd259f1f +2022-08-16 c3f705f9ba0e74ccfc63235ec9b7dd7ceef5362e diff --git a/repos/libports/recipes/pkg/system_rtc-pc/hash b/repos/libports/recipes/pkg/system_rtc-pc/hash index 220c6822b1..ea481a7736 100644 --- a/repos/libports/recipes/pkg/system_rtc-pc/hash +++ b/repos/libports/recipes/pkg/system_rtc-pc/hash @@ -1 +1 @@ -2022-06-06 198a9b3ca1625083e8e5cc6893c2dc9c3ef7b254 +2022-08-16 d4102cb3de53a15cc7912296bf568611a073fd28 diff --git a/repos/libports/recipes/pkg/test-expat/hash b/repos/libports/recipes/pkg/test-expat/hash index 6daf040553..51c6bb2164 100644 --- a/repos/libports/recipes/pkg/test-expat/hash +++ b/repos/libports/recipes/pkg/test-expat/hash @@ -1 +1 @@ -2022-05-24 550d42cde275043f0861578bb0384425c2e61576 +2022-08-16 a1c0ea71a3a1cd356a3d4d7d0dc2ac4df4d9078e diff --git a/repos/libports/recipes/pkg/test-ldso/hash b/repos/libports/recipes/pkg/test-ldso/hash index de2f846d1a..6d6d7b3c06 100644 --- a/repos/libports/recipes/pkg/test-ldso/hash +++ b/repos/libports/recipes/pkg/test-ldso/hash @@ -1 +1 @@ -2022-05-24 467270387a1dc0410425ea81a6f7a0a06dd93bcd +2022-08-16 b2dc906cf2247d76f71116dd4376bf45d8ae6b73 diff --git a/repos/libports/recipes/pkg/test-libc/hash b/repos/libports/recipes/pkg/test-libc/hash index e607bb4e45..7df1fbc546 100644 --- a/repos/libports/recipes/pkg/test-libc/hash +++ b/repos/libports/recipes/pkg/test-libc/hash @@ -1 +1 @@ -2022-05-24 3b0f396f81721b26b295f08c4e7953e314459b36 +2022-08-16 6aa4f143104f42042af77de5c918a284034a9ea9 diff --git a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash index a6930bd229..7c1928cf29 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash @@ -1 +1 @@ -2022-05-24 c496953343092623bab4dc48bb6062f3a272a599 +2022-08-16 c3247057a14dceaa2f0a07481b7e0cab3fa6a35b diff --git a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash index cc2ccfaa6b..51eb95e81e 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash @@ -1 +1 @@ -2022-05-24 b6e9db1e216f8d07cf7a9c3f9b5c477efe038d35 +2022-08-16 b20429fbd1484591e376fed6d69c36607b0e62cb diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash index 44320150d5..4f94eec551 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash @@ -1 +1 @@ -2022-05-24 bbe5f043dfd6d6da43558ec2f037ca6ae962fed7 +2022-08-16 713479cfe4e8477d60774772dbacaa412abf1500 diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash index 6a6c7a03c4..f481777a25 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash @@ -1 +1 @@ -2022-05-24 0052b3766bae0649337f0a8ea4b523e73bbca0e1 +2022-08-16 6051a7404cac3be5586f7aff19aa915190c1b10e diff --git a/repos/libports/recipes/pkg/test-libc_counter/hash b/repos/libports/recipes/pkg/test-libc_counter/hash index eed8ccc4d8..f75e6664f3 100644 --- a/repos/libports/recipes/pkg/test-libc_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_counter/hash @@ -1 +1 @@ -2022-05-24 f4eff430bbd7076067c6c091d5682e6bcbcaa30f +2022-08-16 40316a563b4ffb983be164d65f9c965f4fe5d18e diff --git a/repos/libports/recipes/pkg/test-libc_execve/hash b/repos/libports/recipes/pkg/test-libc_execve/hash index e4b38f9ff5..b440859713 100644 --- a/repos/libports/recipes/pkg/test-libc_execve/hash +++ b/repos/libports/recipes/pkg/test-libc_execve/hash @@ -1 +1 @@ -2022-05-24 7ca1271740c179db624b8fdb468861c0363fb846 +2022-08-16 a6a12558cf50e347905267a41e1416d262dc4c71 diff --git a/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash b/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash index 58b5600cd2..c321b5fd6f 100644 --- a/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash @@ -1 +1 @@ -2022-05-24 1dd1f34f47b98815525696e152696cfa443a8468 +2022-08-16 9458f8dbabf14aaa1814d097d7767ad4656a98c4 diff --git a/repos/libports/recipes/pkg/test-libc_fork/hash b/repos/libports/recipes/pkg/test-libc_fork/hash index 5b7c63f543..1b7132ceb1 100644 --- a/repos/libports/recipes/pkg/test-libc_fork/hash +++ b/repos/libports/recipes/pkg/test-libc_fork/hash @@ -1 +1 @@ -2022-05-24 13950c69012005b54a3549bd3d19bf2e8838ae60 +2022-08-16 2af13a0b1fc99ce9711ca77975f2fe493aa81e0b diff --git a/repos/libports/recipes/pkg/test-libc_getenv/hash b/repos/libports/recipes/pkg/test-libc_getenv/hash index 5c3ca36dcf..5e7660b2b6 100644 --- a/repos/libports/recipes/pkg/test-libc_getenv/hash +++ b/repos/libports/recipes/pkg/test-libc_getenv/hash @@ -1 +1 @@ -2022-05-24 8f4f5d3639e7f4c664c239172a6ba047e327a93b +2022-08-16 0247f55f3b198b8af75b52c198ab87e74b0894e0 diff --git a/repos/libports/recipes/pkg/test-libc_pipe/hash b/repos/libports/recipes/pkg/test-libc_pipe/hash index 8c6a82a616..43a3219a67 100644 --- a/repos/libports/recipes/pkg/test-libc_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_pipe/hash @@ -1 +1 @@ -2022-05-24 ae37de3ed8ff292e28d0faebad91a2e09b4a8631 +2022-08-16 10e01cf3281cc761be0aff589106abe912fd3569 diff --git a/repos/libports/recipes/pkg/test-libc_vfs/hash b/repos/libports/recipes/pkg/test-libc_vfs/hash index 37215e2e84..ad8af16dfc 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs/hash @@ -1 +1 @@ -2022-05-24 ba6dc394c49c14d0d4f6115aab9fb8f57aee9e5e +2022-08-16 94f58b73bce74a9dbb8e03bbe8ccb5f506c6b9b6 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_block/hash b/repos/libports/recipes/pkg/test-libc_vfs_block/hash index 42f82fa7f7..69cdf82c47 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_block/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_block/hash @@ -1 +1 @@ -2022-05-24 e9535d95ddeb0f274941d0488ca3ccb127da5701 +2022-08-16 47f516d5c1748a69217ee509ea6e137418c1185f diff --git a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash index 5efa6fbd78..456a13dbf0 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash @@ -1 +1 @@ -2022-05-24 6c9cbde101399c39a5130c724991ba4d2775482b +2022-08-16 ecd52e78977d34e26700ce23488dd1f751f61768 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash index ef18f5ac95..3a9a69f798 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash @@ -1 +1 @@ -2022-05-24 471118d62e6a79b936d095d77dfea31b1d04941f +2022-08-16 01f3c0b20e79abd61b3c7d1d585fa38d1af450fa diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash index 00fa81f7a6..b9f077b059 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash @@ -1 +1 @@ -2022-05-24 2f1a7aad31d8fdb02082460f52d9b2e2a5200761 +2022-08-16 640041665a8ace8b78d1c37b85ad211c3ed76da3 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash index 9692391637..9547b789b9 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash @@ -1 +1 @@ -2022-05-24 2795ab1252b22e8a6733c5bc7df28bf89fa1037f +2022-08-16 7997f8f6c7f71c1df43490484620d91fc668edb1 diff --git a/repos/libports/recipes/pkg/test-pthread/hash b/repos/libports/recipes/pkg/test-pthread/hash index 344561c346..33f6856810 100644 --- a/repos/libports/recipes/pkg/test-pthread/hash +++ b/repos/libports/recipes/pkg/test-pthread/hash @@ -1 +1 @@ -2022-05-24 a9a0d35a8b39b7f0f4f22fdf1a47311d47950de2 +2022-08-16 e81f030bb9a966e22e7b4ae863b15064ff722670 diff --git a/repos/libports/recipes/pkg/test-sequence/hash b/repos/libports/recipes/pkg/test-sequence/hash index 4f9edcc070..736fca0fea 100644 --- a/repos/libports/recipes/pkg/test-sequence/hash +++ b/repos/libports/recipes/pkg/test-sequence/hash @@ -1 +1 @@ -2022-05-24 9c39d49a72d4d5f974dca649fadd746a2a42ca52 +2022-08-16 557038b1a48bf5095d9d70f253292c25c7b2f1af diff --git a/repos/libports/recipes/pkg/test-spark/hash b/repos/libports/recipes/pkg/test-spark/hash index 771e83468e..daabfc02a1 100644 --- a/repos/libports/recipes/pkg/test-spark/hash +++ b/repos/libports/recipes/pkg/test-spark/hash @@ -1 +1 @@ -2022-05-24 7c4fb075bf9faf2662cd073fecfee4dd54b30558 +2022-08-16 82b24d859267c22908c4c1c7b8b6e12d6e4dab02 diff --git a/repos/libports/recipes/pkg/test-spark_exception/hash b/repos/libports/recipes/pkg/test-spark_exception/hash index 0cad9a793b..48f2bd4c9b 100644 --- a/repos/libports/recipes/pkg/test-spark_exception/hash +++ b/repos/libports/recipes/pkg/test-spark_exception/hash @@ -1 +1 @@ -2022-05-24 186d15b4851f80b43c30eb341f00546b0f96d896 +2022-08-16 7585ca982a650fbeb784e48413b35c640d010433 diff --git a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash index 2cf43b6cf8..1d431c31dd 100644 --- a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash @@ -1 +1 @@ -2022-05-24 13f324893b5c4b86ac77ee826066b3ab88d6f2fb +2022-08-16 00a2020676f4fc759a0779ecff5efb157adba7de diff --git a/repos/libports/recipes/pkg/test-stdcxx/hash b/repos/libports/recipes/pkg/test-stdcxx/hash index 7f171500de..a54c683579 100644 --- a/repos/libports/recipes/pkg/test-stdcxx/hash +++ b/repos/libports/recipes/pkg/test-stdcxx/hash @@ -1 +1 @@ -2022-05-24 cfda7f156d11fb4fe4c6d723aa4ff7e0774cfb11 +2022-08-16 a0b04fa76113bb3a7e876a7f18bc475b4548d649 diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash index e9d84b81b2..dc3d898c61 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash @@ -1 +1 @@ -2022-05-24 804e1a0be3fdccc66a090e211486f4913e3b3c6a +2022-08-16 7c59c16fff11ae04abf516e473172f6853d233cc diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash index 9aa9fc6c30..2e054c938b 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash @@ -1 +1 @@ -2022-05-24 fb4fe5ddd20d2072c6cff13313c34c066bd933e8 +2022-08-16 e6c6f878bd8052e6d09564ed642caf0129abd91a diff --git a/repos/libports/recipes/pkg/usb_webcam/hash b/repos/libports/recipes/pkg/usb_webcam/hash index 258cb8f2c7..5b899edb62 100644 --- a/repos/libports/recipes/pkg/usb_webcam/hash +++ b/repos/libports/recipes/pkg/usb_webcam/hash @@ -1 +1 @@ -2022-05-24 8ab9eb555588f812673968e1c0f292b3616362c6 +2022-08-16 e71396bd17546b4ee779333e1896730e997262e1 diff --git a/repos/libports/recipes/src/acpica/hash b/repos/libports/recipes/src/acpica/hash index e48e995eb4..50d7328a7b 100644 --- a/repos/libports/recipes/src/acpica/hash +++ b/repos/libports/recipes/src/acpica/hash @@ -1 +1 @@ -2022-05-24 6bbe7dece8237551559205222369e818dd6fc42f +2022-08-16 98259bba97bb3c63bc735cc17ea66c8fd1c98421 diff --git a/repos/libports/recipes/src/curl/hash b/repos/libports/recipes/src/curl/hash index d9567492e0..2e0edd9eb5 100644 --- a/repos/libports/recipes/src/curl/hash +++ b/repos/libports/recipes/src/curl/hash @@ -1 +1 @@ -2022-04-27 ad3563708e657d670eec9b49e59d87a3efcadb14 +2022-08-16 85ad2f0cf0fd0b8d8a07031eef76f029972e09c6 diff --git a/repos/libports/recipes/src/expat/hash b/repos/libports/recipes/src/expat/hash index a018e58301..82e2d1db43 100644 --- a/repos/libports/recipes/src/expat/hash +++ b/repos/libports/recipes/src/expat/hash @@ -1 +1 @@ -2022-04-27 0976e30a88558de4690593a40d41726ac168e73a +2022-08-16 6329020e3d3e75a1920220a9e857ea22094d4efb diff --git a/repos/libports/recipes/src/extract/hash b/repos/libports/recipes/src/extract/hash index 7caf393ad2..33c1ec4853 100644 --- a/repos/libports/recipes/src/extract/hash +++ b/repos/libports/recipes/src/extract/hash @@ -1 +1 @@ -2022-05-24 2bc833bc38da39a3a429d760792a0868252cc6f5 +2022-08-16 ade504346c0722801c11fc52519a92e6c7f4fc76 diff --git a/repos/libports/recipes/src/fetchurl/hash b/repos/libports/recipes/src/fetchurl/hash index 276a43c252..64bace9783 100644 --- a/repos/libports/recipes/src/fetchurl/hash +++ b/repos/libports/recipes/src/fetchurl/hash @@ -1 +1 @@ -2022-05-24 e8da373e14207540c4421015fb1316ac5f07d58e +2022-08-16 78b1f5ae916a030d52e855ab8e0768bf89ce99af diff --git a/repos/libports/recipes/src/ffi/hash b/repos/libports/recipes/src/ffi/hash index 46c22fc510..5a56ee30fd 100644 --- a/repos/libports/recipes/src/ffi/hash +++ b/repos/libports/recipes/src/ffi/hash @@ -1 +1 @@ -2022-02-27 01130e4ef8bc5cbe7415834e1a19e11a450d41ae +2022-08-16 2270df571f75c3ee9fdd9537bb9c0f7840f9995f diff --git a/repos/libports/recipes/src/freetype/hash b/repos/libports/recipes/src/freetype/hash index 54bdd81f2a..7082fddef2 100644 --- a/repos/libports/recipes/src/freetype/hash +++ b/repos/libports/recipes/src/freetype/hash @@ -1 +1 @@ -2022-02-27 d04249140c9d0138c047ab755504027fe99a83b2 +2022-08-16 5f4d25033a019644468683f4e31667e605dbff4e diff --git a/repos/libports/recipes/src/fs_utils/hash b/repos/libports/recipes/src/fs_utils/hash index 96a0ac7795..500b446eb2 100644 --- a/repos/libports/recipes/src/fs_utils/hash +++ b/repos/libports/recipes/src/fs_utils/hash @@ -1 +1 @@ -2022-02-27 662acade7f29303a0dcdf2ae9360d2fa8e15de64 +2022-08-16 0e24e36914987339154af0cef874da875f32dbd5 diff --git a/repos/libports/recipes/src/gcov/hash b/repos/libports/recipes/src/gcov/hash index e6d1e199a4..9c8152a271 100644 --- a/repos/libports/recipes/src/gcov/hash +++ b/repos/libports/recipes/src/gcov/hash @@ -1 +1 @@ -2022-05-24 337041d656fae9ffc8fb3b11fbf7723d966cc1e4 +2022-08-16 2f28dda6f8d9634ac2817190e37e0d3c04352ecc diff --git a/repos/libports/recipes/src/gmp/hash b/repos/libports/recipes/src/gmp/hash index 90a5c12dfa..49ffb0c0b2 100644 --- a/repos/libports/recipes/src/gmp/hash +++ b/repos/libports/recipes/src/gmp/hash @@ -1 +1 @@ -2022-06-06 b4d8311bc69e669ffc135f7a18df3866db4a4e88 +2022-08-16 e9c93cf8b090cb049b9b83a1f7748f5b65937eda diff --git a/repos/libports/recipes/src/icu/hash b/repos/libports/recipes/src/icu/hash index 7c58ef5347..211cbd4f4f 100644 --- a/repos/libports/recipes/src/icu/hash +++ b/repos/libports/recipes/src/icu/hash @@ -1 +1 @@ -2022-05-24 35bedbb6951e28d038f96801f029b0b3944f2259 +2022-08-16 90696d19aec8c8b8257e80f457fb1cbfa9443d86 diff --git a/repos/libports/recipes/src/jbig2dec/hash b/repos/libports/recipes/src/jbig2dec/hash index fa326125d6..21d2f60271 100644 --- a/repos/libports/recipes/src/jbig2dec/hash +++ b/repos/libports/recipes/src/jbig2dec/hash @@ -1 +1 @@ -2022-04-27 671c2d33d3a4bd4d8f05a76defc16555bf8895c6 +2022-08-16 e919638e174f8f5dec5254cdb67d41e206e7b003 diff --git a/repos/libports/recipes/src/jpeg/hash b/repos/libports/recipes/src/jpeg/hash index ee96d7256e..0da3c03938 100644 --- a/repos/libports/recipes/src/jpeg/hash +++ b/repos/libports/recipes/src/jpeg/hash @@ -1 +1 @@ -2022-04-27 ef1445e8b64b103ae010b0dd12e470d686012498 +2022-08-16 dc293e6cf2970f89c4f9d9d1c7592274bf7ee76f diff --git a/repos/libports/recipes/src/libarchive/hash b/repos/libports/recipes/src/libarchive/hash index 1c6f56005c..c0d789fbc5 100644 --- a/repos/libports/recipes/src/libarchive/hash +++ b/repos/libports/recipes/src/libarchive/hash @@ -1 +1 @@ -2022-04-27 a878914b64b19ebb177b03daf43e4bdde18d1cbb +2022-08-16 8f5af1316ab668d096f5a0df6431c471d4718909 diff --git a/repos/libports/recipes/src/libc/hash b/repos/libports/recipes/src/libc/hash index 61f69bbbb7..9d2f5a99da 100644 --- a/repos/libports/recipes/src/libc/hash +++ b/repos/libports/recipes/src/libc/hash @@ -1 +1 @@ -2022-05-24 c97b089b965a64f8362e22e8c831caa7468d09f8 +2022-08-16 70bc38e424ab2dd7ae17655a637621dc18932022 diff --git a/repos/libports/recipes/src/libdrm/hash b/repos/libports/recipes/src/libdrm/hash index 77b471dc82..fd67f9681c 100644 --- a/repos/libports/recipes/src/libdrm/hash +++ b/repos/libports/recipes/src/libdrm/hash @@ -1 +1 @@ -2022-05-24 2c3b6f341a8ca08017cdddee7b79248817284d1d +2022-08-16 be8467295e5e428a7a341bbff810f04ee092f1e5 diff --git a/repos/libports/recipes/src/libiconv/hash b/repos/libports/recipes/src/libiconv/hash index accd5f8f29..6cae37bff3 100644 --- a/repos/libports/recipes/src/libiconv/hash +++ b/repos/libports/recipes/src/libiconv/hash @@ -1 +1 @@ -2022-04-27 a4ac3a81917efff8e4887f64787c0cb03f8904c8 +2022-08-16 8482c21d73a5c13df5db37efbab41b108860d329 diff --git a/repos/libports/recipes/src/liblzma/hash b/repos/libports/recipes/src/liblzma/hash index fdbfc1b1c8..be115ee03b 100644 --- a/repos/libports/recipes/src/liblzma/hash +++ b/repos/libports/recipes/src/liblzma/hash @@ -1 +1 @@ -2022-04-27 f67100f4556224963709ba6481878ab41c05aeb7 +2022-08-16 423210e6ecf3e6c6203f497edc3bb8fd3157f411 diff --git a/repos/libports/recipes/src/libpng/hash b/repos/libports/recipes/src/libpng/hash index 482c8a8b17..24d8fe4abf 100644 --- a/repos/libports/recipes/src/libpng/hash +++ b/repos/libports/recipes/src/libpng/hash @@ -1 +1 @@ -2022-04-27 b3762435831493ee008337f8d565e45c8949cbe1 +2022-08-16 7788891cc56921e5f4c378b9c47809cc9a1a945d diff --git a/repos/libports/recipes/src/libqgenodeviewwidget/hash b/repos/libports/recipes/src/libqgenodeviewwidget/hash index f7d1aeeac1..12034ad911 100644 --- a/repos/libports/recipes/src/libqgenodeviewwidget/hash +++ b/repos/libports/recipes/src/libqgenodeviewwidget/hash @@ -1 +1 @@ -2022-05-24 37c4717f0d8a695fd56f1261ecc168bad10fe5e3 +2022-08-16 aac5330389858fb40a7b39b963864d55b47a4e23 diff --git a/repos/libports/recipes/src/libqpluginwidget/hash b/repos/libports/recipes/src/libqpluginwidget/hash index 148014b56b..edfc00aa29 100644 --- a/repos/libports/recipes/src/libqpluginwidget/hash +++ b/repos/libports/recipes/src/libqpluginwidget/hash @@ -1 +1 @@ -2022-05-24 327a85ec4a9708a232e7eda3d5896fa64589b4f0 +2022-08-16 dd837fc8145e01e9e800c73b755585c328a81ac0 diff --git a/repos/libports/recipes/src/libsparkcrypto/hash b/repos/libports/recipes/src/libsparkcrypto/hash index e1f21a8e84..a46e54ebe1 100644 --- a/repos/libports/recipes/src/libsparkcrypto/hash +++ b/repos/libports/recipes/src/libsparkcrypto/hash @@ -1 +1 @@ -2022-05-24 f2d05364d0db879f0cbf372ab0c88fb0b26f26dc +2022-08-16 7db7c39e5e5d6c2ae58c5dd6ecde02459eb27b46 diff --git a/repos/libports/recipes/src/libssh/hash b/repos/libports/recipes/src/libssh/hash index 432cba24d2..c16d8dce24 100644 --- a/repos/libports/recipes/src/libssh/hash +++ b/repos/libports/recipes/src/libssh/hash @@ -1 +1 @@ -2022-02-27 c3f794f683058386e890490b7d6ae8fca998579a +2022-08-16 5d7102efc56379e64b8bc52abfbf0c19a2405231 diff --git a/repos/libports/recipes/src/libusb/hash b/repos/libports/recipes/src/libusb/hash index 50b2fe39bc..cd5b2f9b93 100644 --- a/repos/libports/recipes/src/libusb/hash +++ b/repos/libports/recipes/src/libusb/hash @@ -1 +1 @@ -2022-05-24 addbef0fb4d08fab9d5de50201f3932341eb6f1a +2022-08-16 3c3c4371b5c3a4eccfb9bb8272f034b619bc1688 diff --git a/repos/libports/recipes/src/libuvc/hash b/repos/libports/recipes/src/libuvc/hash index 40f4894a92..1a3e44f2fe 100644 --- a/repos/libports/recipes/src/libuvc/hash +++ b/repos/libports/recipes/src/libuvc/hash @@ -1 +1 @@ -2022-02-27 bae978448ea062e8a26631abe9a2db7439e030d7 +2022-08-16 e17aebb77231675920fd9a90fd1828580317f265 diff --git a/repos/libports/recipes/src/libyuv/hash b/repos/libports/recipes/src/libyuv/hash index bc63fc4a3a..3d95456678 100644 --- a/repos/libports/recipes/src/libyuv/hash +++ b/repos/libports/recipes/src/libyuv/hash @@ -1 +1 @@ -2022-04-27 2cd47c7f60713e3c2bcd623a1fa8fe8259a902bb +2022-08-16 93f11a86cd5dbc4759716e8b134622c7d0088576 diff --git a/repos/libports/recipes/src/mesa/hash b/repos/libports/recipes/src/mesa/hash index 5c84935abe..6a0bf7205f 100644 --- a/repos/libports/recipes/src/mesa/hash +++ b/repos/libports/recipes/src/mesa/hash @@ -1 +1 @@ -2022-05-24 ec5e9fd76329cbfbb3cfa71fda6269dc1e9e3d6a +2022-08-16 60bfaa48119ec74b3791c7f7cc0947ecdbb80920 diff --git a/repos/libports/recipes/src/mesa_gears/hash b/repos/libports/recipes/src/mesa_gears/hash index bc30fca0bd..3b29445af7 100644 --- a/repos/libports/recipes/src/mesa_gears/hash +++ b/repos/libports/recipes/src/mesa_gears/hash @@ -1 +1 @@ -2022-05-24 6e47f102520274898f9ebf775155364179bf539e +2022-08-16 bc6bc75cb6d70e21c62e71981d138df911b1c261 diff --git a/repos/libports/recipes/src/mupdf/hash b/repos/libports/recipes/src/mupdf/hash index 51ef99be63..4148084589 100644 --- a/repos/libports/recipes/src/mupdf/hash +++ b/repos/libports/recipes/src/mupdf/hash @@ -1 +1 @@ -2022-02-27 59f555ef24730583a787493b8d58c9836e71286c +2022-08-16 c4df04540470f6b3918faf1bd36d33f615948f1f diff --git a/repos/libports/recipes/src/ncurses/hash b/repos/libports/recipes/src/ncurses/hash index 2fa2d3efa9..be0cbb48f6 100644 --- a/repos/libports/recipes/src/ncurses/hash +++ b/repos/libports/recipes/src/ncurses/hash @@ -1 +1 @@ -2022-02-27 c7812b128b3d3c8cd9e27ac8ba91e189f19dae70 +2022-08-16 2fa9baa42169455bc7ec026d3c6c491ec9cc9ea2 diff --git a/repos/libports/recipes/src/openjpeg/hash b/repos/libports/recipes/src/openjpeg/hash index ae27eed2ec..3319239868 100644 --- a/repos/libports/recipes/src/openjpeg/hash +++ b/repos/libports/recipes/src/openjpeg/hash @@ -1 +1 @@ -2022-04-27 9cd976edbdb7c2350cf42aa92f69c1862a844b99 +2022-08-16 89939d376f75f7bc71f9961c943e25dfc0e511f9 diff --git a/repos/libports/recipes/src/openssl/hash b/repos/libports/recipes/src/openssl/hash index f3385dddc7..0588936587 100644 --- a/repos/libports/recipes/src/openssl/hash +++ b/repos/libports/recipes/src/openssl/hash @@ -1 +1 @@ -2022-02-27 dead81c4adc98995bd57d60195091f4e418daa4d +2022-08-16 2cd02e7e4b3b3c75c4f947d73beec78e92c1bf94 diff --git a/repos/libports/recipes/src/pcre/hash b/repos/libports/recipes/src/pcre/hash index 82aa27e38e..117a356328 100644 --- a/repos/libports/recipes/src/pcre/hash +++ b/repos/libports/recipes/src/pcre/hash @@ -1 +1 @@ -2022-05-24 f13e1c922e84419aefc9438cd0647366162e3220 +2022-08-16 5b3bff0de05690c67bcb5cfe3aaa9111316adaba diff --git a/repos/libports/recipes/src/pcre16/hash b/repos/libports/recipes/src/pcre16/hash index b0bacc5913..934f9168dc 100644 --- a/repos/libports/recipes/src/pcre16/hash +++ b/repos/libports/recipes/src/pcre16/hash @@ -1 +1 @@ -2022-05-24 0f5ac6a0ebdb46269e5e04d7e5ee944166434da2 +2022-08-16 47bfd34ba18cbf0b94f686d45e6b40eb63afe8ce diff --git a/repos/libports/recipes/src/pdf_view/hash b/repos/libports/recipes/src/pdf_view/hash index 17769d508a..51ebd53f22 100644 --- a/repos/libports/recipes/src/pdf_view/hash +++ b/repos/libports/recipes/src/pdf_view/hash @@ -1 +1 @@ -2022-05-24 88a13fcf79c53a7b1f865f44c5d0941682440ae8 +2022-08-16 fb087789229691ffceead4be5413cd31cef405b7 diff --git a/repos/libports/recipes/src/posix/hash b/repos/libports/recipes/src/posix/hash index 23dae929f8..9cffeb21cc 100644 --- a/repos/libports/recipes/src/posix/hash +++ b/repos/libports/recipes/src/posix/hash @@ -1 +1 @@ -2022-05-24 204d6518a60004cc5b2ef065e434d281520dd513 +2022-08-16 ca21abd11c066b560ba9b0f9df3ec007281fc5f6 diff --git a/repos/libports/recipes/src/qt5_base/hash b/repos/libports/recipes/src/qt5_base/hash index c2337bdff8..0bd38f4112 100644 --- a/repos/libports/recipes/src/qt5_base/hash +++ b/repos/libports/recipes/src/qt5_base/hash @@ -1 +1 @@ -2022-05-24 a3e77f5a876ec6b1593425f123e0a57c0b0ed5e1 +2022-08-16 36cb764828e6b4b5c6877d8659edec65b8b04616 diff --git a/repos/libports/recipes/src/qt5_calculatorform/hash b/repos/libports/recipes/src/qt5_calculatorform/hash index 6ab325d688..16bcce49dd 100644 --- a/repos/libports/recipes/src/qt5_calculatorform/hash +++ b/repos/libports/recipes/src/qt5_calculatorform/hash @@ -1 +1 @@ -2022-05-24 91c63f8907dd6e7c5cba6d13e3aeacc64b213ef4 +2022-08-16 fe89f9c772f0a64dba1d48ce11a7132b6d4e5229 diff --git a/repos/libports/recipes/src/qt5_component/hash b/repos/libports/recipes/src/qt5_component/hash index 81f31d2e50..e09cdad4b1 100644 --- a/repos/libports/recipes/src/qt5_component/hash +++ b/repos/libports/recipes/src/qt5_component/hash @@ -1 +1 @@ -2022-05-24 1f98f976e133bd14275da8530ba8629564c66945 +2022-08-16 e31f44321199230a4bac62dafee5b8c9eaa44afa diff --git a/repos/libports/recipes/src/qt5_declarative/hash b/repos/libports/recipes/src/qt5_declarative/hash index 22af624391..c7d7b618e9 100644 --- a/repos/libports/recipes/src/qt5_declarative/hash +++ b/repos/libports/recipes/src/qt5_declarative/hash @@ -1 +1 @@ -2022-05-24 1195b1637935e2075f45203a0b1de4cde892a506 +2022-08-16 62b9016456a1d5c85e31bda82071f37b92110cc6 diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/hash b/repos/libports/recipes/src/qt5_graphicaleffects/hash index 930f6126ae..746e1240f6 100644 --- a/repos/libports/recipes/src/qt5_graphicaleffects/hash +++ b/repos/libports/recipes/src/qt5_graphicaleffects/hash @@ -1 +1 @@ -2022-06-29 a56c67cc1e7ed6ca0d4fcd5e627a6a8de64b8cdd +2022-08-16 d17f501807fb268301922567e6e11571a85761a3 diff --git a/repos/libports/recipes/src/qt5_launchpad/hash b/repos/libports/recipes/src/qt5_launchpad/hash index 0f8dc6eb42..63fb8340a8 100644 --- a/repos/libports/recipes/src/qt5_launchpad/hash +++ b/repos/libports/recipes/src/qt5_launchpad/hash @@ -1 +1 @@ -2022-05-24 f2e59b4b05968da4209f9f694721a81623576404 +2022-08-16 2c381edf042d9cf7fc65efa8f5eb785d477de074 diff --git a/repos/libports/recipes/src/qt5_openglwindow/hash b/repos/libports/recipes/src/qt5_openglwindow/hash index c2da47386e..dee000f2a1 100644 --- a/repos/libports/recipes/src/qt5_openglwindow/hash +++ b/repos/libports/recipes/src/qt5_openglwindow/hash @@ -1 +1 @@ -2022-05-24 dea473c15f64558d2a969369c55a2aae65d13359 +2022-08-16 dd950218a30abbb525db158618d3ce9bfe19eb26 diff --git a/repos/libports/recipes/src/qt5_quickcontrols/hash b/repos/libports/recipes/src/qt5_quickcontrols/hash index bc5838f990..4042263bf6 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols/hash +++ b/repos/libports/recipes/src/qt5_quickcontrols/hash @@ -1 +1 @@ -2022-05-24 a85d9997ab8147234d764feae4d2c938ad4bd33e +2022-08-16 4b9cb44bf4b599fe4fac52fba09cae11ef012c55 diff --git a/repos/libports/recipes/src/qt5_quickcontrols2/hash b/repos/libports/recipes/src/qt5_quickcontrols2/hash index 7c75027747..2bffa74568 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols2/hash +++ b/repos/libports/recipes/src/qt5_quickcontrols2/hash @@ -1 +1 @@ -2022-05-24 9986644b107b7c4db17e200ac1b675d9301faad2 +2022-08-16 95775db1433df80002a923e9d3db783f01f6507d diff --git a/repos/libports/recipes/src/qt5_samegame/hash b/repos/libports/recipes/src/qt5_samegame/hash index e0da9c7ff9..7ff687097b 100644 --- a/repos/libports/recipes/src/qt5_samegame/hash +++ b/repos/libports/recipes/src/qt5_samegame/hash @@ -1 +1 @@ -2022-05-24 a56002044cb824ef3cab27d6df88ce88e4a7b246 +2022-08-16 de300edb071c90519b48c3474d82ea7b0fabd0a4 diff --git a/repos/libports/recipes/src/qt5_svg/hash b/repos/libports/recipes/src/qt5_svg/hash index 15624eaa35..af75bbbdfd 100644 --- a/repos/libports/recipes/src/qt5_svg/hash +++ b/repos/libports/recipes/src/qt5_svg/hash @@ -1 +1 @@ -2022-05-24 e5c71d2c5bc7336b8a79021fcc376622aaf3221f +2022-08-16 01979b970052776ab53910a025ccf2b8c5e444bf diff --git a/repos/libports/recipes/src/qt5_testqstring/hash b/repos/libports/recipes/src/qt5_testqstring/hash index 6c3cab3b0e..1db57db063 100644 --- a/repos/libports/recipes/src/qt5_testqstring/hash +++ b/repos/libports/recipes/src/qt5_testqstring/hash @@ -1 +1 @@ -2022-05-24 b481f2969d7220678dadfb9e49d4d8caa3a5f11c +2022-08-16 96b66ab798133d6ed784123cb5c693b275268fb0 diff --git a/repos/libports/recipes/src/qt5_tetrix/hash b/repos/libports/recipes/src/qt5_tetrix/hash index 30c2f1a56b..5c3a7e601c 100644 --- a/repos/libports/recipes/src/qt5_tetrix/hash +++ b/repos/libports/recipes/src/qt5_tetrix/hash @@ -1 +1 @@ -2022-05-24 806991c5e482295a3cecb703477d2160debdd062 +2022-08-16 b8f4c2d2212a105ac4e2cf20130bdc8c6a214bbe diff --git a/repos/libports/recipes/src/qt5_textedit/hash b/repos/libports/recipes/src/qt5_textedit/hash index 717636819e..a3461006da 100644 --- a/repos/libports/recipes/src/qt5_textedit/hash +++ b/repos/libports/recipes/src/qt5_textedit/hash @@ -1 +1 @@ -2022-04-27 cc8cbc78c84e63b79b8d121e5f2032dc33cfe446 +2022-08-16 673191f8f65dc1c8378841f760b43ccf79de2a15 diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard/hash b/repos/libports/recipes/src/qt5_virtualkeyboard/hash index 2bfa9cc2d1..71854d156c 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard/hash +++ b/repos/libports/recipes/src/qt5_virtualkeyboard/hash @@ -1 +1 @@ -2022-05-24 147a4db76a7ab16317de549d1aae24a192ec8651 +2022-08-16 551d08e2688cb9bb842bab91af23df0bf5d328fd diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash b/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash index b1a0fc9e46..b5a0f94aee 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash +++ b/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash @@ -1 +1 @@ -2022-05-24 13688d0459b06f7d5cd02d17013262055d0395a2 +2022-08-16 c1631dcbac2322e8247598e98aa005279621115c diff --git a/repos/libports/recipes/src/sanitizer/hash b/repos/libports/recipes/src/sanitizer/hash index b88a18d310..30e7d33557 100644 --- a/repos/libports/recipes/src/sanitizer/hash +++ b/repos/libports/recipes/src/sanitizer/hash @@ -1 +1 @@ -2022-05-24 b98ba7f58b9b87dbc019927934c7c4e2fcbd1d0a +2022-08-16 12e4c3c4a4d12eb9fb88ebba3c912582d85a4b52 diff --git a/repos/libports/recipes/src/spark/hash b/repos/libports/recipes/src/spark/hash index 9618c14cfd..b9b2ac5f7b 100644 --- a/repos/libports/recipes/src/spark/hash +++ b/repos/libports/recipes/src/spark/hash @@ -1 +1 @@ -2022-05-24 e1e466e518ae19920c18462e3a66ba4bf824591c +2022-08-16 5efc177f870a99ef4cbc90c8e3d326989d7a1fcd diff --git a/repos/libports/recipes/src/stdcxx/hash b/repos/libports/recipes/src/stdcxx/hash index 17ab164ba8..e5b3e2004d 100644 --- a/repos/libports/recipes/src/stdcxx/hash +++ b/repos/libports/recipes/src/stdcxx/hash @@ -1 +1 @@ -2022-04-27 416f691511d50bf9b22a3295e205f5f1ea63a2c2 +2022-08-16 8e20af71e6d06449954086df241ce526cc41d9f2 diff --git a/repos/libports/recipes/src/stdin2out/hash b/repos/libports/recipes/src/stdin2out/hash index 2a4e2d29df..0fcfdfd861 100644 --- a/repos/libports/recipes/src/stdin2out/hash +++ b/repos/libports/recipes/src/stdin2out/hash @@ -1 +1 @@ -2022-02-27 791574e631168790f69211ed676e6e0b20fd67a6 +2022-08-16 ebd7dfb8c37ff8b304e25ada1e94630b14df278c diff --git a/repos/libports/recipes/src/system_rtc/hash b/repos/libports/recipes/src/system_rtc/hash index 9886567c25..9f70221328 100644 --- a/repos/libports/recipes/src/system_rtc/hash +++ b/repos/libports/recipes/src/system_rtc/hash @@ -1 +1 @@ -2022-05-24 f19649677d866da951e8a8cfab69e5d5a3c191e1 +2022-08-16 ad7d3a6d2dce135eaa18f89f9aa37c3412d428f1 diff --git a/repos/libports/recipes/src/test-expat/hash b/repos/libports/recipes/src/test-expat/hash index 78faee5bba..8e356bb0a0 100644 --- a/repos/libports/recipes/src/test-expat/hash +++ b/repos/libports/recipes/src/test-expat/hash @@ -1 +1 @@ -2022-02-27 9b58990b45b440b4b94d959b14688269fb6bf1ac +2022-08-16 687cfa36eaa05787829045b7828244d5182e03b2 diff --git a/repos/libports/recipes/src/test-ldso/hash b/repos/libports/recipes/src/test-ldso/hash index c96544661f..405a852157 100644 --- a/repos/libports/recipes/src/test-ldso/hash +++ b/repos/libports/recipes/src/test-ldso/hash @@ -1 +1 @@ -2022-05-24 1fecb5304a83289fa1f48a9f9f58f17b0ab07ed1 +2022-08-16 822c3c7338d907a02348f90e13e1bed4141e1ea0 diff --git a/repos/libports/recipes/src/test-libc/hash b/repos/libports/recipes/src/test-libc/hash index 6b3a7102ff..cddb798736 100644 --- a/repos/libports/recipes/src/test-libc/hash +++ b/repos/libports/recipes/src/test-libc/hash @@ -1 +1 @@ -2022-02-27 94284e930365ef6ce0f7ca0c28d4096f1799a39e +2022-08-16 4b9c2ec4c56c769604d56f9dffa0a1f3f885dd22 diff --git a/repos/libports/recipes/src/test-libc_connect/hash b/repos/libports/recipes/src/test-libc_connect/hash index fc2f55aa68..25104be118 100644 --- a/repos/libports/recipes/src/test-libc_connect/hash +++ b/repos/libports/recipes/src/test-libc_connect/hash @@ -1 +1 @@ -2022-02-27 dce057a246f5d3e6047c0b1388cedbfe1175bbd4 +2022-08-16 681bde68b18c74e623697fe9d22b9d02d8d070f3 diff --git a/repos/libports/recipes/src/test-libc_counter/hash b/repos/libports/recipes/src/test-libc_counter/hash index e45c5c87b0..d826bd2959 100644 --- a/repos/libports/recipes/src/test-libc_counter/hash +++ b/repos/libports/recipes/src/test-libc_counter/hash @@ -1 +1 @@ -2022-02-27 6ec9c14e9ce73ea9f9ce5a9fe48ed8554b33d586 +2022-08-16 57911f4da294070639606fd5d51b3a4f550da9aa diff --git a/repos/libports/recipes/src/test-libc_execve/hash b/repos/libports/recipes/src/test-libc_execve/hash index d497092e77..4dd9e9f85b 100644 --- a/repos/libports/recipes/src/test-libc_execve/hash +++ b/repos/libports/recipes/src/test-libc_execve/hash @@ -1 +1 @@ -2022-02-27 423330be738f0ab9ff41d71d886bd5f706e5a9de +2022-08-16 e0181a465ad8dfd56321f7002e898507fea07bc1 diff --git a/repos/libports/recipes/src/test-libc_fifo_pipe/hash b/repos/libports/recipes/src/test-libc_fifo_pipe/hash index 8b7221a048..468fc85ff8 100644 --- a/repos/libports/recipes/src/test-libc_fifo_pipe/hash +++ b/repos/libports/recipes/src/test-libc_fifo_pipe/hash @@ -1 +1 @@ -2022-05-24 2f576830f658f93b42aae51b0714f6de235abcae +2022-08-16 f1f1753d30ec4cb01e73d7117b7e2ca58353aa08 diff --git a/repos/libports/recipes/src/test-libc_fork/hash b/repos/libports/recipes/src/test-libc_fork/hash index ab6f67d358..65a903f544 100644 --- a/repos/libports/recipes/src/test-libc_fork/hash +++ b/repos/libports/recipes/src/test-libc_fork/hash @@ -1 +1 @@ -2022-02-27 7439bd4f2fa0092ea95551c9dc17301954ec4d28 +2022-08-16 f4a59431aaea4ce42ed8a427ccebe83b5f9c41b4 diff --git a/repos/libports/recipes/src/test-libc_getenv/hash b/repos/libports/recipes/src/test-libc_getenv/hash index bc7ab269b6..60f80d4e16 100644 --- a/repos/libports/recipes/src/test-libc_getenv/hash +++ b/repos/libports/recipes/src/test-libc_getenv/hash @@ -1 +1 @@ -2022-02-27 e4fbeae508dd5ba8711871cc920aba456b16f85e +2022-08-16 001bb8d4305398510187a112bd48213c442904f4 diff --git a/repos/libports/recipes/src/test-libc_pipe/hash b/repos/libports/recipes/src/test-libc_pipe/hash index 2a86d9cd14..da698304e0 100644 --- a/repos/libports/recipes/src/test-libc_pipe/hash +++ b/repos/libports/recipes/src/test-libc_pipe/hash @@ -1 +1 @@ -2022-02-27 67f7ef1f900f3a2845119986e2f833bd2a11990a +2022-08-16 e5ec1408a7f822244a731ba1f22d39e43d298f56 diff --git a/repos/libports/recipes/src/test-libc_vfs/hash b/repos/libports/recipes/src/test-libc_vfs/hash index 5ff878150f..97c5a5e736 100644 --- a/repos/libports/recipes/src/test-libc_vfs/hash +++ b/repos/libports/recipes/src/test-libc_vfs/hash @@ -1 +1 @@ -2022-05-24 8843fd557e655b7546fed12211d7aadb444db71a +2022-08-16 5fe8f18e2ac27a51b44984155fe514f549d196b2 diff --git a/repos/libports/recipes/src/test-libc_vfs_block/hash b/repos/libports/recipes/src/test-libc_vfs_block/hash index 42ce55fe86..4707cb4748 100644 --- a/repos/libports/recipes/src/test-libc_vfs_block/hash +++ b/repos/libports/recipes/src/test-libc_vfs_block/hash @@ -1 +1 @@ -2022-05-24 5325e7a056ae86ee5f6fa010fe8ab60205ae7614 +2022-08-16 ae2efb9055043ed42a688b53607cf30107b4b138 diff --git a/repos/libports/recipes/src/test-netty/hash b/repos/libports/recipes/src/test-netty/hash index 7ef5cc10ee..ada0b9278f 100644 --- a/repos/libports/recipes/src/test-netty/hash +++ b/repos/libports/recipes/src/test-netty/hash @@ -1 +1 @@ -2022-05-24 bcb1f8eb5c3f82f327ec79e3b077017bccd6b2e1 +2022-08-16 89962a879ef4f566069b027613cee29d697714a4 diff --git a/repos/libports/recipes/src/test-pthread/hash b/repos/libports/recipes/src/test-pthread/hash index feb5359201..d03de07441 100644 --- a/repos/libports/recipes/src/test-pthread/hash +++ b/repos/libports/recipes/src/test-pthread/hash @@ -1 +1 @@ -2022-05-24 98a9c312538f65ea05073eac8eda0dad0b95cd68 +2022-08-16 38b908a0d23ab41e09f4445136f9b52880be5d31 diff --git a/repos/libports/recipes/src/test-qpluginwidget/hash b/repos/libports/recipes/src/test-qpluginwidget/hash index ccb2208db5..b6014f779f 100644 --- a/repos/libports/recipes/src/test-qpluginwidget/hash +++ b/repos/libports/recipes/src/test-qpluginwidget/hash @@ -1 +1 @@ -2022-05-24 a1d49bbd776a1ca0d993ba032016b7fceba3c0ef +2022-08-16 370167a520904a33aaec1b263d16473ee80a62a1 diff --git a/repos/libports/recipes/src/test-qt_core/hash b/repos/libports/recipes/src/test-qt_core/hash index b62ab86db5..7035e4570b 100644 --- a/repos/libports/recipes/src/test-qt_core/hash +++ b/repos/libports/recipes/src/test-qt_core/hash @@ -1 +1 @@ -2022-05-24 4844bcab5ee8df3e2a9ab9a6bbcbb19152950621 +2022-08-16 e0b187c1a73961ae91eaecd6f3dbc448f838efac diff --git a/repos/libports/recipes/src/test-qt_core_cmake/hash b/repos/libports/recipes/src/test-qt_core_cmake/hash index bd66cdebb5..032a479468 100644 --- a/repos/libports/recipes/src/test-qt_core_cmake/hash +++ b/repos/libports/recipes/src/test-qt_core_cmake/hash @@ -1 +1 @@ -2022-06-29 8cdcdc46d00eccf1286daef650819700f21f0961 +2022-08-16 a75efcda1790c7664c2fef8a1b4f93e4acb55917 diff --git a/repos/libports/recipes/src/test-qt_quick/hash b/repos/libports/recipes/src/test-qt_quick/hash index 0fdbf56d13..a54a098e5e 100644 --- a/repos/libports/recipes/src/test-qt_quick/hash +++ b/repos/libports/recipes/src/test-qt_quick/hash @@ -1 +1 @@ -2022-05-24 7bfb359d0a97c6be8620b28bf5f019c18873d7b7 +2022-08-16 a4bf948a6f01e6a0116b67badbd9f32f856d265d diff --git a/repos/libports/recipes/src/test-spark/hash b/repos/libports/recipes/src/test-spark/hash index c1039b6943..aaaf1aa021 100644 --- a/repos/libports/recipes/src/test-spark/hash +++ b/repos/libports/recipes/src/test-spark/hash @@ -1 +1 @@ -2022-05-24 f6f19c5a38c21c9225f1cd27578f867520b8b34b +2022-08-16 c84bfb738b260ea37203ee07e2e579f847f76f2a diff --git a/repos/libports/recipes/src/test-spark_exception/hash b/repos/libports/recipes/src/test-spark_exception/hash index bf86f18ee8..027e6a8220 100644 --- a/repos/libports/recipes/src/test-spark_exception/hash +++ b/repos/libports/recipes/src/test-spark_exception/hash @@ -1 +1 @@ -2022-05-24 f7f4567be392cbdfd52feba273d339ca9c404ceb +2022-08-16 44eaad47bfbbb8e910e9d3b5c639da7b8845959a diff --git a/repos/libports/recipes/src/test-spark_secondary_stack/hash b/repos/libports/recipes/src/test-spark_secondary_stack/hash index 8fd2c066da..63b55eb17f 100644 --- a/repos/libports/recipes/src/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/src/test-spark_secondary_stack/hash @@ -1 +1 @@ -2022-05-24 54137fabc25fe744833a82a1c1fb6ee459a68707 +2022-08-16 a171d04c56313751d54964f31dbaa7893ed5dd1f diff --git a/repos/libports/recipes/src/test-stdcxx/hash b/repos/libports/recipes/src/test-stdcxx/hash index 10fbdb3d0c..30cf70aada 100644 --- a/repos/libports/recipes/src/test-stdcxx/hash +++ b/repos/libports/recipes/src/test-stdcxx/hash @@ -1 +1 @@ -2022-05-24 e4c349482fdfb081b4359d5f90b0c75c04832bdf +2022-08-16 a5a898e72f5769bc94fb2ee20f85b53ad38f9689 diff --git a/repos/libports/recipes/src/test-tcp/hash b/repos/libports/recipes/src/test-tcp/hash index fe26152b15..daaaf87d87 100644 --- a/repos/libports/recipes/src/test-tcp/hash +++ b/repos/libports/recipes/src/test-tcp/hash @@ -1 +1 @@ -2022-05-24 8de1893617e35e2b9fe0f9b57924717b37cab979 +2022-08-16 f2ed39f95161a305133fbee9bb307cd15738209c diff --git a/repos/libports/recipes/src/usb_webcam/hash b/repos/libports/recipes/src/usb_webcam/hash index a63c382942..1beaacde2d 100644 --- a/repos/libports/recipes/src/usb_webcam/hash +++ b/repos/libports/recipes/src/usb_webcam/hash @@ -1 +1 @@ -2022-05-24 b9fb7ef76601809f0740e130bbfcbda167841891 +2022-08-16 2f324b01a4e8560b68d06d061e17306e994da369 diff --git a/repos/libports/recipes/src/vesa_drv/hash b/repos/libports/recipes/src/vesa_drv/hash index 4ae52a0a33..84990a1ccf 100644 --- a/repos/libports/recipes/src/vesa_drv/hash +++ b/repos/libports/recipes/src/vesa_drv/hash @@ -1 +1 @@ -2022-05-24 4759829aaf07e57bef7152c9aeb7b91ab2e154c5 +2022-08-16 7ef74141f0ccac532f7ff7780b88abd4c7214e5d diff --git a/repos/libports/recipes/src/vfs_fatfs/hash b/repos/libports/recipes/src/vfs_fatfs/hash index 281f25213e..4b7c9e5a9b 100644 --- a/repos/libports/recipes/src/vfs_fatfs/hash +++ b/repos/libports/recipes/src/vfs_fatfs/hash @@ -1 +1 @@ -2022-05-24 5c0aec951b3bd792d3676958980c708ae5e99b2e +2022-08-16 5e19bfd7bf3d1d678ad255f14674432b5b9cb0ac diff --git a/repos/libports/recipes/src/vfs_jitterentropy/hash b/repos/libports/recipes/src/vfs_jitterentropy/hash index cb9184ce00..7e95cecb6a 100644 --- a/repos/libports/recipes/src/vfs_jitterentropy/hash +++ b/repos/libports/recipes/src/vfs_jitterentropy/hash @@ -1 +1 @@ -2022-05-24 047f1de625b1585ca24e316268cbf9bf117e7ef3 +2022-08-16 d9c28217c016c4f479e65238a221e9bd2104a845 diff --git a/repos/libports/recipes/src/vfs_libusb/hash b/repos/libports/recipes/src/vfs_libusb/hash index 21ab440d71..c9cbcde4f7 100644 --- a/repos/libports/recipes/src/vfs_libusb/hash +++ b/repos/libports/recipes/src/vfs_libusb/hash @@ -1 +1 @@ -2022-05-24 2d8d519fef0fcd9ff70507d269593e1559159051 +2022-08-16 f96db9cd008c25088dee865a19d3245ea7248112 diff --git a/repos/libports/recipes/src/vfs_lwip/hash b/repos/libports/recipes/src/vfs_lwip/hash index 5807d82656..2df4afdf1b 100644 --- a/repos/libports/recipes/src/vfs_lwip/hash +++ b/repos/libports/recipes/src/vfs_lwip/hash @@ -1 +1 @@ -2022-05-24 8ad999ef6d6979532e1f8e083b80723b69712d4d +2022-08-16 87d708914c72383e225b7aba673be56a87c0ced2 diff --git a/repos/libports/recipes/src/vfs_oss/hash b/repos/libports/recipes/src/vfs_oss/hash index bccf686e6f..f0b960afc4 100644 --- a/repos/libports/recipes/src/vfs_oss/hash +++ b/repos/libports/recipes/src/vfs_oss/hash @@ -1 +1 @@ -2022-05-24 f71fd0bf7bd69675d5ae8f1f19e2ba9bbf223631 +2022-08-16 c24f940edf785ad79bc87d9c61a1b724d8813bca diff --git a/repos/libports/recipes/src/zlib/hash b/repos/libports/recipes/src/zlib/hash index fa8607ed61..5525070491 100644 --- a/repos/libports/recipes/src/zlib/hash +++ b/repos/libports/recipes/src/zlib/hash @@ -1 +1 @@ -2022-02-27 dd039e77c8e498cc9e5e2d92c8a6658b37d60c96 +2022-08-16 b6ececfccbf793acd040509871c1166eabb363dc diff --git a/repos/os/recipes/api/audio_in_session/hash b/repos/os/recipes/api/audio_in_session/hash index 4f5c566935..02684fcfcb 100644 --- a/repos/os/recipes/api/audio_in_session/hash +++ b/repos/os/recipes/api/audio_in_session/hash @@ -1 +1 @@ -2022-01-18 248c7dfdbd29bf3c4b117cd0d70973a00757718d +2022-08-16 2ef529898c2fcf111c474f468de106a48bc4ba1e diff --git a/repos/os/recipes/api/block_session/hash b/repos/os/recipes/api/block_session/hash index 2eee581ef0..99a88989b1 100644 --- a/repos/os/recipes/api/block_session/hash +++ b/repos/os/recipes/api/block_session/hash @@ -1 +1 @@ -2022-04-27 e6220d7163d0212598b00d45f0755d56aa43575e +2022-08-16 79d59088effa972bdd9b0220a154f48c16f1f780 diff --git a/repos/os/recipes/api/genode_c_api/hash b/repos/os/recipes/api/genode_c_api/hash index ad71a7f22e..3d285f3826 100644 --- a/repos/os/recipes/api/genode_c_api/hash +++ b/repos/os/recipes/api/genode_c_api/hash @@ -1 +1 @@ -2022-04-27 0a8bcdae6027d192c36195042c1e8a5c2a48d5a9 +2022-08-16 32c12bc18e39ca5d7f02f9b254016fc1b2d68b43 diff --git a/repos/os/recipes/api/gpu_session/hash b/repos/os/recipes/api/gpu_session/hash index 07ffa6a00d..a828008be2 100644 --- a/repos/os/recipes/api/gpu_session/hash +++ b/repos/os/recipes/api/gpu_session/hash @@ -1 +1 @@ -2022-02-14 e95cd305d2fde59948e1e1fb8ed4251f3d83653c +2022-08-16 7b3ada81f3f160f6ae0032f6d4e40a10793cbae9 diff --git a/repos/os/recipes/api/net/hash b/repos/os/recipes/api/net/hash index 09610c99b5..d0a62a0b00 100644 --- a/repos/os/recipes/api/net/hash +++ b/repos/os/recipes/api/net/hash @@ -1 +1 @@ -2022-05-24 b04cf4a45f75349c92b73773cff265f637f801fc +2022-08-16 ef8ef67e6d5ca0db31abfa3d2a815842e1f16dfb diff --git a/repos/os/recipes/api/nic_session/hash b/repos/os/recipes/api/nic_session/hash index 91b3d53ee3..c507430f35 100644 --- a/repos/os/recipes/api/nic_session/hash +++ b/repos/os/recipes/api/nic_session/hash @@ -1 +1 @@ -2022-05-24 eebf0a6e36d56ecbbf4fb603bb969ea8a45e4c26 +2022-08-16 8465728d333f42b86f59ec2749007bf7245da35e diff --git a/repos/os/recipes/api/os/hash b/repos/os/recipes/api/os/hash index 98abcbaf87..c0487e35d0 100644 --- a/repos/os/recipes/api/os/hash +++ b/repos/os/recipes/api/os/hash @@ -1 +1 @@ -2022-04-12 17ca6587c67923f25e0f7e004af991c213302828 +2022-08-16 8aa82e1c69f429262c750bcb49f0546c4a1eee72 diff --git a/repos/os/recipes/api/platform_session/hash b/repos/os/recipes/api/platform_session/hash index 0b4d8866de..ca5b798959 100644 --- a/repos/os/recipes/api/platform_session/hash +++ b/repos/os/recipes/api/platform_session/hash @@ -1 +1 @@ -2022-05-24 23561753de5a37868ae04d46d4f643f5deeddb06 +2022-08-16 0e1b693e2463484a8dbb22a069bc9438a0adc64d diff --git a/repos/os/recipes/api/trace/hash b/repos/os/recipes/api/trace/hash index 4cb1c3bc53..0fd134e65c 100644 --- a/repos/os/recipes/api/trace/hash +++ b/repos/os/recipes/api/trace/hash @@ -1 +1 @@ -2022-05-24 2e443e4291b530a90c91f2943b5bde7f1fa567fc +2022-08-16 88eda27c18c227cd2216501caaef1a45a6392f07 diff --git a/repos/os/recipes/api/uplink_session/hash b/repos/os/recipes/api/uplink_session/hash index a4e902f217..28f857d83c 100644 --- a/repos/os/recipes/api/uplink_session/hash +++ b/repos/os/recipes/api/uplink_session/hash @@ -1 +1 @@ -2022-05-24 996ab9d103b7cafd48f0813bb474da789cefc895 +2022-08-16 7841d4e142bd63daeaafd7d2b7456acd6b0c120c diff --git a/repos/os/recipes/pkg/black_hole/hash b/repos/os/recipes/pkg/black_hole/hash index 86376bfb3f..390e2a99d5 100644 --- a/repos/os/recipes/pkg/black_hole/hash +++ b/repos/os/recipes/pkg/black_hole/hash @@ -1 +1 @@ -2022-05-24 9aca5262f6a13bd8bbf4f27f1e014abfc829035f +2022-08-16 38f8db524213d5913b198af5471536019af2ed4b diff --git a/repos/os/recipes/pkg/chroot/hash b/repos/os/recipes/pkg/chroot/hash index b1ee84dfa2..d957452135 100644 --- a/repos/os/recipes/pkg/chroot/hash +++ b/repos/os/recipes/pkg/chroot/hash @@ -1 +1 @@ -2022-05-24 747ad1f302337ba23c934d737fdc5a28685f90af +2022-08-16 42ee18cf5e542e9ff22ef7f6e8d2f648e0a5c3c5 diff --git a/repos/os/recipes/pkg/clipboard/hash b/repos/os/recipes/pkg/clipboard/hash index a9b42c6995..91db1ee551 100644 --- a/repos/os/recipes/pkg/clipboard/hash +++ b/repos/os/recipes/pkg/clipboard/hash @@ -1 +1 @@ -2022-05-24 7007b602b9f4761b57e5e9223b1f57f865914474 +2022-08-16 e36a42d0b3f34a973822ebb48e997e2270ebefb9 diff --git a/repos/os/recipes/pkg/cpu_balancer/hash b/repos/os/recipes/pkg/cpu_balancer/hash index cfbde002e0..3b1531994e 100644 --- a/repos/os/recipes/pkg/cpu_balancer/hash +++ b/repos/os/recipes/pkg/cpu_balancer/hash @@ -1 +1 @@ -2022-05-24 5aad956d8b98c81addea84313c88ac2299dd8d02 +2022-08-16 c032448812633cea24224a47273e21270991b036 diff --git a/repos/os/recipes/pkg/cpu_balancer_config/hash b/repos/os/recipes/pkg/cpu_balancer_config/hash index 3eff3cdef5..aeaf41c0c6 100644 --- a/repos/os/recipes/pkg/cpu_balancer_config/hash +++ b/repos/os/recipes/pkg/cpu_balancer_config/hash @@ -1 +1 @@ -2022-05-24 140b0e88708dcd9acb0521024e1e7f0b0aa810d0 +2022-08-16 55f3b7fcf490020ca6feaf6bcb790fa9bcafbb0b diff --git a/repos/os/recipes/pkg/drivers_interactive-linux/hash b/repos/os/recipes/pkg/drivers_interactive-linux/hash index b9f0b8b6ad..23ebb9a56d 100644 --- a/repos/os/recipes/pkg/drivers_interactive-linux/hash +++ b/repos/os/recipes/pkg/drivers_interactive-linux/hash @@ -1 +1 @@ -2022-05-24 35671e6b5193e75ed65695aaa82baccae3b89149 +2022-08-16 9ca80b3afe893d7d10e4ad6f0233d1bb2e4d04ee diff --git a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash index da16eb4284..6d3e3a66cf 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash @@ -1 +1 @@ -2022-05-24 466f7e78b04661510969b8b1bd2977e528a2cc51 +2022-08-16 0fed85c08a1407356244ca3c9e36ffae3ea3aeac diff --git a/repos/os/recipes/pkg/drivers_interactive-pc/hash b/repos/os/recipes/pkg/drivers_interactive-pc/hash index 36d5abf0d6..4b9fe8b4aa 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pc/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pc/hash @@ -1 +1 @@ -2022-05-30 a0cc3bb28e490b98435e434b40b8b7d177b65c09 +2022-08-16 b6051c2d0341ad6e7653ba31bc5ff479af19d37f diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash index cc5bb87ede..00ea681e11 100644 --- a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-05-24 882323bc8a17974e55dcf61ddb6c39028d4481ef +2022-08-16 483e28de10c970aa7e7e0d20f573cf7436b5a8e7 diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash index 52ad32bde8..00ea681e11 100644 --- a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-10 1f5b06e3adabbb73ba2b6e24edf621b15cfafa9a +2022-08-16 483e28de10c970aa7e7e0d20f573cf7436b5a8e7 diff --git a/repos/os/recipes/pkg/drivers_nic-linux/hash b/repos/os/recipes/pkg/drivers_nic-linux/hash index a00b3cadef..08a5f8f33b 100644 --- a/repos/os/recipes/pkg/drivers_nic-linux/hash +++ b/repos/os/recipes/pkg/drivers_nic-linux/hash @@ -1 +1 @@ -2022-05-24 8761c075cfc4e7e6e2444426ba359351efdd6f75 +2022-08-16 e25f51bc1242a2543017df1838409722bd9d251f diff --git a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash index a1185e5154..943c455461 100644 --- a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash @@ -1 +1 @@ -2022-05-24 13b0147828f8273244d69b1d23ad4f9601f17d18 +2022-08-16 5be8771ae5342bb6b9d39f73d0943e16558a5d42 diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash index 9a9d475c55..93435774b0 100644 --- a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-05-24 4ed87f751b0a53cba22cb8132bb18ac8d935228b +2022-08-16 52013100789cd9cf5c2744959bb97e6c75b60e29 diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash index c51748fa16..93435774b0 100644 --- a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-10 8cc0b5d0e02903c31134630d4244ec9135cb5560 +2022-08-16 52013100789cd9cf5c2744959bb97e6c75b60e29 diff --git a/repos/os/recipes/pkg/fs_report/hash b/repos/os/recipes/pkg/fs_report/hash index e4b33fa267..6aafb558df 100644 --- a/repos/os/recipes/pkg/fs_report/hash +++ b/repos/os/recipes/pkg/fs_report/hash @@ -1 +1 @@ -2022-05-24 2a1ec14f9c409dc0a26f8397cb0314f4268b0191 +2022-08-16 cc007db4cde48d0a7d965bc012cb479591da849d diff --git a/repos/os/recipes/pkg/fs_rom/hash b/repos/os/recipes/pkg/fs_rom/hash index 0c7f0c30fe..d18b24d816 100644 --- a/repos/os/recipes/pkg/fs_rom/hash +++ b/repos/os/recipes/pkg/fs_rom/hash @@ -1 +1 @@ -2022-05-24 abaf3d0ab7b0620d23c9aa20de619f3059032302 +2022-08-16 47abd7c670b38f10668ecf7958bf3e0bf6ccc4e6 diff --git a/repos/os/recipes/pkg/mixer/hash b/repos/os/recipes/pkg/mixer/hash index adda007301..8c2a376781 100644 --- a/repos/os/recipes/pkg/mixer/hash +++ b/repos/os/recipes/pkg/mixer/hash @@ -1 +1 @@ -2022-05-24 1d3e4f5921f6aa3202d0f24d8e5bbe5f00aec39d +2022-08-16 11745438ba740f8e8566cefdb648772ef67a94b5 diff --git a/repos/os/recipes/pkg/nic_router-nat/hash b/repos/os/recipes/pkg/nic_router-nat/hash index e1f261d042..7f2418846c 100644 --- a/repos/os/recipes/pkg/nic_router-nat/hash +++ b/repos/os/recipes/pkg/nic_router-nat/hash @@ -1 +1 @@ -2022-05-24 b82ff7c385589028426c560dcd215e88f6a1dc32 +2022-08-16 1f9de42b8ef6973d2fae80b0351e567a741a02b4 diff --git a/repos/os/recipes/pkg/nit_focus/hash b/repos/os/recipes/pkg/nit_focus/hash index c814daf565..dc2d8fd9c9 100644 --- a/repos/os/recipes/pkg/nit_focus/hash +++ b/repos/os/recipes/pkg/nit_focus/hash @@ -1 +1 @@ -2022-05-24 b38e298c4ed31ae2d768fa2ca443b5cf7de6ccfd +2022-08-16 cc26b4b1c6142a10782554bad8b1ffef7f55a61d diff --git a/repos/os/recipes/pkg/recall_fs/hash b/repos/os/recipes/pkg/recall_fs/hash index 385fb1546f..34a3d86bdc 100644 --- a/repos/os/recipes/pkg/recall_fs/hash +++ b/repos/os/recipes/pkg/recall_fs/hash @@ -1 +1 @@ -2022-05-24 8082e0ae34aca5eb35270dbd5a81876e6175b2ab +2022-08-16 4fa273ac94efa380069223ba91b2200e2f70634d diff --git a/repos/os/recipes/pkg/report_rom/hash b/repos/os/recipes/pkg/report_rom/hash index c092845683..a5ffa973d9 100644 --- a/repos/os/recipes/pkg/report_rom/hash +++ b/repos/os/recipes/pkg/report_rom/hash @@ -1 +1 @@ -2022-05-24 3c3466652c1f17c20d971de7baa1d390e53a6dd5 +2022-08-16 58a1bb758ff5f161c2d7d695ddba380747d2153f diff --git a/repos/os/recipes/pkg/rom_filter/hash b/repos/os/recipes/pkg/rom_filter/hash index 41e6875a20..35f3b9da09 100644 --- a/repos/os/recipes/pkg/rom_filter/hash +++ b/repos/os/recipes/pkg/rom_filter/hash @@ -1 +1 @@ -2022-05-24 ea344a29334a0ddaaabe1d09fcba08aec0356e07 +2022-08-16 b4f4f52a5127adadb8c40a21db3a0d2a8bdfdb42 diff --git a/repos/os/recipes/pkg/rom_reporter/hash b/repos/os/recipes/pkg/rom_reporter/hash index 0992b38504..7b3aaa52bd 100644 --- a/repos/os/recipes/pkg/rom_reporter/hash +++ b/repos/os/recipes/pkg/rom_reporter/hash @@ -1 +1 @@ -2022-05-24 6427bbe49b53e5ee09af7780938a8202b6e10c49 +2022-08-16 92483b6a9db6adbd3c8eb3306cd8c228c3a65174 diff --git a/repos/os/recipes/pkg/test-black_hole/hash b/repos/os/recipes/pkg/test-black_hole/hash index eeb55a4c1e..5953114ede 100644 --- a/repos/os/recipes/pkg/test-black_hole/hash +++ b/repos/os/recipes/pkg/test-black_hole/hash @@ -1 +1 @@ -2022-05-24 1e7dbf3094ab393d7e5ad2234eea13662e7967b9 +2022-08-16 ee6181cba45546445e2ddd745fab40420ae8d096 diff --git a/repos/os/recipes/pkg/test-capture/hash b/repos/os/recipes/pkg/test-capture/hash index e54ee5ce5c..a097995d5d 100644 --- a/repos/os/recipes/pkg/test-capture/hash +++ b/repos/os/recipes/pkg/test-capture/hash @@ -1 +1 @@ -2022-05-24 c882f21370f2d4786f49a7a8ed54b69add592051 +2022-08-16 094705ba583706cad658a6650bfb00b0bb899e2f diff --git a/repos/os/recipes/pkg/test-clipboard/hash b/repos/os/recipes/pkg/test-clipboard/hash index e976379ebc..c9e7cae716 100644 --- a/repos/os/recipes/pkg/test-clipboard/hash +++ b/repos/os/recipes/pkg/test-clipboard/hash @@ -1 +1 @@ -2022-05-24 5ed950f62ac45790f1a203274c53973d969fbc3a +2022-08-16 26df5c05d2cc2d547e5e5fc79202ebc547eae47a diff --git a/repos/os/recipes/pkg/test-dynamic_config/hash b/repos/os/recipes/pkg/test-dynamic_config/hash index ec4000e3dd..a34263b80b 100644 --- a/repos/os/recipes/pkg/test-dynamic_config/hash +++ b/repos/os/recipes/pkg/test-dynamic_config/hash @@ -1 +1 @@ -2022-05-24 41e91cc9e70f61afdc3751bb2fbc255562376f4a +2022-08-16 912e0d3e6126d92341640d0f6fbd46e6d599a29b diff --git a/repos/os/recipes/pkg/test-dynamic_config_loader/hash b/repos/os/recipes/pkg/test-dynamic_config_loader/hash index 72f4e84bc6..115f51d7c8 100644 --- a/repos/os/recipes/pkg/test-dynamic_config_loader/hash +++ b/repos/os/recipes/pkg/test-dynamic_config_loader/hash @@ -1 +1 @@ -2022-05-24 bf27e7dea892769078cb1e1f4aadb38b613a641d +2022-08-16 bccd2112b07493369d81fdcd92a798442be87502 diff --git a/repos/os/recipes/pkg/test-fault_detection/hash b/repos/os/recipes/pkg/test-fault_detection/hash index 40dfc6af23..410e0596a0 100644 --- a/repos/os/recipes/pkg/test-fault_detection/hash +++ b/repos/os/recipes/pkg/test-fault_detection/hash @@ -1 +1 @@ -2022-05-24 e866a5508179797dc70e6ddfb690a37814514f88 +2022-08-16 50ae8bcb5ca46451d346f22257d816b301bee6b7 diff --git a/repos/os/recipes/pkg/test-fs_packet/hash b/repos/os/recipes/pkg/test-fs_packet/hash index bb1926212a..59958306b2 100644 --- a/repos/os/recipes/pkg/test-fs_packet/hash +++ b/repos/os/recipes/pkg/test-fs_packet/hash @@ -1 +1 @@ -2022-05-24 2fa8b8039815d81b80d72e0d04afc91b9a56d41f +2022-08-16 f84535f7aa7588a193f4d5af8aa3a16291dc72a0 diff --git a/repos/os/recipes/pkg/test-fs_report/hash b/repos/os/recipes/pkg/test-fs_report/hash index f82be0cc5b..56d2401c36 100644 --- a/repos/os/recipes/pkg/test-fs_report/hash +++ b/repos/os/recipes/pkg/test-fs_report/hash @@ -1 +1 @@ -2022-05-24 b6d52193cb7d1566d97edcd752c0e5884cc903c8 +2022-08-16 e3b7e1a226abaa8b3164c61dd58e3546251024eb diff --git a/repos/os/recipes/pkg/test-fs_rom_update/hash b/repos/os/recipes/pkg/test-fs_rom_update/hash index b880893a93..f1cdb0cd01 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update/hash @@ -1 +1 @@ -2022-05-24 f21b7216d3d58b969bd518fb44b00b9fc7f6ee42 +2022-08-16 21c2d8dcc3506efcf3ae125c1c3b21c05d23f7f4 diff --git a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash index 58ccfb98c1..05c35869ce 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash @@ -1 +1 @@ -2022-05-24 76a1d4a9c74fbabd3989644c1c0e6449c6a6cd8a +2022-08-16 62d7a345c2c73091c824faa9fe5d906b95835cd7 diff --git a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash index 42ecbf0e16..01b22c28b5 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash @@ -1 +1 @@ -2022-05-24 86f6d13794611f414dd2d187db0e50978e419e38 +2022-08-16 3bcb08f5d369af9930adc79549f6cbd78bc4f71f diff --git a/repos/os/recipes/pkg/test-init/hash b/repos/os/recipes/pkg/test-init/hash index 8b3798f593..2c1ee5e7d0 100644 --- a/repos/os/recipes/pkg/test-init/hash +++ b/repos/os/recipes/pkg/test-init/hash @@ -1 +1 @@ -2022-05-24 aca9ff105cbe1363c9b36a0d6051c8acf95fdbe0 +2022-08-16 c57498499f40ccd6ee91884e988c0a6e02e5c842 diff --git a/repos/os/recipes/pkg/test-init_loop/hash b/repos/os/recipes/pkg/test-init_loop/hash index c3778a5dcd..c07ae4daf1 100644 --- a/repos/os/recipes/pkg/test-init_loop/hash +++ b/repos/os/recipes/pkg/test-init_loop/hash @@ -1 +1 @@ -2022-05-24 b08b8290df42648e81a50900e47f36e358c8688a +2022-08-16 b33d0109211599a3ef37db72ecd7371179fe1c6e diff --git a/repos/os/recipes/pkg/test-lx_block/hash b/repos/os/recipes/pkg/test-lx_block/hash index 825d25c324..dc4a8c05c3 100644 --- a/repos/os/recipes/pkg/test-lx_block/hash +++ b/repos/os/recipes/pkg/test-lx_block/hash @@ -1 +1 @@ -2022-05-24 0976a9790be7a938540eadb3ef6ce73a37f796b2 +2022-08-16 0179cf1513851cdeca3a19e15b95a67f3998f9dd diff --git a/repos/os/recipes/pkg/test-nic_loopback/hash b/repos/os/recipes/pkg/test-nic_loopback/hash index 2bf71a0059..b5a3c64441 100644 --- a/repos/os/recipes/pkg/test-nic_loopback/hash +++ b/repos/os/recipes/pkg/test-nic_loopback/hash @@ -1 +1 @@ -2022-05-24 c95057700a0425018a4283233b36bd463eda1491 +2022-08-16 01f3ab22138d928a1025efcf243c18f78c0c8829 diff --git a/repos/os/recipes/pkg/test-nic_perf/hash b/repos/os/recipes/pkg/test-nic_perf/hash index 3665408e53..4b1e04dace 100644 --- a/repos/os/recipes/pkg/test-nic_perf/hash +++ b/repos/os/recipes/pkg/test-nic_perf/hash @@ -1 +1 @@ -2022-07-20 1f60286a89084f20f78030e5ab885488c45375ae +2022-08-16 e2b834015566119f26c5b0f25fff896717b3142b diff --git a/repos/os/recipes/pkg/test-nic_perf_router/hash b/repos/os/recipes/pkg/test-nic_perf_router/hash index a2c6d55597..9afb58a9ac 100644 --- a/repos/os/recipes/pkg/test-nic_perf_router/hash +++ b/repos/os/recipes/pkg/test-nic_perf_router/hash @@ -1 +1 @@ -2022-07-20 b7af3d9a0e3ac2e39169c3159c94bbf0dd104cd8 +2022-08-16 3f4a3f6a77b4dd9c65b18920655c72daf3c75b6d diff --git a/repos/os/recipes/pkg/test-part_block_gpt/hash b/repos/os/recipes/pkg/test-part_block_gpt/hash index 6bf06058d6..bcdc410ad3 100644 --- a/repos/os/recipes/pkg/test-part_block_gpt/hash +++ b/repos/os/recipes/pkg/test-part_block_gpt/hash @@ -1 +1 @@ -2022-05-24 b6ddaf84ca51a9d6a2c18656fddf41577b2a4690 +2022-08-16 d05ea04df062f7327a1dca43bb651dcbee384123 diff --git a/repos/os/recipes/pkg/test-part_block_mbr/hash b/repos/os/recipes/pkg/test-part_block_mbr/hash index 203d50af21..3b89a9d247 100644 --- a/repos/os/recipes/pkg/test-part_block_mbr/hash +++ b/repos/os/recipes/pkg/test-part_block_mbr/hash @@ -1 +1 @@ -2022-05-24 014b04b592796d1776438a163a2ca75710b0c8ea +2022-08-16 d9810ff1c7da7da0ee36a97080b4dba4d5077de5 diff --git a/repos/os/recipes/pkg/test-ram_fs_chunk/hash b/repos/os/recipes/pkg/test-ram_fs_chunk/hash index 120c75d633..a6b3efa091 100644 --- a/repos/os/recipes/pkg/test-ram_fs_chunk/hash +++ b/repos/os/recipes/pkg/test-ram_fs_chunk/hash @@ -1 +1 @@ -2022-05-24 79a6c694ecd7ef6ab961d95af24fa0a3019b9027 +2022-08-16 3e33ed1d5f455401cfc872bd70beefeea2627b24 diff --git a/repos/os/recipes/pkg/test-read_only_rom/hash b/repos/os/recipes/pkg/test-read_only_rom/hash index aadd399b43..e68cfe016b 100644 --- a/repos/os/recipes/pkg/test-read_only_rom/hash +++ b/repos/os/recipes/pkg/test-read_only_rom/hash @@ -1 +1 @@ -2022-05-24 a20b60fb9ffe97bcad942cbfa5413c717900de16 +2022-08-16 ca383d2850905853615017ed3f58342c54c6ba47 diff --git a/repos/os/recipes/pkg/test-report_rom/hash b/repos/os/recipes/pkg/test-report_rom/hash index c56797cf24..b043684f90 100644 --- a/repos/os/recipes/pkg/test-report_rom/hash +++ b/repos/os/recipes/pkg/test-report_rom/hash @@ -1 +1 @@ -2022-05-24 9791af897f0354b0fd2639d810d59417b68743c4 +2022-08-16 cc0cae8303699689c76a0faae74e47fd736391ee diff --git a/repos/os/recipes/pkg/test-resource_request/hash b/repos/os/recipes/pkg/test-resource_request/hash index 695fe5c8ae..9e8ac194a5 100644 --- a/repos/os/recipes/pkg/test-resource_request/hash +++ b/repos/os/recipes/pkg/test-resource_request/hash @@ -1 +1 @@ -2022-05-24 28246c207857b21089bb34624b62e24473f5b4c1 +2022-08-16 c3094343f939f61f16239e714901c8896ffc8317 diff --git a/repos/os/recipes/pkg/test-resource_yield/hash b/repos/os/recipes/pkg/test-resource_yield/hash index 27f00a4256..c7bc2cc688 100644 --- a/repos/os/recipes/pkg/test-resource_yield/hash +++ b/repos/os/recipes/pkg/test-resource_yield/hash @@ -1 +1 @@ -2022-05-24 ab05a2e15d6d2973fcca3eec237c2f341c9270fd +2022-08-16 acb0176483318f0b003a5cda8613b99e853447b7 diff --git a/repos/os/recipes/pkg/test-rom_filter/hash b/repos/os/recipes/pkg/test-rom_filter/hash index 4954d031b7..c51a11b8bb 100644 --- a/repos/os/recipes/pkg/test-rom_filter/hash +++ b/repos/os/recipes/pkg/test-rom_filter/hash @@ -1 +1 @@ -2022-05-24 f9e76fb42835686d491afbaf984d573499c7eef1 +2022-08-16 fb7fa07584b524b368d55708fd67f4154fadd0cf diff --git a/repos/os/recipes/pkg/test-rtc/hash b/repos/os/recipes/pkg/test-rtc/hash index 8e5d8a4e9d..856e87f67a 100644 --- a/repos/os/recipes/pkg/test-rtc/hash +++ b/repos/os/recipes/pkg/test-rtc/hash @@ -1 +1 @@ -2022-05-24 0a0872f33f618edd68d9ce17daa9a077afc94432 +2022-08-16 370652ea25a2bfe95c4e25a40c5464eb8f574110 diff --git a/repos/os/recipes/pkg/test-sandbox/hash b/repos/os/recipes/pkg/test-sandbox/hash index 5bb7dfcad0..5d3653ee23 100644 --- a/repos/os/recipes/pkg/test-sandbox/hash +++ b/repos/os/recipes/pkg/test-sandbox/hash @@ -1 +1 @@ -2022-05-24 b5009e03d29225d899ccee373c7f79ce84f4d8ad +2022-08-16 171d0f7d82ad7e9ebd7e84ed8aa2d653cec1ab1a diff --git a/repos/os/recipes/pkg/test-signal/hash b/repos/os/recipes/pkg/test-signal/hash index 4c5b838ec0..98b8ab32c6 100644 --- a/repos/os/recipes/pkg/test-signal/hash +++ b/repos/os/recipes/pkg/test-signal/hash @@ -1 +1 @@ -2022-05-24 aeecc85485f246a36929fd3f92a79d18cab9f085 +2022-08-16 d1c3ced5355b6924ad0ee376cbfb6f1c90b9fdc0 diff --git a/repos/os/recipes/pkg/test-slab/hash b/repos/os/recipes/pkg/test-slab/hash index 21e323cda9..68c6b498d6 100644 --- a/repos/os/recipes/pkg/test-slab/hash +++ b/repos/os/recipes/pkg/test-slab/hash @@ -1 +1 @@ -2022-05-24 a9f05d4cf34d42d31f71fad5e665a2b4f05dddb9 +2022-08-16 5f323fb4d0b2b0a9182f0663da6601fef0d5ebb3 diff --git a/repos/os/recipes/pkg/test-terminal_crosslink/hash b/repos/os/recipes/pkg/test-terminal_crosslink/hash index db2fb13388..fbe544d32a 100644 --- a/repos/os/recipes/pkg/test-terminal_crosslink/hash +++ b/repos/os/recipes/pkg/test-terminal_crosslink/hash @@ -1 +1 @@ -2022-05-24 68521fb82896fdce581ad7d849c1771ab52c1804 +2022-08-16 39a844eece879b4170345a2e4f055e23e4d669cc diff --git a/repos/os/recipes/pkg/test-trace/hash b/repos/os/recipes/pkg/test-trace/hash index ffa8e24cb1..21837454ac 100644 --- a/repos/os/recipes/pkg/test-trace/hash +++ b/repos/os/recipes/pkg/test-trace/hash @@ -1 +1 @@ -2022-05-24 78b0460c5a8cc630fbe39826fe14fbec3b521381 +2022-08-16 2df6242d4f209a607b2e5f45482cfc289a12b5e1 diff --git a/repos/os/recipes/pkg/test-trace_buffer/hash b/repos/os/recipes/pkg/test-trace_buffer/hash index 1d7ab97059..93ce95bfbf 100644 --- a/repos/os/recipes/pkg/test-trace_buffer/hash +++ b/repos/os/recipes/pkg/test-trace_buffer/hash @@ -1 +1 @@ -2022-05-24 e8d817157d8e555628c607dd0a77e7437631fb48 +2022-08-16 d6b6490744aeb0aa015201694f4c4ac7493ec24c diff --git a/repos/os/recipes/pkg/test-trace_logger/hash b/repos/os/recipes/pkg/test-trace_logger/hash index 20f13751d7..aceb42073a 100644 --- a/repos/os/recipes/pkg/test-trace_logger/hash +++ b/repos/os/recipes/pkg/test-trace_logger/hash @@ -1 +1 @@ -2022-05-24 6d2dfdc13344308a1ad57c47a8a2b94a980995e5 +2022-08-16 caba5da6021a30bd68a5d78f300a14ded3b78542 diff --git a/repos/os/recipes/pkg/test-utf8/hash b/repos/os/recipes/pkg/test-utf8/hash index 5f8aa9f5b6..d0fab0eeeb 100644 --- a/repos/os/recipes/pkg/test-utf8/hash +++ b/repos/os/recipes/pkg/test-utf8/hash @@ -1 +1 @@ -2022-05-24 10db2219509eeaa60481714f12611a3f1985ca25 +2022-08-16 1795d4a4f304aefaa1da0c9f7c3cf9de8607fe75 diff --git a/repos/os/recipes/pkg/test-vfs_block/hash b/repos/os/recipes/pkg/test-vfs_block/hash index bd6afb8c0a..d8a766d3ff 100644 --- a/repos/os/recipes/pkg/test-vfs_block/hash +++ b/repos/os/recipes/pkg/test-vfs_block/hash @@ -1 +1 @@ -2022-05-24 595b668d40048892bc0eb1136e460f224fc4c570 +2022-08-16 8d9f1307acd1b8d87becc23257bb25dbe1a810df diff --git a/repos/os/recipes/pkg/test-vfs_stress_fs/hash b/repos/os/recipes/pkg/test-vfs_stress_fs/hash index 3ff6d32781..6c9deb65c6 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_fs/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_fs/hash @@ -1 +1 @@ -2022-05-24 cf494b3d96992ad5463a302ab77c583e32f761ce +2022-08-16 19ad4efb15a8251540c5837f61f7bf1e809a4f83 diff --git a/repos/os/recipes/pkg/test-vfs_stress_ram/hash b/repos/os/recipes/pkg/test-vfs_stress_ram/hash index 04efa13044..e031833d80 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_ram/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_ram/hash @@ -1 +1 @@ -2022-05-24 e7aa2ad8a16cbf1c2978657cc269b07a54727f66 +2022-08-16 be0ce8f94fb095f80d0c4b2004e69abe7266ac9a diff --git a/repos/os/recipes/pkg/test-weak_ptr/hash b/repos/os/recipes/pkg/test-weak_ptr/hash index 805d0db9dc..39929de18e 100644 --- a/repos/os/recipes/pkg/test-weak_ptr/hash +++ b/repos/os/recipes/pkg/test-weak_ptr/hash @@ -1 +1 @@ -2022-05-24 2c8e16866758863b085ee1f4a2c198282a5117d1 +2022-08-16 86ce6de8e5c35d5370a3651116737ab97ecefa9a diff --git a/repos/os/recipes/pkg/trace_logger/hash b/repos/os/recipes/pkg/trace_logger/hash index 3535837b17..947891496c 100644 --- a/repos/os/recipes/pkg/trace_logger/hash +++ b/repos/os/recipes/pkg/trace_logger/hash @@ -1 +1 @@ -2022-05-24 b8b01abf80b985f3e929314aee5825a7136ee048 +2022-08-16 6519f2d3907b3ceb90b1d56b227faa55723b016a diff --git a/repos/os/recipes/pkg/vfs/hash b/repos/os/recipes/pkg/vfs/hash index fba7c12684..7035ccc0eb 100644 --- a/repos/os/recipes/pkg/vfs/hash +++ b/repos/os/recipes/pkg/vfs/hash @@ -1 +1 @@ -2022-05-24 4376719c575cecddf6b96662edf7b4d88939f767 +2022-08-16 566a3dfcb5e0f4484a7c7d3f89cacac522542897 diff --git a/repos/os/recipes/pkg/vfs_block/hash b/repos/os/recipes/pkg/vfs_block/hash index 31062b6d70..6f3ad4c7b4 100644 --- a/repos/os/recipes/pkg/vfs_block/hash +++ b/repos/os/recipes/pkg/vfs_block/hash @@ -1 +1 @@ -2022-05-24 41b1b36e4d6752cf56fd20dde36338321c7b53a2 +2022-08-16 0cc28b056d3612504a45a6380f62a5d8487b38b8 diff --git a/repos/os/recipes/src/acpi_drv/hash b/repos/os/recipes/src/acpi_drv/hash index dd478d02bd..e331a72742 100644 --- a/repos/os/recipes/src/acpi_drv/hash +++ b/repos/os/recipes/src/acpi_drv/hash @@ -1 +1 @@ -2022-05-24 2fbd7825132b34cd0c92951b8f89f504ad1a3a7f +2022-08-16 cdfcb3b2cb536c22465ccb3a3c6f323c217d9d9f diff --git a/repos/os/recipes/src/ahci_drv/hash b/repos/os/recipes/src/ahci_drv/hash index ea5c1f430f..c5469494f0 100644 --- a/repos/os/recipes/src/ahci_drv/hash +++ b/repos/os/recipes/src/ahci_drv/hash @@ -1 +1 @@ -2022-05-24 8d14d1bb16d8e6e79518981293ee29efa5076640 +2022-08-16 428db7acb71eb134589864fc07755f1fc4799004 diff --git a/repos/os/recipes/src/black_hole/hash b/repos/os/recipes/src/black_hole/hash index 007cdea8e0..1b624b7dc5 100644 --- a/repos/os/recipes/src/black_hole/hash +++ b/repos/os/recipes/src/black_hole/hash @@ -1 +1 @@ -2022-05-24 5ac9b906376475807bffa72389a4fe88bdd30e1a +2022-08-16 ce30baa903ae7a148feac38b217eaf4cd0c72219 diff --git a/repos/os/recipes/src/block_tester/hash b/repos/os/recipes/src/block_tester/hash index 0f543c40e7..dcaa97d976 100644 --- a/repos/os/recipes/src/block_tester/hash +++ b/repos/os/recipes/src/block_tester/hash @@ -1 +1 @@ -2022-05-24 449da55c27dfcaff22fdfaefd79de64934932045 +2022-08-16 daa37c9e6c0b89df316a5d4b9b7db81ba30c27e2 diff --git a/repos/os/recipes/src/boot_fb_drv/hash b/repos/os/recipes/src/boot_fb_drv/hash index 6757ebbb66..0148dddac2 100644 --- a/repos/os/recipes/src/boot_fb_drv/hash +++ b/repos/os/recipes/src/boot_fb_drv/hash @@ -1 +1 @@ -2022-05-24 9749eea404d824a29d282aef353f9fdc6b35f610 +2022-08-16 e15cba20601d91f1bc9dd443bc2f238b62d26cdc diff --git a/repos/os/recipes/src/cached_fs_rom/hash b/repos/os/recipes/src/cached_fs_rom/hash index fec09b6061..9aaad970c3 100644 --- a/repos/os/recipes/src/cached_fs_rom/hash +++ b/repos/os/recipes/src/cached_fs_rom/hash @@ -1 +1 @@ -2022-05-24 d0cac4e722d774633f75c69df36295bd05ef6bbb +2022-08-16 68aa7ed568a0fd1e1608dd055ffd731850866592 diff --git a/repos/os/recipes/src/chroot/hash b/repos/os/recipes/src/chroot/hash index 8c04d2670a..94f6c8901e 100644 --- a/repos/os/recipes/src/chroot/hash +++ b/repos/os/recipes/src/chroot/hash @@ -1 +1 @@ -2022-05-24 fa7550335c68e22c6a28fa4b542607399c312ce6 +2022-08-16 0b70d32ddaa7b4effc249f23008527162baa9932 diff --git a/repos/os/recipes/src/clipboard/hash b/repos/os/recipes/src/clipboard/hash index 6741c4a7be..1739f73b83 100644 --- a/repos/os/recipes/src/clipboard/hash +++ b/repos/os/recipes/src/clipboard/hash @@ -1 +1 @@ -2022-05-24 6070043d80c7e58d9bcca8136c9f023794afffc4 +2022-08-16 3dd39db0c4cdd3afabc7ece4ee3a58f0a5aeebc1 diff --git a/repos/os/recipes/src/cpu_balancer/hash b/repos/os/recipes/src/cpu_balancer/hash index a2eba3cdf5..78d3f9bdf4 100644 --- a/repos/os/recipes/src/cpu_balancer/hash +++ b/repos/os/recipes/src/cpu_balancer/hash @@ -1 +1 @@ -2022-05-24 4996e66510f4c45f8446e1380267811c49c97b71 +2022-08-16 47f4b65e4b0e70c9bf7d077b837d4a6978328259 diff --git a/repos/os/recipes/src/cpu_burner/hash b/repos/os/recipes/src/cpu_burner/hash index e0fd5f6ff5..8a8038325e 100644 --- a/repos/os/recipes/src/cpu_burner/hash +++ b/repos/os/recipes/src/cpu_burner/hash @@ -1 +1 @@ -2022-05-24 3dc056efacfa12cea3196b43556e42d6263addf6 +2022-08-16 d6000ec6e26d566b44bd5b16877372455f22fe3b diff --git a/repos/os/recipes/src/dummy/hash b/repos/os/recipes/src/dummy/hash index 1850138ed6..1a6c9251ac 100644 --- a/repos/os/recipes/src/dummy/hash +++ b/repos/os/recipes/src/dummy/hash @@ -1 +1 @@ -2022-05-24 fb79764f11e84a786bbb6d1ca5a538106b10f9b4 +2022-08-16 b93f21607530d2ad4777d07fdc5467ee719a5c92 diff --git a/repos/os/recipes/src/dummy_rtc_drv/hash b/repos/os/recipes/src/dummy_rtc_drv/hash index 0112ec6895..3fd3ec733c 100644 --- a/repos/os/recipes/src/dummy_rtc_drv/hash +++ b/repos/os/recipes/src/dummy_rtc_drv/hash @@ -1 +1 @@ -2022-05-24 5ecbf8f6a210344c9a49d4ad64c12921d80e8627 +2022-08-16 eb612642ebe5c6928d94c6386b8f2ac67b050906 diff --git a/repos/os/recipes/src/dynamic_rom/hash b/repos/os/recipes/src/dynamic_rom/hash index dee56cea23..da109618c1 100644 --- a/repos/os/recipes/src/dynamic_rom/hash +++ b/repos/os/recipes/src/dynamic_rom/hash @@ -1 +1 @@ -2022-05-24 b6f11fe18b09b4bf8058d83f9b2076542d0b6bcb +2022-08-16 5881f657dc90b8b7e7fc8b57acd4aa15d037dd9f diff --git a/repos/os/recipes/src/event_filter/hash b/repos/os/recipes/src/event_filter/hash index 67cab4aae3..d31d7c2fe9 100644 --- a/repos/os/recipes/src/event_filter/hash +++ b/repos/os/recipes/src/event_filter/hash @@ -1 +1 @@ -2022-05-24 4fe82cc55cccde30453dd6366e44fe5242892e1b +2022-08-16 5fa9037132384ad7dd3959a19842281011f086d2 diff --git a/repos/os/recipes/src/fb_sdl/hash b/repos/os/recipes/src/fb_sdl/hash index babad839fa..026efd5a6a 100644 --- a/repos/os/recipes/src/fb_sdl/hash +++ b/repos/os/recipes/src/fb_sdl/hash @@ -1 +1 @@ -2022-05-24 8dde2409fff2c91af7e1897437ef9ffe4a6b5f6d +2022-08-16 7aa28e8326b59e2e9d8b1fb2ff749d9945892974 diff --git a/repos/os/recipes/src/fs_report/hash b/repos/os/recipes/src/fs_report/hash index fafe84f4ff..4b8ef3e32e 100644 --- a/repos/os/recipes/src/fs_report/hash +++ b/repos/os/recipes/src/fs_report/hash @@ -1 +1 @@ -2022-05-24 fde35eea9d1d92eb665bff3ebdc6dc9ae3ad2efb +2022-08-16 b0d11cd24087917b22db60517d5582aa4e8a2278 diff --git a/repos/os/recipes/src/fs_rom/hash b/repos/os/recipes/src/fs_rom/hash index 90e8629c51..e8f110d672 100644 --- a/repos/os/recipes/src/fs_rom/hash +++ b/repos/os/recipes/src/fs_rom/hash @@ -1 +1 @@ -2022-05-24 138b33df108154edec48dd20206d0c8c5e9d1f78 +2022-08-16 24e8d3d30af4153d37ec6bc730956108963fb3c6 diff --git a/repos/os/recipes/src/global_keys_handler/hash b/repos/os/recipes/src/global_keys_handler/hash index 22f614b145..c751e43d79 100644 --- a/repos/os/recipes/src/global_keys_handler/hash +++ b/repos/os/recipes/src/global_keys_handler/hash @@ -1 +1 @@ -2022-05-24 7c83e4167e1228ae7cdf2c4e0624231d1a68ad0d +2022-08-16 1a1af739d67c5c16ab089af2fec9688183004a6b diff --git a/repos/os/recipes/src/gui_fb/hash b/repos/os/recipes/src/gui_fb/hash index 02d2721e9f..33ded22ab9 100644 --- a/repos/os/recipes/src/gui_fb/hash +++ b/repos/os/recipes/src/gui_fb/hash @@ -1 +1 @@ -2022-05-24 6bef2a93ea1331aeaf3551bf296234d5d67515f4 +2022-08-16 48bb160b8eb38eb832653577ac45db920ac3e5f4 diff --git a/repos/os/recipes/src/init/hash b/repos/os/recipes/src/init/hash index 22694b215f..09c578ad7a 100644 --- a/repos/os/recipes/src/init/hash +++ b/repos/os/recipes/src/init/hash @@ -1 +1 @@ -2022-05-24 3d8a9cd468876e1ef2098e9081e65f2a2873fc3d +2022-08-16 da198e92add574014e3aa15214dcb3ec69407734 diff --git a/repos/os/recipes/src/input_event_bridge/hash b/repos/os/recipes/src/input_event_bridge/hash index c8cc107c91..f152a6762c 100644 --- a/repos/os/recipes/src/input_event_bridge/hash +++ b/repos/os/recipes/src/input_event_bridge/hash @@ -1 +1 @@ -2022-05-24 cfaff88dd24b11f5d9087c16149d2dec7f68f5bd +2022-08-16 8ddddada6a36acbacc02c339a1c4c060a9ec99c7 diff --git a/repos/os/recipes/src/intel_gpu_drv/hash b/repos/os/recipes/src/intel_gpu_drv/hash index 3b613376fd..f429eed711 100644 --- a/repos/os/recipes/src/intel_gpu_drv/hash +++ b/repos/os/recipes/src/intel_gpu_drv/hash @@ -1 +1 @@ -2022-05-24 dad94e082e6a814b29cded8c09e729f30e2c3870 +2022-08-16 d8bd4babb2493e357e77e1cebd08a952d8d94e63 diff --git a/repos/os/recipes/src/lan9118_nic_drv/hash b/repos/os/recipes/src/lan9118_nic_drv/hash index ba6d60e7ad..4aec36ff84 100644 --- a/repos/os/recipes/src/lan9118_nic_drv/hash +++ b/repos/os/recipes/src/lan9118_nic_drv/hash @@ -1 +1 @@ -2022-05-24 e20d2bdc468c557aaee04a11850a681abc25e8e3 +2022-08-16 a20ea69fdc53cd05e07b0f563ea68e3b0f2681c9 diff --git a/repos/os/recipes/src/linux_nic_drv/hash b/repos/os/recipes/src/linux_nic_drv/hash index 26e2940729..f39f831fa7 100644 --- a/repos/os/recipes/src/linux_nic_drv/hash +++ b/repos/os/recipes/src/linux_nic_drv/hash @@ -1 +1 @@ -2022-05-24 deb834207a8c64d9e60de13781dc1b4f68f286dc +2022-08-16 e6e4c221661e3bd429afef523d2050747144a207 diff --git a/repos/os/recipes/src/linux_rtc_drv/hash b/repos/os/recipes/src/linux_rtc_drv/hash index 56e6dc6621..21d1c3fe6d 100644 --- a/repos/os/recipes/src/linux_rtc_drv/hash +++ b/repos/os/recipes/src/linux_rtc_drv/hash @@ -1 +1 @@ -2022-05-24 21f662a4e7934c5c2d4efb05ea3118b3bea8b307 +2022-08-16 35d78cc4f5ac2ee02bf3836b5dd57a25c42a8a17 diff --git a/repos/os/recipes/src/loader/hash b/repos/os/recipes/src/loader/hash index a2619c166f..d711527898 100644 --- a/repos/os/recipes/src/loader/hash +++ b/repos/os/recipes/src/loader/hash @@ -1 +1 @@ -2022-05-24 351722701f3942554b0732a38478e76848ed0b38 +2022-08-16 ff7440b71f62ceee0ea520837d36efd03cb67a12 diff --git a/repos/os/recipes/src/log_core/hash b/repos/os/recipes/src/log_core/hash index b272ab339d..ffc3806050 100644 --- a/repos/os/recipes/src/log_core/hash +++ b/repos/os/recipes/src/log_core/hash @@ -1 +1 @@ -2022-05-24 2e7a30562de2cb4d0eb8fac62a622d1e4b3b8459 +2022-08-16 d3a5be11c81e25119a764b451921d7ebe7a24db4 diff --git a/repos/os/recipes/src/log_terminal/hash b/repos/os/recipes/src/log_terminal/hash index 4e8f483c39..581f09a420 100644 --- a/repos/os/recipes/src/log_terminal/hash +++ b/repos/os/recipes/src/log_terminal/hash @@ -1 +1 @@ -2022-05-24 fc6fd01c9060610e0aa5bec3b733ba004cd0b3a6 +2022-08-16 223ab16b66aa0640d0fb4da5070e45d16cd191d7 diff --git a/repos/os/recipes/src/lx_block/hash b/repos/os/recipes/src/lx_block/hash index 9083985261..23cdbd7b0d 100644 --- a/repos/os/recipes/src/lx_block/hash +++ b/repos/os/recipes/src/lx_block/hash @@ -1 +1 @@ -2022-05-24 0c1b84a462eed33773eeb248460642940871d694 +2022-08-16 74969a62c438fafc6d4ae9f27cb82f6221b3b91d diff --git a/repos/os/recipes/src/lx_fs/hash b/repos/os/recipes/src/lx_fs/hash index 777418fc50..46f363a80e 100644 --- a/repos/os/recipes/src/lx_fs/hash +++ b/repos/os/recipes/src/lx_fs/hash @@ -1 +1 @@ -2022-05-24 214aabdee3bfabd37b9e393890412dcfa0781ec3 +2022-08-16 b84cd531c344801d37bbc1e3d8d27fe0ee3a0dcd diff --git a/repos/os/recipes/src/mixer/hash b/repos/os/recipes/src/mixer/hash index d179109a4d..bcce141c08 100644 --- a/repos/os/recipes/src/mixer/hash +++ b/repos/os/recipes/src/mixer/hash @@ -1 +1 @@ -2022-05-24 e460af414b356460715c0641e0b719c3c5240527 +2022-08-16 8c74d9a09a3e58dc2a789c07a8a2c68a6a0c0007 diff --git a/repos/os/recipes/src/nic_bridge/hash b/repos/os/recipes/src/nic_bridge/hash index a72750bb7d..fda37a252c 100644 --- a/repos/os/recipes/src/nic_bridge/hash +++ b/repos/os/recipes/src/nic_bridge/hash @@ -1 +1 @@ -2022-05-24 50e90b99f54a58dbde10886e3fde577112a4ff8c +2022-08-16 d23ddd0a7bac0d2513c1d20699ba44e0bf92adfa diff --git a/repos/os/recipes/src/nic_loopback/hash b/repos/os/recipes/src/nic_loopback/hash index 23ce8fa9b1..6506dd478e 100644 --- a/repos/os/recipes/src/nic_loopback/hash +++ b/repos/os/recipes/src/nic_loopback/hash @@ -1 +1 @@ -2022-05-24 207af558d3f1a58c57e5a893ee223d77bbb5a281 +2022-08-16 edb51de9cf23e068ee0d3fd3748517b07c04c540 diff --git a/repos/os/recipes/src/nic_perf/hash b/repos/os/recipes/src/nic_perf/hash index 79fb6317cd..b4928dd290 100644 --- a/repos/os/recipes/src/nic_perf/hash +++ b/repos/os/recipes/src/nic_perf/hash @@ -1 +1 @@ -2022-07-20 d2054f04c036d888ce04cf741e4073c333d35db4 +2022-08-16 fca3d34ce978284381e4e9f88b58329d36bc98c3 diff --git a/repos/os/recipes/src/nic_router/hash b/repos/os/recipes/src/nic_router/hash index e59e8b1173..8f3e81d9f7 100644 --- a/repos/os/recipes/src/nic_router/hash +++ b/repos/os/recipes/src/nic_router/hash @@ -1 +1 @@ -2022-05-24 62b001db529654caa8b5e203e443cb3d18ab5e58 +2022-08-16 f51ee318796b738de7b7bd32f7687438938a80cf diff --git a/repos/os/recipes/src/nit_focus/hash b/repos/os/recipes/src/nit_focus/hash index eda9d6e390..7e870d8068 100644 --- a/repos/os/recipes/src/nit_focus/hash +++ b/repos/os/recipes/src/nit_focus/hash @@ -1 +1 @@ -2022-05-24 5e63d56ea68219aee1fb5f8b9f99d6027247bad8 +2022-08-16 e4b2838fd4f5f74faabfaa2b39bbbf238fdc302f diff --git a/repos/os/recipes/src/nitpicker/hash b/repos/os/recipes/src/nitpicker/hash index e3a540a768..399eac584f 100644 --- a/repos/os/recipes/src/nitpicker/hash +++ b/repos/os/recipes/src/nitpicker/hash @@ -1 +1 @@ -2022-05-24 b1ac3b7e7696ba65d4fcb0b8ec8043222c22663c +2022-08-16 22b2442ad98dbbbc96ac4abd227efc771acb47ac diff --git a/repos/os/recipes/src/nvme_drv/hash b/repos/os/recipes/src/nvme_drv/hash index 571d82abdc..dab5a7fc6b 100644 --- a/repos/os/recipes/src/nvme_drv/hash +++ b/repos/os/recipes/src/nvme_drv/hash @@ -1 +1 @@ -2022-05-24 5602426d581e9b056eb465459b142d7b98ff41a8 +2022-08-16 78e27f586ce2b31dfd9466552c2d0eb349a88fea diff --git a/repos/os/recipes/src/part_block/hash b/repos/os/recipes/src/part_block/hash index 021a6bf3be..4d992bebad 100644 --- a/repos/os/recipes/src/part_block/hash +++ b/repos/os/recipes/src/part_block/hash @@ -1 +1 @@ -2022-05-24 3804e994e70487ec972e8a206b18dfd40505b204 +2022-08-16 533c1abe02c2bfbdf76ddbf2a0546678dda47674 diff --git a/repos/os/recipes/src/pbxa9_drivers/hash b/repos/os/recipes/src/pbxa9_drivers/hash index aae6f8ed0a..24502c65ac 100644 --- a/repos/os/recipes/src/pbxa9_drivers/hash +++ b/repos/os/recipes/src/pbxa9_drivers/hash @@ -1 +1 @@ -2022-05-24 dd886745a030e2c9b124e99884da1cd860fcc947 +2022-08-16 3050ac89ee99ac099380c28485e4ca8611f3f7f5 diff --git a/repos/os/recipes/src/pci_decode/hash b/repos/os/recipes/src/pci_decode/hash index 77debe6239..80210ca155 100644 --- a/repos/os/recipes/src/pci_decode/hash +++ b/repos/os/recipes/src/pci_decode/hash @@ -1 +1 @@ -2022-05-24-d 7e08ac5d61c5a116395a114a527e155adabd391d +2022-08-16 b75ae006f4b8606232c1135c665faf8dfd11982f diff --git a/repos/os/recipes/src/platform_drv/hash b/repos/os/recipes/src/platform_drv/hash index 93f96a0d04..e407eb8862 100644 --- a/repos/os/recipes/src/platform_drv/hash +++ b/repos/os/recipes/src/platform_drv/hash @@ -1 +1 @@ -2022-05-24 d3274a7b7c60a3182b05184aed017de1399d40cc +2022-08-16 aa63a82298f0e8159de4a3308657c5c983be2efe diff --git a/repos/os/recipes/src/ps2_drv/hash b/repos/os/recipes/src/ps2_drv/hash index f54dbfc845..f0f43fdbf8 100644 --- a/repos/os/recipes/src/ps2_drv/hash +++ b/repos/os/recipes/src/ps2_drv/hash @@ -1 +1 @@ -2022-05-24 40d9226b4bcb895f83b6b8263b980ca8b2f77430 +2022-08-16 f30ac6dbe3c47cd1a25962d298261d97bed4f6ed diff --git a/repos/os/recipes/src/report_rom/hash b/repos/os/recipes/src/report_rom/hash index 5fcd080997..0fa1d1c28b 100644 --- a/repos/os/recipes/src/report_rom/hash +++ b/repos/os/recipes/src/report_rom/hash @@ -1 +1 @@ -2022-05-24 81b7701e7428734eb8f935d08488d235ed027e89 +2022-08-16 129edb7722905bea1fe2ea20bd9d3b281e291be9 diff --git a/repos/os/recipes/src/rom_filter/hash b/repos/os/recipes/src/rom_filter/hash index 094dd48b1e..92dfd09719 100644 --- a/repos/os/recipes/src/rom_filter/hash +++ b/repos/os/recipes/src/rom_filter/hash @@ -1 +1 @@ -2022-05-24 a3393f87e0ce7cbf7c5059ee5193b8bafec5e174 +2022-08-16 540eab489002ecfee8d8b6d9c45c680da335775d diff --git a/repos/os/recipes/src/rom_logger/hash b/repos/os/recipes/src/rom_logger/hash index f602b66325..3c3c3482d9 100644 --- a/repos/os/recipes/src/rom_logger/hash +++ b/repos/os/recipes/src/rom_logger/hash @@ -1 +1 @@ -2022-05-24 5e7d668f08e277a38552796a35ed2162b9f7b921 +2022-08-16 7bca4f56d3d307e0885ea3eacf17acc24ce358a8 diff --git a/repos/os/recipes/src/rom_reporter/hash b/repos/os/recipes/src/rom_reporter/hash index 201de72295..1e192707f3 100644 --- a/repos/os/recipes/src/rom_reporter/hash +++ b/repos/os/recipes/src/rom_reporter/hash @@ -1 +1 @@ -2022-05-24 5539a3ad6197c7ea21a982de84ea01c9c5a0d3eb +2022-08-16 9ad6702badbfe9e0477bc797340e35420059c686 diff --git a/repos/os/recipes/src/rom_to_file/hash b/repos/os/recipes/src/rom_to_file/hash index 70e2c1471c..7c086e372f 100644 --- a/repos/os/recipes/src/rom_to_file/hash +++ b/repos/os/recipes/src/rom_to_file/hash @@ -1 +1 @@ -2022-05-24 ffff68edf6f86d26b8897f7356f58cd91f86e1bb +2022-08-16 e1df96a36e66ee73a0c399ffca1ee79e304bd281 diff --git a/repos/os/recipes/src/rtc_drv/hash b/repos/os/recipes/src/rtc_drv/hash index 8c3f803def..7c13c13561 100644 --- a/repos/os/recipes/src/rtc_drv/hash +++ b/repos/os/recipes/src/rtc_drv/hash @@ -1 +1 @@ -2022-06-06 4d3547ead19b82e81c31750cdbd4a3d19dbfa1b4 +2022-08-16 83edda798e0c38657a8b2b048fe8b9bf235f2553 diff --git a/repos/os/recipes/src/sandbox/hash b/repos/os/recipes/src/sandbox/hash index 65bf7d7c86..09b0e40a74 100644 --- a/repos/os/recipes/src/sandbox/hash +++ b/repos/os/recipes/src/sandbox/hash @@ -1 +1 @@ -2022-05-24 1313a7700762c9ef497c1fc15e747ba698549f8f +2022-08-16 888cb685196adabd9f10781336be241658349b5d diff --git a/repos/os/recipes/src/sequence/hash b/repos/os/recipes/src/sequence/hash index 4ad5eb289c..0082dc5627 100644 --- a/repos/os/recipes/src/sequence/hash +++ b/repos/os/recipes/src/sequence/hash @@ -1 +1 @@ -2022-05-24 419347e013764f8c6db1aba7e73b228ed51a872b +2022-08-16 9c9aec92908a6944ac04d10a952ceea4f99783e4 diff --git a/repos/os/recipes/src/shim/hash b/repos/os/recipes/src/shim/hash index a572197b34..5287af5a60 100644 --- a/repos/os/recipes/src/shim/hash +++ b/repos/os/recipes/src/shim/hash @@ -1 +1 @@ -2022-05-24 e3f0c80569c95f2ff75137dd13544fbce9b00aed +2022-08-16 edc77aad8d3bd965ac7131b82a21be2fa8e60ad6 diff --git a/repos/os/recipes/src/terminal_crosslink/hash b/repos/os/recipes/src/terminal_crosslink/hash index 1507cae9bb..155d4fe92c 100644 --- a/repos/os/recipes/src/terminal_crosslink/hash +++ b/repos/os/recipes/src/terminal_crosslink/hash @@ -1 +1 @@ -2022-05-24 24cb2ee2919015194fa27e332beb2adbb1e321ba +2022-08-16 72f2400c1a5efd2feaa88682aa12560ec1fb94af diff --git a/repos/os/recipes/src/terminal_log/hash b/repos/os/recipes/src/terminal_log/hash index f07986d3f1..d5211eb3e9 100644 --- a/repos/os/recipes/src/terminal_log/hash +++ b/repos/os/recipes/src/terminal_log/hash @@ -1 +1 @@ -2022-05-24 ecb26455d4aa28beca935d488490ce3af18a3c8c +2022-08-16 9cb5bb45cf881a3929844fe18a5ceafe5fadc0c1 diff --git a/repos/os/recipes/src/test-black_hole/hash b/repos/os/recipes/src/test-black_hole/hash index c3b6857810..943c17fa92 100644 --- a/repos/os/recipes/src/test-black_hole/hash +++ b/repos/os/recipes/src/test-black_hole/hash @@ -1 +1 @@ -2022-05-24 c7d6153af7c4b5c3455927b40e1f0d7058f3fc97 +2022-08-16 d3a98cee2da3f15864ff44a4a32c1001a3253be4 diff --git a/repos/os/recipes/src/test-bomb/hash b/repos/os/recipes/src/test-bomb/hash index 8aecf40367..8b13bf3dd3 100644 --- a/repos/os/recipes/src/test-bomb/hash +++ b/repos/os/recipes/src/test-bomb/hash @@ -1 +1 @@ -2022-05-24 7cfbf701e399ce6b2347cf1bc7d9fd324196698e +2022-08-16 8b52d6dfe683379460ee324a8d60051c0d3b18f6 diff --git a/repos/os/recipes/src/test-capture/hash b/repos/os/recipes/src/test-capture/hash index bc88e04ca0..f9d94fb845 100644 --- a/repos/os/recipes/src/test-capture/hash +++ b/repos/os/recipes/src/test-capture/hash @@ -1 +1 @@ -2022-05-24 4c0225dc9ca6b8b219207df0ca66c0bcaa76c76a +2022-08-16 15c8f13b64e50569da183418023e02b14135fec6 diff --git a/repos/os/recipes/src/test-clipboard/hash b/repos/os/recipes/src/test-clipboard/hash index e16370c098..5dc86a3c1a 100644 --- a/repos/os/recipes/src/test-clipboard/hash +++ b/repos/os/recipes/src/test-clipboard/hash @@ -1 +1 @@ -2022-05-24 ddd723a50408577c0e72ab90ae8bd2e2dbb9f694 +2022-08-16 8369d11912c47c09915e177e69d17334b1c4a5bd diff --git a/repos/os/recipes/src/test-dynamic_config/hash b/repos/os/recipes/src/test-dynamic_config/hash index a0d22bda03..835e2b76b5 100644 --- a/repos/os/recipes/src/test-dynamic_config/hash +++ b/repos/os/recipes/src/test-dynamic_config/hash @@ -1 +1 @@ -2022-05-24 3dc23f172be62aa39e3dbc0074d70f16fd6fb4fe +2022-08-16 6cb79124ab1b82afe6867f800e1a773f51135aaf diff --git a/repos/os/recipes/src/test-fault_detection/hash b/repos/os/recipes/src/test-fault_detection/hash index 3c20624c4b..a6f452405d 100644 --- a/repos/os/recipes/src/test-fault_detection/hash +++ b/repos/os/recipes/src/test-fault_detection/hash @@ -1 +1 @@ -2022-05-24 1a7f2ae84f720fc6c241a2fbee277b5a1de3750b +2022-08-16 9d0db875a8d6c1a0b6e6cea714d8c4cc6c54f008 diff --git a/repos/os/recipes/src/test-fs_packet/hash b/repos/os/recipes/src/test-fs_packet/hash index 8c08ff1d8b..319c856202 100644 --- a/repos/os/recipes/src/test-fs_packet/hash +++ b/repos/os/recipes/src/test-fs_packet/hash @@ -1 +1 @@ -2022-05-24 7b5edc93f53a09705bad7b2451fe8bfbed0f264a +2022-08-16 a4aa68dc2566ce38a5dbc090d2b2a6ce65948b0b diff --git a/repos/os/recipes/src/test-fs_report/hash b/repos/os/recipes/src/test-fs_report/hash index 1b315170cb..e8ff1fecf6 100644 --- a/repos/os/recipes/src/test-fs_report/hash +++ b/repos/os/recipes/src/test-fs_report/hash @@ -1 +1 @@ -2022-05-24 e3cff88308acd589bf38086da31c055ceb8ce45b +2022-08-16 80a6fb461c026b2507b262798a0a31316cbee82d diff --git a/repos/os/recipes/src/test-immutable_rom/hash b/repos/os/recipes/src/test-immutable_rom/hash index 0944d33735..7a07e874a2 100644 --- a/repos/os/recipes/src/test-immutable_rom/hash +++ b/repos/os/recipes/src/test-immutable_rom/hash @@ -1 +1 @@ -2022-05-24 1fd2ec21af5a90229a5de974207bdb00783c43a7 +2022-08-16 4957ac90b6de564137c85f44e06ec9597ee0b2f6 diff --git a/repos/os/recipes/src/test-init/hash b/repos/os/recipes/src/test-init/hash index 91328d2776..32aa81ccd2 100644 --- a/repos/os/recipes/src/test-init/hash +++ b/repos/os/recipes/src/test-init/hash @@ -1 +1 @@ -2022-05-24 5c34bd3ea35e8fcd989ff2bb6efaef2d737155a6 +2022-08-16 59bc86fdc32ad5e60ebd0f59114c2ec5ae630af0 diff --git a/repos/os/recipes/src/test-init_loop/hash b/repos/os/recipes/src/test-init_loop/hash index d22ac34686..27adadde4e 100644 --- a/repos/os/recipes/src/test-init_loop/hash +++ b/repos/os/recipes/src/test-init_loop/hash @@ -1 +1 @@ -2022-05-24 3e10707de27b0339bf579f877dc5dd170cd17cad +2022-08-16 625268315c5393c45684b14ac7a5aaa6391f9b20 diff --git a/repos/os/recipes/src/test-nic_loopback/hash b/repos/os/recipes/src/test-nic_loopback/hash index 4a0183c49a..acc5e0bfd4 100644 --- a/repos/os/recipes/src/test-nic_loopback/hash +++ b/repos/os/recipes/src/test-nic_loopback/hash @@ -1 +1 @@ -2022-05-24 21db241f20b46a4adcb1a12b9da3c5991769caba +2022-08-16 6963d76867082076326465c9bf6c81f62120f770 diff --git a/repos/os/recipes/src/test-ram_fs_chunk/hash b/repos/os/recipes/src/test-ram_fs_chunk/hash index ca533622f2..73ea5ecce9 100644 --- a/repos/os/recipes/src/test-ram_fs_chunk/hash +++ b/repos/os/recipes/src/test-ram_fs_chunk/hash @@ -1 +1 @@ -2022-05-24 d812eba5b6035d0b8f4fa1fb162f2b9d2e8ad01b +2022-08-16 cb3cca2d848b0cc2e39e6e498dedf6dac94f4e78 diff --git a/repos/os/recipes/src/test-report_rom/hash b/repos/os/recipes/src/test-report_rom/hash index 98e2256f48..df4ffd481d 100644 --- a/repos/os/recipes/src/test-report_rom/hash +++ b/repos/os/recipes/src/test-report_rom/hash @@ -1 +1 @@ -2022-05-24 e3acd9b4afd446c8cc8cb5be8e1ebd8504390f1b +2022-08-16 dbb5d75f4dba5e5585a6dabaeb0ceba31b38a3fd diff --git a/repos/os/recipes/src/test-resource_request/hash b/repos/os/recipes/src/test-resource_request/hash index 3e71e8818e..3cb29e8568 100644 --- a/repos/os/recipes/src/test-resource_request/hash +++ b/repos/os/recipes/src/test-resource_request/hash @@ -1 +1 @@ -2022-05-24 d5751f024c2168f8cd3402c43f51443d90a219f0 +2022-08-16 06efd13a27fac9bdc3a4ff8dffbf78da3347c6d2 diff --git a/repos/os/recipes/src/test-resource_yield/hash b/repos/os/recipes/src/test-resource_yield/hash index 7ee7e0de70..5740a02879 100644 --- a/repos/os/recipes/src/test-resource_yield/hash +++ b/repos/os/recipes/src/test-resource_yield/hash @@ -1 +1 @@ -2022-05-24 4d6a5eec7d381f95232023717d92947412270c43 +2022-08-16 2a25d0afb5f049cf81d92868cef4ca0d6b5e4283 diff --git a/repos/os/recipes/src/test-rtc/hash b/repos/os/recipes/src/test-rtc/hash index 9278869dc8..3b1b58d322 100644 --- a/repos/os/recipes/src/test-rtc/hash +++ b/repos/os/recipes/src/test-rtc/hash @@ -1 +1 @@ -2022-05-24 3d5e95a96856089fb4c2a75ea8b7d5f6b77b597e +2022-08-16 6fd49c75114e8961092ff799e55ab8263e86689b diff --git a/repos/os/recipes/src/test-sandbox/hash b/repos/os/recipes/src/test-sandbox/hash index 9e2189ee7b..941c9e95b7 100644 --- a/repos/os/recipes/src/test-sandbox/hash +++ b/repos/os/recipes/src/test-sandbox/hash @@ -1 +1 @@ -2022-05-24 3ad10501025a79d86f9ee3f979a5bd823abb9f93 +2022-08-16 00786c0651a50dc43760ec6df81903dd90c7b4e6 diff --git a/repos/os/recipes/src/test-signal/hash b/repos/os/recipes/src/test-signal/hash index 417c9509b7..8123baff5b 100644 --- a/repos/os/recipes/src/test-signal/hash +++ b/repos/os/recipes/src/test-signal/hash @@ -1 +1 @@ -2022-05-24 29347e1cf83d26e95e0cd1496e6d6d7b8f08cbcb +2022-08-16 e398f04884b20fdef54c228c66d4a2959330bbb1 diff --git a/repos/os/recipes/src/test-slab/hash b/repos/os/recipes/src/test-slab/hash index 0abae5f98f..eb3046da2b 100644 --- a/repos/os/recipes/src/test-slab/hash +++ b/repos/os/recipes/src/test-slab/hash @@ -1 +1 @@ -2022-05-24 a89960bccd1d80a9e3c60799f1557ddc8efbc2a5 +2022-08-16 0af9e3d27bc3383c06c156e06feba768bdc99c49 diff --git a/repos/os/recipes/src/test-terminal_crosslink/hash b/repos/os/recipes/src/test-terminal_crosslink/hash index 4eb3cdc489..3061baaab4 100644 --- a/repos/os/recipes/src/test-terminal_crosslink/hash +++ b/repos/os/recipes/src/test-terminal_crosslink/hash @@ -1 +1 @@ -2022-05-24 5a685ea2f421a1e63fa50ba6a33433854d652295 +2022-08-16 089005f3adb9b1808655a8dc76162224b065978d diff --git a/repos/os/recipes/src/test-trace/hash b/repos/os/recipes/src/test-trace/hash index 2416ffd3da..e79ed7594b 100644 --- a/repos/os/recipes/src/test-trace/hash +++ b/repos/os/recipes/src/test-trace/hash @@ -1 +1 @@ -2022-05-24 ee8b965ccee564b90864c1d4f402a52193fa0a96 +2022-08-16 a74387f58eac3ce866d01b6569625d39ea14de70 diff --git a/repos/os/recipes/src/test-trace_buffer/hash b/repos/os/recipes/src/test-trace_buffer/hash index 2dcd550005..d589734226 100644 --- a/repos/os/recipes/src/test-trace_buffer/hash +++ b/repos/os/recipes/src/test-trace_buffer/hash @@ -1 +1 @@ -2022-05-24 1ffec760c0e9c1076a7d0eac0a85f6f33b1a08e2 +2022-08-16 9743a59611217ce9cad745a01ec3061223ef639a diff --git a/repos/os/recipes/src/test-trace_logger/hash b/repos/os/recipes/src/test-trace_logger/hash index 97b5214cdf..d10d758574 100644 --- a/repos/os/recipes/src/test-trace_logger/hash +++ b/repos/os/recipes/src/test-trace_logger/hash @@ -1 +1 @@ -2022-05-24 3b2667466420ee1a82d7dd970a7e4f5460fd5240 +2022-08-16 d3dc7744a9e57a5182dd7218dee69af7e508414e diff --git a/repos/os/recipes/src/test-utf8/hash b/repos/os/recipes/src/test-utf8/hash index 01dd3a72b4..a1b04078d3 100644 --- a/repos/os/recipes/src/test-utf8/hash +++ b/repos/os/recipes/src/test-utf8/hash @@ -1 +1 @@ -2022-05-24 65f524a9e571d9b3caec18a2aae2a4c318e4fd6a +2022-08-16 35d2f6698563df9fb6dcbf45792b26ef1da8df50 diff --git a/repos/os/recipes/src/test-vfs_capture/hash b/repos/os/recipes/src/test-vfs_capture/hash index b2bb21ba59..355a23cf18 100644 --- a/repos/os/recipes/src/test-vfs_capture/hash +++ b/repos/os/recipes/src/test-vfs_capture/hash @@ -1 +1 @@ -2022-05-24 b346b457a35a8f4eaa5dac436b0dc30eac311e92 +2022-08-16 50c361e588727a9fbf6f7dd739fda2c46df491ce diff --git a/repos/os/recipes/src/test-vfs_stress/hash b/repos/os/recipes/src/test-vfs_stress/hash index 5da56f6f91..299c21bf2c 100644 --- a/repos/os/recipes/src/test-vfs_stress/hash +++ b/repos/os/recipes/src/test-vfs_stress/hash @@ -1 +1 @@ -2022-05-24 9e35e59333d963b013968b4856df3116ee12f495 +2022-08-16 93296551617d233b3e1779d144548d61d3640f42 diff --git a/repos/os/recipes/src/test-weak_ptr/hash b/repos/os/recipes/src/test-weak_ptr/hash index 92207241d8..b43078dab8 100644 --- a/repos/os/recipes/src/test-weak_ptr/hash +++ b/repos/os/recipes/src/test-weak_ptr/hash @@ -1 +1 @@ -2022-05-24 70804938f63b509f7c0a5b80204f62a55bfc46b9 +2022-08-16 42fe1fe5db09c1e192e52378339e3c8721bc48b2 diff --git a/repos/os/recipes/src/top/hash b/repos/os/recipes/src/top/hash index 0dedf9e26a..a9530ab341 100644 --- a/repos/os/recipes/src/top/hash +++ b/repos/os/recipes/src/top/hash @@ -1 +1 @@ -2022-05-24 9b4b0a908f6bcb7139736d9406b404812d8738a3 +2022-08-16 42762ae28f0e1100ebe40fa0c143b5603cd89096 diff --git a/repos/os/recipes/src/trace_logger/hash b/repos/os/recipes/src/trace_logger/hash index 88ab45e994..6164373d80 100644 --- a/repos/os/recipes/src/trace_logger/hash +++ b/repos/os/recipes/src/trace_logger/hash @@ -1 +1 @@ -2022-05-24 cbbd075ac91a3e11aa04075c0d646dd1dfc638af +2022-08-16 aa44051151899894b6605d6d35ae70d23c7715b9 diff --git a/repos/os/recipes/src/trace_policy/hash b/repos/os/recipes/src/trace_policy/hash index d06930e206..96d60b6abe 100644 --- a/repos/os/recipes/src/trace_policy/hash +++ b/repos/os/recipes/src/trace_policy/hash @@ -1 +1 @@ -2022-05-24 f0b101005ccf1fe6fab622568dc49c9e75724d82 +2022-08-16 916f19c6f5e88f84f4e279bbce2a71ec2fbad070 diff --git a/repos/os/recipes/src/trace_subject_reporter/hash b/repos/os/recipes/src/trace_subject_reporter/hash index c2061306de..d29f69b5cd 100644 --- a/repos/os/recipes/src/trace_subject_reporter/hash +++ b/repos/os/recipes/src/trace_subject_reporter/hash @@ -1 +1 @@ -2022-05-24 31313fa37d7020ef5ba6e7030e7f785ae576e8da +2022-08-16 438f9d77dcda6117d556c341cd0a3554999a5eea diff --git a/repos/os/recipes/src/usb_block_drv/hash b/repos/os/recipes/src/usb_block_drv/hash index 578316035e..d8961e4b3d 100644 --- a/repos/os/recipes/src/usb_block_drv/hash +++ b/repos/os/recipes/src/usb_block_drv/hash @@ -1 +1 @@ -2022-05-24 0f839972e4efe5b65cd15533a047531c279128e5 +2022-08-16 5de4a7d9f5f3af6b8901743c9f6f7d1385675983 diff --git a/repos/os/recipes/src/vfs/hash b/repos/os/recipes/src/vfs/hash index 39eb86e2b5..1b846b86f3 100644 --- a/repos/os/recipes/src/vfs/hash +++ b/repos/os/recipes/src/vfs/hash @@ -1 +1 @@ -2022-05-24 8aba6698ed3c7ee216dfe09b514f99e9bdc402d4 +2022-08-16 77afa45113a9aefba1234349e8fb52e7ca543281 diff --git a/repos/os/recipes/src/vfs_block/hash b/repos/os/recipes/src/vfs_block/hash index 7997866bbf..24cdce94e9 100644 --- a/repos/os/recipes/src/vfs_block/hash +++ b/repos/os/recipes/src/vfs_block/hash @@ -1 +1 @@ -2022-05-24 591e7c2fc588c20cb64a8dbdd76beab5f8c2b630 +2022-08-16 15afb803b00b3cbe8e72038abc2a62e6c14adfdd diff --git a/repos/os/recipes/src/vfs_capture/hash b/repos/os/recipes/src/vfs_capture/hash index bb31b0c602..ed9b395942 100644 --- a/repos/os/recipes/src/vfs_capture/hash +++ b/repos/os/recipes/src/vfs_capture/hash @@ -1 +1 @@ -2022-05-24 6cd4039ddef6ee37a57e8774a13203173eed0a4d +2022-08-16 ebefe06805ca86879e518197b5a6bdc8730f6b2f diff --git a/repos/os/recipes/src/vfs_tap/hash b/repos/os/recipes/src/vfs_tap/hash index 82e6aacb5d..4510355e44 100644 --- a/repos/os/recipes/src/vfs_tap/hash +++ b/repos/os/recipes/src/vfs_tap/hash @@ -1 +1 @@ -2022-05-24 e4fa0b3ac8c84ed7a56b165e7d15208976d5108d +2022-08-16 1ff5c0692a1bc860082436b38126b0b1b7ef63f9 diff --git a/repos/os/recipes/src/virt_qemu_drivers/hash b/repos/os/recipes/src/virt_qemu_drivers/hash index d04f4564a2..6c637195cb 100644 --- a/repos/os/recipes/src/virt_qemu_drivers/hash +++ b/repos/os/recipes/src/virt_qemu_drivers/hash @@ -1 +1 @@ -2022-05-24 2d6d2162e1dfee635faa18dc531388533227aaf7 +2022-08-16 e9fcee53ea17637cd687d512d20c2b7274cfc8b9 diff --git a/repos/os/recipes/src/virtdev_rom/hash b/repos/os/recipes/src/virtdev_rom/hash index 5d9c17e4ec..f98b54988f 100644 --- a/repos/os/recipes/src/virtdev_rom/hash +++ b/repos/os/recipes/src/virtdev_rom/hash @@ -1 +1 @@ -2022-05-24 9fdcd8de052df54ff89c31c4716fb7a9ddb8f51b +2022-08-16 39ded984de8f94503652338b46b719d79f87df81 diff --git a/repos/os/recipes/src/virtio_fb_drv/hash b/repos/os/recipes/src/virtio_fb_drv/hash index 1c91158fe6..da2dacb4fc 100644 --- a/repos/os/recipes/src/virtio_fb_drv/hash +++ b/repos/os/recipes/src/virtio_fb_drv/hash @@ -1 +1 @@ -2022-05-24 34ab0bce62cf310845b1ffe0d2be889a61684004 +2022-08-16 2078b12d6ba8aee8781724d316d4ee6943337b01 diff --git a/repos/os/recipes/src/virtio_input_drv/hash b/repos/os/recipes/src/virtio_input_drv/hash index 814a9fe620..e440317149 100644 --- a/repos/os/recipes/src/virtio_input_drv/hash +++ b/repos/os/recipes/src/virtio_input_drv/hash @@ -1 +1 @@ -2022-05-24 8fb780053fc196545a38e778306c95f3f185055c +2022-08-16 1d0a1c603ed7e06c11662f542784bbf370eda1b6 diff --git a/repos/os/recipes/src/virtio_nic_drv/hash b/repos/os/recipes/src/virtio_nic_drv/hash index eb90a71f2f..b47f1dc281 100644 --- a/repos/os/recipes/src/virtio_nic_drv/hash +++ b/repos/os/recipes/src/virtio_nic_drv/hash @@ -1 +1 @@ -2022-05-24 131a3bf3a0b61debc7d895ec76ea24a60fe8d539 +2022-08-16 055b89ccf06bbebe5f4efd21264936145cd11837 diff --git a/repos/os/recipes/src/vmm/hash b/repos/os/recipes/src/vmm/hash index 213e523cd0..ee221b6a81 100644 --- a/repos/os/recipes/src/vmm/hash +++ b/repos/os/recipes/src/vmm/hash @@ -1 +1 @@ -2022-05-24 f20338a3ac0c82e3601f32c59100710f3bdb987e +2022-08-16 cf287979d1f7fed2cd8e79fc1031216db3ec1fbd diff --git a/repos/pc/recipes/api/pc_linux/hash b/repos/pc/recipes/api/pc_linux/hash index 58e85838ab..93b5f6d7f2 100644 --- a/repos/pc/recipes/api/pc_linux/hash +++ b/repos/pc/recipes/api/pc_linux/hash @@ -1 +1 @@ -2022-05-30 5e0d68e3d29f06f6318e23d127cffd21f8f6c3fa +2022-08-16 1a13070cd6d7c135c1fdd63e3178a1e9dc73c33b diff --git a/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash b/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash index 4048e63f58..d9a802fd8f 100644 --- a/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash +++ b/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash @@ -1 +1 @@ -2022-05-30 b3adffbb3d026013ff73ae6c9701cc603bb9b2ac +2022-08-16 db6b0b6bc4c6fabbc648f7171507c791395b9b55 diff --git a/repos/pc/recipes/pkg/wifi/hash b/repos/pc/recipes/pkg/wifi/hash index 062b821cfb..1b33aff3a8 100644 --- a/repos/pc/recipes/pkg/wifi/hash +++ b/repos/pc/recipes/pkg/wifi/hash @@ -1 +1 @@ -2022-05-30 4a735e4205e73763c4f7e87f79a39d4152495381 +2022-08-16 be469496a924bbd3d1ab8b48a5681849a4424c26 diff --git a/repos/pc/recipes/src/pc_intel_fb_drv/hash b/repos/pc/recipes/src/pc_intel_fb_drv/hash index a00b09ac4e..f62feb42fd 100644 --- a/repos/pc/recipes/src/pc_intel_fb_drv/hash +++ b/repos/pc/recipes/src/pc_intel_fb_drv/hash @@ -1 +1 @@ -2022-05-30 81c39be156bfd4d01786cfb01fa00efc0f7efa72 +2022-08-16 81daca856da36c4d98d8b1e6309c730926655979 diff --git a/repos/pc/recipes/src/pc_usb_host_drv/hash b/repos/pc/recipes/src/pc_usb_host_drv/hash index 047c88d400..0f375463e7 100644 --- a/repos/pc/recipes/src/pc_usb_host_drv/hash +++ b/repos/pc/recipes/src/pc_usb_host_drv/hash @@ -1 +1 @@ -2022-05-30 1b02394376c97cdaf7532fb0a647466990cc11c9 +2022-08-16 0b9a2cca75e2d61807f6fdfe72275eb18485313a diff --git a/repos/pc/recipes/src/pc_wifi_drv/hash b/repos/pc/recipes/src/pc_wifi_drv/hash index 06c5c0906a..5adfcc5cbf 100644 --- a/repos/pc/recipes/src/pc_wifi_drv/hash +++ b/repos/pc/recipes/src/pc_wifi_drv/hash @@ -1 +1 @@ -2022-05-30 d9567624fa329add1edfabe49178f5d44f183fcf +2022-08-16 802db2aecaacfeb54a046dd5f7ed8087c7084f1e diff --git a/repos/ports/recipes/pkg/report_dump/hash b/repos/ports/recipes/pkg/report_dump/hash index b8e332ad0d..e5c9237c12 100644 --- a/repos/ports/recipes/pkg/report_dump/hash +++ b/repos/ports/recipes/pkg/report_dump/hash @@ -1 +1 @@ -2022-05-24 816a53aa1aabc533efcdf851afe3c385638c8582 +2022-08-16 193638ac2d0f7b3b86d38bf5c1a564fe0fdfcb7a diff --git a/repos/ports/recipes/pkg/system_shell/hash b/repos/ports/recipes/pkg/system_shell/hash index 2345089e70..2b715482de 100644 --- a/repos/ports/recipes/pkg/system_shell/hash +++ b/repos/ports/recipes/pkg/system_shell/hash @@ -1 +1 @@ -2022-05-24 69231685d5cdc6b0a0d7b35a5c8932a28d0b0eeb +2022-08-16 03b3ebd38de7c4c2cecc1f15e1dd1e33a88bf913 diff --git a/repos/ports/recipes/pkg/vbox5-nova-capture/hash b/repos/ports/recipes/pkg/vbox5-nova-capture/hash index 706825237b..3aefe99d81 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-capture/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-capture/hash @@ -1 +1 @@ -2022-05-24 aacbfffccaa495c66e7a6ed7eaad4d084dea4d55 +2022-08-16 d35df59c845492dc0300893df24ad6f8fd62f9e8 diff --git a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash index b429a1e3c0..4444d4ff62 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash @@ -1 +1 @@ -2022-05-24 aeac291a990e794495eb33d4f87260412b6129d8 +2022-08-16 be41a6d8566e4e2e12e89bb762dcb19892178a7d diff --git a/repos/ports/recipes/pkg/vbox5/hash b/repos/ports/recipes/pkg/vbox5/hash index dae23de503..0a94d2a267 100644 --- a/repos/ports/recipes/pkg/vbox5/hash +++ b/repos/ports/recipes/pkg/vbox5/hash @@ -1 +1 @@ -2022-05-24 69b7ff98e1b485e62bd92c713cca31c1f3812b2e +2022-08-16 be02ccd74b281554f841aecda68e2d4fd11d44f6 diff --git a/repos/ports/recipes/pkg/vbox6-capture/hash b/repos/ports/recipes/pkg/vbox6-capture/hash index cfc5a3b6fe..5509165956 100644 --- a/repos/ports/recipes/pkg/vbox6-capture/hash +++ b/repos/ports/recipes/pkg/vbox6-capture/hash @@ -1 +1 @@ -2022-05-24 8b57b7ae6ede57d71a9a92391ee3ec5bbe115150 +2022-08-16 cf955e147c879d8d4e768b46b9a43ba64b43c6d2 diff --git a/repos/ports/recipes/pkg/vbox6/hash b/repos/ports/recipes/pkg/vbox6/hash index 5ba2f352ba..c55fe613b8 100644 --- a/repos/ports/recipes/pkg/vbox6/hash +++ b/repos/ports/recipes/pkg/vbox6/hash @@ -1 +1 @@ -2022-05-24 c9d4f7d47d92ac717d61d5683d31b85d9d043817 +2022-08-16 a70630091e5d879b0108defcb6e4e68388086854 diff --git a/repos/ports/recipes/src/bash-minimal/hash b/repos/ports/recipes/src/bash-minimal/hash index d0845dc009..b0806b3f4e 100644 --- a/repos/ports/recipes/src/bash-minimal/hash +++ b/repos/ports/recipes/src/bash-minimal/hash @@ -1 +1 @@ -2022-05-24 619590515b345ac4a329afa0db5e607451849fa6 +2022-08-16 d855a3d04fdcbf197e9840473ed43d6c6ca7f2b1 diff --git a/repos/ports/recipes/src/bash/hash b/repos/ports/recipes/src/bash/hash index cb2c439861..b9cd05a337 100644 --- a/repos/ports/recipes/src/bash/hash +++ b/repos/ports/recipes/src/bash/hash @@ -1 +1 @@ -2022-05-24 0dd89e1831eb3d202afec3006b864cfd564e2d50 +2022-08-16 7412401ad560a6016508df054e6b2a7c12ce7c87 diff --git a/repos/ports/recipes/src/binutils_x86/hash b/repos/ports/recipes/src/binutils_x86/hash index a662bec58a..1daf645339 100644 --- a/repos/ports/recipes/src/binutils_x86/hash +++ b/repos/ports/recipes/src/binutils_x86/hash @@ -1 +1 @@ -2022-05-24 a727e4cb4a620a7ad0e7aa0fa7e94c7d3a05e7f4 +2022-08-16 fa5da1569bd020ccde4403e14988ebaf7fe1300d diff --git a/repos/ports/recipes/src/coreutils-minimal/hash b/repos/ports/recipes/src/coreutils-minimal/hash index ffe223ed95..f82a616887 100644 --- a/repos/ports/recipes/src/coreutils-minimal/hash +++ b/repos/ports/recipes/src/coreutils-minimal/hash @@ -1 +1 @@ -2022-05-24 67102233488577194b762fad15c6dac342abd1f7 +2022-08-16 3da85954e67584cadca7ac15e75dff422e109682 diff --git a/repos/ports/recipes/src/coreutils/hash b/repos/ports/recipes/src/coreutils/hash index 2754e6b205..2430881bf4 100644 --- a/repos/ports/recipes/src/coreutils/hash +++ b/repos/ports/recipes/src/coreutils/hash @@ -1 +1 @@ -2022-05-24 31a5e0c2accdf58a8cfafb89fca452ef9b5fadc0 +2022-08-16 4ee8c8f065c40dae4ff45c1fa76d70e03f449f82 diff --git a/repos/ports/recipes/src/diffutils/hash b/repos/ports/recipes/src/diffutils/hash index 358974e0e6..3c8925b270 100644 --- a/repos/ports/recipes/src/diffutils/hash +++ b/repos/ports/recipes/src/diffutils/hash @@ -1 +1 @@ -2022-05-24 5d313b0f3fbfa64cff78120fe57f1c21f5dfb6cf +2022-08-16 c76056fcb7c4a3bdbb5807b5112ae93377f81e10 diff --git a/repos/ports/recipes/src/e2fsprogs-minimal/hash b/repos/ports/recipes/src/e2fsprogs-minimal/hash index 7018cc9ba0..ddf26cc702 100644 --- a/repos/ports/recipes/src/e2fsprogs-minimal/hash +++ b/repos/ports/recipes/src/e2fsprogs-minimal/hash @@ -1 +1 @@ -2022-02-27 046fa1c9940906ca5ed20952f2eefa8146a64e63 +2022-08-16 f58b827cdcd631b771c4f07f8ff8c087cf9e8883 diff --git a/repos/ports/recipes/src/e2fsprogs/hash b/repos/ports/recipes/src/e2fsprogs/hash index 88f80bbaec..a470da7878 100644 --- a/repos/ports/recipes/src/e2fsprogs/hash +++ b/repos/ports/recipes/src/e2fsprogs/hash @@ -1 +1 @@ -2022-02-27 4d279fe7fcbc2bf1e80865be9d690fa940506bd0 +2022-08-16 12322484ecbc701401ad8a8b4d3741caed9fd89d diff --git a/repos/ports/recipes/src/findutils/hash b/repos/ports/recipes/src/findutils/hash index 297fafb553..d61d42c270 100644 --- a/repos/ports/recipes/src/findutils/hash +++ b/repos/ports/recipes/src/findutils/hash @@ -1 +1 @@ -2022-05-24 e073e070381e4ab140d28840ccb8f3df63ec9988 +2022-08-16 7a127151bd9b972dea13b0cb8b03b82d0d8f523e diff --git a/repos/ports/recipes/src/gcc_x86/hash b/repos/ports/recipes/src/gcc_x86/hash index db401ba227..db9311e50c 100644 --- a/repos/ports/recipes/src/gcc_x86/hash +++ b/repos/ports/recipes/src/gcc_x86/hash @@ -1 +1 @@ -2022-05-24 21ff01afd7840b4f6c254f4dcf13b9fd3d745058 +2022-08-16 598afa980ee89c5aff54efa88091ac0a05a7da72 diff --git a/repos/ports/recipes/src/gnumake/hash b/repos/ports/recipes/src/gnumake/hash index 44bca691ae..05af5e6a12 100644 --- a/repos/ports/recipes/src/gnumake/hash +++ b/repos/ports/recipes/src/gnumake/hash @@ -1 +1 @@ -2022-05-24 6a503d5b6e3f8f67838fb940c9d1f8acf70544dd +2022-08-16 5695ba81fde03922d94177d83235d0da1917121c diff --git a/repos/ports/recipes/src/grep/hash b/repos/ports/recipes/src/grep/hash index 49ba0df8ba..712fde1712 100644 --- a/repos/ports/recipes/src/grep/hash +++ b/repos/ports/recipes/src/grep/hash @@ -1 +1 @@ -2022-05-24 91d0df4c916462460e75016b2e7a879f55ecd798 +2022-08-16 0beb1fcd8285390904731da1ed64e85df1860232 diff --git a/repos/ports/recipes/src/less/hash b/repos/ports/recipes/src/less/hash index f7842e665e..e77f0fb2b4 100644 --- a/repos/ports/recipes/src/less/hash +++ b/repos/ports/recipes/src/less/hash @@ -1 +1 @@ -2022-02-27 dfcb7e80e71ab7c36c8d6a2a2339ed8d44624c4b +2022-08-16 1f5ead28fa372bf27a8404266e562f209e27f586 diff --git a/repos/ports/recipes/src/lighttpd/hash b/repos/ports/recipes/src/lighttpd/hash index df3f4db3aa..36cfc5ee22 100644 --- a/repos/ports/recipes/src/lighttpd/hash +++ b/repos/ports/recipes/src/lighttpd/hash @@ -1 +1 @@ -2022-05-24 712c3df1e840d4daf957ff8421672ea8a9fb8541 +2022-08-16 deb569d6d81e051bd13d06a76ee00ad2c8859026 diff --git a/repos/ports/recipes/src/sed/hash b/repos/ports/recipes/src/sed/hash index ce43fd2576..fbefe49e38 100644 --- a/repos/ports/recipes/src/sed/hash +++ b/repos/ports/recipes/src/sed/hash @@ -1 +1 @@ -2022-05-24 d17a596ab7ecd394fc4864cf9a79849ebe646666 +2022-08-16 21e526313f57d7b665dd23931dab36d11d70a07c diff --git a/repos/ports/recipes/src/tar/hash b/repos/ports/recipes/src/tar/hash index dd2420deb4..df32de7044 100644 --- a/repos/ports/recipes/src/tar/hash +++ b/repos/ports/recipes/src/tar/hash @@ -1 +1 @@ -2022-05-24 8defda321f0f9859a075bc7c522e3de088c3e304 +2022-08-16 363794328e37bae8a44e96d443440d99fb068fcc diff --git a/repos/ports/recipes/src/tclsh/hash b/repos/ports/recipes/src/tclsh/hash index 8c1f36db4f..d373c1b620 100644 --- a/repos/ports/recipes/src/tclsh/hash +++ b/repos/ports/recipes/src/tclsh/hash @@ -1 +1 @@ -2022-02-27 51b1a519dc0fb7e4574cdf3489a7af63f5a72ee0 +2022-08-16 62e801b7e618f246b7cfb69d98e24c54f19774e7 diff --git a/repos/ports/recipes/src/vbox5-nova/hash b/repos/ports/recipes/src/vbox5-nova/hash index df96ebb3e0..f551799d26 100644 --- a/repos/ports/recipes/src/vbox5-nova/hash +++ b/repos/ports/recipes/src/vbox5-nova/hash @@ -1 +1 @@ -2022-05-24 0dbe102f38659039e6af7e0f93de3975f4432484 +2022-08-16 4f7b53e9754f36b139b0195cabdaa2ea41ffcc57 diff --git a/repos/ports/recipes/src/vbox5/hash b/repos/ports/recipes/src/vbox5/hash index c968fedc2b..4675f0526a 100644 --- a/repos/ports/recipes/src/vbox5/hash +++ b/repos/ports/recipes/src/vbox5/hash @@ -1 +1 @@ -2022-05-24 55c2594e7a2ebb80fdbf5f7c9faa5d23bb022ed3 +2022-08-16 e7d9bd432e031fd667f5bed29161031ea516cbc2 diff --git a/repos/ports/recipes/src/vbox6/hash b/repos/ports/recipes/src/vbox6/hash index 320645d56d..a7e67fb5c7 100644 --- a/repos/ports/recipes/src/vbox6/hash +++ b/repos/ports/recipes/src/vbox6/hash @@ -1 +1 @@ -2022-05-24 fc407384ceb313b03b5f02af0753b82afa0922d0 +2022-08-16 09da4dd5e9c60ed041caaeecb9c48801da5be1b9 diff --git a/repos/ports/recipes/src/verify/hash b/repos/ports/recipes/src/verify/hash index 30b927763b..4d25d12895 100644 --- a/repos/ports/recipes/src/verify/hash +++ b/repos/ports/recipes/src/verify/hash @@ -1 +1 @@ -2022-05-24 1b0552e8dc4146b541c6325b4713c695367d02b6 +2022-08-16 542a10333ff9eb06797cb6b51c9e84dcc7bc7447 diff --git a/repos/ports/recipes/src/vim-minimal/hash b/repos/ports/recipes/src/vim-minimal/hash index 1b4af1eb66..c5da226b0d 100644 --- a/repos/ports/recipes/src/vim-minimal/hash +++ b/repos/ports/recipes/src/vim-minimal/hash @@ -1 +1 @@ -2022-02-27 791a0fa187019a0e78e2b296a2d98ba1431898ba +2022-08-16 849371b46c1196690a7d4f6b1ea182af8adc84eb diff --git a/repos/ports/recipes/src/vim/hash b/repos/ports/recipes/src/vim/hash index d3a3014c9e..4e31b98aeb 100644 --- a/repos/ports/recipes/src/vim/hash +++ b/repos/ports/recipes/src/vim/hash @@ -1 +1 @@ -2022-02-27 7e10043b21613b0d7af374c658d087361ff1f099 +2022-08-16 3b899a26f379368847e9ecc921d38ee4a2ce2ee8 diff --git a/repos/ports/recipes/src/which/hash b/repos/ports/recipes/src/which/hash index d921ebeb18..8d71af8000 100644 --- a/repos/ports/recipes/src/which/hash +++ b/repos/ports/recipes/src/which/hash @@ -1 +1 @@ -2022-05-24 3a608208a4eb46947fa2086f99dc8b4fe8c81380 +2022-08-16 8bdb0bd9a2bebf180f133c86f53bc6f3cda72e51 From 8f228e3035bc2ea762523dfb81740d379325bfc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20B=C3=A4r?= Date: Sat, 16 Jul 2022 17:29:55 +0200 Subject: [PATCH 166/354] nic_router: no ICMP on unroutable IPv4 multicast The NIC router used to send an ICMP "Destination Unreachable" packet as response to every unroutable IPv4 packet. However, RFC 1812 section 4.3.2.7 defines certain properties that must be fullfilled by an incoming packet in order to be answered with this type of ICMP. One requirement is that the packet is no IPv4 multicast. This commit prevents sending the mentioned ICMP response for unroutable IPv4 multicasts and instead drops them silently. Fixes #4563 --- repos/os/include/net/ipv4.h | 2 ++ repos/os/src/lib/net/ipv4.cc | 6 ++++++ repos/os/src/server/nic_router/interface.cc | 18 +++++++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/repos/os/include/net/ipv4.h b/repos/os/include/net/ipv4.h index 41380a4e1d..3327bf9962 100644 --- a/repos/os/include/net/ipv4.h +++ b/repos/os/include/net/ipv4.h @@ -56,6 +56,8 @@ struct Net::Ipv4_address : Network_address bool is_in_range(Ipv4_address const &first, Ipv4_address const &last) const; + + bool is_multicast() const; } __attribute__((packed)); diff --git a/repos/os/src/lib/net/ipv4.cc b/repos/os/src/lib/net/ipv4.cc index cc33996343..3e256e9c12 100644 --- a/repos/os/src/lib/net/ipv4.cc +++ b/repos/os/src/lib/net/ipv4.cc @@ -41,6 +41,12 @@ void Net::Ipv4_packet::print(Genode::Output &output) const } +bool Ipv4_address::is_multicast() const +{ + return (addr[0] & 0xf0) == 0b11100000; +} + + bool Ipv4_address::is_in_range(Ipv4_address const &first, Ipv4_address const &last) const { diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 77df57ff0d..25b74247af 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1391,9 +1391,21 @@ void Interface::_handle_ip(Ethernet_frame ð, return; } - /* give up and drop packet */ - _send_icmp_dst_unreachable(local_intf, eth, ip, - Icmp_packet::Code::DST_NET_UNREACHABLE); + /* + * Give up and drop packet. According to RFC 1812 section 4.3.2.7, an ICMP + * "Destination Unreachable" is sent as response only if the dropped + * packet fullfills certain properties. + * + * FIXME + * + * There are some properties required by the RFC that are not yet checked + * at this point. + */ + if(not ip.dst().is_multicast()) { + + _send_icmp_dst_unreachable(local_intf, eth, ip, + Icmp_packet::Code::DST_NET_UNREACHABLE); + } if (_config().verbose()) { log("[", local_domain, "] unroutable packet"); } } From 3286d37c64a04294e9dca7b8bafa427ef1aeb294 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 22 Jun 2022 14:30:08 +0200 Subject: [PATCH 167/354] pcsc-lite: src and api recipe Ref #4582 --- .../libports/recipes/api/pcsc-lite/content.mk | 19 +++++ repos/libports/recipes/api/pcsc-lite/hash | 1 + repos/libports/recipes/src/pcsc-lite/api | 1 + .../libports/recipes/src/pcsc-lite/content.mk | 70 +++++++++++++++++++ repos/libports/recipes/src/pcsc-lite/hash | 1 + .../libports/recipes/src/pcsc-lite/used_apis | 3 + 6 files changed, 95 insertions(+) create mode 100644 repos/libports/recipes/api/pcsc-lite/content.mk create mode 100644 repos/libports/recipes/api/pcsc-lite/hash create mode 100644 repos/libports/recipes/src/pcsc-lite/api create mode 100644 repos/libports/recipes/src/pcsc-lite/content.mk create mode 100644 repos/libports/recipes/src/pcsc-lite/hash create mode 100644 repos/libports/recipes/src/pcsc-lite/used_apis diff --git a/repos/libports/recipes/api/pcsc-lite/content.mk b/repos/libports/recipes/api/pcsc-lite/content.mk new file mode 100644 index 0000000000..63e9fb9ace --- /dev/null +++ b/repos/libports/recipes/api/pcsc-lite/content.mk @@ -0,0 +1,19 @@ +MIRROR_FROM_REP_DIR := lib/import/import-pcsc-lite.mk + +content: $(MIRROR_FROM_REP_DIR) + +$(MIRROR_FROM_REP_DIR): + $(mirror_from_rep_dir) + +PORT_DIR := $(call port_dir,$(REP_DIR)/ports/pcsc-lite) + +content: include + +include: + mkdir -p $@ + cp -r $(PORT_DIR)/include/PCSC/* $@ + +content: LICENSE + +LICENSE: + cp $(PORT_DIR)/src/lib/pcsc-lite/COPYING $@ diff --git a/repos/libports/recipes/api/pcsc-lite/hash b/repos/libports/recipes/api/pcsc-lite/hash new file mode 100644 index 0000000000..507fb5c6f4 --- /dev/null +++ b/repos/libports/recipes/api/pcsc-lite/hash @@ -0,0 +1 @@ +2022-06-15 f2d91225517ac072d1a539515f1970507cf16519 diff --git a/repos/libports/recipes/src/pcsc-lite/api b/repos/libports/recipes/src/pcsc-lite/api new file mode 100644 index 0000000000..5d61c52aeb --- /dev/null +++ b/repos/libports/recipes/src/pcsc-lite/api @@ -0,0 +1 @@ +pcsc-lite diff --git a/repos/libports/recipes/src/pcsc-lite/content.mk b/repos/libports/recipes/src/pcsc-lite/content.mk new file mode 100644 index 0000000000..9d080989d5 --- /dev/null +++ b/repos/libports/recipes/src/pcsc-lite/content.mk @@ -0,0 +1,70 @@ +CCID_DIR := $(call port_dir,$(REP_DIR)/ports/ccid) +PCSC_DIR := $(call port_dir,$(REP_DIR)/ports/pcsc-lite) + +MIRROR_FROM_CCID_DIR := \ + $(shell \ + cd $(CCID_DIR); \ + find src/lib/ccid -type f | \ + grep -v "\.git") + +MIRROR_FROM_PCSC_DIR := \ + $(shell cd $(PCSC_DIR); find include -type f) \ + $(shell \ + cd $(PCSC_DIR); \ + find src/lib/pcsc-lite -type f | \ + grep -v "\.git") \ + +MIRROR_FROM_REP_DIR += \ + lib/mk/pcsc-lite.mk \ + lib/mk/ccid.mk \ + $(shell cd $(REP_DIR) && find src/lib/pcsc-lite -type f) \ + $(shell cd $(REP_DIR) && find src/lib/ccid -type f) + +MIRROR_FROM_CCID_DIR := \ + $(filter-out $(MIRROR_FROM_REP_DIR), $(MIRROR_FROM_CCID_DIR)) + +MIRROR_FROM_PCSC_DIR := \ + $(filter-out $(MIRROR_FROM_REP_DIR), $(MIRROR_FROM_PCSC_DIR)) + +content: $(MIRROR_FROM_CCID_DIR) + +$(MIRROR_FROM_CCID_DIR): + mkdir -p $(dir $@) + cp -r $(CCID_DIR)/$@ $(dir $@) + +content: $(MIRROR_FROM_PCSC_DIR) + +$(MIRROR_FROM_PCSC_DIR): + mkdir -p $(dir $@) + cp -r $(PCSC_DIR)/$@ $(dir $@) + +content: $(MIRROR_FROM_REP_DIR) + +$(MIRROR_FROM_REP_DIR): + $(mirror_from_rep_dir) + +content: src/lib/pcsc-lite/target.mk + +src/lib/pcsc-lite/target.mk: + mkdir -p $(dir $@) + echo "LIBS = pcsc-lite" > $@ + +content: src/lib/ccid/target.mk + +src/lib/ccid/target.mk: + mkdir -p $(dir $@) + echo "LIBS = ccid" > $@ + +content: LICENSE + +LICENSE: + echo "" >> $@ + echo "ccid library" >> $@ + echo "############" >> $@ + echo "" >> $@ + cat $(CCID_DIR)/src/lib/ccid/COPYING >> $@ + echo "" >> $@ + echo "pcsc-lite library" >> $@ + echo "#################" >> $@ + echo "" >> $@ + cat $(PCSC_DIR)/src/lib/pcsc-lite/COPYING >> $@ diff --git a/repos/libports/recipes/src/pcsc-lite/hash b/repos/libports/recipes/src/pcsc-lite/hash new file mode 100644 index 0000000000..8be667410b --- /dev/null +++ b/repos/libports/recipes/src/pcsc-lite/hash @@ -0,0 +1 @@ +2022-06-20-h 540ad8c43f8a0643107072ae2cb7585f253dd37f diff --git a/repos/libports/recipes/src/pcsc-lite/used_apis b/repos/libports/recipes/src/pcsc-lite/used_apis new file mode 100644 index 0000000000..92e540435e --- /dev/null +++ b/repos/libports/recipes/src/pcsc-lite/used_apis @@ -0,0 +1,3 @@ +base +libc +libusb From d0a33e34da307a4630fd53de31ad2d7a2255ce90 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 1 Jul 2022 12:35:37 +0200 Subject: [PATCH 168/354] pcsc-lite: fix inc dir base in depot case Fixes #4582 --- repos/libports/lib/import/import-pcsc-lite.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/repos/libports/lib/import/import-pcsc-lite.mk b/repos/libports/lib/import/import-pcsc-lite.mk index 63fadc8239..eeda106512 100644 --- a/repos/libports/lib/import/import-pcsc-lite.mk +++ b/repos/libports/lib/import/import-pcsc-lite.mk @@ -1 +1,5 @@ +ifeq ($(CONTRIB_DIR),) +REP_INC_DIR += include/PCSC +else INC_DIR += $(call select_from_ports,pcsc-lite)/include/PCSC +endif From 5319f36788c6d6e3333fd89fe7e6ffb2f6574214 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 17 Aug 2022 12:30:38 +0200 Subject: [PATCH 169/354] util/string.h: support 'int' for 'ascii_to' This patch complements the 'long' version of the 'ascii_to' conversion function by an 'int' version. Fixes #4583 --- repos/base/include/util/string.h | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/repos/base/include/util/string.h b/repos/base/include/util/string.h index 683070132e..f82fbabacb 100644 --- a/repos/base/include/util/string.h +++ b/repos/base/include/util/string.h @@ -459,20 +459,21 @@ namespace Genode { /** - * Read signed long value from string + * Read signed value from string * * \return number of consumed characters */ - inline size_t ascii_to(const char *s, long &result) + template + inline size_t ascii_to_signed(const char *s, T &result) { - int i = 0; + size_t i = 0; /* read sign */ int sign = (*s == '-') ? -1 : 1; if (*s == '-' || *s == '+') { s++; i++; } - unsigned long value = 0; + T value = 0; size_t const j = ascii_to_unsigned(s, value, 0); @@ -484,6 +485,28 @@ namespace Genode { } + /** + * Read signed long value from string + * + * \return number of consumed characters + */ + inline size_t ascii_to(const char *s, long &result) + { + return ascii_to_signed(s, result); + } + + + /** + * Read signed integer value from string + * + * \return number of consumed characters + */ + inline size_t ascii_to(const char *s, int &result) + { + return ascii_to_signed(s, result); + } + + /** * Read 'Number_of_bytes' value from string and handle the size suffixes * From 42edac8a34c3eeeef05189ea2b8538ed1c1137da Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 17 Aug 2022 12:37:13 +0200 Subject: [PATCH 170/354] util/geometry: support 'Rect::from_xml' This patch eases the creation of 'Point', 'Area', and 'Rect' objects from XML attribute values. Fixes #4584 --- repos/os/include/util/geometry.h | 38 +++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/repos/os/include/util/geometry.h b/repos/os/include/util/geometry.h index 7fdbef5c38..a4080cc936 100644 --- a/repos/os/include/util/geometry.h +++ b/repos/os/include/util/geometry.h @@ -15,6 +15,7 @@ #define _INCLUDE__UTIL__GEOMETRY_H_ #include +#include #include #include @@ -68,6 +69,17 @@ class Genode::Point Genode::print(out, _x >= 0 ? "+" : "-", abs(_x), _y >= 0 ? "+" : "-", abs(_y)); } + + /** + * Construct point from XML node attributes + * + * The XML node is expected to feature the attributes 'xpos' and 'ypos'. + */ + static Point from_xml(Xml_node const &node) + { + return Point((CT)node.attribute_value("xpos", (CT)0), + (CT)node.attribute_value("ypos", (CT)0)); + } }; @@ -104,6 +116,18 @@ class Genode::Area bool operator == (Area const &a) const { return a.w() == _w && a.h() == _h; } void print(Output &out) const { Genode::print(out, _w, "x", _h); } + + /** + * Construct area from XML node attributes + * + * The XML node is expected to feature the attributes 'width' and + * 'height'. + */ + static Area from_xml(Xml_node const &node) + { + return Area((DT)node.attribute_value("width", (DT)0), + (DT)node.attribute_value("height", (DT)0)); + } }; @@ -210,9 +234,21 @@ class Genode::Rect * * The output has the form 'width' x 'height' +/- 'p1.x' +/- 'p1.y'. * For example, a rectange of size 15x16 as position (-13, 14) is - * printed as "15x16-13+14" + * printed as "15x16-13+14". */ void print(Output &out) const { Genode::print(out, area(), p1()); } + + /** + * Construct rectangle from XML node attributes + * + * The XML node is expected to feature the attributes 'xpos', 'ypos'. + * 'width', and 'height'. If an attribute is absent, the corresponding + * value is set to 0. + */ + static Rect from_xml(Xml_node const &node) + { + return Rect(Point::from_xml(node), Area
::from_xml(node)); + } }; #endif /* _INCLUDE__UTIL__GEOMETRY_H_ */ From fb454a28fefaa79dde2cac74535e5bf4dbf2cfc5 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Wed, 17 Aug 2022 14:16:47 +0200 Subject: [PATCH 171/354] libc: support 'thread_local' variable destructors Fixes #4585 --- repos/libports/lib/symbols/libc | 1 + repos/libports/ports/libc.hash | 2 +- .../src/lib/libc/patches/thread_local.patch | 20 +++++++++ repos/libports/src/lib/libc/pthread.cc | 7 ++++ repos/libports/src/test/pthread/main.cc | 41 +++++++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) diff --git a/repos/libports/lib/symbols/libc b/repos/libports/lib/symbols/libc index 39bfa2f733..e3de45d2d5 100644 --- a/repos/libports/lib/symbols/libc +++ b/repos/libports/lib/symbols/libc @@ -1294,6 +1294,7 @@ __cxa_guard_release T __cxa_init_primary_exception T __cxa_pure_virtual T __cxa_rethrow T +__cxa_thread_atexit T __cxa_throw T __cxa_throw_bad_array_length T __cxa_throw_bad_array_new_length T diff --git a/repos/libports/ports/libc.hash b/repos/libports/ports/libc.hash index a471669f14..f0b791929a 100644 --- a/repos/libports/ports/libc.hash +++ b/repos/libports/ports/libc.hash @@ -1 +1 @@ -b856473bd43dea76e963f35bdbdd1d49d2d70e6b +a4d148016cfbc4c494b277e164d67617cf540e31 diff --git a/repos/libports/src/lib/libc/patches/thread_local.patch b/repos/libports/src/lib/libc/patches/thread_local.patch index 89fa01b06b..f3356ff325 100644 --- a/repos/libports/src/lib/libc/patches/thread_local.patch +++ b/repos/libports/src/lib/libc/patches/thread_local.patch @@ -21,3 +21,23 @@ #endif /* __STDC_VERSION__ || __STDC_VERSION__ < 201112L */ /* +--- src/lib/libc/lib/libc/stdlib/cxa_thread_atexit_impl.c.orig 2022-08-16 17:53:26.334343226 +0200 ++++ src/lib/libc/lib/libc/stdlib/cxa_thread_atexit_impl.c 2022-08-17 13:37:34.445860493 +0200 +@@ -105,12 +105,17 @@ + { + struct dl_phdr_info phdr_info; + ++/* XXX this unload detection mechanism does not work on Genode */ ++#if 0 + if (_rtld_addr_phdr(dtor->dso, &phdr_info) && + __elf_phdr_match_addr(&phdr_info, dtor->func)) ++#endif + dtor->func(dtor->obj); ++#if 0 + else + fprintf(stderr, "__cxa_thread_call_dtors: dtr %p from " + "unloaded dso, skipping\n", (void *)(dtor->func)); ++#endif + } + + static void diff --git a/repos/libports/src/lib/libc/pthread.cc b/repos/libports/src/lib/libc/pthread.cc index 9619800dd7..8481dac372 100644 --- a/repos/libports/src/lib/libc/pthread.cc +++ b/repos/libports/src/lib/libc/pthread.cc @@ -685,8 +685,15 @@ extern "C" { } + /* implemented in libc contrib sources */ + void __cxa_thread_call_dtors(); + void pthread_exit(void *value_ptr) { + /* call 'thread_local' destructors */ + + __cxa_thread_call_dtors(); + /* call TLS key destructors */ bool at_least_one_destructor_called; diff --git a/repos/libports/src/test/pthread/main.cc b/repos/libports/src/test/pthread/main.cc index 4fce74233c..bf7a9e406c 100644 --- a/repos/libports/src/test/pthread/main.cc +++ b/repos/libports/src/test/pthread/main.cc @@ -1153,6 +1153,46 @@ static void test_tls() } +static bool thread_local_destructor_called = false; + + +struct Thread_local +{ + int x = 0; + + ~Thread_local() + { + thread_local_destructor_called = true; + } +}; + + +static thread_local Thread_local thread_local_var; + + +static void *thread_local_test_func(void *) +{ + /* must access the variable to have the destructor called */ + thread_local_var.x = 1; + return nullptr; +} + + +static void test_thread_local_destructor() +{ + pthread_t t; + void *retval; + + pthread_create(&t, 0, thread_local_test_func, nullptr); + pthread_join(t, &retval); + + if (!thread_local_destructor_called) { + Genode::error("thread_local destructor was not called"); + exit(-1); + } +} + + int main(int argc, char **argv) { printf("--- pthread test ---\n"); @@ -1171,6 +1211,7 @@ int main(int argc, char **argv) test_cond(); test_cleanup(); test_tls(); + test_thread_local_destructor(); printf("--- returning from main ---\n"); return 0; From 381a3406ba18670d435057e5db5b30af6aec983a Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 17 Aug 2022 16:31:31 +0200 Subject: [PATCH 172/354] sculpt: evaluate initial manual nic_router config Fixes #4586 --- repos/gems/src/app/sculpt_manager/main.cc | 6 -- .../src/app/sculpt_manager/managed_config.h | 6 ++ repos/gems/src/app/sculpt_manager/network.cc | 71 +++++++------------ repos/gems/src/app/sculpt_manager/network.h | 19 ++--- 4 files changed, 42 insertions(+), 60 deletions(-) diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 2c409c72a1..936e56cc5f 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -1765,12 +1765,6 @@ void Sculpt::Main::_handle_runtime_state() } }); - /* - * Re-attempt NIC-router configuration as the uplink may have become - * available in the meantime. - */ - _network.reattempt_nic_router_config(); - if (_deploy.update_child_conditions()) { reconfigure_runtime = true; regenerate_dialog = true; diff --git a/repos/gems/src/app/sculpt_manager/managed_config.h b/repos/gems/src/app/sculpt_manager/managed_config.h index 8188c262a5..0122f6b726 100644 --- a/repos/gems/src/app/sculpt_manager/managed_config.h +++ b/repos/gems/src/app/sculpt_manager/managed_config.h @@ -68,6 +68,12 @@ struct Sculpt::Managed_config (_obj.*_handle)(_manual_config_rom.xml()); } + template + void with_manual_config(FN const &fn) const + { + fn(_manual_config_rom.xml()); + } + /** * \return true if manually-managed configuration could be used */ diff --git a/repos/gems/src/app/sculpt_manager/network.cc b/repos/gems/src/app/sculpt_manager/network.cc index 365a4994f8..e1a6d59046 100644 --- a/repos/gems/src/app/sculpt_manager/network.cc +++ b/repos/gems/src/app/sculpt_manager/network.cc @@ -56,16 +56,6 @@ void Sculpt::Network::handle_key_press(Codepoint code) void Sculpt::Network::_generate_nic_router_config() { - if ((_nic_target.wired() && !_runtime_info.present_in_runtime("nic_drv")) - || (_nic_target.wifi() && !_runtime_info.present_in_runtime("wifi_drv"))) { - - /* defer NIC router reconfiguration until the needed uplink is present */ - _nic_router_config_up_to_date = false; - return; - } - - _nic_router_config_up_to_date = true; - if (_nic_router_config.try_generate_manually_managed()) return; @@ -164,50 +154,43 @@ void Sculpt::Network::_handle_nic_router_state() } -void Sculpt::Network::_handle_nic_router_config(Xml_node config) +void Sculpt::Network::_update_nic_target_from_config(Xml_node const &config) { - Nic_target::Type target = _nic_target.managed_type; - _nic_target.policy = config.has_type("empty") ? Nic_target::MANAGED : Nic_target::MANUAL; - if (_nic_target.manual()) { - - /* obtain uplink information from configuration */ - target = Nic_target::LOCAL; - + /* obtain uplink information from configuration */ + auto nic_target_from_config = [] (Xml_node const &config) + { if (!config.has_sub_node("domain")) - target = Nic_target::OFF; + return Nic_target::OFF; - struct Break : Exception { }; - try { - config.for_each_sub_node("domain", [&] (Xml_node domain) { + Nic_target::Type result = Nic_target::LOCAL; - /* skip domains that are not called "uplink" */ - if (domain.attribute_value("name", String<16>()) != "uplink") - return; + config.for_each_sub_node("policy", [&] (Xml_node uplink) { - config.for_each_sub_node("policy", [&] (Xml_node uplink) { + /* skip uplinks not assigned to a domain called "uplink" */ + if (uplink.attribute_value("domain", String<16>()) != "uplink") + return; - /* skip uplinks not assigned to a domain called "uplink" */ - if (uplink.attribute_value("domain", String<16>()) != "uplink") - return; + if (uplink.attribute_value("label", String<16>()) == "nic_drv -> ") + result = Nic_target::WIRED; - if (uplink.attribute_value("label", String<16>()) == "nic_drv -> ") { - target = Nic_target::WIRED; - throw Break(); - } - if (uplink.attribute_value("label", String<16>()) == "wifi_drv -> ") { - target = Nic_target::WIFI; - throw Break(); - } - }); - }); - } catch (Break) { } - _nic_target.manual_type = target; - } + if (uplink.attribute_value("label", String<16>()) == "wifi_drv -> ") + result = Nic_target::WIFI; + }); + return result; + }; - nic_target(target); + if (_nic_target.manual()) + _nic_target.manual_type = nic_target_from_config(config); +} + + + +void Sculpt::Network::_handle_nic_router_config(Xml_node config) +{ + _update_nic_target_from_config(config); _generate_nic_router_config(); _runtime_config_generator.generate_runtime_config(); _menu_view.generate(); @@ -241,11 +224,9 @@ void Sculpt::Network::gen_runtime_start_nodes(Xml_generator &xml) const break; case Nic_target::OFF: - break; case Nic_target::UNDEFINED: - break; } } diff --git a/repos/gems/src/app/sculpt_manager/network.h b/repos/gems/src/app/sculpt_manager/network.h index 1eb41732e3..fd22886512 100644 --- a/repos/gems/src/app/sculpt_manager/network.h +++ b/repos/gems/src/app/sculpt_manager/network.h @@ -47,8 +47,6 @@ struct Sculpt::Network : Network_dialog::Action Nic_target _nic_target { }; Nic_state _nic_state { }; - bool _nic_router_config_up_to_date = false; - Wpa_passphrase wpa_passphrase { }; unsigned _nic_drv_version = 0; @@ -135,11 +133,7 @@ struct Sculpt::Network : Network_dialog::Action wifi_disconnect(); } - void reattempt_nic_router_config() - { - if (_nic_target.nic_router_needed() && !_nic_router_config_up_to_date) - _generate_nic_router_config(); - } + void _update_nic_target_from_config(Xml_node const &); /** * Network_dialog::Action interface @@ -235,14 +229,21 @@ struct Sculpt::Network : Network_dialog::Action _runtime_config_generator(runtime_config_generator), _runtime_info(runtime_info), _pci_info(pci_info) { - _generate_nic_router_config(); - /* * Subscribe to reports */ _wlan_accesspoints_rom.sigh(_wlan_accesspoints_handler); _wlan_state_rom .sigh(_wlan_state_handler); _nic_router_state_rom .sigh(_nic_router_state_handler); + + /* + * Evaluate and forward initial manually managed config + */ + _nic_router_config.with_manual_config([&] (Xml_node const &config) { + _update_nic_target_from_config(config); }); + + if (_nic_target.manual()) + _generate_nic_router_config(); } }; From f64d1bbc307111875a34bdb6ee9384029eca7b37 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 21 Jun 2022 15:29:07 +0200 Subject: [PATCH 173/354] vfs_libusb: fix missing dependency to libusb Ref #4582 --- repos/libports/lib/mk/vfs_libusb.mk | 2 ++ repos/libports/recipes/src/vfs_libusb/used_apis | 1 + 2 files changed, 3 insertions(+) diff --git a/repos/libports/lib/mk/vfs_libusb.mk b/repos/libports/lib/mk/vfs_libusb.mk index 6d7d7e734d..1a794b2444 100644 --- a/repos/libports/lib/mk/vfs_libusb.mk +++ b/repos/libports/lib/mk/vfs_libusb.mk @@ -1,5 +1,7 @@ SRC_CC = vfs_libusb.cc +LIBS += libusb + vpath %.cc $(REP_DIR)/src/lib/vfs/libusb SHARED_LIB = yes diff --git a/repos/libports/recipes/src/vfs_libusb/used_apis b/repos/libports/recipes/src/vfs_libusb/used_apis index 5830357be3..41c5737b00 100644 --- a/repos/libports/recipes/src/vfs_libusb/used_apis +++ b/repos/libports/recipes/src/vfs_libusb/used_apis @@ -3,3 +3,4 @@ os so usb_session vfs +libusb From 08279e6288798c17b7b722b7a86a15b6832092bc Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 17 Aug 2022 13:33:58 +0200 Subject: [PATCH 174/354] Create Point, Area, Rect via 'from_xml' functions By using the new functions provided by the base API, this patch removes the dependency of several components from include/decorator/xml_utils.h. Issue #4584 --- repos/gems/recipes/src/backdrop/content.mk | 6 --- repos/gems/recipes/src/menu_view/content.mk | 6 +-- .../recipes/src/window_layouter/content.mk | 8 ---- repos/gems/src/app/backdrop/main.cc | 3 +- repos/gems/src/app/decorator/main.cc | 2 +- repos/gems/src/app/decorator/window.cc | 2 +- repos/gems/src/app/menu_view/main.cc | 10 ++--- repos/gems/src/app/menu_view/types.h | 1 - repos/gems/src/app/sculpt_manager/graph.cc | 23 +++++------- repos/gems/src/app/sculpt_manager/main.cc | 4 +- repos/gems/src/app/themed_decorator/main.cc | 2 +- repos/gems/src/app/themed_decorator/theme.cc | 6 +-- repos/gems/src/app/themed_decorator/window.h | 2 +- repos/gems/src/app/window_layouter/assign.h | 4 +- repos/gems/src/app/window_layouter/types.h | 12 ++---- .../src/app/window_layouter/window_list.h | 4 +- repos/os/include/decorator/xml_utils.h | 37 +------------------ 17 files changed, 32 insertions(+), 100 deletions(-) diff --git a/repos/gems/recipes/src/backdrop/content.mk b/repos/gems/recipes/src/backdrop/content.mk index e2053b242f..5d7cd07a6a 100644 --- a/repos/gems/recipes/src/backdrop/content.mk +++ b/repos/gems/recipes/src/backdrop/content.mk @@ -1,8 +1,2 @@ SRC_DIR := src/app/backdrop include $(GENODE_DIR)/repos/base/recipes/src/content.inc - -content: include/decorator - -include/decorator: - mkdir -p $@ - cp $(GENODE_DIR)/repos/os/include/decorator/* $@ diff --git a/repos/gems/recipes/src/menu_view/content.mk b/repos/gems/recipes/src/menu_view/content.mk index 594a88039b..12400e46e6 100644 --- a/repos/gems/recipes/src/menu_view/content.mk +++ b/repos/gems/recipes/src/menu_view/content.mk @@ -1,11 +1,7 @@ SRC_DIR := src/app/menu_view include $(GENODE_DIR)/repos/base/recipes/src/content.inc -content: include/decorator include/polygon_gfx - -include/decorator: - mkdir -p $@ - cp $(GENODE_DIR)/repos/os/include/decorator/* $@ +content: include/polygon_gfx include/polygon_gfx: mkdir -p $@ diff --git a/repos/gems/recipes/src/window_layouter/content.mk b/repos/gems/recipes/src/window_layouter/content.mk index 6584a2af41..053d21706f 100644 --- a/repos/gems/recipes/src/window_layouter/content.mk +++ b/repos/gems/recipes/src/window_layouter/content.mk @@ -1,10 +1,2 @@ SRC_DIR := src/app/window_layouter include $(GENODE_DIR)/repos/base/recipes/src/content.inc - -DECORATOR_INCLUDES := $(addprefix include/decorator/,xml_utils.h types.h) - -content: $(DECORATOR_INCLUDES) - -$(DECORATOR_INCLUDES): - mkdir -p $(dir $@) - cp $(GENODE_DIR)/repos/os/$@ $@ diff --git a/repos/gems/src/app/backdrop/main.cc b/repos/gems/src/app/backdrop/main.cc index 42b34e2675..de00fa8aa6 100644 --- a/repos/gems/src/app/backdrop/main.cc +++ b/repos/gems/src/app/backdrop/main.cc @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -262,7 +261,7 @@ void Backdrop::Main::_apply_image(Xml_node operation) : anchor.vertical == Anchor::HIGH ? v_gap : 0; - Point const offset = Decorator::point_attribute(operation); + Point const offset = Point::from_xml(operation); Point const pos = Point(anchored_xpos, anchored_ypos) + offset; diff --git a/repos/gems/src/app/decorator/main.cc b/repos/gems/src/app/decorator/main.cc index 4440d51551..67983ffa2e 100644 --- a/repos/gems/src/app/decorator/main.cc +++ b/repos/gems/src/app/decorator/main.cc @@ -232,7 +232,7 @@ find_hover(Genode::Xml_node pointer_node, Decorator::Window_stack &window_stack) || !pointer_node.has_attribute("ypos")) return Decorator::Window_base::Hover(); - return window_stack.hover(Decorator::point_attribute(pointer_node)); + return window_stack.hover(Decorator::Point::from_xml(pointer_node)); } diff --git a/repos/gems/src/app/decorator/window.cc b/repos/gems/src/app/decorator/window.cc index ad67c6c900..5895388cf4 100644 --- a/repos/gems/src/app/decorator/window.cc +++ b/repos/gems/src/app/decorator/window.cc @@ -202,7 +202,7 @@ bool Decorator::Window::update(Genode::Xml_node window_node) /* * Detect geometry changes */ - Rect new_geometry = rect_attribute(window_node); + Rect new_geometry = Rect::from_xml(window_node); if (new_geometry.p1() != geometry().p1() || new_geometry.p2() != geometry().p2()) { diff --git a/repos/gems/src/app/menu_view/main.cc b/repos/gems/src/app/menu_view/main.cc index ef818f25ff..e27a39909c 100644 --- a/repos/gems/src/app/menu_view/main.cc +++ b/repos/gems/src/app/menu_view/main.cc @@ -255,14 +255,10 @@ void Menu_view::Main::_handle_dialog_update() { _styles.flush_outdated_styles(); - try { - Xml_node const config = _config.xml(); + Xml_node const config = _config.xml(); - _position = Decorator::point_attribute(config); - - _configured_size = Area(config.attribute_value("width", 0U), - config.attribute_value("height", 0U)); - } catch (...) { } + _position = Point::from_xml(config); + _configured_size = Area ::from_xml(config); _dialog_rom.update(); diff --git a/repos/gems/src/app/menu_view/types.h b/repos/gems/src/app/menu_view/types.h index 15860c2af4..99c24ff874 100644 --- a/repos/gems/src/app/menu_view/types.h +++ b/repos/gems/src/app/menu_view/types.h @@ -17,7 +17,6 @@ /* Genode includes */ #include #include -#include #include #include #include diff --git a/repos/gems/src/app/sculpt_manager/graph.cc b/repos/gems/src/app/sculpt_manager/graph.cc index 2e179f5e8b..225d5a7ee2 100644 --- a/repos/gems/src/app/sculpt_manager/graph.cc +++ b/repos/gems/src/app/sculpt_manager/graph.cc @@ -302,25 +302,22 @@ Dialog::Hover_result Graph::hover(Xml_node hover) /* update anchor geometry of popup menu */ auto hovered_rect = [] (Xml_node const dialog) { - if (!dialog.has_type("dialog")) return Rect(); + if (!dialog.has_type("dialog")) + return Rect(); - auto point_from_xml = [] (Xml_node node) { - return Point((int)node.attribute_value("xpos", 0L), - (int)node.attribute_value("ypos", 0L)); }; + if (!dialog.has_sub_node("depgraph")) + return Rect(); - auto area_from_xml = [] (Xml_node node) { - return Area(node.attribute_value("width", 0U), - node.attribute_value("height", 0U)); }; - - if (!dialog.has_sub_node("depgraph")) return Rect(); Xml_node const depgraph = dialog.sub_node("depgraph"); - if (!depgraph.has_sub_node("button")) return Rect(); + if (!depgraph.has_sub_node("button")) + return Rect(); + Xml_node const button = depgraph.sub_node("button"); - return Rect(point_from_xml(dialog) + point_from_xml(depgraph) + - point_from_xml(button), - area_from_xml(button)); + return Rect(Point::from_xml(dialog) + Point::from_xml(depgraph) + + Point::from_xml(button), + Area::from_xml(button)); }; _popup_anchor = hovered_rect(hover); diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 936e56cc5f..5e78da4d03 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -1289,9 +1289,7 @@ void Sculpt::Main::_handle_window_layout() _window_list.update(); Xml_node const window_list = _window_list.xml(); - auto win_size = [&] (Xml_node win) { - return Area(win.attribute_value("width", 0U), - win.attribute_value("height", 0U)); }; + auto win_size = [&] (Xml_node win) { return Area::from_xml(win); }; unsigned panel_height = 0; _with_window(window_list, panel_view_label, [&] (Xml_node win) { diff --git a/repos/gems/src/app/themed_decorator/main.cc b/repos/gems/src/app/themed_decorator/main.cc index a8d1f05b70..c751df8cc9 100644 --- a/repos/gems/src/app/themed_decorator/main.cc +++ b/repos/gems/src/app/themed_decorator/main.cc @@ -217,7 +217,7 @@ find_hover(Genode::Xml_node pointer_node, Decorator::Window_stack &window_stack) || !pointer_node.has_attribute("ypos")) return Decorator::Window_base::Hover(); - return window_stack.hover(Decorator::point_attribute(pointer_node)); + return window_stack.hover(Decorator::Point::from_xml(pointer_node)); } diff --git a/repos/gems/src/app/themed_decorator/theme.cc b/repos/gems/src/app/themed_decorator/theme.cc index 8b55f595ba..7c3bb785bb 100644 --- a/repos/gems/src/app/themed_decorator/theme.cc +++ b/repos/gems/src/app/themed_decorator/theme.cc @@ -149,8 +149,8 @@ Decorator::Theme::Margins Decorator::Theme::decor_margins() const Decorator::Rect Decorator::Theme::title_geometry() const { static Genode::Xml_node node = metadata(_alloc); - static Rect rect = node.has_sub_node("title") - ? rect_attribute(node.sub_node("title")) + static Rect rect = node.has_sub_node("title") + ? Rect::from_xml(node.sub_node("title")) : Rect(Point(0, 0), Area(0, 0)); return rect; } @@ -168,7 +168,7 @@ element_geometry(Genode::Ram_allocator &ram, Genode::Region_map &rm, if (!node.has_sub_node(sub_node_type)) return Rect(Point(0, 0), Area(0, 0)); - return Rect(point_attribute(node.sub_node(sub_node_type)), + return Rect(Point::from_xml(node.sub_node(sub_node_type)), texture_by_id(ram, rm, alloc, texture_id).size()); } diff --git a/repos/gems/src/app/themed_decorator/window.h b/repos/gems/src/app/themed_decorator/window.h index ba0fd04b39..39e3100f59 100644 --- a/repos/gems/src/app/themed_decorator/window.h +++ b/repos/gems/src/app/themed_decorator/window.h @@ -511,7 +511,7 @@ class Decorator::Window : public Window_base, public Animator::Item _motion = _config.motion(_title); Rect const old_geometry = geometry(); - Rect const new_geometry = rect_attribute(window_node); + Rect const new_geometry = Rect::from_xml(window_node); geometry(new_geometry); diff --git a/repos/gems/src/app/window_layouter/assign.h b/repos/gems/src/app/window_layouter/assign.h index 840177db0e..8ecea234af 100644 --- a/repos/gems/src/app/window_layouter/assign.h +++ b/repos/gems/src/app/window_layouter/assign.h @@ -81,8 +81,8 @@ class Window_layouter::Assign : public List_model::Element _maximized = assign.attribute_value("maximized", false); _xpos_any = assign.attribute_value("xpos", String<20>()) == "any"; _ypos_any = assign.attribute_value("ypos", String<20>()) == "any"; - _pos = point_attribute(assign); - _size = area_attribute(assign); + _pos = Point::from_xml(assign); + _size = Area::from_xml(assign); } /* diff --git a/repos/gems/src/app/window_layouter/types.h b/repos/gems/src/app/window_layouter/types.h index a331faaed3..254fcc37e1 100644 --- a/repos/gems/src/app/window_layouter/types.h +++ b/repos/gems/src/app/window_layouter/types.h @@ -15,19 +15,15 @@ #define _TYPES_H_ /* Genode includes */ -#include -#include +#include namespace Window_layouter { using namespace Genode; - typedef Decorator::Point Point; - typedef Decorator::Area Area; - typedef Decorator::Rect Rect; - - using Decorator::area_attribute; - using Decorator::point_attribute; + typedef Surface_base::Point Point; + typedef Surface_base::Area Area; + typedef Surface_base::Rect Rect; struct Window_id { diff --git a/repos/gems/src/app/window_layouter/window_list.h b/repos/gems/src/app/window_layouter/window_list.h index 6945de0cf7..851b2ee1bd 100644 --- a/repos/gems/src/app/window_layouter/window_list.h +++ b/repos/gems/src/app/window_layouter/window_list.h @@ -72,7 +72,7 @@ class Window_layouter::Window_list Window &create_element(Xml_node node) { unsigned const id = node.attribute_value("id", 0U); - Area const initial_size = area_attribute(node); + Area const initial_size = Area::from_xml(node); Window::Label const label = node.attribute_value("label",Window::Label()); @@ -85,7 +85,7 @@ class Window_layouter::Window_list void update_element(Window &win, Xml_node node) { - win.client_size(area_attribute(node)); + win.client_size(Area::from_xml(node)); win.title (node.attribute_value("title", Window::Title(""))); win.has_alpha (node.attribute_value("has_alpha", false)); win.hidden (node.attribute_value("hidden", false)); diff --git a/repos/os/include/decorator/xml_utils.h b/repos/os/include/decorator/xml_utils.h index ab99a433e0..73c7ce7859 100644 --- a/repos/os/include/decorator/xml_utils.h +++ b/repos/os/include/decorator/xml_utils.h @@ -16,42 +16,7 @@ #include - -namespace Decorator { - - static Point point_attribute(Xml_node const &); - static Area area_attribute(Xml_node const &); - static Rect rect_attribute(Xml_node const &); - static Color color(Xml_node const &); -} - - -/** - * Read point position from XML node - */ -static inline Decorator::Point Decorator::point_attribute(Genode::Xml_node const &point) -{ - return Point((int)point.attribute_value("xpos", 0L), - (int)point.attribute_value("ypos", 0L)); } - - -/** - * Read area size from XML node - */ -static inline Decorator::Area Decorator::area_attribute(Genode::Xml_node const &area) -{ - return Area(area.attribute_value("width", 0U), - area.attribute_value("height", 0U)); -} - - -/** - * Read rectangle coordinates from XML node - */ -static inline Decorator::Rect Decorator::rect_attribute(Genode::Xml_node const &rect) -{ - return Rect(point_attribute(rect), area_attribute(rect)); -} +namespace Decorator { static Color color(Xml_node const &); } /** From 6d172b8e7ae2d439aca8dc130581ff9ac168a94e Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Tue, 23 Aug 2022 10:39:56 +0200 Subject: [PATCH 175/354] qt5.run: provide mesa driver route for children Fixes #4588 --- repos/libports/run/qt5.run | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/repos/libports/run/qt5.run b/repos/libports/run/qt5.run index b0d7998c16..7e4ba737fd 100644 --- a/repos/libports/run/qt5.run +++ b/repos/libports/run/qt5.run @@ -76,7 +76,9 @@ append config { - + + + From 82a57a10e7869cbd9e201b9d14431049d23f0e6d Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Tue, 23 Aug 2022 11:14:51 +0200 Subject: [PATCH 176/354] qt5: update to version 5.15.2 Fixes #4589 --- repos/libports/lib/import/import-qt5_cmake.mk | 2 +- repos/libports/lib/import/import-qt5_qmake.mk | 5 ++++- repos/libports/lib/mk/libQt5QmlModels.mk | 6 +++++ .../libports/lib/mk/libQt5QmlWorkerScript.mk | 6 +++++ repos/libports/lib/mk/qt5_base.mk | 1 + repos/libports/lib/mk/qt5_declarative.mk | 6 +++++ repos/libports/lib/mk/qt5_graphicaleffects.mk | 2 +- repos/libports/lib/mk/qt5_quickcontrols.mk | 2 +- repos/libports/lib/mk/qt5_quickcontrols2.mk | 2 +- repos/libports/lib/mk/qt5_virtualkeyboard.mk | 2 +- repos/libports/ports/qt5-host.hash | 2 +- repos/libports/ports/qt5-host.port | 21 +++++++++++------- repos/libports/ports/qt5.hash | 2 +- repos/libports/ports/qt5.port | 4 ++-- repos/libports/run/qt5_samegame.run | 2 +- repos/libports/run/qt5_virtualkeyboard.run | 2 +- .../src/app/qt5/examples/samegame/target.mk | 2 +- .../qt5/examples/virtualkeyboard/target.mk | 2 +- .../libports/src/test/qt5/qt_quick/target.mk | 2 +- tool/tool_chain_qt5 | 22 ++++++++++++------- 20 files changed, 64 insertions(+), 31 deletions(-) create mode 100644 repos/libports/lib/mk/libQt5QmlModels.mk create mode 100644 repos/libports/lib/mk/libQt5QmlWorkerScript.mk diff --git a/repos/libports/lib/import/import-qt5_cmake.mk b/repos/libports/lib/import/import-qt5_cmake.mk index 6600f2351e..8f727b7ff6 100644 --- a/repos/libports/lib/import/import-qt5_cmake.mk +++ b/repos/libports/lib/import/import-qt5_cmake.mk @@ -6,7 +6,7 @@ # QT5_PORT_LIBS: Qt5 libraries used from port (for example libQt5Core) # -QT_TOOLS_DIR = /usr/local/genode/qt5/20.08 +QT_TOOLS_DIR = /usr/local/genode/qt5/22.08 ifeq ($(filter-out $(SPECS),arm),) QT_PLATFORM = genode-arm-g++ diff --git a/repos/libports/lib/import/import-qt5_qmake.mk b/repos/libports/lib/import/import-qt5_qmake.mk index 349d5ced96..271cfcbd6c 100644 --- a/repos/libports/lib/import/import-qt5_qmake.mk +++ b/repos/libports/lib/import/import-qt5_qmake.mk @@ -6,7 +6,7 @@ # QT5_PORT_LIBS: Qt5 libraries used from port (for example libQt5Core) # -QT_TOOLS_DIR = /usr/local/genode/qt5/20.08 +QT_TOOLS_DIR = /usr/local/genode/qt5/22.08 QMAKE = $(QT_TOOLS_DIR)/bin/qmake ifeq ($(filter-out $(SPECS),arm),) @@ -161,6 +161,9 @@ qmake_root/lib/%.lib.a: qmake_root/lib qmake_root/mkspecs: qmake_root $(VERBOSE)mkdir -p $@ $(VERBOSE)ln -sf $(QT_API_DIR)/mkspecs/* $@/ + $(VERBOSE)rm -f $@/modules + $(VERBOSE)mkdir $@/modules + $(VERBOSE)ln -snf $(QT_API_DIR)/mkspecs/modules/* $@/modules/ $(VERBOSE)ln -sf $(QMAKE_PLATFORM)/qconfig.pri $@/ $(VERBOSE)ln -sf $(QMAKE_PLATFORM)/qmodule.pri $@/ diff --git a/repos/libports/lib/mk/libQt5QmlModels.mk b/repos/libports/lib/mk/libQt5QmlModels.mk new file mode 100644 index 0000000000..a1e8b27d37 --- /dev/null +++ b/repos/libports/lib/mk/libQt5QmlModels.mk @@ -0,0 +1,6 @@ +# +# This individual library description file is needed to get the abi +# library generated when building Qt5 packages. +# + +LIBS = qt5_declarative diff --git a/repos/libports/lib/mk/libQt5QmlWorkerScript.mk b/repos/libports/lib/mk/libQt5QmlWorkerScript.mk new file mode 100644 index 0000000000..a1e8b27d37 --- /dev/null +++ b/repos/libports/lib/mk/libQt5QmlWorkerScript.mk @@ -0,0 +1,6 @@ +# +# This individual library description file is needed to get the abi +# library generated when building Qt5 packages. +# + +LIBS = qt5_declarative diff --git a/repos/libports/lib/mk/qt5_base.mk b/repos/libports/lib/mk/qt5_base.mk index 081d119db8..098cc7a4e7 100644 --- a/repos/libports/lib/mk/qt5_base.mk +++ b/repos/libports/lib/mk/qt5_base.mk @@ -25,6 +25,7 @@ built.tag: qmake_prepared.tag qmake_root/lib/ld.lib.so -no-feature-dbus \ -no-feature-networkinterface \ -no-feature-process \ + -no-feature-relocatable \ -no-feature-vulkan \ $(QT5_OUTPUT_FILTER) diff --git a/repos/libports/lib/mk/qt5_declarative.mk b/repos/libports/lib/mk/qt5_declarative.mk index 034094d534..ac2ecac6aa 100644 --- a/repos/libports/lib/mk/qt5_declarative.mk +++ b/repos/libports/lib/mk/qt5_declarative.mk @@ -5,17 +5,22 @@ QT5_PORT_LIBS = libQt5Core libQt5Gui libQt5Network libQt5Sql libQt5Test libQt5Wi LIBS = libc libm mesa stdcxx $(QT5_PORT_LIBS) INSTALL_LIBS = lib/libQt5Qml.lib.so \ + lib/libQt5QmlModels.lib.so \ + lib/libQt5QmlWorkerScript.lib.so \ lib/libQt5Quick.lib.so \ lib/libQt5QuickParticles.lib.so \ lib/libQt5QuickShapes.lib.so \ lib/libQt5QuickTest.lib.so \ lib/libQt5QuickWidgets.lib.so \ + qml/Qt/labs/animation/liblabsanimationplugin.lib.so \ qml/Qt/labs/folderlistmodel/libqmlfolderlistmodelplugin.lib.so \ qml/Qt/labs/qmlmodels/liblabsmodelsplugin.lib.so \ qml/Qt/labs/settings/libqmlsettingsplugin.lib.so \ qml/Qt/labs/wavefrontmesh/libqmlwavefrontmeshplugin.lib.so \ qml/QtQml/Models.2/libmodelsplugin.lib.so \ qml/QtQml/StateMachine/libqtqmlstatemachine.lib.so \ + qml/QtQml/WorkerScript.2/libworkerscriptplugin.lib.so \ + qml/QtQml/libqmlplugin.lib.so \ qml/QtQuick.2/libqtquick2plugin.lib.so \ qml/QtQuick/Layouts/libqquicklayoutsplugin.lib.so \ qml/QtQuick/LocalStorage/libqmllocalstorageplugin.lib.so \ @@ -35,6 +40,7 @@ built.tag: qmake_prepared.tag $(QT_DIR)/qtdeclarative/qtdeclarative.pro \ -- \ -no-feature-qml-devtools \ + -no-feature-qml-jit \ $(QT5_OUTPUT_FILTER) @# diff --git a/repos/libports/lib/mk/qt5_graphicaleffects.mk b/repos/libports/lib/mk/qt5_graphicaleffects.mk index 765c3678d6..412633b2f1 100644 --- a/repos/libports/lib/mk/qt5_graphicaleffects.mk +++ b/repos/libports/lib/mk/qt5_graphicaleffects.mk @@ -1,7 +1,7 @@ include $(call select_from_repositories,lib/import/import-qt5_qmake.mk) QT5_PORT_LIBS += libQt5Core libQt5Gui libQt5Network -QT5_PORT_LIBS += libQt5Qml libQt5Quick +QT5_PORT_LIBS += libQt5Qml libQt5QmlModels libQt5Quick LIBS = libc libm mesa stdcxx $(QT5_PORT_LIBS) diff --git a/repos/libports/lib/mk/qt5_quickcontrols.mk b/repos/libports/lib/mk/qt5_quickcontrols.mk index 1c40f2b0fa..c980e41a44 100644 --- a/repos/libports/lib/mk/qt5_quickcontrols.mk +++ b/repos/libports/lib/mk/qt5_quickcontrols.mk @@ -1,7 +1,7 @@ include $(call select_from_repositories,lib/import/import-qt5_qmake.mk) QT5_PORT_LIBS += libQt5Core libQt5Gui libQt5Network libQt5Widgets -QT5_PORT_LIBS += libQt5Qml libQt5Quick +QT5_PORT_LIBS += libQt5Qml libQt5QmlModels libQt5Quick LIBS = libc libm mesa stdcxx $(QT5_PORT_LIBS) diff --git a/repos/libports/lib/mk/qt5_quickcontrols2.mk b/repos/libports/lib/mk/qt5_quickcontrols2.mk index a774fef751..c7937b01fe 100644 --- a/repos/libports/lib/mk/qt5_quickcontrols2.mk +++ b/repos/libports/lib/mk/qt5_quickcontrols2.mk @@ -1,7 +1,7 @@ include $(call select_from_repositories,lib/import/import-qt5_qmake.mk) QT5_PORT_LIBS += libQt5Core libQt5Gui libQt5Network libQt5Widgets -QT5_PORT_LIBS += libQt5Qml libQt5Quick +QT5_PORT_LIBS += libQt5Qml libQt5QmlModels libQt5Quick LIBS = libc libm mesa stdcxx $(QT5_PORT_LIBS) diff --git a/repos/libports/lib/mk/qt5_virtualkeyboard.mk b/repos/libports/lib/mk/qt5_virtualkeyboard.mk index d9f96df908..2a57a037ae 100644 --- a/repos/libports/lib/mk/qt5_virtualkeyboard.mk +++ b/repos/libports/lib/mk/qt5_virtualkeyboard.mk @@ -1,7 +1,7 @@ include $(call select_from_repositories,lib/import/import-qt5_qmake.mk) QT5_PORT_LIBS = libQt5Core libQt5Gui libQt5Network libQt5Widgets -QT5_PORT_LIBS += libQt5Qml libQt5Quick +QT5_PORT_LIBS += libQt5Qml libQt5QmlModels libQt5Quick QT5_PORT_LIBS += libQt5Svg LIBS = libc libm mesa stdcxx $(QT5_PORT_LIBS) diff --git a/repos/libports/ports/qt5-host.hash b/repos/libports/ports/qt5-host.hash index a0c4084adf..8bc77acb3a 100644 --- a/repos/libports/ports/qt5-host.hash +++ b/repos/libports/ports/qt5-host.hash @@ -1 +1 @@ -21e078acd47b0d6888fe0f289eafbc8682da7a05 +51940aa0054325a33ca2e1286dbb2b8c7e006b69 diff --git a/repos/libports/ports/qt5-host.port b/repos/libports/ports/qt5-host.port index 507185778b..e57f207e64 100644 --- a/repos/libports/ports/qt5-host.port +++ b/repos/libports/ports/qt5-host.port @@ -1,15 +1,20 @@ LICENSE := GPL -VERSION := 5.13.2 +VERSION := 5.15.2 -QTBASE := qtbase-everywhere-src-${VERSION} -QTTOOLS := qttools-everywhere-src-${VERSION} +QTBASE := qtbase-everywhere-src-${VERSION} +QTDECLARATIVE := qtdeclarative-everywhere-src-${VERSION} +QTTOOLS := qttools-everywhere-src-${VERSION} -DOWNLOADS := ${QTBASE}.archive $(QTTOOLS).archive +DOWNLOADS := ${QTBASE}.archive $(QTDECLARATIVE).archive $(QTTOOLS).archive -URL(${QTBASE}) := https://download.qt.io/archive/qt/5.13/$(VERSION)/submodules/$(QTBASE).tar.xz -SHA(${QTBASE}) := 26b6b686d66a7ad28eaca349e55e2894e5a735f3831e45f2049e93b1daa92121 +URL(${QTBASE}) := https://download.qt.io/archive/qt/5.15/$(VERSION)/submodules/$(QTBASE).tar.xz +SHA(${QTBASE}) := 909fad2591ee367993a75d7e2ea50ad4db332f05e1c38dd7a5a274e156a4e0f8 DIR(${QTBASE}) := src/lib/qtbase -URL(${QTTOOLS}) := https://download.qt.io/archive/qt/5.13/$(VERSION)/submodules/$(QTTOOLS).tar.xz -SHA(${QTTOOLS}) := 919a2713b6d2d7873a09ad85bd93cf4282606e5bf84d5884250f665a253ec06e +URL(${QTDECLARATIVE}) := https://download.qt.io/archive/qt/5.15/$(VERSION)/submodules/$(QTDECLARATIVE).tar.xz +SHA(${QTDECLARATIVE}) := c600d09716940f75d684f61c5bdaced797f623a86db1627da599027f6c635651 +DIR(${QTDECLARATIVE}) := src/lib/qtdeclarative + +URL(${QTTOOLS}) := https://download.qt.io/archive/qt/5.15/$(VERSION)/submodules/$(QTTOOLS).tar.xz +SHA(${QTTOOLS}) := c189d0ce1ff7c739db9a3ace52ac3e24cb8fd6dbf234e49f075249b38f43c1cc DIR(${QTTOOLS}) := src/lib/qttools diff --git a/repos/libports/ports/qt5.hash b/repos/libports/ports/qt5.hash index cc3bde6e7e..12d420c6d4 100644 --- a/repos/libports/ports/qt5.hash +++ b/repos/libports/ports/qt5.hash @@ -1 +1 @@ -e70d0da90f784dc66466c43b0e3f6dc31499d0f0 +cf64ea7028a957683bad0154451c1d7f516a4336 diff --git a/repos/libports/ports/qt5.port b/repos/libports/ports/qt5.port index e29ff703f5..2f736c6899 100644 --- a/repos/libports/ports/qt5.port +++ b/repos/libports/ports/qt5.port @@ -1,8 +1,8 @@ LICENSE := GPL -VERSION := 5.13.2 +VERSION := 5.15.2 DOWNLOADS := qt5.git URL(qt5) := https://github.com/cproc/qt5.git -REV(qt5) := issue4541 +REV(qt5) := issue4589 DIR(qt5) := src/lib/qt5 diff --git a/repos/libports/run/qt5_samegame.run b/repos/libports/run/qt5_samegame.run index a26569b1d3..a3e8e81722 100644 --- a/repos/libports/run/qt5_samegame.run +++ b/repos/libports/run/qt5_samegame.run @@ -23,7 +23,7 @@ append config { append config [qt5_start_nodes] append config { - + diff --git a/repos/libports/run/qt5_virtualkeyboard.run b/repos/libports/run/qt5_virtualkeyboard.run index 85f846b842..53018d533d 100644 --- a/repos/libports/run/qt5_virtualkeyboard.run +++ b/repos/libports/run/qt5_virtualkeyboard.run @@ -25,7 +25,7 @@ append config { append config [qt5_start_nodes] append config { - + diff --git a/repos/libports/src/app/qt5/examples/samegame/target.mk b/repos/libports/src/app/qt5/examples/samegame/target.mk index f7dba1e7be..7e0d810ce8 100644 --- a/repos/libports/src/app/qt5/examples/samegame/target.mk +++ b/repos/libports/src/app/qt5/examples/samegame/target.mk @@ -3,7 +3,7 @@ QMAKE_PROJECT_FILE = $(PRG_DIR)/samegame.pro QMAKE_TARGET_BINARIES = samegame QT5_PORT_LIBS += libQt5Core libQt5Gui libQt5Network -QT5_PORT_LIBS += libQt5Qml libQt5Quick +QT5_PORT_LIBS += libQt5Qml libQt5QmlModels libQt5Quick LIBS = libc libm mesa qt5_component stdcxx $(QT5_PORT_LIBS) diff --git a/repos/libports/src/app/qt5/examples/virtualkeyboard/target.mk b/repos/libports/src/app/qt5/examples/virtualkeyboard/target.mk index 0e037995e4..35b2729bf3 100644 --- a/repos/libports/src/app/qt5/examples/virtualkeyboard/target.mk +++ b/repos/libports/src/app/qt5/examples/virtualkeyboard/target.mk @@ -3,7 +3,7 @@ QMAKE_PROJECT_FILE = $(QT_DIR)/qtvirtualkeyboard/examples/virtualkeyboard/basic/ QMAKE_TARGET_BINARIES = basic QT5_PORT_LIBS += libQt5Core libQt5Gui libQt5Network -QT5_PORT_LIBS += libQt5Qml libQt5Quick +QT5_PORT_LIBS += libQt5Qml libQt5QmlModels libQt5Quick QT5_PORT_LIBS += libQt5VirtualKeyboard LIBS = libc libm mesa qt5_component stdcxx $(QT5_PORT_LIBS) diff --git a/repos/libports/src/test/qt5/qt_quick/target.mk b/repos/libports/src/test/qt5/qt_quick/target.mk index 66a61131f3..f0624293bf 100644 --- a/repos/libports/src/test/qt5/qt_quick/target.mk +++ b/repos/libports/src/test/qt5/qt_quick/target.mk @@ -3,7 +3,7 @@ QMAKE_PROJECT_FILE = $(PRG_DIR)/qt_quick.pro QMAKE_TARGET_BINARIES = test-qt_quick QT5_PORT_LIBS += libQt5Core libQt5Gui libQt5Network -QT5_PORT_LIBS += libQt5Qml libQt5Quick +QT5_PORT_LIBS += libQt5Qml libQt5QmlModels libQt5Quick LIBS = libc libm mesa qt5_component stdcxx $(QT5_PORT_LIBS) diff --git a/tool/tool_chain_qt5 b/tool/tool_chain_qt5 index 70a87ff9c0..f4331210f0 100755 --- a/tool/tool_chain_qt5 +++ b/tool/tool_chain_qt5 @@ -37,8 +37,9 @@ MAKE_JOBS ?= 4 GENODE_DIR ?= $(realpath $(dir $(firstword $(MAKEFILE_LIST)))/..) CONTRIB_DIR = $(shell $(GENODE_DIR)/tool/ports/current qt5-host) QTBASE_DIR = $(CONTRIB_DIR)/src/lib/qtbase +QTDECLARATIVE_DIR = $(CONTRIB_DIR)/src/lib/qtdeclarative QTTOOLS_DIR = $(CONTRIB_DIR)/src/lib/qttools -TOOL_VERSION = 20.08 +TOOL_VERSION = 22.08 BUILD_DIR = $(GENODE_DIR)/build/tool/qt5/$(TOOL_VERSION) DEFAULT_INSTALL_LOCATION = /usr/local/genode/qt5/$(TOOL_VERSION) INSTALL_LOCATION ?= $(DEFAULT_INSTALL_LOCATION) @@ -79,12 +80,16 @@ $(BUILD_DIR)/qtbase/bin/uic: $(BUILD_DIR)/qtbase/src/Makefile $(BUILD_DIR)/qtbase/bin/qlalr: $(BUILD_DIR)/qtbase/src/Makefile $(VERBOSE)make -C $(BUILD_DIR)/qtbase/src -j$(MAKE_JOBS) sub-qlalr -$(BUILD_DIR)/qtbase/bin/qfloat16-tables: $(BUILD_DIR)/qtbase/src/Makefile - $(VERBOSE)make -C $(BUILD_DIR)/qtbase/src -j$(MAKE_JOBS) sub-qfloat16-tables - $(BUILD_DIR)/qtbase/lib/libQt5Xml.so.5: $(BUILD_DIR)/qtbase/src/Makefile $(VERBOSE)make -C $(BUILD_DIR)/qtbase/src -j$(MAKE_JOBS) sub-xml +$(BUILD_DIR)/qtdeclarative/src/qmltyperegistrar/Makefile: $(QTDECLARATIVE_DIR)/src/qmltyperegistrar/qmltyperegistrar.pro + $(VERBOSE)mkdir -p $(dir $@) + $(VERBOSE)cd $(dir $@) && $(BUILD_DIR)/qtbase/bin/qmake $< + +$(BUILD_DIR)/qtdeclarative/bin/qmltyperegistrar: $(BUILD_DIR)/qtdeclarative/src/qmltyperegistrar/Makefile + $(VERBOSE)make -C $(dir $<) -j$(MAKE_JOBS) + $(BUILD_DIR)/qttools/Makefile: $(QTTOOLS_DIR)/qttools.pro $(BUILD_DIR)/qtbase/lib/libQt5Xml.so.5 $(VERBOSE)mkdir -p $(dir $@) $(VERBOSE)cd $(dir $@) && $(BUILD_DIR)/qtbase/bin/qmake $< @@ -109,7 +114,7 @@ build: $(BUILD_DIR)/qtbase/bin/moc \ $(BUILD_DIR)/qtbase/bin/rcc \ $(BUILD_DIR)/qtbase/bin/uic \ $(BUILD_DIR)/qtbase/bin/qlalr \ - $(BUILD_DIR)/qtbase/bin/qfloat16-tables \ + $(BUILD_DIR)/qtdeclarative/bin/qmltyperegistrar \ $(BUILD_DIR)/qttools/bin/lupdate \ $(BUILD_DIR)/qttools/bin/lrelease @@ -141,8 +146,9 @@ $(INSTALL_LOCATION)/bin/qlalr: $(BUILD_DIR)/qtbase/bin/qlalr $(INSTALL_LOCATION) $(VERBOSE)cd $(BUILD_DIR)/qtbase/src && \ $(SUDO) strip $< -o $@ -$(INSTALL_LOCATION)/bin/qfloat16-tables: $(BUILD_DIR)/qtbase/bin/qfloat16-tables $(INSTALL_LOCATION)/bin - $(VERBOSE)$(SUDO) strip $< -o $@ +$(INSTALL_LOCATION)/bin/qmltyperegistrar: $(BUILD_DIR)/qtdeclarative/bin/qmltyperegistrar $(INSTALL_LOCATION)/bin + $(VERBOSE)cd $(BUILD_DIR)/qtdeclarative/src && \ + $(SUDO) strip $< -o $@ $(INSTALL_LOCATION)/bin/qmake: $(BUILD_DIR)/qtbase/bin/qmake $(INSTALL_LOCATION)/bin $(VERBOSE)$(SUDO) strip $< -o $@ @@ -160,9 +166,9 @@ install: $(INSTALL_LOCATION)/bin/moc \ $(INSTALL_LOCATION)/bin/rcc \ $(INSTALL_LOCATION)/bin/uic \ $(INSTALL_LOCATION)/bin/qlalr \ - $(INSTALL_LOCATION)/bin/qfloat16-tables \ $(INSTALL_LOCATION)/bin/qmake \ $(INSTALL_LOCATION)/bin/syncqt.pl \ + $(INSTALL_LOCATION)/bin/qmltyperegistrar \ $(INSTALL_LOCATION)/bin/lupdate \ $(INSTALL_LOCATION)/bin/lrelease ifeq ($(INSTALL_LOCATION),$(DEFAULT_INSTALL_LOCATION)) From 6fbc953dbdd0ca6feaee4d617cfa187b30b85ace Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 23 Aug 2022 16:10:20 +0200 Subject: [PATCH 177/354] Declare missing exception types thrown in USB session --- repos/os/include/usb_session/usb_session.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/repos/os/include/usb_session/usb_session.h b/repos/os/include/usb_session/usb_session.h index 723bd21506..48ea6f8d94 100644 --- a/repos/os/include/usb_session/usb_session.h +++ b/repos/os/include/usb_session/usb_session.h @@ -219,17 +219,18 @@ struct Usb::Session : public Genode::Session GENODE_RPC(Rpc_tx_cap, Capability, _tx_cap); GENODE_RPC_THROW(Rpc_config_descr, void, config_descriptor, GENODE_TYPE_LIST(Device_not_found), Device_descriptor *, Config_descriptor *); - GENODE_RPC(Rpc_alt_settings, unsigned, alt_settings, unsigned); + GENODE_RPC_THROW(Rpc_alt_settings, unsigned, alt_settings, GENODE_TYPE_LIST(Device_not_found, + Interface_not_found), unsigned); GENODE_RPC_THROW(Rpc_iface_descr, void, interface_descriptor, GENODE_TYPE_LIST(Device_not_found, Interface_not_found), unsigned, unsigned, Interface_descriptor *); GENODE_RPC_THROW(Rpc_iface_extra, bool, interface_extra, GENODE_TYPE_LIST(Device_not_found, Interface_not_found), unsigned, unsigned, Interface_extra *); GENODE_RPC_THROW(Rpc_ep_descr, void, endpoint_descriptor, GENODE_TYPE_LIST(Device_not_found, Interface_not_found), unsigned, unsigned, unsigned, Endpoint_descriptor *); - GENODE_RPC_THROW(Rpc_claim_interface, void, claim_interface, GENODE_TYPE_LIST(Interface_not_found, - Interface_already_claimed), unsigned); - GENODE_RPC_THROW(Rpc_release_interface, void, release_interface, GENODE_TYPE_LIST(Interface_not_found), - unsigned); + GENODE_RPC_THROW(Rpc_claim_interface, void, claim_interface, GENODE_TYPE_LIST(Device_not_found, + Interface_not_found, Interface_already_claimed), unsigned); + GENODE_RPC_THROW(Rpc_release_interface, void, release_interface, GENODE_TYPE_LIST(Device_not_found, + Interface_not_found), unsigned); GENODE_RPC_INTERFACE(Rpc_plugged, Rpc_sigh_state_change, Rpc_tx_cap, Rpc_config_descr, Rpc_iface_descr, Rpc_iface_extra, Rpc_ep_descr, Rpc_alt_settings, Rpc_claim_interface, Rpc_release_interface); From 8f9f0f1d7f486c6f41fe9696de30cda36cff6ac5 Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Tue, 23 Aug 2022 22:28:57 +0200 Subject: [PATCH 178/354] qt5_textedit: add mesa driver requirement to runtime Fixes #4591 --- repos/libports/recipes/pkg/qt5_textedit/runtime | 1 + 1 file changed, 1 insertion(+) diff --git a/repos/libports/recipes/pkg/qt5_textedit/runtime b/repos/libports/recipes/pkg/qt5_textedit/runtime index 3197f7621b..8c271e1340 100644 --- a/repos/libports/recipes/pkg/qt5_textedit/runtime +++ b/repos/libports/recipes/pkg/qt5_textedit/runtime @@ -6,6 +6,7 @@ + From d82d67a4b297f94883cfa013c540ebca5bf2a900 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 23 Aug 2022 16:43:20 +0200 Subject: [PATCH 179/354] part_block depot package Usable via Sculpt /config/deploy, e.g., Issue #4590 --- repos/os/recipes/pkg/part_block/README | 2 ++ repos/os/recipes/pkg/part_block/archives | 1 + repos/os/recipes/pkg/part_block/hash | 1 + repos/os/recipes/pkg/part_block/runtime | 24 ++++++++++++++++++++++++ 4 files changed, 28 insertions(+) create mode 100644 repos/os/recipes/pkg/part_block/README create mode 100755 repos/os/recipes/pkg/part_block/archives create mode 100644 repos/os/recipes/pkg/part_block/hash create mode 100755 repos/os/recipes/pkg/part_block/runtime diff --git a/repos/os/recipes/pkg/part_block/README b/repos/os/recipes/pkg/part_block/README new file mode 100644 index 0000000000..01c6efbebb --- /dev/null +++ b/repos/os/recipes/pkg/part_block/README @@ -0,0 +1,2 @@ + + Runtime for deploying the part_block component from the depot diff --git a/repos/os/recipes/pkg/part_block/archives b/repos/os/recipes/pkg/part_block/archives new file mode 100755 index 0000000000..aa60826d35 --- /dev/null +++ b/repos/os/recipes/pkg/part_block/archives @@ -0,0 +1 @@ +_/src/part_block diff --git a/repos/os/recipes/pkg/part_block/hash b/repos/os/recipes/pkg/part_block/hash new file mode 100644 index 0000000000..7cb5f8f11d --- /dev/null +++ b/repos/os/recipes/pkg/part_block/hash @@ -0,0 +1 @@ +2022-08-22 6d984857ee1cecfe0fa5bd601c2cc7276799f84d diff --git a/repos/os/recipes/pkg/part_block/runtime b/repos/os/recipes/pkg/part_block/runtime new file mode 100755 index 0000000000..8a36f3df10 --- /dev/null +++ b/repos/os/recipes/pkg/part_block/runtime @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + From 59f1fe76254bdf57f19ba49c4168036aeabbd3e6 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 23 Aug 2022 16:38:53 +0200 Subject: [PATCH 180/354] rump: ext2_fs depot package Usable via Sculpt /config/deploy, e.g. via Fixes #4590 --- repos/dde_rump/recipes/pkg/ext2_fs/README | 2 ++ repos/dde_rump/recipes/pkg/ext2_fs/archives | 2 ++ repos/dde_rump/recipes/pkg/ext2_fs/hash | 1 + repos/dde_rump/recipes/pkg/ext2_fs/runtime | 22 +++++++++++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 repos/dde_rump/recipes/pkg/ext2_fs/README create mode 100644 repos/dde_rump/recipes/pkg/ext2_fs/archives create mode 100644 repos/dde_rump/recipes/pkg/ext2_fs/hash create mode 100644 repos/dde_rump/recipes/pkg/ext2_fs/runtime diff --git a/repos/dde_rump/recipes/pkg/ext2_fs/README b/repos/dde_rump/recipes/pkg/ext2_fs/README new file mode 100644 index 0000000000..3c6dd19c53 --- /dev/null +++ b/repos/dde_rump/recipes/pkg/ext2_fs/README @@ -0,0 +1,2 @@ + + Ext2 file-system server based on VFS server and rump diff --git a/repos/dde_rump/recipes/pkg/ext2_fs/archives b/repos/dde_rump/recipes/pkg/ext2_fs/archives new file mode 100644 index 0000000000..90b6278c87 --- /dev/null +++ b/repos/dde_rump/recipes/pkg/ext2_fs/archives @@ -0,0 +1,2 @@ +_/src/rump +_/src/vfs diff --git a/repos/dde_rump/recipes/pkg/ext2_fs/hash b/repos/dde_rump/recipes/pkg/ext2_fs/hash new file mode 100644 index 0000000000..71bc21eb44 --- /dev/null +++ b/repos/dde_rump/recipes/pkg/ext2_fs/hash @@ -0,0 +1 @@ +2022-08-22 583e4dd54d71a208a3d37eb4e5896579b7850f7c diff --git a/repos/dde_rump/recipes/pkg/ext2_fs/runtime b/repos/dde_rump/recipes/pkg/ext2_fs/runtime new file mode 100644 index 0000000000..563d277511 --- /dev/null +++ b/repos/dde_rump/recipes/pkg/ext2_fs/runtime @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + From 236ebecf4480fe1a0cb4de9aa86b6b6f3fa6c413 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 22 Aug 2022 15:46:02 +0200 Subject: [PATCH 181/354] event_filter: new touch-key filter The new filter type can be used to trigger artificial press/release events for predefined touch-screen areas. Fixes #4587 --- repos/os/run/event_filter.run | 27 ++++ repos/os/src/server/event_filter/README | 8 ++ repos/os/src/server/event_filter/main.cc | 4 + repos/os/src/server/event_filter/source.h | 3 +- .../server/event_filter/touch_key_source.h | 128 ++++++++++++++++++ repos/os/src/test/event_filter/main.cc | 22 +++ 6 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 repos/os/src/server/event_filter/touch_key_source.h diff --git a/repos/os/run/event_filter.run b/repos/os/run/event_filter.run index a860b3278b..08872ccfdc 100644 --- a/repos/os/run/event_filter.run +++ b/repos/os/run/event_filter.run @@ -88,6 +88,7 @@ append config { + @@ -483,6 +484,7 @@ append config { + @@ -502,6 +504,7 @@ append config { + @@ -524,6 +527,7 @@ append config { + @@ -545,6 +549,29 @@ append config { + + + + + + + + + + + + + + + + + + + + + + + diff --git a/repos/os/src/server/event_filter/README b/repos/os/src/server/event_filter/README index 134c95d1af..f01d745511 100644 --- a/repos/os/src/server/event_filter/README +++ b/repos/os/src/server/event_filter/README @@ -86,6 +86,14 @@ one of the following filters: touch input. The original touch events are preserved, enabling touch-aware applications to interpet touch gestures. +:: + + Triggers an artificial key tap (a press event followed by a release event) + when touching a preconfigured area on a touch screen. The filter node can + host any number of '' sub nodes. Each sub node must define a + rectangular area - using the attributes 'xpos', 'ypos', 'width', and + 'height' - and the name of the tapped key as 'key' attribute. + Character generator rules ------------------------- diff --git a/repos/os/src/server/event_filter/main.cc b/repos/os/src/server/event_filter/main.cc index e2fbcfda79..c9fae9fa7c 100644 --- a/repos/os/src/server/event_filter/main.cc +++ b/repos/os/src/server/event_filter/main.cc @@ -26,6 +26,7 @@ #include #include #include +#include #include namespace Event_filter { struct Main; } @@ -254,6 +255,9 @@ struct Event_filter::Main : Source::Factory, Source::Trigger if (node.type() == Touch_click_source::name()) return *new (_heap) Touch_click_source(owner, node, *this); + if (node.type() == Touch_key_source::name()) + return *new (_heap) Touch_key_source(owner, node, *this, _heap); + warning("unknown <", node.type(), "> input-source node type"); throw Source::Invalid_config(); } diff --git a/repos/os/src/server/event_filter/source.h b/repos/os/src/server/event_filter/source.h index 629ff0cc89..4ecda4c7b7 100644 --- a/repos/os/src/server/event_filter/source.h +++ b/repos/os/src/server/event_filter/source.h @@ -48,7 +48,8 @@ class Event_filter::Source || node.type() == "button-scroll" || node.type() == "accelerate" || node.type() == "log" - || node.type() == "touch-click"; + || node.type() == "touch-click" + || node.type() == "touch-key"; return false; } diff --git a/repos/os/src/server/event_filter/touch_key_source.h b/repos/os/src/server/event_filter/touch_key_source.h new file mode 100644 index 0000000000..cefca4c6df --- /dev/null +++ b/repos/os/src/server/event_filter/touch_key_source.h @@ -0,0 +1,128 @@ +/* + * \brief Input-event source that generates press/release from touch events + * \author Norman Feske + * \date 2022-08-22 + * + * This filter generates artificial key press/release event pairs when touching + * pre-defined areas on a touch screen. All events occurring while such a + * special area is touched are suppressed. + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _EVENT_FILTER__TOUCH_KEY_SOURCE_H_ +#define _EVENT_FILTER__TOUCH_KEY_SOURCE_H_ + +/* Genode includes */ +#include +#include +#include + +/* local includes */ +#include + +namespace Event_filter { class Touch_key_source; } + + +class Event_filter::Touch_key_source : public Source, Source::Filter +{ + private: + + using Rect = Genode::Rect<>; + + Owner _owner; + + Source &_source; + + Allocator &_alloc; + + bool _pressed = false; /* true during touch sequence */ + + struct Tap : Interface + { + Rect const rect; + + Input::Keycode const code; + + static Input::Keycode code_from_xml(Xml_node const &node) + { + try { + return key_code_by_name(node.attribute_value("key", Key_name())); + } + catch (Unknown_key) { } + warning("ignoring tap rule ", node); + return Input::KEY_UNKNOWN; + } + + Tap(Xml_node const &node) + : rect(Rect::from_xml(node)), code(code_from_xml(node)) { } + }; + + Registry> _tap_rules { }; + + /** + * Filter interface + */ + void filter_event(Sink &destination, Input::Event const &event) override + { + Input::Event ev = event; + + ev.handle_touch([&] (Input::Touch_id id, float x, float y) { + + /* respond to initial touch of first finger only */ + if (id.value != 0 || _pressed) + return; + + _tap_rules.for_each([&] (Tap const &tap) { + if (tap.rect.contains(Point((int)(x), (int)(y)))) { + destination.submit(Input::Press { tap.code }); + destination.submit(Input::Release { tap.code }); + _pressed = true; + } + }); + }); + + /* filter out all events during the touch sequence */ + if (!_pressed) + destination.submit(ev); + + ev.handle_touch_release([&] (Input::Touch_id id) { + if (id.value == 0) + _pressed = false; + }); + } + + public: + + static char const *name() { return "touch-key"; } + + Touch_key_source(Owner &owner, Xml_node config, + Source::Factory &factory, Allocator &alloc) + : + Source(owner), + _owner(factory), + _source(factory.create_source(_owner, input_sub_node(config))), + _alloc(alloc) + { + config.for_each_sub_node("tap", [&] (Xml_node const &node) { + new (_alloc) Registered(_tap_rules, node); }); + } + + ~Touch_key_source() + { + _tap_rules.for_each([&] (Registered &tap) { + destroy(_alloc, &tap); }); + } + + void generate(Sink &destination) override + { + Source::Filter::apply(destination, *this, _source); + } +}; + +#endif /* _EVENT_FILTER__TOUCH_KEY_SOURCE_H_*/ diff --git a/repos/os/src/test/event_filter/main.cc b/repos/os/src/test/event_filter/main.cc index 86787787a3..c6e46caeff 100644 --- a/repos/os/src/test/event_filter/main.cc +++ b/repos/os/src/test/event_filter/main.cc @@ -259,6 +259,13 @@ class Test::Input_to_filter if (motion && rel) batch.submit(Input::Relative_motion{(int)node.attribute_value("rx", 0L), (int)node.attribute_value("ry", 0L)}); + + if (node.has_type("touch")) + batch.submit(Input::Touch{ { 0 }, (float)node.attribute_value("x", 0.0), + (float)node.attribute_value("y", 0.0)}); + + if (node.has_type("touch-release")) + batch.submit(Input::Touch_release { { 0 } } ); }); }); } @@ -337,6 +344,8 @@ struct Test::Main : Input_from_filter::Event_handler step.type() == "expect_release" || step.type() == "not_expect_press" || step.type() == "not_expect_release" || + step.type() == "expect_touch" || + step.type() == "expect_touch_release" || step.type() == "expect_char" || step.type() == "expect_motion" || step.type() == "expect_wheel"); @@ -399,6 +408,7 @@ struct Test::Main : Input_from_filter::Event_handler if (step.type() == "expect_press" || step.type() == "expect_release" || step.type() == "not_expect_press" || step.type() == "not_expect_release" + || step.type() == "expect_touch" || step.type() == "expect_touch_release" || step.type() == "expect_char" || step.type() == "expect_motion" || step.type() == "expect_wheel") return; @@ -485,6 +495,18 @@ struct Test::Main : Input_from_filter::Event_handler && (!step.has_attribute("ay") || step.attribute_value("ay", 0L) == y)) step_succeeded = true; }); + ev.handle_touch([&] (Input::Touch_id, float x, float y) { + if (step.type() == "expect_touch" + && ((float)step.attribute_value("x", 0.0) == x) + && ((float)step.attribute_value("y", 0.0) == y)) + step_succeeded = true; + }); + + ev.handle_touch_release([&] (Input::Touch_id) { + if (step.type() == "expect_touch_release") + step_succeeded = true; + }); + if (step_failed) { error("got unexpected event: ", step); throw Exception(); From 8b85eb9b34c310869a747e55fb5b108d42dc9938 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 22 Aug 2022 16:43:48 +0200 Subject: [PATCH 182/354] sculpt.run: customize initial /config/managed/ In a Sculpt system based on the upcoming phone_manager, the event filter obtains its static configuration from /config/managed/event_filter. Without the requirement for changes at runtime, there is no need to have the phone_manager in the loop after all. Without this patch however, this file was always initialized with the template gems/sculpt/event_filter/default, which was presumably used only at boot time until the sculpt manager has produced the first generated event-filter configuration. This patch applies the choice of optional configs - i.e., a custom event_filter config - to both the config/ and the initial content of config/managed/. So in cases where the /config/managed/event_filter remains entirely static, the latter properly reflects the choosen variant. --- repos/gems/run/sculpt.run | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index f6f5c2f92c..1e9fec1453 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -717,9 +717,14 @@ puts $fd "" close $fd foreach config { fonts wifi runtime event_filter } { - set from [ingredient_path $config default] - check_xml_syntax $from - file copy $from [managed_config_path $config] } + set ingredient [single_ingredient $config "default"] + if {$ingredient != ""} { + set from [ingredient_path $config $ingredient] + set to [managed_config_path $config] + check_xml_syntax $from + copy_file $from $to + } +} copy_file [file join [initial_config_dir] fb_drv] [managed_config_path fb_drv] From 4f4f270d35c4548f075e0836a07a1f06b05839ee Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 23 Aug 2022 11:38:28 +0200 Subject: [PATCH 183/354] sculpt.run: expose leitzentrale state to manager This patch allows the sculpt manager hosted in the leitzentrale subsystem to observe the toggling between the runtime and the administrative GUI. This enables alternatives to the use of the gui_fader for switching between both views. In particular, the upcoming phone_manager toggles the visibility of its own GUI depending on the leitzentrale state. --- repos/gems/run/sculpt.run | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index 1e9fec1453..24165b456e 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -236,6 +236,8 @@ install_config { + @@ -549,6 +551,8 @@ install_config { + + From 6f2237fc461b6d0fc9be4019f429c54b950e3731 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 23 Aug 2022 15:29:53 +0200 Subject: [PATCH 184/354] sculpt_manager: add missing includes --- repos/gems/src/app/sculpt_manager/keyboard_focus.h | 1 + repos/gems/src/app/sculpt_manager/main.cc | 2 +- repos/gems/src/app/sculpt_manager/model/file_operation_queue.h | 1 + repos/gems/src/app/sculpt_manager/view/ram_fs_dialog.h | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/repos/gems/src/app/sculpt_manager/keyboard_focus.h b/repos/gems/src/app/sculpt_manager/keyboard_focus.h index 183e899bb0..3720dfdfa0 100644 --- a/repos/gems/src/app/sculpt_manager/keyboard_focus.h +++ b/repos/gems/src/app/sculpt_manager/keyboard_focus.h @@ -18,6 +18,7 @@ #include /* local includes */ +#include #include #include #include diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 5e78da4d03..76a287068f 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -362,7 +362,6 @@ struct Sculpt::Main : Input_event_handler, _deploy._handle_managed_deploy(); } - Deploy _deploy { _env, _heap, _child_states, _runtime_state, *this, *this, *this, _launcher_listing_rom, _blueprint_rom, _download_queue }; @@ -522,6 +521,7 @@ struct Sculpt::Main : Input_event_handler, Attached_rom_dataspace const _platform { _env, "platform_info" }; + /**************************************** ** Cached model of the runtime config ** ****************************************/ diff --git a/repos/gems/src/app/sculpt_manager/model/file_operation_queue.h b/repos/gems/src/app/sculpt_manager/model/file_operation_queue.h index 5c1934de19..bbdeca53e7 100644 --- a/repos/gems/src/app/sculpt_manager/model/file_operation_queue.h +++ b/repos/gems/src/app/sculpt_manager/model/file_operation_queue.h @@ -15,6 +15,7 @@ #define _MODEL__FILE_OPERATION_QUEUE_H_ #include +#include #include namespace Sculpt { struct File_operation_queue; } diff --git a/repos/gems/src/app/sculpt_manager/view/ram_fs_dialog.h b/repos/gems/src/app/sculpt_manager/view/ram_fs_dialog.h index dfa39ac914..5326dbecee 100644 --- a/repos/gems/src/app/sculpt_manager/view/ram_fs_dialog.h +++ b/repos/gems/src/app/sculpt_manager/view/ram_fs_dialog.h @@ -15,6 +15,7 @@ #define _VIEW__RAM_FS_DIALOG_H_ #include +#include #include namespace Sculpt { struct Ram_fs_dialog; } From 5a0b4c98aa44d835585dabd96d8459f744c63717 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 23 Aug 2022 15:30:20 +0200 Subject: [PATCH 185/354] sculpt_manager: move Network::_menu_view to Main:: By decoupling the network dialog's menu view from the 'Network' class, we become able to host the network dialog in the same menu view instance as other dialogs. --- repos/gems/src/app/sculpt_manager/main.cc | 25 ++++++++++---- repos/gems/src/app/sculpt_manager/network.cc | 10 +++--- repos/gems/src/app/sculpt_manager/network.h | 34 ++++++++------------ 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 76a287068f..16167168ea 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -53,6 +53,7 @@ struct Sculpt::Main : Input_event_handler, Dialog::Generator, Runtime_config_generator, Storage::Target_user, + Network::Action, Graph::Action, Panel_dialog::Action, Popup_dialog::Action, @@ -179,7 +180,7 @@ struct Sculpt::Main : Input_event_handler, _pci_info.wifi_present = true; }); - _network.update_view(); + update_network_dialog(); } @@ -213,8 +214,20 @@ struct Sculpt::Main : Input_event_handler, generate_runtime_config(); } + Network _network { _env, _heap, *this, _child_states, *this, _runtime_state, _pci_info }; - Network _network { _env, _heap, _child_states, *this, *this, _runtime_state, _pci_info }; + Menu_view _network_menu_view { _env, _child_states, _network.dialog, "network_view", + Ram_quota{4*1024*1024}, Cap_quota{150}, + "network_dialog", "network_view_hover", + *this }; + + /** + * Network::Action interface + */ + void update_network_dialog() override + { + _network_menu_view.generate(); + } /************ @@ -637,9 +650,9 @@ struct Sculpt::Main : Input_event_handler, _settings_menu_view.generate(); _clicked_seq_number.destruct(); } - else if (_network.dialog_hovered(seq)) { + else if (_network_menu_view.hovered(seq)) { _network.dialog.click(_network); - _network.update_view(); + _network_menu_view.generate(); _clicked_seq_number.destruct(); } else if (_file_browser_menu_view.hovered(seq)) { @@ -1541,7 +1554,7 @@ void Sculpt::Main::_handle_gui_mode() _panel_menu_view.min_width = _screen_size.w(); unsigned const menu_width = max((unsigned)(_font_size_px*21.0), 320u); _main_menu_view.min_width = menu_width; - _network.min_dialog_width(menu_width); + _network_menu_view.min_width = menu_width; /* font size may has changed, propagate fonts config of runtime view */ generate_runtime_config(); @@ -1830,7 +1843,7 @@ void Sculpt::Main::_generate_runtime_config(Xml_generator &xml) const _panel_menu_view.gen_start_node(xml); _main_menu_view.gen_start_node(xml); _settings_menu_view.gen_start_node(xml); - _network._menu_view.gen_start_node(xml); + _network_menu_view.gen_start_node(xml); _popup_menu_view.gen_start_node(xml); _file_browser_menu_view.gen_start_node(xml); diff --git a/repos/gems/src/app/sculpt_manager/network.cc b/repos/gems/src/app/sculpt_manager/network.cc index e1a6d59046..66b9b1e0b6 100644 --- a/repos/gems/src/app/sculpt_manager/network.cc +++ b/repos/gems/src/app/sculpt_manager/network.cc @@ -50,7 +50,7 @@ void Sculpt::Network::handle_key_press(Codepoint code) if (_wifi_connection.state == Wifi_connection::CONNECTING) wifi_connect(_wifi_connection.bssid); - _menu_view.generate(); + _action.update_network_dialog(); } @@ -126,7 +126,7 @@ void Sculpt::Network::_handle_wlan_accesspoints() Access_point_update_policy policy(_alloc); _access_points.update_from_xml(policy, _wlan_accesspoints_rom.xml()); - _menu_view.generate(); + _action.update_network_dialog(); } @@ -134,7 +134,7 @@ void Sculpt::Network::_handle_wlan_state() { _wlan_state_rom.update(); _wifi_connection = Wifi_connection::from_xml(_wlan_state_rom.xml()); - _menu_view.generate(); + _action.update_network_dialog(); } @@ -146,7 +146,7 @@ void Sculpt::Network::_handle_nic_router_state() _nic_state = Nic_state::from_xml(_nic_router_state_rom.xml()); if (_nic_state.ipv4 != old_nic_state.ipv4) - _menu_view.generate(); + _action.update_network_dialog(); /* if the nic state becomes ready, consider spawning the update subsystem */ if (old_nic_state.ready() != _nic_state.ready()) @@ -193,7 +193,7 @@ void Sculpt::Network::_handle_nic_router_config(Xml_node config) _update_nic_target_from_config(config); _generate_nic_router_config(); _runtime_config_generator.generate_runtime_config(); - _menu_view.generate(); + _action.update_network_dialog(); } diff --git a/repos/gems/src/app/sculpt_manager/network.h b/repos/gems/src/app/sculpt_manager/network.h index fd22886512..c30758ebc5 100644 --- a/repos/gems/src/app/sculpt_manager/network.h +++ b/repos/gems/src/app/sculpt_manager/network.h @@ -20,6 +20,7 @@ /* local includes */ #include +#include #include #include #include @@ -35,9 +36,14 @@ struct Sculpt::Network : Network_dialog::Action Allocator &_alloc; - Registry &_child_states; + struct Action : Interface + { + virtual void update_network_dialog() = 0; + }; - Menu_view::Hover_update_handler &_hover_update_handler; + Action &_action; + + Registry &_child_states; Runtime_config_generator &_runtime_config_generator; @@ -101,19 +107,6 @@ struct Sculpt::Network : Network_dialog::Action _wifi_connection, _nic_state, wpa_passphrase, _wlan_config_policy, _pci_info }; - Menu_view _menu_view { _env, _child_states, dialog, "network_view", - Ram_quota{4*1024*1024}, Cap_quota{150}, - "network_dialog", "network_view_hover", - _hover_update_handler }; - - void min_dialog_width(unsigned value) { _menu_view.min_width = value; } - - bool dialog_hovered(Input::Seq_number seq) const { return _menu_view.hovered(seq); } - - void update_view() { _menu_view.generate(); } - - void trigger_dialog_restart() { _menu_view.trigger_restart(); } - Managed_config _wlan_config { _env, "config", "wifi", *this, &Network::_handle_wlan_config }; @@ -121,7 +114,7 @@ struct Sculpt::Network : Network_dialog::Action { if (_wlan_config.try_generate_manually_managed()) { _wlan_config_policy = Network_dialog::WLAN_CONFIG_MANUAL; - _menu_view.generate(); + _action.update_network_dialog(); return; } @@ -144,7 +137,7 @@ struct Sculpt::Network : Network_dialog::Action _nic_target.managed_type = type; _generate_nic_router_config(); _runtime_config_generator.generate_runtime_config(); - _menu_view.generate(); + _action.update_network_dialog(); } } @@ -219,13 +212,12 @@ struct Sculpt::Network : Network_dialog::Action _runtime_config_generator.generate_runtime_config(); } - Network(Env &env, Allocator &alloc, Registry &child_states, - Menu_view::Hover_update_handler &hover_update_handler, + Network(Env &env, Allocator &alloc, Action &action, + Registry &child_states, Runtime_config_generator &runtime_config_generator, Runtime_info const &runtime_info, Pci_info const &pci_info) : - _env(env), _alloc(alloc), _child_states(child_states), - _hover_update_handler(hover_update_handler), + _env(env), _alloc(alloc), _action(action), _child_states(child_states), _runtime_config_generator(runtime_config_generator), _runtime_info(runtime_info), _pci_info(pci_info) { From 697d2e86d73cb7684d3db7fd1bb1dd24ff48f37f Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 24 Aug 2022 14:37:47 +0200 Subject: [PATCH 186/354] sculpt: add modem support via USB net This patch adds principle support for using a USB-net modem as mobile-data uplink. The change is motivated by the upcoming phone manager for the PinePhone where the modem serves as the primary network uplink. For the regular PC version of Sculpt, the feature is not needed (hence remains disabled) because USB net can be deployed from a package as described in: https://genodians.org/jschlatow/2021-07-21-mobile-network The patch also renames the "Local" network option to "Disconnected" to be more intuitive. --- repos/gems/src/app/sculpt_manager/main.cc | 9 +++- .../src/app/sculpt_manager/model/nic_target.h | 8 +-- .../src/app/sculpt_manager/model/pci_info.h | 4 +- repos/gems/src/app/sculpt_manager/network.cc | 23 ++++++-- repos/gems/src/app/sculpt_manager/network.h | 15 ++---- repos/gems/src/app/sculpt_manager/runtime.cc | 1 + repos/gems/src/app/sculpt_manager/runtime.h | 1 + .../src/app/sculpt_manager/runtime/usb_net.cc | 52 +++++++++++++++++++ .../app/sculpt_manager/view/network_dialog.cc | 24 +++++---- 9 files changed, 108 insertions(+), 29 deletions(-) create mode 100644 repos/gems/src/app/sculpt_manager/runtime/usb_net.cc diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 16167168ea..0fb89b8298 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -171,7 +171,9 @@ struct Sculpt::Main : Input_event_handler, void _handle_pci_devices() { _pci_devices.update(); - _pci_info.wifi_present = false; + _pci_info.wifi_present = false; + _pci_info.lan_present = true; + _pci_info.modem_present = false; _pci_devices.xml().for_each_sub_node("device", [&] (Xml_node device) { @@ -799,6 +801,11 @@ struct Sculpt::Main : Input_event_handler, _network.restart_wifi_drv_on_next_runtime_cfg(); generate_runtime_config(); + } else if (name == "usb_net") { + + _network.restart_usb_net_on_next_runtime_cfg(); + generate_runtime_config(); + } else { _runtime_state.restart(name); diff --git a/repos/gems/src/app/sculpt_manager/model/nic_target.h b/repos/gems/src/app/sculpt_manager/model/nic_target.h index 0ecd282262..712533aca6 100644 --- a/repos/gems/src/app/sculpt_manager/model/nic_target.h +++ b/repos/gems/src/app/sculpt_manager/model/nic_target.h @@ -32,7 +32,7 @@ struct Sculpt::Nic_target : Noncopyable * config is provided, it takes precedence over the 'UNDEFINED' managed * state. */ - enum Type { UNDEFINED, OFF, LOCAL, WIRED, WIFI }; + enum Type { UNDEFINED, OFF, DISCONNECTED, WIRED, WIFI, MODEM }; /** * Interactive selection by the user, used when managed policy is in effect @@ -68,15 +68,17 @@ struct Sculpt::Nic_target : Noncopyable return (result == UNDEFINED) ? OFF : result; } - bool local() const { return type() == LOCAL; } + bool local() const { return type() == DISCONNECTED; } bool wired() const { return type() == WIRED; } bool wifi() const { return type() == WIFI; } + bool modem() const { return type() == MODEM; } bool nic_router_needed() const { return type() != OFF; } bool ready() const { return type() == WIRED || type() == WIFI || - type() == LOCAL; } + type() == MODEM || + type() == DISCONNECTED; } }; #endif /* _MODEL__NIC_TARGET_H_ */ diff --git a/repos/gems/src/app/sculpt_manager/model/pci_info.h b/repos/gems/src/app/sculpt_manager/model/pci_info.h index e36b59e6f7..19b2b8977c 100644 --- a/repos/gems/src/app/sculpt_manager/model/pci_info.h +++ b/repos/gems/src/app/sculpt_manager/model/pci_info.h @@ -20,7 +20,9 @@ namespace Sculpt { struct Pci_info; } struct Sculpt::Pci_info { - bool wifi_present = false; + bool wifi_present = false; + bool lan_present = false; + bool modem_present = false; }; #endif /* _MODEL__PCI_INFO_H_ */ diff --git a/repos/gems/src/app/sculpt_manager/network.cc b/repos/gems/src/app/sculpt_manager/network.cc index 66b9b1e0b6..b386fad5a9 100644 --- a/repos/gems/src/app/sculpt_manager/network.cc +++ b/repos/gems/src/app/sculpt_manager/network.cc @@ -80,8 +80,9 @@ void Sculpt::Network::_generate_nic_router_config() bool uplink_exists = true; switch (_nic_target.type()) { - case Nic_target::WIRED: _generate_nic_router_uplink(xml, "nic_drv -> "); break; - case Nic_target::WIFI: _generate_nic_router_uplink(xml, "wifi_drv -> "); break; + case Nic_target::WIRED: _generate_nic_router_uplink(xml, "nic_drv -> "); break; + case Nic_target::WIFI: _generate_nic_router_uplink(xml, "wifi_drv -> "); break; + case Nic_target::MODEM: _generate_nic_router_uplink(xml, "usb_net -> "); break; default: uplink_exists = false; } gen_named_node(xml, "domain", "default", [&] () { @@ -90,7 +91,7 @@ void Sculpt::Network::_generate_nic_router_config() xml.node("dhcp-server", [&] () { xml.attribute("ip_first", "10.0.1.2"); xml.attribute("ip_last", "10.0.1.200"); - if (_nic_target.type() != Nic_target::LOCAL) { + if (_nic_target.type() != Nic_target::DISCONNECTED) { xml.attribute("dns_config_from", "uplink"); } }); @@ -165,7 +166,7 @@ void Sculpt::Network::_update_nic_target_from_config(Xml_node const &config) if (!config.has_sub_node("domain")) return Nic_target::OFF; - Nic_target::Type result = Nic_target::LOCAL; + Nic_target::Type result = Nic_target::DISCONNECTED; config.for_each_sub_node("policy", [&] (Xml_node uplink) { @@ -178,6 +179,9 @@ void Sculpt::Network::_update_nic_target_from_config(Xml_node const &config) if (uplink.attribute_value("label", String<16>()) == "wifi_drv -> ") result = Nic_target::WIFI; + + if (uplink.attribute_value("label", String<16>()) == "usb_net -> ") + result = Nic_target::MODEM; }); return result; }; @@ -218,7 +222,16 @@ void Sculpt::Network::gen_runtime_start_nodes(Xml_generator &xml) const xml.node("start", [&] () { gen_nic_router_start_content(xml); }); break; - case Nic_target::LOCAL: + case Nic_target::MODEM: + + xml.node("start", [&] () { + xml.attribute("version", _usb_net_version); + gen_usb_net_start_content(xml); + }); + xml.node("start", [&] () { gen_nic_router_start_content(xml); }); + break; + + case Nic_target::DISCONNECTED: xml.node("start", [&] () { gen_nic_router_start_content(xml); }); break; diff --git a/repos/gems/src/app/sculpt_manager/network.h b/repos/gems/src/app/sculpt_manager/network.h index c30758ebc5..bfbdff0d60 100644 --- a/repos/gems/src/app/sculpt_manager/network.h +++ b/repos/gems/src/app/sculpt_manager/network.h @@ -55,8 +55,9 @@ struct Sculpt::Network : Network_dialog::Action Wpa_passphrase wpa_passphrase { }; - unsigned _nic_drv_version = 0; + unsigned _nic_drv_version = 0; unsigned _wifi_drv_version = 0; + unsigned _usb_net_version = 0; Attached_rom_dataspace _wlan_accesspoints_rom { _env, "report -> runtime/wifi_drv/accesspoints" }; @@ -174,15 +175,9 @@ struct Sculpt::Network : Network_dialog::Action }); } - void restart_nic_drv_on_next_runtime_cfg() - { - _nic_drv_version++; - } - - void restart_wifi_drv_on_next_runtime_cfg() - { - _wifi_drv_version++; - } + void restart_nic_drv_on_next_runtime_cfg() { _nic_drv_version++; } + void restart_wifi_drv_on_next_runtime_cfg() { _wifi_drv_version++; } + void restart_usb_net_on_next_runtime_cfg() { _usb_net_version++; } void wifi_disconnect() override { diff --git a/repos/gems/src/app/sculpt_manager/runtime.cc b/repos/gems/src/app/sculpt_manager/runtime.cc index 2e9f767aaf..d1455a6035 100644 --- a/repos/gems/src/app/sculpt_manager/runtime.cc +++ b/repos/gems/src/app/sculpt_manager/runtime.cc @@ -30,3 +30,4 @@ #include #include #include +#include diff --git a/repos/gems/src/app/sculpt_manager/runtime.h b/repos/gems/src/app/sculpt_manager/runtime.h index e61cc092d1..837c920109 100644 --- a/repos/gems/src/app/sculpt_manager/runtime.h +++ b/repos/gems/src/app/sculpt_manager/runtime.h @@ -71,6 +71,7 @@ namespace Sculpt { void gen_nic_drv_start_content(Xml_generator &); void gen_wifi_drv_start_content(Xml_generator &); + void gen_usb_net_start_content(Xml_generator &); void gen_nic_router_start_content(Xml_generator &); void gen_nic_router_uplink(Xml_generator &, char const *); diff --git a/repos/gems/src/app/sculpt_manager/runtime/usb_net.cc b/repos/gems/src/app/sculpt_manager/runtime/usb_net.cc new file mode 100644 index 0000000000..5f8c5810ab --- /dev/null +++ b/repos/gems/src/app/sculpt_manager/runtime/usb_net.cc @@ -0,0 +1,52 @@ +/* + * \brief XML configuration for USB network driver + * \author Norman Feske + * \date 2022-08-24 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include + +void Sculpt::gen_usb_net_start_content(Xml_generator &xml) +{ + gen_common_start_content(xml, "usb_net", + Cap_quota{200}, Ram_quota{20*1024*1024}, + Priority::NETWORK); + + xml.node("binary", [&] () { + xml.attribute("name", "usb_net_drv"); + }); + + xml.node("config", [&] () { + xml.attribute("mac", "02:00:00:00:01:05"); + }); + + xml.node("route", [&] () { + + xml.node("service", [&] () { + xml.attribute("name", "Uplink"); + xml.node("child", [&] () { + xml.attribute("name", "nic_router"); + xml.attribute("label", "usb_net -> "); + }); + }); + + gen_service_node(xml, [&] () { + xml.node("parent", [&] () { + xml.attribute("label", "usb_net"); }); }); + + gen_parent_rom_route(xml, "usb_net_drv"); + gen_parent_rom_route(xml, "ld.lib.so"); + gen_parent_route (xml); + gen_parent_route (xml); + gen_parent_route (xml); + gen_parent_route (xml); + gen_parent_route(xml); + }); +} diff --git a/repos/gems/src/app/sculpt_manager/view/network_dialog.cc b/repos/gems/src/app/sculpt_manager/view/network_dialog.cc index 49bd64b578..3e1b0baa38 100644 --- a/repos/gems/src/app/sculpt_manager/view/network_dialog.cc +++ b/repos/gems/src/app/sculpt_manager/view/network_dialog.cc @@ -211,7 +211,7 @@ void Network_dialog::generate(Xml_generator &xml) const auto gen_nic_button = [&] (Hoverable_item::Id const &id, Nic_target::Type const type, - String<10> const &label) { + String<20> const &label) { gen_named_node(xml, "button", id, [&] () { _nic_item.gen_button_attr(xml, id); @@ -229,18 +229,23 @@ void Network_dialog::generate(Xml_generator &xml) const * Allow interactive selection only if NIC-router configuration * is not manually maintained. */ - if (_nic_target.managed() || _nic_target.manual_type == Nic_target::LOCAL) - gen_nic_button("local", Nic_target::LOCAL, "Local"); + if (_nic_target.managed() || _nic_target.manual_type == Nic_target::DISCONNECTED) + gen_nic_button("disconnected", Nic_target::DISCONNECTED, "Disconnected"); if (_nic_target.managed() || _nic_target.manual_type == Nic_target::WIRED) - gen_nic_button("wired", Nic_target::WIRED, "Wired"); + if (_pci_info.lan_present) + gen_nic_button("wired", Nic_target::WIRED, "Wired"); if (_nic_target.managed() || _nic_target.manual_type == Nic_target::WIFI) if (_pci_info.wifi_present) gen_nic_button("wifi", Nic_target::WIFI, "Wifi"); + + if (_nic_target.managed() || _nic_target.manual_type == Nic_target::MODEM) + if (_pci_info.modem_present) + gen_nic_button("modem", Nic_target::MODEM, "Mobile data"); }); - if (_nic_target.wifi() || _nic_target.wired()) { + if (_nic_target.wifi() || _nic_target.wired() || _nic_target.modem()) { gen_named_node(xml, "frame", "nic_info", [&] () { xml.node("vbox", [&] () { @@ -287,10 +292,11 @@ Dialog::Hover_result Network_dialog::hover(Xml_node hover) void Network_dialog::click(Action &action) { - if (_nic_item.hovered("off")) action.nic_target(Nic_target::OFF); - if (_nic_item.hovered("local")) action.nic_target(Nic_target::LOCAL); - if (_nic_item.hovered("wired")) action.nic_target(Nic_target::WIRED); - if (_nic_item.hovered("wifi")) action.nic_target(Nic_target::WIFI); + if (_nic_item.hovered("off")) action.nic_target(Nic_target::OFF); + if (_nic_item.hovered("disconnected")) action.nic_target(Nic_target::DISCONNECTED); + if (_nic_item.hovered("wired")) action.nic_target(Nic_target::WIRED); + if (_nic_item.hovered("wifi")) action.nic_target(Nic_target::WIFI); + if (_nic_item.hovered("modem")) action.nic_target(Nic_target::MODEM); if (_wifi_connection.connected() && _ap_item.hovered(_wifi_connection.bssid)) { action.wifi_disconnect(); From bd8c7f84ddc27bf7051caa33b58bf8cd2d9d397a Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 24 Aug 2022 17:55:46 +0200 Subject: [PATCH 187/354] touch_keyboard: tweaks for PinePhone display This change increases the quota to allow the use of bigger fonts, and tweaks the style such that the keyboard gets a decent appearance on the PinePhone's 1440x720 display. --- repos/gems/recipes/pkg/touch_keyboard/runtime | 6 +- .../touch_keyboard_layout.config | 56 +++++++++---------- repos/gems/src/app/touch_keyboard/main.cc | 2 +- .../touch_keyboard/touch_keyboard_dialog.cc | 2 + .../touch_keyboard/touch_keyboard_dialog.h | 3 + 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/repos/gems/recipes/pkg/touch_keyboard/runtime b/repos/gems/recipes/pkg/touch_keyboard/runtime index 7a69ab255f..2754ebc584 100644 --- a/repos/gems/recipes/pkg/touch_keyboard/runtime +++ b/repos/gems/recipes/pkg/touch_keyboard/runtime @@ -1,4 +1,4 @@ - + @@ -20,9 +20,9 @@ - + - + diff --git a/repos/gems/recipes/raw/touch_keyboard/touch_keyboard_layout.config b/repos/gems/recipes/raw/touch_keyboard/touch_keyboard_layout.config index 2f57b2404f..88ef66657c 100644 --- a/repos/gems/recipes/raw/touch_keyboard/touch_keyboard_layout.config +++ b/repos/gems/recipes/raw/touch_keyboard/touch_keyboard_layout.config @@ -2,7 +2,7 @@ - + @@ -13,7 +13,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -41,8 +41,8 @@ - - + + @@ -50,26 +50,26 @@ - - + + - + - + - - - + + + - + @@ -80,7 +80,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -108,8 +108,8 @@ - - + + @@ -117,26 +117,26 @@ - - + + - + - + - - - + + + - + @@ -147,7 +147,7 @@ - + @@ -196,12 +196,12 @@ - + - + diff --git a/repos/gems/src/app/touch_keyboard/main.cc b/repos/gems/src/app/touch_keyboard/main.cc index c5b3719f32..32a02bbffc 100644 --- a/repos/gems/src/app/touch_keyboard/main.cc +++ b/repos/gems/src/app/touch_keyboard/main.cc @@ -49,7 +49,7 @@ struct Touch_keyboard::Main : Sandbox::Local_service_base::Wakeup, Registry _children { }; Child_state _menu_view_child_state { _children, "menu_view", - Ram_quota { 4*1024*1024 }, + Ram_quota { 10*1024*1024 }, Cap_quota { 200 } }; /** * Sandbox::State_handler diff --git a/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc b/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc index 47d70011ff..0940dddc47 100644 --- a/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc +++ b/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc @@ -48,6 +48,8 @@ void Dialog::produce_xml(Xml_generator &xml) xml.node("label", [&] () { xml.attribute("name", "label"); xml.attribute("text", key.label); + if (key.small) + xml.attribute("font", "annotation/regular"); }); }); }); diff --git a/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.h b/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.h index 73398c27af..c19abcbea9 100644 --- a/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.h +++ b/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.h @@ -68,6 +68,8 @@ struct Touch_keyboard::Dialog : private Dynamic_rom_session::Xml_producer unsigned min_ex = 0; + bool small = false; + Key(Id id) : _id(id) { } bool matches(Xml_node const &node) const { return _id == id_attr(node); } @@ -80,6 +82,7 @@ struct Touch_keyboard::Dialog : private Dynamic_rom_session::Xml_producer emit = { }; map = key.attribute_value("map", Map()); min_ex = key.attribute_value("min_ex", 0U); + small = key.attribute_value("small", false); if (key.has_attribute("char")) { label = key.attribute_value("char", Label()); From 2772abc8d7e69937da8b5f3157d44665465c0e56 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 25 Aug 2022 14:52:49 +0200 Subject: [PATCH 188/354] menu_view: configurable alpha channel and bg color This patch enhances menu_view with the optional configuration attributes 'opaque' and 'background'. Setting 'opaque' to "yes" suppresses the use of the alpha channel at the GUI session. This improves the drawing performance by 20% on the PinePhone. Since the menu_view uses the gems/gui_buffer.h utility, the 'Gui_buffer' received a new 'Alpha' argument at construction time. The 'background' attribute can be specified to define the reset color of the GUI buffer. It alleviates the need to create a frame widget for the top level. The patch also switches the optimization level for compiling menu_view to -O3, which increases the drawing performance on the PinePhone by 30%. Fixes #4592 --- repos/gems/include/gems/gui_buffer.h | 109 ++++++++++++++++--------- repos/gems/src/app/menu_view/main.cc | 36 ++++++-- repos/gems/src/app/menu_view/target.mk | 2 + 3 files changed, 101 insertions(+), 46 deletions(-) diff --git a/repos/gems/include/gems/gui_buffer.h b/repos/gems/include/gems/gui_buffer.h index 716a951e6c..e2588faaa9 100644 --- a/repos/gems/include/gems/gui_buffer.h +++ b/repos/gems/include/gems/gui_buffer.h @@ -48,41 +48,49 @@ struct Gui_buffer Framebuffer::Mode const mode; + bool const use_alpha; + + Pixel_rgb888 reset_color { 127, 127, 127, 255 }; + /** * Return dataspace capability for virtual framebuffer */ Genode::Dataspace_capability _ds_cap(Gui::Connection &gui) { /* setup virtual framebuffer mode */ - gui.buffer(mode, true); + gui.buffer(mode, use_alpha); return gui.framebuffer()->dataspace(); } Genode::Attached_dataspace fb_ds { rm, _ds_cap(gui) }; - Genode::size_t pixel_surface_num_bytes() const + size_t pixel_surface_num_bytes() const { return size().count()*sizeof(Pixel_rgb888); } - Genode::size_t alpha_surface_num_bytes() const + size_t alpha_surface_num_bytes() const { - return size().count(); + return use_alpha ? size().count() : 0; } Ram_ds pixel_surface_ds { ram, rm, pixel_surface_num_bytes() }; Ram_ds alpha_surface_ds { ram, rm, alpha_surface_num_bytes() }; + enum class Alpha { OPAQUE, ALPHA }; + /** * Constructor */ Gui_buffer(Gui::Connection &gui, Area size, - Genode::Ram_allocator &ram, Genode::Region_map &rm) + Genode::Ram_allocator &ram, Genode::Region_map &rm, + Alpha alpha = Alpha::ALPHA) : ram(ram), rm(rm), gui(gui), mode({ .area = { Genode::max(1U, size.w()), - Genode::max(1U, size.h()) } }) + Genode::max(1U, size.h()) } }), + use_alpha(alpha == Alpha::ALPHA) { reset_surface(); } @@ -93,33 +101,48 @@ struct Gui_buffer Area size() const { return mode.area; } template - void apply_to_surface(FN const &fn) + void with_alpha_surface(FN const &fn) + { + Area const alpha_size = use_alpha ? size() : Area(0, 0); + Alpha_surface alpha(alpha_surface_ds.local_addr(), alpha_size); + fn(alpha); + } + + template + void with_pixel_surface(FN const &fn) { Pixel_surface pixel(pixel_surface_ds.local_addr(), size()); - Alpha_surface alpha(alpha_surface_ds.local_addr(), size()); - fn(pixel, alpha); + fn(pixel); + } + + template + void apply_to_surface(FN const &fn) + { + with_alpha_surface([&] (Alpha_surface &alpha) { + with_pixel_surface([&] (Pixel_surface &pixel) { + fn(pixel, alpha); }); }); } void reset_surface() { - Pixel_surface pixel(pixel_surface_ds.local_addr(), size()); - Alpha_surface alpha(alpha_surface_ds.local_addr(), size()); + if (use_alpha) + with_alpha_surface([&] (Alpha_surface &alpha) { + Genode::memset(alpha.addr(), 0, alpha_surface_num_bytes()); }); - Genode::size_t const num_pixels = size().count(); - Genode::memset(alpha.addr(), 0, num_pixels); + with_pixel_surface([&] (Pixel_surface &pixel) { - /* - * Initialize color buffer with 50% gray - * - * We do not use black to limit the bleeding of black into antialiased - * drawing operations applied onto an initially transparent background. - */ - Pixel_rgb888 *dst = pixel.addr(); + /* + * Initialize color buffer with 50% gray + * + * We do not use black to limit the bleeding of black into antialiased + * drawing operations applied onto an initially transparent background. + */ + Pixel_rgb888 *dst = pixel.addr(); + Pixel_rgb888 const color = reset_color; - Pixel_rgb888 const gray(127, 127, 127, 255); - - for (size_t n = num_pixels; n; n--) - *dst++ = gray; + for (size_t n = size().count(); n; n--) + *dst++ = color; + }); } template @@ -136,6 +159,9 @@ struct Gui_buffer void _update_input_mask() { + if (!use_alpha) + return; + size_t const num_pixels = size().count(); unsigned char * const alpha_base = fb_ds.local_addr() @@ -159,26 +185,31 @@ struct Gui_buffer void flush_surface() { - /* represent back buffer as texture */ - Genode::Texture - pixel_texture(pixel_surface_ds.local_addr(), - nullptr, size()); - - Genode::Texture - alpha_texture(alpha_surface_ds.local_addr(), - nullptr, size()); - // XXX track dirty rectangles Rect const clip_rect(Genode::Surface_base::Point(0, 0), size()); - Pixel_rgb888 *pixel_base = fb_ds.local_addr(); - Pixel_alpha8 *alpha_base = fb_ds.local_addr() - + mode.bytes_per_pixel()*size().count(); + { + /* represent back buffer as texture */ + Genode::Texture + pixel_texture(pixel_surface_ds.local_addr(), + nullptr, size()); + Pixel_rgb888 *pixel_base = fb_ds.local_addr(); - _convert_back_to_front(pixel_base, pixel_texture, clip_rect); - _convert_back_to_front(alpha_base, alpha_texture, clip_rect); + _convert_back_to_front(pixel_base, pixel_texture, clip_rect); + } - _update_input_mask(); + if (use_alpha) { + Genode::Texture + alpha_texture(alpha_surface_ds.local_addr(), + nullptr, size()); + + Pixel_alpha8 *alpha_base = fb_ds.local_addr() + + mode.bytes_per_pixel()*size().count(); + + _convert_back_to_front(alpha_base, alpha_texture, clip_rect); + + _update_input_mask(); + } } }; diff --git a/repos/gems/src/app/menu_view/main.cc b/repos/gems/src/app/menu_view/main.cc index e27a39909c..a99da574d1 100644 --- a/repos/gems/src/app/menu_view/main.cc +++ b/repos/gems/src/app/menu_view/main.cc @@ -41,6 +41,11 @@ struct Menu_view::Main Constructible _buffer { }; + /** + * Alpha surface used when operating in opaque mode + */ + Surface _no_alpha { nullptr, Area(0,0) }; + Gui::Session::View_handle _view_handle = _gui.create_view(); /** @@ -128,6 +133,10 @@ struct Menu_view::Main Attached_dataspace _input_ds { _env.rm(), _gui.input()->dataspace() }; + bool _opaque = false; + + Color _background_color { }; + Widget::Hovered _last_reported_hovered { }; void _handle_config(); @@ -296,14 +305,20 @@ void Menu_view::Main::_handle_config() { _config.update(); + Xml_node const config = _config.xml(); + try { - _hover_reporter.enabled(_config.xml().sub_node("report") - .attribute_value("hover", false)); + _hover_reporter.enabled(config.sub_node("report") + .attribute_value("hover", false)); } catch (...) { _hover_reporter.enabled(false); } - _config.xml().with_sub_node("vfs", [&] (Xml_node const &vfs_node) { + _opaque = config.attribute_value("opaque", false); + + _background_color = config.attribute_value("background", Color(127, 127, 127, 255)); + + config.with_sub_node("vfs", [&] (Xml_node const &vfs_node) { _vfs_env.root_dir().apply_config(vfs_node); }); _handle_dialog_update(); @@ -389,10 +404,17 @@ void Menu_view::Main::_handle_frame_timer() bool const size_increased = (max_size.w() > buffer_w) || (max_size.h() > buffer_h); - if (!_buffer.constructed() || size_increased) - _buffer.construct(_gui, max_size, _env.ram(), _env.rm()); - else + if (!_buffer.constructed() || size_increased) { + _buffer.construct(_gui, max_size, _env.ram(), _env.rm(), + _opaque ? Gui_buffer::Alpha::OPAQUE + : Gui_buffer::Alpha::ALPHA); + _buffer->reset_color = { _background_color.r, + _background_color.g, + _background_color.b, + _background_color.a }; + } else { _buffer->reset_surface(); + } _root_widget.position(Point(0, 0)); @@ -400,7 +422,7 @@ void Menu_view::Main::_handle_frame_timer() // don't perform a full dialog update _buffer->apply_to_surface([&] (Surface &pixel, Surface &alpha) { - _root_widget.draw(pixel, alpha, Point(0, 0)); + _root_widget.draw(pixel, _opaque ? _no_alpha : alpha, Point(0, 0)); }); _buffer->flush_surface(); diff --git a/repos/gems/src/app/menu_view/target.mk b/repos/gems/src/app/menu_view/target.mk index e9c1be2d79..473b384127 100644 --- a/repos/gems/src/app/menu_view/target.mk +++ b/repos/gems/src/app/menu_view/target.mk @@ -3,6 +3,8 @@ SRC_CC = main.cc LIBS = base libc libm vfs libpng zlib blit file INC_DIR += $(PRG_DIR) +CC_OLEVEL := -O3 + CUSTOM_TARGET_DEPS += menu_view_styles.tar BUILD_ARTIFACTS := $(TARGET) menu_view_styles.tar From 461a27a674df98f8bb375d47df03613484760e7c Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 25 Aug 2022 15:09:23 +0200 Subject: [PATCH 189/354] sculpt_manager: support opaque menu_view instances Related to issue #4592. --- repos/gems/src/app/sculpt_manager/menu_view.cc | 9 +++++++-- repos/gems/src/app/sculpt_manager/menu_view.h | 10 +++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/repos/gems/src/app/sculpt_manager/menu_view.cc b/repos/gems/src/app/sculpt_manager/menu_view.cc index 8035b083ac..b13bd243fb 100644 --- a/repos/gems/src/app/sculpt_manager/menu_view.cc +++ b/repos/gems/src/app/sculpt_manager/menu_view.cc @@ -59,14 +59,16 @@ Menu_view::Menu_view(Env &env, Registry ®istry, Ram_quota ram_quota, Cap_quota cap_quota, Session_label const &dialog_report_name, Session_label const &hover_rom_name, - Hover_update_handler &hover_update_handler) + Hover_update_handler &hover_update_handler, + Alpha alpha, Color background_color) : _dialog(dialog), _hover_update_handler(hover_update_handler), _child_state(registry, name, Priority::LEITZENTRALE, ram_quota, cap_quota), _dialog_reporter(env, "dialog", dialog_report_name.string()), _hover_rom(env, hover_rom_name.string()), - _hover_handler(env.ep(), *this, &Menu_view::_handle_hover) + _hover_handler(env.ep(), *this, &Menu_view::_handle_hover), + _opaque(alpha == Alpha::OPAQUE), _background_color(background_color) { _hover_rom.sigh(_hover_handler); @@ -108,6 +110,9 @@ void Menu_view::_gen_start_node_content(Xml_generator &xml) const xml.node("config", [&] () { if (min_width) xml.attribute("width", min_width); if (min_height) xml.attribute("height", min_height); + if (_opaque) xml.attribute("opaque", "yes"); + + xml.attribute("background", String<20>(_background_color)); xml.node("libc", [&] () { xml.attribute("stderr", "/dev/log"); }); xml.node("report", [&] () { xml.attribute("hover", "yes"); }); diff --git a/repos/gems/src/app/sculpt_manager/menu_view.h b/repos/gems/src/app/sculpt_manager/menu_view.h index 6e9b8f8ea0..0c87b37492 100644 --- a/repos/gems/src/app/sculpt_manager/menu_view.h +++ b/repos/gems/src/app/sculpt_manager/menu_view.h @@ -46,6 +46,10 @@ struct Sculpt::Menu_view : Noncopyable Signal_handler _hover_handler; + bool const _opaque; + + Color const _background_color; + bool _hovered = false; Constructible _seq_number { }; @@ -57,11 +61,15 @@ struct Sculpt::Menu_view : Noncopyable void _gen_start_node_content(Xml_generator &) const; + enum class Alpha { OPAQUE, ALPHA }; + Menu_view(Env &, Registry ®istry, Dialog &, Start_name const &, Ram_quota, Cap_quota, Session_label const &dialog_report_name, Session_label const &hover_rom_name, - Hover_update_handler &); + Hover_update_handler &, + Alpha alpha = Alpha::ALPHA, + Color background = Color { 127, 127, 127, 255 }); void generate(); From 60194d666d1049f13d9d1f69291c76290add9ea4 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 26 Aug 2022 11:31:03 +0200 Subject: [PATCH 190/354] menu_view: add 'important' frame style This style is used by the upcoming phone version of Sculpt for GUI elements that are supposed to stand out a little bit more than the regular frame style. --- .../styles/frame/important/background.png | Bin 0 -> 1259 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 repos/gems/src/app/menu_view/styles/frame/important/background.png diff --git a/repos/gems/src/app/menu_view/styles/frame/important/background.png b/repos/gems/src/app/menu_view/styles/frame/important/background.png new file mode 100644 index 0000000000000000000000000000000000000000..231587c210f5443345c8cfbaa9c3343c3198dbb3 GIT binary patch literal 1259 zcmVe-)nXaCJf!wIOGE-9O^CS^htmn^8Rt6kYvt1;mP|Kbhg<8+tgkm7U%Ialj zNCWKZmECr&kB+^>zb$Q?o;;-#O%csm36TK~24LF^1ptQBNQjaMIBbcGo|P?PNV@=R zmgI0zIH?$hTLege27FE_k(6!2RggrGnSCQNAPH4fK%uJAPL%7b^@F^Y1*9N|CPgDa z658ronU=)K44@PNOn)QVilhJl!4QB_bY%CKV_wSz&rW~i+2-|Q+mGJ7`ESn^FB$IO zBKZWsw~H=#cKSOrJJR_RfJgQuY)jw0;vI^Gy{+Ks`$X|%Xshq;uOFUYe*|3bev5Q3X+sWX|)+Qz8s(LDq}C1dDLP};W#z$io7ulcS}@{q3&pCJ%bq_XhG^V4VmG9p}6h&Ifbw#@jwZGORgncX0x z>=M|TB8DmTG$lOwVPU?1U3`oqnp{b>V9)H0K-dN%X8#eNcol#?!A-DbCR#)hT+J51 z40sm;$$L_8-`-NXPLzb8xRsS%q}!|!UD*u;puG{iwT#U<+PMc#xBxRd)UYc{WcJ>p zwTLX>^H6jWkkf~1#RXu&H8H~%d{D3@DO;7*THDlgOc#RChXZ`y?}N&?TnI&E?{6rg zL5!YVAUQ#jcvG}HxJki4P4S>=m6?(v6qsYs?=S57S40p7iySJeH%;YpW7lA+0D1N= zmkW*eeB+hox2O76E|a8PY?#Wxs%!*-!ye!j{^u1X8K{EGP5@4Of?{k@0pOO&TUYRd zdw^Z{Y-@>N7zi69f!yMnQE0;ig0Cqwt%@GvnYA)sw=Bl+1U(KWdcCSn3H0$=en^HhRqq*Nlk!$dh%3? zAc6M9ojWgfoo8Q{HxD%^=Uo2%`=5JRIojs>=r|hytdEXsR-^#@4Dg$`4181c+nzDt zUwZbvX7+I$vvTivwm0Y2N5?kMGy7J``*C_u{0Y_* Date: Mon, 29 Aug 2022 07:53:49 +0200 Subject: [PATCH 191/354] Prevent warning in trace-recorder policy Make warned about make[2]: Circular /plain/krishna/build/genode_staging/x86_64/bin/ctf0_pcapng <- ctf0_pcapng dependency dropped. --- repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk b/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk index 078d1e4d65..2c152477c6 100644 --- a/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk +++ b/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk @@ -1,4 +1,4 @@ -TARGET = ctf0_pcapng +TARGET = ctf0_pcapng_policy TARGET_POLICY = ctf0_pcapng From 85044d65afa3ff6a32f038a70cb30bc91dd4d11c Mon Sep 17 00:00:00 2001 From: Christian Prochaska Date: Mon, 29 Aug 2022 17:19:58 +0200 Subject: [PATCH 192/354] qt5: add missing include in qtwebengine Fixes #4595 --- repos/libports/ports/qt5.hash | 2 +- repos/libports/ports/qt5.port | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/libports/ports/qt5.hash b/repos/libports/ports/qt5.hash index 12d420c6d4..0ed81e1d76 100644 --- a/repos/libports/ports/qt5.hash +++ b/repos/libports/ports/qt5.hash @@ -1 +1 @@ -cf64ea7028a957683bad0154451c1d7f516a4336 +aca39e23d0911602ac6281935df726f32db05b3d diff --git a/repos/libports/ports/qt5.port b/repos/libports/ports/qt5.port index 2f736c6899..5be6cc9ae5 100644 --- a/repos/libports/ports/qt5.port +++ b/repos/libports/ports/qt5.port @@ -4,5 +4,5 @@ VERSION := 5.15.2 DOWNLOADS := qt5.git URL(qt5) := https://github.com/cproc/qt5.git -REV(qt5) := issue4589 +REV(qt5) := issue4595 DIR(qt5) := src/lib/qt5 From 4dddc41b717517116dddb000ddb53e1069c55fe3 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 31 Aug 2022 07:45:56 +0200 Subject: [PATCH 193/354] depot: update recipe hashes --- repos/base-fiasco/recipes/src/base-fiasco/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash | 2 +- repos/base-foc/recipes/src/base-foc-pbxa9/hash | 2 +- repos/base-foc/recipes/src/base-foc-pc/hash | 2 +- repos/base-foc/recipes/src/base-foc-rpi3/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash | 2 +- repos/base-hw/recipes/src/base-hw-nit6_solox/hash | 2 +- repos/base-hw/recipes/src/base-hw-pbxa9/hash | 2 +- repos/base-hw/recipes/src/base-hw-pc/hash | 2 +- repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash | 2 +- repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash | 2 +- repos/base-linux/recipes/src/base-linux/hash | 2 +- repos/base-nova/recipes/src/base-nova/hash | 2 +- repos/base-okl4/recipes/src/base-okl4/hash | 2 +- repos/base-pistachio/recipes/src/base-pistachio/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-x86/hash | 2 +- repos/base/recipes/api/base/hash | 2 +- repos/base/recipes/pkg/test-ds_ownership/hash | 2 +- repos/base/recipes/pkg/test-entrypoint/hash | 2 +- repos/base/recipes/pkg/test-log/hash | 2 +- repos/base/recipes/pkg/test-mmio/hash | 2 +- repos/base/recipes/pkg/test-new_delete/hash | 2 +- repos/base/recipes/pkg/test-reconstructible/hash | 2 +- repos/base/recipes/pkg/test-registry/hash | 2 +- repos/base/recipes/pkg/test-rm_fault/hash | 2 +- repos/base/recipes/pkg/test-rm_fault_no_nox/hash | 2 +- repos/base/recipes/pkg/test-rm_nested/hash | 2 +- repos/base/recipes/pkg/test-rm_stress/hash | 2 +- repos/base/recipes/pkg/test-sanitizer/hash | 2 +- repos/base/recipes/pkg/test-stack_smash/hash | 2 +- repos/base/recipes/pkg/test-synced_interface/hash | 2 +- repos/base/recipes/pkg/test-timer/hash | 2 +- repos/base/recipes/pkg/test-tls/hash | 2 +- repos/base/recipes/pkg/test-token/hash | 2 +- repos/base/recipes/pkg/test-xml_generator/hash | 2 +- repos/base/recipes/pkg/test-xml_node/hash | 2 +- repos/base/recipes/src/test-ds_ownership/hash | 2 +- repos/base/recipes/src/test-entrypoint/hash | 2 +- repos/base/recipes/src/test-log/hash | 2 +- repos/base/recipes/src/test-mmio/hash | 2 +- repos/base/recipes/src/test-new_delete/hash | 2 +- repos/base/recipes/src/test-reconstructible/hash | 2 +- repos/base/recipes/src/test-registry/hash | 2 +- repos/base/recipes/src/test-rm_fault/hash | 2 +- repos/base/recipes/src/test-rm_nested/hash | 2 +- repos/base/recipes/src/test-rm_stress/hash | 2 +- repos/base/recipes/src/test-sanitizer/hash | 2 +- repos/base/recipes/src/test-segfault/hash | 2 +- repos/base/recipes/src/test-stack_smash/hash | 2 +- repos/base/recipes/src/test-synced_interface/hash | 2 +- repos/base/recipes/src/test-timer/hash | 2 +- repos/base/recipes/src/test-tls/hash | 2 +- repos/base/recipes/src/test-token/hash | 2 +- repos/base/recipes/src/test-xml_generator/hash | 2 +- repos/base/recipes/src/test-xml_node/hash | 2 +- repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash | 2 +- repos/dde_bsd/recipes/src/bsd_audio_drv/hash | 2 +- repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash | 2 +- repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash | 2 +- repos/dde_linux/recipes/pkg/usb_modem_drv/hash | 2 +- repos/dde_linux/recipes/pkg/wireguard/hash | 2 +- repos/dde_linux/recipes/src/fec_nic_drv/hash | 2 +- repos/dde_linux/recipes/src/legacy_usb_host_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_hid_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_modem_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_net_drv/hash | 2 +- repos/dde_linux/recipes/src/vfs_lxip/hash | 2 +- repos/dde_linux/recipes/src/wireguard/hash | 2 +- repos/dde_rump/recipes/pkg/ext2_fs/hash | 2 +- repos/dde_rump/recipes/src/rump/hash | 2 +- repos/demo/recipes/src/demo/hash | 2 +- repos/gems/recipes/api/gems/hash | 2 +- repos/gems/recipes/pkg/backdrop/hash | 2 +- repos/gems/recipes/pkg/cbe_check/hash | 2 +- repos/gems/recipes/pkg/cbe_demo/hash | 2 +- repos/gems/recipes/pkg/cbe_fs/hash | 2 +- repos/gems/recipes/pkg/cbe_init/hash | 2 +- repos/gems/recipes/pkg/cbe_shell/hash | 2 +- repos/gems/recipes/pkg/cbe_ta_fs/hash | 2 +- repos/gems/recipes/pkg/cbe_ta_vfs/hash | 2 +- repos/gems/recipes/pkg/cbe_vbox5-nova/hash | 2 +- repos/gems/recipes/pkg/cbe_vfs/hash | 2 +- repos/gems/recipes/pkg/cbe_vm_fs/hash | 2 +- repos/gems/recipes/pkg/depot_download/hash | 2 +- repos/gems/recipes/pkg/download_coreplus/hash | 2 +- repos/gems/recipes/pkg/drivers_managed-pc/hash | 2 +- repos/gems/recipes/pkg/drivers_nic-pc/hash | 2 +- repos/gems/recipes/pkg/file_vault/hash | 2 +- repos/gems/recipes/pkg/fonts_fs/hash | 2 +- repos/gems/recipes/pkg/motif_decorator/hash | 2 +- repos/gems/recipes/pkg/motif_wm/hash | 2 +- repos/gems/recipes/pkg/nano3d/hash | 2 +- repos/gems/recipes/pkg/sculpt/hash | 2 +- repos/gems/recipes/pkg/sculpt_distribution-pc/hash | 2 +- repos/gems/recipes/pkg/sculpt_distribution/hash | 2 +- repos/gems/recipes/pkg/sticks_blue_backdrop/hash | 2 +- repos/gems/recipes/pkg/terminal/hash | 2 +- repos/gems/recipes/pkg/test-depot_query_index/hash | 2 +- repos/gems/recipes/pkg/test-fs_tool/hash | 2 +- repos/gems/recipes/pkg/test-libc_vfs_audit/hash | 2 +- repos/gems/recipes/pkg/themed_decorator/hash | 2 +- repos/gems/recipes/pkg/themed_wm/hash | 2 +- repos/gems/recipes/pkg/touch_keyboard/hash | 2 +- repos/gems/recipes/pkg/trace_fs/hash | 2 +- repos/gems/recipes/pkg/trace_recorder/hash | 2 +- repos/gems/recipes/pkg/window_layouter/hash | 2 +- repos/gems/recipes/pkg/wm/hash | 2 +- repos/gems/recipes/raw/touch_keyboard/hash | 2 +- repos/gems/recipes/src/backdrop/hash | 2 +- repos/gems/recipes/src/cbe/hash | 2 +- repos/gems/recipes/src/cpu_load_display/hash | 2 +- repos/gems/recipes/src/decorator/hash | 2 +- repos/gems/recipes/src/depot_deploy/hash | 2 +- repos/gems/recipes/src/depot_download_manager/hash | 2 +- repos/gems/recipes/src/depot_query/hash | 2 +- repos/gems/recipes/src/driver_manager/hash | 2 +- repos/gems/recipes/src/file_terminal/hash | 2 +- repos/gems/recipes/src/file_vault/hash | 2 +- repos/gems/recipes/src/fs_query/hash | 2 +- repos/gems/recipes/src/fs_tool/hash | 2 +- repos/gems/recipes/src/gpt_write/hash | 2 +- repos/gems/recipes/src/gui_fader/hash | 2 +- repos/gems/recipes/src/menu_view/hash | 2 +- repos/gems/recipes/src/mixer_gui_qt/hash | 2 +- repos/gems/recipes/src/nano3d/hash | 2 +- repos/gems/recipes/src/sculpt_manager/hash | 2 +- repos/gems/recipes/src/terminal/hash | 2 +- repos/gems/recipes/src/test-tiled_wm/hash | 2 +- repos/gems/recipes/src/text_area/hash | 2 +- repos/gems/recipes/src/themed_decorator/hash | 2 +- repos/gems/recipes/src/touch_keyboard/hash | 2 +- repos/gems/recipes/src/trace_recorder/hash | 2 +- repos/gems/recipes/src/trace_recorder_policy/hash | 2 +- repos/gems/recipes/src/vfs_audit/hash | 2 +- repos/gems/recipes/src/vfs_gpu/hash | 2 +- repos/gems/recipes/src/vfs_import/hash | 2 +- repos/gems/recipes/src/vfs_pipe/hash | 2 +- repos/gems/recipes/src/vfs_trace/hash | 2 +- repos/gems/recipes/src/vfs_ttf/hash | 2 +- repos/gems/recipes/src/window_layouter/hash | 2 +- repos/gems/recipes/src/wm/hash | 2 +- repos/libports/recipes/api/libc/hash | 2 +- repos/libports/recipes/api/pcsc-lite/hash | 2 +- repos/libports/recipes/api/qt5/hash | 2 +- repos/libports/recipes/pkg/acpica/hash | 2 +- repos/libports/recipes/pkg/gcov/hash | 2 +- repos/libports/recipes/pkg/mesa_gears/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-cpu/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-intel/hash | 2 +- repos/libports/recipes/pkg/pdf_view/hash | 2 +- repos/libports/recipes/pkg/qt5_textedit/hash | 2 +- repos/libports/recipes/pkg/system_clock-pc/hash | 2 +- repos/libports/recipes/pkg/system_rtc-linux/hash | 2 +- repos/libports/recipes/pkg/system_rtc-pc/hash | 2 +- repos/libports/recipes/pkg/test-expat/hash | 2 +- repos/libports/recipes/pkg/test-ldso/hash | 2 +- repos/libports/recipes/pkg/test-libc/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lwip/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lxip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash | 2 +- repos/libports/recipes/pkg/test-libc_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_execve/hash | 2 +- repos/libports/recipes/pkg/test-libc_fifo_pipe/hash | 2 +- repos/libports/recipes/pkg/test-libc_fork/hash | 2 +- repos/libports/recipes/pkg/test-libc_getenv/hash | 2 +- repos/libports/recipes/pkg/test-libc_pipe/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_ram/hash | 2 +- repos/libports/recipes/pkg/test-pthread/hash | 2 +- repos/libports/recipes/pkg/test-sequence/hash | 2 +- repos/libports/recipes/pkg/test-spark/hash | 2 +- repos/libports/recipes/pkg/test-spark_exception/hash | 2 +- repos/libports/recipes/pkg/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/pkg/test-stdcxx/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash | 2 +- repos/libports/recipes/pkg/usb_webcam/hash | 2 +- repos/libports/recipes/src/acpica/hash | 2 +- repos/libports/recipes/src/curl/hash | 2 +- repos/libports/recipes/src/expat/hash | 2 +- repos/libports/recipes/src/extract/hash | 2 +- repos/libports/recipes/src/fetchurl/hash | 2 +- repos/libports/recipes/src/ffi/hash | 2 +- repos/libports/recipes/src/freetype/hash | 2 +- repos/libports/recipes/src/fs_utils/hash | 2 +- repos/libports/recipes/src/gcov/hash | 2 +- repos/libports/recipes/src/gmp/hash | 2 +- repos/libports/recipes/src/icu/hash | 2 +- repos/libports/recipes/src/jbig2dec/hash | 2 +- repos/libports/recipes/src/jpeg/hash | 2 +- repos/libports/recipes/src/libarchive/hash | 2 +- repos/libports/recipes/src/libc/hash | 2 +- repos/libports/recipes/src/libdrm/hash | 2 +- repos/libports/recipes/src/libiconv/hash | 2 +- repos/libports/recipes/src/liblzma/hash | 2 +- repos/libports/recipes/src/libpng/hash | 2 +- repos/libports/recipes/src/libqgenodeviewwidget/hash | 2 +- repos/libports/recipes/src/libqpluginwidget/hash | 2 +- repos/libports/recipes/src/libsparkcrypto/hash | 2 +- repos/libports/recipes/src/libssh/hash | 2 +- repos/libports/recipes/src/libusb/hash | 2 +- repos/libports/recipes/src/libuvc/hash | 2 +- repos/libports/recipes/src/libyuv/hash | 2 +- repos/libports/recipes/src/mesa/hash | 2 +- repos/libports/recipes/src/mesa_gears/hash | 2 +- repos/libports/recipes/src/mupdf/hash | 2 +- repos/libports/recipes/src/ncurses/hash | 2 +- repos/libports/recipes/src/openjpeg/hash | 2 +- repos/libports/recipes/src/openssl/hash | 2 +- repos/libports/recipes/src/pcre/hash | 2 +- repos/libports/recipes/src/pcre16/hash | 2 +- repos/libports/recipes/src/pcsc-lite/hash | 2 +- repos/libports/recipes/src/pdf_view/hash | 2 +- repos/libports/recipes/src/posix/hash | 2 +- repos/libports/recipes/src/qt5_base/hash | 2 +- repos/libports/recipes/src/qt5_calculatorform/hash | 2 +- repos/libports/recipes/src/qt5_component/hash | 2 +- repos/libports/recipes/src/qt5_declarative/hash | 2 +- repos/libports/recipes/src/qt5_graphicaleffects/hash | 2 +- repos/libports/recipes/src/qt5_launchpad/hash | 2 +- repos/libports/recipes/src/qt5_openglwindow/hash | 2 +- repos/libports/recipes/src/qt5_quickcontrols/hash | 2 +- repos/libports/recipes/src/qt5_quickcontrols2/hash | 2 +- repos/libports/recipes/src/qt5_samegame/hash | 2 +- repos/libports/recipes/src/qt5_svg/hash | 2 +- repos/libports/recipes/src/qt5_testqstring/hash | 2 +- repos/libports/recipes/src/qt5_tetrix/hash | 2 +- repos/libports/recipes/src/qt5_textedit/hash | 2 +- repos/libports/recipes/src/qt5_virtualkeyboard/hash | 2 +- repos/libports/recipes/src/qt5_virtualkeyboard_example/hash | 2 +- repos/libports/recipes/src/sanitizer/hash | 2 +- repos/libports/recipes/src/spark/hash | 2 +- repos/libports/recipes/src/stdcxx/hash | 2 +- repos/libports/recipes/src/stdin2out/hash | 2 +- repos/libports/recipes/src/system_rtc/hash | 2 +- repos/libports/recipes/src/test-expat/hash | 2 +- repos/libports/recipes/src/test-ldso/hash | 2 +- repos/libports/recipes/src/test-libc/hash | 2 +- repos/libports/recipes/src/test-libc_connect/hash | 2 +- repos/libports/recipes/src/test-libc_counter/hash | 2 +- repos/libports/recipes/src/test-libc_execve/hash | 2 +- repos/libports/recipes/src/test-libc_fifo_pipe/hash | 2 +- repos/libports/recipes/src/test-libc_fork/hash | 2 +- repos/libports/recipes/src/test-libc_getenv/hash | 2 +- repos/libports/recipes/src/test-libc_pipe/hash | 2 +- repos/libports/recipes/src/test-libc_vfs/hash | 2 +- repos/libports/recipes/src/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/src/test-netty/hash | 2 +- repos/libports/recipes/src/test-pthread/hash | 2 +- repos/libports/recipes/src/test-qpluginwidget/hash | 2 +- repos/libports/recipes/src/test-qt_core/hash | 2 +- repos/libports/recipes/src/test-qt_core_cmake/hash | 2 +- repos/libports/recipes/src/test-qt_quick/hash | 2 +- repos/libports/recipes/src/test-spark/hash | 2 +- repos/libports/recipes/src/test-spark_exception/hash | 2 +- repos/libports/recipes/src/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/src/test-stdcxx/hash | 2 +- repos/libports/recipes/src/test-tcp/hash | 2 +- repos/libports/recipes/src/usb_webcam/hash | 2 +- repos/libports/recipes/src/vesa_drv/hash | 2 +- repos/libports/recipes/src/vfs_fatfs/hash | 2 +- repos/libports/recipes/src/vfs_jitterentropy/hash | 2 +- repos/libports/recipes/src/vfs_libusb/hash | 2 +- repos/libports/recipes/src/vfs_lwip/hash | 2 +- repos/libports/recipes/src/vfs_oss/hash | 2 +- repos/libports/recipes/src/zlib/hash | 2 +- repos/os/recipes/api/net/hash | 2 +- repos/os/recipes/api/nic_session/hash | 2 +- repos/os/recipes/api/os/hash | 2 +- repos/os/recipes/api/uplink_session/hash | 2 +- repos/os/recipes/api/usb_session/hash | 2 +- repos/os/recipes/pkg/black_hole/hash | 2 +- repos/os/recipes/pkg/chroot/hash | 2 +- repos/os/recipes/pkg/clipboard/hash | 2 +- repos/os/recipes/pkg/cpu_balancer/hash | 2 +- repos/os/recipes/pkg/cpu_balancer_config/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-linux/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pc/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash | 2 +- repos/os/recipes/pkg/drivers_nic-linux/hash | 2 +- repos/os/recipes/pkg/drivers_nic-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash | 2 +- repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash | 2 +- repos/os/recipes/pkg/fs_report/hash | 2 +- repos/os/recipes/pkg/fs_rom/hash | 2 +- repos/os/recipes/pkg/mixer/hash | 2 +- repos/os/recipes/pkg/nic_router-nat/hash | 2 +- repos/os/recipes/pkg/nit_focus/hash | 2 +- repos/os/recipes/pkg/part_block/hash | 2 +- repos/os/recipes/pkg/recall_fs/hash | 2 +- repos/os/recipes/pkg/report_rom/hash | 2 +- repos/os/recipes/pkg/rom_filter/hash | 2 +- repos/os/recipes/pkg/rom_reporter/hash | 2 +- repos/os/recipes/pkg/test-black_hole/hash | 2 +- repos/os/recipes/pkg/test-capture/hash | 2 +- repos/os/recipes/pkg/test-clipboard/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config_loader/hash | 2 +- repos/os/recipes/pkg/test-fault_detection/hash | 2 +- repos/os/recipes/pkg/test-fs_packet/hash | 2 +- repos/os/recipes/pkg/test-fs_report/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_fs/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_ram/hash | 2 +- repos/os/recipes/pkg/test-init/hash | 2 +- repos/os/recipes/pkg/test-init_loop/hash | 2 +- repos/os/recipes/pkg/test-lx_block/hash | 2 +- repos/os/recipes/pkg/test-nic_loopback/hash | 2 +- repos/os/recipes/pkg/test-nic_perf/hash | 2 +- repos/os/recipes/pkg/test-nic_perf_router/hash | 2 +- repos/os/recipes/pkg/test-part_block_gpt/hash | 2 +- repos/os/recipes/pkg/test-part_block_mbr/hash | 2 +- repos/os/recipes/pkg/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/pkg/test-read_only_rom/hash | 2 +- repos/os/recipes/pkg/test-report_rom/hash | 2 +- repos/os/recipes/pkg/test-resource_request/hash | 2 +- repos/os/recipes/pkg/test-resource_yield/hash | 2 +- repos/os/recipes/pkg/test-rom_filter/hash | 2 +- repos/os/recipes/pkg/test-rtc/hash | 2 +- repos/os/recipes/pkg/test-sandbox/hash | 2 +- repos/os/recipes/pkg/test-signal/hash | 2 +- repos/os/recipes/pkg/test-slab/hash | 2 +- repos/os/recipes/pkg/test-terminal_crosslink/hash | 2 +- repos/os/recipes/pkg/test-trace/hash | 2 +- repos/os/recipes/pkg/test-trace_buffer/hash | 2 +- repos/os/recipes/pkg/test-trace_logger/hash | 2 +- repos/os/recipes/pkg/test-utf8/hash | 2 +- repos/os/recipes/pkg/test-vfs_block/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_fs/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_ram/hash | 2 +- repos/os/recipes/pkg/test-weak_ptr/hash | 2 +- repos/os/recipes/pkg/trace_logger/hash | 2 +- repos/os/recipes/pkg/vfs/hash | 2 +- repos/os/recipes/pkg/vfs_block/hash | 2 +- repos/os/recipes/src/acpi_drv/hash | 2 +- repos/os/recipes/src/ahci_drv/hash | 2 +- repos/os/recipes/src/black_hole/hash | 2 +- repos/os/recipes/src/block_tester/hash | 2 +- repos/os/recipes/src/boot_fb_drv/hash | 2 +- repos/os/recipes/src/cached_fs_rom/hash | 2 +- repos/os/recipes/src/chroot/hash | 2 +- repos/os/recipes/src/clipboard/hash | 2 +- repos/os/recipes/src/cpu_balancer/hash | 2 +- repos/os/recipes/src/cpu_burner/hash | 2 +- repos/os/recipes/src/dummy/hash | 2 +- repos/os/recipes/src/dummy_rtc_drv/hash | 2 +- repos/os/recipes/src/dynamic_rom/hash | 2 +- repos/os/recipes/src/event_filter/hash | 2 +- repos/os/recipes/src/fb_sdl/hash | 2 +- repos/os/recipes/src/fs_report/hash | 2 +- repos/os/recipes/src/fs_rom/hash | 2 +- repos/os/recipes/src/global_keys_handler/hash | 2 +- repos/os/recipes/src/gui_fb/hash | 2 +- repos/os/recipes/src/init/hash | 2 +- repos/os/recipes/src/input_event_bridge/hash | 2 +- repos/os/recipes/src/intel_gpu_drv/hash | 2 +- repos/os/recipes/src/lan9118_nic_drv/hash | 2 +- repos/os/recipes/src/linux_nic_drv/hash | 2 +- repos/os/recipes/src/linux_rtc_drv/hash | 2 +- repos/os/recipes/src/loader/hash | 2 +- repos/os/recipes/src/log_core/hash | 2 +- repos/os/recipes/src/log_terminal/hash | 2 +- repos/os/recipes/src/lx_block/hash | 2 +- repos/os/recipes/src/lx_fs/hash | 2 +- repos/os/recipes/src/mixer/hash | 2 +- repos/os/recipes/src/nic_bridge/hash | 2 +- repos/os/recipes/src/nic_loopback/hash | 2 +- repos/os/recipes/src/nic_perf/hash | 2 +- repos/os/recipes/src/nic_router/hash | 2 +- repos/os/recipes/src/nit_focus/hash | 2 +- repos/os/recipes/src/nitpicker/hash | 2 +- repos/os/recipes/src/nvme_drv/hash | 2 +- repos/os/recipes/src/part_block/hash | 2 +- repos/os/recipes/src/pbxa9_drivers/hash | 2 +- repos/os/recipes/src/pci_decode/hash | 2 +- repos/os/recipes/src/platform_drv/hash | 2 +- repos/os/recipes/src/ps2_drv/hash | 2 +- repos/os/recipes/src/report_rom/hash | 2 +- repos/os/recipes/src/rom_filter/hash | 2 +- repos/os/recipes/src/rom_logger/hash | 2 +- repos/os/recipes/src/rom_reporter/hash | 2 +- repos/os/recipes/src/rom_to_file/hash | 2 +- repos/os/recipes/src/rtc_drv/hash | 2 +- repos/os/recipes/src/sandbox/hash | 2 +- repos/os/recipes/src/sequence/hash | 2 +- repos/os/recipes/src/shim/hash | 2 +- repos/os/recipes/src/terminal_crosslink/hash | 2 +- repos/os/recipes/src/terminal_log/hash | 2 +- repos/os/recipes/src/test-black_hole/hash | 2 +- repos/os/recipes/src/test-bomb/hash | 2 +- repos/os/recipes/src/test-capture/hash | 2 +- repos/os/recipes/src/test-clipboard/hash | 2 +- repos/os/recipes/src/test-dynamic_config/hash | 2 +- repos/os/recipes/src/test-fault_detection/hash | 2 +- repos/os/recipes/src/test-fs_packet/hash | 2 +- repos/os/recipes/src/test-fs_report/hash | 2 +- repos/os/recipes/src/test-immutable_rom/hash | 2 +- repos/os/recipes/src/test-init/hash | 2 +- repos/os/recipes/src/test-init_loop/hash | 2 +- repos/os/recipes/src/test-nic_loopback/hash | 2 +- repos/os/recipes/src/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/src/test-report_rom/hash | 2 +- repos/os/recipes/src/test-resource_request/hash | 2 +- repos/os/recipes/src/test-resource_yield/hash | 2 +- repos/os/recipes/src/test-rtc/hash | 2 +- repos/os/recipes/src/test-sandbox/hash | 2 +- repos/os/recipes/src/test-signal/hash | 2 +- repos/os/recipes/src/test-slab/hash | 2 +- repos/os/recipes/src/test-terminal_crosslink/hash | 2 +- repos/os/recipes/src/test-trace/hash | 2 +- repos/os/recipes/src/test-trace_buffer/hash | 2 +- repos/os/recipes/src/test-trace_logger/hash | 2 +- repos/os/recipes/src/test-utf8/hash | 2 +- repos/os/recipes/src/test-vfs_capture/hash | 2 +- repos/os/recipes/src/test-vfs_stress/hash | 2 +- repos/os/recipes/src/test-weak_ptr/hash | 2 +- repos/os/recipes/src/top/hash | 2 +- repos/os/recipes/src/trace_logger/hash | 2 +- repos/os/recipes/src/trace_policy/hash | 2 +- repos/os/recipes/src/trace_subject_reporter/hash | 2 +- repos/os/recipes/src/usb_block_drv/hash | 2 +- repos/os/recipes/src/vfs/hash | 2 +- repos/os/recipes/src/vfs_block/hash | 2 +- repos/os/recipes/src/vfs_capture/hash | 2 +- repos/os/recipes/src/vfs_tap/hash | 2 +- repos/os/recipes/src/virt_qemu_drivers/hash | 2 +- repos/os/recipes/src/virtdev_rom/hash | 2 +- repos/os/recipes/src/virtio_fb_drv/hash | 2 +- repos/os/recipes/src/virtio_input_drv/hash | 2 +- repos/os/recipes/src/virtio_nic_drv/hash | 2 +- repos/os/recipes/src/vmm/hash | 2 +- repos/pc/recipes/pkg/test_usb_host_drv-pc/hash | 2 +- repos/pc/recipes/pkg/wifi/hash | 2 +- repos/pc/recipes/src/pc_intel_fb_drv/hash | 2 +- repos/pc/recipes/src/pc_usb_host_drv/hash | 2 +- repos/pc/recipes/src/pc_wifi_drv/hash | 2 +- repos/ports/recipes/pkg/report_dump/hash | 2 +- repos/ports/recipes/pkg/system_shell/hash | 2 +- repos/ports/recipes/pkg/vbox5-nova-capture/hash | 2 +- repos/ports/recipes/pkg/vbox5-nova-sculpt/hash | 2 +- repos/ports/recipes/pkg/vbox5/hash | 2 +- repos/ports/recipes/pkg/vbox6-capture/hash | 2 +- repos/ports/recipes/pkg/vbox6/hash | 2 +- repos/ports/recipes/src/bash-minimal/hash | 2 +- repos/ports/recipes/src/bash/hash | 2 +- repos/ports/recipes/src/binutils_x86/hash | 2 +- repos/ports/recipes/src/coreutils-minimal/hash | 2 +- repos/ports/recipes/src/coreutils/hash | 2 +- repos/ports/recipes/src/diffutils/hash | 2 +- repos/ports/recipes/src/e2fsprogs-minimal/hash | 2 +- repos/ports/recipes/src/e2fsprogs/hash | 2 +- repos/ports/recipes/src/findutils/hash | 2 +- repos/ports/recipes/src/gcc_x86/hash | 2 +- repos/ports/recipes/src/gnumake/hash | 2 +- repos/ports/recipes/src/grep/hash | 2 +- repos/ports/recipes/src/less/hash | 2 +- repos/ports/recipes/src/lighttpd/hash | 2 +- repos/ports/recipes/src/sed/hash | 2 +- repos/ports/recipes/src/tar/hash | 2 +- repos/ports/recipes/src/tclsh/hash | 2 +- repos/ports/recipes/src/vbox5-nova/hash | 2 +- repos/ports/recipes/src/vbox5/hash | 2 +- repos/ports/recipes/src/vbox6/hash | 2 +- repos/ports/recipes/src/verify/hash | 2 +- repos/ports/recipes/src/vim-minimal/hash | 2 +- repos/ports/recipes/src/vim/hash | 2 +- repos/ports/recipes/src/which/hash | 2 +- 481 files changed, 481 insertions(+), 481 deletions(-) diff --git a/repos/base-fiasco/recipes/src/base-fiasco/hash b/repos/base-fiasco/recipes/src/base-fiasco/hash index 87d4d1f687..45a676195f 100644 --- a/repos/base-fiasco/recipes/src/base-fiasco/hash +++ b/repos/base-fiasco/recipes/src/base-fiasco/hash @@ -1 +1 @@ -2022-08-16 e534748e020cd5dc93ab4404372a29ad5b602997 +2022-08-30 aafe34375020ddf2859d1971081c40853b186269 diff --git a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash index ee6952bcd6..9a2694513e 100644 --- a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash +++ b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-08-16 9d46cde324a47bdb94c5a40b116d8bb2af4a8313 +2022-08-30 a5da9bfbe75c845ed8cc772d05e6c99a3d0e83d3 diff --git a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash index d0dd38dfe4..aaf5be96d3 100644 --- a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash +++ b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash @@ -1 +1 @@ -2022-08-16 1a57ae9061fe959d39aee9462564190e9c32c66d +2022-08-30 319facb78b6be92fd922c07525a33b7a3a9274b6 diff --git a/repos/base-foc/recipes/src/base-foc-pbxa9/hash b/repos/base-foc/recipes/src/base-foc-pbxa9/hash index fcbaff0096..00069df9c3 100644 --- a/repos/base-foc/recipes/src/base-foc-pbxa9/hash +++ b/repos/base-foc/recipes/src/base-foc-pbxa9/hash @@ -1 +1 @@ -2022-08-16 7c5a975641686041296b1bb278faf7f364944e7d +2022-08-30 0a610e08eec49b70bb5d1af08cf9995e3a225a4d diff --git a/repos/base-foc/recipes/src/base-foc-pc/hash b/repos/base-foc/recipes/src/base-foc-pc/hash index 20fe04d21c..c5900c3ecd 100644 --- a/repos/base-foc/recipes/src/base-foc-pc/hash +++ b/repos/base-foc/recipes/src/base-foc-pc/hash @@ -1 +1 @@ -2022-08-16 a36a65376e4e1eb956f994ac9178b677da9109f3 +2022-08-30 bc093ac77dc87b634c181b71e203c0073d0daeb6 diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/hash b/repos/base-foc/recipes/src/base-foc-rpi3/hash index 2623559a56..c023f88b45 100644 --- a/repos/base-foc/recipes/src/base-foc-rpi3/hash +++ b/repos/base-foc/recipes/src/base-foc-rpi3/hash @@ -1 +1 @@ -2022-08-16 fa673b32b8129a566d9fcec8ffc02a354a28eef8 +2022-08-30 9ece95f88a8cf71fdcf5e76cd6a0c63dc8b6565d diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash index 4eb0a58e97..b7287abc40 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash @@ -1 +1 @@ -2022-08-16 976389f5b9bf479eb53b488e07ca8554579a80cd +2022-08-30 c0d1b320a5085a427d860ca15f7c3ff7ea5ec6bb diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash index e2d6858f2c..aced420699 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash @@ -1 +1 @@ -2022-08-16 b16d04981a6473a3a660ad73773a4e1f3fc28a57 +2022-08-30 6ef514f4f94bd8f7d32dc5b06165a01441bd44fe diff --git a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash index 191cb39dd5..a71b3e112b 100644 --- a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash +++ b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-08-16 cdc56b2ecedfe3c2f7e6d5e62af5474ef0c48ca3 +2022-08-30 dcb018cff381ceec02ec81f68216aa69fa8d284a diff --git a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash index 52944d28e2..fdcac604e4 100644 --- a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash +++ b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash @@ -1 +1 @@ -2022-08-16 66fac9533e8ab4ab3bd4da72667217a49433c2b5 +2022-08-30 20cc62e6a5a5aabc174c08f6dd267b9debb7a18c diff --git a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash index 8487232b2c..9308c45157 100644 --- a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash +++ b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash @@ -1 +1 @@ -2022-08-16 4b063a759881c71edf7b691c0c3ca6be53bfc024 +2022-08-30 422e8d2bc98f675041801e2dd910db30d9ede0f2 diff --git a/repos/base-hw/recipes/src/base-hw-pbxa9/hash b/repos/base-hw/recipes/src/base-hw-pbxa9/hash index db13501cf9..541608897c 100644 --- a/repos/base-hw/recipes/src/base-hw-pbxa9/hash +++ b/repos/base-hw/recipes/src/base-hw-pbxa9/hash @@ -1 +1 @@ -2022-08-16 602b0ae5f92f3153e6267f84af376740b60aa8a6 +2022-08-30 c3755946665a60da00bf52a95050614227f0653a diff --git a/repos/base-hw/recipes/src/base-hw-pc/hash b/repos/base-hw/recipes/src/base-hw-pc/hash index ab15d67f6b..aee565d2f4 100644 --- a/repos/base-hw/recipes/src/base-hw-pc/hash +++ b/repos/base-hw/recipes/src/base-hw-pc/hash @@ -1 +1 @@ -2022-08-16 2fb951388a23e0946b59c578bf89cd7dad15acb2 +2022-08-30 5cd480404f2bf48894ddffd23e23d2f6a4f1937b diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash index 75f22c9c02..7d86d3ca14 100644 --- a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-08-16 6ee865a580e3b2f02c849f33ed9fe11aae091020 +2022-08-30 6bca893dde41e5226bef81414a30fb525d23a418 diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash index cc91bef30a..30e6f06cb7 100644 --- a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-16 0f58d67423c454b9515d6f15d54d3c551b5b8ae4 +2022-08-30 3eb9f6cf7d19648c2c5a880942fc796e011e14a7 diff --git a/repos/base-linux/recipes/src/base-linux/hash b/repos/base-linux/recipes/src/base-linux/hash index 0f3ba7af75..9e711870c1 100644 --- a/repos/base-linux/recipes/src/base-linux/hash +++ b/repos/base-linux/recipes/src/base-linux/hash @@ -1 +1 @@ -2022-08-16 4dc61f609cc1463fb117308b79759841b4fb6cc4 +2022-08-30 64f7f0e014641d3ad55b70b8a7823e501fe81426 diff --git a/repos/base-nova/recipes/src/base-nova/hash b/repos/base-nova/recipes/src/base-nova/hash index baba447d51..2975778717 100644 --- a/repos/base-nova/recipes/src/base-nova/hash +++ b/repos/base-nova/recipes/src/base-nova/hash @@ -1 +1 @@ -2022-08-16 1b85e2d0e99b3b3b5d92878617ad67e73c2c8274 +2022-08-30 a4c2b9b3bdf24e810ab5802109da1cce84082de8 diff --git a/repos/base-okl4/recipes/src/base-okl4/hash b/repos/base-okl4/recipes/src/base-okl4/hash index 053ab370c3..add2368f8b 100644 --- a/repos/base-okl4/recipes/src/base-okl4/hash +++ b/repos/base-okl4/recipes/src/base-okl4/hash @@ -1 +1 @@ -2022-08-16 e0e57471d5a897d780df161f1f71e68088ff1312 +2022-08-30 8e83003e9f909e4af2a0c6606c7a814380c43c63 diff --git a/repos/base-pistachio/recipes/src/base-pistachio/hash b/repos/base-pistachio/recipes/src/base-pistachio/hash index 92921f1796..f5669247e1 100644 --- a/repos/base-pistachio/recipes/src/base-pistachio/hash +++ b/repos/base-pistachio/recipes/src/base-pistachio/hash @@ -1 +1 @@ -2022-08-16 df65a6ce6f08fdb3e2e6566f3875647b6bfb5a16 +2022-08-30 df511524b85c60c9e146225adf942b17b1f35b4c diff --git a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash index 6763926985..ef035345ba 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-08-16 9b8a170e9f6c8513fa23d93e8d2e8eb12cc9adef +2022-08-30 1dd192b79c46ade57d19ee707f94b2df7ab16e2e diff --git a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash index ace002a838..31df7043f9 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash @@ -1 +1 @@ -2022-08-16 099e1ac07d7de00dcac4a2b142d434dcc60cb8ef +2022-08-30 694884964475aefb30b9e56383b1aaabeeb2d1ec diff --git a/repos/base-sel4/recipes/src/base-sel4-x86/hash b/repos/base-sel4/recipes/src/base-sel4-x86/hash index db7be90c56..6f9842aa98 100644 --- a/repos/base-sel4/recipes/src/base-sel4-x86/hash +++ b/repos/base-sel4/recipes/src/base-sel4-x86/hash @@ -1 +1 @@ -2022-08-16 14567dc0c8966c6fedbe70314800f504eb0d3136 +2022-08-30 ac7641806f82d895aa4aeec1a844ca023d0f9475 diff --git a/repos/base/recipes/api/base/hash b/repos/base/recipes/api/base/hash index f994618997..886e14734c 100644 --- a/repos/base/recipes/api/base/hash +++ b/repos/base/recipes/api/base/hash @@ -1 +1 @@ -2022-08-16 5b0bde48d766966cd1a93d10eecde7b16346430f +2022-08-30 35829d246a23701b4a9e4b2fe5edbbe2ca55d585 diff --git a/repos/base/recipes/pkg/test-ds_ownership/hash b/repos/base/recipes/pkg/test-ds_ownership/hash index d52b16f08a..30d361ef39 100644 --- a/repos/base/recipes/pkg/test-ds_ownership/hash +++ b/repos/base/recipes/pkg/test-ds_ownership/hash @@ -1 +1 @@ -2022-08-16 bb38c5ce26ac0e34402eb04e3a4b0e8ffb2bc51b +2022-08-30 5d3b8ce90b93645042bf443b56c1123607ae4a93 diff --git a/repos/base/recipes/pkg/test-entrypoint/hash b/repos/base/recipes/pkg/test-entrypoint/hash index 15e8bc3acf..7f8585f26e 100644 --- a/repos/base/recipes/pkg/test-entrypoint/hash +++ b/repos/base/recipes/pkg/test-entrypoint/hash @@ -1 +1 @@ -2022-08-16 fd08282d7f205a11ff579e5dfe7e594d91a0981a +2022-08-30 39833e8e29a813981e9514dc3c1fcd9cc6c062ea diff --git a/repos/base/recipes/pkg/test-log/hash b/repos/base/recipes/pkg/test-log/hash index 6e420ddb9c..13a180386b 100644 --- a/repos/base/recipes/pkg/test-log/hash +++ b/repos/base/recipes/pkg/test-log/hash @@ -1 +1 @@ -2022-08-16 893763c982c47d66fcb30b1451221b3b63010a5c +2022-08-30 4346c09cecbb540b0f36faef52277f1f2323117c diff --git a/repos/base/recipes/pkg/test-mmio/hash b/repos/base/recipes/pkg/test-mmio/hash index 150d494bea..d6658c683a 100644 --- a/repos/base/recipes/pkg/test-mmio/hash +++ b/repos/base/recipes/pkg/test-mmio/hash @@ -1 +1 @@ -2022-08-16 1f0f8a5f881c1c6056509ec9f7c3a488384f1ef8 +2022-08-30 798a46dfa4b91ec3ff161816e624726f76c65bbe diff --git a/repos/base/recipes/pkg/test-new_delete/hash b/repos/base/recipes/pkg/test-new_delete/hash index 388cb0684a..a21e86b0ff 100644 --- a/repos/base/recipes/pkg/test-new_delete/hash +++ b/repos/base/recipes/pkg/test-new_delete/hash @@ -1 +1 @@ -2022-08-16 f5fd87f6260f0672dc020504231044a7fcc58144 +2022-08-30 4894a982cefa14498345c2e9f0a0870c6938f619 diff --git a/repos/base/recipes/pkg/test-reconstructible/hash b/repos/base/recipes/pkg/test-reconstructible/hash index 422c790881..c589ea24a7 100644 --- a/repos/base/recipes/pkg/test-reconstructible/hash +++ b/repos/base/recipes/pkg/test-reconstructible/hash @@ -1 +1 @@ -2022-08-16 0f22464fce71f3b14ccf1510de2622ce11650fd1 +2022-08-30 75fcae4d7c19ebe677069acb054002f823bd8055 diff --git a/repos/base/recipes/pkg/test-registry/hash b/repos/base/recipes/pkg/test-registry/hash index 3e9984f9d4..9b90c381d9 100644 --- a/repos/base/recipes/pkg/test-registry/hash +++ b/repos/base/recipes/pkg/test-registry/hash @@ -1 +1 @@ -2022-08-16 bc476502ed58f7639bb6f995ba9c539fa61b497c +2022-08-30 8bed97fad788bf957604cbf2ef88ce99d41e0eb8 diff --git a/repos/base/recipes/pkg/test-rm_fault/hash b/repos/base/recipes/pkg/test-rm_fault/hash index 6c97880bf3..8ab1ac57d2 100644 --- a/repos/base/recipes/pkg/test-rm_fault/hash +++ b/repos/base/recipes/pkg/test-rm_fault/hash @@ -1 +1 @@ -2022-08-16 9e5b7cf00ca56acfcb09649a9fdfde07dcc94909 +2022-08-30 14c2945d5c160a4ca8b80b550d2a03db3055f8c3 diff --git a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash index b3267724ac..77a5d98a13 100644 --- a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash +++ b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash @@ -1 +1 @@ -2022-08-16 f66b057816ab43c6dad98677f5d5311008932745 +2022-08-30 71b883cc0243643cb9771911be7aad7cab5b7271 diff --git a/repos/base/recipes/pkg/test-rm_nested/hash b/repos/base/recipes/pkg/test-rm_nested/hash index 6682f5ecea..c8a02c2ce4 100644 --- a/repos/base/recipes/pkg/test-rm_nested/hash +++ b/repos/base/recipes/pkg/test-rm_nested/hash @@ -1 +1 @@ -2022-08-16 ff560be7eb0c0fe18d7e0c2392b213aeea4dd869 +2022-08-30 a6f539d0cceaa3aab75e9354620763c9046ebd31 diff --git a/repos/base/recipes/pkg/test-rm_stress/hash b/repos/base/recipes/pkg/test-rm_stress/hash index aaf031f369..ecbea3f0c9 100644 --- a/repos/base/recipes/pkg/test-rm_stress/hash +++ b/repos/base/recipes/pkg/test-rm_stress/hash @@ -1 +1 @@ -2022-08-16 a7da6ed04e06e24376afa7b4c32001d154a2d709 +2022-08-30 a997cdda67e9be4ffb533e6a3e62c452f0990b94 diff --git a/repos/base/recipes/pkg/test-sanitizer/hash b/repos/base/recipes/pkg/test-sanitizer/hash index a265ecf45b..306e9e0e85 100644 --- a/repos/base/recipes/pkg/test-sanitizer/hash +++ b/repos/base/recipes/pkg/test-sanitizer/hash @@ -1 +1 @@ -2022-08-16 fc4ea2119bcc280fa6eb571023b2efd341964268 +2022-08-30 511e74e5610a4bcd0d76753dca398cc528637049 diff --git a/repos/base/recipes/pkg/test-stack_smash/hash b/repos/base/recipes/pkg/test-stack_smash/hash index a8d2053c5d..235bec4a29 100644 --- a/repos/base/recipes/pkg/test-stack_smash/hash +++ b/repos/base/recipes/pkg/test-stack_smash/hash @@ -1 +1 @@ -2022-08-16 643cd59a60257a79723ffb5cd02eb0ce436026f2 +2022-08-30 dccdee9221100b7012e2b5da0378914004eb2f63 diff --git a/repos/base/recipes/pkg/test-synced_interface/hash b/repos/base/recipes/pkg/test-synced_interface/hash index 99cb691d10..100f27a0a5 100644 --- a/repos/base/recipes/pkg/test-synced_interface/hash +++ b/repos/base/recipes/pkg/test-synced_interface/hash @@ -1 +1 @@ -2022-08-16 2f5213838988a7d5716ff01fe4a619f2617ac165 +2022-08-30 3584b950b6226b2214063217cb62fe44345cd615 diff --git a/repos/base/recipes/pkg/test-timer/hash b/repos/base/recipes/pkg/test-timer/hash index 807888cae0..655b5f3e34 100644 --- a/repos/base/recipes/pkg/test-timer/hash +++ b/repos/base/recipes/pkg/test-timer/hash @@ -1 +1 @@ -2022-08-16 a1c2ff739e13c3690e06f7f2e012a01d89d86ea2 +2022-08-30 016f8758a2da3c5c9f35defda782d9b33fb2284c diff --git a/repos/base/recipes/pkg/test-tls/hash b/repos/base/recipes/pkg/test-tls/hash index 6e64cea44d..b1822518a6 100644 --- a/repos/base/recipes/pkg/test-tls/hash +++ b/repos/base/recipes/pkg/test-tls/hash @@ -1 +1 @@ -2022-08-16 be31b3becdb4a0cec705ffb53b642288b5c2853a +2022-08-30 3c55775aff7a897eefe952db09d7a7b3990842ca diff --git a/repos/base/recipes/pkg/test-token/hash b/repos/base/recipes/pkg/test-token/hash index 4a45ee9528..031ee90c9f 100644 --- a/repos/base/recipes/pkg/test-token/hash +++ b/repos/base/recipes/pkg/test-token/hash @@ -1 +1 @@ -2022-08-16 d025ee10d1ebcc9512c202d318de498af80ff0e9 +2022-08-30 f644f970f3dfefeba603f45a21245de4c958ee09 diff --git a/repos/base/recipes/pkg/test-xml_generator/hash b/repos/base/recipes/pkg/test-xml_generator/hash index 09b361cdd6..8333b2148d 100644 --- a/repos/base/recipes/pkg/test-xml_generator/hash +++ b/repos/base/recipes/pkg/test-xml_generator/hash @@ -1 +1 @@ -2022-08-16 30f3ee5bcd83caf78c4c364275e04170ed7b29a0 +2022-08-30 b0058533e973a347f318104d8455f9e2288e44c6 diff --git a/repos/base/recipes/pkg/test-xml_node/hash b/repos/base/recipes/pkg/test-xml_node/hash index 65217a1b4b..6487825207 100644 --- a/repos/base/recipes/pkg/test-xml_node/hash +++ b/repos/base/recipes/pkg/test-xml_node/hash @@ -1 +1 @@ -2022-08-16 7c6a58b7586c720c425c3a6e995ad872b0941c4f +2022-08-30 88d8904be1efa49a98838f1aca3878f19e884680 diff --git a/repos/base/recipes/src/test-ds_ownership/hash b/repos/base/recipes/src/test-ds_ownership/hash index 5fd86abccb..64d74cc3e2 100644 --- a/repos/base/recipes/src/test-ds_ownership/hash +++ b/repos/base/recipes/src/test-ds_ownership/hash @@ -1 +1 @@ -2022-08-16 fabb4fc2beca7b9b6dc9eca7ac7dd79bc642d206 +2022-08-30 b8eaa582c9fd6ad5cf1f3280fd55033b6d95194a diff --git a/repos/base/recipes/src/test-entrypoint/hash b/repos/base/recipes/src/test-entrypoint/hash index 766d9e65b7..52322363af 100644 --- a/repos/base/recipes/src/test-entrypoint/hash +++ b/repos/base/recipes/src/test-entrypoint/hash @@ -1 +1 @@ -2022-08-16 7a6149a061516b3dab0d79946799077f2fdaf82e +2022-08-30 df4b0aeeb78acee0e936210109e6d1b9bd18c8a6 diff --git a/repos/base/recipes/src/test-log/hash b/repos/base/recipes/src/test-log/hash index 6a88008ec5..b3fe9ba64c 100644 --- a/repos/base/recipes/src/test-log/hash +++ b/repos/base/recipes/src/test-log/hash @@ -1 +1 @@ -2022-08-16 9fc828a8d00fa6edbd014e8e0e137efa59016089 +2022-08-30 2e76aaab7bc9f6117528d489df2d53a9924b9dd8 diff --git a/repos/base/recipes/src/test-mmio/hash b/repos/base/recipes/src/test-mmio/hash index c010eb445f..5eede2de17 100644 --- a/repos/base/recipes/src/test-mmio/hash +++ b/repos/base/recipes/src/test-mmio/hash @@ -1 +1 @@ -2022-08-16 214342e38d16d6cc5a958c5a31b0c183f0fc07e2 +2022-08-30 eac06a4a5cfef6213b87e312f31ec925810c3054 diff --git a/repos/base/recipes/src/test-new_delete/hash b/repos/base/recipes/src/test-new_delete/hash index bfa6dc7d11..12e2b38ba6 100644 --- a/repos/base/recipes/src/test-new_delete/hash +++ b/repos/base/recipes/src/test-new_delete/hash @@ -1 +1 @@ -2022-08-16 7419335660cdf46925682e63e870cefc96218b81 +2022-08-30 4bbe78f3e1ed2c9c899bf669d754233e470bde6f diff --git a/repos/base/recipes/src/test-reconstructible/hash b/repos/base/recipes/src/test-reconstructible/hash index 9761579754..8902907a0e 100644 --- a/repos/base/recipes/src/test-reconstructible/hash +++ b/repos/base/recipes/src/test-reconstructible/hash @@ -1 +1 @@ -2022-08-16 fe1fb852373ae0ec5a1d037848987f17182ced2c +2022-08-30 3a9299924e3fafd0545b7b7aa587035065da3be8 diff --git a/repos/base/recipes/src/test-registry/hash b/repos/base/recipes/src/test-registry/hash index c0dbb1114c..30817c6088 100644 --- a/repos/base/recipes/src/test-registry/hash +++ b/repos/base/recipes/src/test-registry/hash @@ -1 +1 @@ -2022-08-16 f88e0eaa03ddc6ae4c43b403e30289c64d60a037 +2022-08-30 e4997c3f6f49fa2c38176a629965c21ebfa31beb diff --git a/repos/base/recipes/src/test-rm_fault/hash b/repos/base/recipes/src/test-rm_fault/hash index 7c5da0b931..267e9a3745 100644 --- a/repos/base/recipes/src/test-rm_fault/hash +++ b/repos/base/recipes/src/test-rm_fault/hash @@ -1 +1 @@ -2022-08-16 19e8de9d39edfc0be3dec78ea76612319125251a +2022-08-30 440014931ece3ed6b9093f491f4aae9c45a2e243 diff --git a/repos/base/recipes/src/test-rm_nested/hash b/repos/base/recipes/src/test-rm_nested/hash index ff48547d1f..4b7ee2820f 100644 --- a/repos/base/recipes/src/test-rm_nested/hash +++ b/repos/base/recipes/src/test-rm_nested/hash @@ -1 +1 @@ -2022-08-16 ed1da91fd8761a86398fd5ffd7d51b5031f253ca +2022-08-30 9d375a2d996abcd7f52e373fdf0b8d8c923d147c diff --git a/repos/base/recipes/src/test-rm_stress/hash b/repos/base/recipes/src/test-rm_stress/hash index 850a4be816..b4a80f87fe 100644 --- a/repos/base/recipes/src/test-rm_stress/hash +++ b/repos/base/recipes/src/test-rm_stress/hash @@ -1 +1 @@ -2022-08-16 ba1361206cbf38a0e5e504a54aa80a7476587bdc +2022-08-30 19e8d1ed74e2420298b60a3bc8276b9890b44fbc diff --git a/repos/base/recipes/src/test-sanitizer/hash b/repos/base/recipes/src/test-sanitizer/hash index 47adaeef53..28cc5827e8 100644 --- a/repos/base/recipes/src/test-sanitizer/hash +++ b/repos/base/recipes/src/test-sanitizer/hash @@ -1 +1 @@ -2022-08-16 842db678209d6002b7464f97554b2d2c270f1ac1 +2022-08-30 d72c79d7b5ca9f74c00aedcdc0029be0864c174d diff --git a/repos/base/recipes/src/test-segfault/hash b/repos/base/recipes/src/test-segfault/hash index 35b4c9c138..6cd5186ad3 100644 --- a/repos/base/recipes/src/test-segfault/hash +++ b/repos/base/recipes/src/test-segfault/hash @@ -1 +1 @@ -2022-08-16 6ad34c4033532ebd2c35b2d4cba2b580d540db57 +2022-08-30 343b6582bdeb21b3027db7762c21a90ead63bf3e diff --git a/repos/base/recipes/src/test-stack_smash/hash b/repos/base/recipes/src/test-stack_smash/hash index fb42d6b825..37a7f5758f 100644 --- a/repos/base/recipes/src/test-stack_smash/hash +++ b/repos/base/recipes/src/test-stack_smash/hash @@ -1 +1 @@ -2022-08-16 29c2c57805f03d97e60adb996f125dccaea97e3c +2022-08-30 0cc93332097ac495902a2a0da770459e749eba43 diff --git a/repos/base/recipes/src/test-synced_interface/hash b/repos/base/recipes/src/test-synced_interface/hash index da8ca63628..33bead38c8 100644 --- a/repos/base/recipes/src/test-synced_interface/hash +++ b/repos/base/recipes/src/test-synced_interface/hash @@ -1 +1 @@ -2022-08-16 0ba7bd421207fa25c831a620562f192ef65fa459 +2022-08-30 078c49966e7b00d3aede688c5c535ef4e8d84ee6 diff --git a/repos/base/recipes/src/test-timer/hash b/repos/base/recipes/src/test-timer/hash index fb4c107cc1..0155b2c4c3 100644 --- a/repos/base/recipes/src/test-timer/hash +++ b/repos/base/recipes/src/test-timer/hash @@ -1 +1 @@ -2022-08-16 2f9b3021e230cae35eb83c93e2443fc6c384be99 +2022-08-30 d85de903b190d9ed5e47099de64bda7f300f0934 diff --git a/repos/base/recipes/src/test-tls/hash b/repos/base/recipes/src/test-tls/hash index b419cdc0ba..f401a3aa1f 100644 --- a/repos/base/recipes/src/test-tls/hash +++ b/repos/base/recipes/src/test-tls/hash @@ -1 +1 @@ -2022-08-16 e3dd40eecc9cbdaa0d93e4df5683b489aab46e9a +2022-08-30 644912c90fec30e512a9a2c418330eca9ab23100 diff --git a/repos/base/recipes/src/test-token/hash b/repos/base/recipes/src/test-token/hash index 8937d408e3..c8b101bde9 100644 --- a/repos/base/recipes/src/test-token/hash +++ b/repos/base/recipes/src/test-token/hash @@ -1 +1 @@ -2022-08-16 82a5115d3dd0fafa6651e2a9882b84dc050b3c6f +2022-08-30 bf130391ee0c8c89f5d1a3f77db85172f1a2bee7 diff --git a/repos/base/recipes/src/test-xml_generator/hash b/repos/base/recipes/src/test-xml_generator/hash index 4e45daae20..9a869d5a83 100644 --- a/repos/base/recipes/src/test-xml_generator/hash +++ b/repos/base/recipes/src/test-xml_generator/hash @@ -1 +1 @@ -2022-08-16 a7e2d9c92df3eda0a67edb88a59f77c8076c14df +2022-08-30 8938793156f0627e7f7541ef66c01a8bf36f043f diff --git a/repos/base/recipes/src/test-xml_node/hash b/repos/base/recipes/src/test-xml_node/hash index acc24675ad..bbe1e3acb4 100644 --- a/repos/base/recipes/src/test-xml_node/hash +++ b/repos/base/recipes/src/test-xml_node/hash @@ -1 +1 @@ -2022-08-16 e6f255004c047c175fa1231ade558c715bb1ae43 +2022-08-30 b4369807e0c250bd10ab66c1e35d06f1d4ab078d diff --git a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash index a4184c4e41..63645f224a 100644 --- a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash @@ -1 +1 @@ -2022-08-16 e3596f7dbd27f8d1b1417756edd2671aa8af69f0 +2022-08-30 8cc57b8c8843983e1036455ae50d82417132f6a7 diff --git a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash index ba7b93f3ed..e95d7f148e 100644 --- a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash @@ -1 +1 @@ -2022-08-16 b12fb3b37d02fc0c393c60c1b89530a0722d5da0 +2022-08-30 8d8b80f32fd28f29e8885c2c19babc96a10851d9 diff --git a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash index 76278dac19..5df1245e6a 100644 --- a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash @@ -1 +1 @@ -2022-08-16 db75551120abafec59c954fc471c70980fcd7fc2 +2022-08-30 d06d618dc29079bd7f37ad4196dd48eeb38f144b diff --git a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash index e78c4f0f5c..38b52444bf 100644 --- a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash @@ -1 +1 @@ -2022-08-16 ef03ed8a9eae9bbb3169a8ca76dda171b9a2d9b5 +2022-08-30 794f38fe8b7370b2e26fcfac09c4cfe420113fae diff --git a/repos/dde_linux/recipes/pkg/usb_modem_drv/hash b/repos/dde_linux/recipes/pkg/usb_modem_drv/hash index 2d9b473c80..ff61e20c19 100644 --- a/repos/dde_linux/recipes/pkg/usb_modem_drv/hash +++ b/repos/dde_linux/recipes/pkg/usb_modem_drv/hash @@ -1 +1 @@ -2022-08-16 2912232ef71ceac186c185516882959092a9f83f +2022-08-30 b60625461aa7d48b3885ac7b23b857d548a3625d diff --git a/repos/dde_linux/recipes/pkg/wireguard/hash b/repos/dde_linux/recipes/pkg/wireguard/hash index cadc82d183..39d9c3fa50 100644 --- a/repos/dde_linux/recipes/pkg/wireguard/hash +++ b/repos/dde_linux/recipes/pkg/wireguard/hash @@ -1 +1 @@ -2022-08-16 010043115f58437dfe3453e6a34471b124d2ad00 +2022-08-30 767496a1c1b3f82180eda8b0f9710fe03bc8ff65 diff --git a/repos/dde_linux/recipes/src/fec_nic_drv/hash b/repos/dde_linux/recipes/src/fec_nic_drv/hash index 734dae52e9..029ad52c1c 100644 --- a/repos/dde_linux/recipes/src/fec_nic_drv/hash +++ b/repos/dde_linux/recipes/src/fec_nic_drv/hash @@ -1 +1 @@ -2022-08-16 84c0eabcb564df9f5a9b5aed7046dab885fc6d96 +2022-08-30 92a65428d91cb2ae21d259753199a48339fb0314 diff --git a/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash b/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash index 1ea4509177..96d83c0524 100644 --- a/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash +++ b/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash @@ -1 +1 @@ -2022-08-16 4a06190b6908ebd6a85c5321eebb4847ecf0e073 +2022-08-30 73df9f46b5d3e5d82f1c670d88227ce4d7b37211 diff --git a/repos/dde_linux/recipes/src/usb_hid_drv/hash b/repos/dde_linux/recipes/src/usb_hid_drv/hash index a4c5e91c19..fd652626d5 100644 --- a/repos/dde_linux/recipes/src/usb_hid_drv/hash +++ b/repos/dde_linux/recipes/src/usb_hid_drv/hash @@ -1 +1 @@ -2022-08-16 f0c52c535d3653584c61a7fd66b3738b358f9bfe +2022-08-30 fc049453f7ea57a4a452b5379da247031fe5d107 diff --git a/repos/dde_linux/recipes/src/usb_modem_drv/hash b/repos/dde_linux/recipes/src/usb_modem_drv/hash index bff49ef980..2115e4a820 100644 --- a/repos/dde_linux/recipes/src/usb_modem_drv/hash +++ b/repos/dde_linux/recipes/src/usb_modem_drv/hash @@ -1 +1 @@ -2022-08-16 3e8796fa97f2bec961974e563a31ed420e3a79c4 +2022-08-30 cb48bf70c38cc9863017e578c8011b98c5fd42a5 diff --git a/repos/dde_linux/recipes/src/usb_net_drv/hash b/repos/dde_linux/recipes/src/usb_net_drv/hash index 3443a4056b..f4cf400599 100644 --- a/repos/dde_linux/recipes/src/usb_net_drv/hash +++ b/repos/dde_linux/recipes/src/usb_net_drv/hash @@ -1 +1 @@ -2022-08-16 55454eaa8b8fefe05022d6dfab88a4ad9f588e96 +2022-08-30 f978cb4b4084157c47c352dbb483b3aa925d534e diff --git a/repos/dde_linux/recipes/src/vfs_lxip/hash b/repos/dde_linux/recipes/src/vfs_lxip/hash index aad2ab4993..d1cd6aa0c8 100644 --- a/repos/dde_linux/recipes/src/vfs_lxip/hash +++ b/repos/dde_linux/recipes/src/vfs_lxip/hash @@ -1 +1 @@ -2022-08-16 8a4248611806c23da3dc9afe94dfb30bf79887a5 +2022-08-30 ad57183671dd49224a68a2e74a2bb32c13e98c01 diff --git a/repos/dde_linux/recipes/src/wireguard/hash b/repos/dde_linux/recipes/src/wireguard/hash index 8e47fa205b..f4f1e1eaf1 100644 --- a/repos/dde_linux/recipes/src/wireguard/hash +++ b/repos/dde_linux/recipes/src/wireguard/hash @@ -1 +1 @@ -2022-08-16 a0eda49af90e83bbfc1f8ac869d8530fc852f338 +2022-08-30 f5eb4a449069bc3d408a0ea8da087cab0ed1b6f6 diff --git a/repos/dde_rump/recipes/pkg/ext2_fs/hash b/repos/dde_rump/recipes/pkg/ext2_fs/hash index 71bc21eb44..3375d5bacf 100644 --- a/repos/dde_rump/recipes/pkg/ext2_fs/hash +++ b/repos/dde_rump/recipes/pkg/ext2_fs/hash @@ -1 +1 @@ -2022-08-22 583e4dd54d71a208a3d37eb4e5896579b7850f7c +2022-08-30 42ffc6090bbdcda38ff75c798f9edc63fce54e52 diff --git a/repos/dde_rump/recipes/src/rump/hash b/repos/dde_rump/recipes/src/rump/hash index 2dba2bc106..8881d893da 100644 --- a/repos/dde_rump/recipes/src/rump/hash +++ b/repos/dde_rump/recipes/src/rump/hash @@ -1 +1 @@ -2022-08-16 4caebc0fb1112ded7b12cc1a5e46c2d2ab4e850c +2022-08-30 ffd73ea071460abd6734c226074f64d7fc1f1b64 diff --git a/repos/demo/recipes/src/demo/hash b/repos/demo/recipes/src/demo/hash index be3bdeaf08..d89792e986 100644 --- a/repos/demo/recipes/src/demo/hash +++ b/repos/demo/recipes/src/demo/hash @@ -1 +1 @@ -2022-08-16 78bfb716145f90ea2a815afea05824ae6dee3e58 +2022-08-30 ffe1cded0850d2839553c3ce7c6933664d806d44 diff --git a/repos/gems/recipes/api/gems/hash b/repos/gems/recipes/api/gems/hash index 42e59bb392..1156c93735 100644 --- a/repos/gems/recipes/api/gems/hash +++ b/repos/gems/recipes/api/gems/hash @@ -1 +1 @@ -2022-02-14 db49cf7af4404ec2ea8758c0618e1a3056495c73 +2022-08-30 d30ad7a288df95ccebe047587572707d93e6ef11 diff --git a/repos/gems/recipes/pkg/backdrop/hash b/repos/gems/recipes/pkg/backdrop/hash index e654897568..abaece3a94 100644 --- a/repos/gems/recipes/pkg/backdrop/hash +++ b/repos/gems/recipes/pkg/backdrop/hash @@ -1 +1 @@ -2022-08-16 59806d8706140776d2e40e6e23fe7e0b6863b841 +2022-08-30 09fd3768e23d5e0f1c305cd0326b982e1166c57e diff --git a/repos/gems/recipes/pkg/cbe_check/hash b/repos/gems/recipes/pkg/cbe_check/hash index a26bef0320..327729c56c 100644 --- a/repos/gems/recipes/pkg/cbe_check/hash +++ b/repos/gems/recipes/pkg/cbe_check/hash @@ -1 +1 @@ -2022-08-16 e1177941ffb6b987990cb1bef689502cc0f82873 +2022-08-30 14f83bb768765cb4546c065cdb0767e05879023f diff --git a/repos/gems/recipes/pkg/cbe_demo/hash b/repos/gems/recipes/pkg/cbe_demo/hash index b26ff67ddf..5557945550 100644 --- a/repos/gems/recipes/pkg/cbe_demo/hash +++ b/repos/gems/recipes/pkg/cbe_demo/hash @@ -1 +1 @@ -2022-08-16 c2871ccb08ae3151aee77e9ce65746c4390a16e8 +2022-08-30 e49c03c7f6063121414de0df58f68efc64e2d73d diff --git a/repos/gems/recipes/pkg/cbe_fs/hash b/repos/gems/recipes/pkg/cbe_fs/hash index 5090763877..dfca78d927 100644 --- a/repos/gems/recipes/pkg/cbe_fs/hash +++ b/repos/gems/recipes/pkg/cbe_fs/hash @@ -1 +1 @@ -2022-08-16 2e420919feeb2b9cee422f6546fc8d9ebc137802 +2022-08-30 88751bcf0cf4c9705476ae86fe01af3e4353cb82 diff --git a/repos/gems/recipes/pkg/cbe_init/hash b/repos/gems/recipes/pkg/cbe_init/hash index 092542fc4b..938804e650 100644 --- a/repos/gems/recipes/pkg/cbe_init/hash +++ b/repos/gems/recipes/pkg/cbe_init/hash @@ -1 +1 @@ -2022-08-16 3981ebb8393c3741b7e22185ed199452fd0c3d32 +2022-08-30 7abc09dd51e23cd836c3d7d3bf17b7692cf7ec29 diff --git a/repos/gems/recipes/pkg/cbe_shell/hash b/repos/gems/recipes/pkg/cbe_shell/hash index e8df6eb180..c51253e80e 100644 --- a/repos/gems/recipes/pkg/cbe_shell/hash +++ b/repos/gems/recipes/pkg/cbe_shell/hash @@ -1 +1 @@ -2022-08-16 83f8301c67e39da125c5e85daeadf9eca6d1ce35 +2022-08-30 1e8254bfd74fafccd229ab84b4a984f7f860a2f1 diff --git a/repos/gems/recipes/pkg/cbe_ta_fs/hash b/repos/gems/recipes/pkg/cbe_ta_fs/hash index f423ba1ea2..2b595a59f1 100644 --- a/repos/gems/recipes/pkg/cbe_ta_fs/hash +++ b/repos/gems/recipes/pkg/cbe_ta_fs/hash @@ -1 +1 @@ -2022-08-16 cc899060bf9c910b221b76648c50fc5a36c168d6 +2022-08-30 16deb466c6d1fbde22d47a6db5344f6d8be07d5c diff --git a/repos/gems/recipes/pkg/cbe_ta_vfs/hash b/repos/gems/recipes/pkg/cbe_ta_vfs/hash index 788d4c0da4..e8214b422a 100644 --- a/repos/gems/recipes/pkg/cbe_ta_vfs/hash +++ b/repos/gems/recipes/pkg/cbe_ta_vfs/hash @@ -1 +1 @@ -2022-08-16 8c8977036c5c5c2448b74ff0376792742cbd1b1a +2022-08-30 ddf18118ce1e3248bddd0a747ca3cec91a8f9bb9 diff --git a/repos/gems/recipes/pkg/cbe_vbox5-nova/hash b/repos/gems/recipes/pkg/cbe_vbox5-nova/hash index 20da39dc31..67d6141d7e 100644 --- a/repos/gems/recipes/pkg/cbe_vbox5-nova/hash +++ b/repos/gems/recipes/pkg/cbe_vbox5-nova/hash @@ -1 +1 @@ -2022-08-16 99768bfbddf80bc65e3243e528f78a6c7dcebd8a +2022-08-30 2c5e28636f99807eafbfba70b0c57662aa37b20b diff --git a/repos/gems/recipes/pkg/cbe_vfs/hash b/repos/gems/recipes/pkg/cbe_vfs/hash index 99420043bd..61d00b2e29 100644 --- a/repos/gems/recipes/pkg/cbe_vfs/hash +++ b/repos/gems/recipes/pkg/cbe_vfs/hash @@ -1 +1 @@ -2022-08-16 52fb7d0a3a607a08a86afde5926763a711deb897 +2022-08-30 0c7b26f8c871429b4cfc72152d5f4f1a73989287 diff --git a/repos/gems/recipes/pkg/cbe_vm_fs/hash b/repos/gems/recipes/pkg/cbe_vm_fs/hash index 61911c6707..1500477d31 100644 --- a/repos/gems/recipes/pkg/cbe_vm_fs/hash +++ b/repos/gems/recipes/pkg/cbe_vm_fs/hash @@ -1 +1 @@ -2022-08-16 bf69711fb2ccc3fe8b868e833c588b359a56b9a0 +2022-08-30 44d6da875d4eb6271c3f29aceb5a16a5a86dc5ad diff --git a/repos/gems/recipes/pkg/depot_download/hash b/repos/gems/recipes/pkg/depot_download/hash index 00641feb36..a6dc3b9780 100644 --- a/repos/gems/recipes/pkg/depot_download/hash +++ b/repos/gems/recipes/pkg/depot_download/hash @@ -1 +1 @@ -2022-08-16 bff3b61f77461f377656ad970b19f6aeabd45879 +2022-08-30 4c4f8410c190ca392bd200012e38a99fbe9fe361 diff --git a/repos/gems/recipes/pkg/download_coreplus/hash b/repos/gems/recipes/pkg/download_coreplus/hash index 66f248f296..dd29abc1f4 100644 --- a/repos/gems/recipes/pkg/download_coreplus/hash +++ b/repos/gems/recipes/pkg/download_coreplus/hash @@ -1 +1 @@ -2022-08-16 b310b2e1d71a69b9b137fd4c9ea6fc6b5697a389 +2022-08-30 30b06d456331099d2466522e24e47af7fd9fe9cf diff --git a/repos/gems/recipes/pkg/drivers_managed-pc/hash b/repos/gems/recipes/pkg/drivers_managed-pc/hash index 51e0fd8905..f5275f858c 100644 --- a/repos/gems/recipes/pkg/drivers_managed-pc/hash +++ b/repos/gems/recipes/pkg/drivers_managed-pc/hash @@ -1 +1 @@ -2022-08-16 b9a2b70f34ee948babd2ecf0d021dfd4578c28ff +2022-08-30 54c2ca81d437d005d8e621bb9e7c2a4e86a0a9b8 diff --git a/repos/gems/recipes/pkg/drivers_nic-pc/hash b/repos/gems/recipes/pkg/drivers_nic-pc/hash index 2cad4e2017..74cf618ace 100644 --- a/repos/gems/recipes/pkg/drivers_nic-pc/hash +++ b/repos/gems/recipes/pkg/drivers_nic-pc/hash @@ -1 +1 @@ -2022-08-16 b898fc0da496b88764dc84625dd0bf2bacc99d6e +2022-08-30 7b5d8b55a3024c795a6e5d45c1b83897398de508 diff --git a/repos/gems/recipes/pkg/file_vault/hash b/repos/gems/recipes/pkg/file_vault/hash index 4d8095ccf7..faf10b1e4e 100644 --- a/repos/gems/recipes/pkg/file_vault/hash +++ b/repos/gems/recipes/pkg/file_vault/hash @@ -1 +1 @@ -2022-08-16 0e649d01ac650200f18e254161991adf84e0af60 +2022-08-30 8ca3e4d6a477c1806c133989ac0d5c662e7f0bd7 diff --git a/repos/gems/recipes/pkg/fonts_fs/hash b/repos/gems/recipes/pkg/fonts_fs/hash index ecb08b1afe..23487f5bda 100644 --- a/repos/gems/recipes/pkg/fonts_fs/hash +++ b/repos/gems/recipes/pkg/fonts_fs/hash @@ -1 +1 @@ -2022-08-16 d81f436a222efa504fa5748a19ef81a7e50c4274 +2022-08-30 ed35820034f02c63f4b9a246b75363607eb0009c diff --git a/repos/gems/recipes/pkg/motif_decorator/hash b/repos/gems/recipes/pkg/motif_decorator/hash index 0a0a897a37..a2f95bb09b 100644 --- a/repos/gems/recipes/pkg/motif_decorator/hash +++ b/repos/gems/recipes/pkg/motif_decorator/hash @@ -1 +1 @@ -2022-08-16 cae3dcef1d227e2aea3c694691f35cf225aa6a63 +2022-08-30 dc58e6b86bf0170e9281a98167381faa8b6d6bab diff --git a/repos/gems/recipes/pkg/motif_wm/hash b/repos/gems/recipes/pkg/motif_wm/hash index c75cd11c49..d742a7b6f5 100644 --- a/repos/gems/recipes/pkg/motif_wm/hash +++ b/repos/gems/recipes/pkg/motif_wm/hash @@ -1 +1 @@ -2022-08-16 8aa9ca40ed8b79193d87bc9f7da1df3c0dc05eaa +2022-08-30 60aab08fa14bfd53603a683c3e50c815e18562e8 diff --git a/repos/gems/recipes/pkg/nano3d/hash b/repos/gems/recipes/pkg/nano3d/hash index 0da3b7fb60..1cded1c092 100644 --- a/repos/gems/recipes/pkg/nano3d/hash +++ b/repos/gems/recipes/pkg/nano3d/hash @@ -1 +1 @@ -2022-08-16 209f5316a45bc867f330d28ecb8287a66525db9f +2022-08-30 17b31ed76623ba3adb87690555a4e99858040624 diff --git a/repos/gems/recipes/pkg/sculpt/hash b/repos/gems/recipes/pkg/sculpt/hash index deb4f3a9dc..c4f8b9f2bb 100644 --- a/repos/gems/recipes/pkg/sculpt/hash +++ b/repos/gems/recipes/pkg/sculpt/hash @@ -1 +1 @@ -2022-08-16 2d0784a7b4045de3eb2e4eafa29cf4fdcacb0d02 +2022-08-30 aaad9b09c1a50bc5ad2a5c01514fbaef1f334246 diff --git a/repos/gems/recipes/pkg/sculpt_distribution-pc/hash b/repos/gems/recipes/pkg/sculpt_distribution-pc/hash index 4188ed111b..b569038122 100644 --- a/repos/gems/recipes/pkg/sculpt_distribution-pc/hash +++ b/repos/gems/recipes/pkg/sculpt_distribution-pc/hash @@ -1 +1 @@ -2022-08-16 6840533c0c72a91d5cb052fc483ed3a6c773422b +2022-08-30 d4acb7461859308b3c3d445ac2a337e206534911 diff --git a/repos/gems/recipes/pkg/sculpt_distribution/hash b/repos/gems/recipes/pkg/sculpt_distribution/hash index edb8105431..fb4f393164 100644 --- a/repos/gems/recipes/pkg/sculpt_distribution/hash +++ b/repos/gems/recipes/pkg/sculpt_distribution/hash @@ -1 +1 @@ -2022-08-16 02713ca4ec148bc3598c05c468575fc0c72cd5f8 +2022-08-30 cc01e8b5f2e2813a99306a4e7fa6612c9213a780 diff --git a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash index 79ee703c15..3acf17b7e3 100644 --- a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash +++ b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash @@ -1 +1 @@ -2022-08-16 48ae7d5122199d57adf4bd69b7f15b362309c123 +2022-08-30 f0267144ec184397d35f1433d4849a6653f2e1f6 diff --git a/repos/gems/recipes/pkg/terminal/hash b/repos/gems/recipes/pkg/terminal/hash index 651fb70cd3..f7da894b57 100644 --- a/repos/gems/recipes/pkg/terminal/hash +++ b/repos/gems/recipes/pkg/terminal/hash @@ -1 +1 @@ -2022-08-16 c7f829c3caa20441ac753ec348e6a43417ab7706 +2022-08-30 ff230f0c67dc57413eadba65451cdfee78013020 diff --git a/repos/gems/recipes/pkg/test-depot_query_index/hash b/repos/gems/recipes/pkg/test-depot_query_index/hash index 4f246c9019..d40ca27604 100644 --- a/repos/gems/recipes/pkg/test-depot_query_index/hash +++ b/repos/gems/recipes/pkg/test-depot_query_index/hash @@ -1 +1 @@ -2022-08-16 8e324daf7663d5b544e78d2afc8f01e230ded998 +2022-08-30 eddcda79e6f3a7726ce6b8f0c83815367dbc9e17 diff --git a/repos/gems/recipes/pkg/test-fs_tool/hash b/repos/gems/recipes/pkg/test-fs_tool/hash index 6beee6fdbe..3020bf2aa6 100644 --- a/repos/gems/recipes/pkg/test-fs_tool/hash +++ b/repos/gems/recipes/pkg/test-fs_tool/hash @@ -1 +1 @@ -2022-08-16 bd15bf5d6312b6496de270e1b6a27729b1b03a75 +2022-08-30 0cc78267ebbbd4813f09748e9652a4edd1d499f4 diff --git a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash index ee2d49fc1d..3b84a5a74f 100644 --- a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash +++ b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash @@ -1 +1 @@ -2022-08-16 9e7edad43e72177c5e0c8355491fd81764f6ce49 +2022-08-30 d6faae410188c6f6265e1f1884eb74e3b6f6c50e diff --git a/repos/gems/recipes/pkg/themed_decorator/hash b/repos/gems/recipes/pkg/themed_decorator/hash index b16186fb3b..c8bf83c8c2 100644 --- a/repos/gems/recipes/pkg/themed_decorator/hash +++ b/repos/gems/recipes/pkg/themed_decorator/hash @@ -1 +1 @@ -2022-08-16 e97c5eacaa6ce23f0a3e9a5ec372b482046a0585 +2022-08-30 ab5ce532d3941f7257b9a119335b9ab2966a1f80 diff --git a/repos/gems/recipes/pkg/themed_wm/hash b/repos/gems/recipes/pkg/themed_wm/hash index 60689d3969..3e64cfa764 100644 --- a/repos/gems/recipes/pkg/themed_wm/hash +++ b/repos/gems/recipes/pkg/themed_wm/hash @@ -1 +1 @@ -2022-08-16 182891b39395da40496f60739cd60beb28ae7224 +2022-08-30 f2129ec373aaeaebcc02d196325b906e21130c95 diff --git a/repos/gems/recipes/pkg/touch_keyboard/hash b/repos/gems/recipes/pkg/touch_keyboard/hash index 3ef6a70405..d6b108737e 100644 --- a/repos/gems/recipes/pkg/touch_keyboard/hash +++ b/repos/gems/recipes/pkg/touch_keyboard/hash @@ -1 +1 @@ -2022-08-16 12ae2f79f09fbcac654620f26e7a5de171002b23 +2022-08-30 eeef58a361dcaff53ec496e15b1130b341fdf183 diff --git a/repos/gems/recipes/pkg/trace_fs/hash b/repos/gems/recipes/pkg/trace_fs/hash index a623d15d03..745e5428c0 100644 --- a/repos/gems/recipes/pkg/trace_fs/hash +++ b/repos/gems/recipes/pkg/trace_fs/hash @@ -1 +1 @@ -2022-08-16 d8da0f3462660c9b71f9b72ce470697330c9add1 +2022-08-30 9e67e92efe7123bb5f781bb0a2fa9a93e9a1e0be diff --git a/repos/gems/recipes/pkg/trace_recorder/hash b/repos/gems/recipes/pkg/trace_recorder/hash index 6d443cd972..9800274dda 100644 --- a/repos/gems/recipes/pkg/trace_recorder/hash +++ b/repos/gems/recipes/pkg/trace_recorder/hash @@ -1 +1 @@ -2022-08-16 d0db92f2ed914c325c05bdbaecec2e8af767e3da +2022-08-30 b30cf59e0b4a9cde4a2ac078082913b594eeb6ef diff --git a/repos/gems/recipes/pkg/window_layouter/hash b/repos/gems/recipes/pkg/window_layouter/hash index d8f72b4cbf..8bf9d44c54 100644 --- a/repos/gems/recipes/pkg/window_layouter/hash +++ b/repos/gems/recipes/pkg/window_layouter/hash @@ -1 +1 @@ -2022-08-16 c7031222316021e82805c6470df9b2a8b13b25bc +2022-08-30 6fa9d103da49cc7bf5ca9b618315b45b3cf3dd9f diff --git a/repos/gems/recipes/pkg/wm/hash b/repos/gems/recipes/pkg/wm/hash index 6c54e79379..1646d3bb0b 100644 --- a/repos/gems/recipes/pkg/wm/hash +++ b/repos/gems/recipes/pkg/wm/hash @@ -1 +1 @@ -2022-08-16 6e79a90c5b50e98394755c5938a4fc473dabb7eb +2022-08-30 ff8704759a9e463c650448ea113c2358a317cafb diff --git a/repos/gems/recipes/raw/touch_keyboard/hash b/repos/gems/recipes/raw/touch_keyboard/hash index a523eb4c40..169c95bf6e 100644 --- a/repos/gems/recipes/raw/touch_keyboard/hash +++ b/repos/gems/recipes/raw/touch_keyboard/hash @@ -1 +1 @@ -2022-02-18 77a033bc47ac74edec3efa498e8b02a9e686c773 +2022-08-30 86b9256fd07f3bd53820605a4cb342106f9dbf60 diff --git a/repos/gems/recipes/src/backdrop/hash b/repos/gems/recipes/src/backdrop/hash index a73a6f1143..7928b2da26 100644 --- a/repos/gems/recipes/src/backdrop/hash +++ b/repos/gems/recipes/src/backdrop/hash @@ -1 +1 @@ -2022-08-16 545f7a4ecc7c34610c75ebc18a364237a907e24b +2022-08-30 1374b46bc7faa121117feb4a699e6b808655f621 diff --git a/repos/gems/recipes/src/cbe/hash b/repos/gems/recipes/src/cbe/hash index d7b3e4934e..7b9938100b 100644 --- a/repos/gems/recipes/src/cbe/hash +++ b/repos/gems/recipes/src/cbe/hash @@ -1 +1 @@ -2022-08-16 e4276d71789ffc3336036b6d9f690fd526984a4c +2022-08-30 eefc8dee4f7e704f49dd1157e692e623f0d66c44 diff --git a/repos/gems/recipes/src/cpu_load_display/hash b/repos/gems/recipes/src/cpu_load_display/hash index 03c8652e69..662588fcf8 100644 --- a/repos/gems/recipes/src/cpu_load_display/hash +++ b/repos/gems/recipes/src/cpu_load_display/hash @@ -1 +1 @@ -2022-08-16 4dec47a393bf4d0527940a064c904c6332744fbb +2022-08-30 2c979917810596845407c3d154ad42385600c720 diff --git a/repos/gems/recipes/src/decorator/hash b/repos/gems/recipes/src/decorator/hash index d2cf5c5a58..17aa8f63df 100644 --- a/repos/gems/recipes/src/decorator/hash +++ b/repos/gems/recipes/src/decorator/hash @@ -1 +1 @@ -2022-08-16 984b18713342cbb7435e42b38117a37f4ae898db +2022-08-30 f1d00d1ca0b34393787095562314f7c3b23b289f diff --git a/repos/gems/recipes/src/depot_deploy/hash b/repos/gems/recipes/src/depot_deploy/hash index 98a31631e2..e1a50ecfde 100644 --- a/repos/gems/recipes/src/depot_deploy/hash +++ b/repos/gems/recipes/src/depot_deploy/hash @@ -1 +1 @@ -2022-08-16 0e07f6dd1e7eee1be9134660708b09535d610ae0 +2022-08-30 1cbffb581e06df6194cc371aac02e2999792a6fe diff --git a/repos/gems/recipes/src/depot_download_manager/hash b/repos/gems/recipes/src/depot_download_manager/hash index fc236e77a3..080d8bf9bf 100644 --- a/repos/gems/recipes/src/depot_download_manager/hash +++ b/repos/gems/recipes/src/depot_download_manager/hash @@ -1 +1 @@ -2022-08-16 0d18c9273cf245ee727966eab8ca49e8923ba87c +2022-08-30 786082aeae1fea40c35e09baf8557ff98ff9bf53 diff --git a/repos/gems/recipes/src/depot_query/hash b/repos/gems/recipes/src/depot_query/hash index ea064f4a4e..e176513932 100644 --- a/repos/gems/recipes/src/depot_query/hash +++ b/repos/gems/recipes/src/depot_query/hash @@ -1 +1 @@ -2022-08-16 9385f285b23988cbb91f5c6ff782724327afda97 +2022-08-30 204452250a5561e00d8dc5057eb0538b1491528b diff --git a/repos/gems/recipes/src/driver_manager/hash b/repos/gems/recipes/src/driver_manager/hash index 50da0beec3..2f7871933c 100644 --- a/repos/gems/recipes/src/driver_manager/hash +++ b/repos/gems/recipes/src/driver_manager/hash @@ -1 +1 @@ -2022-08-16 e00a9ca7a7b49165111728033891e90f8f556c53 +2022-08-30 d500af16df4b24a29c74c62621fd32f564fe7267 diff --git a/repos/gems/recipes/src/file_terminal/hash b/repos/gems/recipes/src/file_terminal/hash index e37aa85ea9..052e7700b8 100644 --- a/repos/gems/recipes/src/file_terminal/hash +++ b/repos/gems/recipes/src/file_terminal/hash @@ -1 +1 @@ -2022-08-16 b72b23f93176ab7cdcf32de810e2be09414f2792 +2022-08-30 0670940516f57bffeb6d1493d1f92fb3dd903e36 diff --git a/repos/gems/recipes/src/file_vault/hash b/repos/gems/recipes/src/file_vault/hash index b13af2070f..afc8c42a15 100644 --- a/repos/gems/recipes/src/file_vault/hash +++ b/repos/gems/recipes/src/file_vault/hash @@ -1 +1 @@ -2022-08-16 0291359a2d92f965d3c517444a5e606d3bcf517a +2022-08-30 db0730aecabcebc7a9d5cd550c270f00934c9849 diff --git a/repos/gems/recipes/src/fs_query/hash b/repos/gems/recipes/src/fs_query/hash index 15bf153341..fd28277752 100644 --- a/repos/gems/recipes/src/fs_query/hash +++ b/repos/gems/recipes/src/fs_query/hash @@ -1 +1 @@ -2022-08-16 2c20c6ab22d05b3c0b02eb02b5339414340da408 +2022-08-30 0de3fa48f1e90f34a802f3d966dd71f998a9e969 diff --git a/repos/gems/recipes/src/fs_tool/hash b/repos/gems/recipes/src/fs_tool/hash index e324553667..5b2da3f02d 100644 --- a/repos/gems/recipes/src/fs_tool/hash +++ b/repos/gems/recipes/src/fs_tool/hash @@ -1 +1 @@ -2022-08-16 4c8be38b441df43c1c91c186ce3d50817ae34a22 +2022-08-30 f9e495ac5a19fe90184ea5e7761f6251be9e98d1 diff --git a/repos/gems/recipes/src/gpt_write/hash b/repos/gems/recipes/src/gpt_write/hash index ab3138adb4..da7979be0e 100644 --- a/repos/gems/recipes/src/gpt_write/hash +++ b/repos/gems/recipes/src/gpt_write/hash @@ -1 +1 @@ -2022-08-16 d01c17e04b7a37983aafe704adb5a71c9d930f3b +2022-08-30 938563d43230e97ff48cc02b258b2f7e68196dff diff --git a/repos/gems/recipes/src/gui_fader/hash b/repos/gems/recipes/src/gui_fader/hash index 9f8b6f7587..692c0d16fc 100644 --- a/repos/gems/recipes/src/gui_fader/hash +++ b/repos/gems/recipes/src/gui_fader/hash @@ -1 +1 @@ -2022-08-16 35c86d3f5488038409f557eb95b03ca206fa8096 +2022-08-30 da84540aa943ada8536168936c08e778535e948c diff --git a/repos/gems/recipes/src/menu_view/hash b/repos/gems/recipes/src/menu_view/hash index fd3d1a49c5..3cc8ac997f 100644 --- a/repos/gems/recipes/src/menu_view/hash +++ b/repos/gems/recipes/src/menu_view/hash @@ -1 +1 @@ -2022-08-16 14d3c35e8dafef4594f98ab26dc366d9b1aed8cc +2022-08-30 1c531b98df46f7c317e36304895598deb85108cf diff --git a/repos/gems/recipes/src/mixer_gui_qt/hash b/repos/gems/recipes/src/mixer_gui_qt/hash index 401a3a9d23..34c4b0c32f 100644 --- a/repos/gems/recipes/src/mixer_gui_qt/hash +++ b/repos/gems/recipes/src/mixer_gui_qt/hash @@ -1 +1 @@ -2022-08-16 3db7ed5e192c6d9d87b188cd99d3af709c9877ab +2022-08-30 ad6e2c35d64341fe364e4154a5f3f581af1d1b56 diff --git a/repos/gems/recipes/src/nano3d/hash b/repos/gems/recipes/src/nano3d/hash index f46dbf3553..2cbb6d0a53 100644 --- a/repos/gems/recipes/src/nano3d/hash +++ b/repos/gems/recipes/src/nano3d/hash @@ -1 +1 @@ -2022-08-16 a4ccc27651a0a1a78326e0c7e66f595e08e175f2 +2022-08-30 b6100e750cc31205dea1bd5b8fdb757c4a792d79 diff --git a/repos/gems/recipes/src/sculpt_manager/hash b/repos/gems/recipes/src/sculpt_manager/hash index d1533b230b..4194858209 100644 --- a/repos/gems/recipes/src/sculpt_manager/hash +++ b/repos/gems/recipes/src/sculpt_manager/hash @@ -1 +1 @@ -2022-08-16 79c8ab656fbecb77612225888d5f0c0de7631bee +2022-08-30 06520abbc28572cfa70dede8c9bb5fe4dfc70d03 diff --git a/repos/gems/recipes/src/terminal/hash b/repos/gems/recipes/src/terminal/hash index f91abfc740..84406f9303 100644 --- a/repos/gems/recipes/src/terminal/hash +++ b/repos/gems/recipes/src/terminal/hash @@ -1 +1 @@ -2022-08-16 12505c9c0b762b3c8caddb85fdfca98f8d4aee26 +2022-08-30 37ce42b74153a9dc79c8acf65965e720c6ce44c5 diff --git a/repos/gems/recipes/src/test-tiled_wm/hash b/repos/gems/recipes/src/test-tiled_wm/hash index 2649d85f09..29c7fe833b 100644 --- a/repos/gems/recipes/src/test-tiled_wm/hash +++ b/repos/gems/recipes/src/test-tiled_wm/hash @@ -1 +1 @@ -2022-08-16 a9fe5c8ceeae39fe2418f831fc6f9fc1409bbfd2 +2022-08-30 8fa2c0968a846fca4f7dbfc9091703d05284d334 diff --git a/repos/gems/recipes/src/text_area/hash b/repos/gems/recipes/src/text_area/hash index a80e071a52..0605360ba6 100644 --- a/repos/gems/recipes/src/text_area/hash +++ b/repos/gems/recipes/src/text_area/hash @@ -1 +1 @@ -2022-08-16 805ca65974e79e261ed19258485f2a8b3f7d701b +2022-08-30 521185e41a8fc8dd95371ee87137ec6c2f41b6a0 diff --git a/repos/gems/recipes/src/themed_decorator/hash b/repos/gems/recipes/src/themed_decorator/hash index 9ca852fac9..86e593aa8e 100644 --- a/repos/gems/recipes/src/themed_decorator/hash +++ b/repos/gems/recipes/src/themed_decorator/hash @@ -1 +1 @@ -2022-08-16 e14a27ba0a0da74192be32a5c5a548a0f5db3552 +2022-08-30 78b72b06b9bd37701fe8d4c9445244df7b5ba768 diff --git a/repos/gems/recipes/src/touch_keyboard/hash b/repos/gems/recipes/src/touch_keyboard/hash index e9fe7c0675..a611b253a5 100644 --- a/repos/gems/recipes/src/touch_keyboard/hash +++ b/repos/gems/recipes/src/touch_keyboard/hash @@ -1 +1 @@ -2022-08-16 b1f07e56a5aa80e1944697878808f8d52330fa4a +2022-08-30 4bc179e2b15b4636e0dc7a6bd7ce80503420f92c diff --git a/repos/gems/recipes/src/trace_recorder/hash b/repos/gems/recipes/src/trace_recorder/hash index 6f5b895197..31c848f0ba 100644 --- a/repos/gems/recipes/src/trace_recorder/hash +++ b/repos/gems/recipes/src/trace_recorder/hash @@ -1 +1 @@ -2022-08-16 3da52b4ea03ba0b7829e4a6dde1beaae1aa962d2 +2022-08-30 49d15a2e637dbdf70a66a90b1cc4e57e9aa78578 diff --git a/repos/gems/recipes/src/trace_recorder_policy/hash b/repos/gems/recipes/src/trace_recorder_policy/hash index 8d6db360c9..65228e29ff 100644 --- a/repos/gems/recipes/src/trace_recorder_policy/hash +++ b/repos/gems/recipes/src/trace_recorder_policy/hash @@ -1 +1 @@ -2022-08-16 441606edbd1ffd0e105d7eef09609167bffe2452 +2022-08-30 5a38181f12e1c1c0c0b4b32f332a456f6359f7b6 diff --git a/repos/gems/recipes/src/vfs_audit/hash b/repos/gems/recipes/src/vfs_audit/hash index 664672e868..5648f438d1 100644 --- a/repos/gems/recipes/src/vfs_audit/hash +++ b/repos/gems/recipes/src/vfs_audit/hash @@ -1 +1 @@ -2022-08-16 fe85fc1e9224c18e608d636a9b886beb8e246689 +2022-08-30 a47f8ab0040ac4b6c170fa58ffb26e0d65cb66bb diff --git a/repos/gems/recipes/src/vfs_gpu/hash b/repos/gems/recipes/src/vfs_gpu/hash index 619d469d92..63e988713d 100644 --- a/repos/gems/recipes/src/vfs_gpu/hash +++ b/repos/gems/recipes/src/vfs_gpu/hash @@ -1 +1 @@ -2022-08-16 013aa5cce89c47349cab67f752b3d04c818adeda +2022-08-30 12891eeb2fbe5ba0826228920840c99d4cd52bbf diff --git a/repos/gems/recipes/src/vfs_import/hash b/repos/gems/recipes/src/vfs_import/hash index 97fed33091..0b97ec0f16 100644 --- a/repos/gems/recipes/src/vfs_import/hash +++ b/repos/gems/recipes/src/vfs_import/hash @@ -1 +1 @@ -2022-08-16 0ba225be4d19fb4b9311360d59fbc85a10de03a2 +2022-08-30 a841e1f2da10d5268e99d109125dce2b5b20e7ba diff --git a/repos/gems/recipes/src/vfs_pipe/hash b/repos/gems/recipes/src/vfs_pipe/hash index 2da29d813f..c60e517751 100644 --- a/repos/gems/recipes/src/vfs_pipe/hash +++ b/repos/gems/recipes/src/vfs_pipe/hash @@ -1 +1 @@ -2022-08-16 b721657deca0684b95c134cf39f180122853a587 +2022-08-30 41b53b2f4df1d73e1cfe3e972f202ce57a7a1e24 diff --git a/repos/gems/recipes/src/vfs_trace/hash b/repos/gems/recipes/src/vfs_trace/hash index 691e05af93..46b163a16a 100644 --- a/repos/gems/recipes/src/vfs_trace/hash +++ b/repos/gems/recipes/src/vfs_trace/hash @@ -1 +1 @@ -2022-08-16 fd86a26c8b28191b6c82b11c919bd4330f49d3e0 +2022-08-30 5e846fbc4da2f387bd21d97ca3eec4e744a294b7 diff --git a/repos/gems/recipes/src/vfs_ttf/hash b/repos/gems/recipes/src/vfs_ttf/hash index 565568f708..bcb46920bf 100644 --- a/repos/gems/recipes/src/vfs_ttf/hash +++ b/repos/gems/recipes/src/vfs_ttf/hash @@ -1 +1 @@ -2022-08-16 eba4588332957efaf5ae5f0630076a726cac1a43 +2022-08-30 662dacac176309542977fb006986089009d51c7e diff --git a/repos/gems/recipes/src/window_layouter/hash b/repos/gems/recipes/src/window_layouter/hash index 893b013770..756d8b8152 100644 --- a/repos/gems/recipes/src/window_layouter/hash +++ b/repos/gems/recipes/src/window_layouter/hash @@ -1 +1 @@ -2022-08-16 2af270c7b599198acded112561b60c8a2635e52b +2022-08-30 32862bea5a0e4a23fa2f7600cdd67036ac087c09 diff --git a/repos/gems/recipes/src/wm/hash b/repos/gems/recipes/src/wm/hash index 6906a598e4..24978cc954 100644 --- a/repos/gems/recipes/src/wm/hash +++ b/repos/gems/recipes/src/wm/hash @@ -1 +1 @@ -2022-08-16 ae7d3bbec37cdffe22a4bc56031d6f97d26218bb +2022-08-30 332800192fb71eaaa024e67645b25eaec4191601 diff --git a/repos/libports/recipes/api/libc/hash b/repos/libports/recipes/api/libc/hash index 188a7c19b9..060407a39a 100644 --- a/repos/libports/recipes/api/libc/hash +++ b/repos/libports/recipes/api/libc/hash @@ -1 +1 @@ -2022-08-16 c8b5df1b82d23ae95d1164cc62e909afd1e60b0f +2022-08-30 6943e7821ad6e8c36ce46b109db41ca2e6d730f1 diff --git a/repos/libports/recipes/api/pcsc-lite/hash b/repos/libports/recipes/api/pcsc-lite/hash index 507fb5c6f4..899ef488d9 100644 --- a/repos/libports/recipes/api/pcsc-lite/hash +++ b/repos/libports/recipes/api/pcsc-lite/hash @@ -1 +1 @@ -2022-06-15 f2d91225517ac072d1a539515f1970507cf16519 +2022-08-30 d9e0d7a0a115b076da34b678283a202bc641bd47 diff --git a/repos/libports/recipes/api/qt5/hash b/repos/libports/recipes/api/qt5/hash index ca3313769e..10f95be2ed 100644 --- a/repos/libports/recipes/api/qt5/hash +++ b/repos/libports/recipes/api/qt5/hash @@ -1 +1 @@ -2022-08-16 01e14e6a7d9d1cb8ed87df3e52cda3db5724ad0a +2022-08-30 300d4abc0fa184cacd1c11cd56f23a7877f847b5 diff --git a/repos/libports/recipes/pkg/acpica/hash b/repos/libports/recipes/pkg/acpica/hash index ba638288a3..5e00bb6703 100644 --- a/repos/libports/recipes/pkg/acpica/hash +++ b/repos/libports/recipes/pkg/acpica/hash @@ -1 +1 @@ -2022-08-16 9db33912ab6585ec9eee9470bcb3663eadf24295 +2022-08-30 5ba5c0a2d5604a98d17b66684dde325ffefac371 diff --git a/repos/libports/recipes/pkg/gcov/hash b/repos/libports/recipes/pkg/gcov/hash index 675a277264..2c92bfab7f 100644 --- a/repos/libports/recipes/pkg/gcov/hash +++ b/repos/libports/recipes/pkg/gcov/hash @@ -1 +1 @@ -2022-08-16 9a94057d1c627500455edeca2cda2d765d1211cc +2022-08-30 22eeaac151369cb6106fa3441ecfdc98b93c0808 diff --git a/repos/libports/recipes/pkg/mesa_gears/hash b/repos/libports/recipes/pkg/mesa_gears/hash index ae8af6a7c7..b716acbe2c 100644 --- a/repos/libports/recipes/pkg/mesa_gears/hash +++ b/repos/libports/recipes/pkg/mesa_gears/hash @@ -1 +1 @@ -2022-08-16 fc3bd553d12cf85d362484b2e4b0774aaaaad173 +2022-08-30 52081432e2a9680d74e36c23e1a80e80f51fe23f diff --git a/repos/libports/recipes/pkg/mesa_gpu-cpu/hash b/repos/libports/recipes/pkg/mesa_gpu-cpu/hash index f8a6f9a520..b0e4eb8861 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-cpu/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-cpu/hash @@ -1 +1 @@ -2022-08-16 a1623ff07aa8162c961fcaf778f09a9167cef1c1 +2022-08-30 660e77c4c8c06c37b05b7a65f634b42a46e77c21 diff --git a/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash b/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash index f5be5058c4..9d3c55797c 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash @@ -1 +1 @@ -2022-08-16 399dd53cc5f4fe11d2f27b2b37c1a697a59b1c36 +2022-08-30 f1ca12dcb0a225f69c1d663c8071e1eb23f32436 diff --git a/repos/libports/recipes/pkg/mesa_gpu-intel/hash b/repos/libports/recipes/pkg/mesa_gpu-intel/hash index 240aa0e9a0..30fe799ec0 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-intel/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-intel/hash @@ -1 +1 @@ -2022-08-16 62c32e7a11ebfd1cdc7000919f5af08eadc949b4 +2022-08-30 da0e1a04117c934a74bcdd659135f072adedcd52 diff --git a/repos/libports/recipes/pkg/pdf_view/hash b/repos/libports/recipes/pkg/pdf_view/hash index 63cb1444d1..acde59563b 100644 --- a/repos/libports/recipes/pkg/pdf_view/hash +++ b/repos/libports/recipes/pkg/pdf_view/hash @@ -1 +1 @@ -2022-08-16 a8a3297bd0ceaad985a3360cb730eb98e3b6f102 +2022-08-30 16e81dc7acde181ade10c31af58b5ef3e8a2311e diff --git a/repos/libports/recipes/pkg/qt5_textedit/hash b/repos/libports/recipes/pkg/qt5_textedit/hash index a20ce1ec76..de539069e9 100644 --- a/repos/libports/recipes/pkg/qt5_textedit/hash +++ b/repos/libports/recipes/pkg/qt5_textedit/hash @@ -1 +1 @@ -2022-08-16 15c4962a00020459048f62f1b9c518b8ba5ccea8 +2022-08-30 c88f40f5d6c3a68d21e667b66e6322dd7a7a51a7 diff --git a/repos/libports/recipes/pkg/system_clock-pc/hash b/repos/libports/recipes/pkg/system_clock-pc/hash index 1d6bbaec1c..81081ac06e 100644 --- a/repos/libports/recipes/pkg/system_clock-pc/hash +++ b/repos/libports/recipes/pkg/system_clock-pc/hash @@ -1 +1 @@ -2022-08-16 b916e39a9aca8e74eeb33353f1f8c0b386f32b7f +2022-08-30 ebd9c34462a2ca5f0d77ced30aa469f0a9d844fb diff --git a/repos/libports/recipes/pkg/system_rtc-linux/hash b/repos/libports/recipes/pkg/system_rtc-linux/hash index f4a4abdd17..4d7a34f61a 100644 --- a/repos/libports/recipes/pkg/system_rtc-linux/hash +++ b/repos/libports/recipes/pkg/system_rtc-linux/hash @@ -1 +1 @@ -2022-08-16 c3f705f9ba0e74ccfc63235ec9b7dd7ceef5362e +2022-08-30 ed68d7785b1b4186079fe8c915243b1df7c49a5a diff --git a/repos/libports/recipes/pkg/system_rtc-pc/hash b/repos/libports/recipes/pkg/system_rtc-pc/hash index ea481a7736..510ffda00f 100644 --- a/repos/libports/recipes/pkg/system_rtc-pc/hash +++ b/repos/libports/recipes/pkg/system_rtc-pc/hash @@ -1 +1 @@ -2022-08-16 d4102cb3de53a15cc7912296bf568611a073fd28 +2022-08-30 3a71e19bb7c707c4ef3e0fb9e2a488e735b0a800 diff --git a/repos/libports/recipes/pkg/test-expat/hash b/repos/libports/recipes/pkg/test-expat/hash index 51c6bb2164..39d8206c8b 100644 --- a/repos/libports/recipes/pkg/test-expat/hash +++ b/repos/libports/recipes/pkg/test-expat/hash @@ -1 +1 @@ -2022-08-16 a1c0ea71a3a1cd356a3d4d7d0dc2ac4df4d9078e +2022-08-30 99962fbd6f3866a64144a7c574f18977383a49c8 diff --git a/repos/libports/recipes/pkg/test-ldso/hash b/repos/libports/recipes/pkg/test-ldso/hash index 6d6d7b3c06..8dda5d9811 100644 --- a/repos/libports/recipes/pkg/test-ldso/hash +++ b/repos/libports/recipes/pkg/test-ldso/hash @@ -1 +1 @@ -2022-08-16 b2dc906cf2247d76f71116dd4376bf45d8ae6b73 +2022-08-30 c3239684a9238fd38cbd7826e5f7cd74ca4aea96 diff --git a/repos/libports/recipes/pkg/test-libc/hash b/repos/libports/recipes/pkg/test-libc/hash index 7df1fbc546..3d665017b3 100644 --- a/repos/libports/recipes/pkg/test-libc/hash +++ b/repos/libports/recipes/pkg/test-libc/hash @@ -1 +1 @@ -2022-08-16 6aa4f143104f42042af77de5c918a284034a9ea9 +2022-08-30 e0d31ed977af03c5945d18e88c2eebc43151c142 diff --git a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash index 7c1928cf29..e3b62c55c7 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash @@ -1 +1 @@ -2022-08-16 c3247057a14dceaa2f0a07481b7e0cab3fa6a35b +2022-08-30 d7f028438ed22d4b2b34136c879a005a7d8692b5 diff --git a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash index 51eb95e81e..85923d0483 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash @@ -1 +1 @@ -2022-08-16 b20429fbd1484591e376fed6d69c36607b0e62cb +2022-08-30 49cd465fec5d5b2cd3d230c6bcc445d3977eb65d diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash index 4f94eec551..55d06a08da 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash @@ -1 +1 @@ -2022-08-16 713479cfe4e8477d60774772dbacaa412abf1500 +2022-08-30 ad27752a7c03d8cbdac5d4dab3abde2f61dbe417 diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash index f481777a25..f5142716d7 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash @@ -1 +1 @@ -2022-08-16 6051a7404cac3be5586f7aff19aa915190c1b10e +2022-08-30 0c56a02df0d609a0880309050c5d5fd92fea72f1 diff --git a/repos/libports/recipes/pkg/test-libc_counter/hash b/repos/libports/recipes/pkg/test-libc_counter/hash index f75e6664f3..693b16fb94 100644 --- a/repos/libports/recipes/pkg/test-libc_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_counter/hash @@ -1 +1 @@ -2022-08-16 40316a563b4ffb983be164d65f9c965f4fe5d18e +2022-08-30 033c049d0f102858354906e638ba021b55e73977 diff --git a/repos/libports/recipes/pkg/test-libc_execve/hash b/repos/libports/recipes/pkg/test-libc_execve/hash index b440859713..77a30175ad 100644 --- a/repos/libports/recipes/pkg/test-libc_execve/hash +++ b/repos/libports/recipes/pkg/test-libc_execve/hash @@ -1 +1 @@ -2022-08-16 a6a12558cf50e347905267a41e1416d262dc4c71 +2022-08-30 ae2ec384c5b3aabdfa8e5f1e55972043add2b4d3 diff --git a/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash b/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash index c321b5fd6f..45cb7da97b 100644 --- a/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash @@ -1 +1 @@ -2022-08-16 9458f8dbabf14aaa1814d097d7767ad4656a98c4 +2022-08-30 ab379af824f5dca2cb38f4b5a28f44845601324c diff --git a/repos/libports/recipes/pkg/test-libc_fork/hash b/repos/libports/recipes/pkg/test-libc_fork/hash index 1b7132ceb1..3b0f1f785f 100644 --- a/repos/libports/recipes/pkg/test-libc_fork/hash +++ b/repos/libports/recipes/pkg/test-libc_fork/hash @@ -1 +1 @@ -2022-08-16 2af13a0b1fc99ce9711ca77975f2fe493aa81e0b +2022-08-30 6b1d4ad8a536f2cb9c1aecb5bda8e2af5457762b diff --git a/repos/libports/recipes/pkg/test-libc_getenv/hash b/repos/libports/recipes/pkg/test-libc_getenv/hash index 5e7660b2b6..3420d8ce4f 100644 --- a/repos/libports/recipes/pkg/test-libc_getenv/hash +++ b/repos/libports/recipes/pkg/test-libc_getenv/hash @@ -1 +1 @@ -2022-08-16 0247f55f3b198b8af75b52c198ab87e74b0894e0 +2022-08-30 b1f0a811747285c47d3611d6ecfae1d6f2e3d6ff diff --git a/repos/libports/recipes/pkg/test-libc_pipe/hash b/repos/libports/recipes/pkg/test-libc_pipe/hash index 43a3219a67..7e014c3ba3 100644 --- a/repos/libports/recipes/pkg/test-libc_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_pipe/hash @@ -1 +1 @@ -2022-08-16 10e01cf3281cc761be0aff589106abe912fd3569 +2022-08-30 3d319b9a9c71c7c989e582b32f4e420fa2399a72 diff --git a/repos/libports/recipes/pkg/test-libc_vfs/hash b/repos/libports/recipes/pkg/test-libc_vfs/hash index ad8af16dfc..99d10cc07d 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs/hash @@ -1 +1 @@ -2022-08-16 94f58b73bce74a9dbb8e03bbe8ccb5f506c6b9b6 +2022-08-30 65350a9998b2a085c79e3c10706074a141dc3377 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_block/hash b/repos/libports/recipes/pkg/test-libc_vfs_block/hash index 69cdf82c47..a30ab8ffb1 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_block/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_block/hash @@ -1 +1 @@ -2022-08-16 47f516d5c1748a69217ee509ea6e137418c1185f +2022-08-30 f116e35a8ca27514074770d12fa1fe1c05d58980 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash index 456a13dbf0..693e7047cd 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash @@ -1 +1 @@ -2022-08-16 ecd52e78977d34e26700ce23488dd1f751f61768 +2022-08-30 c6c9eb921e2336facec686e7549c992e2fd31c66 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash index 3a9a69f798..a871dc5265 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash @@ -1 +1 @@ -2022-08-16 01f3c0b20e79abd61b3c7d1d585fa38d1af450fa +2022-08-30 8ed4e32d5666e169477c0eb5b87f2b301cea6a27 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash index b9f077b059..fc6c0377fc 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash @@ -1 +1 @@ -2022-08-16 640041665a8ace8b78d1c37b85ad211c3ed76da3 +2022-08-30 bdebee5db63ba1abfeb48ac3d54641ea71d64db8 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash index 9547b789b9..496d42e355 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash @@ -1 +1 @@ -2022-08-16 7997f8f6c7f71c1df43490484620d91fc668edb1 +2022-08-30 4f332f8265797ccd2febadcd742a01a102205a58 diff --git a/repos/libports/recipes/pkg/test-pthread/hash b/repos/libports/recipes/pkg/test-pthread/hash index 33f6856810..f362a36c87 100644 --- a/repos/libports/recipes/pkg/test-pthread/hash +++ b/repos/libports/recipes/pkg/test-pthread/hash @@ -1 +1 @@ -2022-08-16 e81f030bb9a966e22e7b4ae863b15064ff722670 +2022-08-30 16c700299b4298e6b5834cd80f699ac507567023 diff --git a/repos/libports/recipes/pkg/test-sequence/hash b/repos/libports/recipes/pkg/test-sequence/hash index 736fca0fea..ef4052ea5f 100644 --- a/repos/libports/recipes/pkg/test-sequence/hash +++ b/repos/libports/recipes/pkg/test-sequence/hash @@ -1 +1 @@ -2022-08-16 557038b1a48bf5095d9d70f253292c25c7b2f1af +2022-08-30 ed0329500e4da43e1af090567fa46bbba4988b88 diff --git a/repos/libports/recipes/pkg/test-spark/hash b/repos/libports/recipes/pkg/test-spark/hash index daabfc02a1..d728ad8fe3 100644 --- a/repos/libports/recipes/pkg/test-spark/hash +++ b/repos/libports/recipes/pkg/test-spark/hash @@ -1 +1 @@ -2022-08-16 82b24d859267c22908c4c1c7b8b6e12d6e4dab02 +2022-08-30 638aa49242bde00ff86d8b64438b9e5f90e245d2 diff --git a/repos/libports/recipes/pkg/test-spark_exception/hash b/repos/libports/recipes/pkg/test-spark_exception/hash index 48f2bd4c9b..edb9023b66 100644 --- a/repos/libports/recipes/pkg/test-spark_exception/hash +++ b/repos/libports/recipes/pkg/test-spark_exception/hash @@ -1 +1 @@ -2022-08-16 7585ca982a650fbeb784e48413b35c640d010433 +2022-08-30 84b10c29c17ea870c43e3f2003ee9a11d9a963be diff --git a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash index 1d431c31dd..eca5f3a015 100644 --- a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash @@ -1 +1 @@ -2022-08-16 00a2020676f4fc759a0779ecff5efb157adba7de +2022-08-30 36581c52f8e74f21122897af49a3383825eb138e diff --git a/repos/libports/recipes/pkg/test-stdcxx/hash b/repos/libports/recipes/pkg/test-stdcxx/hash index a54c683579..77b5edc383 100644 --- a/repos/libports/recipes/pkg/test-stdcxx/hash +++ b/repos/libports/recipes/pkg/test-stdcxx/hash @@ -1 +1 @@ -2022-08-16 a0b04fa76113bb3a7e876a7f18bc475b4548d649 +2022-08-30 3100169985337456b88e006aa7b6ff927defdc48 diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash index dc3d898c61..3924912277 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash @@ -1 +1 @@ -2022-08-16 7c59c16fff11ae04abf516e473172f6853d233cc +2022-08-30 b6d86a65cb73492ed8b56cc80ccac39882321edd diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash index 2e054c938b..b54bbda835 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash @@ -1 +1 @@ -2022-08-16 e6c6f878bd8052e6d09564ed642caf0129abd91a +2022-08-30 6df14f497967809dcd1205008844c50789006305 diff --git a/repos/libports/recipes/pkg/usb_webcam/hash b/repos/libports/recipes/pkg/usb_webcam/hash index 5b899edb62..e8e0d51c6a 100644 --- a/repos/libports/recipes/pkg/usb_webcam/hash +++ b/repos/libports/recipes/pkg/usb_webcam/hash @@ -1 +1 @@ -2022-08-16 e71396bd17546b4ee779333e1896730e997262e1 +2022-08-30 6fa1eccff8ced8e8c8a2745d119160cf390d7bdf diff --git a/repos/libports/recipes/src/acpica/hash b/repos/libports/recipes/src/acpica/hash index 50d7328a7b..ea1b0c93a8 100644 --- a/repos/libports/recipes/src/acpica/hash +++ b/repos/libports/recipes/src/acpica/hash @@ -1 +1 @@ -2022-08-16 98259bba97bb3c63bc735cc17ea66c8fd1c98421 +2022-08-30 7511cc6ad341b5c37e25a6c3327701e153a76a36 diff --git a/repos/libports/recipes/src/curl/hash b/repos/libports/recipes/src/curl/hash index 2e0edd9eb5..822836c7ad 100644 --- a/repos/libports/recipes/src/curl/hash +++ b/repos/libports/recipes/src/curl/hash @@ -1 +1 @@ -2022-08-16 85ad2f0cf0fd0b8d8a07031eef76f029972e09c6 +2022-08-30 8a512354d0399fa098aa471fcc265a3682b3eefe diff --git a/repos/libports/recipes/src/expat/hash b/repos/libports/recipes/src/expat/hash index 82e2d1db43..a215b07832 100644 --- a/repos/libports/recipes/src/expat/hash +++ b/repos/libports/recipes/src/expat/hash @@ -1 +1 @@ -2022-08-16 6329020e3d3e75a1920220a9e857ea22094d4efb +2022-08-30 89a84ab30037f0c4fb6a7e34f2892ade6cb51a66 diff --git a/repos/libports/recipes/src/extract/hash b/repos/libports/recipes/src/extract/hash index 33c1ec4853..a0aa070357 100644 --- a/repos/libports/recipes/src/extract/hash +++ b/repos/libports/recipes/src/extract/hash @@ -1 +1 @@ -2022-08-16 ade504346c0722801c11fc52519a92e6c7f4fc76 +2022-08-30 23af68368bfc64c5fda6cd7f118719f66970059c diff --git a/repos/libports/recipes/src/fetchurl/hash b/repos/libports/recipes/src/fetchurl/hash index 64bace9783..d1399ee917 100644 --- a/repos/libports/recipes/src/fetchurl/hash +++ b/repos/libports/recipes/src/fetchurl/hash @@ -1 +1 @@ -2022-08-16 78b1f5ae916a030d52e855ab8e0768bf89ce99af +2022-08-30 16f55c7c211281c4d2c6ed0f77579bd81f17194f diff --git a/repos/libports/recipes/src/ffi/hash b/repos/libports/recipes/src/ffi/hash index 5a56ee30fd..29860f0e52 100644 --- a/repos/libports/recipes/src/ffi/hash +++ b/repos/libports/recipes/src/ffi/hash @@ -1 +1 @@ -2022-08-16 2270df571f75c3ee9fdd9537bb9c0f7840f9995f +2022-08-30 0be8b75858700b2055d1afd97202856599fb4444 diff --git a/repos/libports/recipes/src/freetype/hash b/repos/libports/recipes/src/freetype/hash index 7082fddef2..eaeb90faf5 100644 --- a/repos/libports/recipes/src/freetype/hash +++ b/repos/libports/recipes/src/freetype/hash @@ -1 +1 @@ -2022-08-16 5f4d25033a019644468683f4e31667e605dbff4e +2022-08-30 83ccac5cdb99106656cdfd1d95ef706b00e5225b diff --git a/repos/libports/recipes/src/fs_utils/hash b/repos/libports/recipes/src/fs_utils/hash index 500b446eb2..a7363d9f71 100644 --- a/repos/libports/recipes/src/fs_utils/hash +++ b/repos/libports/recipes/src/fs_utils/hash @@ -1 +1 @@ -2022-08-16 0e24e36914987339154af0cef874da875f32dbd5 +2022-08-30 b2450ad64d1379a400d4cf49f5dcd87e944d515c diff --git a/repos/libports/recipes/src/gcov/hash b/repos/libports/recipes/src/gcov/hash index 9c8152a271..94bd2782f4 100644 --- a/repos/libports/recipes/src/gcov/hash +++ b/repos/libports/recipes/src/gcov/hash @@ -1 +1 @@ -2022-08-16 2f28dda6f8d9634ac2817190e37e0d3c04352ecc +2022-08-30 24cc4e600ed16e709a81656d6daa5b0ce787d884 diff --git a/repos/libports/recipes/src/gmp/hash b/repos/libports/recipes/src/gmp/hash index 49ffb0c0b2..baa3c89154 100644 --- a/repos/libports/recipes/src/gmp/hash +++ b/repos/libports/recipes/src/gmp/hash @@ -1 +1 @@ -2022-08-16 e9c93cf8b090cb049b9b83a1f7748f5b65937eda +2022-08-30 571d17e4c1b89d9b7aa72eaca3ed9ef55641eb4a diff --git a/repos/libports/recipes/src/icu/hash b/repos/libports/recipes/src/icu/hash index 211cbd4f4f..181657c19b 100644 --- a/repos/libports/recipes/src/icu/hash +++ b/repos/libports/recipes/src/icu/hash @@ -1 +1 @@ -2022-08-16 90696d19aec8c8b8257e80f457fb1cbfa9443d86 +2022-08-30 ce3cf01a4f081281f4780673515ea760a2f68779 diff --git a/repos/libports/recipes/src/jbig2dec/hash b/repos/libports/recipes/src/jbig2dec/hash index 21d2f60271..de98ef94a6 100644 --- a/repos/libports/recipes/src/jbig2dec/hash +++ b/repos/libports/recipes/src/jbig2dec/hash @@ -1 +1 @@ -2022-08-16 e919638e174f8f5dec5254cdb67d41e206e7b003 +2022-08-30 694d9637c0949be5d52172acff175e2c26e20358 diff --git a/repos/libports/recipes/src/jpeg/hash b/repos/libports/recipes/src/jpeg/hash index 0da3c03938..758cbe7887 100644 --- a/repos/libports/recipes/src/jpeg/hash +++ b/repos/libports/recipes/src/jpeg/hash @@ -1 +1 @@ -2022-08-16 dc293e6cf2970f89c4f9d9d1c7592274bf7ee76f +2022-08-30 5b1c05f8cb16f3712eba069ed0b111ce86ad33d0 diff --git a/repos/libports/recipes/src/libarchive/hash b/repos/libports/recipes/src/libarchive/hash index c0d789fbc5..a663155038 100644 --- a/repos/libports/recipes/src/libarchive/hash +++ b/repos/libports/recipes/src/libarchive/hash @@ -1 +1 @@ -2022-08-16 8f5af1316ab668d096f5a0df6431c471d4718909 +2022-08-30 6d481d917238851ea7c7f800cac211d2eee35372 diff --git a/repos/libports/recipes/src/libc/hash b/repos/libports/recipes/src/libc/hash index 9d2f5a99da..cb18c09520 100644 --- a/repos/libports/recipes/src/libc/hash +++ b/repos/libports/recipes/src/libc/hash @@ -1 +1 @@ -2022-08-16 70bc38e424ab2dd7ae17655a637621dc18932022 +2022-08-30 c1968280fa519a45f20312b8927dfaea803ca095 diff --git a/repos/libports/recipes/src/libdrm/hash b/repos/libports/recipes/src/libdrm/hash index fd67f9681c..28a9fa6615 100644 --- a/repos/libports/recipes/src/libdrm/hash +++ b/repos/libports/recipes/src/libdrm/hash @@ -1 +1 @@ -2022-08-16 be8467295e5e428a7a341bbff810f04ee092f1e5 +2022-08-30 f639588e9e3c6a2248d241510e67b77bc1102603 diff --git a/repos/libports/recipes/src/libiconv/hash b/repos/libports/recipes/src/libiconv/hash index 6cae37bff3..1a9255cdd6 100644 --- a/repos/libports/recipes/src/libiconv/hash +++ b/repos/libports/recipes/src/libiconv/hash @@ -1 +1 @@ -2022-08-16 8482c21d73a5c13df5db37efbab41b108860d329 +2022-08-30 bd0fb235e0fa960759ae779fae741422aed4e4e6 diff --git a/repos/libports/recipes/src/liblzma/hash b/repos/libports/recipes/src/liblzma/hash index be115ee03b..fca088429b 100644 --- a/repos/libports/recipes/src/liblzma/hash +++ b/repos/libports/recipes/src/liblzma/hash @@ -1 +1 @@ -2022-08-16 423210e6ecf3e6c6203f497edc3bb8fd3157f411 +2022-08-30 db2f672e6b072a2bbac64caecf97cf05b9ed7021 diff --git a/repos/libports/recipes/src/libpng/hash b/repos/libports/recipes/src/libpng/hash index 24d8fe4abf..7a5826438d 100644 --- a/repos/libports/recipes/src/libpng/hash +++ b/repos/libports/recipes/src/libpng/hash @@ -1 +1 @@ -2022-08-16 7788891cc56921e5f4c378b9c47809cc9a1a945d +2022-08-30 456843d544091720450963ec403e2817dec83d47 diff --git a/repos/libports/recipes/src/libqgenodeviewwidget/hash b/repos/libports/recipes/src/libqgenodeviewwidget/hash index 12034ad911..cbac2197f2 100644 --- a/repos/libports/recipes/src/libqgenodeviewwidget/hash +++ b/repos/libports/recipes/src/libqgenodeviewwidget/hash @@ -1 +1 @@ -2022-08-16 aac5330389858fb40a7b39b963864d55b47a4e23 +2022-08-30 555336977f6d654152dbae114125bc59ac245a00 diff --git a/repos/libports/recipes/src/libqpluginwidget/hash b/repos/libports/recipes/src/libqpluginwidget/hash index edfc00aa29..ffc09fe53c 100644 --- a/repos/libports/recipes/src/libqpluginwidget/hash +++ b/repos/libports/recipes/src/libqpluginwidget/hash @@ -1 +1 @@ -2022-08-16 dd837fc8145e01e9e800c73b755585c328a81ac0 +2022-08-30 c035c594225a254d5860f488ec93b952d1f00f3c diff --git a/repos/libports/recipes/src/libsparkcrypto/hash b/repos/libports/recipes/src/libsparkcrypto/hash index a46e54ebe1..a3e9dbebda 100644 --- a/repos/libports/recipes/src/libsparkcrypto/hash +++ b/repos/libports/recipes/src/libsparkcrypto/hash @@ -1 +1 @@ -2022-08-16 7db7c39e5e5d6c2ae58c5dd6ecde02459eb27b46 +2022-08-30 d195f923dfe1220d57e3cf1c67e13f916f3df7f1 diff --git a/repos/libports/recipes/src/libssh/hash b/repos/libports/recipes/src/libssh/hash index c16d8dce24..9307c77e69 100644 --- a/repos/libports/recipes/src/libssh/hash +++ b/repos/libports/recipes/src/libssh/hash @@ -1 +1 @@ -2022-08-16 5d7102efc56379e64b8bc52abfbf0c19a2405231 +2022-08-30 6bffb42e979e2efac10b33c7d27e872b55631f79 diff --git a/repos/libports/recipes/src/libusb/hash b/repos/libports/recipes/src/libusb/hash index cd5b2f9b93..e169eb5ba1 100644 --- a/repos/libports/recipes/src/libusb/hash +++ b/repos/libports/recipes/src/libusb/hash @@ -1 +1 @@ -2022-08-16 3c3c4371b5c3a4eccfb9bb8272f034b619bc1688 +2022-08-30 6e56b87d13cb56f41947e9118ba92b736ba9f073 diff --git a/repos/libports/recipes/src/libuvc/hash b/repos/libports/recipes/src/libuvc/hash index 1a3e44f2fe..119a139e0f 100644 --- a/repos/libports/recipes/src/libuvc/hash +++ b/repos/libports/recipes/src/libuvc/hash @@ -1 +1 @@ -2022-08-16 e17aebb77231675920fd9a90fd1828580317f265 +2022-08-30 0ca48139c9d7bf66a2433c35844d2cad0e32136f diff --git a/repos/libports/recipes/src/libyuv/hash b/repos/libports/recipes/src/libyuv/hash index 3d95456678..02269383ef 100644 --- a/repos/libports/recipes/src/libyuv/hash +++ b/repos/libports/recipes/src/libyuv/hash @@ -1 +1 @@ -2022-08-16 93f11a86cd5dbc4759716e8b134622c7d0088576 +2022-08-30 214b12c209675a3aae86d56bcd097424be869442 diff --git a/repos/libports/recipes/src/mesa/hash b/repos/libports/recipes/src/mesa/hash index 6a0bf7205f..0cd0ad66ce 100644 --- a/repos/libports/recipes/src/mesa/hash +++ b/repos/libports/recipes/src/mesa/hash @@ -1 +1 @@ -2022-08-16 60bfaa48119ec74b3791c7f7cc0947ecdbb80920 +2022-08-30 fb9a55a2ef72e7040ed05e95c6eeed7f4523aec0 diff --git a/repos/libports/recipes/src/mesa_gears/hash b/repos/libports/recipes/src/mesa_gears/hash index 3b29445af7..9cfc02b6ef 100644 --- a/repos/libports/recipes/src/mesa_gears/hash +++ b/repos/libports/recipes/src/mesa_gears/hash @@ -1 +1 @@ -2022-08-16 bc6bc75cb6d70e21c62e71981d138df911b1c261 +2022-08-30 8624fc2e9fdd83dee979d55f33a7545391ac90cd diff --git a/repos/libports/recipes/src/mupdf/hash b/repos/libports/recipes/src/mupdf/hash index 4148084589..75194fe153 100644 --- a/repos/libports/recipes/src/mupdf/hash +++ b/repos/libports/recipes/src/mupdf/hash @@ -1 +1 @@ -2022-08-16 c4df04540470f6b3918faf1bd36d33f615948f1f +2022-08-30 ed82461e0720286089dff87672e515706caaaf68 diff --git a/repos/libports/recipes/src/ncurses/hash b/repos/libports/recipes/src/ncurses/hash index be0cbb48f6..545edff86b 100644 --- a/repos/libports/recipes/src/ncurses/hash +++ b/repos/libports/recipes/src/ncurses/hash @@ -1 +1 @@ -2022-08-16 2fa9baa42169455bc7ec026d3c6c491ec9cc9ea2 +2022-08-30 90af827fa8627c7906232cbf64a99d960c7f7de9 diff --git a/repos/libports/recipes/src/openjpeg/hash b/repos/libports/recipes/src/openjpeg/hash index 3319239868..70bd47a6d3 100644 --- a/repos/libports/recipes/src/openjpeg/hash +++ b/repos/libports/recipes/src/openjpeg/hash @@ -1 +1 @@ -2022-08-16 89939d376f75f7bc71f9961c943e25dfc0e511f9 +2022-08-30 1c7b3d013679131ecea0bc73844b68929aef5aaa diff --git a/repos/libports/recipes/src/openssl/hash b/repos/libports/recipes/src/openssl/hash index 0588936587..1d8fa81242 100644 --- a/repos/libports/recipes/src/openssl/hash +++ b/repos/libports/recipes/src/openssl/hash @@ -1 +1 @@ -2022-08-16 2cd02e7e4b3b3c75c4f947d73beec78e92c1bf94 +2022-08-30 e7b37a0000bd69a05d8fc42757d8d0f37f2fcde8 diff --git a/repos/libports/recipes/src/pcre/hash b/repos/libports/recipes/src/pcre/hash index 117a356328..72ea8a003a 100644 --- a/repos/libports/recipes/src/pcre/hash +++ b/repos/libports/recipes/src/pcre/hash @@ -1 +1 @@ -2022-08-16 5b3bff0de05690c67bcb5cfe3aaa9111316adaba +2022-08-30 a152619b05946f449e41b9171889db8cd13f5422 diff --git a/repos/libports/recipes/src/pcre16/hash b/repos/libports/recipes/src/pcre16/hash index 934f9168dc..8ef40ff335 100644 --- a/repos/libports/recipes/src/pcre16/hash +++ b/repos/libports/recipes/src/pcre16/hash @@ -1 +1 @@ -2022-08-16 47bfd34ba18cbf0b94f686d45e6b40eb63afe8ce +2022-08-30 de72d6dcdf36ec84ff3890b27425a0c313a53bd1 diff --git a/repos/libports/recipes/src/pcsc-lite/hash b/repos/libports/recipes/src/pcsc-lite/hash index 8be667410b..de7c3ab9f7 100644 --- a/repos/libports/recipes/src/pcsc-lite/hash +++ b/repos/libports/recipes/src/pcsc-lite/hash @@ -1 +1 @@ -2022-06-20-h 540ad8c43f8a0643107072ae2cb7585f253dd37f +2022-08-30 1d1c5306f8b63d7906686e644e96a9c365980784 diff --git a/repos/libports/recipes/src/pdf_view/hash b/repos/libports/recipes/src/pdf_view/hash index 51ebd53f22..02a288b8ea 100644 --- a/repos/libports/recipes/src/pdf_view/hash +++ b/repos/libports/recipes/src/pdf_view/hash @@ -1 +1 @@ -2022-08-16 fb087789229691ffceead4be5413cd31cef405b7 +2022-08-30 a4cda35e3fdcda892f1f374214dab93e1e7559ac diff --git a/repos/libports/recipes/src/posix/hash b/repos/libports/recipes/src/posix/hash index 9cffeb21cc..a16a61db46 100644 --- a/repos/libports/recipes/src/posix/hash +++ b/repos/libports/recipes/src/posix/hash @@ -1 +1 @@ -2022-08-16 ca21abd11c066b560ba9b0f9df3ec007281fc5f6 +2022-08-30 b71f7c65086511e590d0d4ade5f7d11071aee9c9 diff --git a/repos/libports/recipes/src/qt5_base/hash b/repos/libports/recipes/src/qt5_base/hash index 0bd38f4112..e211054f36 100644 --- a/repos/libports/recipes/src/qt5_base/hash +++ b/repos/libports/recipes/src/qt5_base/hash @@ -1 +1 @@ -2022-08-16 36cb764828e6b4b5c6877d8659edec65b8b04616 +2022-08-30 97acf77739cf1f46e9e1b5b46aa6ac4305a990da diff --git a/repos/libports/recipes/src/qt5_calculatorform/hash b/repos/libports/recipes/src/qt5_calculatorform/hash index 16bcce49dd..9139a0d39e 100644 --- a/repos/libports/recipes/src/qt5_calculatorform/hash +++ b/repos/libports/recipes/src/qt5_calculatorform/hash @@ -1 +1 @@ -2022-08-16 fe89f9c772f0a64dba1d48ce11a7132b6d4e5229 +2022-08-30 b44671ee2b979fdc7836c7e7bae6399e207214ca diff --git a/repos/libports/recipes/src/qt5_component/hash b/repos/libports/recipes/src/qt5_component/hash index e09cdad4b1..1ba4a55604 100644 --- a/repos/libports/recipes/src/qt5_component/hash +++ b/repos/libports/recipes/src/qt5_component/hash @@ -1 +1 @@ -2022-08-16 e31f44321199230a4bac62dafee5b8c9eaa44afa +2022-08-30 88759aaa2ed5630abb70a19742b73aad2f2adf4c diff --git a/repos/libports/recipes/src/qt5_declarative/hash b/repos/libports/recipes/src/qt5_declarative/hash index c7d7b618e9..66a7f362ff 100644 --- a/repos/libports/recipes/src/qt5_declarative/hash +++ b/repos/libports/recipes/src/qt5_declarative/hash @@ -1 +1 @@ -2022-08-16 62b9016456a1d5c85e31bda82071f37b92110cc6 +2022-08-30 c7948c911c30080615997a4fb7d870a84e4ab6d2 diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/hash b/repos/libports/recipes/src/qt5_graphicaleffects/hash index 746e1240f6..53acb8fd53 100644 --- a/repos/libports/recipes/src/qt5_graphicaleffects/hash +++ b/repos/libports/recipes/src/qt5_graphicaleffects/hash @@ -1 +1 @@ -2022-08-16 d17f501807fb268301922567e6e11571a85761a3 +2022-08-30 b41fedefeb2407a2c0cf273d3375afe0341f186a diff --git a/repos/libports/recipes/src/qt5_launchpad/hash b/repos/libports/recipes/src/qt5_launchpad/hash index 63fb8340a8..c82b27e3ec 100644 --- a/repos/libports/recipes/src/qt5_launchpad/hash +++ b/repos/libports/recipes/src/qt5_launchpad/hash @@ -1 +1 @@ -2022-08-16 2c381edf042d9cf7fc65efa8f5eb785d477de074 +2022-08-30 a4c661ce43a480dd57e33663c247a19db0fb2da9 diff --git a/repos/libports/recipes/src/qt5_openglwindow/hash b/repos/libports/recipes/src/qt5_openglwindow/hash index dee000f2a1..bdc3974e9d 100644 --- a/repos/libports/recipes/src/qt5_openglwindow/hash +++ b/repos/libports/recipes/src/qt5_openglwindow/hash @@ -1 +1 @@ -2022-08-16 dd950218a30abbb525db158618d3ce9bfe19eb26 +2022-08-30 851f203cd6105315d2c2054183a8d9efcd3b43f8 diff --git a/repos/libports/recipes/src/qt5_quickcontrols/hash b/repos/libports/recipes/src/qt5_quickcontrols/hash index 4042263bf6..25b6fb8689 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols/hash +++ b/repos/libports/recipes/src/qt5_quickcontrols/hash @@ -1 +1 @@ -2022-08-16 4b9cb44bf4b599fe4fac52fba09cae11ef012c55 +2022-08-30 5830aa0d6e1b3dd218c8d3dd4dbcc3d11195f882 diff --git a/repos/libports/recipes/src/qt5_quickcontrols2/hash b/repos/libports/recipes/src/qt5_quickcontrols2/hash index 2bffa74568..d5c7d142e4 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols2/hash +++ b/repos/libports/recipes/src/qt5_quickcontrols2/hash @@ -1 +1 @@ -2022-08-16 95775db1433df80002a923e9d3db783f01f6507d +2022-08-30 ce2f270275698310a22df0cee8ac160b6456d865 diff --git a/repos/libports/recipes/src/qt5_samegame/hash b/repos/libports/recipes/src/qt5_samegame/hash index 7ff687097b..64e481575e 100644 --- a/repos/libports/recipes/src/qt5_samegame/hash +++ b/repos/libports/recipes/src/qt5_samegame/hash @@ -1 +1 @@ -2022-08-16 de300edb071c90519b48c3474d82ea7b0fabd0a4 +2022-08-30 b9eceb7e1abf3b4ff2c8c510e237720e9ab6dfed diff --git a/repos/libports/recipes/src/qt5_svg/hash b/repos/libports/recipes/src/qt5_svg/hash index af75bbbdfd..33f402ab43 100644 --- a/repos/libports/recipes/src/qt5_svg/hash +++ b/repos/libports/recipes/src/qt5_svg/hash @@ -1 +1 @@ -2022-08-16 01979b970052776ab53910a025ccf2b8c5e444bf +2022-08-30 897a055ee195409f9e1e3e114b4b6f2d13ef1f12 diff --git a/repos/libports/recipes/src/qt5_testqstring/hash b/repos/libports/recipes/src/qt5_testqstring/hash index 1db57db063..ab5c83dd6e 100644 --- a/repos/libports/recipes/src/qt5_testqstring/hash +++ b/repos/libports/recipes/src/qt5_testqstring/hash @@ -1 +1 @@ -2022-08-16 96b66ab798133d6ed784123cb5c693b275268fb0 +2022-08-30 33e6402a6faa06b35c92afc9342315093b201225 diff --git a/repos/libports/recipes/src/qt5_tetrix/hash b/repos/libports/recipes/src/qt5_tetrix/hash index 5c3a7e601c..68b3dfc984 100644 --- a/repos/libports/recipes/src/qt5_tetrix/hash +++ b/repos/libports/recipes/src/qt5_tetrix/hash @@ -1 +1 @@ -2022-08-16 b8f4c2d2212a105ac4e2cf20130bdc8c6a214bbe +2022-08-30 cc1350a99df2aab2e7e17ffbb7d67314fce2fc84 diff --git a/repos/libports/recipes/src/qt5_textedit/hash b/repos/libports/recipes/src/qt5_textedit/hash index a3461006da..b19245a587 100644 --- a/repos/libports/recipes/src/qt5_textedit/hash +++ b/repos/libports/recipes/src/qt5_textedit/hash @@ -1 +1 @@ -2022-08-16 673191f8f65dc1c8378841f760b43ccf79de2a15 +2022-08-30 d6d0a086cd494b22d8cf2a7e05aeeb73060b09a0 diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard/hash b/repos/libports/recipes/src/qt5_virtualkeyboard/hash index 71854d156c..9dc5b4ef67 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard/hash +++ b/repos/libports/recipes/src/qt5_virtualkeyboard/hash @@ -1 +1 @@ -2022-08-16 551d08e2688cb9bb842bab91af23df0bf5d328fd +2022-08-30 8fdf9279aba854dba759c31cfca3b85662e01d5c diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash b/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash index b5a0f94aee..cc2a907ad9 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash +++ b/repos/libports/recipes/src/qt5_virtualkeyboard_example/hash @@ -1 +1 @@ -2022-08-16 c1631dcbac2322e8247598e98aa005279621115c +2022-08-30 10a0c02f2d5e8cd608332d2a80bcd7d32627b098 diff --git a/repos/libports/recipes/src/sanitizer/hash b/repos/libports/recipes/src/sanitizer/hash index 30e7d33557..d84a438e7e 100644 --- a/repos/libports/recipes/src/sanitizer/hash +++ b/repos/libports/recipes/src/sanitizer/hash @@ -1 +1 @@ -2022-08-16 12e4c3c4a4d12eb9fb88ebba3c912582d85a4b52 +2022-08-30 2d84ab57188e34ae16291422e8febd95438adbe8 diff --git a/repos/libports/recipes/src/spark/hash b/repos/libports/recipes/src/spark/hash index b9b2ac5f7b..a840759a43 100644 --- a/repos/libports/recipes/src/spark/hash +++ b/repos/libports/recipes/src/spark/hash @@ -1 +1 @@ -2022-08-16 5efc177f870a99ef4cbc90c8e3d326989d7a1fcd +2022-08-30 7abf757493fa381dfa5032197edc5cd98f3bf3fd diff --git a/repos/libports/recipes/src/stdcxx/hash b/repos/libports/recipes/src/stdcxx/hash index e5b3e2004d..302588d4eb 100644 --- a/repos/libports/recipes/src/stdcxx/hash +++ b/repos/libports/recipes/src/stdcxx/hash @@ -1 +1 @@ -2022-08-16 8e20af71e6d06449954086df241ce526cc41d9f2 +2022-08-30 5d3f749aec25b0ca2ce5fd68aaffc73ed5729ef4 diff --git a/repos/libports/recipes/src/stdin2out/hash b/repos/libports/recipes/src/stdin2out/hash index 0fcfdfd861..b95205be2d 100644 --- a/repos/libports/recipes/src/stdin2out/hash +++ b/repos/libports/recipes/src/stdin2out/hash @@ -1 +1 @@ -2022-08-16 ebd7dfb8c37ff8b304e25ada1e94630b14df278c +2022-08-30 8618b5f910007d008cdf1db4ac5ad610046ffc69 diff --git a/repos/libports/recipes/src/system_rtc/hash b/repos/libports/recipes/src/system_rtc/hash index 9f70221328..e984fb283e 100644 --- a/repos/libports/recipes/src/system_rtc/hash +++ b/repos/libports/recipes/src/system_rtc/hash @@ -1 +1 @@ -2022-08-16 ad7d3a6d2dce135eaa18f89f9aa37c3412d428f1 +2022-08-30 0b6ac0e4e87cd7bc4d804ae562f2f6e03bb02d85 diff --git a/repos/libports/recipes/src/test-expat/hash b/repos/libports/recipes/src/test-expat/hash index 8e356bb0a0..a58e610bb7 100644 --- a/repos/libports/recipes/src/test-expat/hash +++ b/repos/libports/recipes/src/test-expat/hash @@ -1 +1 @@ -2022-08-16 687cfa36eaa05787829045b7828244d5182e03b2 +2022-08-30 8a68248e61658d6b0d00324138a165fcc8ecde36 diff --git a/repos/libports/recipes/src/test-ldso/hash b/repos/libports/recipes/src/test-ldso/hash index 405a852157..6bbe8b326b 100644 --- a/repos/libports/recipes/src/test-ldso/hash +++ b/repos/libports/recipes/src/test-ldso/hash @@ -1 +1 @@ -2022-08-16 822c3c7338d907a02348f90e13e1bed4141e1ea0 +2022-08-30 68334fcad9fcbb0f93bd90013ad8768066a400ff diff --git a/repos/libports/recipes/src/test-libc/hash b/repos/libports/recipes/src/test-libc/hash index cddb798736..48daa3e773 100644 --- a/repos/libports/recipes/src/test-libc/hash +++ b/repos/libports/recipes/src/test-libc/hash @@ -1 +1 @@ -2022-08-16 4b9c2ec4c56c769604d56f9dffa0a1f3f885dd22 +2022-08-30 b0c6ff465b1430d7b66c27cb59e2ccf20086bdcc diff --git a/repos/libports/recipes/src/test-libc_connect/hash b/repos/libports/recipes/src/test-libc_connect/hash index 25104be118..b3c042b80d 100644 --- a/repos/libports/recipes/src/test-libc_connect/hash +++ b/repos/libports/recipes/src/test-libc_connect/hash @@ -1 +1 @@ -2022-08-16 681bde68b18c74e623697fe9d22b9d02d8d070f3 +2022-08-30 721aade6ef3918b7f1678a888dd0e246ce613f6c diff --git a/repos/libports/recipes/src/test-libc_counter/hash b/repos/libports/recipes/src/test-libc_counter/hash index d826bd2959..6b24a1fc80 100644 --- a/repos/libports/recipes/src/test-libc_counter/hash +++ b/repos/libports/recipes/src/test-libc_counter/hash @@ -1 +1 @@ -2022-08-16 57911f4da294070639606fd5d51b3a4f550da9aa +2022-08-30 fc3eb0626f9158e4d16960cad5508f41c84852cd diff --git a/repos/libports/recipes/src/test-libc_execve/hash b/repos/libports/recipes/src/test-libc_execve/hash index 4dd9e9f85b..beea9bf5a3 100644 --- a/repos/libports/recipes/src/test-libc_execve/hash +++ b/repos/libports/recipes/src/test-libc_execve/hash @@ -1 +1 @@ -2022-08-16 e0181a465ad8dfd56321f7002e898507fea07bc1 +2022-08-30 604a34bd18457ad5f82c82a1e7c0d12104983c34 diff --git a/repos/libports/recipes/src/test-libc_fifo_pipe/hash b/repos/libports/recipes/src/test-libc_fifo_pipe/hash index 468fc85ff8..62654122f2 100644 --- a/repos/libports/recipes/src/test-libc_fifo_pipe/hash +++ b/repos/libports/recipes/src/test-libc_fifo_pipe/hash @@ -1 +1 @@ -2022-08-16 f1f1753d30ec4cb01e73d7117b7e2ca58353aa08 +2022-08-30 26ce138988e559dee07aea386572090bb5f2024d diff --git a/repos/libports/recipes/src/test-libc_fork/hash b/repos/libports/recipes/src/test-libc_fork/hash index 65a903f544..7bc56ed945 100644 --- a/repos/libports/recipes/src/test-libc_fork/hash +++ b/repos/libports/recipes/src/test-libc_fork/hash @@ -1 +1 @@ -2022-08-16 f4a59431aaea4ce42ed8a427ccebe83b5f9c41b4 +2022-08-30 2f935eefc09c791fcf107c932145ac47e8d256d8 diff --git a/repos/libports/recipes/src/test-libc_getenv/hash b/repos/libports/recipes/src/test-libc_getenv/hash index 60f80d4e16..ca372b6f05 100644 --- a/repos/libports/recipes/src/test-libc_getenv/hash +++ b/repos/libports/recipes/src/test-libc_getenv/hash @@ -1 +1 @@ -2022-08-16 001bb8d4305398510187a112bd48213c442904f4 +2022-08-30 1309024893b556cf4ef8c8cb1bec807cf90ab136 diff --git a/repos/libports/recipes/src/test-libc_pipe/hash b/repos/libports/recipes/src/test-libc_pipe/hash index da698304e0..559d2280ca 100644 --- a/repos/libports/recipes/src/test-libc_pipe/hash +++ b/repos/libports/recipes/src/test-libc_pipe/hash @@ -1 +1 @@ -2022-08-16 e5ec1408a7f822244a731ba1f22d39e43d298f56 +2022-08-30 6b40102c373fd2055891a034e0cce4bf719ba21b diff --git a/repos/libports/recipes/src/test-libc_vfs/hash b/repos/libports/recipes/src/test-libc_vfs/hash index 97c5a5e736..6ec08097ae 100644 --- a/repos/libports/recipes/src/test-libc_vfs/hash +++ b/repos/libports/recipes/src/test-libc_vfs/hash @@ -1 +1 @@ -2022-08-16 5fe8f18e2ac27a51b44984155fe514f549d196b2 +2022-08-30 6a64bbc89399e6b6f77de93d1ef9a9bb4486ec00 diff --git a/repos/libports/recipes/src/test-libc_vfs_block/hash b/repos/libports/recipes/src/test-libc_vfs_block/hash index 4707cb4748..18530a57e2 100644 --- a/repos/libports/recipes/src/test-libc_vfs_block/hash +++ b/repos/libports/recipes/src/test-libc_vfs_block/hash @@ -1 +1 @@ -2022-08-16 ae2efb9055043ed42a688b53607cf30107b4b138 +2022-08-30 1a19bb6fcb1146fdb0a57e3bc0ed0a42ebc686a8 diff --git a/repos/libports/recipes/src/test-netty/hash b/repos/libports/recipes/src/test-netty/hash index ada0b9278f..605b45645c 100644 --- a/repos/libports/recipes/src/test-netty/hash +++ b/repos/libports/recipes/src/test-netty/hash @@ -1 +1 @@ -2022-08-16 89962a879ef4f566069b027613cee29d697714a4 +2022-08-30 c56e6744ccd071000455ca64dea482c88a24bfda diff --git a/repos/libports/recipes/src/test-pthread/hash b/repos/libports/recipes/src/test-pthread/hash index d03de07441..1c9df4c8c2 100644 --- a/repos/libports/recipes/src/test-pthread/hash +++ b/repos/libports/recipes/src/test-pthread/hash @@ -1 +1 @@ -2022-08-16 38b908a0d23ab41e09f4445136f9b52880be5d31 +2022-08-30 f481c6de3acdbb92559888064c862bef5ae239b0 diff --git a/repos/libports/recipes/src/test-qpluginwidget/hash b/repos/libports/recipes/src/test-qpluginwidget/hash index b6014f779f..0110c5addc 100644 --- a/repos/libports/recipes/src/test-qpluginwidget/hash +++ b/repos/libports/recipes/src/test-qpluginwidget/hash @@ -1 +1 @@ -2022-08-16 370167a520904a33aaec1b263d16473ee80a62a1 +2022-08-30 c5471327fbb9478b5005ca9e111d914c2b06ecb4 diff --git a/repos/libports/recipes/src/test-qt_core/hash b/repos/libports/recipes/src/test-qt_core/hash index 7035e4570b..67739c2d19 100644 --- a/repos/libports/recipes/src/test-qt_core/hash +++ b/repos/libports/recipes/src/test-qt_core/hash @@ -1 +1 @@ -2022-08-16 e0b187c1a73961ae91eaecd6f3dbc448f838efac +2022-08-30 e2c7f2e03c87f975a2bbd5237258d3b7c8669b74 diff --git a/repos/libports/recipes/src/test-qt_core_cmake/hash b/repos/libports/recipes/src/test-qt_core_cmake/hash index 032a479468..237d5a9ea9 100644 --- a/repos/libports/recipes/src/test-qt_core_cmake/hash +++ b/repos/libports/recipes/src/test-qt_core_cmake/hash @@ -1 +1 @@ -2022-08-16 a75efcda1790c7664c2fef8a1b4f93e4acb55917 +2022-08-30 9c6c12ef146561485ddf030a3e6627ed92145742 diff --git a/repos/libports/recipes/src/test-qt_quick/hash b/repos/libports/recipes/src/test-qt_quick/hash index a54a098e5e..0028c06d1f 100644 --- a/repos/libports/recipes/src/test-qt_quick/hash +++ b/repos/libports/recipes/src/test-qt_quick/hash @@ -1 +1 @@ -2022-08-16 a4bf948a6f01e6a0116b67badbd9f32f856d265d +2022-08-30 dd31841c322eb2117674fc19aab62f92ad0b2a12 diff --git a/repos/libports/recipes/src/test-spark/hash b/repos/libports/recipes/src/test-spark/hash index aaaf1aa021..f03b4a56b4 100644 --- a/repos/libports/recipes/src/test-spark/hash +++ b/repos/libports/recipes/src/test-spark/hash @@ -1 +1 @@ -2022-08-16 c84bfb738b260ea37203ee07e2e579f847f76f2a +2022-08-30 2cb577a1c1e7dd1db8dbf22b6c31449dd99fe565 diff --git a/repos/libports/recipes/src/test-spark_exception/hash b/repos/libports/recipes/src/test-spark_exception/hash index 027e6a8220..fad74c7eb5 100644 --- a/repos/libports/recipes/src/test-spark_exception/hash +++ b/repos/libports/recipes/src/test-spark_exception/hash @@ -1 +1 @@ -2022-08-16 44eaad47bfbbb8e910e9d3b5c639da7b8845959a +2022-08-30 a44a0b74da6816e5e078f10feb4efdb101b2c177 diff --git a/repos/libports/recipes/src/test-spark_secondary_stack/hash b/repos/libports/recipes/src/test-spark_secondary_stack/hash index 63b55eb17f..f076cef121 100644 --- a/repos/libports/recipes/src/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/src/test-spark_secondary_stack/hash @@ -1 +1 @@ -2022-08-16 a171d04c56313751d54964f31dbaa7893ed5dd1f +2022-08-30 23661f5a53e44bd011fc61c0acc27b7f447dac1d diff --git a/repos/libports/recipes/src/test-stdcxx/hash b/repos/libports/recipes/src/test-stdcxx/hash index 30cf70aada..44c0675381 100644 --- a/repos/libports/recipes/src/test-stdcxx/hash +++ b/repos/libports/recipes/src/test-stdcxx/hash @@ -1 +1 @@ -2022-08-16 a5a898e72f5769bc94fb2ee20f85b53ad38f9689 +2022-08-30 635de877f0b8942d45ecf0939ddcfb7b0708c928 diff --git a/repos/libports/recipes/src/test-tcp/hash b/repos/libports/recipes/src/test-tcp/hash index daaaf87d87..41e4b0f24f 100644 --- a/repos/libports/recipes/src/test-tcp/hash +++ b/repos/libports/recipes/src/test-tcp/hash @@ -1 +1 @@ -2022-08-16 f2ed39f95161a305133fbee9bb307cd15738209c +2022-08-30 129a83702c5f94cd17ca33f37276becc5e17e09a diff --git a/repos/libports/recipes/src/usb_webcam/hash b/repos/libports/recipes/src/usb_webcam/hash index 1beaacde2d..ae74dc6c09 100644 --- a/repos/libports/recipes/src/usb_webcam/hash +++ b/repos/libports/recipes/src/usb_webcam/hash @@ -1 +1 @@ -2022-08-16 2f324b01a4e8560b68d06d061e17306e994da369 +2022-08-30 f5579f6c9b33e33cb4eeaf502c29c79018b321da diff --git a/repos/libports/recipes/src/vesa_drv/hash b/repos/libports/recipes/src/vesa_drv/hash index 84990a1ccf..ba82b58c6d 100644 --- a/repos/libports/recipes/src/vesa_drv/hash +++ b/repos/libports/recipes/src/vesa_drv/hash @@ -1 +1 @@ -2022-08-16 7ef74141f0ccac532f7ff7780b88abd4c7214e5d +2022-08-30 5eea2e26dd5461b3f8b45fa28e3085e3e94dcf73 diff --git a/repos/libports/recipes/src/vfs_fatfs/hash b/repos/libports/recipes/src/vfs_fatfs/hash index 4b7c9e5a9b..00dd43249d 100644 --- a/repos/libports/recipes/src/vfs_fatfs/hash +++ b/repos/libports/recipes/src/vfs_fatfs/hash @@ -1 +1 @@ -2022-08-16 5e19bfd7bf3d1d678ad255f14674432b5b9cb0ac +2022-08-30 0d06c8d282135f1163ef5c68117880d9dd3fe49f diff --git a/repos/libports/recipes/src/vfs_jitterentropy/hash b/repos/libports/recipes/src/vfs_jitterentropy/hash index 7e95cecb6a..d3189c95c5 100644 --- a/repos/libports/recipes/src/vfs_jitterentropy/hash +++ b/repos/libports/recipes/src/vfs_jitterentropy/hash @@ -1 +1 @@ -2022-08-16 d9c28217c016c4f479e65238a221e9bd2104a845 +2022-08-30 997afc858ed63ca8bbdda1aee9af80d158b9a0ae diff --git a/repos/libports/recipes/src/vfs_libusb/hash b/repos/libports/recipes/src/vfs_libusb/hash index c9cbcde4f7..13f89f483c 100644 --- a/repos/libports/recipes/src/vfs_libusb/hash +++ b/repos/libports/recipes/src/vfs_libusb/hash @@ -1 +1 @@ -2022-08-16 f96db9cd008c25088dee865a19d3245ea7248112 +2022-08-30 06fb434372ea8bc3bf0001d4d0bfbc116cd496f5 diff --git a/repos/libports/recipes/src/vfs_lwip/hash b/repos/libports/recipes/src/vfs_lwip/hash index 2df4afdf1b..8d77e093c6 100644 --- a/repos/libports/recipes/src/vfs_lwip/hash +++ b/repos/libports/recipes/src/vfs_lwip/hash @@ -1 +1 @@ -2022-08-16 87d708914c72383e225b7aba673be56a87c0ced2 +2022-08-30 3f41ebbb81c1d1364ae641e6c2cdbb7069a79eb2 diff --git a/repos/libports/recipes/src/vfs_oss/hash b/repos/libports/recipes/src/vfs_oss/hash index f0b960afc4..1399b3c077 100644 --- a/repos/libports/recipes/src/vfs_oss/hash +++ b/repos/libports/recipes/src/vfs_oss/hash @@ -1 +1 @@ -2022-08-16 c24f940edf785ad79bc87d9c61a1b724d8813bca +2022-08-30 ad08565315d6d8295fbfdd3221b4fde2019dd958 diff --git a/repos/libports/recipes/src/zlib/hash b/repos/libports/recipes/src/zlib/hash index 5525070491..0fc9aa04d7 100644 --- a/repos/libports/recipes/src/zlib/hash +++ b/repos/libports/recipes/src/zlib/hash @@ -1 +1 @@ -2022-08-16 b6ececfccbf793acd040509871c1166eabb363dc +2022-08-30 e97c1e2c15d171a81106d9f5e3bfd58223b9ad82 diff --git a/repos/os/recipes/api/net/hash b/repos/os/recipes/api/net/hash index d0a62a0b00..6e73ce7019 100644 --- a/repos/os/recipes/api/net/hash +++ b/repos/os/recipes/api/net/hash @@ -1 +1 @@ -2022-08-16 ef8ef67e6d5ca0db31abfa3d2a815842e1f16dfb +2022-08-30 d6e71a51b30307e79c9bb6fbc086d2d8b2fd6cd4 diff --git a/repos/os/recipes/api/nic_session/hash b/repos/os/recipes/api/nic_session/hash index c507430f35..2a21572f1c 100644 --- a/repos/os/recipes/api/nic_session/hash +++ b/repos/os/recipes/api/nic_session/hash @@ -1 +1 @@ -2022-08-16 8465728d333f42b86f59ec2749007bf7245da35e +2022-08-30 e1de77019b959b55c45ac857cdc136796e59774c diff --git a/repos/os/recipes/api/os/hash b/repos/os/recipes/api/os/hash index c0487e35d0..1654e23869 100644 --- a/repos/os/recipes/api/os/hash +++ b/repos/os/recipes/api/os/hash @@ -1 +1 @@ -2022-08-16 8aa82e1c69f429262c750bcb49f0546c4a1eee72 +2022-08-30 1e58f17f870aae78de902e28bbc0d333b7ed90f3 diff --git a/repos/os/recipes/api/uplink_session/hash b/repos/os/recipes/api/uplink_session/hash index 28f857d83c..7e6e0348f6 100644 --- a/repos/os/recipes/api/uplink_session/hash +++ b/repos/os/recipes/api/uplink_session/hash @@ -1 +1 @@ -2022-08-16 7841d4e142bd63daeaafd7d2b7456acd6b0c120c +2022-08-30 9b11856ee11375c27b0b647e67bf8797c25369e8 diff --git a/repos/os/recipes/api/usb_session/hash b/repos/os/recipes/api/usb_session/hash index 92974f6912..396423c23a 100644 --- a/repos/os/recipes/api/usb_session/hash +++ b/repos/os/recipes/api/usb_session/hash @@ -1 +1 @@ -2022-04-12 b3aee50282918f3b8e28218ecce8fb94fc71802c +2022-08-30 63fbe4de4dc753a71f69abcc1079393284e11fee diff --git a/repos/os/recipes/pkg/black_hole/hash b/repos/os/recipes/pkg/black_hole/hash index 390e2a99d5..17b7761ec1 100644 --- a/repos/os/recipes/pkg/black_hole/hash +++ b/repos/os/recipes/pkg/black_hole/hash @@ -1 +1 @@ -2022-08-16 38f8db524213d5913b198af5471536019af2ed4b +2022-08-30 548e66d71b20908005b91ed89e1032f08ac54005 diff --git a/repos/os/recipes/pkg/chroot/hash b/repos/os/recipes/pkg/chroot/hash index d957452135..7bfea43e5a 100644 --- a/repos/os/recipes/pkg/chroot/hash +++ b/repos/os/recipes/pkg/chroot/hash @@ -1 +1 @@ -2022-08-16 42ee18cf5e542e9ff22ef7f6e8d2f648e0a5c3c5 +2022-08-30 150b1c4195d94b46af7fc924af0a8d058a6e3844 diff --git a/repos/os/recipes/pkg/clipboard/hash b/repos/os/recipes/pkg/clipboard/hash index 91db1ee551..83b0290d59 100644 --- a/repos/os/recipes/pkg/clipboard/hash +++ b/repos/os/recipes/pkg/clipboard/hash @@ -1 +1 @@ -2022-08-16 e36a42d0b3f34a973822ebb48e997e2270ebefb9 +2022-08-30 57239da39b1739f60da365790e25895d9d6dedbf diff --git a/repos/os/recipes/pkg/cpu_balancer/hash b/repos/os/recipes/pkg/cpu_balancer/hash index 3b1531994e..39c54a2858 100644 --- a/repos/os/recipes/pkg/cpu_balancer/hash +++ b/repos/os/recipes/pkg/cpu_balancer/hash @@ -1 +1 @@ -2022-08-16 c032448812633cea24224a47273e21270991b036 +2022-08-30 cf53467ed5a16c7c3f3d1708e61e8c302b7d7f87 diff --git a/repos/os/recipes/pkg/cpu_balancer_config/hash b/repos/os/recipes/pkg/cpu_balancer_config/hash index aeaf41c0c6..4e05fc1219 100644 --- a/repos/os/recipes/pkg/cpu_balancer_config/hash +++ b/repos/os/recipes/pkg/cpu_balancer_config/hash @@ -1 +1 @@ -2022-08-16 55f3b7fcf490020ca6feaf6bcb790fa9bcafbb0b +2022-08-30 1def3725d1741270644259aaace26cdeb6dbca90 diff --git a/repos/os/recipes/pkg/drivers_interactive-linux/hash b/repos/os/recipes/pkg/drivers_interactive-linux/hash index 23ebb9a56d..27038028e8 100644 --- a/repos/os/recipes/pkg/drivers_interactive-linux/hash +++ b/repos/os/recipes/pkg/drivers_interactive-linux/hash @@ -1 +1 @@ -2022-08-16 9ca80b3afe893d7d10e4ad6f0233d1bb2e4d04ee +2022-08-30 5e013219f8d7cb146125ed78383a0a31353b9bac diff --git a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash index 6d3e3a66cf..ecb33cfde6 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash @@ -1 +1 @@ -2022-08-16 0fed85c08a1407356244ca3c9e36ffae3ea3aeac +2022-08-30 701468b62b23b28466b06a224c2191580d838936 diff --git a/repos/os/recipes/pkg/drivers_interactive-pc/hash b/repos/os/recipes/pkg/drivers_interactive-pc/hash index 4b9fe8b4aa..0a6a05b364 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pc/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pc/hash @@ -1 +1 @@ -2022-08-16 b6051c2d0341ad6e7653ba31bc5ff479af19d37f +2022-08-30 6147b5578f090cd437d61c37a936337d573ee7be diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash index 00ea681e11..c58738d65e 100644 --- a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-08-16 483e28de10c970aa7e7e0d20f573cf7436b5a8e7 +2022-08-30 73de7c0e6c168458950433dda0b7769e47b610f4 diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash index 00ea681e11..c58738d65e 100644 --- a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-16 483e28de10c970aa7e7e0d20f573cf7436b5a8e7 +2022-08-30 73de7c0e6c168458950433dda0b7769e47b610f4 diff --git a/repos/os/recipes/pkg/drivers_nic-linux/hash b/repos/os/recipes/pkg/drivers_nic-linux/hash index 08a5f8f33b..0bfaf28fce 100644 --- a/repos/os/recipes/pkg/drivers_nic-linux/hash +++ b/repos/os/recipes/pkg/drivers_nic-linux/hash @@ -1 +1 @@ -2022-08-16 e25f51bc1242a2543017df1838409722bd9d251f +2022-08-30 f4df611982fe98291104d6e2571fe9ecef61e54d diff --git a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash index 943c455461..1c0f3b1e62 100644 --- a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash @@ -1 +1 @@ -2022-08-16 5be8771ae5342bb6b9d39f73d0943e16558a5d42 +2022-08-30 f94b3d89290a8bae10e003b76c686f1e791b9cd0 diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash index 93435774b0..486e8fa78b 100644 --- a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-08-16 52013100789cd9cf5c2744959bb97e6c75b60e29 +2022-08-30 a3ed8ada481156406f89cc25e36408aa3491767a diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash index 93435774b0..486e8fa78b 100644 --- a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-16 52013100789cd9cf5c2744959bb97e6c75b60e29 +2022-08-30 a3ed8ada481156406f89cc25e36408aa3491767a diff --git a/repos/os/recipes/pkg/fs_report/hash b/repos/os/recipes/pkg/fs_report/hash index 6aafb558df..a34e58c799 100644 --- a/repos/os/recipes/pkg/fs_report/hash +++ b/repos/os/recipes/pkg/fs_report/hash @@ -1 +1 @@ -2022-08-16 cc007db4cde48d0a7d965bc012cb479591da849d +2022-08-30 2d37ef00f08439d11b5166e75c6c6455e4131f9d diff --git a/repos/os/recipes/pkg/fs_rom/hash b/repos/os/recipes/pkg/fs_rom/hash index d18b24d816..0b6d62561a 100644 --- a/repos/os/recipes/pkg/fs_rom/hash +++ b/repos/os/recipes/pkg/fs_rom/hash @@ -1 +1 @@ -2022-08-16 47abd7c670b38f10668ecf7958bf3e0bf6ccc4e6 +2022-08-30 acb5af3f7ec9fc41b3cfcfda50191dea3cb5fb0c diff --git a/repos/os/recipes/pkg/mixer/hash b/repos/os/recipes/pkg/mixer/hash index 8c2a376781..dc3bf62cc6 100644 --- a/repos/os/recipes/pkg/mixer/hash +++ b/repos/os/recipes/pkg/mixer/hash @@ -1 +1 @@ -2022-08-16 11745438ba740f8e8566cefdb648772ef67a94b5 +2022-08-30 7a1224d3bb055c28e1a140540b39a988f49d196a diff --git a/repos/os/recipes/pkg/nic_router-nat/hash b/repos/os/recipes/pkg/nic_router-nat/hash index 7f2418846c..776a631a89 100644 --- a/repos/os/recipes/pkg/nic_router-nat/hash +++ b/repos/os/recipes/pkg/nic_router-nat/hash @@ -1 +1 @@ -2022-08-16 1f9de42b8ef6973d2fae80b0351e567a741a02b4 +2022-08-30 07790a1879694e66e2f21fe4a2add1a3d006b775 diff --git a/repos/os/recipes/pkg/nit_focus/hash b/repos/os/recipes/pkg/nit_focus/hash index dc2d8fd9c9..35994c5b30 100644 --- a/repos/os/recipes/pkg/nit_focus/hash +++ b/repos/os/recipes/pkg/nit_focus/hash @@ -1 +1 @@ -2022-08-16 cc26b4b1c6142a10782554bad8b1ffef7f55a61d +2022-08-30 22e3376c01622f0bc4b0c18bc88f7ef098fdaeb8 diff --git a/repos/os/recipes/pkg/part_block/hash b/repos/os/recipes/pkg/part_block/hash index 7cb5f8f11d..bdc853fa02 100644 --- a/repos/os/recipes/pkg/part_block/hash +++ b/repos/os/recipes/pkg/part_block/hash @@ -1 +1 @@ -2022-08-22 6d984857ee1cecfe0fa5bd601c2cc7276799f84d +2022-08-30 e94476faeb204b4ae0b5a40c80796f40c1f51a37 diff --git a/repos/os/recipes/pkg/recall_fs/hash b/repos/os/recipes/pkg/recall_fs/hash index 34a3d86bdc..5894e5bd3d 100644 --- a/repos/os/recipes/pkg/recall_fs/hash +++ b/repos/os/recipes/pkg/recall_fs/hash @@ -1 +1 @@ -2022-08-16 4fa273ac94efa380069223ba91b2200e2f70634d +2022-08-30 f633555eb143c1afa7be73541e58e2f069dbcd27 diff --git a/repos/os/recipes/pkg/report_rom/hash b/repos/os/recipes/pkg/report_rom/hash index a5ffa973d9..c17b32e452 100644 --- a/repos/os/recipes/pkg/report_rom/hash +++ b/repos/os/recipes/pkg/report_rom/hash @@ -1 +1 @@ -2022-08-16 58a1bb758ff5f161c2d7d695ddba380747d2153f +2022-08-30 b659825f24d7db513201ff684b36aefa22cdec35 diff --git a/repos/os/recipes/pkg/rom_filter/hash b/repos/os/recipes/pkg/rom_filter/hash index 35f3b9da09..c0e0768162 100644 --- a/repos/os/recipes/pkg/rom_filter/hash +++ b/repos/os/recipes/pkg/rom_filter/hash @@ -1 +1 @@ -2022-08-16 b4f4f52a5127adadb8c40a21db3a0d2a8bdfdb42 +2022-08-30 dd635a44173172f4d9960223f1214bc03c907e87 diff --git a/repos/os/recipes/pkg/rom_reporter/hash b/repos/os/recipes/pkg/rom_reporter/hash index 7b3aaa52bd..3a8145464c 100644 --- a/repos/os/recipes/pkg/rom_reporter/hash +++ b/repos/os/recipes/pkg/rom_reporter/hash @@ -1 +1 @@ -2022-08-16 92483b6a9db6adbd3c8eb3306cd8c228c3a65174 +2022-08-30 932d472ac644a1e341697ba1b0b639c8fc5b38e9 diff --git a/repos/os/recipes/pkg/test-black_hole/hash b/repos/os/recipes/pkg/test-black_hole/hash index 5953114ede..d5878e3312 100644 --- a/repos/os/recipes/pkg/test-black_hole/hash +++ b/repos/os/recipes/pkg/test-black_hole/hash @@ -1 +1 @@ -2022-08-16 ee6181cba45546445e2ddd745fab40420ae8d096 +2022-08-30 6888ed9940fb82cb5693dbf7b2bcf3ecc7622e40 diff --git a/repos/os/recipes/pkg/test-capture/hash b/repos/os/recipes/pkg/test-capture/hash index a097995d5d..0bdb1e20f1 100644 --- a/repos/os/recipes/pkg/test-capture/hash +++ b/repos/os/recipes/pkg/test-capture/hash @@ -1 +1 @@ -2022-08-16 094705ba583706cad658a6650bfb00b0bb899e2f +2022-08-30 47071e641c27480d5d290453a234b3599c67047f diff --git a/repos/os/recipes/pkg/test-clipboard/hash b/repos/os/recipes/pkg/test-clipboard/hash index c9e7cae716..01d7d830bc 100644 --- a/repos/os/recipes/pkg/test-clipboard/hash +++ b/repos/os/recipes/pkg/test-clipboard/hash @@ -1 +1 @@ -2022-08-16 26df5c05d2cc2d547e5e5fc79202ebc547eae47a +2022-08-30 065f96fd6055ad919b20355726943040dadd6451 diff --git a/repos/os/recipes/pkg/test-dynamic_config/hash b/repos/os/recipes/pkg/test-dynamic_config/hash index a34263b80b..cba06599a1 100644 --- a/repos/os/recipes/pkg/test-dynamic_config/hash +++ b/repos/os/recipes/pkg/test-dynamic_config/hash @@ -1 +1 @@ -2022-08-16 912e0d3e6126d92341640d0f6fbd46e6d599a29b +2022-08-30 cd65a467e75ddc386fdee00d0e4ff8feaac0df66 diff --git a/repos/os/recipes/pkg/test-dynamic_config_loader/hash b/repos/os/recipes/pkg/test-dynamic_config_loader/hash index 115f51d7c8..9529a18c51 100644 --- a/repos/os/recipes/pkg/test-dynamic_config_loader/hash +++ b/repos/os/recipes/pkg/test-dynamic_config_loader/hash @@ -1 +1 @@ -2022-08-16 bccd2112b07493369d81fdcd92a798442be87502 +2022-08-30 fa57bdc85788c2b2c5284886b3e3cc555a6cf504 diff --git a/repos/os/recipes/pkg/test-fault_detection/hash b/repos/os/recipes/pkg/test-fault_detection/hash index 410e0596a0..44e3271bfc 100644 --- a/repos/os/recipes/pkg/test-fault_detection/hash +++ b/repos/os/recipes/pkg/test-fault_detection/hash @@ -1 +1 @@ -2022-08-16 50ae8bcb5ca46451d346f22257d816b301bee6b7 +2022-08-30 73117b6900bdd2d027c7e3b20b6373007ef96db1 diff --git a/repos/os/recipes/pkg/test-fs_packet/hash b/repos/os/recipes/pkg/test-fs_packet/hash index 59958306b2..408496b235 100644 --- a/repos/os/recipes/pkg/test-fs_packet/hash +++ b/repos/os/recipes/pkg/test-fs_packet/hash @@ -1 +1 @@ -2022-08-16 f84535f7aa7588a193f4d5af8aa3a16291dc72a0 +2022-08-30 92130a73460c608379b24564ddc6756224f46fc6 diff --git a/repos/os/recipes/pkg/test-fs_report/hash b/repos/os/recipes/pkg/test-fs_report/hash index 56d2401c36..8ab272e5fe 100644 --- a/repos/os/recipes/pkg/test-fs_report/hash +++ b/repos/os/recipes/pkg/test-fs_report/hash @@ -1 +1 @@ -2022-08-16 e3b7e1a226abaa8b3164c61dd58e3546251024eb +2022-08-30 e32ce8b986cee28f418c4abcfce07622bfd99b2a diff --git a/repos/os/recipes/pkg/test-fs_rom_update/hash b/repos/os/recipes/pkg/test-fs_rom_update/hash index f1cdb0cd01..9136db8db2 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update/hash @@ -1 +1 @@ -2022-08-16 21c2d8dcc3506efcf3ae125c1c3b21c05d23f7f4 +2022-08-30 5dc0c091f5b49ff446257ceec7383079fbf67edf diff --git a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash index 05c35869ce..aa14bc0359 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash @@ -1 +1 @@ -2022-08-16 62d7a345c2c73091c824faa9fe5d906b95835cd7 +2022-08-30 f17c5bcd2528cf0f94a28a6ad7e6a3fb042af514 diff --git a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash index 01b22c28b5..877e8141b9 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash @@ -1 +1 @@ -2022-08-16 3bcb08f5d369af9930adc79549f6cbd78bc4f71f +2022-08-30 c2a0697584d797dd51a3843841bce06119a6286f diff --git a/repos/os/recipes/pkg/test-init/hash b/repos/os/recipes/pkg/test-init/hash index 2c1ee5e7d0..db90de114f 100644 --- a/repos/os/recipes/pkg/test-init/hash +++ b/repos/os/recipes/pkg/test-init/hash @@ -1 +1 @@ -2022-08-16 c57498499f40ccd6ee91884e988c0a6e02e5c842 +2022-08-30 320f10bf4d0e5d334e88a98f38bc3e829ad6e04d diff --git a/repos/os/recipes/pkg/test-init_loop/hash b/repos/os/recipes/pkg/test-init_loop/hash index c07ae4daf1..992017c574 100644 --- a/repos/os/recipes/pkg/test-init_loop/hash +++ b/repos/os/recipes/pkg/test-init_loop/hash @@ -1 +1 @@ -2022-08-16 b33d0109211599a3ef37db72ecd7371179fe1c6e +2022-08-30 17003addc8e7f4b81239a5dcdbad1f4c0905d1a5 diff --git a/repos/os/recipes/pkg/test-lx_block/hash b/repos/os/recipes/pkg/test-lx_block/hash index dc4a8c05c3..999bb19e8a 100644 --- a/repos/os/recipes/pkg/test-lx_block/hash +++ b/repos/os/recipes/pkg/test-lx_block/hash @@ -1 +1 @@ -2022-08-16 0179cf1513851cdeca3a19e15b95a67f3998f9dd +2022-08-30 a25becd5f3f5352a9552492450c6ffdce2d4f617 diff --git a/repos/os/recipes/pkg/test-nic_loopback/hash b/repos/os/recipes/pkg/test-nic_loopback/hash index b5a3c64441..dd05c49f10 100644 --- a/repos/os/recipes/pkg/test-nic_loopback/hash +++ b/repos/os/recipes/pkg/test-nic_loopback/hash @@ -1 +1 @@ -2022-08-16 01f3ab22138d928a1025efcf243c18f78c0c8829 +2022-08-30 956d00009e49c69aa41b4cb4754b9f2107d482a4 diff --git a/repos/os/recipes/pkg/test-nic_perf/hash b/repos/os/recipes/pkg/test-nic_perf/hash index 4b1e04dace..69b1664a0b 100644 --- a/repos/os/recipes/pkg/test-nic_perf/hash +++ b/repos/os/recipes/pkg/test-nic_perf/hash @@ -1 +1 @@ -2022-08-16 e2b834015566119f26c5b0f25fff896717b3142b +2022-08-30 abe10d1267ab6993f9c8e1d1712a531bce4ebc06 diff --git a/repos/os/recipes/pkg/test-nic_perf_router/hash b/repos/os/recipes/pkg/test-nic_perf_router/hash index 9afb58a9ac..86d80223f8 100644 --- a/repos/os/recipes/pkg/test-nic_perf_router/hash +++ b/repos/os/recipes/pkg/test-nic_perf_router/hash @@ -1 +1 @@ -2022-08-16 3f4a3f6a77b4dd9c65b18920655c72daf3c75b6d +2022-08-30 95ed861f7590c3a16a8f576aea2ab3c880145d5f diff --git a/repos/os/recipes/pkg/test-part_block_gpt/hash b/repos/os/recipes/pkg/test-part_block_gpt/hash index bcdc410ad3..f7c9afeada 100644 --- a/repos/os/recipes/pkg/test-part_block_gpt/hash +++ b/repos/os/recipes/pkg/test-part_block_gpt/hash @@ -1 +1 @@ -2022-08-16 d05ea04df062f7327a1dca43bb651dcbee384123 +2022-08-30 1899b15954c46bfb78d6b1dd57f5f3b036c11632 diff --git a/repos/os/recipes/pkg/test-part_block_mbr/hash b/repos/os/recipes/pkg/test-part_block_mbr/hash index 3b89a9d247..6d01c39f24 100644 --- a/repos/os/recipes/pkg/test-part_block_mbr/hash +++ b/repos/os/recipes/pkg/test-part_block_mbr/hash @@ -1 +1 @@ -2022-08-16 d9810ff1c7da7da0ee36a97080b4dba4d5077de5 +2022-08-30 106f93dfc09ca97a01e16fe3f530585c799a1bef diff --git a/repos/os/recipes/pkg/test-ram_fs_chunk/hash b/repos/os/recipes/pkg/test-ram_fs_chunk/hash index a6b3efa091..803bc05b4b 100644 --- a/repos/os/recipes/pkg/test-ram_fs_chunk/hash +++ b/repos/os/recipes/pkg/test-ram_fs_chunk/hash @@ -1 +1 @@ -2022-08-16 3e33ed1d5f455401cfc872bd70beefeea2627b24 +2022-08-30 94f62e2e53351bf5a5fdb0d8ace987648539fda1 diff --git a/repos/os/recipes/pkg/test-read_only_rom/hash b/repos/os/recipes/pkg/test-read_only_rom/hash index e68cfe016b..70bfff0d18 100644 --- a/repos/os/recipes/pkg/test-read_only_rom/hash +++ b/repos/os/recipes/pkg/test-read_only_rom/hash @@ -1 +1 @@ -2022-08-16 ca383d2850905853615017ed3f58342c54c6ba47 +2022-08-30 ebf8cc1457d429e508d6b0adf7fc50c2300d7e9f diff --git a/repos/os/recipes/pkg/test-report_rom/hash b/repos/os/recipes/pkg/test-report_rom/hash index b043684f90..0208046319 100644 --- a/repos/os/recipes/pkg/test-report_rom/hash +++ b/repos/os/recipes/pkg/test-report_rom/hash @@ -1 +1 @@ -2022-08-16 cc0cae8303699689c76a0faae74e47fd736391ee +2022-08-30 0b1ad277c13dabe7af6575fc0a72f6317ed8efe2 diff --git a/repos/os/recipes/pkg/test-resource_request/hash b/repos/os/recipes/pkg/test-resource_request/hash index 9e8ac194a5..1e7c18904b 100644 --- a/repos/os/recipes/pkg/test-resource_request/hash +++ b/repos/os/recipes/pkg/test-resource_request/hash @@ -1 +1 @@ -2022-08-16 c3094343f939f61f16239e714901c8896ffc8317 +2022-08-30 f482150d19bfdc8af697d5ff2ce2caf0cdeaa8e3 diff --git a/repos/os/recipes/pkg/test-resource_yield/hash b/repos/os/recipes/pkg/test-resource_yield/hash index c7bc2cc688..c69b644a4e 100644 --- a/repos/os/recipes/pkg/test-resource_yield/hash +++ b/repos/os/recipes/pkg/test-resource_yield/hash @@ -1 +1 @@ -2022-08-16 acb0176483318f0b003a5cda8613b99e853447b7 +2022-08-30 ea5f930adc5192555717684f8fb78d456f785857 diff --git a/repos/os/recipes/pkg/test-rom_filter/hash b/repos/os/recipes/pkg/test-rom_filter/hash index c51a11b8bb..507addbdb9 100644 --- a/repos/os/recipes/pkg/test-rom_filter/hash +++ b/repos/os/recipes/pkg/test-rom_filter/hash @@ -1 +1 @@ -2022-08-16 fb7fa07584b524b368d55708fd67f4154fadd0cf +2022-08-30 5e6d2a3ef199f99d28145d74f085536abef375cd diff --git a/repos/os/recipes/pkg/test-rtc/hash b/repos/os/recipes/pkg/test-rtc/hash index 856e87f67a..aa26158efb 100644 --- a/repos/os/recipes/pkg/test-rtc/hash +++ b/repos/os/recipes/pkg/test-rtc/hash @@ -1 +1 @@ -2022-08-16 370652ea25a2bfe95c4e25a40c5464eb8f574110 +2022-08-30 eeecda8170ced98f32a935c2989bad7b7fc0f6c0 diff --git a/repos/os/recipes/pkg/test-sandbox/hash b/repos/os/recipes/pkg/test-sandbox/hash index 5d3653ee23..49881cbb45 100644 --- a/repos/os/recipes/pkg/test-sandbox/hash +++ b/repos/os/recipes/pkg/test-sandbox/hash @@ -1 +1 @@ -2022-08-16 171d0f7d82ad7e9ebd7e84ed8aa2d653cec1ab1a +2022-08-30 c6a05c15bd9630662c956d9205f55314e628f454 diff --git a/repos/os/recipes/pkg/test-signal/hash b/repos/os/recipes/pkg/test-signal/hash index 98b8ab32c6..1d5b20eeef 100644 --- a/repos/os/recipes/pkg/test-signal/hash +++ b/repos/os/recipes/pkg/test-signal/hash @@ -1 +1 @@ -2022-08-16 d1c3ced5355b6924ad0ee376cbfb6f1c90b9fdc0 +2022-08-30 e56f7e94d8131d9af76a060613624545d85f38c9 diff --git a/repos/os/recipes/pkg/test-slab/hash b/repos/os/recipes/pkg/test-slab/hash index 68c6b498d6..786abb6157 100644 --- a/repos/os/recipes/pkg/test-slab/hash +++ b/repos/os/recipes/pkg/test-slab/hash @@ -1 +1 @@ -2022-08-16 5f323fb4d0b2b0a9182f0663da6601fef0d5ebb3 +2022-08-30 484b6fd4d0dae7bcb96b32dfbbbdb34994a90c13 diff --git a/repos/os/recipes/pkg/test-terminal_crosslink/hash b/repos/os/recipes/pkg/test-terminal_crosslink/hash index fbe544d32a..4b7bb56976 100644 --- a/repos/os/recipes/pkg/test-terminal_crosslink/hash +++ b/repos/os/recipes/pkg/test-terminal_crosslink/hash @@ -1 +1 @@ -2022-08-16 39a844eece879b4170345a2e4f055e23e4d669cc +2022-08-30 39e457c600fa4ce106421e84213d1dbbaef31c65 diff --git a/repos/os/recipes/pkg/test-trace/hash b/repos/os/recipes/pkg/test-trace/hash index 21837454ac..9ce0314d0a 100644 --- a/repos/os/recipes/pkg/test-trace/hash +++ b/repos/os/recipes/pkg/test-trace/hash @@ -1 +1 @@ -2022-08-16 2df6242d4f209a607b2e5f45482cfc289a12b5e1 +2022-08-30 f5e177adb5fed8df161d5bb2fc9ba794eb9c859c diff --git a/repos/os/recipes/pkg/test-trace_buffer/hash b/repos/os/recipes/pkg/test-trace_buffer/hash index 93ce95bfbf..b5d1b400cf 100644 --- a/repos/os/recipes/pkg/test-trace_buffer/hash +++ b/repos/os/recipes/pkg/test-trace_buffer/hash @@ -1 +1 @@ -2022-08-16 d6b6490744aeb0aa015201694f4c4ac7493ec24c +2022-08-30 69b05a0392854edbb6d41533aa19aa4d7763708b diff --git a/repos/os/recipes/pkg/test-trace_logger/hash b/repos/os/recipes/pkg/test-trace_logger/hash index aceb42073a..dc07539a3b 100644 --- a/repos/os/recipes/pkg/test-trace_logger/hash +++ b/repos/os/recipes/pkg/test-trace_logger/hash @@ -1 +1 @@ -2022-08-16 caba5da6021a30bd68a5d78f300a14ded3b78542 +2022-08-30 47c54b12eeff8570018782d8a47f44a667e0bc14 diff --git a/repos/os/recipes/pkg/test-utf8/hash b/repos/os/recipes/pkg/test-utf8/hash index d0fab0eeeb..742e38e435 100644 --- a/repos/os/recipes/pkg/test-utf8/hash +++ b/repos/os/recipes/pkg/test-utf8/hash @@ -1 +1 @@ -2022-08-16 1795d4a4f304aefaa1da0c9f7c3cf9de8607fe75 +2022-08-30 3dc076556441e0b2daf95ebda5639587cde9e902 diff --git a/repos/os/recipes/pkg/test-vfs_block/hash b/repos/os/recipes/pkg/test-vfs_block/hash index d8a766d3ff..3e980d2f32 100644 --- a/repos/os/recipes/pkg/test-vfs_block/hash +++ b/repos/os/recipes/pkg/test-vfs_block/hash @@ -1 +1 @@ -2022-08-16 8d9f1307acd1b8d87becc23257bb25dbe1a810df +2022-08-30 745666ae73d2b782038eb15e8d3c1d3b948ef0f2 diff --git a/repos/os/recipes/pkg/test-vfs_stress_fs/hash b/repos/os/recipes/pkg/test-vfs_stress_fs/hash index 6c9deb65c6..9acdef9d81 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_fs/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_fs/hash @@ -1 +1 @@ -2022-08-16 19ad4efb15a8251540c5837f61f7bf1e809a4f83 +2022-08-30 0f3afa10bc919704aec9d437ed29caa45f863dc8 diff --git a/repos/os/recipes/pkg/test-vfs_stress_ram/hash b/repos/os/recipes/pkg/test-vfs_stress_ram/hash index e031833d80..4a2f94af98 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_ram/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_ram/hash @@ -1 +1 @@ -2022-08-16 be0ce8f94fb095f80d0c4b2004e69abe7266ac9a +2022-08-30 2bde636d7552b1c45d57a32c742fe717ad126111 diff --git a/repos/os/recipes/pkg/test-weak_ptr/hash b/repos/os/recipes/pkg/test-weak_ptr/hash index 39929de18e..e31a7e54c0 100644 --- a/repos/os/recipes/pkg/test-weak_ptr/hash +++ b/repos/os/recipes/pkg/test-weak_ptr/hash @@ -1 +1 @@ -2022-08-16 86ce6de8e5c35d5370a3651116737ab97ecefa9a +2022-08-30 dc025a9353abb9d79541a56a06b9d4b1052df12d diff --git a/repos/os/recipes/pkg/trace_logger/hash b/repos/os/recipes/pkg/trace_logger/hash index 947891496c..5dfe397477 100644 --- a/repos/os/recipes/pkg/trace_logger/hash +++ b/repos/os/recipes/pkg/trace_logger/hash @@ -1 +1 @@ -2022-08-16 6519f2d3907b3ceb90b1d56b227faa55723b016a +2022-08-30 7beeff22efba7a371000c8323a0b4aae9b7e17b0 diff --git a/repos/os/recipes/pkg/vfs/hash b/repos/os/recipes/pkg/vfs/hash index 7035ccc0eb..1a4b1af96c 100644 --- a/repos/os/recipes/pkg/vfs/hash +++ b/repos/os/recipes/pkg/vfs/hash @@ -1 +1 @@ -2022-08-16 566a3dfcb5e0f4484a7c7d3f89cacac522542897 +2022-08-30 f8f7ab6515594fc19369e933314034943735773c diff --git a/repos/os/recipes/pkg/vfs_block/hash b/repos/os/recipes/pkg/vfs_block/hash index 6f3ad4c7b4..e66164be5c 100644 --- a/repos/os/recipes/pkg/vfs_block/hash +++ b/repos/os/recipes/pkg/vfs_block/hash @@ -1 +1 @@ -2022-08-16 0cc28b056d3612504a45a6380f62a5d8487b38b8 +2022-08-30 ded8ca3174da32834173c8ab71c50a7959466d37 diff --git a/repos/os/recipes/src/acpi_drv/hash b/repos/os/recipes/src/acpi_drv/hash index e331a72742..9418e58dcc 100644 --- a/repos/os/recipes/src/acpi_drv/hash +++ b/repos/os/recipes/src/acpi_drv/hash @@ -1 +1 @@ -2022-08-16 cdfcb3b2cb536c22465ccb3a3c6f323c217d9d9f +2022-08-30 317da7a0dd3af3d3181333b0babbe0ac56fd1a75 diff --git a/repos/os/recipes/src/ahci_drv/hash b/repos/os/recipes/src/ahci_drv/hash index c5469494f0..468274ba7b 100644 --- a/repos/os/recipes/src/ahci_drv/hash +++ b/repos/os/recipes/src/ahci_drv/hash @@ -1 +1 @@ -2022-08-16 428db7acb71eb134589864fc07755f1fc4799004 +2022-08-30 334ce6e00ea9f558f5dffc487ab35c3648ded9aa diff --git a/repos/os/recipes/src/black_hole/hash b/repos/os/recipes/src/black_hole/hash index 1b624b7dc5..90da6e0d27 100644 --- a/repos/os/recipes/src/black_hole/hash +++ b/repos/os/recipes/src/black_hole/hash @@ -1 +1 @@ -2022-08-16 ce30baa903ae7a148feac38b217eaf4cd0c72219 +2022-08-30 d7a79f4c3af7c05bac76cb77e5d13daa2ceaa557 diff --git a/repos/os/recipes/src/block_tester/hash b/repos/os/recipes/src/block_tester/hash index dcaa97d976..7b1d7d6791 100644 --- a/repos/os/recipes/src/block_tester/hash +++ b/repos/os/recipes/src/block_tester/hash @@ -1 +1 @@ -2022-08-16 daa37c9e6c0b89df316a5d4b9b7db81ba30c27e2 +2022-08-30 36dd9f4cda1ca034229069f71b38a40967cc6453 diff --git a/repos/os/recipes/src/boot_fb_drv/hash b/repos/os/recipes/src/boot_fb_drv/hash index 0148dddac2..856cda4259 100644 --- a/repos/os/recipes/src/boot_fb_drv/hash +++ b/repos/os/recipes/src/boot_fb_drv/hash @@ -1 +1 @@ -2022-08-16 e15cba20601d91f1bc9dd443bc2f238b62d26cdc +2022-08-30 b0be32b983c5d71a79f8311696e73adbadc74194 diff --git a/repos/os/recipes/src/cached_fs_rom/hash b/repos/os/recipes/src/cached_fs_rom/hash index 9aaad970c3..a30d7c5ad2 100644 --- a/repos/os/recipes/src/cached_fs_rom/hash +++ b/repos/os/recipes/src/cached_fs_rom/hash @@ -1 +1 @@ -2022-08-16 68aa7ed568a0fd1e1608dd055ffd731850866592 +2022-08-30 ce7bde2666f6ecf04844e7035746ceb5bc7a337e diff --git a/repos/os/recipes/src/chroot/hash b/repos/os/recipes/src/chroot/hash index 94f6c8901e..c4714005d1 100644 --- a/repos/os/recipes/src/chroot/hash +++ b/repos/os/recipes/src/chroot/hash @@ -1 +1 @@ -2022-08-16 0b70d32ddaa7b4effc249f23008527162baa9932 +2022-08-30 ae3bcfbde7fe75053eef45bb55ec74194842fbe1 diff --git a/repos/os/recipes/src/clipboard/hash b/repos/os/recipes/src/clipboard/hash index 1739f73b83..fab05f8a05 100644 --- a/repos/os/recipes/src/clipboard/hash +++ b/repos/os/recipes/src/clipboard/hash @@ -1 +1 @@ -2022-08-16 3dd39db0c4cdd3afabc7ece4ee3a58f0a5aeebc1 +2022-08-30 9cd845a00de442dbb967117910ea2c1b8eea71ff diff --git a/repos/os/recipes/src/cpu_balancer/hash b/repos/os/recipes/src/cpu_balancer/hash index 78d3f9bdf4..4c31828dea 100644 --- a/repos/os/recipes/src/cpu_balancer/hash +++ b/repos/os/recipes/src/cpu_balancer/hash @@ -1 +1 @@ -2022-08-16 47f4b65e4b0e70c9bf7d077b837d4a6978328259 +2022-08-30 a99403875f5f22d5e003ba4f16cab021b8044ad7 diff --git a/repos/os/recipes/src/cpu_burner/hash b/repos/os/recipes/src/cpu_burner/hash index 8a8038325e..ed66b21768 100644 --- a/repos/os/recipes/src/cpu_burner/hash +++ b/repos/os/recipes/src/cpu_burner/hash @@ -1 +1 @@ -2022-08-16 d6000ec6e26d566b44bd5b16877372455f22fe3b +2022-08-30 be372d7bdedf6aa3a13cfc5f3a3d1ac162bcc05b diff --git a/repos/os/recipes/src/dummy/hash b/repos/os/recipes/src/dummy/hash index 1a6c9251ac..6d98b5a4bf 100644 --- a/repos/os/recipes/src/dummy/hash +++ b/repos/os/recipes/src/dummy/hash @@ -1 +1 @@ -2022-08-16 b93f21607530d2ad4777d07fdc5467ee719a5c92 +2022-08-30 19c755cf82b813689f13aec550af84d6d5afb00d diff --git a/repos/os/recipes/src/dummy_rtc_drv/hash b/repos/os/recipes/src/dummy_rtc_drv/hash index 3fd3ec733c..3d043a5eb7 100644 --- a/repos/os/recipes/src/dummy_rtc_drv/hash +++ b/repos/os/recipes/src/dummy_rtc_drv/hash @@ -1 +1 @@ -2022-08-16 eb612642ebe5c6928d94c6386b8f2ac67b050906 +2022-08-30 ee590334a3eb8123ded1527f0a620e03505f6f10 diff --git a/repos/os/recipes/src/dynamic_rom/hash b/repos/os/recipes/src/dynamic_rom/hash index da109618c1..6590413870 100644 --- a/repos/os/recipes/src/dynamic_rom/hash +++ b/repos/os/recipes/src/dynamic_rom/hash @@ -1 +1 @@ -2022-08-16 5881f657dc90b8b7e7fc8b57acd4aa15d037dd9f +2022-08-30 6af1cb67af2909dd86af5368a2cc7aa53c7c9747 diff --git a/repos/os/recipes/src/event_filter/hash b/repos/os/recipes/src/event_filter/hash index d31d7c2fe9..37a1b8a943 100644 --- a/repos/os/recipes/src/event_filter/hash +++ b/repos/os/recipes/src/event_filter/hash @@ -1 +1 @@ -2022-08-16 5fa9037132384ad7dd3959a19842281011f086d2 +2022-08-30 55e6b39f2f6b258d09631c65ff916fa7ab7a145d diff --git a/repos/os/recipes/src/fb_sdl/hash b/repos/os/recipes/src/fb_sdl/hash index 026efd5a6a..eb38348ae8 100644 --- a/repos/os/recipes/src/fb_sdl/hash +++ b/repos/os/recipes/src/fb_sdl/hash @@ -1 +1 @@ -2022-08-16 7aa28e8326b59e2e9d8b1fb2ff749d9945892974 +2022-08-30 458ea94b43c82ecd3cc99ba810746716dc145ceb diff --git a/repos/os/recipes/src/fs_report/hash b/repos/os/recipes/src/fs_report/hash index 4b8ef3e32e..21dd5a8636 100644 --- a/repos/os/recipes/src/fs_report/hash +++ b/repos/os/recipes/src/fs_report/hash @@ -1 +1 @@ -2022-08-16 b0d11cd24087917b22db60517d5582aa4e8a2278 +2022-08-30 9efb96281d494a6126c296eefde4219d0af8afe9 diff --git a/repos/os/recipes/src/fs_rom/hash b/repos/os/recipes/src/fs_rom/hash index e8f110d672..f19a5930a4 100644 --- a/repos/os/recipes/src/fs_rom/hash +++ b/repos/os/recipes/src/fs_rom/hash @@ -1 +1 @@ -2022-08-16 24e8d3d30af4153d37ec6bc730956108963fb3c6 +2022-08-30 733dcab875b6871d26ef7c131a9eb9217f3b24a3 diff --git a/repos/os/recipes/src/global_keys_handler/hash b/repos/os/recipes/src/global_keys_handler/hash index c751e43d79..a555c4e597 100644 --- a/repos/os/recipes/src/global_keys_handler/hash +++ b/repos/os/recipes/src/global_keys_handler/hash @@ -1 +1 @@ -2022-08-16 1a1af739d67c5c16ab089af2fec9688183004a6b +2022-08-30 3f144eee7a0fec74e25f114458ed9e8e189e0eaa diff --git a/repos/os/recipes/src/gui_fb/hash b/repos/os/recipes/src/gui_fb/hash index 33ded22ab9..c0af063f84 100644 --- a/repos/os/recipes/src/gui_fb/hash +++ b/repos/os/recipes/src/gui_fb/hash @@ -1 +1 @@ -2022-08-16 48bb160b8eb38eb832653577ac45db920ac3e5f4 +2022-08-30 1571e2e77c5a808e65d6814667e0ba68a536d0fe diff --git a/repos/os/recipes/src/init/hash b/repos/os/recipes/src/init/hash index 09c578ad7a..850e90f5e5 100644 --- a/repos/os/recipes/src/init/hash +++ b/repos/os/recipes/src/init/hash @@ -1 +1 @@ -2022-08-16 da198e92add574014e3aa15214dcb3ec69407734 +2022-08-30 ca0474f85ab1d9be4dbfaefb5772cabd4ac7a3b6 diff --git a/repos/os/recipes/src/input_event_bridge/hash b/repos/os/recipes/src/input_event_bridge/hash index f152a6762c..57bafd1f9b 100644 --- a/repos/os/recipes/src/input_event_bridge/hash +++ b/repos/os/recipes/src/input_event_bridge/hash @@ -1 +1 @@ -2022-08-16 8ddddada6a36acbacc02c339a1c4c060a9ec99c7 +2022-08-30 5c974b0ab3c2f4c5a7a2dffa8ca8b7190a1169bc diff --git a/repos/os/recipes/src/intel_gpu_drv/hash b/repos/os/recipes/src/intel_gpu_drv/hash index f429eed711..64f8e7a40e 100644 --- a/repos/os/recipes/src/intel_gpu_drv/hash +++ b/repos/os/recipes/src/intel_gpu_drv/hash @@ -1 +1 @@ -2022-08-16 d8bd4babb2493e357e77e1cebd08a952d8d94e63 +2022-08-30 610e32a5c09f3dee37fe1043db56813b21e4635d diff --git a/repos/os/recipes/src/lan9118_nic_drv/hash b/repos/os/recipes/src/lan9118_nic_drv/hash index 4aec36ff84..84149a6670 100644 --- a/repos/os/recipes/src/lan9118_nic_drv/hash +++ b/repos/os/recipes/src/lan9118_nic_drv/hash @@ -1 +1 @@ -2022-08-16 a20ea69fdc53cd05e07b0f563ea68e3b0f2681c9 +2022-08-30 dfc6600b75e27aa8fb428838a7bcac71af0f3927 diff --git a/repos/os/recipes/src/linux_nic_drv/hash b/repos/os/recipes/src/linux_nic_drv/hash index f39f831fa7..2ae8b1a1a4 100644 --- a/repos/os/recipes/src/linux_nic_drv/hash +++ b/repos/os/recipes/src/linux_nic_drv/hash @@ -1 +1 @@ -2022-08-16 e6e4c221661e3bd429afef523d2050747144a207 +2022-08-30 5ba900195c0f810ddac57e7119ef0b2f90f0ac31 diff --git a/repos/os/recipes/src/linux_rtc_drv/hash b/repos/os/recipes/src/linux_rtc_drv/hash index 21d1c3fe6d..c088987c53 100644 --- a/repos/os/recipes/src/linux_rtc_drv/hash +++ b/repos/os/recipes/src/linux_rtc_drv/hash @@ -1 +1 @@ -2022-08-16 35d78cc4f5ac2ee02bf3836b5dd57a25c42a8a17 +2022-08-30 986710ac70a3e0a4c3857080f85fc080408d0573 diff --git a/repos/os/recipes/src/loader/hash b/repos/os/recipes/src/loader/hash index d711527898..fdb80d0232 100644 --- a/repos/os/recipes/src/loader/hash +++ b/repos/os/recipes/src/loader/hash @@ -1 +1 @@ -2022-08-16 ff7440b71f62ceee0ea520837d36efd03cb67a12 +2022-08-30 193ca1c6d569ac2db37b6adecad687fec40c7a41 diff --git a/repos/os/recipes/src/log_core/hash b/repos/os/recipes/src/log_core/hash index ffc3806050..7193a53877 100644 --- a/repos/os/recipes/src/log_core/hash +++ b/repos/os/recipes/src/log_core/hash @@ -1 +1 @@ -2022-08-16 d3a5be11c81e25119a764b451921d7ebe7a24db4 +2022-08-30 d644592957e747a2850b576d56408e2d37f7a58d diff --git a/repos/os/recipes/src/log_terminal/hash b/repos/os/recipes/src/log_terminal/hash index 581f09a420..e06dc94951 100644 --- a/repos/os/recipes/src/log_terminal/hash +++ b/repos/os/recipes/src/log_terminal/hash @@ -1 +1 @@ -2022-08-16 223ab16b66aa0640d0fb4da5070e45d16cd191d7 +2022-08-30 72b04ee91a2a4753cbe7e0bda26194c686086f13 diff --git a/repos/os/recipes/src/lx_block/hash b/repos/os/recipes/src/lx_block/hash index 23cdbd7b0d..d68d293b6a 100644 --- a/repos/os/recipes/src/lx_block/hash +++ b/repos/os/recipes/src/lx_block/hash @@ -1 +1 @@ -2022-08-16 74969a62c438fafc6d4ae9f27cb82f6221b3b91d +2022-08-30 79af2a3d1a8989cf86d5836e2ed5dd210f4530e3 diff --git a/repos/os/recipes/src/lx_fs/hash b/repos/os/recipes/src/lx_fs/hash index 46f363a80e..fd7c5d9aff 100644 --- a/repos/os/recipes/src/lx_fs/hash +++ b/repos/os/recipes/src/lx_fs/hash @@ -1 +1 @@ -2022-08-16 b84cd531c344801d37bbc1e3d8d27fe0ee3a0dcd +2022-08-30 822aab56492fe927ad674cf1ca951d4a22e7daa2 diff --git a/repos/os/recipes/src/mixer/hash b/repos/os/recipes/src/mixer/hash index bcce141c08..4111eade1d 100644 --- a/repos/os/recipes/src/mixer/hash +++ b/repos/os/recipes/src/mixer/hash @@ -1 +1 @@ -2022-08-16 8c74d9a09a3e58dc2a789c07a8a2c68a6a0c0007 +2022-08-30 9b9b703d6392c9b54f9131fb8b6d09a80f7f647f diff --git a/repos/os/recipes/src/nic_bridge/hash b/repos/os/recipes/src/nic_bridge/hash index fda37a252c..daa6a1cddb 100644 --- a/repos/os/recipes/src/nic_bridge/hash +++ b/repos/os/recipes/src/nic_bridge/hash @@ -1 +1 @@ -2022-08-16 d23ddd0a7bac0d2513c1d20699ba44e0bf92adfa +2022-08-30 5f48764dd22557740d527eb2da54ed331761d0e0 diff --git a/repos/os/recipes/src/nic_loopback/hash b/repos/os/recipes/src/nic_loopback/hash index 6506dd478e..5b134f3c43 100644 --- a/repos/os/recipes/src/nic_loopback/hash +++ b/repos/os/recipes/src/nic_loopback/hash @@ -1 +1 @@ -2022-08-16 edb51de9cf23e068ee0d3fd3748517b07c04c540 +2022-08-30 75cbfd553c96e8e16a33d0010f502b7a32c604ae diff --git a/repos/os/recipes/src/nic_perf/hash b/repos/os/recipes/src/nic_perf/hash index b4928dd290..7d5bc69cdd 100644 --- a/repos/os/recipes/src/nic_perf/hash +++ b/repos/os/recipes/src/nic_perf/hash @@ -1 +1 @@ -2022-08-16 fca3d34ce978284381e4e9f88b58329d36bc98c3 +2022-08-30 e51e2d3b991902c387444c5edcf700fb2d28b658 diff --git a/repos/os/recipes/src/nic_router/hash b/repos/os/recipes/src/nic_router/hash index 8f3e81d9f7..ff201033e4 100644 --- a/repos/os/recipes/src/nic_router/hash +++ b/repos/os/recipes/src/nic_router/hash @@ -1 +1 @@ -2022-08-16 f51ee318796b738de7b7bd32f7687438938a80cf +2022-08-30 443b264f9b11a95823133fa57b9bc972d45ebf3e diff --git a/repos/os/recipes/src/nit_focus/hash b/repos/os/recipes/src/nit_focus/hash index 7e870d8068..715ae84fe5 100644 --- a/repos/os/recipes/src/nit_focus/hash +++ b/repos/os/recipes/src/nit_focus/hash @@ -1 +1 @@ -2022-08-16 e4b2838fd4f5f74faabfaa2b39bbbf238fdc302f +2022-08-30 1d1ba6740dc6fa4e795e439b9d2010cde43f9b9f diff --git a/repos/os/recipes/src/nitpicker/hash b/repos/os/recipes/src/nitpicker/hash index 399eac584f..6eb81561b9 100644 --- a/repos/os/recipes/src/nitpicker/hash +++ b/repos/os/recipes/src/nitpicker/hash @@ -1 +1 @@ -2022-08-16 22b2442ad98dbbbc96ac4abd227efc771acb47ac +2022-08-30 5fa8f844eb3c95bb33531085a282b917a83a3606 diff --git a/repos/os/recipes/src/nvme_drv/hash b/repos/os/recipes/src/nvme_drv/hash index dab5a7fc6b..f08ebd0ad3 100644 --- a/repos/os/recipes/src/nvme_drv/hash +++ b/repos/os/recipes/src/nvme_drv/hash @@ -1 +1 @@ -2022-08-16 78e27f586ce2b31dfd9466552c2d0eb349a88fea +2022-08-30 f5fc640ba506cc679574491ef49f681dceb8ac8b diff --git a/repos/os/recipes/src/part_block/hash b/repos/os/recipes/src/part_block/hash index 4d992bebad..0c25c6b68d 100644 --- a/repos/os/recipes/src/part_block/hash +++ b/repos/os/recipes/src/part_block/hash @@ -1 +1 @@ -2022-08-16 533c1abe02c2bfbdf76ddbf2a0546678dda47674 +2022-08-30 07c2e2132e9031cc9eb39321d86d75aa8eae8cb8 diff --git a/repos/os/recipes/src/pbxa9_drivers/hash b/repos/os/recipes/src/pbxa9_drivers/hash index 24502c65ac..0d3356d405 100644 --- a/repos/os/recipes/src/pbxa9_drivers/hash +++ b/repos/os/recipes/src/pbxa9_drivers/hash @@ -1 +1 @@ -2022-08-16 3050ac89ee99ac099380c28485e4ca8611f3f7f5 +2022-08-30 634e9b074a9fc8d601bb5a12576e7b77890650fe diff --git a/repos/os/recipes/src/pci_decode/hash b/repos/os/recipes/src/pci_decode/hash index 80210ca155..7498373127 100644 --- a/repos/os/recipes/src/pci_decode/hash +++ b/repos/os/recipes/src/pci_decode/hash @@ -1 +1 @@ -2022-08-16 b75ae006f4b8606232c1135c665faf8dfd11982f +2022-08-30 60cb25fc4b6dc90522121d333f77fa9d56650c59 diff --git a/repos/os/recipes/src/platform_drv/hash b/repos/os/recipes/src/platform_drv/hash index e407eb8862..35fa4b9bc6 100644 --- a/repos/os/recipes/src/platform_drv/hash +++ b/repos/os/recipes/src/platform_drv/hash @@ -1 +1 @@ -2022-08-16 aa63a82298f0e8159de4a3308657c5c983be2efe +2022-08-30 9a7278b681b07b0006685f45b970212ca9b5b57c diff --git a/repos/os/recipes/src/ps2_drv/hash b/repos/os/recipes/src/ps2_drv/hash index f0f43fdbf8..30ff208912 100644 --- a/repos/os/recipes/src/ps2_drv/hash +++ b/repos/os/recipes/src/ps2_drv/hash @@ -1 +1 @@ -2022-08-16 f30ac6dbe3c47cd1a25962d298261d97bed4f6ed +2022-08-30 f5d418978137b880cc499474c724168942635a6d diff --git a/repos/os/recipes/src/report_rom/hash b/repos/os/recipes/src/report_rom/hash index 0fa1d1c28b..a67d3a2b11 100644 --- a/repos/os/recipes/src/report_rom/hash +++ b/repos/os/recipes/src/report_rom/hash @@ -1 +1 @@ -2022-08-16 129edb7722905bea1fe2ea20bd9d3b281e291be9 +2022-08-30 1a8ab75591d2c35c0b199e829be327ffeacc3f28 diff --git a/repos/os/recipes/src/rom_filter/hash b/repos/os/recipes/src/rom_filter/hash index 92dfd09719..3a5d22909e 100644 --- a/repos/os/recipes/src/rom_filter/hash +++ b/repos/os/recipes/src/rom_filter/hash @@ -1 +1 @@ -2022-08-16 540eab489002ecfee8d8b6d9c45c680da335775d +2022-08-30 b23da0a02af86c1431fc86a68b8a8a7aae32f4a5 diff --git a/repos/os/recipes/src/rom_logger/hash b/repos/os/recipes/src/rom_logger/hash index 3c3c3482d9..99b93a6cef 100644 --- a/repos/os/recipes/src/rom_logger/hash +++ b/repos/os/recipes/src/rom_logger/hash @@ -1 +1 @@ -2022-08-16 7bca4f56d3d307e0885ea3eacf17acc24ce358a8 +2022-08-30 174123222a0f6ca6ede2309ba8efd7d87da7e9c1 diff --git a/repos/os/recipes/src/rom_reporter/hash b/repos/os/recipes/src/rom_reporter/hash index 1e192707f3..9c71db9b74 100644 --- a/repos/os/recipes/src/rom_reporter/hash +++ b/repos/os/recipes/src/rom_reporter/hash @@ -1 +1 @@ -2022-08-16 9ad6702badbfe9e0477bc797340e35420059c686 +2022-08-30 c5a1d2b90fd51cfbc72c0130c32638fdf42d4ab0 diff --git a/repos/os/recipes/src/rom_to_file/hash b/repos/os/recipes/src/rom_to_file/hash index 7c086e372f..1cbe43b5f5 100644 --- a/repos/os/recipes/src/rom_to_file/hash +++ b/repos/os/recipes/src/rom_to_file/hash @@ -1 +1 @@ -2022-08-16 e1df96a36e66ee73a0c399ffca1ee79e304bd281 +2022-08-30 fe8e76b7e81522af8d21d7a0f568d5e5fb63648a diff --git a/repos/os/recipes/src/rtc_drv/hash b/repos/os/recipes/src/rtc_drv/hash index 7c13c13561..3877df9735 100644 --- a/repos/os/recipes/src/rtc_drv/hash +++ b/repos/os/recipes/src/rtc_drv/hash @@ -1 +1 @@ -2022-08-16 83edda798e0c38657a8b2b048fe8b9bf235f2553 +2022-08-30 5433a4abce0182ca7497d0f89ef7b0b3adddc572 diff --git a/repos/os/recipes/src/sandbox/hash b/repos/os/recipes/src/sandbox/hash index 09b0e40a74..5dedb7eef5 100644 --- a/repos/os/recipes/src/sandbox/hash +++ b/repos/os/recipes/src/sandbox/hash @@ -1 +1 @@ -2022-08-16 888cb685196adabd9f10781336be241658349b5d +2022-08-30 d6dcba71dca67f299b72e8efa7badab034a3c239 diff --git a/repos/os/recipes/src/sequence/hash b/repos/os/recipes/src/sequence/hash index 0082dc5627..658a631e06 100644 --- a/repos/os/recipes/src/sequence/hash +++ b/repos/os/recipes/src/sequence/hash @@ -1 +1 @@ -2022-08-16 9c9aec92908a6944ac04d10a952ceea4f99783e4 +2022-08-30 d529a1c3e46d7f72d4fb73e949464e363df333ab diff --git a/repos/os/recipes/src/shim/hash b/repos/os/recipes/src/shim/hash index 5287af5a60..59a86f082d 100644 --- a/repos/os/recipes/src/shim/hash +++ b/repos/os/recipes/src/shim/hash @@ -1 +1 @@ -2022-08-16 edc77aad8d3bd965ac7131b82a21be2fa8e60ad6 +2022-08-30 1cea68954ea81deee6e45b75d8a65857ef86dddb diff --git a/repos/os/recipes/src/terminal_crosslink/hash b/repos/os/recipes/src/terminal_crosslink/hash index 155d4fe92c..c589cf4adb 100644 --- a/repos/os/recipes/src/terminal_crosslink/hash +++ b/repos/os/recipes/src/terminal_crosslink/hash @@ -1 +1 @@ -2022-08-16 72f2400c1a5efd2feaa88682aa12560ec1fb94af +2022-08-30 f6ef67224b7c0fe8caa0e1b3992d8cfa6f1e70d8 diff --git a/repos/os/recipes/src/terminal_log/hash b/repos/os/recipes/src/terminal_log/hash index d5211eb3e9..3d7584b354 100644 --- a/repos/os/recipes/src/terminal_log/hash +++ b/repos/os/recipes/src/terminal_log/hash @@ -1 +1 @@ -2022-08-16 9cb5bb45cf881a3929844fe18a5ceafe5fadc0c1 +2022-08-30 fb1a4f27ec4840c33c83eeca6f5afb59dda4ff49 diff --git a/repos/os/recipes/src/test-black_hole/hash b/repos/os/recipes/src/test-black_hole/hash index 943c17fa92..223a229ade 100644 --- a/repos/os/recipes/src/test-black_hole/hash +++ b/repos/os/recipes/src/test-black_hole/hash @@ -1 +1 @@ -2022-08-16 d3a98cee2da3f15864ff44a4a32c1001a3253be4 +2022-08-30 d4a684a513dfc1ef1f09d8a8b6988eaea7b565d7 diff --git a/repos/os/recipes/src/test-bomb/hash b/repos/os/recipes/src/test-bomb/hash index 8b13bf3dd3..9ab717b97d 100644 --- a/repos/os/recipes/src/test-bomb/hash +++ b/repos/os/recipes/src/test-bomb/hash @@ -1 +1 @@ -2022-08-16 8b52d6dfe683379460ee324a8d60051c0d3b18f6 +2022-08-30 576f1afa013de6f31f9738e6992b9feb7008ddbb diff --git a/repos/os/recipes/src/test-capture/hash b/repos/os/recipes/src/test-capture/hash index f9d94fb845..eb77cd07f4 100644 --- a/repos/os/recipes/src/test-capture/hash +++ b/repos/os/recipes/src/test-capture/hash @@ -1 +1 @@ -2022-08-16 15c8f13b64e50569da183418023e02b14135fec6 +2022-08-30 38dbb5e21ef06a0bce13734a7319cd8466fd20de diff --git a/repos/os/recipes/src/test-clipboard/hash b/repos/os/recipes/src/test-clipboard/hash index 5dc86a3c1a..4930206580 100644 --- a/repos/os/recipes/src/test-clipboard/hash +++ b/repos/os/recipes/src/test-clipboard/hash @@ -1 +1 @@ -2022-08-16 8369d11912c47c09915e177e69d17334b1c4a5bd +2022-08-30 a1d116d84f5a13f2d5ce2cc8b0d5835b9398dc37 diff --git a/repos/os/recipes/src/test-dynamic_config/hash b/repos/os/recipes/src/test-dynamic_config/hash index 835e2b76b5..867e062c6a 100644 --- a/repos/os/recipes/src/test-dynamic_config/hash +++ b/repos/os/recipes/src/test-dynamic_config/hash @@ -1 +1 @@ -2022-08-16 6cb79124ab1b82afe6867f800e1a773f51135aaf +2022-08-30 bc4b7671ccfa160bc8cc0261687d2d63df7de8d6 diff --git a/repos/os/recipes/src/test-fault_detection/hash b/repos/os/recipes/src/test-fault_detection/hash index a6f452405d..2995c054ee 100644 --- a/repos/os/recipes/src/test-fault_detection/hash +++ b/repos/os/recipes/src/test-fault_detection/hash @@ -1 +1 @@ -2022-08-16 9d0db875a8d6c1a0b6e6cea714d8c4cc6c54f008 +2022-08-30 24cea1cabbfa051a0e4024391a99545c3aa83c41 diff --git a/repos/os/recipes/src/test-fs_packet/hash b/repos/os/recipes/src/test-fs_packet/hash index 319c856202..5554f0447b 100644 --- a/repos/os/recipes/src/test-fs_packet/hash +++ b/repos/os/recipes/src/test-fs_packet/hash @@ -1 +1 @@ -2022-08-16 a4aa68dc2566ce38a5dbc090d2b2a6ce65948b0b +2022-08-30 85cf4f46024126fe26ce5c077d6c531eecac0337 diff --git a/repos/os/recipes/src/test-fs_report/hash b/repos/os/recipes/src/test-fs_report/hash index e8ff1fecf6..247495d269 100644 --- a/repos/os/recipes/src/test-fs_report/hash +++ b/repos/os/recipes/src/test-fs_report/hash @@ -1 +1 @@ -2022-08-16 80a6fb461c026b2507b262798a0a31316cbee82d +2022-08-30 877c399a1fa8cea8af0a964719d6cbc6109a6b99 diff --git a/repos/os/recipes/src/test-immutable_rom/hash b/repos/os/recipes/src/test-immutable_rom/hash index 7a07e874a2..64fc6442e0 100644 --- a/repos/os/recipes/src/test-immutable_rom/hash +++ b/repos/os/recipes/src/test-immutable_rom/hash @@ -1 +1 @@ -2022-08-16 4957ac90b6de564137c85f44e06ec9597ee0b2f6 +2022-08-30 0c0eb724a1739abc1c45d0982b30facd8dc87bb2 diff --git a/repos/os/recipes/src/test-init/hash b/repos/os/recipes/src/test-init/hash index 32aa81ccd2..ea8e9052c1 100644 --- a/repos/os/recipes/src/test-init/hash +++ b/repos/os/recipes/src/test-init/hash @@ -1 +1 @@ -2022-08-16 59bc86fdc32ad5e60ebd0f59114c2ec5ae630af0 +2022-08-30 4ff6066aacbb9921cd6eff4d11402734591319f0 diff --git a/repos/os/recipes/src/test-init_loop/hash b/repos/os/recipes/src/test-init_loop/hash index 27adadde4e..1cd5ee4bae 100644 --- a/repos/os/recipes/src/test-init_loop/hash +++ b/repos/os/recipes/src/test-init_loop/hash @@ -1 +1 @@ -2022-08-16 625268315c5393c45684b14ac7a5aaa6391f9b20 +2022-08-30 6cb4005615ab6ede60375176b506ef46a96c37c0 diff --git a/repos/os/recipes/src/test-nic_loopback/hash b/repos/os/recipes/src/test-nic_loopback/hash index acc5e0bfd4..e809a778e8 100644 --- a/repos/os/recipes/src/test-nic_loopback/hash +++ b/repos/os/recipes/src/test-nic_loopback/hash @@ -1 +1 @@ -2022-08-16 6963d76867082076326465c9bf6c81f62120f770 +2022-08-30 0b8afe67c197ff75c36de7df9344e4ee32c2eb65 diff --git a/repos/os/recipes/src/test-ram_fs_chunk/hash b/repos/os/recipes/src/test-ram_fs_chunk/hash index 73ea5ecce9..83d3ed572c 100644 --- a/repos/os/recipes/src/test-ram_fs_chunk/hash +++ b/repos/os/recipes/src/test-ram_fs_chunk/hash @@ -1 +1 @@ -2022-08-16 cb3cca2d848b0cc2e39e6e498dedf6dac94f4e78 +2022-08-30 5d1af7355c0dea81460a0a85197332c56663eb6d diff --git a/repos/os/recipes/src/test-report_rom/hash b/repos/os/recipes/src/test-report_rom/hash index df4ffd481d..585952e6c4 100644 --- a/repos/os/recipes/src/test-report_rom/hash +++ b/repos/os/recipes/src/test-report_rom/hash @@ -1 +1 @@ -2022-08-16 dbb5d75f4dba5e5585a6dabaeb0ceba31b38a3fd +2022-08-30 195464a38771447ef860636766f1c2bf86964bf7 diff --git a/repos/os/recipes/src/test-resource_request/hash b/repos/os/recipes/src/test-resource_request/hash index 3cb29e8568..e2943ce2a4 100644 --- a/repos/os/recipes/src/test-resource_request/hash +++ b/repos/os/recipes/src/test-resource_request/hash @@ -1 +1 @@ -2022-08-16 06efd13a27fac9bdc3a4ff8dffbf78da3347c6d2 +2022-08-30 51a6fc2e3b3fbe26c0d7b646b81e40994cb825d3 diff --git a/repos/os/recipes/src/test-resource_yield/hash b/repos/os/recipes/src/test-resource_yield/hash index 5740a02879..9b59200f46 100644 --- a/repos/os/recipes/src/test-resource_yield/hash +++ b/repos/os/recipes/src/test-resource_yield/hash @@ -1 +1 @@ -2022-08-16 2a25d0afb5f049cf81d92868cef4ca0d6b5e4283 +2022-08-30 4c716c4359ea1546239ec36b99fa3c1c6948c2b6 diff --git a/repos/os/recipes/src/test-rtc/hash b/repos/os/recipes/src/test-rtc/hash index 3b1b58d322..d816a67a6c 100644 --- a/repos/os/recipes/src/test-rtc/hash +++ b/repos/os/recipes/src/test-rtc/hash @@ -1 +1 @@ -2022-08-16 6fd49c75114e8961092ff799e55ab8263e86689b +2022-08-30 226507e9ed58c0bcc249bf1114637520ebe5022b diff --git a/repos/os/recipes/src/test-sandbox/hash b/repos/os/recipes/src/test-sandbox/hash index 941c9e95b7..b0b027e662 100644 --- a/repos/os/recipes/src/test-sandbox/hash +++ b/repos/os/recipes/src/test-sandbox/hash @@ -1 +1 @@ -2022-08-16 00786c0651a50dc43760ec6df81903dd90c7b4e6 +2022-08-30 26c47ea3e06bb6e1751d02a2364448d56602a481 diff --git a/repos/os/recipes/src/test-signal/hash b/repos/os/recipes/src/test-signal/hash index 8123baff5b..d47995bd38 100644 --- a/repos/os/recipes/src/test-signal/hash +++ b/repos/os/recipes/src/test-signal/hash @@ -1 +1 @@ -2022-08-16 e398f04884b20fdef54c228c66d4a2959330bbb1 +2022-08-30 35ed62b21719bf72ff37064e35163e442da797cc diff --git a/repos/os/recipes/src/test-slab/hash b/repos/os/recipes/src/test-slab/hash index eb3046da2b..b073cfc233 100644 --- a/repos/os/recipes/src/test-slab/hash +++ b/repos/os/recipes/src/test-slab/hash @@ -1 +1 @@ -2022-08-16 0af9e3d27bc3383c06c156e06feba768bdc99c49 +2022-08-30 a48f9bf4945c89c44d2b0a1d29af2f0f91ea474f diff --git a/repos/os/recipes/src/test-terminal_crosslink/hash b/repos/os/recipes/src/test-terminal_crosslink/hash index 3061baaab4..1f0e4fe8f9 100644 --- a/repos/os/recipes/src/test-terminal_crosslink/hash +++ b/repos/os/recipes/src/test-terminal_crosslink/hash @@ -1 +1 @@ -2022-08-16 089005f3adb9b1808655a8dc76162224b065978d +2022-08-30 d51ff101e8e9c3c1ce7e407cd1f65912a4f0bb59 diff --git a/repos/os/recipes/src/test-trace/hash b/repos/os/recipes/src/test-trace/hash index e79ed7594b..7505ce382f 100644 --- a/repos/os/recipes/src/test-trace/hash +++ b/repos/os/recipes/src/test-trace/hash @@ -1 +1 @@ -2022-08-16 a74387f58eac3ce866d01b6569625d39ea14de70 +2022-08-30 ea5efd746fc71f177dbe5f83780b117ef4d29825 diff --git a/repos/os/recipes/src/test-trace_buffer/hash b/repos/os/recipes/src/test-trace_buffer/hash index d589734226..9fe9efa2d7 100644 --- a/repos/os/recipes/src/test-trace_buffer/hash +++ b/repos/os/recipes/src/test-trace_buffer/hash @@ -1 +1 @@ -2022-08-16 9743a59611217ce9cad745a01ec3061223ef639a +2022-08-30 7b71ad6ae71d7d925d0238d9a8af7f9b8ad1e3d2 diff --git a/repos/os/recipes/src/test-trace_logger/hash b/repos/os/recipes/src/test-trace_logger/hash index d10d758574..da5c319f77 100644 --- a/repos/os/recipes/src/test-trace_logger/hash +++ b/repos/os/recipes/src/test-trace_logger/hash @@ -1 +1 @@ -2022-08-16 d3dc7744a9e57a5182dd7218dee69af7e508414e +2022-08-30 854869e01241f56fe531a4214bafc48a260d4557 diff --git a/repos/os/recipes/src/test-utf8/hash b/repos/os/recipes/src/test-utf8/hash index a1b04078d3..0b8e8673b6 100644 --- a/repos/os/recipes/src/test-utf8/hash +++ b/repos/os/recipes/src/test-utf8/hash @@ -1 +1 @@ -2022-08-16 35d2f6698563df9fb6dcbf45792b26ef1da8df50 +2022-08-30 ec48902b3dea669e57058b42ce9b3b1a6cc86404 diff --git a/repos/os/recipes/src/test-vfs_capture/hash b/repos/os/recipes/src/test-vfs_capture/hash index 355a23cf18..6ab3deeb8a 100644 --- a/repos/os/recipes/src/test-vfs_capture/hash +++ b/repos/os/recipes/src/test-vfs_capture/hash @@ -1 +1 @@ -2022-08-16 50c361e588727a9fbf6f7dd739fda2c46df491ce +2022-08-30 688e234ef74c143268cad273a58daad77c25c705 diff --git a/repos/os/recipes/src/test-vfs_stress/hash b/repos/os/recipes/src/test-vfs_stress/hash index 299c21bf2c..82ac8176b0 100644 --- a/repos/os/recipes/src/test-vfs_stress/hash +++ b/repos/os/recipes/src/test-vfs_stress/hash @@ -1 +1 @@ -2022-08-16 93296551617d233b3e1779d144548d61d3640f42 +2022-08-30 a08d2bde4151b88e4ad351c823849653554d6e8e diff --git a/repos/os/recipes/src/test-weak_ptr/hash b/repos/os/recipes/src/test-weak_ptr/hash index b43078dab8..48ccdae318 100644 --- a/repos/os/recipes/src/test-weak_ptr/hash +++ b/repos/os/recipes/src/test-weak_ptr/hash @@ -1 +1 @@ -2022-08-16 42fe1fe5db09c1e192e52378339e3c8721bc48b2 +2022-08-30 f59d5eb4d86172c3eab7a52873b9148a5cdcb257 diff --git a/repos/os/recipes/src/top/hash b/repos/os/recipes/src/top/hash index a9530ab341..07a789ff9b 100644 --- a/repos/os/recipes/src/top/hash +++ b/repos/os/recipes/src/top/hash @@ -1 +1 @@ -2022-08-16 42762ae28f0e1100ebe40fa0c143b5603cd89096 +2022-08-30 d603cdeeee0c3fb03394cf9b5b814e13a2646da1 diff --git a/repos/os/recipes/src/trace_logger/hash b/repos/os/recipes/src/trace_logger/hash index 6164373d80..c4cb0737ce 100644 --- a/repos/os/recipes/src/trace_logger/hash +++ b/repos/os/recipes/src/trace_logger/hash @@ -1 +1 @@ -2022-08-16 aa44051151899894b6605d6d35ae70d23c7715b9 +2022-08-30 1da2ba5fd5bd35fe54218bbac769a68fc102bc46 diff --git a/repos/os/recipes/src/trace_policy/hash b/repos/os/recipes/src/trace_policy/hash index 96d60b6abe..d2b2da8f55 100644 --- a/repos/os/recipes/src/trace_policy/hash +++ b/repos/os/recipes/src/trace_policy/hash @@ -1 +1 @@ -2022-08-16 916f19c6f5e88f84f4e279bbce2a71ec2fbad070 +2022-08-30 b9701cdff1d363f22f7689a86d8044b1cfa7a915 diff --git a/repos/os/recipes/src/trace_subject_reporter/hash b/repos/os/recipes/src/trace_subject_reporter/hash index d29f69b5cd..92c39195f2 100644 --- a/repos/os/recipes/src/trace_subject_reporter/hash +++ b/repos/os/recipes/src/trace_subject_reporter/hash @@ -1 +1 @@ -2022-08-16 438f9d77dcda6117d556c341cd0a3554999a5eea +2022-08-30 2fa2ef3f0f3818cda8c0d196d8753d53574ebe3f diff --git a/repos/os/recipes/src/usb_block_drv/hash b/repos/os/recipes/src/usb_block_drv/hash index d8961e4b3d..df9e370209 100644 --- a/repos/os/recipes/src/usb_block_drv/hash +++ b/repos/os/recipes/src/usb_block_drv/hash @@ -1 +1 @@ -2022-08-16 5de4a7d9f5f3af6b8901743c9f6f7d1385675983 +2022-08-30 64afe25ab9ee9a73f27f09768a35bed409bcecab diff --git a/repos/os/recipes/src/vfs/hash b/repos/os/recipes/src/vfs/hash index 1b846b86f3..bfbbc18f10 100644 --- a/repos/os/recipes/src/vfs/hash +++ b/repos/os/recipes/src/vfs/hash @@ -1 +1 @@ -2022-08-16 77afa45113a9aefba1234349e8fb52e7ca543281 +2022-08-30 55b269a7ff0531f898ef72fa9660186042139389 diff --git a/repos/os/recipes/src/vfs_block/hash b/repos/os/recipes/src/vfs_block/hash index 24cdce94e9..1be083f24c 100644 --- a/repos/os/recipes/src/vfs_block/hash +++ b/repos/os/recipes/src/vfs_block/hash @@ -1 +1 @@ -2022-08-16 15afb803b00b3cbe8e72038abc2a62e6c14adfdd +2022-08-30 e7919158b57fa83bf650e43007e53395ad48f1f5 diff --git a/repos/os/recipes/src/vfs_capture/hash b/repos/os/recipes/src/vfs_capture/hash index ed9b395942..23ef39b4e9 100644 --- a/repos/os/recipes/src/vfs_capture/hash +++ b/repos/os/recipes/src/vfs_capture/hash @@ -1 +1 @@ -2022-08-16 ebefe06805ca86879e518197b5a6bdc8730f6b2f +2022-08-30 bb935641858856f281718e9de0f1fb0c84f14784 diff --git a/repos/os/recipes/src/vfs_tap/hash b/repos/os/recipes/src/vfs_tap/hash index 4510355e44..a179e8cd4c 100644 --- a/repos/os/recipes/src/vfs_tap/hash +++ b/repos/os/recipes/src/vfs_tap/hash @@ -1 +1 @@ -2022-08-16 1ff5c0692a1bc860082436b38126b0b1b7ef63f9 +2022-08-30 4b262ee2ba6d45e67ed9f62cf035463bad9ef10e diff --git a/repos/os/recipes/src/virt_qemu_drivers/hash b/repos/os/recipes/src/virt_qemu_drivers/hash index 6c637195cb..da60fb4828 100644 --- a/repos/os/recipes/src/virt_qemu_drivers/hash +++ b/repos/os/recipes/src/virt_qemu_drivers/hash @@ -1 +1 @@ -2022-08-16 e9fcee53ea17637cd687d512d20c2b7274cfc8b9 +2022-08-30 4be1a934e48b2c114acc040e2aded55db5bc7a23 diff --git a/repos/os/recipes/src/virtdev_rom/hash b/repos/os/recipes/src/virtdev_rom/hash index f98b54988f..e8324fc345 100644 --- a/repos/os/recipes/src/virtdev_rom/hash +++ b/repos/os/recipes/src/virtdev_rom/hash @@ -1 +1 @@ -2022-08-16 39ded984de8f94503652338b46b719d79f87df81 +2022-08-30 97f6f47319b9943a0b973543ea365456a1436bed diff --git a/repos/os/recipes/src/virtio_fb_drv/hash b/repos/os/recipes/src/virtio_fb_drv/hash index da2dacb4fc..e4f0e75503 100644 --- a/repos/os/recipes/src/virtio_fb_drv/hash +++ b/repos/os/recipes/src/virtio_fb_drv/hash @@ -1 +1 @@ -2022-08-16 2078b12d6ba8aee8781724d316d4ee6943337b01 +2022-08-30 cf0cf0a8a6e93c4ac97a00e3e1fde5a9916d0cf5 diff --git a/repos/os/recipes/src/virtio_input_drv/hash b/repos/os/recipes/src/virtio_input_drv/hash index e440317149..14e554eb23 100644 --- a/repos/os/recipes/src/virtio_input_drv/hash +++ b/repos/os/recipes/src/virtio_input_drv/hash @@ -1 +1 @@ -2022-08-16 1d0a1c603ed7e06c11662f542784bbf370eda1b6 +2022-08-30 177d558b7be8e589ccade499f731c78f7bfdc99f diff --git a/repos/os/recipes/src/virtio_nic_drv/hash b/repos/os/recipes/src/virtio_nic_drv/hash index b47f1dc281..2879443d7e 100644 --- a/repos/os/recipes/src/virtio_nic_drv/hash +++ b/repos/os/recipes/src/virtio_nic_drv/hash @@ -1 +1 @@ -2022-08-16 055b89ccf06bbebe5f4efd21264936145cd11837 +2022-08-30 227fde817e628f13dfbbe4b9e3a3f8fede7ea947 diff --git a/repos/os/recipes/src/vmm/hash b/repos/os/recipes/src/vmm/hash index ee221b6a81..d01175b10d 100644 --- a/repos/os/recipes/src/vmm/hash +++ b/repos/os/recipes/src/vmm/hash @@ -1 +1 @@ -2022-08-16 cf287979d1f7fed2cd8e79fc1031216db3ec1fbd +2022-08-30 a271e57cc177b1a7ebe7164f7bcb791dfcce6a56 diff --git a/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash b/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash index d9a802fd8f..c8bfd5d1de 100644 --- a/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash +++ b/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash @@ -1 +1 @@ -2022-08-16 db6b0b6bc4c6fabbc648f7171507c791395b9b55 +2022-08-30 e0450aee90f72fe9bf15f86f27460536a59712dd diff --git a/repos/pc/recipes/pkg/wifi/hash b/repos/pc/recipes/pkg/wifi/hash index 1b33aff3a8..52cdce2f18 100644 --- a/repos/pc/recipes/pkg/wifi/hash +++ b/repos/pc/recipes/pkg/wifi/hash @@ -1 +1 @@ -2022-08-16 be469496a924bbd3d1ab8b48a5681849a4424c26 +2022-08-30 182e4a2d93bb4cc2488190f7a714fc48dc7e1a68 diff --git a/repos/pc/recipes/src/pc_intel_fb_drv/hash b/repos/pc/recipes/src/pc_intel_fb_drv/hash index f62feb42fd..2436d8302a 100644 --- a/repos/pc/recipes/src/pc_intel_fb_drv/hash +++ b/repos/pc/recipes/src/pc_intel_fb_drv/hash @@ -1 +1 @@ -2022-08-16 81daca856da36c4d98d8b1e6309c730926655979 +2022-08-30 1bca1343bd4eff0f0c3ee5433890fd7d79d3ab32 diff --git a/repos/pc/recipes/src/pc_usb_host_drv/hash b/repos/pc/recipes/src/pc_usb_host_drv/hash index 0f375463e7..fd36eeafea 100644 --- a/repos/pc/recipes/src/pc_usb_host_drv/hash +++ b/repos/pc/recipes/src/pc_usb_host_drv/hash @@ -1 +1 @@ -2022-08-16 0b9a2cca75e2d61807f6fdfe72275eb18485313a +2022-08-30 eff7d016819dc3e378faee87b59cbac94aab50a6 diff --git a/repos/pc/recipes/src/pc_wifi_drv/hash b/repos/pc/recipes/src/pc_wifi_drv/hash index 5adfcc5cbf..eeb39f6a2d 100644 --- a/repos/pc/recipes/src/pc_wifi_drv/hash +++ b/repos/pc/recipes/src/pc_wifi_drv/hash @@ -1 +1 @@ -2022-08-16 802db2aecaacfeb54a046dd5f7ed8087c7084f1e +2022-08-30 4df0ef3b45cc098aa5d7c8305d7c9cf4b14955e0 diff --git a/repos/ports/recipes/pkg/report_dump/hash b/repos/ports/recipes/pkg/report_dump/hash index e5c9237c12..feb2c9d589 100644 --- a/repos/ports/recipes/pkg/report_dump/hash +++ b/repos/ports/recipes/pkg/report_dump/hash @@ -1 +1 @@ -2022-08-16 193638ac2d0f7b3b86d38bf5c1a564fe0fdfcb7a +2022-08-30 761fb6a86a9394e6bac0e2c9d2ab5f96c788966d diff --git a/repos/ports/recipes/pkg/system_shell/hash b/repos/ports/recipes/pkg/system_shell/hash index 2b715482de..feed71f643 100644 --- a/repos/ports/recipes/pkg/system_shell/hash +++ b/repos/ports/recipes/pkg/system_shell/hash @@ -1 +1 @@ -2022-08-16 03b3ebd38de7c4c2cecc1f15e1dd1e33a88bf913 +2022-08-30 20689e09adf784f05b602dc7627d7e821c53b0e2 diff --git a/repos/ports/recipes/pkg/vbox5-nova-capture/hash b/repos/ports/recipes/pkg/vbox5-nova-capture/hash index 3aefe99d81..e4f243f197 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-capture/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-capture/hash @@ -1 +1 @@ -2022-08-16 d35df59c845492dc0300893df24ad6f8fd62f9e8 +2022-08-30 c03192c93df65c5cc6ece0f0a338962005463fbe diff --git a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash index 4444d4ff62..a0d3bac41d 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash @@ -1 +1 @@ -2022-08-16 be41a6d8566e4e2e12e89bb762dcb19892178a7d +2022-08-30 4009d26264f7ed93a65f17f2d6e366fcf1b5d2e4 diff --git a/repos/ports/recipes/pkg/vbox5/hash b/repos/ports/recipes/pkg/vbox5/hash index 0a94d2a267..e0acfc6783 100644 --- a/repos/ports/recipes/pkg/vbox5/hash +++ b/repos/ports/recipes/pkg/vbox5/hash @@ -1 +1 @@ -2022-08-16 be02ccd74b281554f841aecda68e2d4fd11d44f6 +2022-08-30 50027a6c7baa4c90436c7cc83339f7b28fdc7690 diff --git a/repos/ports/recipes/pkg/vbox6-capture/hash b/repos/ports/recipes/pkg/vbox6-capture/hash index 5509165956..55a8c6b7c4 100644 --- a/repos/ports/recipes/pkg/vbox6-capture/hash +++ b/repos/ports/recipes/pkg/vbox6-capture/hash @@ -1 +1 @@ -2022-08-16 cf955e147c879d8d4e768b46b9a43ba64b43c6d2 +2022-08-30 fd0c4016721d25fc546e0bfed93d0e3b388cb0cb diff --git a/repos/ports/recipes/pkg/vbox6/hash b/repos/ports/recipes/pkg/vbox6/hash index c55fe613b8..6755274710 100644 --- a/repos/ports/recipes/pkg/vbox6/hash +++ b/repos/ports/recipes/pkg/vbox6/hash @@ -1 +1 @@ -2022-08-16 a70630091e5d879b0108defcb6e4e68388086854 +2022-08-30 1c46011fe132b73c167aae2e0925d2c9dad5d978 diff --git a/repos/ports/recipes/src/bash-minimal/hash b/repos/ports/recipes/src/bash-minimal/hash index b0806b3f4e..0a1f7575f8 100644 --- a/repos/ports/recipes/src/bash-minimal/hash +++ b/repos/ports/recipes/src/bash-minimal/hash @@ -1 +1 @@ -2022-08-16 d855a3d04fdcbf197e9840473ed43d6c6ca7f2b1 +2022-08-30 4e01ba599b1e81d6f383a2fe391c248db5b9e91c diff --git a/repos/ports/recipes/src/bash/hash b/repos/ports/recipes/src/bash/hash index b9cd05a337..7d600c7970 100644 --- a/repos/ports/recipes/src/bash/hash +++ b/repos/ports/recipes/src/bash/hash @@ -1 +1 @@ -2022-08-16 7412401ad560a6016508df054e6b2a7c12ce7c87 +2022-08-30 eca698181c3c952580d72e5a52f7e4785e54559b diff --git a/repos/ports/recipes/src/binutils_x86/hash b/repos/ports/recipes/src/binutils_x86/hash index 1daf645339..2613e7ce3d 100644 --- a/repos/ports/recipes/src/binutils_x86/hash +++ b/repos/ports/recipes/src/binutils_x86/hash @@ -1 +1 @@ -2022-08-16 fa5da1569bd020ccde4403e14988ebaf7fe1300d +2022-08-30 004d553fcdf16bf7912f5cdaead028065c7a06c5 diff --git a/repos/ports/recipes/src/coreutils-minimal/hash b/repos/ports/recipes/src/coreutils-minimal/hash index f82a616887..a4d435e825 100644 --- a/repos/ports/recipes/src/coreutils-minimal/hash +++ b/repos/ports/recipes/src/coreutils-minimal/hash @@ -1 +1 @@ -2022-08-16 3da85954e67584cadca7ac15e75dff422e109682 +2022-08-30 5ca3aaf8787681887803a0874e3c0b3739b0c4a9 diff --git a/repos/ports/recipes/src/coreutils/hash b/repos/ports/recipes/src/coreutils/hash index 2430881bf4..f07e65c05c 100644 --- a/repos/ports/recipes/src/coreutils/hash +++ b/repos/ports/recipes/src/coreutils/hash @@ -1 +1 @@ -2022-08-16 4ee8c8f065c40dae4ff45c1fa76d70e03f449f82 +2022-08-30 cb5f3326adf4b009b24bfa18b2bf18448dc88dac diff --git a/repos/ports/recipes/src/diffutils/hash b/repos/ports/recipes/src/diffutils/hash index 3c8925b270..08024486d4 100644 --- a/repos/ports/recipes/src/diffutils/hash +++ b/repos/ports/recipes/src/diffutils/hash @@ -1 +1 @@ -2022-08-16 c76056fcb7c4a3bdbb5807b5112ae93377f81e10 +2022-08-30 c685681a37ed3d64f8206df76bfa575d114a92b9 diff --git a/repos/ports/recipes/src/e2fsprogs-minimal/hash b/repos/ports/recipes/src/e2fsprogs-minimal/hash index ddf26cc702..b694d897e4 100644 --- a/repos/ports/recipes/src/e2fsprogs-minimal/hash +++ b/repos/ports/recipes/src/e2fsprogs-minimal/hash @@ -1 +1 @@ -2022-08-16 f58b827cdcd631b771c4f07f8ff8c087cf9e8883 +2022-08-30 143e7e64f872e51785d58255ec76f91523dc741d diff --git a/repos/ports/recipes/src/e2fsprogs/hash b/repos/ports/recipes/src/e2fsprogs/hash index a470da7878..bc49e921fa 100644 --- a/repos/ports/recipes/src/e2fsprogs/hash +++ b/repos/ports/recipes/src/e2fsprogs/hash @@ -1 +1 @@ -2022-08-16 12322484ecbc701401ad8a8b4d3741caed9fd89d +2022-08-30 371c401e4c97b0f9696eda87e2f40967c2899f1e diff --git a/repos/ports/recipes/src/findutils/hash b/repos/ports/recipes/src/findutils/hash index d61d42c270..ed91dfad77 100644 --- a/repos/ports/recipes/src/findutils/hash +++ b/repos/ports/recipes/src/findutils/hash @@ -1 +1 @@ -2022-08-16 7a127151bd9b972dea13b0cb8b03b82d0d8f523e +2022-08-30 1ec546375092620ce72fbccfb2c22e92b478e525 diff --git a/repos/ports/recipes/src/gcc_x86/hash b/repos/ports/recipes/src/gcc_x86/hash index db9311e50c..8ccf780063 100644 --- a/repos/ports/recipes/src/gcc_x86/hash +++ b/repos/ports/recipes/src/gcc_x86/hash @@ -1 +1 @@ -2022-08-16 598afa980ee89c5aff54efa88091ac0a05a7da72 +2022-08-30 fd56f76fc34a458a383e318a9e68ace08b85b176 diff --git a/repos/ports/recipes/src/gnumake/hash b/repos/ports/recipes/src/gnumake/hash index 05af5e6a12..b5a7abd65a 100644 --- a/repos/ports/recipes/src/gnumake/hash +++ b/repos/ports/recipes/src/gnumake/hash @@ -1 +1 @@ -2022-08-16 5695ba81fde03922d94177d83235d0da1917121c +2022-08-30 cf84399c1d84934101de86facc16c3c4f729c24e diff --git a/repos/ports/recipes/src/grep/hash b/repos/ports/recipes/src/grep/hash index 712fde1712..70b0960360 100644 --- a/repos/ports/recipes/src/grep/hash +++ b/repos/ports/recipes/src/grep/hash @@ -1 +1 @@ -2022-08-16 0beb1fcd8285390904731da1ed64e85df1860232 +2022-08-30 36fb5dbc8605aebf91e1a2b650748c6ca93ecae2 diff --git a/repos/ports/recipes/src/less/hash b/repos/ports/recipes/src/less/hash index e77f0fb2b4..c7a41200dc 100644 --- a/repos/ports/recipes/src/less/hash +++ b/repos/ports/recipes/src/less/hash @@ -1 +1 @@ -2022-08-16 1f5ead28fa372bf27a8404266e562f209e27f586 +2022-08-30 ec1c540b0e235f06c523c36a8484517903662a02 diff --git a/repos/ports/recipes/src/lighttpd/hash b/repos/ports/recipes/src/lighttpd/hash index 36cfc5ee22..55e962551b 100644 --- a/repos/ports/recipes/src/lighttpd/hash +++ b/repos/ports/recipes/src/lighttpd/hash @@ -1 +1 @@ -2022-08-16 deb569d6d81e051bd13d06a76ee00ad2c8859026 +2022-08-30 e1ec2a914a651dafd2d6a66e6d14eeb5fdd714a2 diff --git a/repos/ports/recipes/src/sed/hash b/repos/ports/recipes/src/sed/hash index fbefe49e38..7294bbadcc 100644 --- a/repos/ports/recipes/src/sed/hash +++ b/repos/ports/recipes/src/sed/hash @@ -1 +1 @@ -2022-08-16 21e526313f57d7b665dd23931dab36d11d70a07c +2022-08-30 57c0bca0dad88dbb4cab95d7d324b4b5f6a3dec8 diff --git a/repos/ports/recipes/src/tar/hash b/repos/ports/recipes/src/tar/hash index df32de7044..4b78c4a7ab 100644 --- a/repos/ports/recipes/src/tar/hash +++ b/repos/ports/recipes/src/tar/hash @@ -1 +1 @@ -2022-08-16 363794328e37bae8a44e96d443440d99fb068fcc +2022-08-30 eee4bdb8fc6c646fadaa77291a85accc314fe60f diff --git a/repos/ports/recipes/src/tclsh/hash b/repos/ports/recipes/src/tclsh/hash index d373c1b620..830fd45ad6 100644 --- a/repos/ports/recipes/src/tclsh/hash +++ b/repos/ports/recipes/src/tclsh/hash @@ -1 +1 @@ -2022-08-16 62e801b7e618f246b7cfb69d98e24c54f19774e7 +2022-08-30 24f71a064a8b11d0eb81cd3c9b1e6fe8df089b59 diff --git a/repos/ports/recipes/src/vbox5-nova/hash b/repos/ports/recipes/src/vbox5-nova/hash index f551799d26..f9d619dd61 100644 --- a/repos/ports/recipes/src/vbox5-nova/hash +++ b/repos/ports/recipes/src/vbox5-nova/hash @@ -1 +1 @@ -2022-08-16 4f7b53e9754f36b139b0195cabdaa2ea41ffcc57 +2022-08-30 80e7faccd2b1ceb4fcc47a14d3c2e216c77eeaf3 diff --git a/repos/ports/recipes/src/vbox5/hash b/repos/ports/recipes/src/vbox5/hash index 4675f0526a..b28fc8c760 100644 --- a/repos/ports/recipes/src/vbox5/hash +++ b/repos/ports/recipes/src/vbox5/hash @@ -1 +1 @@ -2022-08-16 e7d9bd432e031fd667f5bed29161031ea516cbc2 +2022-08-30 d2261060dc4de366c2f60c64514786ecfb28fbc2 diff --git a/repos/ports/recipes/src/vbox6/hash b/repos/ports/recipes/src/vbox6/hash index a7e67fb5c7..9f80c53c5a 100644 --- a/repos/ports/recipes/src/vbox6/hash +++ b/repos/ports/recipes/src/vbox6/hash @@ -1 +1 @@ -2022-08-16 09da4dd5e9c60ed041caaeecb9c48801da5be1b9 +2022-08-30 f6eadd025ae2d557d0daf014a0bc071c4a27d6c5 diff --git a/repos/ports/recipes/src/verify/hash b/repos/ports/recipes/src/verify/hash index 4d25d12895..10a501af2a 100644 --- a/repos/ports/recipes/src/verify/hash +++ b/repos/ports/recipes/src/verify/hash @@ -1 +1 @@ -2022-08-16 542a10333ff9eb06797cb6b51c9e84dcc7bc7447 +2022-08-30 2243fe357a50123349c299967b04fd1d23cf32f4 diff --git a/repos/ports/recipes/src/vim-minimal/hash b/repos/ports/recipes/src/vim-minimal/hash index c5da226b0d..e210efd9dc 100644 --- a/repos/ports/recipes/src/vim-minimal/hash +++ b/repos/ports/recipes/src/vim-minimal/hash @@ -1 +1 @@ -2022-08-16 849371b46c1196690a7d4f6b1ea182af8adc84eb +2022-08-30 30e5c88017752ae7ab7132326a1dc64f2bbe3247 diff --git a/repos/ports/recipes/src/vim/hash b/repos/ports/recipes/src/vim/hash index 4e31b98aeb..573b0bf1ff 100644 --- a/repos/ports/recipes/src/vim/hash +++ b/repos/ports/recipes/src/vim/hash @@ -1 +1 @@ -2022-08-16 3b899a26f379368847e9ecc921d38ee4a2ce2ee8 +2022-08-30 ff4a2182cf2f71fbb3fb3f7832ffc71bdfc471d2 diff --git a/repos/ports/recipes/src/which/hash b/repos/ports/recipes/src/which/hash index 8d71af8000..a2bd68950e 100644 --- a/repos/ports/recipes/src/which/hash +++ b/repos/ports/recipes/src/which/hash @@ -1 +1 @@ -2022-08-16 8bdb0bd9a2bebf180f133c86f53bc6f3cda72e51 +2022-08-30 ddbb4e412291e26c26d235ebfc6203fc9e313dd2 From 6c3d6253efb4970e2308f318ffd4434939e211d5 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 26 Aug 2022 14:11:05 +0200 Subject: [PATCH 194/354] Release notes for version 22.08 --- doc/release_notes/22-08.txt | 866 ++++++++++++++++++++++++++++++++++++ 1 file changed, 866 insertions(+) create mode 100644 doc/release_notes/22-08.txt diff --git a/doc/release_notes/22-08.txt b/doc/release_notes/22-08.txt new file mode 100644 index 0000000000..0b6d144f10 --- /dev/null +++ b/doc/release_notes/22-08.txt @@ -0,0 +1,866 @@ + + + =============================================== + Release notes for the Genode OS Framework 22.08 + =============================================== + + Genode Labs + + + +The overarching topic of version 22.08 is the emerging phone version of the +Genode-based Sculpt OS, targeting the PinePhone. The immense breadth and depth +of this line of work presented in Section [Genode coming to the phone] +touches topics as diverse as telephony, mobile-data connectivity, a custom +user interface, a mobile web browser, the GPU, SD-card access, USB, and audio +control. + +With the growing sophistication of Genode-based systems, performance +optimizations come more and more into focus. Aided by the new tools introduced +in Section [Enhanced tooling for system tracing], we were able to profoundly +improve the network performance of Genode's user-level network routing +component. Speaking of optimizations, the current release reduces the CPU +overhead of our Linux device-driver environment +(Section [Linux-device-driver environment (DDE Linux)]) and +improves the responsiveness of GUIs based on Genode's menu-view component +(Section [Menu-view performance]). + +Further topics of the new version reach from our forthcoming platform-driver +consolidation across PC and ARM-based devices, over the use of USB smart +cards, to new VirtIO drivers on RISC-V. + + +Genode coming to the phone +########################## + +Our [https://genode.org/about/road-map - road map] for this year states the +goal of reaching a useful base line of functionality of Genode on the +PinePhone. This entails the principle ability to use the device as a phone - +receiving and issuing voice calls - and a mobile internet browser. Once +reached, this base line of functionality will allow us to routinely use Genode +on the device ("eating our own dog food"), experience pain points, guide +optimization efforts towards user-visible areas that matter, and faithfully +evaluate non-functional aspects like battery lifetime with real-world work +loads under realistic conditions. + +For the Genode-based phone, we pursue the combination of a minimally-complex +trustworthy base system with a generally untrusted Web browser as application +runtime. The feature set of the base system corresponds to the bare-bones +[https://genode.org/download/sculpt - Sculpt OS] extended with appliance-like +feature-phone functionality. Thanks to Sculpt's rigid component-based +structure and the overall low complexity, it promises high reliability and +security. The application runtime is hosted on top of the base system without +tainting the assurance of the base system. In contrast to the appliance-like +and rather static feature set of the base system, the application runtime +anticipates a great variety of modern-day application scenarios, universally +expected commodity user-interface paradigms, and fast-paced software updates. +E.g., we aspire the use of WebRTC-based video conferencing via Jitsi as one +reference scenario. + +Since we succeeded in bringing the Chromium web engine - the base technology +of most modern web browsers - to life as a +[https://genodians.org/nfeske/2022-01-27-browser-odyssey - native Genode component], +users of Sculpt OS are able to use a fully featured web browser without +relying on virtualization. With the use case of the browser on a mobile phone +in sight, we already ensured that the browser would work on 64-bit ARM +hardware. However, whereas we could showcase the technical feasibility of +Chromium on Genode, the practical usability eventually depends on a suitable +mobile user experience, which was largely disregarded by the desktop-oriented +Falkon browser that we enabled on Genode. + + +Assessment +---------- + +Fortunately, we discovered the Morph web browser while experimenting with +[https://xnux.eu/p-boot-demo/ - various Linux distributions] on the PinePhone. +Among the various alternatives to Android, the Ubuntu Touch UI - alongside +Sailfish OS - stood out for its refined user experience, subjectively. +The unobtrusive Morph browser as used by default on Ubuntu Touch left a +particularly good impression on us. To our delight, we found that this +browser relies on Qt5 and the Chromium web engine as its foundation, both of +which we already had enabled on Genode. Out of this observation grew the idea +of reusing the Morph browser as application runtime on our Genode-based phone. +But we had to consider several risks. + +First, would the heaviness of Chromium overwhelm the rather resource-constrained +PinePhone hardware when executed on Genode? In contrast to Linux, Genode's +POSIX environment is less sophisticated and - most importantly - does not +provide the over-provisioning of memory resources. The latter could be a show +stopper. + +Second, the build mechanics of the browser deviate from the beaten track we +covered so far, specifically the use of QMake. The Morph browser +unconditionally depends on CMake as build tool. Even though we gathered +[https://genodians.org/nfeske/2019-11-25-goa - early experiences], with using +CMake for building Genode executables, we did not attempt using CMake for +complex Qt5 applications targeting Genode so far. + +Finally, we discovered a so-called Ubuntu-Touch-UI toolkit as an +additional dependency over Qt5. It presumably extends Qt5's QML with +custom user-interface widgets for mobile user interfaces. In contrast +to the multi-platform Qt5 framework, Ubuntu Touch generally targets +Linux only, which raised a number of concerns with respect to hidden +assumptions on the underlying platform. For example, the expectation +of a certain service manager, the direct use of the Linux kernel interface, +or accidentally complex library dependencies. + + +Methodology +=========== + +As practiced during our work with bringing the Chromium-based Falkon web +browser to Genode, we took several intermediate steps to mitigate technical +risks as far as possible. + +Pruning dependencies +-------------------- + +The first step was building the Morph browser from source for its regular +designated target platform, namely Linux. This step allowed us to validate the +functionality of the browser built from source as opposed to merely testing a +binary package. During this process, we learned about the mandatory dependence +on CMake as build tool. We also identified the following library dependencies +as sources of uncertainty. + +*Ubuntu-UI toolkit* is a collection of QML widgets for smartphone apps. +It is built via QMake and comes with its own set of dependencies. +We were specifically concerned by QtSystemInfo, QtOrganizer, D-Bus, and +gettext. Genode has no meaningful equivalent to any of these dependencies. +The *Ubuntu Themes* dependency comprises graphical assets, used on Ubuntu +Touch. *Ubuntu-UI extras* extends Qt's feature set by functionality like the +'TabsBar' QML-Widget introduces additional transitive dependencies +such as the [https://www.cups.org/ - CUPS printing system] or +the [https://exiv2.org/ - Exiv2] image metadata library. + +Further dependencies worth noting are QNetworkInterface, QtConcurrent, QtDBus, +QtSystemInfo, unity-action-api, and D-Bus. Those libraries do not exist in +Genode and may even raise conceptual problems. For example, the D-Bus +inter-component mechanism on Linux is not in line with Genode's +capability-based inter-component communication. + +With the first manually built executable of Morph created on Linux, we could +repeatedly remove dependencies piece by piece and validate the functioning of +the browser after each step. We ultimately reached a point where most of the +library dependencies could be cut off while the core functionality of the +browser - the ability to view web pages - stayed intact. The resulting +minimized version of the Morph browser thereby served as starting point for +the subsequent porting work to Genode. + +Re-targeting to Genode +---------------------- + +To stay as close as possible to the original browser, we decided to reuse the +browser's build system by tweaking the CMake build tool such that the project +could be cross compiled for Genode, similar to the approach we successfully +employed for QMake in the past. At first, we targeted Genode/Linux on x86, +which is still close to the browser's natural environment. Once the first +version of the browser came to life, we immediately cross-validated the result +on the 64-bit ARM architecture as this is our primary target. Subsequently, we +moved away from Linux by moving the browser over to NOVA (on Sculpt) on PC +hardware as well as our custom base-hw microkernel in order to target the +actual PinePhone. + +[image touch_ui] + Ubuntu-Touch UI gallery demo running on Genode + +The methodology mirrored in large parts the approach we took for the original +porting of the Chromium web engine, but it was a much smoother experience +given that all road blocks we encountered during our Chromium work are solved +problems by now. Image [touch_ui] shows the browser's underlying +user-interface tool kit in action, running directly on Genode. Image [morph] +shows the Morph browser hosted in Genode's window system. + +[image morph] + Morph browser running on Genode + + +Unexpected caveats +================== + +However, the smooth ride of re-targeting the browser to Genode ended once +we discovered the extremely poor interactive performance of the browser +running on Genode. This is in contrast to our prior experience with the +Chromium-based Falkon browser which achieved comparable performance to Linux. + +The performance degradation originated from the Ubuntu-UI toolkit, which +has a hard dependency on OpenGL despite being built atop the Qt5 framework. +In several instances, the Ubuntu-UI toolkit accesses the OpenGL context +directly, which is handled by a software fallback implementation in the +Mesa library. We found the removal of those offending accesses infeasible +because this change would cause several widgets appearing incomplete. +To attain the visual completeness of the user interface, we also had to +enhance the Genode-specific back end of Qt (QPA). However, even though +we achieved correctly looking results, the performance of Mesa3D without +GPU acceleration made the user interface practically unusable, even on +powerful PC hardware, not speaking of the resource-constrained PinePhone. +We came to the conclusion that the Morph browser's hard dependency +on hardware-accelerated graphics cannot be worked around. This realization, +in turn, spawned the line of work reported in +Section [Hardware-accelerated graphics]. + +As another - but arguably much less dramatic - caveat, we found the touch user +interface behaving strangely in some situations when running on Genode. The +reason turned out to be a disparity of Genode's notion of touch-release events +from the expectations of Qt. Whereas Genode's input-event interface does not +report a positional value of a touch-release event, Qt expects a positional +value that corresponds to the original touch event. Fortunately, once this +disparity had been identified, we could easily emulate the expected behavior +locally in Genode's QPA plugin. + + +Hardware-accelerated graphics +============================= + +As mentioned above, we were taken by surprise by the hard dependency of the +Morph browser on GPU-accelerated graphics. Even though we have explored the +principle use of a GPU on an ARM-based platform before, our prior line of work +was targeting the Vivante GPU of the NXP i.MX8 SoC, which is different from +the Mali-400 GPU as present in the PinePhone's A64 SoC. Originally, we did not +plan to deal with the PinePhone's GPU at the current stage. But the +requirement of the Morph browser abruptly changed our priorities. + +As a rapid experiment, we took the challenge to port the Lima driver for the +Mali-400 GPU from Linux to Genode and combine it with the matching user-level +driver code of the Mesa library. Even though this experiment was pursued on +short notice and risky, it was at least a tangible straw. To our delight, +however, the first functional rapid prototype came to life after merely two +weeks of work, which is almost an order of magnitude faster than our past +efforts. The reason of this success is many-fold. First, our recently +established methodology and tooling for porting Linux device drivers - as +described in our comprehensive +[https://genode.org/documentation/genode-platforms-22-05.pdf - Porting Guide] - +streamlines the formerly labor-intensive grunt work. Second, we greatly +benefited from our practical experience with GPUs accumulated over the past +few years. And third, even though the Mali-400 is different from the Vivante +GPU, the integration into the Linux GPU stack follows very similar patterns, +unlike Intel GPUs. So we found our existing knowledge largely applicable. + +[image glmark2] + GLMark2 reference application using the GPU + +Following the initial rapid prototype, we successively refined this work to +the point where the GPU driver became usable for the Morph browser on the +PinePhone. Thanks to the added driver, the interactive performance got boosted +to an acceptable level. + + +Mobile data connectivity +======================== + +It goes without saying that a web browser requires network connectivity, +which is a topic we had left unaddressed on the PinePhone until now. +However, given our +[https://genode.org/documentation/release-notes/22.05#Telephony - recent line] +of modem-related work in the context of telephony, we foresaw a low-complexity +solution to attain mobile data connectivity. + +Today's LTE modems offer +[https://genodians.org/ssumpf/2020-12-04-mbim - QMI or MBIM] protocol support +in order to configure and handle mobile data connections. Both protocols are +in binary format and require a separate USB device (called Wireless Mobile +Communication Device). For Genode, this would mean to add support for this +device to USB while additionally the QMI or MBIM library would have to be +ported and adjusted to Genode. For the +[https://www.quectel.com/product/lte-eg25-g - Quectel EG25 modem] +in the PinePhone, we found a much simpler solution to handle mobile data +connections. The modem can be configured to emulate a USB Ethernet device +([https://en.wikipedia.org/wiki/Ethernet_over_USB - ECM device]). +In this operational mode, the modem will automatically connect to the carrier +and register itself as USB Ethernet device at the PinePhone's USB host +controller. Genode can thereby access the device through the USB networking +and CDC Ethernet drivers. The modem also offers a DHCP server and will hand +out a local IP address upon a DHCP request to Genode. Internally the modem +will use [https://en.wikipedia.org/wiki/Network_address_translation - NAT] in +order to translate IP requests from Genode to the address received from the +carrier. + +As a prerequisite to conduct this solution, we had to enable a USB +host-controller driver for the PinePhone. Of course, we took advantage of our +modern DDE Linux porting approach for this work, which allowed to attain a +functional USB driver in merely two weeks. This driver must be combined with +our existing USB Ethernet driver (usb_net) that we swiftly extended to support +ECM based devices. + +With this driver infrastructure in place, the USB network device of the modem +appears as uplink to Genode's NIC router. The NIC router, in turn, +successfully obtains a local IP address that is network-translated by the +modem. At the carrier side, IP network connectivity can be established by +issuing AT-protocol commands over UART. So the first prototype of the +low-level network connectivity worked as anticipated. With this practical way +of keeping the complexity of binary configuration protocols out of the loop, +we can maintain the low-complexity implementation of telephony and SIM +configuration via the UART control channel while regarding IP connectivity - +and the unavoidable complexity of USB - as an entirely complementary feature. + + +Phone flavor of Sculpt OS +========================= + +Seeing the various puzzle pieces of the Morph browser scenario - GPU +acceleration, data connectivity, the browser itself - coming together, it was +time for the integration of those pieces into an overall system. The natural +basis of such a Genode-based system is +[https://genode.org/download/sculpt - Sculpt OS], +which complements Genode with universally expected operating-system features +such as interactive system configuration as well as the installation and +deployment of software packages. + +Sculpt OS was originally designed for PC-based use cases. Its administrative +user interface is largely mouse and keyboard driven, and network connectivity +is usually attained by a wired or wireless LAN connection. Although we +presented a first version of +[https://fosdem.org/2022/schedule/event/nfeske/ - Sculpt OS on the PinePhone] +earlier this year, the call for a touch-oriented user interface is more than +obvious. Hence, we went forward with creating a phone-specific variant +of Sculpt. Similar to the original Sculpt OS, the system consists of two +largely isolated domains, the administrative domain called Leitzentrale and +the domain of user-installed components called desktop. The user can switch +between both domains at any time using a secure attention key or gesture. +On the phone, the Leitzentrale domain plays the role of a feature-phone +appliance that provides the most fundamental device functionality such +as the interaction with the SIM card, power control, telephony, network +configuration, storage management, and software installation. We approached +the concept of the user interface from a clean slate striving for simplicity. + +[image sim_pin] + Emerging mobile-phone flavor of Sculpt OS + +As the first use case, we addressed telephony, displaying incoming calls, +presenting the options for accepting/rejecting calls, and initiating calls +using a dial pad. By modelling these scenarios, we could validate the +user-interface concept of the evolving phone version of Sculpt's Leitzentrale. + + +User interaction with the SIM card +================================== + +The administrative user interface mentioned above must be matched by the +underlying middleware that talks to the modem. Remember that our +[https://genode.org/documentation/release-notes/22.05#Telephony - original] +telephony scenario relied on the manual use of the modem's AT commands. +We ultimately have to control the modem's control channel by software using an +AT protocol stack. To bridge this gap with the lowest complexity possible, we +created a simple AT protocol implementation that is specifically designed for +Genode's state-driven component model. +The modem driver - hosting the AT protocol driver - accepts a configuration +that expresses the desired state (as opposed to desired actions). For example, +a configuration may look as simple as follows. + +! +! +! + +The AT protocol implementation takes this configuration and the current modem +state as the basis for determining a sequence of modem commands needed to +attain the desired state. For example, if the modem is not powered, the driver +steps through the powering sequence. Or in case the SIM PIN is required, the +driver supplies the corresponding command to supply the configured PIN. + +To allow interactive usage, the driver supports dynamic reconfiguration. +E.g., to cancel the outbound call of the example above, the configuration +would be updated with the '' node removed. Given this approach, an +interactive user interface comes down to generating such simple +configurations. + +Vice versa, the driver exports the modem's state as a state report, which is +updated whenever the modem state changes. E.g., an incoming call is reflected +to the consumer of this state report with all information relevant for an +interactive user interface. For example, the state report entails the power +state, PIN state, and call states (incoming, outbound, alerting, rejected). +This design nicely hides the peculiarities of the AT protocol from Genode's +component interfaces. + +At the current stage, with less than 1000 lines of code, the AT protocol +implementation suffices for basic telephony needs, supporting the interaction +with the SIM card, managing call states, initiating calls, and driving the +modem power up and down. It also takes care of establishing the modem +configuration needed for USB ECM networking. + + +Current state +============= + +The current version of the phone variant of Sculpt OS is able to control the +power state of the modem, interact with the SIM card (PIN entry), initiate +phone calls via a dial pad, pick up inbound calls, establish mobile-data +network connectivity, and deploy a preconfigured application scenario. +The interactive switching between the base system and the application runtime +can be triggered at any time by touching the left border of the touch screen. + +[image sculpt_pinephone] + The runtime graph of the base system (left) reveals the relationships of the + Morph browser with other components (right). + +This flavor of Sculpt OS evolves in the +[https://github.com/nfeske/genode-allwinner - genode-allwinner] repository, +specifically within the _sculpt/_ and _src/app/phone_manager/_ directories. +The latter asserts the role of Sculpt's _gems/src/app/sculpt_manager_. +We invite seasoned developers - especially those who are following the +[https://genodians.org/nfeske/index - Pine-fun article series] - to experiment +with the new phone variant. It can be built via the following command: + +| built/arm_v8a$ make run/sculpt KERNEL=hw BOARD=pinephone SCULPT=phone + +For a broader audience, we plan to provide a ready-to-use SD-card image for +the PinePhone in tandem with the next release of Sculpt OS. + + +Enhanced tooling for system tracing +################################### + +Since release 13.08, Genode features a +[https://genode.org/documentation/release-notes/13.08#Light-weight_event_tracing - light-weight event-tracing facility] +that comes in form of core's TRACE service. Up to now, it has merely been used +for capturing textual trace messages. The two prominent monitor components are +the +[https://genode.org/documentation/release-notes/18.02#New_trace-logging_component - trace_logger] +and the +[https://genode.org/documentation/release-notes/19.08#Tracing - VFS plugin] + +The trace recorder is a new monitor component that is designed for binary trace +formats. Currently, it supports the Common Trace Format (CTF) and pcapng. +CTF is a compact and scalable format for storing event traces. It is supported +by [https://www.eclipse.org/tracecompass/ - TraceCompass], an Eclipse-based +tool for trace analysis and visualization. Pcapng is a packet-capture format +used by Wireshark. + +In order to support capturing network packets, we added a 'trace_eth_packet()' +method to Genode's trace-policy API and equipped the NIC router with a +'trace_packets' option to control packet capturing on domain level. For manual +instrumentation of components, we also added a 'checkpoint()' method to the +trace-policy API. + +For more details, please refer to the following Genodians article. + +:Identifying network-throughput bottlenecks with trace recording: + + [https://genodians.org/jschlatow/2022-08-29-trace-recorder] + + +Base framework and OS-level infrastructure +########################################## + +Networking optimizations +======================== + +With the new trace recorder at hand, we took an effort in optimizing Genode's +network throughput. First, we implemented a benchmark component called +"nic_perf" that sends and/or receives an infinite stream of UDP packets in +order to stimulate the involved networking components in separation. As a +consequence of its central role, we particularly focused on the NIC router as +a starting point. + +As a base line, we took two 'nic_perf' components: one as a sender and the other +as a receiver. By taking any copying or packet inspection out of the loop, we +could verify that the packet-stream interface holds up to our expectations with +respect to attainable throughput. However, as soon as we put a NIC router in +between, the throughput dropped to approx. 10% of our base line. On older +ThinkPads, this meant sub-gigabit throughput and on a Cortex-A9 @ 666MHz we +barely jumped over the 100Mbit mark. + +Since we were not able to explain the substantial decrease in packet throughput, +we investigated with the help of the trace recorder and 'GENODE_LOG_TSC'. +As it turned out, the NIC router spent most of its time with exception handling +during routing-rule lookup, which is done for every packet. Since there are +multiple types of rules, a lookup takes place for every rule type. If no rule +was found for particular type, an exception was thrown and caught, which +turned out to be incredibly expensive. We therefore eliminated exceptions from +common-case code paths, more precisely from rule lookup, from ARP-cache +lookup, and from packet allocation. The result impressed us with a tripled +throughput. + +Another bottleneck that we identified were frequent 'trigger_once' and +'elapsed_ms' RPCs. Given that the NIC router only maintains very +coarse-grained timeouts, such frequent RPCs to the timer seemed finical. +Sparing the details, we were able to significantly reduce the number of +these RPCs by relaxing the precision of the NIC router's time keeping. + +Along the way, we identified a few more, minor, tweaks: + +* We increased the default value of 'max_packets_per_signal' from 32 to 150. + This value determines the maximum number of packets that are consumed from an + interface at once. +* We eliminated eager packet-stream signalling from the NIC router to improve + batch processing of packets. With this change, packet-stream signals are only + emitted once the NIC router processed all available or + 'max_packets_per_signal' packets. +* We implemented incremental checksum update for UDP/TCP according to RFC1071. +* We discovered and fixed a few corner cases in the packet-stream interface + with respect to the signalling. +* We fixed allocation errors in the 'ipxe_nic_drv' that popped up during high + TX load. + +In the end, we attained a ~5x speed up (exact values depending on the hardware) +for the NIC router. + + +Event-filter improvements for touch devices +=========================================== + +The phone variant of Sculpt OS calls for a way to trigger certain low-level +buttons or keys using the touch screen. In particular, the switch between the +administrative user interface and the runtime system must be possible at any +time. On the [https://genode.org/download/sculpt - PC version], this switch +is triggered by pressing F12, which is remapped to KEY_DASHBOARD. Even though +a physical button could be used on the phone in principle, there are three +arguments in favor of a virtual key. First, there are only three physical +buttons available (volume +/- and power) on the PinePhone. Remapping one of +those buttons to KEY_DASHBOARD deprives the button of its original purpose. +Second, the force needed for pressing a physical button may impede the +ergonomics of the device depending on how often the switch is needed. And +third, the physical buttons require a driver. When enabling a new device, this +barrier can be nicely sidestepped by a virtual key. + +Given this rationale, we extended Genode's event-filter component with a new +'' filter type. Once added to the filter chain, it triggers an +artificial key tap (a press event followed by a release event) whenever the +user touches a preconfigured area on the touch screen. The filter node can +host any number of '' sub nodes. Each sub node must define a rectangular +area - using the attributes 'xpos', 'ypos', 'width', and 'height' - and the +name of the tapped key as 'key' attribute. + +! +! +! ... +! + +The example above repurposes the 25 left-most pixels of the touch screen as +dashboard key. When touched, a pair of press and release events is fired at +once. + + +Menu-view performance +===================== + +The administrative user interface of Sculpt OS is based on Genode's custom +menu-view component, which renders and updates graphical dialogs based on +high-level XML descriptions. Up to now, the component operated on Genode's +GUI-session interface with alpha-channel support. However, the alpha channel +noticeably impedes the software-rendering performance on lower-end devices +like the PinePhone. In the latter case, we'd prefer to trade the nice-looking +alpha blending for a better UI responsiveness. + +We have now enhanced the menu-view component with two new optional +configuration attributes 'opaque' and 'background'. Setting 'opaque' to "yes" +suppresses the use of the alpha channel at the GUI session. This improves the +drawing performance by 20% on the PinePhone. The 'background' attribute can be +specified to define the reset color of the GUI buffer. It alleviates the need +to create a frame widget for the top level, significantly reducing the costs +for drawing the background pixels. + +Finally, we found that the use of GCC's optimization level -O3 instead of the +default level -O2 increases the drawing performance on the PinePhone by 30%. +Combined, those optimizations result in an acceptable user experience of +Sculpt's administrative user interface on the PinePhone. + + +Device drivers +############## + +USB networking via Ethernet control model (ECM) +=============================================== + +To implement mobile data connectivity on the PinePhone +(Section [Mobile data connectivity]), we added USB host-controller support +(EHCI) for the Allwinner A64 SoC to Genode by porting the corresponding +host-controller driver from Linux using our DDE approach. Since our existing +USB-over-Ethernet +[https://github.com/genodelabs/genode/tree/master/repos/dde_linux/src/drivers/usb_net - driver] +on Genode lacked support for the Ethernet Control Model, which is provided by +the modem, we added support for ECM as well. + + +GPU and Mesa driver for Mali-400 +================================ + +As mentioned in Section [Genode coming to the phone], we enabled the principle +ability to use the Mali-400 GPU of the PinePhone under Genode. This support +entails two parts. The first part is the low-level driver code called Lima +that normally resides in the Linux kernel. This component provides a GPU +session interface. We transplanted the driver code to a dedicated Genode +component, which is hosted at the +[https://github.com/genodelabs/genode-allwinner - genode-allwinner] repository. +The second part is the user-level Mesa3D driver stack - hosted at the libports +repository - that is linked local to the application and uses the GPU session +to access the GPU. + +The combination of both parts was successfully tested on the PinePhone and +the Pine-A64-LTS V1.2 board. Given that the primary motivation for this +line of work was our ambition to run the Morph web browser, we disregarded the +multiplexing of the GPU for now. The GPU driver currently supports only one +client at a time. + + +SD-card driver for the PinePhone +================================ + +In anticipation of running Sculpt OS on the PinePhone, we ported the Linux +SD/MMC-card driver to Genode. The driver - hosted at the +[https://github.com/genodelabs/genode-allwinner - genode-allwinner] repository - +was successfully tested with the PinePhone and Pine-A64LTS V1.2 board. For the +moment, only SD cards (no eMMC) are supported. +The provided _a64_sd_card_drv.run_ script illustrates the integration and use +of the driver. + + +Linux-device-driver environment (DDE Linux) +=========================================== + +Tickless idle operation +----------------------- + +The DDE-Linux emulation library and thereby all ported drivers now support +the NO_HZ_IDLE Linux kernel configuration option, which disables periodic +timer ticks when ported drivers are idle. With this option, energy and up to +3% CPU time per driver can be preserved, which becomes significant especially +if multiple ported drivers are in use in sophisticated scenarios like Sculpt +OS. + +Consistent use of SMP configuration +----------------------------------- + +All kernel threads in the Linux device driver ports are currently mapped to one +and the same native Genode thread, using cooperative scheduling within the +emulation environment. Intuitively, it does not make much sense to address +multi-processing support provided by the original Linux kernel code. +Nonetheless, the drivers that we ported are normally used in the context of +SMP-aware Linux kernel configurations only. To not leave the well tested and +beaten track, we decided to switch on SMP support in all kernel configurations +we use as porting base. + +This especially applies to the Linux drivers within the _repos/pc_ +sub-directory, and the WireGuard port. Other driver ports already used SMP +support in their configuration. + +As a side effect, we removed the insufficient emulation of so called "softirqs" +formerly used by the non-SMP driver ports, and replaced them with the original +implementation. + + +Forthcoming platform-driver modernization +========================================= + +During the past year, we switched from board-specific platform driver APIs +step-by-step to one generic interface. But PC-related drivers still depend on +the legacy x86-specific platform driver and API, especially to the PCI-related +part of it. + +To finalize the unification and modernization of the platform driver and its +API, there were still some pieces missing, which we added with the current +release. + +While trying to switch PC-related Linux device driver ports to the new API, we +recognized that some drivers depend on additional information of the PCI +configuration space that were not exported so far. Namely, the fields for +sub-vendor, sub-product, and revision IDs were needed. Moreover, some ported +drivers use hard-coded indices of PCI base-address registers (BAR) to refer to +I/O resources of the device. + +Therefore, we extended the pci_decode tool to export this additional +information, and to annotate I/O port ranges and memory attributes with the +corresponding BAR index. The generic platform driver parses this additional +information from a given devices ROM, and exports it to the corresponding +clients accordingly. The correlation between I/O resources and BAR indices is +only unveiled to clients where the platform driver's policy states that +physical information has to be provided, like in this example: + +! +! +! +! +! ... +! + +UHCI-specific platform extensions +--------------------------------- + +Some device-specific registers are only present within the PCI configuration +space. For instance UHCI controllers in the PC architecture provide a special +legacy support register only accessible via the PCI configuration space. This +register is used to hand over the USB hardware from the BIOS to the operating +system. + +We did not want to pollute the platform API with a lot of device specific +tweaks nor provide unlimited access to the PCI configuration space to a +driver. Therefore, we implement the hand-over of the UHCI PCI device in the +platform driver if available. Moreover, we handle the Intel-specific resume +register whenever a session to the corresponding UHCI controller is opened. + +Intel GPU information from Host Bridge +-------------------------------------- + +Some information needed by Intel GPU and framebuffer drivers is derived from +the Intel Graphics and Controller HUB (GMCH) respectively its control +register. It is used to calculate the GPU's Global Translation Table (GTT), +and the stolen memory sizes. Again we do not want to give access to the whole +configuration space of this sensitive device to either the GPU or the +framebuffer driver. Instead, the platform driver now detects Intel PCI graphic +cards, and exports the information found within the GMCH control register to +the corresponding client as part of the platform session's devices ROM. + +Transition of PC drivers +------------------------ + +Although there is everything in place now to switch the remaining PC-drivers +to the generic platform driver and its API, we decided to do this step after +the current release. This way, we have time to stress-test the drivers during +our daily use of Genode, the remaining transitional work is planned for the +upcoming Sculpt OS release instead. + + +Libraries and applications +########################## + +Qt5 and Morph browser +===================== + +As mentioned in Section [Genode coming to the phone], we had to improve +Genode's Qt support to get the Morph browser to work. This work includes +added support for building Qt projects with CMake, the addition of missing Qt +modules like QtGraphicalEffects, and improving the OpenGL support of the QPA +plugin. The latter was needed for the Ubuntu UI Toolkit to display its widgets +correctly. Note that this change implies that QtQuick applications now use +OpenGL by default instead of the QtQuick software rendering fallback back end. +This can improve the experience when an accelerated GPU driver is available +but can also slow down a QtQuick application if only the Mesa software driver +('softpipe') is available on the target platform. In that case, it is possible +to enforce the use of the software QtQuick renderer by setting the following +environment variable in the configuration of the application: + +! + +When we tried to use the free public Jitsi server at [https://meet.jit.si] with +our ported web browsers, we noticed that our QtWebEngine Chromium version was +too old and caused issues like a non-working join button and failed WebRTC +connections. For this reason, we updated our Qt port to the latest version with +QtWebEngine support on FreeBSD, which at this time is version 5.15.2. + +To use this new version, it is necessary to update the Qt5 host tools with the +'tool/tool_chain_qt5' script. + +We also updated the Falkon web browser to the latest version 3.2.0. + +Up-to-date Sculpt packages of both the Falkon and Morph browsers for x86_64 are +available in the 'cproc' depot. + + +USB smart cards via PKCS#11 +=========================== + +With this release, Genode gains support for accessing USB smart-card devices +via PKCS#11. This is achieved through a port of the OpenSC PKCS#11 tool that is +now available as package for the Sculpt OS. A quick look into the features and +integration of the tool is possible using the new _pkcs11_tool_ run script +hosted in the [https://github.com/genodelabs/genode-world - genode-world] +repository. For a more detailed guide to the tool, you may read the +corresponding Genodians article. + +:USB smart cards via PKCS#11: + + [https://genodians.org/m-stein/2022-08-18-pkcs11-tool-1] + + +Sculpt OS improvements +====================== + +In addition to the major developments described in +Section [Genode coming to the phone], Sculpt OS has received several minor +refinements. + +When integrating a +[https://genode.org/documentation/release-notes/22.02#Framework_for_special-purpose_Sculpt-based_operating_systems - Sculpt-based appliance] +with a predefined deploy configuration, the _sculpt.run_ script automatically +adds the required software packages as tar archive to the boot image. However, +for complex scenarios, it is sometimes desirable to keep the boot image small +and fetch the packages at runtime over the network. To support such use cases, +we added the new run-script argument 'DEPOT' with the possible values 'tar' +(default) and 'omit'. If the latter is specified, the deployed software +packages are excluded from the boot image and the run script merely prints the +versions of the required packages. This information can conveniently be used +as input for publishing the packages. + +We added two new packages 'part_block' and 'ext2_fs' that simplify the access +of multiple block devices and partitions in manually curated deploy +configurations. The part_block package can be used in Sculpt's +_/config/deploy_ as follows. + +! +! +! +! +! +! +! +! +! +! + +It can be combined with the 'ext2_fs' package to access the files stored on a +particular partition. + +! +! +! +! +! +! +! +! +! +! + + +Platforms +######### + +Qemu virtual platform +===================== + +Because more and more architectures on Genode now support VirtIO drivers on +Qemu (ARMv7, ARMv8, and RISC-V), the generic board name "virt_qemu" did not +suffice for keeping a clean distinction between the separate architecture +requirements. Therefore, we decided to make the board name architecture +specific. The following board names are now supported on base-hw: +"virt_qemu_arm_v7a", "virt_qemu_arm_v8a", and "virt_qemu_riscv". +The "virt_qemu" board name was removed. + + +RISC-V +====== + +As suggested above Genode's RISC-V support got extended by VirtIO drivers. +This includes a block driver, a networking driver, keyboard and mouse handling +as well as basic framebuffer support. This way, it has become possible to test +interactive and networking scenarios on Genode's RISC-V version using Qemu. + +This work was contributed by Piotr Tworek. Thanks a lot! + + +Allwinner A64 +============= + +In the +[https://genode.org/documentation/release-notes/22.05#Custom_system-control_processor__SCP__firmware - previous release], +we introduced our custom firmware for the PinePhone's system-control processor +(SCP). We have now generalized the firmware to cover also the Pine-A64-LTS +board. By establishing our custom SCP firmware as a base line for all A64-based +boards, we can make our A64 platform driver depend on the SCP for accessing the +PMIC (power management chip) instead of driving the RSB and PMIC by itself. + + +Build system and tools +###################### + +In this release, we improve support for booting Genode/Sculpt on UEFI +platforms in several aspects. First, the Bender tool gains a more robust +UEFI-boot detection mechanism while retrieving serial-device parameters. Also, +the GRUB boot loader was updated to version 2.06 and now keeps lower RAM +untouched from internal memory allocations, which prevents nasty surprises on +booting some UEFI devices. And last, our [https://ipxe.org/ - iPXE-based] boot +option received support for UEFI images when using the following run-tool +configuration. + +! RUN_OPT += --include image/uefi +! RUN_OPT += --include load/ipxe + From 71571c40727796d22a291a3f983965a068540bbc Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 31 Aug 2022 13:49:11 +0200 Subject: [PATCH 195/354] News item for version 22.08 --- doc/news.txt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/doc/news.txt b/doc/news.txt index c1f29a5e9b..1ef040aa85 100644 --- a/doc/news.txt +++ b/doc/news.txt @@ -4,6 +4,37 @@ =========== +Genode OS Framework release 22.08 | 2022-08-31 +############################################## + +| The overarching theme of Genode 22.08 is the emerging phone variant of +| Sculpt OS, touching topics as diverse as USB ECM, Mali-400 GPU, SD-card +| access, telephony, mobile-data connectivity, the Morph web browser, and a +| custom user interface. Among the further highlights are new tracing tools, +| improved network performance USB smart-card support, and VirtIO drivers for +| RISC-V. + +The vision of a Genode-based smart phone is certainly our most ambitious +undertaking since we created Sculpt OS for the PC. Over the past two years, we +relentlessly pursued this vision while targeting the PinePhone hardware. +The scope of work reaches from custom firmware for the system-control +processor, over kernel development, a staggering variety of device drivers, to +the user-interface and application level. With Genode 22.08, those efforts +culminate in a first complete system - a phone variant of Sculpt OS. The +[https://genode.org/documentation/release-notes/22.08 - release documentation] +tells the story behind this line of work in great detail. + +Beside phone-related topics, the new release features new tooling for +gathering and analyzing system traces that allow for holistic performance +studies covering the interplay between components. One particular success +story of the new trace recorder is a profoundly improved network performance. +Further highlights are the support for USB smart cards via PKCS#11, VirtIO +drivers for RISC-V, and the update of Qt5 to version 5.15.2. + +For the complete picture, please enjoy the official +[https:/documentation/release-notes/22.08 - release documentation of version 22.08...] + + Genode OS Framework release 22.05 | 2022-05-31 ############################################## From c333fc6f0479862eb82a59dce2c34bb200d393d1 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 31 Aug 2022 11:14:29 +0200 Subject: [PATCH 196/354] version: 22.08 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index a01c758c18..54de1e741d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -22.05 +22.08 From adc4d472510747a44acf1eb79ed93c3d2577157f Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Wed, 24 Aug 2022 14:27:11 +0200 Subject: [PATCH 197/354] usb_host: use Expanding reporter for device report Issue #4596 --- repos/os/src/lib/genode_c_api/usb.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 5dd2815468..2a1f49ee29 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -161,12 +161,13 @@ class Root : public Root_component Signal_handler _config_handler { _env.ep(), *this, &Root::_announce_service }; Reporter _config_reporter { _env, "config" }; - Reporter _device_reporter { _env, "devices" }; Constructible _devices[MAX_DEVICES]; - List> _sessions {}; Id_allocator _id_alloc {}; bool _announced { false }; + Constructible _device_reporter {}; + List> _sessions {}; + Root(const Root&); Root & operator=(const Root&); @@ -615,7 +616,10 @@ void ::Root::_report() { using Value = String<64>; - Reporter::Xml_generator xml(_device_reporter, [&] () { + if (!_device_reporter.constructed()) + return; + + _device_reporter->generate([&] (Reporter::Xml_generator &xml) { _for_each_device([&] (Device & d) { xml.node("device", [&] { xml.attribute("label", d.label()); @@ -678,7 +682,9 @@ void ::Root::_announce_service() * Check for report policy, and resp. con-/destruct device reporter */ _config.xml().with_sub_node("report", [&] (Xml_node node) { - _device_reporter.enabled(node.attribute_value("devices", false)); + _device_reporter.conditional(node.attribute_value("devices", false), + _env, "devices", "devices" ); + _config_reporter.enabled(node.attribute_value("config", false)); }); From b888c95024edcee9b30f4e2b8861b8613d704c86 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 30 Aug 2022 11:26:16 +0200 Subject: [PATCH 198/354] qemu-usb: reread settings on configuration profile changes. The alternative settings get reread on all interfaces as done before "qemu-usb: fix device endpoint update" commit by introducing specific reset_alt_settings function. The fallthrough case was intentionally before the "qemu-usb: fix device endpoint update" case, which now is wrong. Issue #4596 --- repos/libports/src/lib/qemu-usb/host.cc | 35 +++++++++++++++++++- repos/libports/src/lib/qemu-usb/qemu_emul.cc | 1 + 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/repos/libports/src/lib/qemu-usb/host.cc b/repos/libports/src/lib/qemu-usb/host.cc index a1933b2b22..cd2bbbbbe8 100644 --- a/repos/libports/src/lib/qemu-usb/host.cc +++ b/repos/libports/src/lib/qemu-usb/host.cc @@ -28,7 +28,8 @@ static bool const verbose_warnings = false; Mutex _mutex; static void update_ep(USBDevice *, uint8_t, uint8_t); -static bool claim_interfaces(USBDevice *dev); +static bool claim_interfaces(USBDevice *); +static void reset_alt_settings(USBDevice *); using Packet_alloc_failed = Usb::Session::Tx::Source::Packet_alloc_failed; using Packet_type = Usb::Packet_descriptor::Type; @@ -182,8 +183,15 @@ struct Completion : Usb::Completion case Packet_type::CONFIG: if (!claim_interfaces(dev)) p->status = USB_RET_IOERROR; + else + reset_alt_settings(dev); + + usb_generic_async_ctrl_complete(dev, p); + break; case Packet_type::ALT_SETTING: update_ep(dev, packet.interface.number, packet.interface.alt_setting); + usb_generic_async_ctrl_complete(dev, p); + break; case Packet_type::CTRL: usb_generic_async_ctrl_complete(dev, p); break; @@ -664,6 +672,22 @@ struct Usb_host_device : List::Element } } + + void reset_alt_settings(USBDevice *udev) + { + /* retrieve device speed */ + Usb::Config_descriptor cdescr; + Usb::Device_descriptor ddescr; + + try { usb_raw.config_descriptor(&ddescr, &cdescr); } + catch (Usb::Session::Device_not_found) { return; } + + for (unsigned i = 0; i < cdescr.num_interfaces; i++) { + udev->altsetting[i] = usb_raw.alt_settings(i); + } + } + + void update_ep(USBDevice *udev) { usb_ep_reset(udev); @@ -709,6 +733,15 @@ struct Usb_host_device : List::Element OBJECT_CHECK(USBHostDevice, (obj), TYPE_USB_HOST_DEVICE) +static void reset_alt_settings(USBDevice *udev) +{ + USBHostDevice *d = USB_HOST_DEVICE(udev); + Usb_host_device *dev = (Usb_host_device *)d->data; + + dev->reset_alt_settings(udev); +} + + static void update_ep(USBDevice *udev, uint8_t interface, uint8_t altsetting) { USBHostDevice *d = USB_HOST_DEVICE(udev); diff --git a/repos/libports/src/lib/qemu-usb/qemu_emul.cc b/repos/libports/src/lib/qemu-usb/qemu_emul.cc index e8ed3b7fae..9c923c59d0 100644 --- a/repos/libports/src/lib/qemu-usb/qemu_emul.cc +++ b/repos/libports/src/lib/qemu-usb/qemu_emul.cc @@ -297,6 +297,7 @@ struct Object_pool for (unsigned i = USB_FIRST_FREE; i < MAX; i++) { if (used[i] == false) { used[i] = true; + memset(&obj[i], 0, sizeof(obj[i])); return &obj[i]; } } From 354667bb6d3f5bb5027975b138087b2dba8bcc06 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 30 Aug 2022 11:07:47 +0200 Subject: [PATCH 199/354] lx_emul: validate USB endpoint and settings param to avoid pagefaults and general protection faults on access to unpaged memory regions. Fixes #4596 --- repos/dde_linux/src/lib/lx_emul/usb.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/repos/dde_linux/src/lib/lx_emul/usb.c b/repos/dde_linux/src/lib/lx_emul/usb.c index 17b6728bf6..8f2c777a33 100644 --- a/repos/dde_linux/src/lib/lx_emul/usb.c +++ b/repos/dde_linux/src/lib/lx_emul/usb.c @@ -129,7 +129,7 @@ static int interface_descriptor(genode_usb_bus_num_t bus, { struct usb_interface * iface = interface(bus, dev, index); - if (!iface) + if (!iface || setting >= iface->num_altsetting) return -1; memcpy(buf, &iface->altsetting[setting].desc, @@ -148,7 +148,7 @@ static int interface_extra(genode_usb_bus_num_t bus, struct usb_interface * iface = interface(bus, dev, index); unsigned long len; - if (!iface) + if (!iface || setting >= iface->num_altsetting) return -1; len = min((unsigned long)iface->altsetting[setting].extralen, size); @@ -173,9 +173,13 @@ static int endpoint_descriptor(genode_usb_bus_num_t bus, if (!iface) return -2; + if (setting >= iface->num_altsetting || + endp >= iface->altsetting[setting].desc.bNumEndpoints) + return -3; + ep = &iface->altsetting[setting].endpoint[endp]; if (!ep) - return -3; + return -4; memcpy(buf, &ep->desc, min(sizeof(struct usb_endpoint_descriptor), size)); From 06f24a73d25c4ff56d19cd1983d8051e9ea34eab Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 31 Aug 2022 15:53:29 +0200 Subject: [PATCH 200/354] doc/release_notes/22-08: minor style fix --- doc/release_notes/22-08.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/release_notes/22-08.txt b/doc/release_notes/22-08.txt index 0b6d144f10..6b501b28f2 100644 --- a/doc/release_notes/22-08.txt +++ b/doc/release_notes/22-08.txt @@ -400,7 +400,7 @@ We invite seasoned developers - especially those who are following the [https://genodians.org/nfeske/index - Pine-fun article series] - to experiment with the new phone variant. It can be built via the following command: -| built/arm_v8a$ make run/sculpt KERNEL=hw BOARD=pinephone SCULPT=phone +! built/arm_v8a$ make run/sculpt KERNEL=hw BOARD=pinephone SCULPT=phone For a broader audience, we plan to provide a ready-to-use SD-card image for the PinePhone in tandem with the next release of Sculpt OS. From bc57e9e6475146c4c1df8cb27b3dee584241eda7 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Mon, 29 Aug 2022 11:38:36 +0200 Subject: [PATCH 201/354] vfs: add Append_file class This reverts commit cf904e0a5d92fe7c5b467454d7b49870f615ad92 and introduces the Append_file class instead. genodelabs/genode#4352 --- .../src/app/trace_recorder/ctf/backend.cc | 4 +- .../gems/src/app/trace_recorder/ctf/backend.h | 8 +- .../src/app/trace_recorder/ctf/write_buffer.h | 4 +- .../src/app/trace_recorder/pcapng/backend.cc | 4 +- .../src/app/trace_recorder/pcapng/backend.h | 4 +- .../app/trace_recorder/pcapng/write_buffer.h | 4 +- repos/os/include/os/vfs.h | 141 ++++++++++++------ 7 files changed, 112 insertions(+), 57 deletions(-) diff --git a/repos/gems/src/app/trace_recorder/ctf/backend.cc b/repos/gems/src/app/trace_recorder/ctf/backend.cc index ad1188d4fd..b639b7c0c2 100644 --- a/repos/gems/src/app/trace_recorder/ctf/backend.cc +++ b/repos/gems/src/app/trace_recorder/ctf/backend.cc @@ -23,12 +23,12 @@ void Writer::start_iteration(Directory &root, _file_path = Directory::join(path, info.thread_name()); try { - _dst_file.construct(root, _file_path, true); + _dst_file.construct(root, _file_path); /* initialise packet header */ _packet_buffer.init_header(info); } - catch (New_file::Create_failed) { + catch (Append_file::Create_failed) { error("Could not create file."); } } diff --git a/repos/gems/src/app/trace_recorder/ctf/backend.h b/repos/gems/src/app/trace_recorder/ctf/backend.h index 77dd6596d1..c4ee82eee8 100644 --- a/repos/gems/src/app/trace_recorder/ctf/backend.h +++ b/repos/gems/src/app/trace_recorder/ctf/backend.h @@ -27,7 +27,7 @@ namespace Ctf { using namespace Trace_recorder; using Genode::Directory; - using Genode::New_file; + using Genode::Append_file; using Buffer = Write_buffer<32*1024>; @@ -39,9 +39,9 @@ namespace Ctf { class Ctf::Writer : public Trace_recorder::Writer_base { private: - Buffer &_packet_buffer; - Constructible _dst_file { }; - Directory::Path _file_path { }; + Buffer &_packet_buffer; + Constructible _dst_file { }; + Directory::Path _file_path { }; public: Writer(Genode::Registry ®istry, Buffer &packet_buffer) diff --git a/repos/gems/src/app/trace_recorder/ctf/write_buffer.h b/repos/gems/src/app/trace_recorder/ctf/write_buffer.h index 5ee76f3122..490f236425 100644 --- a/repos/gems/src/app/trace_recorder/ctf/write_buffer.h +++ b/repos/gems/src/app/trace_recorder/ctf/write_buffer.h @@ -64,12 +64,12 @@ class Ctf::Write_buffer }); } - void write_to_file(Genode::New_file &dst, Genode::Directory::Path const &path) + void write_to_file(Genode::Append_file &dst, Genode::Directory::Path const &path) { if (_header().empty()) return; - if (dst.append(_buffer, _header().total_length_bytes()) != New_file::Append_result::OK) + if (dst.append(_buffer, _header().total_length_bytes()) != Append_file::Append_result::OK) error("Write error for ", path); _header().reset(); diff --git a/repos/gems/src/app/trace_recorder/pcapng/backend.cc b/repos/gems/src/app/trace_recorder/pcapng/backend.cc index 20f5da2ca2..9014ebed18 100644 --- a/repos/gems/src/app/trace_recorder/pcapng/backend.cc +++ b/repos/gems/src/app/trace_recorder/pcapng/backend.cc @@ -35,14 +35,14 @@ void Writer::start_iteration(Directory &root, /* append to file */ try { - _dst_file.construct(root, _file_path, true); + _dst_file.construct(root, _file_path); _interface_registry.clear(); _buffer.clear(); _buffer.append(); _empty_section = true; } - catch (New_file::Create_failed) { + catch (Append_file::Create_failed) { error("Could not create file."); } } diff --git a/repos/gems/src/app/trace_recorder/pcapng/backend.h b/repos/gems/src/app/trace_recorder/pcapng/backend.h index 957b6d1590..392bcffd72 100644 --- a/repos/gems/src/app/trace_recorder/pcapng/backend.h +++ b/repos/gems/src/app/trace_recorder/pcapng/backend.h @@ -27,7 +27,7 @@ namespace Pcapng { using namespace Trace_recorder; using Genode::Directory; - using Genode::New_file; + using Genode::Append_file; using Buffer = Write_buffer<32*1024>; @@ -42,7 +42,7 @@ class Pcapng::Writer : public Trace_recorder::Writer_base Interface_registry &_interface_registry; Buffer &_buffer; Timestamp_calibrator const &_ts_calibrator; - Constructible _dst_file { }; + Constructible _dst_file { }; Directory::Path _file_path { }; bool _empty_section { false }; diff --git a/repos/gems/src/app/trace_recorder/pcapng/write_buffer.h b/repos/gems/src/app/trace_recorder/pcapng/write_buffer.h index e7c0f34bd8..349092daea 100644 --- a/repos/gems/src/app/trace_recorder/pcapng/write_buffer.h +++ b/repos/gems/src/app/trace_recorder/pcapng/write_buffer.h @@ -62,12 +62,12 @@ class Pcapng::Write_buffer return Append_ok(); } - void write_to_file(Genode::New_file &dst, Directory::Path const &path) + void write_to_file(Genode::Append_file &dst, Directory::Path const &path) { if (_total_length == 0) return; - if (dst.append(_buffer, _total_length) != New_file::Append_result::OK) + if (dst.append(_buffer, _total_length) != Append_file::Append_result::OK) error("Write error for ", path); clear(); diff --git a/repos/os/include/os/vfs.h b/repos/os/include/os/vfs.h index 0fe34ee528..59dceef48f 100644 --- a/repos/os/include/os/vfs.h +++ b/repos/os/include/os/vfs.h @@ -27,6 +27,8 @@ namespace Genode { struct File; class Readonly_file; class File_content; + class Writeable_file; + class Append_file; class New_file; class Watcher; template @@ -124,6 +126,8 @@ struct Genode::Directory : Noncopyable, Interface friend class Readonly_file; friend class Root_directory; friend class Watcher; + friend class Writeable_file; + friend class Append_file; friend class New_file; /* @@ -668,24 +672,21 @@ class Genode::File_content /** - * Utility for writing data to a file via the Genode VFS library + * Base class of `New_file` and `Append_file` providing open for write, sync, + * and append functionality. */ -class Genode::New_file : Noncopyable +class Genode::Writeable_file : Noncopyable { public: struct Create_failed : Exception { }; - private: + enum class Append_result { OK, WRITE_ERROR }; - Entrypoint &_ep; - Allocator &_alloc; - Vfs::File_system &_fs; - Vfs::Vfs_handle &_handle; + protected: - Vfs::Vfs_handle &_init_handle(Directory &dir, - Directory::Path const &rel_path, - bool append) + static Vfs::Vfs_handle &_init_handle(Directory &dir, + Directory::Path const &rel_path) { /* create compound directory */ { @@ -703,43 +704,24 @@ class Genode::New_file : Noncopyable Vfs::Vfs_handle *handle_ptr = nullptr; Vfs::Directory_service::Open_result const res = - _fs.open(path.string(), mode, &handle_ptr, _alloc); + dir._fs.open(path.string(), mode, &handle_ptr, dir._alloc); if (res != Vfs::Directory_service::OPEN_OK || (handle_ptr == nullptr)) { - error("failed to create file '", path, "', res=", (int)res); + error("failed to create/open file '", path, "' for writing, res=", (int)res); throw Create_failed(); } - Vfs::Directory_service::Stat stat { }; - if (!append) - handle_ptr->fs().ftruncate(handle_ptr, 0); - else if (handle_ptr->ds().stat(path.string(), stat) == Vfs::Directory_service::STAT_OK) - handle_ptr->seek(stat.size); - return *handle_ptr; } - public: - - /** - * Constructor - * - * \throw Create_failed - */ - New_file(Directory &dir, Directory::Path const &path, bool append = false) - : - _ep(dir._ep), _alloc(dir._alloc), _fs(dir._fs), - _handle(_init_handle(dir, path, append)) - { } - - ~New_file() + static void _sync(Vfs::Vfs_handle &handle, Entrypoint &ep) { - while (_handle.fs().queue_sync(&_handle) == false) - _ep.wait_and_dispatch_one_io_signal(); + while (handle.fs().queue_sync(&handle) == false) + ep.wait_and_dispatch_one_io_signal(); for (bool sync_done = false; !sync_done; ) { - switch (_handle.fs().complete_sync(&_handle)) { + switch (handle.fs().complete_sync(&handle)) { case Vfs::File_io_service::SYNC_QUEUED: break; @@ -755,14 +737,12 @@ class Genode::New_file : Noncopyable } if (!sync_done) - _ep.wait_and_dispatch_one_io_signal(); + ep.wait_and_dispatch_one_io_signal(); } - _handle.ds().close(&_handle); } - enum class Append_result { OK, WRITE_ERROR }; - - Append_result append(char const *src, size_t size) + static Append_result _append(Vfs::Vfs_handle &handle, Entrypoint &ep, + char const *src, size_t size) { bool write_error = false; @@ -777,7 +757,7 @@ class Genode::New_file : Noncopyable using Write_result = Vfs::File_io_service::Write_result; - switch (_handle.fs().write(&_handle, src, remaining_bytes, + switch (handle.fs().write(&handle, src, remaining_bytes, out_count)) { case Write_result::WRITE_ERR_AGAIN: @@ -795,7 +775,7 @@ class Genode::New_file : Noncopyable out_count = min((Vfs::file_size)remaining_bytes, out_count); remaining_bytes -= (size_t)out_count; src += out_count; - _handle.advance_seek(out_count); + handle.advance_seek(out_count); break; }; } @@ -803,7 +783,7 @@ class Genode::New_file : Noncopyable stalled = true; } if (stalled) - _ep.wait_and_dispatch_one_io_signal(); + ep.wait_and_dispatch_one_io_signal(); } return write_error ? Append_result::WRITE_ERROR : Append_result::OK; @@ -811,6 +791,81 @@ class Genode::New_file : Noncopyable }; +/** + * Utility for appending data to an existing file via the Genode VFS library + */ +class Genode::Append_file : public Writeable_file +{ + private: + + Entrypoint &_ep; + Vfs::Vfs_handle &_handle; + + public: + + /** + * Constructor + * + * \throw Create_failed + */ + Append_file(Directory &dir, Directory::Path const &path) + : + _ep(dir._ep), + _handle(_init_handle(dir, path)) + { + Vfs::Directory_service::Stat stat { }; + if (_handle.ds().stat(path.string(), stat) == Vfs::Directory_service::STAT_OK) + _handle.seek(stat.size); + } + + ~Append_file() + { + _sync(_handle, _ep); + _handle.ds().close(&_handle); + } + + Append_result append(char const *src, size_t size) { + return _append(_handle, _ep, src, size); } +}; + + +/** + * Utility for writing data to a new file via the Genode VFS library + */ +class Genode::New_file : public Writeable_file +{ + private: + + Entrypoint &_ep; + Vfs::Vfs_handle &_handle; + + public: + + using Writeable_file::Append_result; + using Writeable_file::Create_failed; + + /** + * Constructor + * + * \throw Create_failed + */ + New_file(Directory &dir, Directory::Path const &path) + : + _ep(dir._ep), + _handle(_init_handle(dir, path)) + { _handle.fs().ftruncate(&_handle, 0); } + + ~New_file() + { + _sync(_handle, _ep); + _handle.ds().close(&_handle); + } + + Append_result append(char const *src, size_t size) { + return _append(_handle, _ep, src, size); } +}; + + class Genode::Watcher { private: From 88e13bb236fec2f3832eafe75391edd257350eea Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 1 Sep 2022 14:56:49 +0200 Subject: [PATCH 202/354] base-linux: src/lib/initramfs -> /src/initramfs Move the target for initramfs outside the src/lib/ directory because target.mk files within src/lib/ are no longer reachable. Issue #4599 --- repos/base-linux/recipes/src/base-linux/content.mk | 2 +- repos/base-linux/src/{lib => }/initramfs/init.c | 0 repos/base-linux/src/{lib => }/initramfs/target.mk | 4 ++-- 3 files changed, 3 insertions(+), 3 deletions(-) rename repos/base-linux/src/{lib => }/initramfs/init.c (100%) rename repos/base-linux/src/{lib => }/initramfs/target.mk (72%) diff --git a/repos/base-linux/recipes/src/base-linux/content.mk b/repos/base-linux/recipes/src/base-linux/content.mk index ad1db4cc75..2751459570 100644 --- a/repos/base-linux/recipes/src/base-linux/content.mk +++ b/repos/base-linux/recipes/src/base-linux/content.mk @@ -12,5 +12,5 @@ content: sed -i "s/BOARD.*unknown/BOARD := linux/" lib/mk/core-linux.inc sed -i "s/ld-linux/ld/" src/lib/ld/linux/target.mk sed -i "s/linux_timer_drv/timer/" src/timer/linux/target.mk - rm -rf src/lib/initramfs + rm -rf src/initramfs diff --git a/repos/base-linux/src/lib/initramfs/init.c b/repos/base-linux/src/initramfs/init.c similarity index 100% rename from repos/base-linux/src/lib/initramfs/init.c rename to repos/base-linux/src/initramfs/init.c diff --git a/repos/base-linux/src/lib/initramfs/target.mk b/repos/base-linux/src/initramfs/target.mk similarity index 72% rename from repos/base-linux/src/lib/initramfs/target.mk rename to repos/base-linux/src/initramfs/target.mk index c684f26c29..b7146371f4 100644 --- a/repos/base-linux/src/lib/initramfs/target.mk +++ b/repos/base-linux/src/initramfs/target.mk @@ -5,14 +5,14 @@ REQUIRES = x86_64 INITRAMFS = initramfs INITRAMFS_SRC_C = init.c -EXT_OBJECTS += $(BUILD_BASE_DIR)/lib/initramfs/$(INITRAMFS) +EXT_OBJECTS += $(BUILD_BASE_DIR)/initramfs/$(INITRAMFS) $(TARGET): $(INITRAMFS) $(INITRAMFS): $(INITRAMFS_SRC_C) $(MSG_BUILD)$(INITRAMFS) $(VERBOSE)gcc $^ -O0 $(CC_MARCH) -Wall -W -Wextra -Werror -std=gnu99 -o $@ -Wl,-O3 -Wl,--as-needed -static - $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/lib/initramfs/$(INITRAMFS) $(BUILD_BASE_DIR)/bin/ + $(VERBOSE)ln -sf $(BUILD_BASE_DIR)/initramfs/$(INITRAMFS) $(BUILD_BASE_DIR)/bin/ clean_initramfs: $(VERBOSE)rm -rf $(INITRAMFS) From f50971b6a9ec0100f8302268161280bc92390605 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 1 Sep 2022 15:03:32 +0200 Subject: [PATCH 203/354] os: src/lib/trace/policy -> src/trace/policy The target.mk files for building the trace policies are no longer reachable under src/lib/ by the build system. Issue #4599 --- repos/os/recipes/src/test-trace/content.mk | 2 +- repos/os/recipes/src/test-trace_logger/content.mk | 2 +- repos/os/recipes/src/trace_policy/content.mk | 2 +- repos/os/src/{lib => }/trace/policy/div_zero/policy.cc | 0 repos/os/src/{lib => }/trace/policy/div_zero/target.mk | 0 repos/os/src/{lib => }/trace/policy/log_output/policy.cc | 0 repos/os/src/{lib => }/trace/policy/log_output/target.mk | 0 repos/os/src/{lib => }/trace/policy/null/policy.cc | 0 repos/os/src/{lib => }/trace/policy/null/target.mk | 0 repos/os/src/{lib => }/trace/policy/policy.inc | 2 +- repos/os/src/{lib => }/trace/policy/policy.ld | 0 repos/os/src/{lib => }/trace/policy/rpc_name/policy.cc | 0 repos/os/src/{lib => }/trace/policy/rpc_name/target.mk | 0 repos/os/src/{lib => }/trace/policy/table.cc | 0 14 files changed, 4 insertions(+), 4 deletions(-) rename repos/os/src/{lib => }/trace/policy/div_zero/policy.cc (100%) rename repos/os/src/{lib => }/trace/policy/div_zero/target.mk (100%) rename repos/os/src/{lib => }/trace/policy/log_output/policy.cc (100%) rename repos/os/src/{lib => }/trace/policy/log_output/target.mk (100%) rename repos/os/src/{lib => }/trace/policy/null/policy.cc (100%) rename repos/os/src/{lib => }/trace/policy/null/target.mk (100%) rename repos/os/src/{lib => }/trace/policy/policy.inc (95%) rename repos/os/src/{lib => }/trace/policy/policy.ld (100%) rename repos/os/src/{lib => }/trace/policy/rpc_name/policy.cc (100%) rename repos/os/src/{lib => }/trace/policy/rpc_name/target.mk (100%) rename repos/os/src/{lib => }/trace/policy/table.cc (100%) diff --git a/repos/os/recipes/src/test-trace/content.mk b/repos/os/recipes/src/test-trace/content.mk index 95d2225c4a..0cd6e68718 100644 --- a/repos/os/recipes/src/test-trace/content.mk +++ b/repos/os/recipes/src/test-trace/content.mk @@ -1,2 +1,2 @@ -SRC_DIR = src/test/trace src/lib/trace/policy include/trace +SRC_DIR = src/test/trace src/trace/policy include/trace include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/os/recipes/src/test-trace_logger/content.mk b/repos/os/recipes/src/test-trace_logger/content.mk index f7c5989277..ad62486cae 100644 --- a/repos/os/recipes/src/test-trace_logger/content.mk +++ b/repos/os/recipes/src/test-trace_logger/content.mk @@ -1,2 +1,2 @@ -SRC_DIR = src/test/trace_logger src/lib/trace/policy include/trace +SRC_DIR = src/test/trace_logger src/trace/policy include/trace include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/os/recipes/src/trace_policy/content.mk b/repos/os/recipes/src/trace_policy/content.mk index 78f22f88da..86757241f5 100644 --- a/repos/os/recipes/src/trace_policy/content.mk +++ b/repos/os/recipes/src/trace_policy/content.mk @@ -1,2 +1,2 @@ -SRC_DIR = src/lib/trace/policy +SRC_DIR = src/trace/policy include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/os/src/lib/trace/policy/div_zero/policy.cc b/repos/os/src/trace/policy/div_zero/policy.cc similarity index 100% rename from repos/os/src/lib/trace/policy/div_zero/policy.cc rename to repos/os/src/trace/policy/div_zero/policy.cc diff --git a/repos/os/src/lib/trace/policy/div_zero/target.mk b/repos/os/src/trace/policy/div_zero/target.mk similarity index 100% rename from repos/os/src/lib/trace/policy/div_zero/target.mk rename to repos/os/src/trace/policy/div_zero/target.mk diff --git a/repos/os/src/lib/trace/policy/log_output/policy.cc b/repos/os/src/trace/policy/log_output/policy.cc similarity index 100% rename from repos/os/src/lib/trace/policy/log_output/policy.cc rename to repos/os/src/trace/policy/log_output/policy.cc diff --git a/repos/os/src/lib/trace/policy/log_output/target.mk b/repos/os/src/trace/policy/log_output/target.mk similarity index 100% rename from repos/os/src/lib/trace/policy/log_output/target.mk rename to repos/os/src/trace/policy/log_output/target.mk diff --git a/repos/os/src/lib/trace/policy/null/policy.cc b/repos/os/src/trace/policy/null/policy.cc similarity index 100% rename from repos/os/src/lib/trace/policy/null/policy.cc rename to repos/os/src/trace/policy/null/policy.cc diff --git a/repos/os/src/lib/trace/policy/null/target.mk b/repos/os/src/trace/policy/null/target.mk similarity index 100% rename from repos/os/src/lib/trace/policy/null/target.mk rename to repos/os/src/trace/policy/null/target.mk diff --git a/repos/os/src/lib/trace/policy/policy.inc b/repos/os/src/trace/policy/policy.inc similarity index 95% rename from repos/os/src/lib/trace/policy/policy.inc rename to repos/os/src/trace/policy/policy.inc index b10ab253b3..ce8169e47a 100644 --- a/repos/os/src/lib/trace/policy/policy.inc +++ b/repos/os/src/trace/policy/policy.inc @@ -38,4 +38,4 @@ clean_policy: $(VERBOSE)$(RM) ../*.o ../*.d *.o *.d $(TARGET_POLICY).elf \ $(BUILD_BASE_DIR)/bin/$(TARGET_POLICY) -vpath table.cc $(REP_DIR)/src/lib/trace/policy +vpath table.cc $(REP_DIR)/src/trace/policy diff --git a/repos/os/src/lib/trace/policy/policy.ld b/repos/os/src/trace/policy/policy.ld similarity index 100% rename from repos/os/src/lib/trace/policy/policy.ld rename to repos/os/src/trace/policy/policy.ld diff --git a/repos/os/src/lib/trace/policy/rpc_name/policy.cc b/repos/os/src/trace/policy/rpc_name/policy.cc similarity index 100% rename from repos/os/src/lib/trace/policy/rpc_name/policy.cc rename to repos/os/src/trace/policy/rpc_name/policy.cc diff --git a/repos/os/src/lib/trace/policy/rpc_name/target.mk b/repos/os/src/trace/policy/rpc_name/target.mk similarity index 100% rename from repos/os/src/lib/trace/policy/rpc_name/target.mk rename to repos/os/src/trace/policy/rpc_name/target.mk diff --git a/repos/os/src/lib/trace/policy/table.cc b/repos/os/src/trace/policy/table.cc similarity index 100% rename from repos/os/src/lib/trace/policy/table.cc rename to repos/os/src/trace/policy/table.cc From c560285d88cfd2f6ab122ab6952d8596c74432fa Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 31 Aug 2022 16:50:07 +0200 Subject: [PATCH 204/354] build: support library builds via lib/ This patch adds special handling for lib/ arguments to the build system, which supersedes the former LIB= mechanism. Whereas the old mechanism was limited to a single library, the new convention allows multiple library arguments, similar to regular targets. The change brings the two immediate benefits. First, the streamlining of library and target arguments allows for the building of libraries via the 'build' command of the run tool. Second, it alleviates the need for pseudo target.mk files for building shared libraries that have no direct dependencies, in particular VFS plugins. Since this change eases the explicit creation of shared libraries from run scripts, we may reconsider the automatic implicit building of shared libraries driven by targets. E.g., while developing a Qt application, a run script could import the Qt libraries from the depot and combine those with the developed (fresh built) target without triggering the build of the Qt libraries in the build directory. When issueing 'make' without arguments, all targets are built. This patch applies this behavior to libraries as well, thereby removing the need for the base/src/lib/target.mk pseudo target as used by the CI tools to build all libraries. Note that target.mk files located under src/lib/ are no longer reachable. Therefore, all run scripts that used to trigger the build of a shared library via a pseudo target must be adapted. E.g., 'build lib/vfs/tap' must be replaced by 'build lib/vfs_tap'. With this patch, the LIB= option is no longer supported. Fixes #4599 --- repos/base/mk/dep_lib.mk | 5 ++-- repos/base/src/lib/target.mk | 33 -------------------- tool/builddir/build.mk | 58 +++++++++++++++++++++--------------- tool/run/boot_dir/okl4 | 2 +- 4 files changed, 38 insertions(+), 60 deletions(-) delete mode 100644 repos/base/src/lib/target.mk diff --git a/repos/base/mk/dep_lib.mk b/repos/base/mk/dep_lib.mk index c788b8ff64..0648a8c2db 100644 --- a/repos/base/mk/dep_lib.mk +++ b/repos/base/mk/dep_lib.mk @@ -119,8 +119,9 @@ warn_unsatisfied_requirements: generate_lib_rule_for_defect_library @$(ECHO) "Skip library $(LIB) because it requires $(DARK_COL)$(UNSATISFIED_REQUIREMENTS)$(DEFAULT_COL)" generate_lib_rule_for_defect_library: - @echo "INVALID_DEPS += $(LIB)" >> $(LIB_DEP_FILE) - @echo "" >> $(LIB_DEP_FILE) + @(echo "INVALID_DEPS += $(LIB)"; \ + echo "$(LIB).lib:"; \ + echo "") >> $(LIB_DEP_FILE) LIBS_TO_VISIT = $(filter-out $(LIBS_READY),$(LIBS)) diff --git a/repos/base/src/lib/target.mk b/repos/base/src/lib/target.mk deleted file mode 100644 index c7315d49ca..0000000000 --- a/repos/base/src/lib/target.mk +++ /dev/null @@ -1,33 +0,0 @@ -# -# This is a dummy target description file with the sole purpose of building -# all libraries. -# -TARGET = libs - -# -# Determine all 'lib/mk' sub directories residing within the repositories. -# Use 'wildcard' to handle the case when a repository does not host any -# 'lib/mk' sub directory. -# -LIB_MK_DIRS := $(wildcard $(addsuffix /lib/mk,$(REPOSITORIES))) - -# -# Scan the 'lib/mk' directories of all repositories for library description -# files. -# -ALL_LIB_MK_FILES := $(notdir $(foreach DIR,$(LIB_MK_DIRS),$(shell find $(DIR) -name "*.mk"))) - -# -# Make the pseudo target depend on all libraries, for which an lib.mk file -# exists. Discard the '.mk' suffix and remove duplicates (via 'sort'). -# -LIBS = $(sort $(ALL_LIB_MK_FILES:.mk=)) - -# -# Among all libraries found above, there may be several libraries with -# unsatisfied build requirements. Normally, the build system won't attempt to -# build the target (and its library dependencies) if one or more libraries -# cannot be built. By enabling 'FORCE_BUILD_LIBS', we let the build system -# visit all non-invalid libraries even in the presence of invalid libraries. -# -FORCE_BUILD_LIBS = yes diff --git a/tool/builddir/build.mk b/tool/builddir/build.mk index a0fe37bae2..ed31c74654 100644 --- a/tool/builddir/build.mk +++ b/tool/builddir/build.mk @@ -154,12 +154,35 @@ export LIBGCC_INC_DIR := $(shell dirname `$(CUSTOM_CXX_LIB) -print-libgcc-file-n # # Find out about the target directories to build # -DST_DIRS := $(filter-out clean cleanall again run/%,$(MAKECMDGOALS)) +# Arguments starting with 'run/' and 'lib/' are special. The former triggers +# the execution of a run script. The latter issues the build of a library. +# +DST_DIRS := $(filter-out clean cleanall again run/% lib/%,$(MAKECMDGOALS)) ifeq ($(MAKECMDGOALS),) DST_DIRS := * endif +# +# Detect use of obsoleted LIB= option +# +ifneq ($(LIB),) +$(error the 'LIB=$(LIB)' option is no longer supported, use 'make lib/$(LIB)') +endif + +# +# Determine library targets specified as lib/ at the command line +# +LIBS := $(notdir $(filter lib/%,$(MAKECMDGOALS))) + +ifeq ($(MAKECMDGOALS),) +ALL_LIB_MK_DIRS := $(wildcard \ + $(foreach R,$(REPOSITORIES),\ + $R/lib/mk $(foreach S,$(SPECS),$R/lib/mk/spec/$S))) +ALL_LIB_MK_FILES := $(wildcard $(addsuffix /*.mk,$(ALL_LIB_MK_DIRS))) +LIBS := $(sort $(notdir $(ALL_LIB_MK_FILES:.mk=))) +endif + # # Helper function to check if a needed tool is installed # @@ -187,7 +210,7 @@ endif # # Default rule: build all directories specified as make arguments # -_all $(DST_DIRS): gen_deps_and_build_targets +_all $(DST_DIRS) $(addprefix lib/,$(LIBS)) : gen_deps_and_build_targets @true ## @@ -275,8 +298,15 @@ endif # we would need to spawn one additional shell per target, which would take # 10-20 percent more time. # -traverse_target_dependencies: $(dir $(LIB_DEP_FILE)) init_libdep_file init_progress_log +traverse_dependencies: $(dir $(LIB_DEP_FILE)) init_libdep_file init_progress_log $(VERBOSE_MK) \ + for lib in $(LIBS); do \ + $(MAKE) $(VERBOSE_DIR) -f $(BASE_DIR)/mk/dep_lib.mk \ + REP_DIR=$$rep LIB=$$lib \ + BUILD_BASE_DIR=$(BUILD_BASE_DIR) \ + DARK_COL="$(DARK_COL)" DEFAULT_COL="$(DEFAULT_COL)"; \ + echo "all: $$lib.lib" >> $(LIB_DEP_FILE); \ + done; \ for target in $(TARGETS_TO_VISIT); do \ for rep in $(REPOSITORIES); do \ test -f $$rep/src/$$target || continue; \ @@ -288,29 +318,9 @@ traverse_target_dependencies: $(dir $(LIB_DEP_FILE)) init_libdep_file init_progr done; \ done; $$result; -# -# Generate content of libdep file if manually building a single library -# specified via the 'LIB' argument. -# -traverse_lib_dependencies: $(dir $(LIB_DEP_FILE)) init_libdep_file init_progress_log - $(VERBOSE_MK) \ - $(MAKE) $(VERBOSE_DIR) -f $(BASE_DIR)/mk/dep_lib.mk \ - REP_DIR=$$rep LIB=$(LIB) \ - BUILD_BASE_DIR=$(BUILD_BASE_DIR) \ - DARK_COL="$(DARK_COL)" DEFAULT_COL="$(DEFAULT_COL)"; \ - echo "all: $(LIB).lib" >> $(LIB_DEP_FILE); \ - .PHONY: $(LIB_DEP_FILE) -# -# Depending on whether the top-level target is a list of targets or a -# single library, we populate the LIB_DEP_FILE differently. -# -ifeq ($(LIB),) -$(LIB_DEP_FILE): traverse_target_dependencies -else -$(LIB_DEP_FILE): traverse_lib_dependencies -endif +$(LIB_DEP_FILE): traverse_dependencies ## diff --git a/tool/run/boot_dir/okl4 b/tool/run/boot_dir/okl4 index 30d60f2620..fd430acafb 100644 --- a/tool/run/boot_dir/okl4 +++ b/tool/run/boot_dir/okl4 @@ -99,7 +99,7 @@ proc core_link_address { } { return "0x03000000" } proc elfweaver {} { - if { ![file exists tool/okl4/elfweaver] } { build LIB=tools } + if { ![file exists tool/okl4/elfweaver] } { build lib/tools } return tool/okl4/elfweaver } From dd9e12601e137fb6b2d960de9c6262efe158b8d7 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 1 Sep 2022 13:12:13 +0200 Subject: [PATCH 205/354] Remove pseudo targets for building shared libs Thanks to the change "build: support library builds via lib/", shared libraries can now be built directly by the build system. Issue #4599 --- repos/base-fiasco/recipes/src/base-fiasco/content.mk | 1 - repos/base-fiasco/src/lib/ld/fiasco/target.mk | 2 -- repos/base-foc/recipes/src/base-foc_content.inc | 1 - repos/base-foc/src/lib/ld/foc/target.mk | 2 -- repos/base-hw/recipes/src/base-hw_content.inc | 2 -- repos/base-hw/src/lib/ld/hw/target.mk | 2 -- repos/base-linux/recipes/src/base-linux/content.mk | 1 - repos/base-linux/src/lib/ld/linux/target.mk | 4 ---- repos/base-nova/recipes/src/base-nova/content.mk | 3 +-- repos/base-nova/src/lib/ld/nova/target.mk | 2 -- repos/base-okl4/recipes/src/base-okl4/content.mk | 3 +-- repos/base-okl4/src/lib/ld/okl4/target.mk | 2 -- .../recipes/src/base-pistachio/content.mk | 1 - repos/base-pistachio/src/lib/ld/pistachio/target.mk | 2 -- .../recipes/src/base-sel4-imx6q_sabrelite/content.mk | 1 - .../recipes/src/base-sel4-imx7d_sabre/content.mk | 1 - repos/base-sel4/recipes/src/base-sel4-x86/content.mk | 1 - repos/base-sel4/src/lib/ld/sel4/target.mk | 2 -- repos/dde_linux/run/nic_router_uplinks.run | 4 ++-- repos/dde_linux/run/vfs_cfg.run | 2 +- repos/dde_linux/run/vfs_lxip.inc | 2 +- repos/dde_linux/src/lib/vfs/lxip/target.mk | 6 ------ repos/dde_rump/run/fs_rom_update_ext2.run | 4 ++-- repos/dde_rump/run/libc_vfs_ext2.run | 2 +- repos/dde_rump/run/libc_vfs_fs_ext2.run | 2 +- repos/dde_rump/run/rump_ext2.run | 4 ++-- repos/dde_rump/run/rump_fat.run | 4 ++-- repos/dde_rump/run/rump_iso.run | 2 +- repos/dde_rump/run/vfs_stress_ext2.run | 4 ++-- repos/dde_rump/run/vfs_stress_rump_fs.run | 4 ++-- repos/dde_rump/src/lib/vfs/rump/target.mk | 4 ---- repos/demo/src/lib/libpng/target.mk | 7 ------- repos/gems/recipes/src/cbe/content.mk | 7 +------ repos/gems/run/cbe_tester.run | 8 ++++---- repos/gems/run/text_painter.run | 2 +- repos/gems/run/vfs_cbe.run | 12 ++++++------ repos/gems/run/vfs_cbe_init.run | 2 +- repos/gems/run/vfs_import.run | 2 +- .../gems/src/lib/cpu_sampler_platform-foc/target.mk | 4 ---- .../src/lib/cpu_sampler_platform-generic/target.mk | 4 ---- .../gems/src/lib/cpu_sampler_platform-nova/target.mk | 4 ---- repos/gems/src/lib/vfs/audit/target.mk | 4 ---- repos/gems/src/lib/vfs/cbe/target.mk | 5 ----- repos/gems/src/lib/vfs/cbe_crypto/aes_cbc/target.mk | 3 --- repos/gems/src/lib/vfs/cbe_crypto/memcopy/target.mk | 3 --- repos/gems/src/lib/vfs/cbe_trust_anchor/target.mk | 5 ----- repos/gems/src/lib/vfs/gpu/target.mk | 3 --- repos/gems/src/lib/vfs/import/target.mk | 4 ---- repos/gems/src/lib/vfs/pipe/target.mk | 4 ---- repos/gems/src/lib/vfs/trace/target.mk | 3 --- repos/gems/src/lib/vfs/ttf/target.mk | 4 ---- repos/libports/recipes/api/libgcov/content.mk | 1 - repos/libports/recipes/src/curl/content.mk | 5 ----- repos/libports/recipes/src/expat/content.mk | 6 +----- repos/libports/recipes/src/ffi/content.mk | 1 - repos/libports/recipes/src/freetype/content.mk | 1 - repos/libports/recipes/src/gmp/content.mk | 1 - repos/libports/recipes/src/icu/content.mk | 1 - repos/libports/recipes/src/jbig2dec/content.mk | 1 - repos/libports/recipes/src/jpeg/content.mk | 1 - repos/libports/recipes/src/libarchive/content.mk | 1 - repos/libports/recipes/src/libc/content.mk | 6 +----- repos/libports/recipes/src/libdrm/content.mk | 6 +----- repos/libports/recipes/src/libiconv/content.mk | 1 - repos/libports/recipes/src/liblzma/content.mk | 1 - repos/libports/recipes/src/libpng/content.mk | 1 - .../recipes/src/libqgenodeviewwidget/content.mk | 6 +----- .../libports/recipes/src/libqpluginwidget/content.mk | 6 +----- repos/libports/recipes/src/libsparkcrypto/content.mk | 6 ------ repos/libports/recipes/src/libssh/content.mk | 5 +---- repos/libports/recipes/src/libusb/content.mk | 1 - repos/libports/recipes/src/libuvc/content.mk | 1 - repos/libports/recipes/src/libyuv/content.mk | 2 -- repos/libports/recipes/src/mesa/content.mk | 6 +----- repos/libports/recipes/src/mupdf/content.mk | 1 - repos/libports/recipes/src/ncurses/content.mk | 1 - repos/libports/recipes/src/openjpeg/content.mk | 1 - repos/libports/recipes/src/openssl/content.mk | 6 ------ repos/libports/recipes/src/pcre/content.mk | 1 - repos/libports/recipes/src/pcre16/content.mk | 1 - repos/libports/recipes/src/pcsc-lite/content.mk | 12 ------------ repos/libports/recipes/src/posix/content.mk | 6 +----- repos/libports/recipes/src/qt5_base/content.mk | 6 +----- repos/libports/recipes/src/qt5_component/content.mk | 7 +------ .../libports/recipes/src/qt5_declarative/content.mk | 6 +----- .../recipes/src/qt5_graphicaleffects/content.mk | 6 +----- .../recipes/src/qt5_quickcontrols/content.mk | 6 +----- .../recipes/src/qt5_quickcontrols2/content.mk | 6 +----- repos/libports/recipes/src/qt5_svg/content.mk | 6 +----- .../recipes/src/qt5_virtualkeyboard/content.mk | 6 +----- repos/libports/recipes/src/sanitizer/content.mk | 1 - repos/libports/recipes/src/spark/content.mk | 6 ------ repos/libports/recipes/src/stdcxx/content.mk | 5 +---- repos/libports/recipes/src/zlib/content.mk | 1 - repos/libports/run/fs_rom_update_fat.run | 4 ++-- repos/libports/run/libc_block.run | 2 +- repos/libports/run/libc_select.run | 2 +- repos/libports/run/libc_vfs_fat.run | 2 +- repos/libports/run/libc_vfs_fs_fat.run | 2 +- repos/libports/run/libc_vfs_select.run | 2 +- repos/libports/run/lwip_lx.run | 2 +- repos/libports/run/mesa.inc | 6 +++--- repos/libports/run/nic_router.inc | 2 +- repos/libports/run/oss.run | 2 +- repos/libports/run/smartcard.run | 4 ++-- repos/libports/run/vfs_lwip.inc | 2 +- repos/libports/src/lib/mesa/etnaviv/target.mk | 3 --- repos/libports/src/lib/mesa/iris/target.mk | 4 ---- repos/libports/src/lib/mesa/lima/target.mk | 3 --- repos/libports/src/lib/mesa/softpipe/target.mk | 1 - repos/libports/src/lib/vfs/fatfs/target.mk | 6 ------ repos/libports/src/lib/vfs/jitterentropy/target.mk | 6 ------ repos/libports/src/lib/vfs/libusb/target.mk | 6 ------ repos/libports/src/lib/vfs/lwip/target.mk | 4 ---- repos/libports/src/lib/vfs/oss/target.mk | 4 ---- repos/os/recipes/src/sandbox/content.mk | 5 ----- repos/os/run/test.run | 2 +- repos/os/run/vfs_block.run | 2 +- repos/os/src/lib/vfs/capture/target.mk | 4 ---- repos/os/src/lib/vfs/tap/target.mk | 4 ---- repos/pc/run/intel_fb.run | 2 +- repos/pc/run/wifi.run | 6 +++--- repos/pc/src/lib/vfs/wifi/target.mk | 3 --- repos/ports/run/gdb_monitor.run | 2 +- repos/ports/run/gdb_monitor_interactive.run | 2 +- repos/ports/run/gdb_monitor_target_config.run | 2 +- repos/ports/run/tool_chain_auto.run | 2 +- repos/ports/run/vbox5_genode_usb_hid_raw.run | 2 +- repos/ports/run/vbox_share.inc | 2 +- repos/ports/run/virtualbox_auto.inc | 2 +- .../ports/src/lib/gdbserver_platform-nova/target.mk | 4 ---- tool/run/boot_dir/fiasco | 2 +- tool/run/boot_dir/foc | 4 ++-- tool/run/boot_dir/linux | 11 +++++++++-- tool/run/boot_dir/nova | 2 +- tool/run/boot_dir/pistachio | 2 +- tool/run/boot_dir/sel4 | 2 +- 137 files changed, 94 insertions(+), 369 deletions(-) delete mode 100644 repos/base-fiasco/src/lib/ld/fiasco/target.mk delete mode 100644 repos/base-foc/src/lib/ld/foc/target.mk delete mode 100644 repos/base-hw/src/lib/ld/hw/target.mk delete mode 100644 repos/base-linux/src/lib/ld/linux/target.mk delete mode 100644 repos/base-nova/src/lib/ld/nova/target.mk delete mode 100644 repos/base-okl4/src/lib/ld/okl4/target.mk delete mode 100644 repos/base-pistachio/src/lib/ld/pistachio/target.mk delete mode 100644 repos/base-sel4/src/lib/ld/sel4/target.mk delete mode 100644 repos/dde_linux/src/lib/vfs/lxip/target.mk delete mode 100644 repos/dde_rump/src/lib/vfs/rump/target.mk delete mode 100644 repos/demo/src/lib/libpng/target.mk delete mode 100644 repos/gems/src/lib/cpu_sampler_platform-foc/target.mk delete mode 100644 repos/gems/src/lib/cpu_sampler_platform-generic/target.mk delete mode 100644 repos/gems/src/lib/cpu_sampler_platform-nova/target.mk delete mode 100644 repos/gems/src/lib/vfs/audit/target.mk delete mode 100644 repos/gems/src/lib/vfs/cbe/target.mk delete mode 100644 repos/gems/src/lib/vfs/cbe_crypto/aes_cbc/target.mk delete mode 100644 repos/gems/src/lib/vfs/cbe_crypto/memcopy/target.mk delete mode 100644 repos/gems/src/lib/vfs/cbe_trust_anchor/target.mk delete mode 100644 repos/gems/src/lib/vfs/gpu/target.mk delete mode 100644 repos/gems/src/lib/vfs/import/target.mk delete mode 100644 repos/gems/src/lib/vfs/pipe/target.mk delete mode 100644 repos/gems/src/lib/vfs/trace/target.mk delete mode 100644 repos/gems/src/lib/vfs/ttf/target.mk delete mode 100644 repos/libports/src/lib/mesa/etnaviv/target.mk delete mode 100644 repos/libports/src/lib/mesa/iris/target.mk delete mode 100644 repos/libports/src/lib/mesa/lima/target.mk delete mode 100644 repos/libports/src/lib/mesa/softpipe/target.mk delete mode 100644 repos/libports/src/lib/vfs/fatfs/target.mk delete mode 100644 repos/libports/src/lib/vfs/jitterentropy/target.mk delete mode 100644 repos/libports/src/lib/vfs/libusb/target.mk delete mode 100644 repos/libports/src/lib/vfs/lwip/target.mk delete mode 100644 repos/libports/src/lib/vfs/oss/target.mk delete mode 100644 repos/os/src/lib/vfs/capture/target.mk delete mode 100644 repos/os/src/lib/vfs/tap/target.mk delete mode 100644 repos/pc/src/lib/vfs/wifi/target.mk delete mode 100644 repos/ports/src/lib/gdbserver_platform-nova/target.mk diff --git a/repos/base-fiasco/recipes/src/base-fiasco/content.mk b/repos/base-fiasco/recipes/src/base-fiasco/content.mk index 1c494bd998..cc4c522144 100644 --- a/repos/base-fiasco/recipes/src/base-fiasco/content.mk +++ b/repos/base-fiasco/recipes/src/base-fiasco/content.mk @@ -21,6 +21,5 @@ content: for spec in x86_32; do \ mv lib/mk/spec/$$spec/ld-fiasco.mk lib/mk/spec/$$spec/ld.mk; \ done; - sed -i "s/ld-fiasco/ld/" src/lib/ld/fiasco/target.mk sed -i "s/fiasco_timer_drv/timer/" src/timer/fiasco/target.mk diff --git a/repos/base-fiasco/src/lib/ld/fiasco/target.mk b/repos/base-fiasco/src/lib/ld/fiasco/target.mk deleted file mode 100644 index 060986f382..0000000000 --- a/repos/base-fiasco/src/lib/ld/fiasco/target.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = ld-fiasco -LIBS = ld-fiasco diff --git a/repos/base-foc/recipes/src/base-foc_content.inc b/repos/base-foc/recipes/src/base-foc_content.inc index b4b26e44df..7d97f7d1e8 100644 --- a/repos/base-foc/recipes/src/base-foc_content.inc +++ b/repos/base-foc/recipes/src/base-foc_content.inc @@ -39,5 +39,4 @@ content: for spec in x86_32 x86_64 arm arm_64; do \ mv lib/mk/spec/$$spec/ld-foc.mk lib/mk/spec/$$spec/ld.mk; \ done; - sed -i "s/ld-foc/ld/" src/lib/ld/foc/target.mk sed -i "s/foc_timer_drv/timer/" src/timer/foc/target.mk diff --git a/repos/base-foc/src/lib/ld/foc/target.mk b/repos/base-foc/src/lib/ld/foc/target.mk deleted file mode 100644 index ef4453cc43..0000000000 --- a/repos/base-foc/src/lib/ld/foc/target.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = ld-foc -LIBS = ld-foc diff --git a/repos/base-hw/recipes/src/base-hw_content.inc b/repos/base-hw/recipes/src/base-hw_content.inc index f26b8981e6..adc04050e8 100644 --- a/repos/base-hw/recipes/src/base-hw_content.inc +++ b/repos/base-hw/recipes/src/base-hw_content.inc @@ -180,7 +180,6 @@ generalize_target_names: $(CONTENT) # apply kernel-agnostic convention of naming the timer and ld.lib.so for subdir in ${call selected_content,LD_MK_DIRS}; do \ mv $$subdir/ld-hw.mk $$subdir/ld.mk; done - sed -i "s/ld-hw/ld/" src/lib/ld/hw/target.mk sed -i "s/hw_timer_drv/timer/" src/timer/hw/target.mk # supplement BOARD definition that normally comes form the build dir sed -i "s/\?= unknown/:= $(BOARD)/" src/core/hw/target.mk @@ -189,5 +188,4 @@ generalize_target_names: $(CONTENT) sed -i "1aREQUIRES := $(ARCH)" src/core/hw/target.mk sed -i "1aREQUIRES := $(ARCH)" src/bootstrap/hw/target.mk sed -i "/REQUIRES/s/hw/hw $(ARCH)/" src/timer/hw/target.mk - sed -i "1aREQUIRES := $(ARCH)" src/lib/ld/hw/target.mk diff --git a/repos/base-hw/src/lib/ld/hw/target.mk b/repos/base-hw/src/lib/ld/hw/target.mk deleted file mode 100644 index da9b4cb18f..0000000000 --- a/repos/base-hw/src/lib/ld/hw/target.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = ld-hw -LIBS = ld-hw diff --git a/repos/base-linux/recipes/src/base-linux/content.mk b/repos/base-linux/recipes/src/base-linux/content.mk index 2751459570..ac78f59846 100644 --- a/repos/base-linux/recipes/src/base-linux/content.mk +++ b/repos/base-linux/recipes/src/base-linux/content.mk @@ -10,7 +10,6 @@ content: mv lib/mk/spec/$$spec/ld-linux.mk lib/mk/spec/$$spec/ld.mk; done; sed -i "/TARGET/s/core-linux/core/" src/core/linux/target.mk sed -i "s/BOARD.*unknown/BOARD := linux/" lib/mk/core-linux.inc - sed -i "s/ld-linux/ld/" src/lib/ld/linux/target.mk sed -i "s/linux_timer_drv/timer/" src/timer/linux/target.mk rm -rf src/initramfs diff --git a/repos/base-linux/src/lib/ld/linux/target.mk b/repos/base-linux/src/lib/ld/linux/target.mk deleted file mode 100644 index dbbcd910ba..0000000000 --- a/repos/base-linux/src/lib/ld/linux/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = ld-linux.lib -LIBS = ld-linux - -BUILD_ARTIFACTS := ld-linux.lib.so diff --git a/repos/base-nova/recipes/src/base-nova/content.mk b/repos/base-nova/recipes/src/base-nova/content.mk index cf557b5dbe..41278a28a1 100644 --- a/repos/base-nova/recipes/src/base-nova/content.mk +++ b/repos/base-nova/recipes/src/base-nova/content.mk @@ -15,8 +15,7 @@ src/kernel/nova: src/kernel content: for spec in x86_32 x86_64; do \ - mv lib/mk/spec/$$spec/ld-nova.mk lib/mk/spec/$$spec/ld.mk; \ + mv lib/mk/spec/$$spec/ld-nova.mk lib/mk/spec/$$spec/ld.mk; \ done; - sed -i "s/ld-nova/ld/" src/lib/ld/nova/target.mk sed -i "s/nova_timer_drv/timer/" src/timer/nova/target.mk diff --git a/repos/base-nova/src/lib/ld/nova/target.mk b/repos/base-nova/src/lib/ld/nova/target.mk deleted file mode 100644 index f9615eec76..0000000000 --- a/repos/base-nova/src/lib/ld/nova/target.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = ld-nova -LIBS = ld-nova diff --git a/repos/base-okl4/recipes/src/base-okl4/content.mk b/repos/base-okl4/recipes/src/base-okl4/content.mk index 39d7d59d8a..4caca8c8cd 100644 --- a/repos/base-okl4/recipes/src/base-okl4/content.mk +++ b/repos/base-okl4/recipes/src/base-okl4/content.mk @@ -19,8 +19,7 @@ src/kernel/okl4: src/kernel content: for spec in x86_32; do \ - mv lib/mk/spec/$$spec/ld-okl4.mk lib/mk/spec/$$spec/ld.mk; \ + mv lib/mk/spec/$$spec/ld-okl4.mk lib/mk/spec/$$spec/ld.mk; \ done; - sed -i "s/ld-okl4/ld/" src/lib/ld/okl4/target.mk sed -i "s/pit_timer_drv/timer/" src/timer/pit/target.inc diff --git a/repos/base-okl4/src/lib/ld/okl4/target.mk b/repos/base-okl4/src/lib/ld/okl4/target.mk deleted file mode 100644 index 1d041e3cd2..0000000000 --- a/repos/base-okl4/src/lib/ld/okl4/target.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = ld-okl4 -LIBS = ld-okl4 diff --git a/repos/base-pistachio/recipes/src/base-pistachio/content.mk b/repos/base-pistachio/recipes/src/base-pistachio/content.mk index b8c9dbb474..c33056fc45 100644 --- a/repos/base-pistachio/recipes/src/base-pistachio/content.mk +++ b/repos/base-pistachio/recipes/src/base-pistachio/content.mk @@ -21,6 +21,5 @@ content: for spec in x86_32; do \ mv lib/mk/spec/$$spec/ld-pistachio.mk lib/mk/spec/$$spec/ld.mk; \ done; - sed -i "s/ld-pistachio/ld/" src/lib/ld/pistachio/target.mk sed -i "s/pit_timer_drv/timer/" src/timer/pit/target.inc diff --git a/repos/base-pistachio/src/lib/ld/pistachio/target.mk b/repos/base-pistachio/src/lib/ld/pistachio/target.mk deleted file mode 100644 index af224bfef8..0000000000 --- a/repos/base-pistachio/src/lib/ld/pistachio/target.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = ld-pistachio -LIBS = ld-pistachio diff --git a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk index 82d866de9c..3e4a0c2acb 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk +++ b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/content.mk @@ -35,7 +35,6 @@ etc/board.conf: content: mv lib/mk/spec/arm/ld-sel4.mk lib/mk/spec/arm/ld.mk; - sed -i "s/ld-sel4/ld/" src/lib/ld/sel4/target.mk sed -i "s/imx6_timer_drv/timer/" src/timer/epit/imx6/target.inc find lib/mk/spec -name kernel-sel4-*.mk -o -name syscall-sel4-*.mk |\ grep -v "sel4-imx6q_sabrelite.mk" | xargs rm -rf diff --git a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/content.mk b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/content.mk index bb357a3ed8..d339aec070 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/content.mk +++ b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/content.mk @@ -35,7 +35,6 @@ etc/board.conf: content: mv lib/mk/spec/arm/ld-sel4.mk lib/mk/spec/arm/ld.mk; - sed -i "s/ld-sel4/ld/" src/lib/ld/sel4/target.mk sed -i "s/imx7_timer_drv/timer/" src/timer/gpt/imx7/target.inc find lib/mk/spec -name kernel-sel4-*.mk -o -name syscall-sel4-*.mk |\ grep -v "sel4-imx7d_sabre.mk" | xargs rm -rf diff --git a/repos/base-sel4/recipes/src/base-sel4-x86/content.mk b/repos/base-sel4/recipes/src/base-sel4-x86/content.mk index 7d706f6fd2..cca289d09e 100644 --- a/repos/base-sel4/recipes/src/base-sel4-x86/content.mk +++ b/repos/base-sel4/recipes/src/base-sel4-x86/content.mk @@ -26,7 +26,6 @@ content: for spec in x86_32 x86_64 arm; do \ mv lib/mk/spec/$$spec/ld-sel4.mk lib/mk/spec/$$spec/ld.mk; \ done; - sed -i "s/ld-sel4/ld/" src/lib/ld/sel4/target.mk sed -i "s/pit_timer_drv/timer/" src/timer/pit/target.inc find lib/mk/spec -name kernel-sel4-*.mk -o -name syscall-sel4-*.mk |\ grep -v "sel4-pc.mk" | xargs rm -rf diff --git a/repos/base-sel4/src/lib/ld/sel4/target.mk b/repos/base-sel4/src/lib/ld/sel4/target.mk deleted file mode 100644 index 4e78c9b5b4..0000000000 --- a/repos/base-sel4/src/lib/ld/sel4/target.mk +++ /dev/null @@ -1,2 +0,0 @@ -TARGET = ld-sel4 -LIBS = ld-sel4 diff --git a/repos/dde_linux/run/nic_router_uplinks.run b/repos/dde_linux/run/nic_router_uplinks.run index d6c9fed2b6..655600efb1 100644 --- a/repos/dde_linux/run/nic_router_uplinks.run +++ b/repos/dde_linux/run/nic_router_uplinks.run @@ -30,8 +30,8 @@ append build_components { server/nic_router } append build_components { server/dynamic_rom } append build_components { server/report_rom } append build_components { drivers/wifi/pc } -append build_components { lib/vfs/wifi } -append build_components { lib/vfs/jitterentropy } +append build_components { lib/vfs_wifi } +append build_components { lib/vfs_jitterentropy } append build_components { drivers/rtc } append build_components { drivers/nic } append build_components { app/ping } diff --git a/repos/dde_linux/run/vfs_cfg.run b/repos/dde_linux/run/vfs_cfg.run index abdf0eef57..657dbd7aca 100644 --- a/repos/dde_linux/run/vfs_cfg.run +++ b/repos/dde_linux/run/vfs_cfg.run @@ -5,7 +5,7 @@ if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { set build_components { core init timer - lib/vfs/lxip + lib/vfs_lxip server/vfs server/dynamic_rom server/nic_router diff --git a/repos/dde_linux/run/vfs_lxip.inc b/repos/dde_linux/run/vfs_lxip.inc index 8bd8988e0f..0febe00025 100644 --- a/repos/dde_linux/run/vfs_lxip.inc +++ b/repos/dde_linux/run/vfs_lxip.inc @@ -1,6 +1,6 @@ proc append_socket_fs_build_components { } { global build_components - append build_components { lib/vfs/lxip } + append build_components { lib/vfs_lxip } } proc socket_fs_plugin {} { return lxip } diff --git a/repos/dde_linux/src/lib/vfs/lxip/target.mk b/repos/dde_linux/src/lib/vfs/lxip/target.mk deleted file mode 100644 index 7806386e87..0000000000 --- a/repos/dde_linux/src/lib/vfs/lxip/target.mk +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = dummy-vfs_lxip -LIBS = vfs_lxip - -BUILD_ARTIFACTS := - -CC_CXX_WARN_STRICT = diff --git a/repos/dde_rump/run/fs_rom_update_ext2.run b/repos/dde_rump/run/fs_rom_update_ext2.run index 54d09f074a..d403b695a5 100644 --- a/repos/dde_rump/run/fs_rom_update_ext2.run +++ b/repos/dde_rump/run/fs_rom_update_ext2.run @@ -5,8 +5,8 @@ set build_components { core init timer app/rom_logger app/rom_to_file - lib/vfs/rump - lib/vfs/import + lib/vfs_rump + lib/vfs_import server/dynamic_rom server/fs_rom server/vfs_block diff --git a/repos/dde_rump/run/libc_vfs_ext2.run b/repos/dde_rump/run/libc_vfs_ext2.run index 21fd5071c6..653ea3d72c 100644 --- a/repos/dde_rump/run/libc_vfs_ext2.run +++ b/repos/dde_rump/run/libc_vfs_ext2.run @@ -1,7 +1,7 @@ set mkfs_cmd [installed_command mke2fs] set mkfs_opts "-F" -set test_build_components "lib/vfs/rump" +set test_build_components "lib/vfs_rump" set test_vfs_config "" diff --git a/repos/dde_rump/run/libc_vfs_fs_ext2.run b/repos/dde_rump/run/libc_vfs_fs_ext2.run index 55be02619e..205435e502 100644 --- a/repos/dde_rump/run/libc_vfs_fs_ext2.run +++ b/repos/dde_rump/run/libc_vfs_fs_ext2.run @@ -6,7 +6,7 @@ if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { set mkfs_cmd [installed_command mke2fs] set mkfs_opts "-F" -set test_build_components "lib/vfs/rump" +set test_build_components "lib/vfs_rump" set test_vfs_config "" diff --git a/repos/dde_rump/run/rump_ext2.run b/repos/dde_rump/run/rump_ext2.run index c44c156c66..592c7e137a 100644 --- a/repos/dde_rump/run/rump_ext2.run +++ b/repos/dde_rump/run/rump_ext2.run @@ -20,8 +20,8 @@ set build_components { core init timer server/vfs_block server/vfs - lib/vfs/rump - lib/vfs/import + lib/vfs_rump + lib/vfs_import test/libc_vfs } diff --git a/repos/dde_rump/run/rump_fat.run b/repos/dde_rump/run/rump_fat.run index 51f48de579..7dda62dcde 100644 --- a/repos/dde_rump/run/rump_fat.run +++ b/repos/dde_rump/run/rump_fat.run @@ -15,8 +15,8 @@ set build_components { core init timer server/vfs_block server/vfs - lib/vfs/rump - lib/vfs/import + lib/vfs_rump + lib/vfs_import test/libc_vfs } diff --git a/repos/dde_rump/run/rump_iso.run b/repos/dde_rump/run/rump_iso.run index 901c0a0130..ea0ff8aa4a 100644 --- a/repos/dde_rump/run/rump_iso.run +++ b/repos/dde_rump/run/rump_iso.run @@ -15,7 +15,7 @@ set build_components { server/fs_rom server/vfs_block server/vfs - lib/vfs/rump + lib/vfs_rump test/iso } diff --git a/repos/dde_rump/run/vfs_stress_ext2.run b/repos/dde_rump/run/vfs_stress_ext2.run index 14f2565df9..9659b6821c 100644 --- a/repos/dde_rump/run/vfs_stress_ext2.run +++ b/repos/dde_rump/run/vfs_stress_ext2.run @@ -14,8 +14,8 @@ set build_components { core init timer test/vfs_stress server/vfs_block - lib/vfs/rump - lib/vfs/import + lib/vfs_rump + lib/vfs_import } build $build_components diff --git a/repos/dde_rump/run/vfs_stress_rump_fs.run b/repos/dde_rump/run/vfs_stress_rump_fs.run index c6c916c198..936b901b88 100644 --- a/repos/dde_rump/run/vfs_stress_rump_fs.run +++ b/repos/dde_rump/run/vfs_stress_rump_fs.run @@ -15,8 +15,8 @@ set build_components { test/vfs_stress server/vfs server/vfs_block - lib/vfs/rump - lib/vfs/import + lib/vfs_rump + lib/vfs_import } build $build_components diff --git a/repos/dde_rump/src/lib/vfs/rump/target.mk b/repos/dde_rump/src/lib/vfs/rump/target.mk deleted file mode 100644 index 806fbcc1bf..0000000000 --- a/repos/dde_rump/src/lib/vfs/rump/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = rump_plugin -LIBS = vfs_rump - -BUILD_ARTIFACTS := diff --git a/repos/demo/src/lib/libpng/target.mk b/repos/demo/src/lib/libpng/target.mk deleted file mode 100644 index 5634026037..0000000000 --- a/repos/demo/src/lib/libpng/target.mk +++ /dev/null @@ -1,7 +0,0 @@ -TARGET = test-libpng_static -SRC_CC = main.cc -INC_DIR = $(REP_DIR)/include/libpng \ - $(REP_DIR)/include/mini_c \ - $(REP_DIR)/include/libz -CC_OPT += -DPNG_USER_CONFIG -LIBS = base libpng_static libz_static mini_c diff --git a/repos/gems/recipes/src/cbe/content.mk b/repos/gems/recipes/src/cbe/content.mk index c9b8af9713..c5272afb2f 100644 --- a/repos/gems/recipes/src/cbe/content.mk +++ b/repos/gems/recipes/src/cbe/content.mk @@ -57,7 +57,7 @@ MIRROR_FROM_REP_DIR := \ CBE_DIR := $(call port_dir,$(REP_DIR)/ports/cbe) -content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_CBE_DIR) LICENSE src/lib/cbe/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_CBE_DIR) LICENSE $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) @@ -66,10 +66,5 @@ $(MIRROR_FROM_CBE_DIR): mkdir -p $(dir $@) cp -r $(CBE_DIR)/$@ $(dir $@) -src/lib/cbe/target.mk: - mkdir -p $(dir $@) - echo "REQUIRES += x86_64" > $@ - echo "LIBS += $(BUILD_LIBS)" >> $@ - LICENSE: cp $(GENODE_DIR)/LICENSE $@ diff --git a/repos/gems/run/cbe_tester.run b/repos/gems/run/cbe_tester.run index 82602925d9..d9baf910ea 100644 --- a/repos/gems/run/cbe_tester.run +++ b/repos/gems/run/cbe_tester.run @@ -55,10 +55,10 @@ append build_components { server/report_rom server/lx_fs server/lx_block - lib/vfs/cbe_crypto/aes_cbc - lib/vfs/cbe_trust_anchor - lib/vfs/import - lib/vfs/jitterentropy + lib/vfs_cbe_crypto_aes_cbc + lib/vfs_cbe_trust_anchor + lib/vfs_import + lib/vfs_jitterentropy } build $build_components diff --git a/repos/gems/run/text_painter.run b/repos/gems/run/text_painter.run index 0b29af7992..abbebde446 100644 --- a/repos/gems/run/text_painter.run +++ b/repos/gems/run/text_painter.run @@ -93,7 +93,7 @@ install_config { } -build { server/vfs test/text_painter lib/vfs/ttf } +build { server/vfs test/text_painter lib/vfs_ttf } set fd [open [run_dir]/genode/focus w] puts $fd " \" domain=\"default\"/>" diff --git a/repos/gems/run/vfs_cbe.run b/repos/gems/run/vfs_cbe.run index de7a0c94bc..4d44fdb21e 100644 --- a/repos/gems/run/vfs_cbe.run +++ b/repos/gems/run/vfs_cbe.run @@ -34,12 +34,12 @@ build { timer init server/lx_fs - lib/vfs/cbe - lib/vfs/cbe_crypto/aes_cbc - lib/vfs/cbe_crypto/memcopy - lib/vfs/cbe_trust_anchor - lib/vfs/import - lib/vfs/pipe + lib/vfs_cbe + lib/vfs_cbe_crypto_aes_cbc + lib/vfs_cbe_crypto_memcopy + lib/vfs_cbe_trust_anchor + lib/vfs_import + lib/vfs_pipe test/vfs_stress test/libc server/log_terminal diff --git a/repos/gems/run/vfs_cbe_init.run b/repos/gems/run/vfs_cbe_init.run index 9871156793..8feb899f0f 100644 --- a/repos/gems/run/vfs_cbe_init.run +++ b/repos/gems/run/vfs_cbe_init.run @@ -33,7 +33,7 @@ append build_components { app/cbe_init_trust_anchor app/cbe_init - lib/vfs/cbe_trust_anchor + lib/vfs_cbe_trust_anchor } build $build_components diff --git a/repos/gems/run/vfs_import.run b/repos/gems/run/vfs_import.run index 6f2346bcea..226378f67c 100644 --- a/repos/gems/run/vfs_import.run +++ b/repos/gems/run/vfs_import.run @@ -3,7 +3,7 @@ if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { exit 0 } -build { app/sequence server/vfs lib/vfs/import test/libc } +build { app/sequence server/vfs lib/vfs_import test/libc } create_boot_directory diff --git a/repos/gems/src/lib/cpu_sampler_platform-foc/target.mk b/repos/gems/src/lib/cpu_sampler_platform-foc/target.mk deleted file mode 100644 index 608795f52a..0000000000 --- a/repos/gems/src/lib/cpu_sampler_platform-foc/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = cpu_sampler_platform-foc -LIBS = cpu_sampler_platform-foc - -CC_CXX_WARN_STRICT = diff --git a/repos/gems/src/lib/cpu_sampler_platform-generic/target.mk b/repos/gems/src/lib/cpu_sampler_platform-generic/target.mk deleted file mode 100644 index c5fb6e353f..0000000000 --- a/repos/gems/src/lib/cpu_sampler_platform-generic/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = cpu_sampler_platform-generic -LIBS = cpu_sampler_platform-generic - -CC_CXX_WARN_STRICT = diff --git a/repos/gems/src/lib/cpu_sampler_platform-nova/target.mk b/repos/gems/src/lib/cpu_sampler_platform-nova/target.mk deleted file mode 100644 index 8316496f5b..0000000000 --- a/repos/gems/src/lib/cpu_sampler_platform-nova/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = cpu_sampler_platform-nova -LIBS = cpu_sampler_platform-nova - -CC_CXX_WARN_STRICT = diff --git a/repos/gems/src/lib/vfs/audit/target.mk b/repos/gems/src/lib/vfs/audit/target.mk deleted file mode 100644 index f18d7b3788..0000000000 --- a/repos/gems/src/lib/vfs/audit/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_audit -LIBS = vfs_audit - -BUILD_ARTIFACTS := diff --git a/repos/gems/src/lib/vfs/cbe/target.mk b/repos/gems/src/lib/vfs/cbe/target.mk deleted file mode 100644 index 6f9ef45af1..0000000000 --- a/repos/gems/src/lib/vfs/cbe/target.mk +++ /dev/null @@ -1,5 +0,0 @@ -TARGET := lib-vfs-cbe -REQUIRES = x86_64 -LIBS = vfs_cbe - -BUILD_ARTIFACTS := diff --git a/repos/gems/src/lib/vfs/cbe_crypto/aes_cbc/target.mk b/repos/gems/src/lib/vfs/cbe_crypto/aes_cbc/target.mk deleted file mode 100644 index 3ae9ca776d..0000000000 --- a/repos/gems/src/lib/vfs/cbe_crypto/aes_cbc/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -TARGET := lib-vfs-cbe_crypto-aes_cbc -REQUIRES = x86_64 -LIBS = vfs_cbe_crypto_aes_cbc diff --git a/repos/gems/src/lib/vfs/cbe_crypto/memcopy/target.mk b/repos/gems/src/lib/vfs/cbe_crypto/memcopy/target.mk deleted file mode 100644 index 2056779d98..0000000000 --- a/repos/gems/src/lib/vfs/cbe_crypto/memcopy/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -TARGET := lib-vfs-cbe_crypto-memcopy -REQUIRES = x86_64 -LIBS = vfs_cbe_crypto_memcopy diff --git a/repos/gems/src/lib/vfs/cbe_trust_anchor/target.mk b/repos/gems/src/lib/vfs/cbe_trust_anchor/target.mk deleted file mode 100644 index b2cdea8241..0000000000 --- a/repos/gems/src/lib/vfs/cbe_trust_anchor/target.mk +++ /dev/null @@ -1,5 +0,0 @@ -TARGET := lib-vfs-cbe_trust_anchor -REQUIRES = x86_64 -LIBS = vfs_cbe_trust_anchor - -BUILD_ARTIFACTS := diff --git a/repos/gems/src/lib/vfs/gpu/target.mk b/repos/gems/src/lib/vfs/gpu/target.mk deleted file mode 100644 index e9e3b042f4..0000000000 --- a/repos/gems/src/lib/vfs/gpu/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -LIBS = vfs_gpu - -BUILD_ARTIFACTS := diff --git a/repos/gems/src/lib/vfs/import/target.mk b/repos/gems/src/lib/vfs/import/target.mk deleted file mode 100644 index fb15587c9a..0000000000 --- a/repos/gems/src/lib/vfs/import/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_import -LIBS = vfs_import - -BUILD_ARTIFACTS := diff --git a/repos/gems/src/lib/vfs/pipe/target.mk b/repos/gems/src/lib/vfs/pipe/target.mk deleted file mode 100644 index adb1db499e..0000000000 --- a/repos/gems/src/lib/vfs/pipe/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_pipe -LIBS = vfs_pipe base - -BUILD_ARTIFACTS := diff --git a/repos/gems/src/lib/vfs/trace/target.mk b/repos/gems/src/lib/vfs/trace/target.mk deleted file mode 100644 index 2ac95e2cde..0000000000 --- a/repos/gems/src/lib/vfs/trace/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -LIBS = vfs_trace - -BUILD_ARTIFACTS := diff --git a/repos/gems/src/lib/vfs/ttf/target.mk b/repos/gems/src/lib/vfs/ttf/target.mk deleted file mode 100644 index 5c7e547164..0000000000 --- a/repos/gems/src/lib/vfs/ttf/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_ttf -LIBS = vfs_ttf - -BUILD_ARTIFACTS := diff --git a/repos/libports/recipes/api/libgcov/content.mk b/repos/libports/recipes/api/libgcov/content.mk index d309a4f5fd..38f2ef1bb0 100644 --- a/repos/libports/recipes/api/libgcov/content.mk +++ b/repos/libports/recipes/api/libgcov/content.mk @@ -22,7 +22,6 @@ src/gcov: src/lib/gcov: $(mirror_from_rep_dir) - echo "LIBS = libgcov" > $@/target.mk LICENSE: cp $(PORT_DIR)/src/gcov/COPYING $@ diff --git a/repos/libports/recipes/src/curl/content.mk b/repos/libports/recipes/src/curl/content.mk index 4af15e8206..a1a4e1b049 100644 --- a/repos/libports/recipes/src/curl/content.mk +++ b/repos/libports/recipes/src/curl/content.mk @@ -8,11 +8,6 @@ content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -content: src/lib/curl/target.mk - -src/lib/curl/target.mk: src/lib/curl - echo "LIBS += curl" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/curl) content: src/lib/curl diff --git a/repos/libports/recipes/src/expat/content.mk b/repos/libports/recipes/src/expat/content.mk index dd777dcc7f..4e1557d5d3 100644 --- a/repos/libports/recipes/src/expat/content.mk +++ b/repos/libports/recipes/src/expat/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/expat.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/expat/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/expat/target.mk: - mkdir -p $(dir $@) - echo "LIBS = expat" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/expat) MIRROR_FROM_PORT_DIR := src/lib/expat/contrib \ diff --git a/repos/libports/recipes/src/ffi/content.mk b/repos/libports/recipes/src/ffi/content.mk index 73e48139e9..2543358c86 100644 --- a/repos/libports/recipes/src/ffi/content.mk +++ b/repos/libports/recipes/src/ffi/content.mk @@ -10,7 +10,6 @@ src/lib/ffi: mkdir -p $@ cp -r $(PORT_DIR)/src/lib/ffi/* $@ cp -r $(REP_DIR)/src/lib/ffi/* $@ - echo "LIBS = ffi" > $@/target.mk $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/freetype/content.mk b/repos/libports/recipes/src/freetype/content.mk index 6ee93d7f08..ace9828cc4 100644 --- a/repos/libports/recipes/src/freetype/content.mk +++ b/repos/libports/recipes/src/freetype/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/freetype) src/lib/freetype: mkdir -p $(dir $@) cp -r $(PORT_DIR)/src/lib/freetype $@ - echo "LIBS = freetype" > $@/target.mk include/freetype-genode: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/gmp/content.mk b/repos/libports/recipes/src/gmp/content.mk index 383b2c3716..502e04a2a6 100644 --- a/repos/libports/recipes/src/gmp/content.mk +++ b/repos/libports/recipes/src/gmp/content.mk @@ -59,7 +59,6 @@ src/lib/gmp: mkdir -p $@ cp -r $(PORT_SRC_DIR)/* $@ cp -r $(REP_DIR)/src/lib/gmp/* $@ - echo "LIBS = gmp" > $@/target.mk LICENSE: cp $(PORT_SRC_DIR)/COPYING $@ diff --git a/repos/libports/recipes/src/icu/content.mk b/repos/libports/recipes/src/icu/content.mk index 2fa3b431d5..dafd8ba4cb 100644 --- a/repos/libports/recipes/src/icu/content.mk +++ b/repos/libports/recipes/src/icu/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/icu) src/lib/icu: mkdir -p $@ cp -a $(PORT_DIR)/src/lib/icu/* $@/ - echo "LIBS = icu" > $@/target.mk lib/mk/icu.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/jbig2dec/content.mk b/repos/libports/recipes/src/jbig2dec/content.mk index 330060df76..17a6c191bb 100644 --- a/repos/libports/recipes/src/jbig2dec/content.mk +++ b/repos/libports/recipes/src/jbig2dec/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/jbig2dec) src/lib/jbig2dec: mkdir -p $@ cp -a $(PORT_DIR)/src/lib/jbig2dec/* $@/ - echo "LIBS = jbig2dec" > $@/target.mk lib/mk/%.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/jpeg/content.mk b/repos/libports/recipes/src/jpeg/content.mk index 3013409349..35b89cc6da 100644 --- a/repos/libports/recipes/src/jpeg/content.mk +++ b/repos/libports/recipes/src/jpeg/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/jpeg) src/lib/jpeg: mkdir -p $(dir $@) cp -r $(PORT_DIR)/src/lib/jpeg $@ - echo "LIBS = jpeg" > $@/target.mk lib/mk/%.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/libarchive/content.mk b/repos/libports/recipes/src/libarchive/content.mk index 23d0d0006f..8204e55e45 100644 --- a/repos/libports/recipes/src/libarchive/content.mk +++ b/repos/libports/recipes/src/libarchive/content.mk @@ -9,7 +9,6 @@ src/lib/libarchive: mkdir -p $@ cp -r $(PORT_DIR)/src/lib/libarchive/* $@ cp $(REP_DIR)/src/lib/libarchive/* $@ - echo "LIBS = libarchive" > $@/target.mk lib/mk/libarchive.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/libc/content.mk b/repos/libports/recipes/src/libc/content.mk index af9a9a3413..86f6e6e014 100644 --- a/repos/libports/recipes/src/libc/content.mk +++ b/repos/libports/recipes/src/libc/content.mk @@ -1,4 +1,4 @@ -content: include/libc-plugin src/lib/libc/target.mk lib/mk LICENSE +content: include/libc-plugin src/lib/libc lib/mk LICENSE LIBC_PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libc) LIBM_PORT_DIR := $(LIBC_PORT_DIR) @@ -8,10 +8,6 @@ src/lib/libc: cp -r $(LIBC_PORT_DIR)/src/lib/libc/* $@ cp -r $(REP_DIR)/src/lib/libc/* $@ -# target.mk for triggering the build of both libraries libc and libm -src/lib/libc/target.mk: src/lib/libc - echo "LIBS += libc libm" > $@ - include/libc-plugin include/libc/sys/ucontext.h: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/libdrm/content.mk b/repos/libports/recipes/src/libdrm/content.mk index 58fed75624..08f2c526d5 100644 --- a/repos/libports/recipes/src/libdrm/content.mk +++ b/repos/libports/recipes/src/libdrm/content.mk @@ -11,15 +11,11 @@ MIRROR_FROM_REP_DIR := lib/mk/libdrm.mk \ src/lib/libdrm/ioctl_dispatch.cc \ src/lib/libdrm/ioctl_lima.cc -content: $(MIRROR_FROM_REP_DIR) src/lib/libdrm/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/libdrm/target.mk: - mkdir -p $(dir $@) - echo "LIBS = libdrm" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libdrm) MIRROR_FROM_PORT_DIR := $(addprefix src/lib/libdrm/,\ diff --git a/repos/libports/recipes/src/libiconv/content.mk b/repos/libports/recipes/src/libiconv/content.mk index a8e156d43a..43721cf690 100644 --- a/repos/libports/recipes/src/libiconv/content.mk +++ b/repos/libports/recipes/src/libiconv/content.mk @@ -17,7 +17,6 @@ src/lib/libiconv: mkdir -p $@ cp -r $(PORT_DIR)/src/lib/libiconv/* $@ cp -r $(REP_DIR)/src/lib/libiconv/private $@ - echo "LIBS = libiconv" > $@/target.mk content: LICENSE diff --git a/repos/libports/recipes/src/liblzma/content.mk b/repos/libports/recipes/src/liblzma/content.mk index 71f42d2f81..56367905d6 100644 --- a/repos/libports/recipes/src/liblzma/content.mk +++ b/repos/libports/recipes/src/liblzma/content.mk @@ -8,7 +8,6 @@ include: src/lib/liblzma: mkdir -p $@ cp $(REP_DIR)/src/lib/liblzma/config.h $@ - echo "LIBS = liblzma" > $@/target.mk src/xz: mkdir -p $@ diff --git a/repos/libports/recipes/src/libpng/content.mk b/repos/libports/recipes/src/libpng/content.mk index 57bba3ed7d..934dce5c21 100644 --- a/repos/libports/recipes/src/libpng/content.mk +++ b/repos/libports/recipes/src/libpng/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libpng) src/lib/libpng: $(mirror_from_rep_dir) cp -r $(PORT_DIR)/src/lib/libpng/* $@ - echo "LIBS = libpng" > $@/target.mk lib/mk/libpng.mk lib/mk/libpng.inc lib/mk/spec/arm_v8/libpng.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/libqgenodeviewwidget/content.mk b/repos/libports/recipes/src/libqgenodeviewwidget/content.mk index 01dd2e58ce..2d90418a74 100644 --- a/repos/libports/recipes/src/libqgenodeviewwidget/content.mk +++ b/repos/libports/recipes/src/libqgenodeviewwidget/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/libqgenodeviewwidget.mk \ src/lib/qgenodeviewwidget -content: $(MIRROR_FROM_REP_DIR) LICENSE src/lib/qgenodeviewwidget/target.mk +content: $(MIRROR_FROM_REP_DIR) LICENSE $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qgenodeviewwidget/target.mk: - mkdir -p $(dir $@) - echo "LIBS = libqgenodeviewwidget" > $@ - LICENSE: cp $(GENODE_DIR)/LICENSE $@ diff --git a/repos/libports/recipes/src/libqpluginwidget/content.mk b/repos/libports/recipes/src/libqpluginwidget/content.mk index 181990123f..4ab0384681 100644 --- a/repos/libports/recipes/src/libqpluginwidget/content.mk +++ b/repos/libports/recipes/src/libqpluginwidget/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/libqpluginwidget.mk \ src/lib/qpluginwidget -content: $(MIRROR_FROM_REP_DIR) LICENSE src/lib/qpluginwidget/target.mk +content: $(MIRROR_FROM_REP_DIR) LICENSE $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qpluginwidget/target.mk: - mkdir -p $(dir $@) - echo "LIBS = libqpluginwidget" > $@ - LICENSE: cp $(GENODE_DIR)/LICENSE $@ diff --git a/repos/libports/recipes/src/libsparkcrypto/content.mk b/repos/libports/recipes/src/libsparkcrypto/content.mk index 0d3c22cdf9..859b2f4ff7 100644 --- a/repos/libports/recipes/src/libsparkcrypto/content.mk +++ b/repos/libports/recipes/src/libsparkcrypto/content.mk @@ -79,9 +79,3 @@ content: LICENSE LICENSE: echo "BSD-3-Clause-Attribution, see libsparkcrypto/README.rst" > $@ - -content: src/lib/libsparkcrypto/target.mk - -src/lib/libsparkcrypto/target.mk: - mkdir -p $(dir $@) - echo "LIBS = libsparkcrypto" > $@ diff --git a/repos/libports/recipes/src/libssh/content.mk b/repos/libports/recipes/src/libssh/content.mk index 013ef7a3da..cf215f29b9 100644 --- a/repos/libports/recipes/src/libssh/content.mk +++ b/repos/libports/recipes/src/libssh/content.mk @@ -1,4 +1,4 @@ -content: src/lib/libssh/target.mk lib/mk LICENSE +content: src/lib/libssh lib/mk LICENSE PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libssh) @@ -7,9 +7,6 @@ src/lib/libssh: cp -r $(PORT_DIR)/src/lib/libssh/* $@ cp -r $(REP_DIR)/src/lib/libssh/config.h $@ -src/lib/libssh/target.mk: src/lib/libssh - echo "LIBS += libssh" > $@ - lib/mk: mkdir -p $@ cp $(REP_DIR)/lib/mk/libssh.mk $@ diff --git a/repos/libports/recipes/src/libusb/content.mk b/repos/libports/recipes/src/libusb/content.mk index 8e154f94e4..fe6121c7bd 100644 --- a/repos/libports/recipes/src/libusb/content.mk +++ b/repos/libports/recipes/src/libusb/content.mk @@ -10,7 +10,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libusb) src/lib/libusb: mkdir -p $(dir $@) cp -r $(PORT_DIR)/src/lib/libusb $@ - echo "LIBS = libusb" > $@/target.mk $(mirror_from_rep_dir) $(MIRROR_FROM_REP_DIR): diff --git a/repos/libports/recipes/src/libuvc/content.mk b/repos/libports/recipes/src/libuvc/content.mk index 1e97c7aa13..590045575e 100644 --- a/repos/libports/recipes/src/libuvc/content.mk +++ b/repos/libports/recipes/src/libuvc/content.mk @@ -8,7 +8,6 @@ src/lib/libuvc: mkdir -p $(dir $@) cp -r $(PORT_DIR)/src/lib/libuvc $@ rm -rf $@/.git - echo "LIBS = libuvc" > $@/target.mk include: mkdir -p $@ diff --git a/repos/libports/recipes/src/libyuv/content.mk b/repos/libports/recipes/src/libyuv/content.mk index f4e76d4de5..9b83f440e6 100644 --- a/repos/libports/recipes/src/libyuv/content.mk +++ b/repos/libports/recipes/src/libyuv/content.mk @@ -11,13 +11,11 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/libyuv) src/lib/libyuv: mkdir -p $@ cp -r $(PORT_DIR)/src/lib/libyuv/source $@ - echo "LIBS = libyuv" > $@/target.mk include: mkdir -p $@ cp -a $(PORT_DIR)/include/* $@ - $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/mesa/content.mk b/repos/libports/recipes/src/mesa/content.mk index 21fc2bfd8a..355218e4bf 100644 --- a/repos/libports/recipes/src/mesa/content.mk +++ b/repos/libports/recipes/src/mesa/content.mk @@ -31,15 +31,11 @@ MIRROR_FROM_REP_DIR := \ lib/mk/spec/x86_64/mesa.mk \ src/lib/mesa -content: $(MIRROR_FROM_REP_DIR) src/lib/mesa/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/mesa/target.mk: - mkdir -p $(dir $@) - echo "LIBS = mesa" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/mesa) MIRROR_FROM_PORT_DIR := src/lib/mesa/src generated diff --git a/repos/libports/recipes/src/mupdf/content.mk b/repos/libports/recipes/src/mupdf/content.mk index 011a0d56a1..3c3d5dcbbf 100644 --- a/repos/libports/recipes/src/mupdf/content.mk +++ b/repos/libports/recipes/src/mupdf/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/mupdf) src/lib/mupdf: mkdir -p $(dir $@) cp -r $(PORT_DIR)/src/lib/mupdf $@ - echo "LIBS = mupdf" > $@/target.mk lib/mk/%.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/ncurses/content.mk b/repos/libports/recipes/src/ncurses/content.mk index 5ef2e6d994..7107d4e485 100644 --- a/repos/libports/recipes/src/ncurses/content.mk +++ b/repos/libports/recipes/src/ncurses/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/ncurses) src/lib/ncurses: mkdir -p $@ cp -r $(PORT_DIR)/src/lib/ncurses/* $@ - echo "LIBS = ncurses" > $@/target.mk lib/mk/ncurses.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/openjpeg/content.mk b/repos/libports/recipes/src/openjpeg/content.mk index 3c835333ba..b25b40cf66 100644 --- a/repos/libports/recipes/src/openjpeg/content.mk +++ b/repos/libports/recipes/src/openjpeg/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/openjpeg) src/lib/openjpeg: mkdir -p $(dir $@) cp -r $(PORT_DIR)/src/lib/openjpeg $@ - echo "LIBS = openjpeg" > $@/target.mk lib/mk/%.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/openssl/content.mk b/repos/libports/recipes/src/openssl/content.mk index 7772fe0d7a..1f9ab3c2d0 100644 --- a/repos/libports/recipes/src/openssl/content.mk +++ b/repos/libports/recipes/src/openssl/content.mk @@ -11,12 +11,6 @@ content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -content: src/lib/openssl/target.mk - -src/lib/openssl/target.mk: src/lib/openssl - mkdir -p $(dir $@) - echo "LIBS += libcrypto libssl" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/openssl) content: src/lib/openssl diff --git a/repos/libports/recipes/src/pcre/content.mk b/repos/libports/recipes/src/pcre/content.mk index dae4ed37b1..8432441459 100644 --- a/repos/libports/recipes/src/pcre/content.mk +++ b/repos/libports/recipes/src/pcre/content.mk @@ -6,7 +6,6 @@ src/lib/pcre: mkdir -p $@ cp -a $(PORT_DIR)/src/lib/pcre/* $@ cp -a $(REP_DIR)/src/lib/pcre/* $@ - echo "LIBS = pcre" > $@/target.mk lib/mk/pcre.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/pcre16/content.mk b/repos/libports/recipes/src/pcre16/content.mk index 3bd3eabc11..8c43d0699f 100644 --- a/repos/libports/recipes/src/pcre16/content.mk +++ b/repos/libports/recipes/src/pcre16/content.mk @@ -6,7 +6,6 @@ src/lib/pcre: mkdir -p $@ cp -a $(PORT_DIR)/src/lib/pcre/* $@ cp -a $(REP_DIR)/src/lib/pcre/* $@ - echo "LIBS = pcre16" > $@/target.mk lib/mk/pcre16.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/recipes/src/pcsc-lite/content.mk b/repos/libports/recipes/src/pcsc-lite/content.mk index 9d080989d5..1569be42d8 100644 --- a/repos/libports/recipes/src/pcsc-lite/content.mk +++ b/repos/libports/recipes/src/pcsc-lite/content.mk @@ -43,18 +43,6 @@ content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -content: src/lib/pcsc-lite/target.mk - -src/lib/pcsc-lite/target.mk: - mkdir -p $(dir $@) - echo "LIBS = pcsc-lite" > $@ - -content: src/lib/ccid/target.mk - -src/lib/ccid/target.mk: - mkdir -p $(dir $@) - echo "LIBS = ccid" > $@ - content: LICENSE LICENSE: diff --git a/repos/libports/recipes/src/posix/content.mk b/repos/libports/recipes/src/posix/content.mk index 9c937d11e0..603dc50643 100644 --- a/repos/libports/recipes/src/posix/content.mk +++ b/repos/libports/recipes/src/posix/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/posix.mk src/lib/posix -content: $(MIRROR_FROM_REP_DIR) LICENSE src/lib/posix/target.mk +content: $(MIRROR_FROM_REP_DIR) LICENSE $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/posix/target.mk: - mkdir -p $(dir $@) - echo "LIBS = posix" > $@ - LICENSE: cp $(GENODE_DIR)/LICENSE $@ diff --git a/repos/libports/recipes/src/qt5_base/content.mk b/repos/libports/recipes/src/qt5_base/content.mk index d6378a1e31..0bb6ccac65 100644 --- a/repos/libports/recipes/src/qt5_base/content.mk +++ b/repos/libports/recipes/src/qt5_base/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_base.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_base/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_base/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_base" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) MIRROR_FROM_PORT_DIR := src/lib/qt5/qtbase diff --git a/repos/libports/recipes/src/qt5_component/content.mk b/repos/libports/recipes/src/qt5_component/content.mk index b41763cbc8..27f492420c 100644 --- a/repos/libports/recipes/src/qt5_component/content.mk +++ b/repos/libports/recipes/src/qt5_component/content.mk @@ -1,15 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_component.mk \ src/lib/qt5_component/qt_component.cc -content: $(MIRROR_FROM_REP_DIR) LICENSE src/lib/qt5_component/target.mk +content: $(MIRROR_FROM_REP_DIR) LICENSE $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_component/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_component" > $@ - LICENSE: cp $(GENODE_DIR)/LICENSE $@ - diff --git a/repos/libports/recipes/src/qt5_declarative/content.mk b/repos/libports/recipes/src/qt5_declarative/content.mk index 53a9af087f..f741863ff0 100644 --- a/repos/libports/recipes/src/qt5_declarative/content.mk +++ b/repos/libports/recipes/src/qt5_declarative/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_declarative.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_declarative/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_declarative/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_declarative" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) MIRROR_FROM_PORT_DIR := src/lib/qt5/qtdeclarative diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/content.mk b/repos/libports/recipes/src/qt5_graphicaleffects/content.mk index b084e529d7..45c9e4ab1a 100644 --- a/repos/libports/recipes/src/qt5_graphicaleffects/content.mk +++ b/repos/libports/recipes/src/qt5_graphicaleffects/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_graphicaleffects.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_graphicaleffects/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_graphicaleffects/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_graphicaleffects" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) MIRROR_FROM_PORT_DIR := src/lib/qt5/qtgraphicaleffects diff --git a/repos/libports/recipes/src/qt5_quickcontrols/content.mk b/repos/libports/recipes/src/qt5_quickcontrols/content.mk index 37f5d15097..8cf841f090 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols/content.mk +++ b/repos/libports/recipes/src/qt5_quickcontrols/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_quickcontrols.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_quickcontrols/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_quickcontrols/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_quickcontrols" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) MIRROR_FROM_PORT_DIR := src/lib/qt5/qtquickcontrols diff --git a/repos/libports/recipes/src/qt5_quickcontrols2/content.mk b/repos/libports/recipes/src/qt5_quickcontrols2/content.mk index 42f4ef72cf..8b764635f1 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols2/content.mk +++ b/repos/libports/recipes/src/qt5_quickcontrols2/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_quickcontrols2.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_quickcontrols2/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_quickcontrols2/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_quickcontrols2" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) MIRROR_FROM_PORT_DIR := src/lib/qt5/qtquickcontrols2 diff --git a/repos/libports/recipes/src/qt5_svg/content.mk b/repos/libports/recipes/src/qt5_svg/content.mk index 0b1c104e9e..5eec4583c5 100644 --- a/repos/libports/recipes/src/qt5_svg/content.mk +++ b/repos/libports/recipes/src/qt5_svg/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_svg.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_svg/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_svg/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_svg" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) MIRROR_FROM_PORT_DIR := src/lib/qt5/qtsvg diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard/content.mk b/repos/libports/recipes/src/qt5_virtualkeyboard/content.mk index 329fceec80..3d77606630 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard/content.mk +++ b/repos/libports/recipes/src/qt5_virtualkeyboard/content.mk @@ -1,14 +1,10 @@ MIRROR_FROM_REP_DIR := lib/mk/qt5_virtualkeyboard.mk -content: $(MIRROR_FROM_REP_DIR) src/lib/qt5_virtualkeyboard/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/qt5_virtualkeyboard/target.mk: - mkdir -p $(dir $@) - echo "LIBS = qt5_virtualkeyboard" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/qt5) MIRROR_FROM_PORT_DIR := src/lib/qt5/qtvirtualkeyboard diff --git a/repos/libports/recipes/src/sanitizer/content.mk b/repos/libports/recipes/src/sanitizer/content.mk index 6299fcce4f..bd902c5efa 100644 --- a/repos/libports/recipes/src/sanitizer/content.mk +++ b/repos/libports/recipes/src/sanitizer/content.mk @@ -13,7 +13,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/sanitizer) src/lib/sanitizer: mkdir -p $@ cp -r $(PORT_DIR)/src/lib/sanitizer/* $@ - echo "LIBS = libsanitizer_common libubsan" > $@/target.mk content: LICENSE diff --git a/repos/libports/recipes/src/spark/content.mk b/repos/libports/recipes/src/spark/content.mk index b1d2bdf9bf..1b079ab24b 100644 --- a/repos/libports/recipes/src/spark/content.mk +++ b/repos/libports/recipes/src/spark/content.mk @@ -71,9 +71,3 @@ content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) - -content: src/lib/spark/target.mk - -src/lib/spark/target.mk: - mkdir -p $(dir $@) - echo "LIBS = spark" > $@ diff --git a/repos/libports/recipes/src/stdcxx/content.mk b/repos/libports/recipes/src/stdcxx/content.mk index 78d1e7c35f..38c840d8a3 100644 --- a/repos/libports/recipes/src/stdcxx/content.mk +++ b/repos/libports/recipes/src/stdcxx/content.mk @@ -4,14 +4,11 @@ MIRROR_FROM_REP_DIR := lib/mk/stdcxx-c++98.mk \ MIRROR_FROM_PORT_DIR := src/lib/stdcxx -content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_PORT_DIR) src/lib/stdcxx/target.mk +content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_PORT_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) -src/lib/stdcxx/target.mk: $(MIRROR_FROM_PORT_DIR) - echo "LIBS = stdcxx" > $@ - PORT_DIR := $(call port_dir,$(REP_DIR)/ports/stdcxx) $(MIRROR_FROM_PORT_DIR): diff --git a/repos/libports/recipes/src/zlib/content.mk b/repos/libports/recipes/src/zlib/content.mk index 6ae1a807aa..b200740119 100644 --- a/repos/libports/recipes/src/zlib/content.mk +++ b/repos/libports/recipes/src/zlib/content.mk @@ -5,7 +5,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/zlib) src/lib/zlib: mkdir -p $@ cp -r $(PORT_DIR)/src/lib/zlib/* $@ - echo "LIBS = zlib" > $@/target.mk lib/mk/zlib.mk: $(mirror_from_rep_dir) diff --git a/repos/libports/run/fs_rom_update_fat.run b/repos/libports/run/fs_rom_update_fat.run index a009d2863e..9ae4876ff9 100644 --- a/repos/libports/run/fs_rom_update_fat.run +++ b/repos/libports/run/fs_rom_update_fat.run @@ -5,8 +5,8 @@ set build_components { core init timer app/rom_logger app/rom_to_file - lib/vfs/fatfs - lib/vfs/import + lib/vfs_fatfs + lib/vfs_import server/dynamic_rom server/fs_rom server/vfs_block diff --git a/repos/libports/run/libc_block.run b/repos/libports/run/libc_block.run index 0bdb124524..1e46c7a2b7 100644 --- a/repos/libports/run/libc_block.run +++ b/repos/libports/run/libc_block.run @@ -8,7 +8,7 @@ create_boot_directory build { core init timer server/vfs_block - lib/vfs/import + lib/vfs_import test/libc_block } diff --git a/repos/libports/run/libc_select.run b/repos/libports/run/libc_select.run index bc56c3c30a..d27bdd8794 100644 --- a/repos/libports/run/libc_select.run +++ b/repos/libports/run/libc_select.run @@ -1,7 +1,7 @@ set build_components { core init timer server/terminal_crosslink test/libc_select test/libc_counter - lib/vfs/pipe + lib/vfs_pipe } build $build_components diff --git a/repos/libports/run/libc_vfs_fat.run b/repos/libports/run/libc_vfs_fat.run index 8ea6c53b83..a5c17123ec 100644 --- a/repos/libports/run/libc_vfs_fat.run +++ b/repos/libports/run/libc_vfs_fat.run @@ -1,7 +1,7 @@ set mkfs_cmd [installed_command mkfs.vfat] set mkfs_opts "-F32 -nlibc_vfs" -set test_build_components lib/vfs/fatfs +set test_build_components lib/vfs_fatfs set test_vfs_config "" set test_boot_modules vfs_fatfs.lib.so diff --git a/repos/libports/run/libc_vfs_fs_fat.run b/repos/libports/run/libc_vfs_fs_fat.run index d6079385c1..f1ac461c1a 100644 --- a/repos/libports/run/libc_vfs_fs_fat.run +++ b/repos/libports/run/libc_vfs_fs_fat.run @@ -6,7 +6,7 @@ if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { set mkfs_cmd [installed_command mkfs.vfat] set mkfs_opts "-F32 -nlibc_vfs" -set test_build_components lib/vfs/fatfs +set test_build_components lib/vfs_fatfs set test_vfs_config "" set test_boot_modules vfs_fatfs.lib.so diff --git a/repos/libports/run/libc_vfs_select.run b/repos/libports/run/libc_vfs_select.run index 83d12fd4f3..f7d6949688 100644 --- a/repos/libports/run/libc_vfs_select.run +++ b/repos/libports/run/libc_vfs_select.run @@ -1,7 +1,7 @@ set build_components { core init timer server/terminal_crosslink server/vfs test/libc_select test/libc_counter - lib/vfs/pipe + lib/vfs_pipe } build $build_components diff --git a/repos/libports/run/lwip_lx.run b/repos/libports/run/lwip_lx.run index e0cdc92afa..723518b9fa 100644 --- a/repos/libports/run/lwip_lx.run +++ b/repos/libports/run/lwip_lx.run @@ -30,7 +30,7 @@ build { core init timer drivers/nic test/lwip/http_srv - lib/vfs/lwip + lib/vfs_lwip server/nic_router server/report_rom } diff --git a/repos/libports/run/mesa.inc b/repos/libports/run/mesa.inc index 5503fb0e97..43f7dc4b7c 100644 --- a/repos/libports/run/mesa.inc +++ b/repos/libports/run/mesa.inc @@ -26,12 +26,12 @@ import_from_depot $imports set build_components { drivers/gpu/intel - lib/mesa/softpipe + lib/mesa_softpipe core init timer } -lappend_if $use_iris build_components lib/mesa/iris -lappend_if $use_etnaviv build_components lib/mesa/etnaviv +lappend_if $use_iris build_components lib/mesa_iris +lappend_if $use_etnaviv build_components lib/mesa_etnaviv lappend_if $use_etnaviv build_components drivers/gpu/etnaviv lappend build_components $demo_component diff --git a/repos/libports/run/nic_router.inc b/repos/libports/run/nic_router.inc index fd8539c946..d7db704bfb 100644 --- a/repos/libports/run/nic_router.inc +++ b/repos/libports/run/nic_router.inc @@ -5,7 +5,7 @@ if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { set targets "core init timer server/nic_router server/nic_bridge test/lwip/http_srv test/lwip/http_clnt test/lwip/udp - server/nic_loopback lib/vfs/lwip " + server/nic_loopback lib/vfs_lwip " proc client_bin { prot } { if {$prot == "udp"} { return "test-lwip-udp-client" } diff --git a/repos/libports/run/oss.run b/repos/libports/run/oss.run index e41c34ac67..c6c070d4e7 100644 --- a/repos/libports/run/oss.run +++ b/repos/libports/run/oss.run @@ -11,7 +11,7 @@ if {[have_include "power_on/qemu"]} { set build_components { core init timer drivers/audio - lib/vfs/oss test/oss + lib/vfs_oss test/oss } source ${genode_dir}/repos/base/run/platform_drv.inc diff --git a/repos/libports/run/smartcard.run b/repos/libports/run/smartcard.run index cfa92347f7..dc850c612a 100644 --- a/repos/libports/run/smartcard.run +++ b/repos/libports/run/smartcard.run @@ -26,8 +26,8 @@ set build_components { core init timer drivers/usb_host test/smartcard - lib/vfs/libusb - lib/vfs/pipe + lib/vfs_libusb + lib/vfs_pipe } source ${genode_dir}/repos/base/run/platform_drv.inc diff --git a/repos/libports/run/vfs_lwip.inc b/repos/libports/run/vfs_lwip.inc index c972685d63..dfcd3b9acc 100644 --- a/repos/libports/run/vfs_lwip.inc +++ b/repos/libports/run/vfs_lwip.inc @@ -1,6 +1,6 @@ proc append_socket_fs_build_components { } { global build_components - append build_components { lib/vfs/lwip } + append build_components { lib/vfs_lwip } } proc socket_fs_plugin {} { return lwip } diff --git a/repos/libports/src/lib/mesa/etnaviv/target.mk b/repos/libports/src/lib/mesa/etnaviv/target.mk deleted file mode 100644 index 7a8d51a642..0000000000 --- a/repos/libports/src/lib/mesa/etnaviv/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -REQUIRES := arm_v8a -TARGET := dummy-mesa_gpu-etnaviv -LIBS := mesa_gpu-etnaviv diff --git a/repos/libports/src/lib/mesa/iris/target.mk b/repos/libports/src/lib/mesa/iris/target.mk deleted file mode 100644 index c0da6330d9..0000000000 --- a/repos/libports/src/lib/mesa/iris/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -REQUIRES := x86 - -TARGET = dummy-mesa_gpu-iris -LIBS = mesa_gpu-iris diff --git a/repos/libports/src/lib/mesa/lima/target.mk b/repos/libports/src/lib/mesa/lima/target.mk deleted file mode 100644 index cff12952c1..0000000000 --- a/repos/libports/src/lib/mesa/lima/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -REQUIRES := arm_v8a -TARGET := dummy-mesa_gpu-lima -LIBS := mesa_gpu-lima diff --git a/repos/libports/src/lib/mesa/softpipe/target.mk b/repos/libports/src/lib/mesa/softpipe/target.mk deleted file mode 100644 index 682115dbee..0000000000 --- a/repos/libports/src/lib/mesa/softpipe/target.mk +++ /dev/null @@ -1 +0,0 @@ -LIBS := mesa_gpu-softpipe diff --git a/repos/libports/src/lib/vfs/fatfs/target.mk b/repos/libports/src/lib/vfs/fatfs/target.mk deleted file mode 100644 index bee93b557c..0000000000 --- a/repos/libports/src/lib/vfs/fatfs/target.mk +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = dummy-vfs_fatfs -LIBS = vfs_fatfs - -BUILD_ARTIFACTS := - -CC_CXX_WARN_STRICT = diff --git a/repos/libports/src/lib/vfs/jitterentropy/target.mk b/repos/libports/src/lib/vfs/jitterentropy/target.mk deleted file mode 100644 index bd2594b30b..0000000000 --- a/repos/libports/src/lib/vfs/jitterentropy/target.mk +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = dummy-vfs_jitterentropy -LIBS = vfs_jitterentropy - -BUILD_ARTIFACTS := - -CC_CXX_WARN_STRICT = diff --git a/repos/libports/src/lib/vfs/libusb/target.mk b/repos/libports/src/lib/vfs/libusb/target.mk deleted file mode 100644 index 73c07409c7..0000000000 --- a/repos/libports/src/lib/vfs/libusb/target.mk +++ /dev/null @@ -1,6 +0,0 @@ -TARGET = dummy-vfs_libusb -LIBS = vfs_libusb - -BUILD_ARTIFACTS := - -CC_CXX_WARN_STRICT = diff --git a/repos/libports/src/lib/vfs/lwip/target.mk b/repos/libports/src/lib/vfs/lwip/target.mk deleted file mode 100644 index 1049802bb0..0000000000 --- a/repos/libports/src/lib/vfs/lwip/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_lwip -LIBS = vfs_lwip - -BUILD_ARTIFACTS := diff --git a/repos/libports/src/lib/vfs/oss/target.mk b/repos/libports/src/lib/vfs/oss/target.mk deleted file mode 100644 index 836274ded1..0000000000 --- a/repos/libports/src/lib/vfs/oss/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_oss -LIBS = vfs_oss - -BUILD_ARTIFACTS := diff --git a/repos/os/recipes/src/sandbox/content.mk b/repos/os/recipes/src/sandbox/content.mk index 0bfc4af807..956e67fc9f 100644 --- a/repos/os/recipes/src/sandbox/content.mk +++ b/repos/os/recipes/src/sandbox/content.mk @@ -6,8 +6,3 @@ content: $(MIRROR_FROM_REP_DIR) $(MIRROR_FROM_REP_DIR): $(mirror_from_rep_dir) - -content: src/lib/sandbox/target.mk - -src/lib/sandbox/target.mk: - echo "LIBS += sandbox" > $@ diff --git a/repos/os/run/test.run b/repos/os/run/test.run index f9599e9132..98e649575e 100644 --- a/repos/os/run/test.run +++ b/repos/os/run/test.run @@ -229,7 +229,7 @@ foreach rom [content_rom_modules] { # handle vfs plugin shared-object targets if {[regexp "^vfs_(.+).lib.so$" $rom dummy plugin]} { - lappend build_targets lib/vfs/$plugin + lappend build_targets lib/vfs_$plugin continue } diff --git a/repos/os/run/vfs_block.run b/repos/os/run/vfs_block.run index e54e061e10..55243f5a64 100644 --- a/repos/os/run/vfs_block.run +++ b/repos/os/run/vfs_block.run @@ -6,7 +6,7 @@ set build_components { server/vfs server/vfs_block app/block_tester - lib/vfs/import + lib/vfs_import } source ${genode_dir}/repos/base/run/platform_drv.inc diff --git a/repos/os/src/lib/vfs/capture/target.mk b/repos/os/src/lib/vfs/capture/target.mk deleted file mode 100644 index 31e9307f89..0000000000 --- a/repos/os/src/lib/vfs/capture/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_capture -LIBS = vfs_capture - -BUILD_ARTIFACTS := diff --git a/repos/os/src/lib/vfs/tap/target.mk b/repos/os/src/lib/vfs/tap/target.mk deleted file mode 100644 index 46dfa30eca..0000000000 --- a/repos/os/src/lib/vfs/tap/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = dummy-vfs_tap -LIBS = vfs_tap - -BUILD_ARTIFACTS := diff --git a/repos/pc/run/intel_fb.run b/repos/pc/run/intel_fb.run index 9fee27180e..bcae18868a 100644 --- a/repos/pc/run/intel_fb.run +++ b/repos/pc/run/intel_fb.run @@ -24,7 +24,7 @@ set build_components { server/report_rom server/vfs server/fs_rom - lib/vfs/import + lib/vfs_import } diff --git a/repos/pc/run/wifi.run b/repos/pc/run/wifi.run index 2955fce6cf..2e87c25e43 100644 --- a/repos/pc/run/wifi.run +++ b/repos/pc/run/wifi.run @@ -71,9 +71,9 @@ set build_components { server/dynamic_rom server/nic_router test/lwip/http_srv - lib/vfs/wifi - lib/vfs/jitterentropy - lib/vfs/lwip + lib/vfs_wifi + lib/vfs_jitterentropy + lib/vfs_lwip } source ${genode_dir}/repos/base/run/platform_drv.inc diff --git a/repos/pc/src/lib/vfs/wifi/target.mk b/repos/pc/src/lib/vfs/wifi/target.mk deleted file mode 100644 index b469808922..0000000000 --- a/repos/pc/src/lib/vfs/wifi/target.mk +++ /dev/null @@ -1,3 +0,0 @@ -LIBS := vfs_wifi - -BUILD_ARTIFACTS := diff --git a/repos/ports/run/gdb_monitor.run b/repos/ports/run/gdb_monitor.run index 28686f7b33..f09bffcb5c 100644 --- a/repos/ports/run/gdb_monitor.run +++ b/repos/ports/run/gdb_monitor.run @@ -23,7 +23,7 @@ set build_components { drivers/uart app/gdb_monitor test/gdb_monitor - lib/vfs/pipe + lib/vfs_pipe } lappend build_components "lib/gdbserver_platform-$::env(KERNEL)" diff --git a/repos/ports/run/gdb_monitor_interactive.run b/repos/ports/run/gdb_monitor_interactive.run index 8b608b80ad..bc1c2f624d 100644 --- a/repos/ports/run/gdb_monitor_interactive.run +++ b/repos/ports/run/gdb_monitor_interactive.run @@ -19,7 +19,7 @@ set build_components { drivers/uart app/gdb_monitor test/gdb_monitor - lib/vfs/pipe + lib/vfs_pipe } lappend build_components "lib/gdbserver_platform-$::env(KERNEL)" diff --git a/repos/ports/run/gdb_monitor_target_config.run b/repos/ports/run/gdb_monitor_target_config.run index 2bff522aac..4040dc609d 100644 --- a/repos/ports/run/gdb_monitor_target_config.run +++ b/repos/ports/run/gdb_monitor_target_config.run @@ -18,7 +18,7 @@ set build_components { drivers/uart app/gdb_monitor test/gdb_monitor_target_config - lib/vfs/pipe + lib/vfs_pipe } lappend build_components "lib/gdbserver_platform-$::env(KERNEL)" diff --git a/repos/ports/run/tool_chain_auto.run b/repos/ports/run/tool_chain_auto.run index 2e9df0dabb..8d350d9985 100644 --- a/repos/ports/run/tool_chain_auto.run +++ b/repos/ports/run/tool_chain_auto.run @@ -78,7 +78,7 @@ set pkgs "$binutils $gcc" foreach pkg $pkgs { lappend_if [expr ![file exists bin/$pkg]] build_components noux-pkg/$pkg } -lappend build_components "lib/vfs/pipe" +lappend build_components "lib/vfs_pipe" lappend build_components "server/vfs" build $build_components diff --git a/repos/ports/run/vbox5_genode_usb_hid_raw.run b/repos/ports/run/vbox5_genode_usb_hid_raw.run index ee50ff7c80..a7ffb3b3de 100644 --- a/repos/ports/run/vbox5_genode_usb_hid_raw.run +++ b/repos/ports/run/vbox5_genode_usb_hid_raw.run @@ -19,7 +19,7 @@ set build_components { drivers/usb_host server/log_terminal server/fs_rom - server/vfs lib/vfs/import + server/vfs lib/vfs_import server/report_rom app/usb_report_filter virtualbox5 diff --git a/repos/ports/run/vbox_share.inc b/repos/ports/run/vbox_share.inc index 6fd75276bf..cc8e536207 100644 --- a/repos/ports/run/vbox_share.inc +++ b/repos/ports/run/vbox_share.inc @@ -104,7 +104,7 @@ set build_components { server/event_filter server/report_rom server/fs_rom server/vfs server/tcp_terminal drivers/nic - lib/vfs/lwip lib/vfs/pipe lib/vfs/import + lib/vfs_lwip lib/vfs_pipe lib/vfs_import server/nic_router } diff --git a/repos/ports/run/virtualbox_auto.inc b/repos/ports/run/virtualbox_auto.inc index 6e50e9da21..ea0884506b 100644 --- a/repos/ports/run/virtualbox_auto.inc +++ b/repos/ports/run/virtualbox_auto.inc @@ -57,7 +57,7 @@ lappend_if [expr $use_vbox5] build_components virtualbox5 lappend_if [expr $use_ps2] build_components drivers/ps2 lappend_if [expr $use_usb] build_components app/usb_report_filter lappend_if [have_spec x86] build_components drivers/rtc -lappend_if [expr $use_ram_fs || $use_usb] build_components lib/vfs/import +lappend_if [expr $use_ram_fs || $use_usb] build_components lib/vfs_import lappend_if [expr $use_cpu_load] build_components app/trace_subject_reporter lappend_if [expr $use_cpu_load] build_components app/cpu_load_display lappend_if [expr $use_cpu_load] build_components app/top diff --git a/repos/ports/src/lib/gdbserver_platform-nova/target.mk b/repos/ports/src/lib/gdbserver_platform-nova/target.mk deleted file mode 100644 index 383999edd5..0000000000 --- a/repos/ports/src/lib/gdbserver_platform-nova/target.mk +++ /dev/null @@ -1,4 +0,0 @@ -TARGET = gdbserver_platform-nova -LIBS = gdbserver_platform-nova - -CC_CXX_WARN_STRICT = diff --git a/tool/run/boot_dir/fiasco b/tool/run/boot_dir/fiasco index 8fddda0e61..e3f29af063 100644 --- a/tool/run/boot_dir/fiasco +++ b/tool/run/boot_dir/fiasco @@ -21,7 +21,7 @@ proc run_boot_dir {binaries} { set kernel_arg "" set ld_arg "" if {![file exists [run_dir]/genode/fiasco]} { set kernel_arg "kernel/fiasco" } - if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld/fiasco" } + if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld-fiasco" } set targets "$kernel_arg $ld_arg" if {[llength $targets]} { build $targets } diff --git a/tool/run/boot_dir/foc b/tool/run/boot_dir/foc index e529c4aad6..e8a7673b59 100644 --- a/tool/run/boot_dir/foc +++ b/tool/run/boot_dir/foc @@ -65,7 +65,7 @@ proc run_boot_dir_x86 {binaries} { set kernel_arg "" set ld_arg "" if {![file exists [run_dir]/genode/foc]} { set kernel_arg "kernel/foc" } - if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld/foc" } + if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld-foc" } set targets "$kernel_arg $ld_arg" if {[llength $targets]} { build $targets } @@ -157,7 +157,7 @@ proc run_boot_dir_arm { binaries } { global run_target - build { lib/ld/foc kernel/foc } + build { lib/ld-foc kernel/foc } build_core_image $binaries diff --git a/tool/run/boot_dir/linux b/tool/run/boot_dir/linux index d79fd23c54..6d29be5c45 100644 --- a/tool/run/boot_dir/linux +++ b/tool/run/boot_dir/linux @@ -10,11 +10,18 @@ proc run_boot_dir {binaries} { set missing_boot_modules { } foreach binary $binaries { + set src_binary_path "[pwd]/bin/[kernel_specific_binary $binary]" + + set dst_binary "[kernel_specific_binary $binary]" + if {$dst_binary == "core-linux"} { set dst_binary "core" } + if {$dst_binary == "ld-linux.lib.so"} { set dst_binary "ld.lib.so" } + if {$dst_binary == "linux_timer_drv"} { set dst_binary "timer" } + if {[file exists $src_binary_path]} { - exec ln -sf $src_binary_path [run_dir]/genode/$binary + exec ln -sf $src_binary_path [run_dir]/genode/$dst_binary } else { - lappend missing_boot_modules [kernel_specific_binary $binary] + lappend missing_boot_modules $binary } } if {[llength $missing_boot_modules]} { diff --git a/tool/run/boot_dir/nova b/tool/run/boot_dir/nova index 06d05ce1be..5c95b1ed25 100644 --- a/tool/run/boot_dir/nova +++ b/tool/run/boot_dir/nova @@ -37,7 +37,7 @@ proc run_boot_dir {binaries} { set ld_arg "" if {![file exists [run_dir]/genode/hypervisor]} { set kernel_arg kernel } if {![file exists [run_dir]/genode/core-nova.a]} { set core_arg core/nova } - if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg lib/ld/nova } + if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg lib/ld-nova } set targets "$kernel_arg $core_arg $ld_arg" if {[llength $targets]} { build $targets } diff --git a/tool/run/boot_dir/pistachio b/tool/run/boot_dir/pistachio index db2d2afc80..f6f5004c5b 100644 --- a/tool/run/boot_dir/pistachio +++ b/tool/run/boot_dir/pistachio @@ -20,7 +20,7 @@ proc run_boot_dir {binaries} { set kernel_arg "" set ld_arg "" if {![file exists [run_dir]/genode/pistachio]} { set kernel_arg "kernel/pistachio" } - if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld/pistachio" } + if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld-pistachio" } set targets "$kernel_arg $ld_arg" if {[llength $targets]} { build $targets } diff --git a/tool/run/boot_dir/sel4 b/tool/run/boot_dir/sel4 index 75a077630e..2787eeb701 100644 --- a/tool/run/boot_dir/sel4 +++ b/tool/run/boot_dir/sel4 @@ -33,7 +33,7 @@ proc run_boot_dir {binaries} { set kernel_arg "" set ld_arg "" if {![file exists [run_dir]/genode/sel4]} { set kernel_arg "kernel/sel4" } - if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld/sel4" } + if {![file exists [run_dir]/genode/ld.lib.so]} { set ld_arg "lib/ld-sel4" } set targets "$kernel_arg $ld_arg" if {[llength $targets]} { build $targets } From 9aab61f5a721ac469685c473b43eaf3860b5e42a Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 2 Sep 2022 15:17:19 +0200 Subject: [PATCH 206/354] mk: allow declaration of build artifacts for libs The build system automatically announces the names of shared libraries as build artifacts. However, in rare cases, it is required to manually define them. In particular, the 'ld' stub library plays no role at runtime and should not be integrated into the boot image. This patch adds a customization hook following the same pattern as used for target.mk files, namely the BUILD_ARTIFACTS variable. If defined, its value is taken as the list of boot artifacts generated by the library-description file. Issue #4368 --- repos/base/mk/dep_lib.mk | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/repos/base/mk/dep_lib.mk b/repos/base/mk/dep_lib.mk index 0648a8c2db..fca6396daa 100644 --- a/repos/base/mk/dep_lib.mk +++ b/repos/base/mk/dep_lib.mk @@ -82,14 +82,19 @@ include $(BASE_DIR)/mk/base-libs.mk include $(LIB_MK) ifdef SHARED_LIB -LIBS += ldso_so_support +BUILD_ARTIFACTS ?= $(LIB).lib.so +endif # record creation of shared library build artifact append_artifact_to_progress_log: - @echo -e "\n# Build artifact $(LIB).lib.so\n" >> $(LIB_PROGRESS_LOG) + @( $(foreach A,$(BUILD_ARTIFACTS),\ + echo -e "\n# Build artifact $A\n";) true \ + ) >> $(LIB_PROGRESS_LOG) append_lib_to_progress_log: append_artifact_to_progress_log -endif +ifdef SHARED_LIB +LIBS += ldso_so_support +endif # # Hide archive dependencies of shared libraries from users of the shared From f1f0ee3a215c3d63c294e6729bb44daa0e137739 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 2 Sep 2022 15:58:12 +0200 Subject: [PATCH 207/354] base: disregard ld.lib.so stub as build artifact The ld.lib.so stub library generated by base/lib/mk/ld.mk has no purpose at runtime. On the contrary, it must not be integrated into the boot image because its name collides with the kernel-specific dynamic linker. --- repos/base/lib/mk/ld.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/base/lib/mk/ld.mk b/repos/base/lib/mk/ld.mk index 4ba705717b..23fed31558 100644 --- a/repos/base/lib/mk/ld.mk +++ b/repos/base/lib/mk/ld.mk @@ -15,3 +15,6 @@ SHARED_LIB := yes LD_OPT += -T$(BASE_DIR)/src/lib/ldso/linker.ld LIBS += $(addprefix ld-,$(KERNEL)) + +# as the stub libarary is not used at runtime, disregard it as build artifact +BUILD_ARTIFACTS := From 7be98166ee1119361f1fa884a3f1be18e5a02bb4 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 2 Sep 2022 15:43:25 +0200 Subject: [PATCH 208/354] run: improve 'build_boot_image [build_artifacts]' This patch make the use of the result of the 'build_artifacts' function as input for 'build_boot_image' more robust. Since 'build_artifacts' obtains binary names from the progress.log, the names of core, ld.lib.so, and the timer correspond to the kernel-specific names. However, 'build_boot_image' expects the kernel-agnostic names as arguments. Kernel-specific files need special treatment when integrated in the boot image: the kernel-specific file is copied and renamed to the kernel-agnostic name. Without this patch, the kernel-specific file is copied as is (e.g., ld-nova.lib.so). So the name of the ROM module is wrong. This patch resets the kernel-specific names to the generic names so that the special-case handling comes into effect. --- tool/run/run | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tool/run/run b/tool/run/run index b7cada39d6..93a4e81690 100755 --- a/tool/run/run +++ b/tool/run/run @@ -749,6 +749,16 @@ proc copy_file {src dst} { proc copy_genode_binaries_to_run_dir { binaries } { foreach binary $binaries { + + # + # Normalize kernel-specific file names, needed when a run script passes + # [build_artifacts] to the build_boot_image command. The build artfact + # fetched from the progress.log has the kernel-specific name. + # + foreach name { "timer" "core" "ld.lib.so" } { + if {$binary == [kernel_specific_binary $name silent]} { + set binary $name } } + copy_file bin/[kernel_specific_binary $binary] [run_dir]/genode/$binary } } From 35661d065e36ecb476ab5242113027c93d70f166 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 6 Sep 2022 12:14:47 +0200 Subject: [PATCH 209/354] base-linux: omit unused lib/mk/ from API recipe The 'base-linux' API is used by hybrid Genode/Linux programs for the lx_hybrid library. This API archive happend to contain other libraries - like seccomp - that are solely needed for building core. With the change of the build system in issue #4599, the build system would attempt to build all libraries instead of merely the library dependencies of the available targets. Hence, it would trigger the build of, e.g., the seccomp library for each user of the base-linux API. This patch avoids these superfluous build steps by pruning the content of lib/mk/ to the libraries actually needed for lx_hybrid users. Issue #4599 --- .../recipes/api/base-linux/content.mk | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/repos/base-linux/recipes/api/base-linux/content.mk b/repos/base-linux/recipes/api/base-linux/content.mk index c77cf9d735..7839296c17 100644 --- a/repos/base-linux/recipes/api/base-linux/content.mk +++ b/repos/base-linux/recipes/api/base-linux/content.mk @@ -1,8 +1,7 @@ FROM_BASE_LINUX := etc src/lib/syscall src/lib/lx_hybrid lib/import include -FROM_BASE_LINUX_AND_BASE := lib/mk src/lib/base src/include -FROM_BASE := src/lib/timeout +FROM_BASE_LINUX_AND_BASE := src/lib/base src/include -content: $(FROM_BASE_LINUX) $(FROM_BASE_LINUX_AND_BASE) $(FROM_BASE) LICENSE +content: $(FROM_BASE_LINUX) $(FROM_BASE_LINUX_AND_BASE) LICENSE $(FROM_BASE_LINUX): mkdir -p $@ @@ -13,9 +12,30 @@ $(FROM_BASE_LINUX_AND_BASE): cp -r $(GENODE_DIR)/repos/base/$@/* $@ cp -r $(REP_DIR)/$@/* $@ -$(FROM_BASE): +BASE_LIB_MK_CONTENT := \ + $(addprefix lib/mk/,base-common.inc timeout.mk) + +content: $(BASE_LIB_MK_CONTENT) + +$(BASE_LIB_MK_CONTENT): + mkdir -p $(dir $@) + cp $(GENODE_DIR)/repos/base/$@ $@ + +content: src/lib/timeout + +src/lib/timeout: mkdir -p $@ cp -r $(GENODE_DIR)/repos/base/$@/* $@ +BASE_LINUX_LIB_MK_CONTENT := \ + $(addprefix lib/mk/,lx_hybrid.mk base-linux.inc base-linux-common.mk) \ + $(foreach S,arm arm_64 x86_32 x86_64,lib/mk/spec/$S/syscall-linux.mk) + +content: $(BASE_LINUX_LIB_MK_CONTENT) + +$(BASE_LINUX_LIB_MK_CONTENT): + mkdir -p $(dir $@) + cp $(REP_DIR)/$@ $@ + LICENSE: cp $(GENODE_DIR)/LICENSE $@ From bd9478204de319c334191335b44f17335dd82195 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 6 Sep 2022 14:03:53 +0200 Subject: [PATCH 210/354] Exclude file lib from gems API The 'file' library makes the gems API depend on the libc, which is not desireable because most users of the gems API have no direct libc dependency. With the changes of issue #4599, the build of each src archive that depends on the gems API would attempt to build the 'file' library and thereby demand the libc. Note that the 'file' library is a relic that should better not be promoted as part of the gems API. Hence, this patch removes the file library from the gems API and adds it to the src archives of the few remaining users. Issue #4599 --- repos/gems/recipes/api/gems/content.mk | 4 ++-- repos/gems/recipes/src/backdrop/content.mk | 5 +++++ repos/gems/recipes/src/menu_view/content.mk | 5 +++++ repos/gems/recipes/src/themed_decorator/content.mk | 5 +++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/repos/gems/recipes/api/gems/content.mk b/repos/gems/recipes/api/gems/content.mk index 8015045e7d..720bf4b437 100644 --- a/repos/gems/recipes/api/gems/content.mk +++ b/repos/gems/recipes/api/gems/content.mk @@ -1,6 +1,6 @@ -content: include/gems src/lib/file lib/mk/file.mk LICENSE +content: include/gems LICENSE -include/gems src/lib/file lib/mk/file.mk: +include/gems: $(mirror_from_rep_dir) LICENSE: diff --git a/repos/gems/recipes/src/backdrop/content.mk b/repos/gems/recipes/src/backdrop/content.mk index 5d7cd07a6a..a99d23a0f9 100644 --- a/repos/gems/recipes/src/backdrop/content.mk +++ b/repos/gems/recipes/src/backdrop/content.mk @@ -1,2 +1,7 @@ SRC_DIR := src/app/backdrop include $(GENODE_DIR)/repos/base/recipes/src/content.inc + +content: src/lib/file lib/mk/file.mk + +src/lib/file lib/mk/file.mk: + $(mirror_from_rep_dir) diff --git a/repos/gems/recipes/src/menu_view/content.mk b/repos/gems/recipes/src/menu_view/content.mk index 12400e46e6..28b09cc2c6 100644 --- a/repos/gems/recipes/src/menu_view/content.mk +++ b/repos/gems/recipes/src/menu_view/content.mk @@ -6,3 +6,8 @@ content: include/polygon_gfx include/polygon_gfx: mkdir -p $@ cp $(GENODE_DIR)/repos/gems/include/polygon_gfx/* $@ + +content: src/lib/file lib/mk/file.mk + +src/lib/file lib/mk/file.mk: + $(mirror_from_rep_dir) diff --git a/repos/gems/recipes/src/themed_decorator/content.mk b/repos/gems/recipes/src/themed_decorator/content.mk index 066be3044d..fbf189b728 100644 --- a/repos/gems/recipes/src/themed_decorator/content.mk +++ b/repos/gems/recipes/src/themed_decorator/content.mk @@ -6,3 +6,8 @@ content: include/decorator include/decorator: mkdir -p $@ cp $(GENODE_DIR)/repos/os/include/decorator/* $@ + +content: src/lib/file lib/mk/file.mk + +src/lib/file lib/mk/file.mk: + $(mirror_from_rep_dir) From 4c1ec0404a59983293f7155dda9399a2ef13e227 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 6 Sep 2022 14:47:18 +0200 Subject: [PATCH 211/354] Remove unused target from recipes/src/libc --- repos/libports/recipes/src/libc/content.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/libports/recipes/src/libc/content.mk b/repos/libports/recipes/src/libc/content.mk index 86f6e6e014..0d0aef61f6 100644 --- a/repos/libports/recipes/src/libc/content.mk +++ b/repos/libports/recipes/src/libc/content.mk @@ -8,7 +8,7 @@ src/lib/libc: cp -r $(LIBC_PORT_DIR)/src/lib/libc/* $@ cp -r $(REP_DIR)/src/lib/libc/* $@ -include/libc-plugin include/libc/sys/ucontext.h: +include/libc-plugin: $(mirror_from_rep_dir) lib/mk: From 7c3b9c843f3d5882cfacc7c7e20af73bc8c15052 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 6 Sep 2022 17:01:45 +0200 Subject: [PATCH 212/354] base-hw: tighten src-archive content of lib/mk/ This patch refines the rules for generating a base-hw src archive for a given board by enumerating the content of the lib/mk/spec/* directories instead of including entire directories. This avoids the inclusion of lib.mk files found in SoC-specific repositories (like genode-allwinner) in the kernel source archives. When building a binary archive from such a src archive with the changes of issue #4599, the build system would otherwise try (and fail) to build the libraries for the accidentally included lib.mk files. --- .../recipes/src/base-hw-imx53_qsb_tz/content.mk | 4 +++- repos/base-hw/recipes/src/base-hw_content.inc | 14 +++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/content.mk b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/content.mk index cf571d6154..829317888c 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/content.mk +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/content.mk @@ -1,4 +1,6 @@ CONTENT += src/core/board/imx53_qsb \ - src/bootstrap/board/imx53_qsb + src/bootstrap/board/imx53_qsb \ + lib/mk/spec/arm_v7/core-hw-imx53_qsb.inc \ + lib/mk/spec/arm_v7/bootstrap-hw-imx53_qsb.inc include $(GENODE_DIR)/repos/base-hw/recipes/src/base-hw_content.inc diff --git a/repos/base-hw/recipes/src/base-hw_content.inc b/repos/base-hw/recipes/src/base-hw_content.inc index adc04050e8..f75752b537 100644 --- a/repos/base-hw/recipes/src/base-hw_content.inc +++ b/repos/base-hw/recipes/src/base-hw_content.inc @@ -125,9 +125,17 @@ SRC_CORE += $(notdir $(wildcard $(BASE_HW_DIR)/src/core/*.cc)) \ $(addprefix board/,$(BOARD)) \ version.inc target.inc include hw kernel -LIB_MK := base-hw-common.mk base-hw.mk bootstrap-hw.inc core-hw.inc \ - timeout-hw.mk cxx.mk base.inc base-common.inc startup.inc \ - $(addprefix spec/,${call selected_content,LIB_MK_SPECS}) +# names of the lib/mk/ files to consider for inclusion in the src archive +LIB_MK_FILES := base-common.inc base-hw-common.mk \ + base.inc base-hw.mk \ + bootstrap-hw.inc bootstrap-hw-$(BOARD).inc bootstrap-hw-$(BOARD).mk \ + core-hw.inc core-hw-$(BOARD).inc core-hw-$(BOARD).mk \ + startup.inc startup-hw.mk \ + timeout-hw.mk cxx.mk ld-hw.mk syscall-hw.mk + +LIB_MK_DIRS := lib/mk $(addprefix lib/mk/spec/,${call selected_content,LIB_MK_SPECS}) + +CONTENT += $(foreach D,$(LIB_MK_DIRS),$(addprefix $D/,$(LIB_MK_FILES))) CONTENT += $(addprefix src/timer/,$(SRC_TIMER)) \ $(addprefix src/include/hw/,$(SRC_INCLUDE_HW)) \ From 3d26ce9f8d772de1e43332628bdb16bf82e41f33 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 6 Sep 2022 17:36:23 +0200 Subject: [PATCH 213/354] usb_host: acknowledge all requests asynchronously Fix genodelabs/genode#4601 --- repos/dde_linux/src/lib/lx_emul/usb.c | 122 ++++++++++++++++---------- repos/os/include/genode_c_api/usb.h | 29 ++++-- repos/os/src/lib/genode_c_api/usb.cc | 33 ++++--- 3 files changed, 118 insertions(+), 66 deletions(-) diff --git a/repos/dde_linux/src/lib/lx_emul/usb.c b/repos/dde_linux/src/lib/lx_emul/usb.c index 8f2c777a33..76270835f9 100644 --- a/repos/dde_linux/src/lib/lx_emul/usb.c +++ b/repos/dde_linux/src/lib/lx_emul/usb.c @@ -333,10 +333,22 @@ struct genode_usb_rpc_callbacks lx_emul_usb_rpc_callbacks = { static genode_usb_request_ret_t +handle_return_code(struct genode_usb_request_urb req, void * data) +{ + return (genode_usb_request_ret_t)data; +}; + + +static void handle_string_request(struct genode_usb_request_string * req, - void * buf, unsigned long size, void * data) + genode_usb_session_handle_t session, + genode_usb_request_handle_t request, + void * buf, + unsigned long size, + void * data) { struct usb_device * udev = (struct usb_device *) data; + genode_usb_request_ret_t ret = UNKNOWN_ERROR; int length = usb_string(udev, req->index, buf, size); if (length < 0) { @@ -345,58 +357,73 @@ handle_string_request(struct genode_usb_request_string * req, } else { /* returned length is in bytes (char) */ req->length = length / 2; - return NO_ERROR; + ret = NO_ERROR; } - return UNKNOWN_ERROR; + genode_usb_ack_request(session, request, handle_return_code, (void*)ret); } -static genode_usb_request_ret_t -handle_altsetting_request(unsigned iface, unsigned alt_setting, void * data) +static void +handle_altsetting_request(unsigned iface, + unsigned alt_setting, + genode_usb_session_handle_t session, + genode_usb_request_handle_t request, + void * data) { struct usb_device * udev = (struct usb_device *) data; - int const ret = usb_set_interface(udev, iface, alt_setting); + genode_usb_request_ret_t ret = NO_ERROR; - if (ret < 0) - printk("Alt setting request (iface=%u alt_setting=%u) failed with %d\n", - iface, alt_setting, ret); - - return (ret == 0) ? NO_ERROR : UNKNOWN_ERROR; -} - - -static genode_usb_request_ret_t -handle_config_request(unsigned cfg_idx, void * data) -{ - struct usb_device * udev = (struct usb_device *) data; - - if (udev && udev->actconfig - && udev->actconfig->desc.bConfigurationValue == cfg_idx) { - /* - * Skip SET_CONFIGURATION requests if the device already has the - * selected config as active config. This workaround prevents issues - * with Linux guests in vbox and SDC-reader passthrough. - */ - return NO_ERROR; + if (usb_set_interface(udev, iface, alt_setting)) { + ret = UNKNOWN_ERROR; + printk("Alt setting request (iface=%u alt_setting=%u) failed\n", + iface, alt_setting); } - return (usb_set_configuration(udev, cfg_idx)) ? UNKNOWN_ERROR : NO_ERROR; + genode_usb_ack_request(session, request, handle_return_code, (void*)ret); } -static genode_usb_request_ret_t -handle_flush_request(unsigned char ep, void * data) +static void +handle_config_request(unsigned cfg_idx, + genode_usb_session_handle_t session, + genode_usb_request_handle_t request, + void * data) +{ + struct usb_device * udev = (struct usb_device *) data; + genode_usb_request_ret_t ret = NO_ERROR; + + /* + * Skip SET_CONFIGURATION requests if the device already has the + * selected config as active config. This workaround prevents issues + * with Linux guests in vbox and SDC-reader passthrough. + */ + if (!(udev && udev->actconfig && + udev->actconfig->desc.bConfigurationValue == cfg_idx)) + ret = (usb_set_configuration(udev, cfg_idx)) ? UNKNOWN_ERROR : NO_ERROR; + + genode_usb_ack_request(session, request, handle_return_code, (void*)ret); +} + + +static void +handle_flush_request(unsigned char ep, + genode_usb_session_handle_t session, + genode_usb_request_handle_t request, + void * data) { struct usb_device * udev = (struct usb_device *) data; struct usb_host_endpoint * endpoint = ep & USB_DIR_IN ? udev->ep_in[ep & 0xf] : udev->ep_out[ep & 0xf]; - if (!endpoint) - return INTERFACE_OR_ENDPOINT_ERROR; + genode_usb_request_ret_t ret = NO_ERROR; - usb_hcd_flush_endpoint(udev, endpoint); - return NO_ERROR; + if (!endpoint) + ret = INTERFACE_OR_ENDPOINT_ERROR; + else + usb_hcd_flush_endpoint(udev, endpoint); + + genode_usb_ack_request(session, request, handle_return_code, (void*)ret); } enum Timer_state { TIMER_OFF, TIMER_ACTIVE, TIMER_TRIGGERED }; @@ -625,7 +652,7 @@ static int fill_isoc_urb(struct usb_device * udev, } -static genode_usb_request_ret_t +static void handle_urb_request(struct genode_usb_request_urb req, genode_usb_session_handle_t session_handle, genode_usb_request_handle_t request_handle, @@ -637,6 +664,7 @@ handle_urb_request(struct genode_usb_request_urb req, genode_usb_get_request_control(&req); struct genode_usb_request_transfer * transfer = genode_usb_get_request_transfer(&req); + genode_usb_request_ret_t ret = UNKNOWN_ERROR; int err = 0; int read = transfer ? (transfer->ep & 0x80) : 0; @@ -644,8 +672,10 @@ handle_urb_request(struct genode_usb_request_urb req, struct usb_urb_context * context = kmalloc(sizeof(struct usb_urb_context), GFP_NOIO); - if (!context) - return MEMORY_ERROR; + if (!context) { + ret = MEMORY_ERROR; + goto error; + } context->session = session_handle; context->request = request_handle; @@ -666,7 +696,7 @@ handle_urb_request(struct genode_usb_request_urb req, break; default: printk("Unknown USB transfer request!\n"); - return UNKNOWN_ERROR; + goto error; }; if (err) @@ -684,7 +714,7 @@ handle_urb_request(struct genode_usb_request_urb req, mod_timer(&context->timeo, jiffies + msecs_to_jiffies(ctrl->timeout)); } - return 0; + return; free_urb: usb_unanchor_urb(urb); @@ -692,13 +722,15 @@ handle_urb_request(struct genode_usb_request_urb req, free_context: kfree(context); switch (err) { - case -ENOENT: return INTERFACE_OR_ENDPOINT_ERROR; - case -ENODEV: return NO_DEVICE_ERROR; - case -ESHUTDOWN: return NO_DEVICE_ERROR; - case -ENOSPC: return STALL_ERROR; - case -ENOMEM: return MEMORY_ERROR; + case -ENOENT: ret = INTERFACE_OR_ENDPOINT_ERROR; break; + case -ENODEV: ret = NO_DEVICE_ERROR; break; + case -ESHUTDOWN: ret = NO_DEVICE_ERROR; break; + case -ENOSPC: ret = STALL_ERROR; break; + case -ENOMEM: ret = MEMORY_ERROR; break; } - return UNKNOWN_ERROR; + error: + genode_usb_ack_request(context->session, context->request, + handle_return_code, (void*)ret); } diff --git a/repos/os/include/genode_c_api/usb.h b/repos/os/include/genode_c_api/usb.h index 1969e02481..e7335c3598 100644 --- a/repos/os/include/genode_c_api/usb.h +++ b/repos/os/include/genode_c_api/usb.h @@ -159,7 +159,7 @@ struct genode_usb_request_transfer unsigned long actual_packet_size[MAX_PACKETS]; }; -enum Urb_type { CTRL, BULK, IRQ, ISOC }; +enum Urb_type { CTRL, BULK, IRQ, ISOC, NONE }; typedef enum Urb_type genode_usb_urb_t; struct genode_usb_request_urb @@ -193,7 +193,7 @@ enum Request_return_error { }; typedef enum Request_return_error genode_usb_request_ret_t; -typedef genode_usb_request_ret_t (*genode_usb_req_urb_t) +typedef void (*genode_usb_req_urb_t) (struct genode_usb_request_urb req, genode_usb_session_handle_t session_handle, genode_usb_request_handle_t request_handle, @@ -201,20 +201,31 @@ typedef genode_usb_request_ret_t (*genode_usb_req_urb_t) unsigned long payload_size, void * opaque_data); -typedef genode_usb_request_ret_t (*genode_usb_req_string_t) +typedef void (*genode_usb_req_string_t) (struct genode_usb_request_string * req, + genode_usb_session_handle_t session_handle, + genode_usb_request_handle_t request_handle, void * payload, unsigned long payload_size, void * opaque_data); -typedef genode_usb_request_ret_t (*genode_usb_req_altsetting_t) - (unsigned iface, unsigned alt_setting, void * opaque_data); +typedef void (*genode_usb_req_altsetting_t) + (unsigned iface, unsigned alt_setting, + genode_usb_session_handle_t session_handle, + genode_usb_request_handle_t request_handle, + void * opaque_data); -typedef genode_usb_request_ret_t (*genode_usb_req_config_t) - (unsigned config_idx, void * opaque_data); +typedef void (*genode_usb_req_config_t) + (unsigned config_idx, + genode_usb_session_handle_t session_handle, + genode_usb_request_handle_t request_handle, + void * opaque_data); -typedef genode_usb_request_ret_t (*genode_usb_req_flush_t) - (unsigned char ep, void * opaque_data); +typedef void (*genode_usb_req_flush_t) + (unsigned char ep, + genode_usb_session_handle_t session_handle, + genode_usb_request_handle_t request_handle, + void * opaque_data); typedef genode_usb_request_ret_t (*genode_usb_response_t) (struct genode_usb_request_urb req, diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 2a1f49ee29..6e421f6220 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -445,39 +445,38 @@ bool genode_usb_session::request(genode_usb_request_callbacks & req, void * data void * addr = (void*)(genode_shared_dataspace_local_address(_ds) + offset); + packets[idx].construct(p); + switch (p.type) { case Packet_descriptor::STRING: - _ack(req.string_fn((genode_usb_request_string*)&p.string, - addr, p.size(), data), p); + req.string_fn((genode_usb_request_string*)&p.string, + _id, idx, addr, p.size(), data); break; case Packet_descriptor::CTRL: - packets[idx].construct(p); req.urb_fn({ CTRL, &p.control }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::BULK: - packets[idx].construct(p); req.urb_fn({ BULK, &p.transfer }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::IRQ: - packets[idx].construct(p); req.urb_fn({ IRQ, &p.transfer }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::ISOC: - packets[idx].construct(p); req.urb_fn({ ISOC, &p.transfer }, _id, idx, addr, p.size(), data); break; case Packet_descriptor::ALT_SETTING: - _ack(req.altsetting_fn(p.interface.number, - p.interface.alt_setting, data), p); + req.altsetting_fn(p.interface.number, p.interface.alt_setting, + _id, idx, data); break; case Packet_descriptor::CONFIG: - _ack(req.config_fn(p.number, data), p); + req.config_fn(p.number, _id, idx, data); break; case Packet_descriptor::RELEASE_IF: warning("Release interface gets ignored!"); + packets[idx].destruct(); break; case Packet_descriptor::FLUSH_TRANSFERS: - _ack(req.flush_fn(p.number, data), p); + req.flush_fn(p.number, _id, idx, data); break; }; @@ -506,7 +505,7 @@ void genode_usb_session::handle_response(genode_usb_request_handle_t id, _ack(callback({ ISOC, &p.transfer }, callback_data), p); break; default: - error("Invalid packet descriptor for asynchronous response"); + _ack(callback({ NONE, nullptr }, callback_data), p); }; packets[id].destruct(); } @@ -773,9 +772,19 @@ genode_usb_session_handle_t ::Root::session(genode_usb_bus_num_t bus, template void ::Root::session(genode_usb_session_handle_t id, FUNC const & fn) { + genode_usb_session * session = nullptr; + _for_each_session([&] (genode_usb_session & s) { - if (s._id == id) fn(s); + if (s._id == id) session = &s; }); + + /* + * We've to execute the functor outside the session iteration, + * because the functor might block and the actual session + * can be destroyed in the meantime, which will lead to + * a corrupted next() pointer. + */ + if (session) fn(*session); } From f2c52d157024a8669e8fafac7dfb1c82fe51b7c5 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 6 Sep 2022 18:04:00 +0200 Subject: [PATCH 214/354] usb c-api: manage lifetime of session handles Fix genodelabs/genode#4602 --- repos/os/src/lib/genode_c_api/usb.cc | 91 +++++++++++++++++++--------- 1 file changed, 62 insertions(+), 29 deletions(-) diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 6e421f6220..e66eeb57a6 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -46,6 +46,24 @@ struct Device { }; +class Session_id +{ + private: + + genode_usb_session_handle_t const _id; + unsigned _ref_cnt { 0 }; + + public: + + Session_id(genode_usb_session_handle_t id) : _id(id) {} + + genode_usb_session_handle_t id() { return _id; } + + void inc() { _ref_cnt++; } + void dec() { _ref_cnt--; } + bool used() { return _ref_cnt; } +}; + class Root; @@ -62,7 +80,7 @@ class genode_usb_session : public Usb::Session_rpc_object ::Root & _root; genode_shared_dataspace * _ds; Signal_context_capability _sigh_state_cap {}; - genode_usb_session_handle_t _id; + Session_id & _id; Session_label const _label; List_element _le { this }; @@ -79,8 +97,8 @@ class genode_usb_session : public Usb::Session_rpc_object genode_usb_session(::Root & root, genode_shared_dataspace * ds, Env & env, + Session_id & id, Signal_context_capability cap, - genode_usb_session_handle_t id, Session_label label); virtual ~genode_usb_session() {} @@ -143,17 +161,7 @@ class Root : public Root_component { private: - enum { MAX_DEVICES = 32 }; - - struct Id_allocator : Bit_allocator<16> - { - genode_usb_session_handle_t alloc() - { - /* we can downcast here, because we only use 16 bits */ - return (genode_usb_session_handle_t) - Bit_allocator<16>::alloc(); - } - }; + enum { MAX_DEVICES = 32, MAX_SESSIONS = MAX_DEVICES }; Env & _env; Signal_context_capability _sigh_cap; @@ -161,8 +169,8 @@ class Root : public Root_component Signal_handler _config_handler { _env.ep(), *this, &Root::_announce_service }; Reporter _config_reporter { _env, "config" }; + Constructible _session_ids[MAX_SESSIONS]; Constructible _devices[MAX_DEVICES]; - Id_allocator _id_alloc {}; bool _announced { false }; Constructible _device_reporter {}; @@ -244,6 +252,8 @@ class Root : public Root_component * Acknowledge requests from sessions without device */ void handle_empty_sessions(); + + void decrement_session_id(genode_usb_session_handle_t id); }; @@ -446,37 +456,39 @@ bool genode_usb_session::request(genode_usb_request_callbacks & req, void * data + offset); packets[idx].construct(p); + _id.inc(); /* increment the session ids usage */ switch (p.type) { case Packet_descriptor::STRING: req.string_fn((genode_usb_request_string*)&p.string, - _id, idx, addr, p.size(), data); + _id.id(), idx, addr, p.size(), data); break; case Packet_descriptor::CTRL: - req.urb_fn({ CTRL, &p.control }, _id, idx, addr, p.size(), data); + req.urb_fn({ CTRL, &p.control }, _id.id(), idx, addr, p.size(), data); break; case Packet_descriptor::BULK: - req.urb_fn({ BULK, &p.transfer }, _id, idx, addr, p.size(), data); + req.urb_fn({ BULK, &p.transfer }, _id.id(), idx, addr, p.size(), data); break; case Packet_descriptor::IRQ: - req.urb_fn({ IRQ, &p.transfer }, _id, idx, addr, p.size(), data); + req.urb_fn({ IRQ, &p.transfer }, _id.id(), idx, addr, p.size(), data); break; case Packet_descriptor::ISOC: - req.urb_fn({ ISOC, &p.transfer }, _id, idx, addr, p.size(), data); + req.urb_fn({ ISOC, &p.transfer }, _id.id(), idx, addr, p.size(), data); break; case Packet_descriptor::ALT_SETTING: req.altsetting_fn(p.interface.number, p.interface.alt_setting, - _id, idx, data); + _id.id(), idx, data); break; case Packet_descriptor::CONFIG: - req.config_fn(p.number, _id, idx, data); + req.config_fn(p.number, _id.id(), idx, data); break; case Packet_descriptor::RELEASE_IF: warning("Release interface gets ignored!"); + _id.dec(); packets[idx].destruct(); break; case Packet_descriptor::FLUSH_TRANSFERS: - req.flush_fn(p.number, _id, idx, data); + req.flush_fn(p.number, _id.id(), idx, data); break; }; @@ -514,8 +526,8 @@ void genode_usb_session::handle_response(genode_usb_request_handle_t id, genode_usb_session::genode_usb_session(::Root & root, genode_shared_dataspace * ds, Env & env, + Session_id & id, Signal_context_capability cap, - genode_usb_session_handle_t id, Session_label const label) : Usb::Session_rpc_object(genode_shared_dataspace_capability(ds), @@ -526,6 +538,8 @@ genode_usb_session::genode_usb_session(::Root & root, _label(label) { _tx.sigh_packet_avail(cap); + + id.inc(); } @@ -574,9 +588,18 @@ genode_usb_session * ::Root::_create_session(const char * args, throw Insufficient_ram_quota(); } + unsigned i = 0; + for (; i < MAX_SESSIONS; i++) + if (!_session_ids[i]->used()) + break; + if (i >= MAX_SESSIONS) { + warning("Maximum of sessions reached!"); + throw Service_denied(); + } + genode_shared_dataspace * ds = _callbacks->alloc_fn(tx_buf_size); genode_usb_session * ret = new (md_alloc()) - genode_usb_session(*this, ds, _env, _sigh_cap, _id_alloc.alloc(), label); + genode_usb_session(*this, ds, _env, *_session_ids[i], _sigh_cap, label); _sessions.insert(&ret->_le); if (!ret) throw Service_denied(); @@ -602,11 +625,10 @@ void ::Root::_destroy_session(genode_usb_session * session) } }); - genode_usb_session_handle_t id = session->_id; + session->_id.dec(); genode_shared_dataspace * ds = session->_ds; _sessions.remove(&session->_le); Genode::destroy(md_alloc(), session); - _id_alloc.free((addr_t)id); _callbacks->free_fn(ds); } @@ -765,7 +787,7 @@ genode_usb_session_handle_t ::Root::session(genode_usb_bus_num_t bus, session = d.usb_session; }); - return session ? session->_id : 0; + return session ? session->_id.id() : 0; } @@ -775,7 +797,7 @@ void ::Root::session(genode_usb_session_handle_t id, FUNC const & fn) genode_usb_session * session = nullptr; _for_each_session([&] (genode_usb_session & s) { - if (s._id == id) session = &s; + if (s._id.id() == id) session = &s; }); /* @@ -816,13 +838,22 @@ void ::Root::handle_empty_sessions() } +void ::Root::decrement_session_id(genode_usb_session_handle_t id) +{ + if (id > 0 && id <= MAX_SESSIONS) + _session_ids[id-1]->dec(); +} + + ::Root::Root(Env & env, Allocator & alloc, Signal_context_capability cap) : Root_component(env.ep(), alloc), _env(env), _sigh_cap(cap) { /* Reserve id zero which is invalid */ - _id_alloc.alloc(); + for (unsigned i = 0; i < MAX_SESSIONS; i++) + _session_ids[i].construct((genode_usb_session_handle_t)(i+1)); + _config.sigh(_config_handler); } @@ -896,6 +927,8 @@ extern "C" void genode_usb_ack_request(genode_usb_session_handle_t session_id, _usb_root->session(session_id, [&] (genode_usb_session & session) { session.handle_response(request_id, callback, callback_data); }); + + _usb_root->decrement_session_id(session_id); } From f0e9881c7e8ac774eca95a45607539442b9d4132 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 7 Sep 2022 15:35:09 +0200 Subject: [PATCH 215/354] intel_fb: prevent compiler warning --- repos/pc/src/drivers/framebuffer/intel/pc/dummies.c | 1 + 1 file changed, 1 insertion(+) diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c index f888f8b94e..c3d5c16d12 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c @@ -545,4 +545,5 @@ u32 prandom_u32(void) int wbinvd_on_all_cpus(void) { lx_emul_trace(__func__); + return 0; } From 7d143087c90c52ad2fe8dbc91b210b83c6c2dac7 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 8 Sep 2022 10:17:26 +0200 Subject: [PATCH 216/354] xml_node: change `with_sub_node` signature The `with_sub_node` method is renamed to `with_optional_sub_node` to better reflect that the non-existence of a sub node with the desired type is ignored. At the same time, the new `with_sub_node` now takes a second functor that is called when no sub node of the desired type exists. genodelabs/genode#4600 --- repos/base/include/base/affinity.h | 6 +- repos/base/include/util/xml_node.h | 17 +- repos/base/src/lib/ldso/include/config.h | 2 +- repos/dde_ipxe/src/drivers/nic/main.cc | 2 +- repos/gems/include/cbe/init/configuration.h | 4 +- repos/gems/src/app/cbe_tester/verbose_node.h | 2 +- repos/gems/src/app/depot_deploy/child.h | 4 +- repos/gems/src/app/depot_deploy/main.cc | 4 +- .../src/app/depot_download_manager/main.cc | 4 +- repos/gems/src/app/file_vault/main.cc | 230 +++++++++--------- repos/gems/src/app/gpt_write/main.cc | 2 +- repos/gems/src/app/menu_view/main.cc | 2 +- repos/gems/src/app/sculpt_manager/main.cc | 2 +- .../gems/src/app/sculpt_manager/menu_view.cc | 2 +- .../src/app/sculpt_manager/model/component.h | 4 +- .../sculpt_manager/model/file_browser_state.h | 2 +- .../app/sculpt_manager/model/runtime_config.h | 12 +- .../gems/src/app/sculpt_manager/view/dialog.h | 2 +- .../sculpt_manager/view/file_browser_dialog.h | 2 +- repos/gems/src/app/text_area/dialog.cc | 14 +- repos/gems/src/app/text_area/main.cc | 6 +- repos/gems/src/app/touch_keyboard/main.cc | 2 +- .../touch_keyboard/touch_keyboard_dialog.cc | 8 +- repos/gems/src/server/terminal/main.cc | 2 +- .../libports/src/lib/libc/file_operations.cc | 4 +- repos/libports/src/lib/libc/fork.cc | 2 +- .../src/lib/libc/internal/vfs_plugin.h | 2 +- repos/libports/src/lib/libc/kernel.cc | 2 +- repos/libports/src/lib/qemu-usb/qemu_emul.cc | 2 +- repos/os/include/os/session_policy.h | 2 +- repos/os/src/app/pci_decode/main.cc | 2 +- repos/os/src/drivers/framebuffer/boot/main.cc | 4 +- repos/os/src/drivers/nic/spec/linux/main.cc | 2 +- .../src/drivers/platform/legacy/x86/main.cc | 4 +- repos/os/src/init/main.cc | 2 +- repos/os/src/lib/genode_c_api/usb.cc | 2 +- repos/os/src/lib/sandbox/child.cc | 4 +- repos/os/src/lib/sandbox/child.h | 12 +- repos/os/src/lib/sandbox/utils.h | 2 +- repos/os/src/server/nic_perf/interface.h | 18 +- .../os/src/server/nic_perf/packet_generator.h | 2 +- repos/os/src/server/nic_router/dhcp_server.cc | 2 +- .../src/test/nic_router_dhcp/manager/main.cc | 2 +- repos/os/src/test/resource_request/main.cc | 4 +- .../ports/src/virtualbox5/generic/sup_vmm.cc | 2 +- repos/ports/src/virtualbox5/spec/nova/sup.cc | 2 +- repos/ports/src/virtualbox6/sup_drv.cc | 8 +- 47 files changed, 220 insertions(+), 205 deletions(-) diff --git a/repos/base/include/base/affinity.h b/repos/base/include/base/affinity.h index 81d56f2f40..a41bcc4a24 100644 --- a/repos/base/include/base/affinity.h +++ b/repos/base/include/base/affinity.h @@ -189,10 +189,10 @@ class Genode::Affinity Affinity::Space space { }; Affinity::Location location { }; - node.with_sub_node("affinity", [&] (Xml_node const &node) { - node.with_sub_node("space", [&] (Xml_node const &node) { + node.with_optional_sub_node("affinity", [&] (Xml_node const &node) { + node.with_optional_sub_node("space", [&] (Xml_node const &node) { space = Space::from_xml(node); }); - node.with_sub_node("location", [&] (Xml_node const &node) { + node.with_optional_sub_node("location", [&] (Xml_node const &node) { location = Location::from_xml(space, node); }); }); diff --git a/repos/base/include/util/xml_node.h b/repos/base/include/util/xml_node.h index fede99d2b9..12b761c742 100644 --- a/repos/base/include/util/xml_node.h +++ b/repos/base/include/util/xml_node.h @@ -846,12 +846,27 @@ class Genode::Xml_node * If no matching sub node exists, the functor is not called. */ template - void with_sub_node(char const *type, FN const &fn) const + void with_optional_sub_node(char const *type, FN const &fn) const { if (has_sub_node(type)) fn(sub_node(type)); } + /** + * Apply functor 'fn' to first sub node of specified type + * + * The functor is called with the sub node as argument. + * If no matching sub node exists, the functor 'fn_nexists' is called. + */ + template + void with_sub_node(char const *type, FN const &fn, FN_NEXISTS const &fn_nexists) const + { + if (has_sub_node(type)) + fn(sub_node(type)); + else + fn_nexists(); + } + /** * Execute functor 'fn' for each sub node of specified type */ diff --git a/repos/base/src/lib/ldso/include/config.h b/repos/base/src/lib/ldso/include/config.h index 5708df0930..2ad11c87a2 100644 --- a/repos/base/src/lib/ldso/include/config.h +++ b/repos/base/src/lib/ldso/include/config.h @@ -68,7 +68,7 @@ class Linker::Config : Noncopyable template void for_each_library(FN const &fn) const { - _config.with_sub_node("ld", [&] (Xml_node ld) { + _config.with_optional_sub_node("ld", [&] (Xml_node ld) { ld.for_each_sub_node("library", [&] (Xml_node lib) { diff --git a/repos/dde_ipxe/src/drivers/nic/main.cc b/repos/dde_ipxe/src/drivers/nic/main.cc index 42c5a4f4d3..907a461853 100644 --- a/repos/dde_ipxe/src/drivers/nic/main.cc +++ b/repos/dde_ipxe/src/drivers/nic/main.cc @@ -133,7 +133,7 @@ struct Main _uplink.construct(_env, _heap); - _config_rom.xml().with_sub_node("report", [&] (Xml_node const &xml) { + _config_rom.xml().with_optional_sub_node("report", [&] (Xml_node const &xml) { bool const report_mac_address = xml.attribute_value("mac_address", false); diff --git a/repos/gems/include/cbe/init/configuration.h b/repos/gems/include/cbe/init/configuration.h index 3b7e0fa363..5a5428d6b5 100644 --- a/repos/gems/include/cbe/init/configuration.h +++ b/repos/gems/include/cbe/init/configuration.h @@ -37,7 +37,7 @@ class Cbe_init::Configuration Configuration (Genode::Xml_node const &node) { - node.with_sub_node("virtual-block-device", + node.with_optional_sub_node("virtual-block-device", [&] (Genode::Xml_node const &vbd) { _vbd_nr_of_lvls = @@ -47,7 +47,7 @@ class Cbe_init::Configuration _vbd_nr_of_leafs = vbd.attribute_value("nr_of_leafs", (Genode::uint64_t)0); }); - node.with_sub_node("free-tree", + node.with_optional_sub_node("free-tree", [&] (Genode::Xml_node const &ft) { _ft_nr_of_lvls = diff --git a/repos/gems/src/app/cbe_tester/verbose_node.h b/repos/gems/src/app/cbe_tester/verbose_node.h index 3b94a30a98..9aa0f1131f 100644 --- a/repos/gems/src/app/cbe_tester/verbose_node.h +++ b/repos/gems/src/app/cbe_tester/verbose_node.h @@ -37,7 +37,7 @@ class Verbose_node Verbose_node(Genode::Xml_node const &config) { - config.with_sub_node("verbose", [&] (Genode::Xml_node const &verbose) + config.with_optional_sub_node("verbose", [&] (Genode::Xml_node const &verbose) { _cmd_pool_cmd_pending = verbose.attribute_value("cmd_pool_cmd_pending" , false); _cmd_pool_cmd_in_progress = verbose.attribute_value("cmd_pool_cmd_in_progress", false); diff --git a/repos/gems/src/app/depot_deploy/child.h b/repos/gems/src/app/depot_deploy/child.h index 0d7935b98d..cd55356324 100644 --- a/repos/gems/src/app/depot_deploy/child.h +++ b/repos/gems/src/app/depot_deploy/child.h @@ -428,11 +428,11 @@ void Depot_deploy::Child::gen_start_node(Xml_generator &xml, Affinity::Location location { }; if (affinity_from_launcher) - launcher_xml.with_sub_node("affinity", [&] (Xml_node node) { + launcher_xml.with_optional_sub_node("affinity", [&] (Xml_node node) { location = Affinity::Location::from_xml(affinity_space, node); }); if (affinity_from_start) - start_xml.with_sub_node("affinity", [&] (Xml_node node) { + start_xml.with_optional_sub_node("affinity", [&] (Xml_node node) { location = Affinity::Location::from_xml(affinity_space, node); }); xml.node("affinity", [&] () { diff --git a/repos/gems/src/app/depot_deploy/main.cc b/repos/gems/src/app/depot_deploy/main.cc index 65f51aa970..186c058b0c 100644 --- a/repos/gems/src/app/depot_deploy/main.cc +++ b/repos/gems/src/app/depot_deploy/main.cc @@ -85,7 +85,7 @@ struct Depot_deploy::Main static_config.with_raw_content([&] (char const *start, size_t length) { xml.append(start, length); }); - config.with_sub_node("report", [&] (Xml_node const &report) { + config.with_optional_sub_node("report", [&] (Xml_node const &report) { auto copy_bool_attribute = [&] (char const* name) { if (report.has_attribute(name)) { @@ -120,7 +120,7 @@ struct Depot_deploy::Main }); }); - config.with_sub_node("heartbeat", [&] (Xml_node const &heartbeat) { + config.with_optional_sub_node("heartbeat", [&] (Xml_node const &heartbeat) { size_t const rate_ms = heartbeat.attribute_value("rate_ms", 2000UL); xml.node("heartbeat", [&] () { xml.attribute("rate_ms", rate_ms); diff --git a/repos/gems/src/app/depot_download_manager/main.cc b/repos/gems/src/app/depot_download_manager/main.cc index 2b29f57d0d..6c6b1a16ba 100644 --- a/repos/gems/src/app/depot_download_manager/main.cc +++ b/repos/gems/src/app/depot_download_manager/main.cc @@ -409,13 +409,13 @@ void Depot_download_manager::Main::_handle_query_result() Archive::User user { }; if (missing_index_files) - index.with_sub_node("missing", [&] (Xml_node missing) { + index.with_optional_sub_node("missing", [&] (Xml_node missing) { user = missing.attribute_value("user", Archive::User()); }); if (user.valid()) return user; - dependencies.with_sub_node("missing", [&] (Xml_node missing) { + dependencies.with_optional_sub_node("missing", [&] (Xml_node missing) { user = Archive::user(missing.attribute_value("path", Archive::Path())); }); if (!user.valid()) diff --git a/repos/gems/src/app/file_vault/main.cc b/repos/gems/src/app/file_vault/main.cc index e944481640..e20ebd6bda 100644 --- a/repos/gems/src/app/file_vault/main.cc +++ b/repos/gems/src/app/file_vault/main.cc @@ -541,7 +541,7 @@ bool Main::cbe_control_file_yields_state_idle(Xml_node const &fs_query_listing, { bool result { false }; bool done { false }; - fs_query_listing.with_sub_node("dir", [&] (Xml_node const &node_0) { + fs_query_listing.with_optional_sub_node("dir", [&] (Xml_node const &node_0) { node_0.for_each_sub_node("file", [&] (Xml_node const &node_1) { if (done) { return; @@ -631,8 +631,8 @@ Main::State_string Main::_state_to_string(State state) Main::State Main::_state_from_fs_query_listing(Xml_node const &node) { State state { State::INVALID }; - node.with_sub_node("dir", [&] (Xml_node const &node_0) { - node_0.with_sub_node("file", [&] (Xml_node const &node_1) { + node.with_optional_sub_node("dir", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("file", [&] (Xml_node const &node_1) { if (_has_name(node_1, "state")) { state = _state_from_string( node_1.decoded_content()); @@ -817,7 +817,7 @@ void Main::_handle_snapshots_fs_query_listing(Xml_node const &node) case State::CONTROLS_SECURITY_USER_PASSPHRASE: { bool update_dialog { false }; - node.with_sub_node("dir", [&] (Xml_node const &node_0) { + node.with_optional_sub_node("dir", [&] (Xml_node const &node_0) { _snapshots.for_each([&] (Snapshot const &snap) { @@ -931,8 +931,8 @@ void Main::_handle_client_fs_fs_query_listing(Xml_node const &node) switch (_state) { case State::STARTUP_DETERMINE_CLIENT_FS_SIZE: - node.with_sub_node("dir", [&] (Xml_node const &node_0) { - node_0.with_sub_node("file", [&] (Xml_node const &node_1) { + node.with_optional_sub_node("dir", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("file", [&] (Xml_node const &node_1) { if (_has_name(node_1, "data")) { @@ -957,8 +957,8 @@ void Main::_handle_client_fs_fs_query_listing(Xml_node const &node) switch (_resizing_state) { case Resizing_state::DETERMINE_CLIENT_FS_SIZE: - node.with_sub_node("dir", [&] (Xml_node const &node_0) { - node_0.with_sub_node("file", [&] (Xml_node const &node_1) { + node.with_optional_sub_node("dir", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("file", [&] (Xml_node const &node_1) { if (_has_name(node_1, "data")) { @@ -1010,8 +1010,8 @@ void Main::_handle_image_fs_query_listing(Xml_node const &node) case State::CONTROLS_SECURITY_USER_PASSPHRASE: { size_t size { 0 }; - node.with_sub_node("dir", [&] (Xml_node const &node_0) { - node_0.with_sub_node("file", [&] (Xml_node const &node_1) { + node.with_optional_sub_node("dir", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("file", [&] (Xml_node const &node_1) { if (_has_name(node_1, "cbe.img")) { size = node_1.attribute_value("size", (size_t)0); } @@ -1063,7 +1063,7 @@ _child_nr_of_provided_sessions(Xml_node const &sandbox_state, if (child.attribute_value("name", String<128> { }) == child_state.start_name()) { - child.with_sub_node("provided", [&] (Xml_node const &provided) { + child.with_optional_sub_node("provided", [&] (Xml_node const &provided) { provided.for_each_sub_node("session", [&] (Xml_node const &session) { if (session.attribute_value("service", String<64> { }) == service_name) { @@ -3507,24 +3507,24 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Setup_obtain_params_hover const prev_hover { _setup_obtain_params_hover }; Setup_obtain_params_hover next_hover { Setup_obtain_params_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("float", [&] (Xml_node const &node_3) { + node_2.with_optional_sub_node("float", [&] (Xml_node const &node_3) { if (_has_name(node_3, "ok")) { next_hover = Setup_obtain_params_hover::START_BUTTON; } }); - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("frame", [&] (Xml_node const &node_4) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("frame", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Passphrase")) { next_hover = Setup_obtain_params_hover::PASSPHRASE_INPUT; } }); - node_3.with_sub_node("float", [&] (Xml_node const &node_4) { - node_4.with_sub_node("button", [&] (Xml_node const &node_5) { + node_3.with_optional_sub_node("float", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("button", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Show Hide")) { next_hover = Setup_obtain_params_hover::PASSPHRASE_SHOW_HIDE_BUTTON; @@ -3532,7 +3532,7 @@ void File_vault::Main::_handle_hover(Xml_node const &node) }); }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { if (_has_name(node_3, "Client FS Size")) { next_hover = Setup_obtain_params_hover::CLIENT_FS_SIZE_INPUT; @@ -3556,24 +3556,24 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Setup_obtain_params_hover const prev_hover { _setup_obtain_params_hover }; Setup_obtain_params_hover next_hover { Setup_obtain_params_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("float", [&] (Xml_node const &node_3) { + node_2.with_optional_sub_node("float", [&] (Xml_node const &node_3) { if (_has_name(node_3, "ok")) { next_hover = Setup_obtain_params_hover::START_BUTTON; } }); - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("frame", [&] (Xml_node const &node_4) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("frame", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Passphrase")) { next_hover = Setup_obtain_params_hover::PASSPHRASE_INPUT; } }); - node_3.with_sub_node("float", [&] (Xml_node const &node_4) { - node_4.with_sub_node("button", [&] (Xml_node const &node_5) { + node_3.with_optional_sub_node("float", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("button", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Show Hide")) { next_hover = Setup_obtain_params_hover::PASSPHRASE_SHOW_HIDE_BUTTON; @@ -3596,11 +3596,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Controls_root_hover const prev_hover { _controls_root_hover }; Controls_root_hover next_hover { Controls_root_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -3609,9 +3609,9 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("vbox", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("vbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Snapshots")) { @@ -3646,11 +3646,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Snapshot_pointer const prev_snapshots_hover { _snapshots_hover }; Snapshot_pointer next_snapshots_hover { }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -3658,20 +3658,20 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("vbox", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("vbox", [&] (Xml_node const &node_5) { if (_snapshots_select.valid()) { - node_5.with_sub_node("hbox", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("hbox", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Leave")) { next_hover = Controls_snapshots_hover::GENERATION_LEAVE_BUTTON; } }); - node_5.with_sub_node("button", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("button", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Discard")) { @@ -3681,18 +3681,18 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } else { - node_5.with_sub_node("hbox", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("hbox", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Leave")) { next_hover = Controls_snapshots_hover::LEAVE_BUTTON; } }); - node_5.with_sub_node("vbox", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("vbox", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Generations")) { - node_6.with_sub_node("float", [&] (Xml_node const &node_7) { + node_6.with_optional_sub_node("float", [&] (Xml_node const &node_7) { Generation const generation { node_7.attribute_value( @@ -3710,7 +3710,7 @@ void File_vault::Main::_handle_hover(Xml_node const &node) }); } }); - node_5.with_sub_node("button", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("button", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Create")) { @@ -3741,11 +3741,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Dimensions_hover const prev_hover { _dimensions_hover }; Dimensions_hover next_hover { Dimensions_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -3753,16 +3753,16 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("hbox", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("hbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Leave")) { next_hover = Dimensions_hover::LEAVE_BUTTON; } }); - node_4.with_sub_node("vbox", [&] (Xml_node const &node_5) { + node_4.with_optional_sub_node("vbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Expand Client FS")) { @@ -3793,11 +3793,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Expand_client_fs_hover const prev_hover { _expand_client_fs_hover }; Expand_client_fs_hover next_hover { Expand_client_fs_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -3806,24 +3806,24 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("vbox", [&] (Xml_node const &node_5) { - node_5.with_sub_node("hbox", [&] (Xml_node const &node_6) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("vbox", [&] (Xml_node const &node_5) { + node_5.with_optional_sub_node("hbox", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Leave")) { next_hover = Expand_client_fs_hover::LEAVE_BUTTON; } }); - node_5.with_sub_node("float", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("float", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Start")) { next_hover = Expand_client_fs_hover::START_BUTTON; } }); - node_5.with_sub_node("frame", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("frame", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Contingent")) { @@ -3848,12 +3848,12 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Expand_snapshot_buf_hover const prev_hover { _expand_snapshot_buf_hover }; Expand_snapshot_buf_hover next_hover { Expand_snapshot_buf_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -3862,25 +3862,25 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("vbox", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("vbox", [&] (Xml_node const &node_5) { - node_5.with_sub_node("hbox", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("hbox", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Leave")) { next_hover = Expand_snapshot_buf_hover::LEAVE_BUTTON; } }); - node_5.with_sub_node("float", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("float", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Start")) { next_hover = Expand_snapshot_buf_hover::START_BUTTON; } }); - node_5.with_sub_node("frame", [&] (Xml_node const &node_6) { + node_5.with_optional_sub_node("frame", [&] (Xml_node const &node_6) { if (_has_name(node_6, "Contingent")) { @@ -3905,11 +3905,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Controls_security_hover const prev_hover { _controls_security_hover }; Controls_security_hover next_hover { Controls_security_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -3918,16 +3918,16 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("hbox", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("hbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Leave")) { next_hover = Controls_security_hover::SECURITY_EXPAND_BUTTON; } }); - node_4.with_sub_node("vbox", [&] (Xml_node const &node_5) { + node_4.with_optional_sub_node("vbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Block Encryption Key")) { @@ -3959,11 +3959,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Controls_security_block_encryption_key_hover const prev_hover { _controls_security_block_encryption_key_hover }; Controls_security_block_encryption_key_hover next_hover { Controls_security_block_encryption_key_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -3972,16 +3972,16 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("button", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("button", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Rekey")) { next_hover = Controls_security_block_encryption_key_hover::REPLACE_BUTTON; } }); - node_4.with_sub_node("hbox", [&] (Xml_node const &node_5) { + node_4.with_optional_sub_node("hbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Leave")) { @@ -4005,11 +4005,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Controls_security_master_key_hover const prev_hover { _controls_security_master_key_hover }; Controls_security_master_key_hover next_hover { Controls_security_master_key_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -4018,9 +4018,9 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("hbox", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("hbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Leave")) { @@ -4044,11 +4044,11 @@ void File_vault::Main::_handle_hover(Xml_node const &node) Controls_security_user_passphrase_hover const prev_hover { _controls_security_user_passphrase_hover }; Controls_security_user_passphrase_hover next_hover { Controls_security_user_passphrase_hover::NONE }; - node.with_sub_node("dialog", [&] (Xml_node const &node_0) { - node_0.with_sub_node("frame", [&] (Xml_node const &node_1) { - node_1.with_sub_node("vbox", [&] (Xml_node const &node_2) { - node_2.with_sub_node("hbox", [&] (Xml_node const &node_3) { - node_3.with_sub_node("button", [&] (Xml_node const &node_4) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &node_0) { + node_0.with_optional_sub_node("frame", [&] (Xml_node const &node_1) { + node_1.with_optional_sub_node("vbox", [&] (Xml_node const &node_2) { + node_2.with_optional_sub_node("hbox", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("button", [&] (Xml_node const &node_4) { if (_has_name(node_4, "Shut down")) { @@ -4057,9 +4057,9 @@ void File_vault::Main::_handle_hover(Xml_node const &node) } }); }); - node_2.with_sub_node("frame", [&] (Xml_node const &node_3) { - node_3.with_sub_node("vbox", [&] (Xml_node const &node_4) { - node_4.with_sub_node("hbox", [&] (Xml_node const &node_5) { + node_2.with_optional_sub_node("frame", [&] (Xml_node const &node_3) { + node_3.with_optional_sub_node("vbox", [&] (Xml_node const &node_4) { + node_4.with_optional_sub_node("hbox", [&] (Xml_node const &node_5) { if (_has_name(node_5, "Leave")) { diff --git a/repos/gems/src/app/gpt_write/main.cc b/repos/gems/src/app/gpt_write/main.cc index 06cc00061b..11ca60f12f 100644 --- a/repos/gems/src/app/gpt_write/main.cc +++ b/repos/gems/src/app/gpt_write/main.cc @@ -762,7 +762,7 @@ struct Main } bool success = false; - config.with_sub_node("actions", [&] (Genode::Xml_node actions) { + config.with_optional_sub_node("actions", [&] (Genode::Xml_node actions) { success = _writer->execute_actions(actions); }); _env.parent().exit(success ? 0 : 1); diff --git a/repos/gems/src/app/menu_view/main.cc b/repos/gems/src/app/menu_view/main.cc index a99da574d1..afc4804d4e 100644 --- a/repos/gems/src/app/menu_view/main.cc +++ b/repos/gems/src/app/menu_view/main.cc @@ -318,7 +318,7 @@ void Menu_view::Main::_handle_config() _background_color = config.attribute_value("background", Color(127, 127, 127, 255)); - config.with_sub_node("vfs", [&] (Xml_node const &vfs_node) { + config.with_optional_sub_node("vfs", [&] (Xml_node const &vfs_node) { _vfs_env.root_dir().apply_config(vfs_node); }); _handle_dialog_update(); diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 0fb89b8298..8b8940e40f 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -1247,7 +1247,7 @@ struct Sculpt::Main : Input_event_handler, /* * Read static platform information */ - _platform.xml().with_sub_node("affinity-space", [&] (Xml_node const &node) { + _platform.xml().with_optional_sub_node("affinity-space", [&] (Xml_node const &node) { _affinity_space = Affinity::Space(node.attribute_value("width", 1U), node.attribute_value("height", 1U)); }); diff --git a/repos/gems/src/app/sculpt_manager/menu_view.cc b/repos/gems/src/app/sculpt_manager/menu_view.cc index b13bd243fb..b6b01c8c89 100644 --- a/repos/gems/src/app/sculpt_manager/menu_view.cc +++ b/repos/gems/src/app/sculpt_manager/menu_view.cc @@ -35,7 +35,7 @@ void Menu_view::_handle_hover() _seq_number.construct(seq); } - hover.with_sub_node("dialog", [&] (Xml_node hover) { + hover.with_optional_sub_node("dialog", [&] (Xml_node hover) { _hovered = true; hover_result = _dialog.hover(hover); }); diff --git a/repos/gems/src/app/sculpt_manager/model/component.h b/repos/gems/src/app/sculpt_manager/model/component.h index 1010df658e..dc3eaf0e6b 100644 --- a/repos/gems/src/app/sculpt_manager/model/component.h +++ b/repos/gems/src/app/sculpt_manager/model/component.h @@ -67,12 +67,12 @@ struct Sculpt::Component : Noncopyable if (path != pkg.attribute_value("path", Path())) return; - pkg.with_sub_node("runtime", [&] (Xml_node runtime) { + pkg.with_optional_sub_node("runtime", [&] (Xml_node runtime) { ram = runtime.attribute_value("ram", Number_of_bytes()); caps = runtime.attribute_value("caps", 0UL); - runtime.with_sub_node("requires", [&] (Xml_node requires) { + runtime.with_optional_sub_node("requires", [&] (Xml_node requires) { routes.update_from_xml(_route_update_policy, requires); }); }); diff --git a/repos/gems/src/app/sculpt_manager/model/file_browser_state.h b/repos/gems/src/app/sculpt_manager/model/file_browser_state.h index 3eee4050bf..fc620b6c87 100644 --- a/repos/gems/src/app/sculpt_manager/model/file_browser_state.h +++ b/repos/gems/src/app/sculpt_manager/model/file_browser_state.h @@ -68,7 +68,7 @@ struct Sculpt::File_browser_state : Noncopyable { unsigned cnt = 0; with_query_result([&] (Xml_node node) { - node.with_sub_node("dir", [&] (Xml_node listing) { + node.with_optional_sub_node("dir", [&] (Xml_node listing) { listing.for_each_sub_node([&] (Xml_node entry) { if (Index(cnt++) == index) fn(entry); }); }); }); diff --git a/repos/gems/src/app/sculpt_manager/model/runtime_config.h b/repos/gems/src/app/sculpt_manager/model/runtime_config.h index a4fb9b56d3..419758de23 100644 --- a/repos/gems/src/app/sculpt_manager/model/runtime_config.h +++ b/repos/gems/src/app/sculpt_manager/model/runtime_config.h @@ -47,13 +47,13 @@ class Sculpt::Runtime_config static Start_name _to_name(Xml_node node) { Start_name result { }; - node.with_sub_node("child", [&] (Xml_node child) { + node.with_optional_sub_node("child", [&] (Xml_node child) { result = child.attribute_value("name", Start_name()); }); if (result.valid()) return result; - node.with_sub_node("parent", [&] (Xml_node parent) { + node.with_optional_sub_node("parent", [&] (Xml_node parent) { Service::Type_name const service = node.attribute_value("name", Service::Type_name()); @@ -143,8 +143,8 @@ class Sculpt::Runtime_config static Start_name _primary_dependency(Xml_node const start) { Start_name result { }; - start.with_sub_node("route", [&] (Xml_node route) { - route.with_sub_node("service", [&] (Xml_node service) { + start.with_optional_sub_node("route", [&] (Xml_node route) { + route.with_optional_sub_node("service", [&] (Xml_node service) { result = _to_name(service); }); }); return result; @@ -291,14 +291,14 @@ class Sculpt::Runtime_config { Dep::Update_policy policy { _alloc }; - node.with_sub_node("route", [&] (Xml_node route) { + node.with_optional_sub_node("route", [&] (Xml_node route) { elem.deps.update_from_xml(policy, route); }); } { Child_service::Update_policy policy { elem.name, _alloc }; - node.with_sub_node("provides", [&] (Xml_node provides) { + node.with_optional_sub_node("provides", [&] (Xml_node provides) { elem._child_services.update_from_xml(policy, provides); }); } diff --git a/repos/gems/src/app/sculpt_manager/view/dialog.h b/repos/gems/src/app/sculpt_manager/view/dialog.h index 57ce424c72..540d8e9f58 100644 --- a/repos/gems/src/app/sculpt_manager/view/dialog.h +++ b/repos/gems/src/app/sculpt_manager/view/dialog.h @@ -74,7 +74,7 @@ struct Sculpt::Dialog : Interface { Hover_result result = Hover_result::UNMODIFIED; - hover.with_sub_node(sub_node, [&] (Xml_node sub_hover) { + hover.with_optional_sub_node(sub_node, [&] (Xml_node sub_hover) { if (_match_sub_dialog(sub_hover, tail...) == Hover_result::CHANGED) result = Hover_result::CHANGED; }); diff --git a/repos/gems/src/app/sculpt_manager/view/file_browser_dialog.h b/repos/gems/src/app/sculpt_manager/view/file_browser_dialog.h index 084fe1dac3..4c972ee154 100644 --- a/repos/gems/src/app/sculpt_manager/view/file_browser_dialog.h +++ b/repos/gems/src/app/sculpt_manager/view/file_browser_dialog.h @@ -281,7 +281,7 @@ struct Sculpt::File_browser_dialog : Noncopyable, Dialog unsigned cnt = 0; _state.with_query_result([&] (Xml_node node) { - node.with_sub_node("dir", [&] (Xml_node listing) { + node.with_optional_sub_node("dir", [&] (Xml_node listing) { if (_state.path != "/") _gen_back_entry(xml); diff --git a/repos/gems/src/app/text_area/dialog.cc b/repos/gems/src/app/text_area/dialog.cc index 285b4a50a2..88721e1eb1 100644 --- a/repos/gems/src/app/text_area/dialog.cc +++ b/repos/gems/src/app/text_area/dialog.cc @@ -631,8 +631,8 @@ void Dialog::handle_hover(Xml_node const &hover) _hovered_position.construct(max_x, y); - node.with_sub_node("float", [&] (Xml_node node) { - node.with_sub_node("label", [&] (Xml_node node) { + node.with_optional_sub_node("float", [&] (Xml_node node) { + node.with_optional_sub_node("label", [&] (Xml_node node) { Line::Index const x { node.attribute_value("at", max_x.value) }; @@ -654,14 +654,14 @@ void Dialog::handle_hover(Xml_node const &hover) _text_hovered = false; - hover.with_sub_node("frame", [&] (Xml_node node) { - node.with_sub_node("button", [&] (Xml_node node) { + hover.with_optional_sub_node("frame", [&] (Xml_node node) { + node.with_optional_sub_node("button", [&] (Xml_node node) { _text_hovered = true; - node.with_sub_node("float", [&] (Xml_node node) { - node.with_sub_node("vbox", [&] (Xml_node node) { - node.with_sub_node("hbox", [&] (Xml_node node) { + node.with_optional_sub_node("float", [&] (Xml_node node) { + node.with_optional_sub_node("vbox", [&] (Xml_node node) { + node.with_optional_sub_node("hbox", [&] (Xml_node node) { with_hovered_line(node); }); }); }); }); }); if (hover_changed || position_changed || (_text_hovered != orig_text_hovered)) diff --git a/repos/gems/src/app/text_area/main.cc b/repos/gems/src/app/text_area/main.cc index 5523784dd1..b6c2112ab9 100644 --- a/repos/gems/src/app/text_area/main.cc +++ b/repos/gems/src/app/text_area/main.cc @@ -92,7 +92,7 @@ struct Text_area::Main : Sandbox::Local_service_base::Wakeup, if (!node.has_sub_node("dialog")) _dialog.handle_hover(Xml_node("")); - node.with_sub_node("dialog", [&] (Xml_node const &dialog) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &dialog) { _dialog.handle_hover(dialog); }); } @@ -462,7 +462,7 @@ struct Text_area::Main : Sandbox::Local_service_base::Wakeup, if (_editable()) { bool const orig_saved_reporter_enabled = _saved_reporter.constructed(); - config.with_sub_node("report", [&] (Xml_node const &node) { + config.with_optional_sub_node("report", [&] (Xml_node const &node) { _saved_reporter.conditional(node.attribute_value("saved", false), _env, "saved", "saved"); }); @@ -471,7 +471,7 @@ struct Text_area::Main : Sandbox::Local_service_base::Wakeup, Saved_version const orig_saved_version = _saved_version; - config.with_sub_node("save", [&] (Xml_node const &node) { + config.with_optional_sub_node("save", [&] (Xml_node const &node) { _saved_version.value = node.attribute_value("version", _saved_version.value); }); diff --git a/repos/gems/src/app/touch_keyboard/main.cc b/repos/gems/src/app/touch_keyboard/main.cc index 32a02bbffc..8694744466 100644 --- a/repos/gems/src/app/touch_keyboard/main.cc +++ b/repos/gems/src/app/touch_keyboard/main.cc @@ -90,7 +90,7 @@ struct Touch_keyboard::Main : Sandbox::Local_service_base::Wakeup, { Input::Seq_number hover_seq { node.attribute_value("seq_number", 0U) }; - node.with_sub_node("dialog", [&] (Xml_node const &dialog) { + node.with_optional_sub_node("dialog", [&] (Xml_node const &dialog) { _dialog.handle_hover(hover_seq, dialog); }); } diff --git a/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc b/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc index 0940dddc47..5e772e7f02 100644 --- a/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc +++ b/repos/gems/src/app/touch_keyboard/touch_keyboard_dialog.cc @@ -105,10 +105,10 @@ void Dialog::handle_hover(Input::Seq_number seq, Xml_node const &dialog) Row::Id hovered_row_id { }; Key::Id hovered_key_id { }; - dialog.with_sub_node("frame", [&] (Xml_node const &frame) { - frame.with_sub_node("vbox", [&] (Xml_node const &vbox) { - vbox.with_sub_node("hbox", [&] (Xml_node const &hbox) { - hbox.with_sub_node("vbox", [&] (Xml_node const &button) { + dialog.with_optional_sub_node("frame", [&] (Xml_node const &frame) { + frame.with_optional_sub_node("vbox", [&] (Xml_node const &vbox) { + vbox.with_optional_sub_node("hbox", [&] (Xml_node const &hbox) { + hbox.with_optional_sub_node("vbox", [&] (Xml_node const &button) { hovered_row_id = hbox .attribute_value("name", Row::Id()); hovered_key_id = button.attribute_value("name", Key::Id()); }); diff --git a/repos/gems/src/server/terminal/main.cc b/repos/gems/src/server/terminal/main.cc index 4b6d3a2dc7..a77da2c8a5 100644 --- a/repos/gems/src/server/terminal/main.cc +++ b/repos/gems/src/server/terminal/main.cc @@ -211,7 +211,7 @@ struct Terminal::Main : Character_consumer _fb_mode = _gui.mode(); /* apply initial size from config, if provided */ - _config.xml().with_sub_node("initial", [&] (Xml_node const &initial) { + _config.xml().with_optional_sub_node("initial", [&] (Xml_node const &initial) { _fb_mode.area = Area(initial.attribute_value("width", _fb_mode.area.w()), initial.attribute_value("height", _fb_mode.area.h())); }); diff --git a/repos/libports/src/lib/libc/file_operations.cc b/repos/libports/src/lib/libc/file_operations.cc index 5cf4e7351b..b0da2ce4f0 100644 --- a/repos/libports/src/lib/libc/file_operations.cc +++ b/repos/libports/src/lib/libc/file_operations.cc @@ -71,8 +71,8 @@ void Libc::init_file_operations(Cwd &cwd, { _cwd_ptr = &cwd; - config_accessor.config().with_sub_node("libc", [&] (Xml_node libc) { - libc.with_sub_node("mmap", [&] (Xml_node mmap) { + config_accessor.config().with_optional_sub_node("libc", [&] (Xml_node libc) { + libc.with_optional_sub_node("mmap", [&] (Xml_node mmap) { _mmap_align_log2 = mmap.attribute_value("align_log2", (unsigned int)PAGE_SHIFT); }); diff --git a/repos/libports/src/lib/libc/fork.cc b/repos/libports/src/lib/libc/fork.cc index 4a2f6d54a1..c2b8e505d6 100644 --- a/repos/libports/src/lib/libc/fork.cc +++ b/repos/libports/src/lib/libc/fork.cc @@ -140,7 +140,7 @@ void Libc::Child_config::_generate(Xml_generator &xml, Xml_node config) xml.attribute("pid", _pid); typedef String Path; - config.with_sub_node("libc", [&] (Xml_node node) { + config.with_optional_sub_node("libc", [&] (Xml_node node) { if (node.has_attribute("rtc")) xml.attribute("rtc", node.attribute_value("rtc", Path())); if (node.has_attribute("pipe")) diff --git a/repos/libports/src/lib/libc/internal/vfs_plugin.h b/repos/libports/src/lib/libc/internal/vfs_plugin.h index d88a8bae0c..b3d7fc5847 100644 --- a/repos/libports/src/lib/libc/internal/vfs_plugin.h +++ b/repos/libports/src/lib/libc/internal/vfs_plugin.h @@ -145,7 +145,7 @@ class Libc::Vfs_plugin final : public Plugin static bool _init_pipe_configured(Xml_node config) { bool result = false; - config.with_sub_node("libc", [&] (Xml_node libc_node) { + config.with_optional_sub_node("libc", [&] (Xml_node libc_node) { result = libc_node.has_attribute("pipe"); }); return result; } diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc index a5f3e53ee5..20e370c026 100644 --- a/repos/libports/src/lib/libc/kernel.cc +++ b/repos/libports/src/lib/libc/kernel.cc @@ -47,7 +47,7 @@ size_t Libc::Kernel::_user_stack_size() { size_t size = Component::stack_size(); - _libc_env.libc_config().with_sub_node("stack", [&] (Xml_node stack) { + _libc_env.libc_config().with_optional_sub_node("stack", [&] (Xml_node stack) { size = stack.attribute_value("size", Number_of_bytes(0)); }); return size; diff --git a/repos/libports/src/lib/qemu-usb/qemu_emul.cc b/repos/libports/src/lib/qemu-usb/qemu_emul.cc index 9c923c59d0..748ac2727e 100644 --- a/repos/libports/src/lib/qemu-usb/qemu_emul.cc +++ b/repos/libports/src/lib/qemu-usb/qemu_emul.cc @@ -104,7 +104,7 @@ Qemu::Controller *Qemu::usb_init(Timer_queue &tq, Pci_device &pci, _type_init_xhci_pci_register_types(); _type_init_usb_host_register_types(&ep, &alloc, &env); - config.with_sub_node("webcam", [&] (Genode::Xml_node const &node) { + config.with_optional_sub_node("webcam", [&] (Genode::Xml_node const &node) { _type_init_host_webcam_register_types(env, node); }); diff --git a/repos/os/include/os/session_policy.h b/repos/os/include/os/session_policy.h index 7e0b58c6c8..9d800ad481 100644 --- a/repos/os/include/os/session_policy.h +++ b/repos/os/include/os/session_policy.h @@ -193,7 +193,7 @@ void Genode::with_matching_policy(String const &label, /* fall back to default policy if no match exists */ if (best_match.has_type("none")) - policies.with_sub_node("default-policy", [&] (Xml_node const &policy) { + policies.with_optional_sub_node("default-policy", [&] (Xml_node const &policy) { best_match = policy; }); if (best_match.has_type("none")) diff --git a/repos/os/src/app/pci_decode/main.cc b/repos/os/src/app/pci_decode/main.cc index 1cabfd02c6..c97853ef39 100644 --- a/repos/os/src/app/pci_decode/main.cc +++ b/repos/os/src/app/pci_decode/main.cc @@ -266,7 +266,7 @@ void Main::sys_rom_update() Main::Main(Env & env) : env(env) { sys_rom.sigh(sys_rom_handler); - platform_info.xml().with_sub_node("kernel", [&] (Xml_node xml) + platform_info.xml().with_optional_sub_node("kernel", [&] (Xml_node xml) { apic_capable = xml.attribute_value("acpi", false); msi_capable = xml.attribute_value("msi", false); diff --git a/repos/os/src/drivers/framebuffer/boot/main.cc b/repos/os/src/drivers/framebuffer/boot/main.cc index 4551ba1e98..77d15dd28a 100644 --- a/repos/os/src/drivers/framebuffer/boot/main.cc +++ b/repos/os/src/drivers/framebuffer/boot/main.cc @@ -45,8 +45,8 @@ struct Framebuffer::Main static Info from_platform_info(Xml_node const &node) { Info result { }; - node.with_sub_node("boot", [&] (Xml_node const &boot) { - boot.with_sub_node("framebuffer", [&] (Xml_node const &fb) { + node.with_optional_sub_node("boot", [&] (Xml_node const &boot) { + boot.with_optional_sub_node("framebuffer", [&] (Xml_node const &fb) { result = { .addr = fb.attribute_value("phys", 0UL), .size = { fb.attribute_value("width", 0U), diff --git a/repos/os/src/drivers/nic/spec/linux/main.cc b/repos/os/src/drivers/nic/spec/linux/main.cc index 4b7d7296bf..db85a3db08 100644 --- a/repos/os/src/drivers/nic/spec/linux/main.cc +++ b/repos/os/src/drivers/nic/spec/linux/main.cc @@ -212,7 +212,7 @@ struct Main Main(Env &env) : _env(env) { - _config_rom.xml().with_sub_node("report", [&] (Xml_node const &xml) { + _config_rom.xml().with_optional_sub_node("report", [&] (Xml_node const &xml) { bool const report_mac_address = xml.attribute_value("mac_address", false); diff --git a/repos/os/src/drivers/platform/legacy/x86/main.cc b/repos/os/src/drivers/platform/legacy/x86/main.cc index 3c01f8c286..58c3e5e777 100644 --- a/repos/os/src/drivers/platform/legacy/x86/main.cc +++ b/repos/os/src/drivers/platform/legacy/x86/main.cc @@ -77,7 +77,7 @@ struct Platform::Main try { Attached_rom_dataspace info { _env, "platform_info" }; - info.xml().with_sub_node("kernel", [&] (Xml_node const &node) { + info.xml().with_optional_sub_node("kernel", [&] (Xml_node const &node) { acpi_platform = node.attribute_value("acpi", acpi_platform); msi_platform = node.attribute_value("msi" , msi_platform); }); @@ -188,7 +188,7 @@ void Platform::Main::_attempt_acpi_reset() if (!acpi_rom.constructed()) return; - acpi_rom->xml().with_sub_node("reset", [&] (Xml_node reset) { + acpi_rom->xml().with_optional_sub_node("reset", [&] (Xml_node reset) { uint16_t const io_port = reset.attribute_value("io_port", (uint16_t)0); uint8_t const value = reset.attribute_value("value", (uint8_t)0); diff --git a/repos/os/src/init/main.cc b/repos/os/src/init/main.cc index a3fa95de0a..4f13681880 100644 --- a/repos/os/src/init/main.cc +++ b/repos/os/src/init/main.cc @@ -49,7 +49,7 @@ struct Init::Main : Sandbox::State_handler Xml_node const config = _config.xml(); bool reporter_enabled = false; - config.with_sub_node("report", [&] (Xml_node report) { + config.with_optional_sub_node("report", [&] (Xml_node report) { reporter_enabled = true; diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index e66eeb57a6..a31fd05d27 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -702,7 +702,7 @@ void ::Root::_announce_service() /* * Check for report policy, and resp. con-/destruct device reporter */ - _config.xml().with_sub_node("report", [&] (Xml_node node) { + _config.xml().with_optional_sub_node("report", [&] (Xml_node node) { _device_reporter.conditional(node.attribute_value("devices", false), _env, "devices", "devices" ); diff --git a/repos/os/src/lib/sandbox/child.cc b/repos/os/src/lib/sandbox/child.cc index 7096516fe1..b6d5cfb62c 100644 --- a/repos/os/src/lib/sandbox/child.cc +++ b/repos/os/src/lib/sandbox/child.cc @@ -66,8 +66,8 @@ Sandbox::Child::apply_config(Xml_node start_node) * The node may affect the availability or unavailability * of dependencies. */ - start_node.with_sub_node("route", [&] (Xml_node const &route) { - _start_node->xml().with_sub_node("route", [&] (Xml_node const &orig) { + start_node.with_optional_sub_node("route", [&] (Xml_node const &route) { + _start_node->xml().with_optional_sub_node("route", [&] (Xml_node const &orig) { if (route.differs_from(orig)) { _construct_route_model_from_start_node(start_node); _uncertain_dependencies = true; } }); }); diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h index e192d9126f..b4a612624a 100644 --- a/repos/os/src/lib/sandbox/child.h +++ b/repos/os/src/lib/sandbox/child.h @@ -126,13 +126,11 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup { _route_model.destruct(); - start.with_sub_node("route", [&] (Xml_node const &route) { - _route_model.construct(_alloc, route); }); - - if (_route_model.constructed()) - return; - - _route_model.construct(_alloc, _default_route_accessor.default_route()); + start.with_sub_node("route", + [&] (Xml_node const &route) { + _route_model.construct(_alloc, route); }, + [&] () { + _route_model.construct(_alloc, _default_route_accessor.default_route()); }); } /* diff --git a/repos/os/src/lib/sandbox/utils.h b/repos/os/src/lib/sandbox/utils.h index 90bb177a4d..cba9ca5d2c 100644 --- a/repos/os/src/lib/sandbox/utils.h +++ b/repos/os/src/lib/sandbox/utils.h @@ -213,7 +213,7 @@ namespace Sandbox { Location result = Location(0, 0, space.width(), space.height()); - start_node.with_sub_node("affinity", [&] (Xml_node node) { + start_node.with_optional_sub_node("affinity", [&] (Xml_node node) { Location const location = Location::from_xml(space, node); diff --git a/repos/os/src/server/nic_perf/interface.h b/repos/os/src/server/nic_perf/interface.h index 4e2fab2ed0..63032b09d9 100644 --- a/repos/os/src/server/nic_perf/interface.h +++ b/repos/os/src/server/nic_perf/interface.h @@ -107,16 +107,18 @@ class Nic_perf::Interface _dhcp_client.destruct(); - config.with_sub_node("interface", [&] (Xml_node node) { - _ip = node.attribute_value("ip", _ip); - _dhcp_client_ip = node.attribute_value("dhcp_client_ip", _dhcp_client_ip); + config.with_sub_node("interface", + [&] (Xml_node node) { + _ip = node.attribute_value("ip", _ip); + _dhcp_client_ip = node.attribute_value("dhcp_client_ip", _dhcp_client_ip); - if (_mac_from_policy) - _mac = node.attribute_value("mac", _mac); - }); + if (_mac_from_policy) + _mac = node.attribute_value("mac", _mac); + }, - if (_ip == Ipv4_address()) - _dhcp_client.construct(_timer, *this); + /* node does not exist */ + [&] () { _dhcp_client.construct(_timer, *this); } + ); } Session_label const &label() const { return _label; } diff --git a/repos/os/src/server/nic_perf/packet_generator.h b/repos/os/src/server/nic_perf/packet_generator.h index ffb73fe1d2..e70a761c60 100644 --- a/repos/os/src/server/nic_perf/packet_generator.h +++ b/repos/os/src/server/nic_perf/packet_generator.h @@ -74,7 +74,7 @@ class Nic_perf::Packet_generator _enable = false; _state = MUTED; - config.with_sub_node("tx", [&] (Xml_node node) { + config.with_optional_sub_node("tx", [&] (Xml_node node) { _mtu = node.attribute_value("mtu", _mtu); _dst_ip = node.attribute_value("to", _dst_ip); _dst_port = node.attribute_value("udp_port", _dst_port); diff --git a/repos/os/src/server/nic_router/dhcp_server.cc b/repos/os/src/server/nic_router/dhcp_server.cc index f46c27e20a..063e513613 100644 --- a/repos/os/src/server/nic_router/dhcp_server.cc +++ b/repos/os/src/server/nic_router/dhcp_server.cc @@ -43,7 +43,7 @@ Dhcp_server_base::Dhcp_server_base(Xml_node const &node, _invalid(domain, "invalid DNS server entry"); } }); - node.with_sub_node("dns-domain", [&] (Xml_node const &sub_node) { + node.with_optional_sub_node("dns-domain", [&] (Xml_node const &sub_node) { xml_node_with_attribute(sub_node, "name", [&] (Xml_attribute const &attr) { _dns_domain_name.set_to(attr); diff --git a/repos/os/src/test/nic_router_dhcp/manager/main.cc b/repos/os/src/test/nic_router_dhcp/manager/main.cc index 5ddbb3434f..d208f0d9b2 100644 --- a/repos/os/src/test/nic_router_dhcp/manager/main.cc +++ b/repos/os/src/test/nic_router_dhcp/manager/main.cc @@ -131,7 +131,7 @@ void Local::Main::_handle_router_state() /* read out new DNS domain name */ Dns_domain_name dns_domain_name { _heap }; - domain_node.with_sub_node("dns-domain", [&] (Xml_node const &sub_node) { + domain_node.with_optional_sub_node("dns-domain", [&] (Xml_node const &sub_node) { xml_node_with_attribute(sub_node, "name", [&] (Xml_attribute const &attr) { dns_domain_name.set_to(attr); }); diff --git a/repos/os/src/test/resource_request/main.cc b/repos/os/src/test/resource_request/main.cc index 7c69f7c885..979ce86f75 100644 --- a/repos/os/src/test/resource_request/main.cc +++ b/repos/os/src/test/resource_request/main.cc @@ -87,8 +87,8 @@ struct Test::Monitor { size_t result = 0; - _init_state.xml().with_sub_node("child", [&] (Xml_node const &child) { - child.with_sub_node("ram", [&] (Xml_node const &ram) { + _init_state.xml().with_optional_sub_node("child", [&] (Xml_node const &child) { + child.with_optional_sub_node("ram", [&] (Xml_node const &ram) { result = ram.attribute_value(attr, Number_of_bytes(0)); }); }); return result; diff --git a/repos/ports/src/virtualbox5/generic/sup_vmm.cc b/repos/ports/src/virtualbox5/generic/sup_vmm.cc index d394bd7903..d7033318a9 100644 --- a/repos/ports/src/virtualbox5/generic/sup_vmm.cc +++ b/repos/ports/src/virtualbox5/generic/sup_vmm.cc @@ -722,7 +722,7 @@ uint64_t genode_cpu_hz() if (!cpu_freq) { try { - platform_rom().with_sub_node("tsc", [&] (Genode::Xml_node const &tsc) { + platform_rom().with_optional_sub_node("tsc", [&] (Genode::Xml_node const &tsc) { cpu_freq = tsc.attribute_value("freq_khz", cpu_freq); }); cpu_freq *= 1000ULL; } catch (...) { } diff --git a/repos/ports/src/virtualbox5/spec/nova/sup.cc b/repos/ports/src/virtualbox5/spec/nova/sup.cc index 79ea8be036..0d68c3af52 100644 --- a/repos/ports/src/virtualbox5/spec/nova/sup.cc +++ b/repos/ports/src/virtualbox5/spec/nova/sup.cc @@ -690,7 +690,7 @@ uint64_t genode_cpu_hz() if (!cpu_freq) { try { - platform_rom().with_sub_node("tsc", [&] (Genode::Xml_node const &tsc) { + platform_rom().with_optional_sub_node("tsc", [&] (Genode::Xml_node const &tsc) { cpu_freq = tsc.attribute_value("freq_khz", cpu_freq); }); cpu_freq *= 1000ULL; } catch (...) { } diff --git a/repos/ports/src/virtualbox6/sup_drv.cc b/repos/ports/src/virtualbox6/sup_drv.cc index 8f509d0bd6..60fc557133 100644 --- a/repos/ports/src/virtualbox6/sup_drv.cc +++ b/repos/ports/src/virtualbox6/sup_drv.cc @@ -24,8 +24,8 @@ Sup::Cpu_freq_khz Sup::Drv::_cpu_freq_khz_from_rom() { unsigned khz = 0; - _platform_info_rom.xml().with_sub_node("hardware", [&] (Xml_node const &node) { - node.with_sub_node("tsc", [&] (Xml_node const &node) { + _platform_info_rom.xml().with_optional_sub_node("hardware", [&] (Xml_node const &node) { + node.with_optional_sub_node("tsc", [&] (Xml_node const &node) { khz = node.attribute_value("freq_khz", khz); }); }); @@ -42,8 +42,8 @@ Sup::Drv::Cpu_virt Sup::Drv::_cpu_virt_from_rom() { Cpu_virt virt = Cpu_virt::NONE; - _platform_info_rom.xml().with_sub_node("hardware", [&] (Xml_node const &node) { - node.with_sub_node("features", [&] (Xml_node const &node) { + _platform_info_rom.xml().with_optional_sub_node("hardware", [&] (Xml_node const &node) { + node.with_optional_sub_node("features", [&] (Xml_node const &node) { if (node.attribute_value("vmx", false)) virt = Cpu_virt::VMX; else if (node.attribute_value("svm", false)) From 468927584536667876173aa07d2e4ead9bb62065 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 2 Sep 2022 16:09:37 +0200 Subject: [PATCH 217/354] depot_deploy: do not fail on missing nodes If provided with a config that does not include a `` or `` node, depot_deploy exits due to a `Nonexistent_sub_node` exception. Instead, we should output a more useful warning. Fixes genodelabs/genode#4600 --- repos/gems/src/app/depot_deploy/main.cc | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/repos/gems/src/app/depot_deploy/main.cc b/repos/gems/src/app/depot_deploy/main.cc index 186c058b0c..4d4fda8a20 100644 --- a/repos/gems/src/app/depot_deploy/main.cc +++ b/repos/gems/src/app/depot_deploy/main.cc @@ -81,9 +81,12 @@ struct Depot_deploy::Main if (prio_levels.value) xml.attribute("prio_levels", prio_levels.value); - Xml_node static_config = config.sub_node("static"); - static_config.with_raw_content([&] (char const *start, size_t length) { - xml.append(start, length); }); + config.with_sub_node("static", + [&] (Xml_node static_config) { + static_config.with_raw_content([&] (char const *start, size_t length) { + xml.append(start, length); }); + }, + [&] () { warning("config lacks node"); }); config.with_optional_sub_node("report", [&] (Xml_node const &report) { @@ -127,10 +130,14 @@ struct Depot_deploy::Main }); }); - Child::Depot_rom_server const parent { }; - _children.gen_start_nodes(xml, config.sub_node("common_routes"), - prio_levels, Affinity::Space(1, 1), - parent, parent); + config.with_sub_node("common_routes", + [&] (Xml_node node) { + Child::Depot_rom_server const parent { }; + _children.gen_start_nodes(xml, node, + prio_levels, Affinity::Space(1, 1), + parent, parent); + }, + [&] () { warning("config lacks node"); }); }); /* update query for blueprints of all unconfigured start nodes */ From 8186a1d7f866812c6a3d2729d78dd11af211cf6a Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 8 Sep 2022 14:21:49 +0200 Subject: [PATCH 218/354] Support seconds in vfs/rtc plugin and libc backend Fixes #3886 --- repos/libports/run/system_rtc.run | 3 +-- repos/libports/src/lib/libc/internal/rtc.h | 4 ++-- repos/libports/src/test/libc/main.cc | 3 ++- repos/libports/src/test/libc_rtc/main.cc | 19 +++++++------------ repos/os/src/lib/vfs/rtc_file_system.h | 10 +++++----- 5 files changed, 17 insertions(+), 22 deletions(-) diff --git a/repos/libports/run/system_rtc.run b/repos/libports/run/system_rtc.run index e817b9b566..15e1029987 100644 --- a/repos/libports/run/system_rtc.run +++ b/repos/libports/run/system_rtc.run @@ -89,10 +89,9 @@ set config { install_config $config set build_components { test/system_rtc test/libc_rtc } -set boot_components { test-system_rtc test-libc_rtc } build $build_components -build_boot_image $boot_components +build_boot_image [build_artifacts] append qemu_args " -nographic " diff --git a/repos/libports/src/lib/libc/internal/rtc.h b/repos/libports/src/lib/libc/internal/rtc.h index b38b25d12c..cb10fd1335 100644 --- a/repos/libports/src/lib/libc/internal/rtc.h +++ b/repos/libports/src/lib/libc/internal/rtc.h @@ -47,14 +47,14 @@ struct Libc::Rtc : Vfs::Watch_response_handler try { File_content const content(_alloc, root_dir, _rtc_path.string(), File_content::Limit{4096U}); - content.bytes([&] (char const *ptr, size_t size) { char buf[32] { }; ::memcpy(buf, ptr, min(sizeof(buf) - 1, size)); struct tm tm { }; - if (strptime(buf, "%Y-%m-%d %R", &tm)) { + if (strptime(buf, "%Y-%m-%d %H:%M:%S", &tm) + || strptime(buf, "%Y-%m-%d %H:%M", &tm)) { _rtc_value = mktime(&tm); if (_rtc_value == (time_t)-1) _rtc_value = 0; diff --git a/repos/libports/src/test/libc/main.cc b/repos/libports/src/test/libc/main.cc index 85032dc131..f74357b268 100644 --- a/repos/libports/src/test/libc/main.cc +++ b/repos/libports/src/test/libc/main.cc @@ -215,7 +215,8 @@ int main(int argc, char **argv) ts.tv_sec = ts.tv_nsec = 0; clock_gettime(CLOCK_REALTIME, &ts); - printf("sleep/gettime(CLOCK_REALTIME): %.09f\n", ts.tv_sec + ts.tv_nsec / 1000000000.0); + printf("sleep/gettime(CLOCK_REALTIME): %.09f %s\n", + ts.tv_sec + ts.tv_nsec / 1000000000.0, asctime(localtime(&ts.tv_sec))); { unsigned long long buf = 0; diff --git a/repos/libports/src/test/libc_rtc/main.cc b/repos/libports/src/test/libc_rtc/main.cc index 3b88a9987c..8aeba3a3f8 100644 --- a/repos/libports/src/test/libc_rtc/main.cc +++ b/repos/libports/src/test/libc_rtc/main.cc @@ -21,23 +21,18 @@ int main() unsigned idx = 1; while (1) { struct timespec ts; - if (clock_gettime(0, &ts)) { + if (clock_gettime(0, &ts)) return -1; - } struct tm *tm = localtime((time_t*)&ts.tv_sec); - if (!tm) { + if (!tm) return -1; - } - printf("Timestamp #%d: %d-%d-%d %d:%d %ds\n", - idx++, - 1900 + tm->tm_year, - 1 + tm->tm_mon, - tm->tm_mday, - tm->tm_hour, - tm->tm_min, - tm->tm_sec); + char time_str[32]; + if (!strftime(time_str, sizeof(time_str), "%F %T", tm)) + return -1; + + printf("Timestamp #%d: %s\n", idx++, time_str); sleep(1); } diff --git a/repos/os/src/lib/vfs/rtc_file_system.h b/repos/os/src/lib/vfs/rtc_file_system.h index 3d2449edbc..866e9fb180 100644 --- a/repos/os/src/lib/vfs/rtc_file_system.h +++ b/repos/os/src/lib/vfs/rtc_file_system.h @@ -27,8 +27,8 @@ class Vfs::Rtc_file_system : public Single_file_system { private: - /* "1970-01-01 00:00\n" */ - enum { TIMESTAMP_LEN = 17 }; + /* "1970-01-01 00:00:00\n" */ + enum { TIMESTAMP_LEN = 20 }; class Rtc_vfs_handle : public Single_vfs_handle { @@ -49,7 +49,7 @@ class Vfs::Rtc_file_system : public Single_file_system * Read the current time from the Rtc session * * On each read the current time is queried and afterwards formated - * as '%Y-%m-%d %H:%M\n'. + * as '%Y-%m-%d %H:%M:%S\n' resp. '%F %T\n'. */ Read_result read(char *dst, file_size count, file_size &out_count) override @@ -63,8 +63,8 @@ class Vfs::Rtc_file_system : public Single_file_system char buf[TIMESTAMP_LEN+1]; char *b = buf; - Genode::size_t n = Genode::snprintf(buf, sizeof(buf), "%04u-%02u-%02u %02u:%02u\n", - ts.year, ts.month, ts.day, ts.hour, ts.minute); + Genode::size_t n = Genode::snprintf(buf, sizeof(buf), "%04u-%02u-%02u %02u:%02u:%02u\n", + ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second); n -= (size_t)seek(); b += seek(); From 5b25060730000a79ff4ded8228eb5b8e4a5d901b Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 8 Sep 2022 14:25:34 +0200 Subject: [PATCH 219/354] libc: prevent compiler warning --- repos/libports/src/lib/libc/socket_fs_plugin.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/repos/libports/src/lib/libc/socket_fs_plugin.cc b/repos/libports/src/lib/libc/socket_fs_plugin.cc index 6e68efe583..24c34726b5 100644 --- a/repos/libports/src/lib/libc/socket_fs_plugin.cc +++ b/repos/libports/src/lib/libc/socket_fs_plugin.cc @@ -846,18 +846,19 @@ extern "C" ssize_t socket_fs_recvmsg(int libc_fd, msghdr *msg, int flags) size_t numberOfBytes = 0; char *data = nullptr; size_t length = 0; - size_t i; char *buffer; ssize_t res; size_t amount; socklen_t client_address_len; /* iterate over all msg_iov to get the number of bytes that have to be read. */ - for (i = 0; i < msg->msg_iovlen; i++) { + for (int i = 0; i < msg->msg_iovlen; i++) { numberOfBytes += msg->msg_iov[i].iov_len; - /* As an optimization, we set the initial values of DATA and LEN - from the first non-empty iovec. This kicks-in in the case - where the whole packet fits into the first iovec buffer. */ + /* + * As an optimization, we set the initial values of DATA and LEN from + * the first non-empty iovec. This kicks-in in the case where the whole + * packet fits into the first iovec buffer. + */ if (data == nullptr && msg->msg_iov[i].iov_len > 0) { data = (char*)msg->msg_iov[i].iov_base; length = msg->msg_iov[i].iov_len; @@ -895,7 +896,7 @@ extern "C" ssize_t socket_fs_recvmsg(int libc_fd, msghdr *msg, int flags) } else { amount = length; buffer = data; - for (i = 0; i < msg->msg_iovlen; i++) { + for (int i = 0; i < msg->msg_iovlen; i++) { #define min(a, b) ((a) > (b) ? (b) : (a)) size_t copy = min (msg->msg_iov[i].iov_len, amount); ::memcpy (msg->msg_iov[i].iov_base, buffer, copy); From 5e9e003bb0a34dcaf63af5c79e3622af54882c18 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 2 Sep 2022 13:37:08 +0200 Subject: [PATCH 220/354] libc: warn on missing std*="" or dirs The libc kernel used to end up in an uncaught exception if one of the directories in the paths given through stdin/stdout/stderr or was missing. The resulting error didn't point the user to the presumably simple configuration issue of his scenario in any way and killed the affected component. With this commit, the libc kernel prints a descriptive warning instead and simply continues to run the component with the corresponding file descriptor missing. At least in case of stdin/stdout/stderr, the libc deals gracefully with this approach. Ref #4218 --- repos/libports/src/lib/libc/kernel.cc | 72 +++++++++++++++------------ 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc index 20e370c026..9c76ef8768 100644 --- a/repos/libports/src/lib/libc/kernel.cc +++ b/repos/libports/src/lib/libc/kernel.cc @@ -176,43 +176,51 @@ void Libc::Kernel::_init_file_descriptors() if (!node.has_attribute(attr)) return; - Absolute_path const path { - resolve_absolute_path(node.attribute_value(attr, Path())) }; + Path const attr_value { node.attribute_value(attr, Path()) }; + try { + Absolute_path const path { resolve_absolute_path(attr_value) }; - struct stat out_stat { }; - if (_vfs.stat_from_kernel(path.string(), &out_stat) != 0) - return; + struct stat out_stat { }; + if (_vfs.stat_from_kernel(path.string(), &out_stat) != 0) + return; - File_descriptor *fd = _vfs.open_from_kernel(path.string(), flags, libc_fd); - if (!fd) - return; + File_descriptor *fd = + _vfs.open_from_kernel(path.string(), flags, libc_fd); - if (fd->libc_fd != libc_fd) { - error("could not allocate fd ",libc_fd," for ",path,", " - "got fd ",fd->libc_fd); - _vfs.close_from_kernel(fd); + if (!fd) + return; + + if (fd->libc_fd != libc_fd) { + error("could not allocate fd ",libc_fd," for ",path,", " + "got fd ",fd->libc_fd); + _vfs.close_from_kernel(fd); + return; + } + + fd->cloexec = node.attribute_value("cloexec", false); + + /* + * We need to manually register the path. Normally this is done + * by '_open'. But we call the local 'open' function directly + * because we want to explicitly specify the libc fd ID. + */ + if (fd->fd_path) + warning("may leak former FD path memory"); + + { + char *dst = (char *)_heap.alloc(path.max_len()); + copy_cstring(dst, path.string(), path.max_len()); + fd->fd_path = dst; + } + + ::off_t const seek = node.attribute_value("seek", 0ULL); + if (seek) + _vfs.lseek_from_kernel(fd, seek); + + } catch (Symlink_resolve_error) { + warning("failed to resolve ", attr_value); return; } - - fd->cloexec = node.attribute_value("cloexec", false); - - /* - * We need to manually register the path. Normally this is done - * by '_open'. But we call the local 'open' function directly - * because we want to explicitly specify the libc fd ID. - */ - if (fd->fd_path) - warning("may leak former FD path memory"); - - { - char *dst = (char *)_heap.alloc(path.max_len()); - copy_cstring(dst, path.string(), path.max_len()); - fd->fd_path = dst; - } - - ::off_t const seek = node.attribute_value("seek", 0ULL); - if (seek) - _vfs.lseek_from_kernel(fd, seek); }; if (_vfs.root_dir_has_dirents()) { From d9b5e4ae8dd2c392805a5437942efcbb19906ab7 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 2 Sep 2022 13:57:26 +0200 Subject: [PATCH 221/354] libc: warn on missing std*="" or file The libc kernel used to silently go on if one of the files given through stdin/stdout/stderr or was missing (with possibly vital functionality for the component not working). A pointer to the presumably simple configuration issue of the underlying scenario was not given to the user. With this commit, the libc kernel prints a descriptive warning before proceeding with the invalid file descriptor Fixes #4218 --- repos/libports/src/lib/libc/kernel.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc index 9c76ef8768..2324951b0f 100644 --- a/repos/libports/src/lib/libc/kernel.cc +++ b/repos/libports/src/lib/libc/kernel.cc @@ -181,8 +181,10 @@ void Libc::Kernel::_init_file_descriptors() Absolute_path const path { resolve_absolute_path(attr_value) }; struct stat out_stat { }; - if (_vfs.stat_from_kernel(path.string(), &out_stat) != 0) + if (_vfs.stat_from_kernel(path.string(), &out_stat) != 0) { + warning("failed to call 'stat' on ", path); return; + } File_descriptor *fd = _vfs.open_from_kernel(path.string(), flags, libc_fd); @@ -218,7 +220,7 @@ void Libc::Kernel::_init_file_descriptors() _vfs.lseek_from_kernel(fd, seek); } catch (Symlink_resolve_error) { - warning("failed to resolve ", attr_value); + warning("failed to resolve path for ", attr_value); return; } }; From ede007c2dd90d774864149dad663b4d3a7f72c5f Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 5 Sep 2022 13:34:36 +0200 Subject: [PATCH 222/354] Bender: Intel HWP mode configurable via RUN_OPT The updated Bender version is configurable regarding the mode in which to run the Intel HWP plugin. This can now be controlled via the new run option '--bender-intel-hwp-mode' (only when running on NOVA). The option knows 4 valid values 'off', 'performance', 'balanced', and 'power_saving'. When running on NOVA, the default value applied by the run tool is 'performance'. when running on any other kernel, the default value of Bender ('off') is used. Therefore, when not setting the new '--bender-intel-hwp-mode' flag, the behavior is the same as before this commit. Fixes #4224 --- tool/boot/README | 6 +++--- tool/boot/bender | Bin 28752 -> 29272 bytes tool/run/boot_dir/nova | 32 ++++++++++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/tool/boot/README b/tool/boot/README index f19afc06f3..1a5e037e28 100644 --- a/tool/boot/README +++ b/tool/boot/README @@ -18,14 +18,14 @@ code respectively the download source of binaries are described below. configured via commandline. The changes are available from - https://github.com/alex-ab/morbo.git. + https://github.com/m-stein/morbo.git. git branch genode_bender - git commit 7909dd0b56c66400bfb9c1c4abf70d2c593b4902 + git commit 3645d67dc0643b8aab008eb76a8e056636e5edee :'pulsar': - The 'pulsar' tool was obtained in binary form from + The 'pulsar' tool was obtained in binary form from http://os.inf.tu-dresden.de/~us15/pulsar. :'unzip' diff --git a/tool/boot/bender b/tool/boot/bender index aace3536ddc864c322c1f092bfef92a530433c3a..d365444b249e9d9a142f59a34551c474822713fc 100755 GIT binary patch delta 6840 zcmZXY3tSU-w#WYy0|pHS6mWP5K?fBP1r&|e2P#;#R&9MCN(HJ6_^9|u)NXYH4cLxp zy0m}q-tJv>+g^9C-L`jW(+4PaLDbZ)+p=2wzDiqcgRrfwE8sKxJCjM9a)%Ey^F8PM z&pH41f703}e9|t|nsryVJTrW_uIr)K=BDa|{d|jVp8E}5j$r6t>%ZKB-e)qg#{Jtx zrhHaDWU|OQ4)Q@!Lk+9+j8&a@`#zo?m1amIXsN!B7e~b}A3BmT7vJvl`IM{54eu1f zmyi4lc-rN7o}Rgqv8LNpeTy;XTqYTntKRw)#%h{u#?y`$Ll_e}-h)cH0>vNvidfzn z6=m-@46%#9MLw>2ZGP1N?`?^(4nrMrM;Y4MmmH z9e3{XHPI=C<0x9y60?9iqZ5Qx{77`FkipMIkFiHx_xT)M#wFfYlNocIjHss!Iuc>- za^(7Tp1d~5*b+}(J3YM)Si0_SBjf(y%42HV#h&XqXL{?LH#3p3>LzQr%drE+A9%oL zYwrwmIreICGP}KV{E-}c+L@I<7Gn~=;Lez2@hA!&5o|*o?+Qot@N0VOU1#1|Zv#IW zBjr(hGVAKfJ*~`Cor)aa=|z1_Z=Y83TD{?v5dRN#N~Ja znkC*R%shQ)lD$Ps#QP8|P>0H6)FaF`FtginjJkkX2Y6pa0`DLS+vgzdlX zybEum#R8V~)Fs|25K(H@0nX(gD!twlSr}nXa#nLDAghJTnr)fc1QT9{+cPbmUv$p#)rnuH->ckd=1o=-p7*orZ_Pv3<7Uq zk~(a@bS;w-RITfYaFXXH@&As?L9q5XEA9pH=?MQs{QU@gA$|_-u?ZvXo8}Oo_L=drtqUA8sWakrm!1kK|J z1jziS2eTSJS!cp=8jXZ@!tmoJ4SkINF=2kPf%?;#E16w8^;in@_vA{3ZPOjQC4<2_ z333A;IBdAxpoA*<>y#o%S)8l%biR(vT)U;H`f?QZPK|?y1gU-}LAnN82+SIo35IB} zmLODv3W6K4eg~Tgx-^gpF8RS;znQ#l8Y!7g*ZydC8BamMl#kDUuiUU0Mcc|8N3Y)Ibv8k>bPL{%NHAsDV0CE^DC1`vgGY`01oX`{18i z(JgtG+<5e1{eyzb!rhyt{72p?j!iq4x61Si_O&ZGVS|@C7uwo*a zvYb}Qhz9mCrKj1KWIEg}0 zC0Tc_+x==vt)Tn1o6j7TDQx9iN5v1W>p?@?&Mxs*V9{FXa$M-)henwPZiP!FuioXj z(!&g2NREKuS+d3{O$*;+E)|Zkz=0K z8NRu~j>$YC=q8NiO<5xhe`zNNhOxXeYlC3t zD<3sAUu#V(LQB7S>dy8T-D#WaqKhA#mk~bR99< z23@ONWa~QZsN)5blVal3Qrl5VRvctiS4pa;Cztm>aETmV=XWM&My^xekK-6h4exST z`Aka+8no1s9npJ{>>f~chRS30{LhvI;SKJwBuBpyjcm@EWTkpA`^`Y+nk^`fH~1aP z(EeYfFm}4K-W@+>qoCU;xu2XmNFu`2B{T4R!bvJ#!nkK90a&!PU zG#OiKKu6oLulY!P90AAE;Wc2L9_dUpezaq{?f+OYW#v@q9+kbAD+F zq>uWgcK&TnlHsY3D38m-_@G(wx{OOaZB{`Pl`nUpS%ZzAn>8l9^#U2E4x_|%iOw7&DrHa>;<%1I+tXB8j4y&*DZKlqHM+K9-ajuTjmmE5ryhAco?>$JBMxhS zLlbyTkedxc10CmZBq`?kd5MN}s*`6&EZ>utHl&U0_e-tVHxb`RzTL<2;sl}9{n6Z& zf??eU6!v(Gd(yncf+75UA~~A7=Fc~r{RjDpj&@(1e@YNS_~H9T2x0tP+{1a-eGdwa zeCER4xHm3L*L`~3-MMguAk25qUbIY@uXt80_4atk*%B-bIC(j3dKce><-+@D2X(P6 z|7aAFMnztOu)4{1ukz~%XQ<2h3MQ@M!KQ9Xd^c?_zqEL)UN$IqxM|4?_WJq=k;%*D zbUK2``SJ>Rsa(}{0Dj73CzBn$I_q%U`&l#PnkG~AL0y^b(MwQ6j}sOhDOu-eRfxSp z6RO9qA*v9mYC<30vc~pp`82W_qzqMnj8bvTKth z%74X@4VM@UyKpa*EVwU}RwCVHlE@PuC=55s?_6Fg!UiW13xDE);dY~KyPSh+=xvuE z-7W2sGtbD%E%|(BnWa!~v@Mr$NFfWHU%rLKCh~{Vo{{W?URmi>O-0+-Aj1y1=A5Zo z6kwk#B_MgZxx*kkzBIv2sHyrWTJL6vX>SiJ%apN&X2{A_S-B>wCkeUg>q=BZR!
In16RVNSd-Uk;KfiZty09Qw?Z^C3!PLoe?f?HgR2DZ6C%E)SN6F2?w23M`(v?{BS`)!-Z95i`}gop*YgD= zOM0ec1l9+-`l;XWj1@l=U|Lfc`{XC4lQ&~+Ke0NS7+Vvt579iRW=zk1Py_DY&L3a% zwEc0cQ#2I>d@7B>lfvN33an$(@T>~bF9cTx@k8L;X-gF zT6h`!Q47oVJ_Z$FZ??bZ$YeXXW8%-e3)~#Ud%#dD2b`d z?1%97ECe*DNbu)A1zzjJ__u=pQ zaBm+LD0A(i8V&@HnIf`TkWrULfVCI8);?@KfL%jdy_0g69z15m14^G+SgBHG>zx{{(N+ z_%(3gq8c{#;gjID)&2l<);!loPqXSkP#0Yc(vKvEmm%1*NL1%1wZPRN1Jbj8eB9bZ z`v5F7fmKF8dz!)4EdSUXtP|KIuz9e^MkC%}xLE*hnIJNpoK#)|o(H{*9whxH@ZT~; z_L8Q59L#Wjpeq9Ur@-_}Eln2K+Zl(zV-eX}zkppppWeXWry}I=0Q7B`y>wARuY)5I zkS=oA1g2%N81;+9*!6(v_n?6OGw}Z*;mHt?zb^29#s&Ogs_GDMBgWPuD9FGFF3J_z z+i*yn0H$+bA{hzx!`1TAfUhs!FA|aTAm_l zsH}y+g(kOX1$KdN!2v!W)c{rC28?B#>{WJxOHl*-eyH*R@I~kYUGgWe11mCJ)MAa` zD>FsbsM((a{~qP{;;Y0?HTV#MD6B7+wLbg;{HGj|6>0^(2Jb?G_~=jr{s=xC)Wmnd zbVj6$xFoX0#0qz6S z4}tBPekJ&JIwp(8GWfUXBATt_e>3wD z5L_@vWT9FM{SUYoO->h;KMtM?d+JjPcoIw>613UUn8^rb?0<)d?1GkHEA(aP;zYz( z3w#biBMJlt*<~<&Oaw-C7kDEAq-plozy+vLzQ#Uq%)KI8t|b_Sfb^RwUDPEBVETFq zBs3D-Fi&Lmzn~yxoDIRNm?nWiHy>P%sCA|}LuBPzjojei8XW@wiNw*=!D$exUsySZuvueWJO{qor8*t_=1Yzp>)#vq=;|B zD=mL*Mf|@ih7X{Hq^k%SyvR>OqrMK{-&G6`>B29BXL$6M5#pQpm5F|34P3}iz5WdY C?A<#6 delta 6382 zcmZ9Q30M?Yw#RR^4YbnQps1y?bf9qoQQ8e~c|ir2D26DD3$9}dB*u+yw`dxsL0`$V zF>}o~FB46ijAqOiO>jDKU^E87q0PiN1WiVbGa5%@Be*0?5Ti-I|EaFh4)^=ItA6L4 zd+s@Rse7v~To)Rz3cJiY@2Xd0V|B)YBU6Uxgk5}%ZW>?O<#)Wa%SQZ?jG?=p6t|%F znM~|>)mo9smx^M?h^%=&?-9}05T|FXtnQ!Fc~V58;lEt~_4}vuB@qL12gWnz;w3(x zPrfHV@J=IquloD2ydDc<6}5I_gY&H*#)RhWP|3HT zc;Bz+!y6+a94*UTd;mGP=iTm?hj@G7re&s!$N1%|{qn92&Ns1pDAi5V_}Si(!d~9edx%iN zd-q9jOolUOt1;W_Gc)Eq6;>@Ehvo#ByPPF{ohS1uWGvg0d7ZA_FU?S9T_xiXaOp86 z`F>6Jn@mTWyv``b%4==iUCslj{@imu`}LNtF6T#TJJxpZYp9RP&aKy(Eo{b#F!*p~ zUX{O>GtYR3@w0uN5{&#_pFTn;59w>kqz+-W1*KaXnW=mds|`{n_HRLI6vFvY=kD;dohNu=^NwtUJb$f0W1(e=`re3W)HQtmmZ@& zWVUYJ8a-N|KG?xYTi#^zcgg?eHhN!qbc-O#R#v-~jIdpDBL>OXz*C`c$<<~%ap5!~C`KA8p!hSwrfDQk<1|%WU69ck@ecTv18UNXl1Eu!zReW<&|8mKf;h}`YnXwt{Jc43t%ndE z)}6sqOVum4SPVf7^Tkv5-Yl%_hh<*!=iL;^6QZU^8EM!mS6a-j4f=5_Eyi^doLekL zgKbPDRxaNi73(m{!E*j`d9g))HbcJOa6pfxI8uAMoppnvi zca0{HrB6gk=)W2)8CK~iu%u%UBV1K9_SV|A11{s=pkVTqb9dzjsYadsxpZfT-tMhD zZYhP_`l^TT)@-HJ-eskG}_msn9s#P2Aa=oIeGv|GYiJvQe-# z)I7q7nnuL?e0P1OF0UK9q^yj9j|Jwb<}~LRE*nTkIfR-FWxN*u8>b>jP|jo~UvB zLfmy>qWfdZL_yfZeepKK-@k{Zesd~+Y2Z^j;lBILfx84OmBHD8~ex=MRz9KyBfN=E~mbOzcSbyx(_>!oLTL1_Uqt(9lRr=2Ft4G z7!pO5G0@>s$mb4uN!Y;84>1q@2qI;#?dYzwP`dRLvqcyE0~K6OstfyZXbG3;+?qamyjW*>z`q0P$mhRK&euhs57`@d>*&#jNag;_U_NBbHen^N8gorpzIalPZtB4}mK`sP&-P-lJ{TEPHE%^ALX~HKxz`t5mBTwIta|R#l~>a-39!YQ7YHahIjSIEUOMQ12I_91^GEmElB)oD-l zuIi0w&X^>*yeE4ll({Aeva^ccN$VSO+rn5w>4$FP*cSxdmN@sOaf9?D_g*AVS#+#u zEs$|Gbn*6w*ddqy=<{LA7G2JVz~XcSV8l@YmlS^P>9Hn~0$%XT&hyCh*iglC0i?k{ z@#*PbhAX@XyzD2%IEfFR_G zQgZY?&PJahTTdOiDHdwz1m&rPr)g874L2zw&vuconv&RyEr$JWOCxqJI(d_C_n|5M z1>vgOGj*|A(`ZbcS~K<*YnG*ytYlY>qHJPi~mwJ#w0yE$u1DmO4u5b z`GwiB4!wPolrGVJe+AMlmNk;~Q%U|=I(J8s+X_<)^m_YT37b0^Vc)+Fqm|SKPE2|- z6*?sOj%F>|hX&YwD^)a^%DvQDh9!csKG|%LoZpz>DcDrLgGtUG`v;k}dHnGVmgEbP z{BKFwgr%}?xob{jR=X`+Qr<=+Ym-#7hBl&Psq80%F))D23)8G&{vsiNJs zun_x5k-?TLsauAGJ%bO-u?)%aq1mAIQHp_JDxc|-)FTGfr!z)#nolY_wVRjZJmYT5 zNeCX%h!u7J!jqpP;QofH>j*Dx8s-<3d!&L=h5M0VH|dsrq1^lBUGqiu zQoqtTk`Kl`GFR;T;hxF`MHchw(zqplK^Htqsgy3zm{uKQ9gmq#hbRS_9({{qe#}9t z2Sv>E>^pyeYx%MzI~{LfB~t?e3t|blQZqQegLP~?u5SkDXM*p zAg2#r8F1CXqm1iT@DD1#jzcv&2nQ4~1@I?a_XjX-#`^;JQ?OR3fv+^cmH0BQqhdt1 z9~n`D9pDRQk?lp75$pY3snjC-P{F}i+aQtkf`|-y!ytID$V9aQIfzaW*%nnl0{Y*B z*Q)yQog7Z<#IrhaK6oE`I0ycyhnG4!85D!>kMfTsnXCeLjC{f+;Kl&n2zCV6)2Zi1 zfW8c@70P%A_)x%*IbMh0eF$h$(GVQyRN+u3CI=tl!wiYZ{?E9f4>j5l9_wU(suO?y zOLq9a`lY~kr4u)I;>X?;1Yf0y>{n`qk1?i((O9i2 z{|@@QSj|)@pu^yBG)RRU9s|>3aS8GZ$K0(0w<5q4vWNaWcuD^!^>2YUV=B$UwI{<; zrB9BlCX0+lfGX$_0G*8RiA8Z31~wx=yk;o+zF>Nw`}G2&@0Yug(Rx)s44jPT6%`6N z1AKL!|8W!!|1-dQ(8H;ur>U|8f^KL4?@dYrE5N76i43P;g-gK0kiiI*%fYvy*M?vx zcqX2}RH(uI;0OOBvg4}#VeoR)KZ7eJcpTR_JWg(4$Q&d%1;Iy8i>yGc@ELeJBE*SX zsc;FrKVS@Rfaxm_6&iwO@Fy6uVXFNd@OjktsvLrM0XOEvAeD!LnSTf!ii0Q!*7Zfi z>JSVhgMbD`g6Z?pd{v(g4o$-1P45HySN)(l)C8b3;3|L(ZO`SDP72CuZ<0+6I91Sz8Sa5V{H+C vdu?ntdO#Q#VIBUFpM{2Q?{($vYh!~R6*6{&N3Dw!596dm-}$tHIF$1L?6p3} diff --git a/tool/run/boot_dir/nova b/tool/run/boot_dir/nova index 5c95b1ed25..93707a099d 100644 --- a/tool/run/boot_dir/nova +++ b/tool/run/boot_dir/nova @@ -1,3 +1,31 @@ +# +# Return Bender option that configures Bender's Intel HWP plugin +# +# \param --bender-intel-hwp-mode Run the Intel HWP plugin of Bender in the +# given mode. Valid argument values are +# "off", +# "performance", +# "balanced", and +# "power_saving" +# The argument value defaults to +# "performance". +# +proc bender_intel_hwp_mode_option { } { + + set opt [get_cmd_arg_first --bender-intel-hwp-mode "performance"] + if {$opt == "off"} { + return "intel_hwp_off" + } elseif {$opt == "performance"} { + return "intel_hwp_performance" + } elseif {$opt == "balanced"} { + return "intel_hwp_balanced" + } elseif {$opt == "power_saving"} { + return "intel_hwp_power_saving" + } else { + return "intel_hwp_performance" + } +} + proc binary_name_ld_lib_so { } { return "ld-nova.lib.so" } proc binary_name_core_a { } { return "core-nova.a" } proc binary_name_timer { } { return "nova_timer_drv" } @@ -65,9 +93,9 @@ proc run_boot_dir {binaries} { set options_bender "" # - # Enable Intel HWP unconditionally + # Apply Intel HWP mode # - append options_bender " intel_hwp" + append options_bender " [bender_intel_hwp_mode_option]" if {[apply_microcode]} { exec cp bin/micro.code [run_dir]/boot/ From 054990aafa8cf77b30f18ae2017d8cee09efd046 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 6 Sep 2022 13:13:15 +0200 Subject: [PATCH 223/354] nic_router: fix net session aliases The Interface class of the router is an abstraction for NIC client sessions, NIC server sessions, and Uplink sessions. Nonetheless, Interface generally used to use the packet stream types of the Nic namespace and it worked because the Uplink packet stream types are factually the same (the are typedef'd from the same base type templates with the same parameters). The initial intention of this issue was to remove dependency on the diverse packet stream stream types from Interface. However, this turned out to be more tricky than thought. The Interface class calls function templates on the packet stream types, making a generic virtual interface impossible. And moving the calling code to the session classes as well would produce a lot of redundancy. Therefore, this commit removes only the use of the Nic namespace in the interface.* files by typedef'ing the packet stream types from the generic Genode type templates with the same parameters as in Nic and Uplink. Fixes #4385 --- repos/os/src/server/nic_router/interface.h | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 9661c3f160..7a45753c3f 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -24,7 +24,6 @@ #include /* Genode includes */ -#include #include #include @@ -32,10 +31,22 @@ namespace Genode { class Xml_generator; } namespace Net { - using Packet_descriptor = ::Nic::Packet_descriptor; - using Packet_stream_sink = ::Nic::Packet_stream_sink< ::Nic::Session::Policy>; - using Packet_stream_source = ::Nic::Packet_stream_source< ::Nic::Session::Policy>; - using Domain_name = Genode::String<160>; + enum { PKT_STREAM_QUEUE_SIZE = 1024 }; + + /* + * In order to be compliant to both the Uplink and the Nic packet stream + * types, we use the more base types from the Genode namespace here and + * combine them with the same parameters as in the Uplink and Nic + * namespaces. I.e., we assume the Uplink and Nic packet stream types to + * be factually the same although they are logically independent from each + * other. + */ + using Packet_descriptor = Genode::Packet_descriptor; + using Packet_stream_policy = Genode::Packet_stream_policy; + using Packet_stream_sink = Genode::Packet_stream_sink; + using Packet_stream_source = Genode::Packet_stream_source; + + using Domain_name = Genode::String<160>; class Ipv4_config; class Forward_rule_tree; class Transport_rule_list; From b82d83e2716f78534686c31ec394e8f02d2a5a0d Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 7 Sep 2022 10:43:53 +0200 Subject: [PATCH 224/354] nic_router: handle bad DNS in DHCP ACK gracefully The DHCP client of the NIC router used to end up in an uncaught exception if an IP address in the DNS server option of a DHCP ACK was invalid. This commit makes the 'Dns_server' constructor (where the exception originated from) private and instead introduces a public lambda method 'construct' that calls one lambda argument on success and another on failure. This is also in line with the most recent changes to the 'find_by_*' methods of other classes in the NIC router and contributes to the goal of reducing expensive exception handling. Fixes #4465 --- repos/os/src/server/nic_router/dhcp_server.cc | 19 ++++++++------ repos/os/src/server/nic_router/dns.cc | 6 +---- repos/os/src/server/nic_router/dns.h | 16 ++++++++++-- repos/os/src/server/nic_router/ipv4_config.cc | 19 +++++++++++--- .../src/test/nic_router_dhcp/manager/main.cc | 26 ++++++++++++++----- 5 files changed, 61 insertions(+), 25 deletions(-) diff --git a/repos/os/src/server/nic_router/dhcp_server.cc b/repos/os/src/server/nic_router/dhcp_server.cc index 063e513613..94652e4467 100644 --- a/repos/os/src/server/nic_router/dhcp_server.cc +++ b/repos/os/src/server/nic_router/dhcp_server.cc @@ -34,14 +34,17 @@ Dhcp_server_base::Dhcp_server_base(Xml_node const &node, { node.for_each_sub_node("dns-server", [&] (Xml_node const &sub_node) { - try { - _dns_servers.insert_as_tail(*new (alloc) - Dns_server(sub_node.attribute_value("ip", Ipv4_address()))); - - } catch (Dns_server::Invalid) { - - _invalid(domain, "invalid DNS server entry"); - } + Dns_server::construct( + alloc, sub_node.attribute_value("ip", Ipv4_address { }), + [&] /* handle_success */ (Dns_server &server) + { + _dns_servers.insert_as_tail(server); + }, + [&] /* handle_failure */ () + { + _invalid(domain, "invalid DNS server entry"); + } + ); }); node.with_optional_sub_node("dns-domain", [&] (Xml_node const &sub_node) { xml_node_with_attribute(sub_node, "name", [&] (Xml_attribute const &attr) { diff --git a/repos/os/src/server/nic_router/dns.cc b/repos/os/src/server/nic_router/dns.cc index fae3892868..d4cbe71f83 100644 --- a/repos/os/src/server/nic_router/dns.cc +++ b/repos/os/src/server/nic_router/dns.cc @@ -30,11 +30,7 @@ using namespace Genode; Dns_server::Dns_server(Ipv4_address const &ip) : _ip { ip } -{ - if (!_ip.valid()) { - throw Invalid { }; - } -} +{ } bool Dns_server::equal_to(Dns_server const &server) const diff --git a/repos/os/src/server/nic_router/dns.h b/repos/os/src/server/nic_router/dns.h index 6d747e56a9..2f8fb6e2a8 100644 --- a/repos/os/src/server/nic_router/dns.h +++ b/repos/os/src/server/nic_router/dns.h @@ -43,11 +43,23 @@ class Net::Dns_server : private Genode::Noncopyable, Net::Ipv4_address const _ip; + Dns_server(Net::Ipv4_address const &ip); + public: - struct Invalid : Genode::Exception { }; + template - Dns_server(Net::Ipv4_address const &ip); + static void construct(Genode::Allocator &alloc, + Net::Ipv4_address const &ip, + HANDLE_SUCCESS_FN && handle_success, + HANDLE_FAILURE_FN && handle_failure) + { + if (!ip.valid()) { + handle_failure(); + } + handle_success(*new (alloc) Dns_server(ip)); + } bool equal_to(Dns_server const &server) const; diff --git a/repos/os/src/server/nic_router/ipv4_config.cc b/repos/os/src/server/nic_router/ipv4_config.cc index 22ef3ebf8e..8234e3ebff 100644 --- a/repos/os/src/server/nic_router/ipv4_config.cc +++ b/repos/os/src/server/nic_router/ipv4_config.cc @@ -48,8 +48,14 @@ Ipv4_config::Ipv4_config(Ipv4_config const &ip_config, _gateway { ip_config._gateway } { ip_config.for_each_dns_server([&] (Dns_server const &dns_server) { - _dns_servers.insert_as_tail( - *new (alloc) Dns_server(dns_server.ip())); + Dns_server::construct( + alloc, dns_server.ip(), + [&] /* handle_success */ (Dns_server &server) + { + _dns_servers.insert_as_tail(server); + }, + [&] /* handle_failure */ () { } + ); }); _dns_domain_name.set_to(ip_config.dns_domain_name()); } @@ -69,7 +75,14 @@ Ipv4_config::Ipv4_config(Dhcp_packet &dhcp_ack, dhcp_ack.option() }; dns_server.for_each_address([&] (Ipv4_address const &addr) { - _dns_servers.insert_as_tail(*new (alloc) Dns_server(addr)); + Dns_server::construct( + alloc, addr, + [&] /* handle_success */ (Dns_server &server) + { + _dns_servers.insert_as_tail(server); + }, + [&] /* handle_failure */ () { } + ); }); } catch (Dhcp_packet::Option_not_found) { } diff --git a/repos/os/src/test/nic_router_dhcp/manager/main.cc b/repos/os/src/test/nic_router_dhcp/manager/main.cc index d208f0d9b2..da36bce4f5 100644 --- a/repos/os/src/test/nic_router_dhcp/manager/main.cc +++ b/repos/os/src/test/nic_router_dhcp/manager/main.cc @@ -107,11 +107,17 @@ void Local::Main::_handle_router_state() domain_node.for_each_sub_node( "dns", [&] (Xml_node const &dns_node) - { - - dns_servers.insert_as_tail( - *new (_heap) Dns_server(dns_node.attribute_value("ip", Ipv4_address { }))); - }); + { + Dns_server::construct( + _heap, dns_node.attribute_value("ip", Ipv4_address { }), + [&] /* handle_success */ (Dns_server &server) + { + dns_servers.insert_as_tail(server); + }, + [&] /* handle_failure */ () { } + ); + } + ); /* * If the new list of DNS servers differs from the stored list, @@ -122,8 +128,14 @@ void Local::Main::_handle_router_state() _dns_servers.destroy_each(_heap); dns_servers.for_each([&] (Dns_server const &dns_server) { - _dns_servers.insert_as_tail( - *new (_heap) Dns_server(dns_server.ip())); + Dns_server::construct( + _heap, dns_server.ip(), + [&] /* handle_success */ (Dns_server &server) + { + _dns_servers.insert_as_tail(server); + }, + [&] /* handle_failure */ () { } + ); }); _router_config_outdated = true; } From 80a2f7224e8811aa1985f147d4740a89e6c833bc Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 8 Sep 2022 14:37:30 +0200 Subject: [PATCH 225/354] gems: src/lib/trace_recorder -> src/trace_recorder The target.mk files for building the trace policies are no longer reachable under src/lib/ by the build system. genodelabs/genode#4599 --- repos/gems/recipes/src/trace_recorder_policy/content.mk | 2 +- repos/gems/src/{lib => }/trace_recorder/policy/ctf0/policy.cc | 0 repos/gems/src/{lib => }/trace_recorder/policy/ctf0/target.mk | 0 .../src/{lib => }/trace_recorder/policy/ctf0_pcapng/policy.cc | 0 .../src/{lib => }/trace_recorder/policy/ctf0_pcapng/target.mk | 0 repos/gems/src/{lib => }/trace_recorder/policy/pcapng/policy.cc | 0 repos/gems/src/{lib => }/trace_recorder/policy/pcapng/target.mk | 0 repos/gems/src/{lib => }/trace_recorder/policy/policy.inc | 2 +- repos/gems/src/{lib => }/trace_recorder/policy/policy.ld | 0 repos/gems/src/{lib => }/trace_recorder/policy/table.cc | 0 10 files changed, 2 insertions(+), 2 deletions(-) rename repos/gems/src/{lib => }/trace_recorder/policy/ctf0/policy.cc (100%) rename repos/gems/src/{lib => }/trace_recorder/policy/ctf0/target.mk (100%) rename repos/gems/src/{lib => }/trace_recorder/policy/ctf0_pcapng/policy.cc (100%) rename repos/gems/src/{lib => }/trace_recorder/policy/ctf0_pcapng/target.mk (100%) rename repos/gems/src/{lib => }/trace_recorder/policy/pcapng/policy.cc (100%) rename repos/gems/src/{lib => }/trace_recorder/policy/pcapng/target.mk (100%) rename repos/gems/src/{lib => }/trace_recorder/policy/policy.inc (94%) rename repos/gems/src/{lib => }/trace_recorder/policy/policy.ld (100%) rename repos/gems/src/{lib => }/trace_recorder/policy/table.cc (100%) diff --git a/repos/gems/recipes/src/trace_recorder_policy/content.mk b/repos/gems/recipes/src/trace_recorder_policy/content.mk index efd6f92d7f..9ada8edb67 100644 --- a/repos/gems/recipes/src/trace_recorder_policy/content.mk +++ b/repos/gems/recipes/src/trace_recorder_policy/content.mk @@ -1,2 +1,2 @@ -SRC_DIR = src/lib/trace_recorder/policy +SRC_DIR = src/trace_recorder/policy include $(GENODE_DIR)/repos/base/recipes/src/content.inc diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0/policy.cc b/repos/gems/src/trace_recorder/policy/ctf0/policy.cc similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/ctf0/policy.cc rename to repos/gems/src/trace_recorder/policy/ctf0/policy.cc diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0/target.mk b/repos/gems/src/trace_recorder/policy/ctf0/target.mk similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/ctf0/target.mk rename to repos/gems/src/trace_recorder/policy/ctf0/target.mk diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/policy.cc b/repos/gems/src/trace_recorder/policy/ctf0_pcapng/policy.cc similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/policy.cc rename to repos/gems/src/trace_recorder/policy/ctf0_pcapng/policy.cc diff --git a/repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk b/repos/gems/src/trace_recorder/policy/ctf0_pcapng/target.mk similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/ctf0_pcapng/target.mk rename to repos/gems/src/trace_recorder/policy/ctf0_pcapng/target.mk diff --git a/repos/gems/src/lib/trace_recorder/policy/pcapng/policy.cc b/repos/gems/src/trace_recorder/policy/pcapng/policy.cc similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/pcapng/policy.cc rename to repos/gems/src/trace_recorder/policy/pcapng/policy.cc diff --git a/repos/gems/src/lib/trace_recorder/policy/pcapng/target.mk b/repos/gems/src/trace_recorder/policy/pcapng/target.mk similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/pcapng/target.mk rename to repos/gems/src/trace_recorder/policy/pcapng/target.mk diff --git a/repos/gems/src/lib/trace_recorder/policy/policy.inc b/repos/gems/src/trace_recorder/policy/policy.inc similarity index 94% rename from repos/gems/src/lib/trace_recorder/policy/policy.inc rename to repos/gems/src/trace_recorder/policy/policy.inc index c26be00471..7c57d6f54e 100644 --- a/repos/gems/src/lib/trace_recorder/policy/policy.inc +++ b/repos/gems/src/trace_recorder/policy/policy.inc @@ -38,4 +38,4 @@ clean_policy: $(VERBOSE)$(RM) ../*.o ../*.d *.o *.d $(TARGET_POLICY).elf \ $(BUILD_BASE_DIR)/bin/$(TARGET_POLICY) -vpath table.cc $(REP_DIR)/src/lib/trace_recorder/policy +vpath table.cc $(REP_DIR)/src/trace_recorder/policy diff --git a/repos/gems/src/lib/trace_recorder/policy/policy.ld b/repos/gems/src/trace_recorder/policy/policy.ld similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/policy.ld rename to repos/gems/src/trace_recorder/policy/policy.ld diff --git a/repos/gems/src/lib/trace_recorder/policy/table.cc b/repos/gems/src/trace_recorder/policy/table.cc similarity index 100% rename from repos/gems/src/lib/trace_recorder/policy/table.cc rename to repos/gems/src/trace_recorder/policy/table.cc From c8b4b83b71caefc65279cf57733e9b1d9986d4ec Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 12 Sep 2022 16:55:18 +0200 Subject: [PATCH 226/354] base-linux: inhibit tracing in region-map attach/detach Tracing must be inhibited in attach/detach as RPC trace points may trigger attachment of trace dataspaces, which would result in nested mutex acquisition. This prevents errors in test-trace_logger like follows. [init -> depot_autopilot] 0.140 [init -> dynamic_rom] Error: deadlock ahead, mutex=0x500e6f00, return ip=0x50053ed7 Fixes #4607 --- .../src/lib/base/region_map_mmap.cc | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/repos/base-linux/src/lib/base/region_map_mmap.cc b/repos/base-linux/src/lib/base/region_map_mmap.cc index 01946e4204..46b34ae66b 100644 --- a/repos/base-linux/src/lib/base/region_map_mmap.cc +++ b/repos/base-linux/src/lib/base/region_map_mmap.cc @@ -172,6 +172,24 @@ void Region_map_mmap::_add_to_rmap(Region const ®ion) } +/* + * Tracing must be inhibited in attach/detach as RPC trace points may trigger + * attachment of trace dataspaces, which would result in nested mutex + * acquisition. + */ + +namespace Genode { extern bool inhibit_tracing; } + +struct Inhibit_tracing_guard +{ + bool old_value = inhibit_tracing; + + Inhibit_tracing_guard() { inhibit_tracing = true; } + + ~Inhibit_tracing_guard() { inhibit_tracing = old_value; } +}; + + Region_map::Local_addr Region_map_mmap::attach(Dataspace_capability ds, size_t size, off_t offset, bool use_local_addr, @@ -180,6 +198,8 @@ Region_map::Local_addr Region_map_mmap::attach(Dataspace_capability ds, { Mutex::Guard mutex_guard(mutex()); + Inhibit_tracing_guard it_guard { }; + /* only support attach_at for sub RM sessions */ if (_sub_rm && !use_local_addr) { error("Region_map_mmap::attach: attaching w/o local addr not supported"); @@ -325,6 +345,8 @@ void Region_map_mmap::detach(Region_map::Local_addr local_addr) { Mutex::Guard mutex_guard(mutex()); + Inhibit_tracing_guard it_guard { }; + /* * Cases * From 96191fe577a17c48b33a67ea890a2eedf4580901 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 12 Sep 2022 16:25:23 +0200 Subject: [PATCH 227/354] gems: reanimate depot_deploy.run --- repos/gems/run/depot_deploy.run | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/repos/gems/run/depot_deploy.run b/repos/gems/run/depot_deploy.run index c006561d31..d8647b1335 100644 --- a/repos/gems/run/depot_deploy.run +++ b/repos/gems/run/depot_deploy.run @@ -13,7 +13,9 @@ import_from_depot [depot_user]/src/[base_src] \ [depot_user]/raw/ttf-bitstream-vera-minimal create_tar_from_depot_binaries [run_dir]/genode/depot.tar \ - [depot_user]/pkg/sculpt-installation \ + [depot_user]/pkg/chroot \ + [depot_user]/pkg/system_shell \ + [depot_user]/pkg/fonts_fs \ [depot_user]/pkg/wm \ [depot_user]/pkg/nano3d \ [depot_user]/pkg/window_layouter \ @@ -86,7 +88,7 @@ install_config { - + @@ -270,7 +272,7 @@ install_config { build { app/depot_query app/depot_deploy } -copy_file [genode_dir]/repos/gems/run/sculpt/fonts.config [run_dir]/genode/ +copy_file [genode_dir]/repos/gems/sculpt/fonts/default [run_dir]/genode/fonts.config copy_file [genode_dir]/repos/ports/recipes/raw/system_shell/system_shell.config [run_dir]/genode/ # From 5b4b243e3ddedfd9fd05ed5ee69587a528b4af8a Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 8 Sep 2022 09:46:30 +0200 Subject: [PATCH 228/354] sculpt.run: distinguish DEPOT=list from DEPOT=omit This patch splits the former DEPOT=omit option into two variants. The new 'list' option behaves like the former 'omit' option, skipping the creation of the tar archive from the depot content referenced by the deploy configuration but showing a list of depot archives that need to be published for the deployment. When specifying 'omit' in th new version, the local depot is not queried for the packages referenced in the deploy configuration. So the deployment can refer to packaged hosted only remotely. Fixes #4605 --- repos/gems/run/sculpt.run | 51 ++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index 24165b456e..4f534f752d 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -803,12 +803,40 @@ proc pkg_archive_paths { values } { } +## +# Return which kind of depot archive is wanted: 'tar', 'omit', or 'list' +# +# tar - includes the depot content referenced by the deploy configuration as +# tar archive named 'depot.tar' +# +# omit - skips the evaluation of the deploy configuration +# +# list - outputs the list of packages needed for the deployment, which can +# taken as input for manually publishing those packages +# +proc depot_archive { } { + + global ::env + + set archive "tar" + if {[info exists ::env(DEPOT)]} { + set archive "$::env(DEPOT)" } + + if {$archive != "omit" && $archive != "tar" && $archive != "list"} { + puts stderr "Error: invalid value of DEPOT=$archive variable!" } + + return $archive +} + + # # Trigger the creation / updating of referenced depot content # # This step may update pkg versions if '--depot-auto-update' is enabled. # -_collect_from_depot [pkg_archive_paths [referenced_pkg_values]] +if {[depot_archive] == "tar" || [depot_archive] == "list"} { + _collect_from_depot [pkg_archive_paths [referenced_pkg_values]] +} # @@ -866,30 +894,13 @@ exec sed -i "/config/s/arch=\"\"/arch=\"[depot_spec]\"/" [initial_config_file de ## Depot content integrated in the Sculpt image ## -## -# Return which kind of depot archive is wanted 'tar' or 'omit' -# -proc depot_archive { } { - - global ::env - - set archive "tar" - if {[info exists ::env(DEPOT)]} { - set archive "$::env(DEPOT)" } - - if {$archive != "omit" && $archive != "tar"} { - puts stderr "Error: invalid value of DEPOT=$archive variable!" } - - return $archive -} - proc create_depot_archive { } { - global ::env if {[depot_archive] == "tar"} { create_tar_from_depot_binaries [run_dir]/genode/depot.tar \ {*}[pkg_archive_paths [referenced_pkg_values]] - } else { + + } elseif {[depot_archive] == "list"} { puts "Do not forget to publish:" puts [pkg_archive_paths [referenced_pkg_values]] } From cc9368ccb45e7f9c972898d00c89bb7b5daa3b6a Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 12 Sep 2022 14:38:23 +0200 Subject: [PATCH 229/354] os: add File_system_session::num_entries RPC This patch splits the querying of the number of directory entries from the directory's 'status' information. Subsuming the number of directory entries as part of the status makes 'stat' calls too costly for some file systems that need to read a directory for determining the number of entries. So when stat'ing the entries of one directory that contains sub directories, all entries of each sub directory are visited. Thanks to Cedric Degea for pointing out this performance bottleneck! With this change, the 'status' function returns a 'Status::size' value of 0 when called for a directory handle. Fixes #4603 --- repos/os/include/file_system_session/client.h | 5 +++++ .../file_system_session/file_system_session.h | 15 ++++++++++++--- repos/os/src/lib/vfs/fs_file_system.h | 8 +++----- repos/os/src/server/lx_fs/directory.h | 9 +++++++-- repos/os/src/server/lx_fs/main.cc | 13 +++++++++++++ repos/os/src/server/lx_fs/node.h | 2 ++ repos/os/src/server/vfs/main.cc | 8 ++++++-- 7 files changed, 48 insertions(+), 12 deletions(-) diff --git a/repos/os/include/file_system_session/client.h b/repos/os/include/file_system_session/client.h index 01164eee91..f9d94003a8 100644 --- a/repos/os/include/file_system_session/client.h +++ b/repos/os/include/file_system_session/client.h @@ -112,6 +112,11 @@ class File_system::Session_client : public Genode::Rpc_client { call(from_dir, from_name, to_dir, to_name); } + + unsigned num_entries(Dir_handle dir) override + { + return call(dir); + } }; #endif /* _INCLUDE__FILE_SYSTEM_SESSION__CLIENT_H_ */ diff --git a/repos/os/include/file_system_session/file_system_session.h b/repos/os/include/file_system_session/file_system_session.h index c744a53cc8..7e7fca9de5 100644 --- a/repos/os/include/file_system_session/file_system_session.h +++ b/repos/os/include/file_system_session/file_system_session.h @@ -474,6 +474,13 @@ struct File_system::Session : public Genode::Session virtual void move(Dir_handle, Name const &from, Dir_handle, Name const &to) = 0; + /** + * Return number of directory entries + * + * \throw Invalid_handle the directory handle is invalid + */ + virtual unsigned num_entries(Dir_handle) = 0; + /******************* ** RPC interface ** @@ -525,12 +532,14 @@ struct File_system::Session : public Genode::Session GENODE_TYPE_LIST(Invalid_handle, Invalid_name, Lookup_failed, Permission_denied, Unavailable), Dir_handle, Name const &, Dir_handle, Name const &); + GENODE_RPC_THROW(Rpc_num_entries, unsigned, num_entries, + GENODE_TYPE_LIST(Invalid_handle), + Dir_handle); GENODE_RPC_INTERFACE(Rpc_tx_cap, - Rpc_file, Rpc_symlink, Rpc_dir, - Rpc_node, Rpc_watch, + Rpc_file, Rpc_symlink, Rpc_dir, Rpc_node, Rpc_watch, Rpc_close, Rpc_status, Rpc_control, Rpc_unlink, - Rpc_truncate, Rpc_move); + Rpc_truncate, Rpc_move, Rpc_num_entries); }; #endif /* _INCLUDE__FILE_SYSTEM_SESSION__FILE_SYSTEM_SESSION_H_ */ diff --git a/repos/os/src/lib/vfs/fs_file_system.h b/repos/os/src/lib/vfs/fs_file_system.h index 5dfdb687e9..8009ed71ae 100644 --- a/repos/os/src/lib/vfs/fs_file_system.h +++ b/repos/os/src/lib/vfs/fs_file_system.h @@ -754,13 +754,11 @@ class Vfs::Fs_file_system : public File_system path = "/"; try { - ::File_system::Node_handle node = _fs.node(path); - Fs_handle_guard node_guard(*this, _fs, node, + ::File_system::Dir_handle dir = _fs.dir(path, false); + Fs_handle_guard node_guard(*this, _fs, dir, _handle_space, _fs); - ::File_system::Status status = _fs.status(node); - - return status.size / sizeof(::File_system::Directory_entry); + return _fs.num_entries(dir); } catch (...) { } return 0; diff --git a/repos/os/src/server/lx_fs/directory.h b/repos/os/src/server/lx_fs/directory.h index d98bf7d9fc..adc019fbe1 100644 --- a/repos/os/src/server/lx_fs/directory.h +++ b/repos/os/src/server/lx_fs/directory.h @@ -85,7 +85,7 @@ class Lx_fs::Directory : public Node return fd; } - size_t _num_entries() const + unsigned _num_entries() const { unsigned num = 0; @@ -250,7 +250,7 @@ class Lx_fs::Directory : public Node st.st_mtime = 0; return { - .size = _num_entries() * sizeof(File_system::Directory_entry), + .size = 0, .type = Node_type::DIRECTORY, .rwx = { .readable = (st.st_mode & S_IRUSR) != 0, .writeable = (st.st_mode & S_IWUSR) != 0, @@ -260,6 +260,11 @@ class Lx_fs::Directory : public Node }; } + unsigned num_entries() override + { + return _num_entries(); + } + Path path() const override { return _path; diff --git a/repos/os/src/server/lx_fs/main.cc b/repos/os/src/server/lx_fs/main.cc index e93e98550e..2d62bdfa00 100644 --- a/repos/os/src/server/lx_fs/main.cc +++ b/repos/os/src/server/lx_fs/main.cc @@ -441,6 +441,19 @@ class Lx_fs::Session_component : private Session_resources, } } + unsigned num_entries(Dir_handle dir_handle) override + { + auto fn = [&] (Open_node &open_node) { + return open_node.node().num_entries(); + }; + + try { + return _open_node_registry.apply(dir_handle, fn); + } catch (Id_space::Unknown_id const &) { + throw Invalid_handle(); + } + } + void control(Node_handle, Control) override { Genode::error(__func__, " not implemented"); diff --git a/repos/os/src/server/lx_fs/node.h b/repos/os/src/server/lx_fs/node.h index bd8d84d5f0..0322c353c6 100644 --- a/repos/os/src/server/lx_fs/node.h +++ b/repos/os/src/server/lx_fs/node.h @@ -74,6 +74,8 @@ class Lx_fs::Node : public File_system::Node_base virtual Status status() = 0; + virtual unsigned num_entries() { return 0; } + /* * File functionality */ diff --git a/repos/os/src/server/vfs/main.cc b/repos/os/src/server/vfs/main.cc index 15a7d2913a..623bf7a588 100644 --- a/repos/os/src/server/vfs/main.cc +++ b/repos/os/src/server/vfs/main.cc @@ -660,8 +660,6 @@ class Vfs_server::Session_component : private Session_resources, { switch (vfs_stat.type) { case Vfs::Node_type::DIRECTORY: - return _vfs.num_dirent(node.path()) * sizeof(Directory_entry); - case Vfs::Node_type::SYMLINK: return 0ULL; @@ -688,6 +686,12 @@ class Vfs_server::Session_component : private Session_resources, return fs_stat; } + unsigned num_entries(Dir_handle dir_handle) override + { + return _apply(dir_handle, [&] (Directory &dir) { + return (unsigned)_vfs.num_dirent(dir.path()); }); + } + void unlink(Dir_handle dir_handle, Name const &name) override { if (!_writeable) throw Permission_denied(); From 82f96668fa1568e4cd31f87ddf03dac38a16a7ca Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 13 Sep 2022 11:20:39 +0200 Subject: [PATCH 230/354] Increase cpu_burner RAM quota in test-trace_logger Now, the test also succeeds on sel4. --- repos/os/recipes/pkg/test-trace_logger/runtime | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/os/recipes/pkg/test-trace_logger/runtime b/repos/os/recipes/pkg/test-trace_logger/runtime index ef758a2171..60bf180d25 100644 --- a/repos/os/recipes/pkg/test-trace_logger/runtime +++ b/repos/os/recipes/pkg/test-trace_logger/runtime @@ -105,7 +105,7 @@ - + @@ -115,7 +115,7 @@ - + From a573d3a3323a720cee0366a91bc4854722630332 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Tue, 13 Sep 2022 11:41:06 +0200 Subject: [PATCH 231/354] Adapt tested log pattern in vbox5_genode_usb_hid_raw --- repos/ports/run/vbox5_genode_usb_hid_raw.run | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/repos/ports/run/vbox5_genode_usb_hid_raw.run b/repos/ports/run/vbox5_genode_usb_hid_raw.run index a7ffb3b3de..0ad801b3e8 100644 --- a/repos/ports/run/vbox5_genode_usb_hid_raw.run +++ b/repos/ports/run/vbox5_genode_usb_hid_raw.run @@ -322,10 +322,10 @@ compare_output_to { [init -> log_terminal] [init -> event_dump] Input event #4 REL_MOTION +0+1 key count: 1 [init -> log_terminal] [init -> event_dump] Input event #5 RELEASE BTN_LEFT key count: 0 [init -> usb_drv] USB disconnect, device -[init -> log_terminal] [init -> usb_drv] USB disconnect, device +[init -> log_terminal] [init -> usb_drv -> usb_drv] USB disconnect, device [init -> usb_drv] new full-speed USB device -[init -> virtualbox] Attach USB device (vendor=3eb, product=204d) -[init -> log_terminal] [init -> usb_drv] new full-speed USB device +[init -> virtualbox] Attach USB device usb-2-8 +[init -> log_terminal] [init -> usb_drv -> usb_drv] new full-speed USB device [init -> log_terminal] [init -> usb_hid_drv] input: USB HID v1.11 Keyboard [HID 03eb:204d] [init -> log_terminal] [init -> usb_hid_drv] input: USB HID v1.11 Mouse [HID 03eb:204d] [init -> log_terminal] [init -> event_dump] Input event #6 PRESS KEY_X 65534 key count: 1 From aff1db15433dd107ff6ab9fb3be094f9e9d9ab42 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 7 Sep 2022 14:44:39 +0200 Subject: [PATCH 232/354] nic_router: generate reports asynchronously The NIC router used to generate reports triggered by IP config changes or link state changes synchonously, i.e., inline with the activation context that caused the change. This has two disadvantages. First, it can lead to an excessive number of report updates in situations with quick bursts of triggering changes. In such situations it is preferable to collect the changes and reflect them with only one final report update. Second, synchronous reporting may happen while the router is in a state that leads to an incorrect report (e.g. during reconfiguration). To prevent this from happening, the router so far explicitely switched off reporting when entering incoherent states and back on when leaving them. However, this solution is error-prone as the exclusion windows must be maintained manually. Both issues can be solved by not directly generating a report when necessary but instead submitting a signal and letting the signal handler do the work in a dedicated activation context. Ref #4462 --- .../os/src/server/nic_router/configuration.cc | 38 +++++---------- .../os/src/server/nic_router/configuration.h | 23 ++++------ repos/os/src/server/nic_router/main.cc | 20 +++++--- repos/os/src/server/nic_router/report.cc | 46 ++++++++++--------- repos/os/src/server/nic_router/report.h | 20 ++++---- 5 files changed, 70 insertions(+), 77 deletions(-) diff --git a/repos/os/src/server/nic_router/configuration.cc b/repos/os/src/server/nic_router/configuration.cc index 388930f922..020782a2cc 100644 --- a/repos/os/src/server/nic_router/configuration.cc +++ b/repos/os/src/server/nic_router/configuration.cc @@ -103,13 +103,14 @@ Configuration::_init_icmp_type_3_code_on_fragm_ipv4(Xml_node const &node) const } -Configuration::Configuration(Env &env, - Xml_node const node, - Allocator &alloc, - Cached_timer &timer, - Configuration &old_config, - Quota const &shared_quota, - Interface_list &interfaces) +Configuration::Configuration(Env &env, + Xml_node const node, + Allocator &alloc, + Signal_context_capability const &report_signal_cap, + Cached_timer &timer, + Configuration &old_config, + Quota const &shared_quota, + Interface_list &interfaces) : _alloc { alloc }, _max_packets_per_signal { node.attribute_value("max_packets_per_signal", (unsigned long)150) }, @@ -193,8 +194,9 @@ Configuration::Configuration(Env &env, } /* create report generator */ _report = *new (_alloc) - Report(_verbose, report_node, timer, _domains, shared_quota, - env.pd(), _reporter()); + Report { + _verbose, report_node, timer, _domains, shared_quota, env.pd(), + _reporter(), report_signal_cap }; } catch (Genode::Xml_node::Nonexistent_sub_node) { } @@ -224,24 +226,6 @@ Configuration::Configuration(Env &env, } -void Configuration::stop_reporting() -{ - if (!_reporter.valid()) { - return; - } - _reporter().enabled(false); -} - - -void Configuration::start_reporting() -{ - if (!_reporter.valid()) { - return; - } - _reporter().enabled(true); -} - - Configuration::~Configuration() { /* destroy NIC clients */ diff --git a/repos/os/src/server/nic_router/configuration.h b/repos/os/src/server/nic_router/configuration.h index 2f157d8bbe..2f80214cbf 100644 --- a/repos/os/src/server/nic_router/configuration.h +++ b/repos/os/src/server/nic_router/configuration.h @@ -66,23 +66,20 @@ class Net::Configuration public: - Configuration(Genode::Xml_node const node, - Genode::Allocator &alloc); + Configuration(Genode::Xml_node const node, + Genode::Allocator &alloc); - Configuration(Genode::Env &env, - Genode::Xml_node const node, - Genode::Allocator &alloc, - Cached_timer &timer, - Configuration &old_config, - Quota const &shared_quota, - Interface_list &interfaces); + Configuration(Genode::Env &env, + Genode::Xml_node const node, + Genode::Allocator &alloc, + Genode::Signal_context_capability const &report_signal_cap, + Cached_timer &timer, + Configuration &old_config, + Quota const &shared_quota, + Interface_list &interfaces); ~Configuration(); - void stop_reporting(); - - void start_reporting(); - /*************** ** Accessors ** diff --git a/repos/os/src/server/nic_router/main.cc b/repos/os/src/server/nic_router/main.cc index c2fdfa637e..179fd75567 100644 --- a/repos/os/src/server/nic_router/main.cc +++ b/repos/os/src/server/nic_router/main.cc @@ -38,12 +38,15 @@ class Net::Main Interface_list _interfaces { }; Cached_timer _timer { _env }; Genode::Heap _heap { &_env.ram(), &_env.rm() }; + Signal_handler
_report_handler { _env.ep(), *this, &Main::_handle_report }; Genode::Attached_rom_dataspace _config_rom { _env, "config" }; Reference _config { *new (_heap) Configuration { _config_rom.xml(), _heap } }; Signal_handler
_config_handler { _env.ep(), *this, &Main::_handle_config }; Nic_session_root _nic_session_root { _env, _timer, _heap, _config(), _shared_quota, _interfaces }; Uplink_session_root _uplink_session_root { _env, _timer, _heap, _config(), _shared_quota, _interfaces }; + void _handle_report(); + void _handle_config(); template @@ -65,6 +68,14 @@ class Net::Main }; +void Main::_handle_report() +{ + try { _config().report().generate(); } + catch (Pointer::Invalid) { } + +} + + Net::Main::Main(Env &env) : _env(env) { _config_rom.sigh(_config_handler); @@ -76,13 +87,12 @@ Net::Main::Main(Env &env) : _env(env) void Net::Main::_handle_config() { - _config().stop_reporting(); - _config_rom.update(); Configuration &old_config = _config(); Configuration &new_config = *new (_heap) - Configuration(_env, _config_rom.xml(), _heap, _timer, old_config, - _shared_quota, _interfaces); + Configuration { + _env, _config_rom.xml(), _heap, _report_handler, _timer, + old_config, _shared_quota, _interfaces }; _nic_session_root.handle_config(new_config); _uplink_session_root.handle_config(new_config); @@ -92,8 +102,6 @@ void Net::Main::_handle_config() _for_each_interface([&] (Interface &intf) { intf.handle_config_3(); }); destroy(_heap, &old_config); - - _config().start_reporting(); } diff --git a/repos/os/src/server/nic_router/report.cc b/repos/os/src/server/nic_router/report.cc index 22a9490e77..0e51330f5d 100644 --- a/repos/os/src/server/nic_router/report.cc +++ b/repos/os/src/server/nic_router/report.cc @@ -20,13 +20,14 @@ using namespace Net; using namespace Genode; -Net::Report::Report(bool const &verbose, - Xml_node const node, - Cached_timer &timer, - Domain_tree &domains, - Quota const &shared_quota, - Pd_session &pd, - Reporter &reporter) +Net::Report::Report(bool const &verbose, + Xml_node const node, + Cached_timer &timer, + Domain_tree &domains, + Quota const &shared_quota, + Pd_session &pd, + Reporter &reporter, + Signal_context_capability const &signal_cap) : _verbose { verbose }, _config { node.attribute_value("config", true) }, @@ -42,15 +43,15 @@ Net::Report::Report(bool const &verbose, _reporter { reporter }, _domains { domains }, _timeout { timer, *this, &Report::_handle_report_timeout, - read_sec_attr(node, "interval_sec", 5) } -{ } - - -void Net::Report::_report() + read_sec_attr(node, "interval_sec", 5) }, + _signal_transmitter { signal_cap } +{ + _reporter.enabled(true); +} + + +void Net::Report::generate() { - if (!_reporter.enabled()) { - return; - } try { Reporter::Xml_generator xml(_reporter, [&] () { if (_quota) { @@ -79,22 +80,23 @@ void Net::Report::_report() void Net::Report::_handle_report_timeout(Duration) { - _report(); + generate(); } void Net::Report::handle_config() { if (!_config_triggers) { - return; } - - _report(); + return; + } + _signal_transmitter.submit(); } + void Net::Report::handle_interface_link_state() { if (!_link_state_triggers) { - return; } - - _report(); + return; + } + _signal_transmitter.submit(); } diff --git a/repos/os/src/server/nic_router/report.h b/repos/os/src/server/nic_router/report.h index b205a57408..16bb3eba8b 100644 --- a/repos/os/src/server/nic_router/report.h +++ b/repos/os/src/server/nic_router/report.h @@ -59,27 +59,29 @@ class Net::Report Genode::Reporter &_reporter; Domain_tree &_domains; Timer::Periodic_timeout _timeout; + Genode::Signal_transmitter _signal_transmitter; void _handle_report_timeout(Genode::Duration); - void _report(); - public: struct Empty : Genode::Exception { }; - Report(bool const &verbose, - Genode::Xml_node const node, - Cached_timer &timer, - Domain_tree &domains, - Quota const &shared_quota, - Genode::Pd_session &pd, - Genode::Reporter &reporter); + Report(bool const &verbose, + Genode::Xml_node const node, + Cached_timer &timer, + Domain_tree &domains, + Quota const &shared_quota, + Genode::Pd_session &pd, + Genode::Reporter &reporter, + Genode::Signal_context_capability const &signal_cap); void handle_config(); void handle_interface_link_state(); + void generate(); + /*************** ** Accessors ** From 79cc9af2121442a7933cebe749b5a8f05306c679 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 7 Sep 2022 20:24:10 +0200 Subject: [PATCH 233/354] nic_router: intf. con/destruct reports link state Creating and destructing an interface was not considered a change of its real link state as defined in the description of the config attribute in the router's README. In case of Uplink sessions this is obviously a problem as they communicate their real link state through session lifetime. But also in case of NIC sessions it's a possible to create an interface that is immediately "up" after creation or destruct an interface without its link state going "down" beforehand. Taking into account also the practical application of the attribute, reporting only on destruction and construction of interfaces that are "up" seems shorthanded. This is because a report-receiver most likely needs to be able to synchronize the lifetime of the objects that keep track of the link states with the lifetime of the corresponding sessions. That said, with this commit, the router triggers a report update on each session construction/destruction when is set. Fixes #4462 --- repos/os/src/server/nic_router/README | 8 ++++---- repos/os/src/server/nic_router/interface.cc | 4 ++++ repos/os/src/server/nic_router/uplink_session_root.cc | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/repos/os/src/server/nic_router/README b/repos/os/src/server/nic_router/README index 3f37f74e38..fd28c047ef 100644 --- a/repos/os/src/server/nic_router/README +++ b/repos/os/src/server/nic_router/README @@ -720,10 +720,10 @@ information on that, refer to [Behavior regarding the NIC-session link state]. 'link_state_triggers' -A boolean value that controls whether to enforce sending a report each time the -state that is controlled through the 'link_state' attribute of the tag -changes. I.e., whenever the real link state of any interface at the router has -changed. +A boolean value that controls whether to enforce sending a report whenever the +real link state (see description of the 'link_state' attribute) of any +interface at the router has changed. Note that whenever an interface is created +or destroyed this is considered a change of its real link state. 'interval_sec' diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 25b74247af..8d0958fddd 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -1923,6 +1923,8 @@ Interface::Interface(Genode::Entrypoint &ep, _interfaces { interfaces } { _interfaces.insert(this); + try { _config().report().handle_interface_link_state(); } + catch (Pointer::Invalid) { } } @@ -2375,6 +2377,8 @@ void Interface::cancel_arp_waiting(Arp_waiter &waiter) Interface::~Interface() { + try { _config().report().handle_interface_link_state(); } + catch (Pointer::Invalid) { } _detach_from_domain(); _interfaces.remove(this); } diff --git a/repos/os/src/server/nic_router/uplink_session_root.cc b/repos/os/src/server/nic_router/uplink_session_root.cc index a0f4f75085..28ee10e798 100644 --- a/repos/os/src/server/nic_router/uplink_session_root.cc +++ b/repos/os/src/server/nic_router/uplink_session_root.cc @@ -106,8 +106,8 @@ Net::Uplink_session_component::Uplink_session_component(Session_env _rx.sigh_ack_avail (_interface.pkt_stream_signal_handler()); /* - * We do not install ready_to_submit because submission is only triggered by - * incoming packets (and dropped if the submit queue is full). + * We do not install ready_to_submit because submission is only triggered + * by incoming packets (and dropped if the submit queue is full). * The ack queue should never be full otherwise we'll be leaking packets. */ } From 907641f6ea92cae9e434555d972c9241d09ab5e5 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Tue, 13 Sep 2022 12:15:55 +0200 Subject: [PATCH 234/354] lx_fs: improve safety when using dir handles This patch consolidates the repetitive error handling across the RPC functions, which take node handles or directory handles as arguments. During this change, I noticed that directory handles - which are values provided by the client - were not checked for their type before being used. A misbehaving client may open a file, manually construct a directory handle using the number of the file handle, and invoke a directory operation at lx_fs, which would then wrongly access a file node as directory node. This patch solves this issue by introducing two distinct methods _with_open_node and _with_open_dir_node, which perform the respective safety checks. Fixes #4608 --- repos/os/src/server/lx_fs/directory.h | 2 + repos/os/src/server/lx_fs/main.cc | 134 +++++++++++--------------- repos/os/src/server/lx_fs/node.h | 2 + repos/os/src/server/lx_fs/open_node.h | 3 +- 4 files changed, 64 insertions(+), 77 deletions(-) diff --git a/repos/os/src/server/lx_fs/directory.h b/repos/os/src/server/lx_fs/directory.h index adc019fbe1..acfed71e5b 100644 --- a/repos/os/src/server/lx_fs/directory.h +++ b/repos/os/src/server/lx_fs/directory.h @@ -112,6 +112,8 @@ class Lx_fs::Directory : public Node closedir(_fd); } + bool type_directory() const override { return true; } + void update_modification_time(Timestamp const time) override { struct timespec ts[2] = { diff --git a/repos/os/src/server/lx_fs/main.cc b/repos/os/src/server/lx_fs/main.cc index 2d62bdfa00..b453f76c3e 100644 --- a/repos/os/src/server/lx_fs/main.cc +++ b/repos/os/src/server/lx_fs/main.cc @@ -91,6 +91,7 @@ class Lx_fs::Session_component : private Session_resources, private: using Open_node = File_system::Open_node; + using Dir_node = File_system::Open_node; using Signal_handler = Genode::Signal_handler; Genode::Env &_env; @@ -238,6 +239,43 @@ class Lx_fs::Session_component : private Session_resources, } } + /** + * Apply 'fn' to the open node referenced by 'node_handle' + * + * \throw Invalid_handle + */ + template + auto _with_open_node(Node_handle &node_handle, FN const &fn) + -> typename Trait::Functor::Return_type + { + using Node = File_system::Node; + try { + return _open_node_registry.apply(node_handle, [&] (Node &node) { + return fn(static_cast(node)); }); + } + catch (Id_space::Unknown_id const &) { + throw Invalid_handle(); } + } + + template + auto _with_open_dir_node(Dir_handle &dir_handle, FN const &fn) + -> typename Trait::Functor::Return_type + { + using Node = File_system::Node; + try { + return _open_node_registry.apply(dir_handle, [&] (Node &node) { + + Open_node &open_node = static_cast(node); + + if (!open_node.node().type_directory()) + throw Invalid_handle(); + + return fn(static_cast(node)); }); + } + catch (Id_space::Unknown_id const &) { + throw Invalid_handle(); } + } + /** * Watch_node::Response_handler interface */ @@ -315,6 +353,7 @@ class Lx_fs::Session_component : private Session_resources, void upgrade(Genode::Ram_quota ram) { _ram_guard.upgrade(ram); } void upgrade(Genode::Cap_quota caps) { _cap_guard.upgrade(caps); } + /*************************** ** File_system interface ** ***************************/ @@ -324,9 +363,9 @@ class Lx_fs::Session_component : private Session_resources, if (!valid_name(name.string())) throw Invalid_name(); - auto file_fn = [&] (Open_node &open_node) { + return _with_open_dir_node(dir_handle, [&] (Dir_node &dir_node) { - Node &dir = open_node.node(); + Node &dir = dir_node.node(); if (!_writeable) if (create || (mode != STAT_ONLY && mode != READ_ONLY)) @@ -337,16 +376,8 @@ class Lx_fs::Session_component : private Session_resources, Open_node *open_file = new (_alloc) Open_node(*file, _open_node_registry); - return open_file->id(); - }; - - try { - return File_handle { - _open_node_registry.apply(dir_handle, file_fn).value - }; - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } + return File_handle { open_file->id().value }; + }); } Symlink_handle symlink(Dir_handle, Name const &, bool /* create */) override @@ -415,43 +446,23 @@ class Lx_fs::Session_component : private Session_resources, void close(Node_handle handle) override { - auto close_fn = [&] (Open_node &open_node) { + _with_open_node(handle, [&] (Open_node &open_node) { Node &node = open_node.node(); destroy(_alloc, &open_node); destroy(_alloc, &node); - }; - - try { - _open_node_registry.apply(handle, close_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } + }); } - Status status(Node_handle node_handle) override + Status status(Node_handle handle) override { - auto status_fn = [&] (Open_node &open_node) { - return open_node.node().status(); - }; - - try { - return _open_node_registry.apply(node_handle, status_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } + return _with_open_node(handle, [&] (Open_node &open_node) { + return open_node.node().status(); }); } unsigned num_entries(Dir_handle dir_handle) override { - auto fn = [&] (Open_node &open_node) { - return open_node.node().num_entries(); - }; - - try { - return _open_node_registry.apply(dir_handle, fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } + return _with_open_dir_node(dir_handle, [&] (Dir_node &dir_node) { + return dir_node.node().num_entries(); }); } void control(Node_handle, Control) override @@ -467,7 +478,7 @@ class Lx_fs::Session_component : private Session_resources, if (!_writeable) throw Permission_denied(); - auto unlink_fn = [&] (Open_node &open_node) { + _with_open_node(dir_handle, [&] (Open_node &open_node) { Absolute_path absolute_path("/"); @@ -502,13 +513,7 @@ class Lx_fs::Session_component : private Session_resources, if (err == EACCES) throw Permission_denied(); } - }; - - try { - _open_node_registry.apply(dir_handle, unlink_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } + }); } void truncate(File_handle file_handle, file_size_t size) override @@ -516,43 +521,20 @@ class Lx_fs::Session_component : private Session_resources, if (!_writeable) throw Permission_denied(); - auto truncate_fn = [&] (Open_node &open_node) { - open_node.node().truncate(size); - }; - - try { - _open_node_registry.apply(file_handle, truncate_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } + _with_open_node(file_handle, [&] (Open_node &open_node) { + open_node.node().truncate(size); }); } void move(Dir_handle dir_from, Name const & name_from, Dir_handle dir_to, Name const & name_to) override { - typedef File_system::Open_node Dir_node; - Directory *to = 0; - auto to_fn = [&] (Dir_node &dir_node) { - to = &dir_node.node(); - }; + _with_open_dir_node(dir_to, [&] (Dir_node &dir_node) { + to = &dir_node.node(); }); - try { - _open_node_registry.apply(dir_to, to_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } - - auto move_fn = [&] (Dir_node &dir_node) { - dir_node.node().rename(*to, name_from.string(), name_to.string()); - }; - - try { - _open_node_registry.apply(dir_from, move_fn); - } catch (Id_space::Unknown_id const &) { - throw Invalid_handle(); - } + _with_open_dir_node(dir_from, [&] (Dir_node &dir_node) { + dir_node.node().rename(*to, name_from.string(), name_to.string()); }); } }; diff --git a/repos/os/src/server/lx_fs/node.h b/repos/os/src/server/lx_fs/node.h index 0322c353c6..d4a91917ce 100644 --- a/repos/os/src/server/lx_fs/node.h +++ b/repos/os/src/server/lx_fs/node.h @@ -60,6 +60,8 @@ class Lx_fs::Node : public File_system::Node_base uint64_t inode() const { return _inode; } char const *name() const { return _name; } + virtual bool type_directory() const { return false; } + /** * Assign name */ diff --git a/repos/os/src/server/lx_fs/open_node.h b/repos/os/src/server/lx_fs/open_node.h index 99878d3a47..66cc088667 100644 --- a/repos/os/src/server/lx_fs/open_node.h +++ b/repos/os/src/server/lx_fs/open_node.h @@ -32,7 +32,8 @@ class File_system::Open_node : public File_system::Node Genode::Id_space::Element _element; - NODE &_node; + NODE &_node; + Genode::Constructible _listener { }; Listener::Version const _version_when_opened = _node.curr_version(); From e0c4d5068d849ee3b9209a0d5ebdc87f26ab547c Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Sun, 29 May 2022 12:13:57 +0200 Subject: [PATCH 235/354] audio_out_session: reset changes to 'pos = tail' In case a driver is waiting for data, is should only investigate 'pos'. It should not advance the ring in any way until there is data available. issue #4609 --- repos/os/include/audio_out_session/audio_out_session.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/os/include/audio_out_session/audio_out_session.h b/repos/os/include/audio_out_session/audio_out_session.h index a5f57437de..c1d00e25d1 100644 --- a/repos/os/include/audio_out_session/audio_out_session.h +++ b/repos/os/include/audio_out_session/audio_out_session.h @@ -252,8 +252,8 @@ class Audio_out::Stream { if (full()) throw Alloc_failed(); - unsigned pos = _tail; + _tail = (_tail + 1) % QUEUE_SIZE; Packet *p = get(pos); @@ -267,7 +267,7 @@ class Audio_out::Stream * * This means that allocation will start at current queue position. */ - void reset() { _tail = (_pos + 1) % QUEUE_SIZE; } + void reset() { _tail = _pos; } /** From 003247d88326d8718b85fb560373e1c6cc7bb388 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Tue, 7 Jun 2022 17:26:02 +0200 Subject: [PATCH 236/354] dde_bsd: audio do not advance on silence Do not advance ring buffer positions when playing silence, additionally to not send progress signals when playing silence. Silence implies underrun in the client side - not progress. issue #4609 --- repos/dde_bsd/src/drivers/audio/main.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/repos/dde_bsd/src/drivers/audio/main.cc b/repos/dde_bsd/src/drivers/audio/main.cc index 14be6f1667..c16e791b19 100644 --- a/repos/dde_bsd/src/drivers/audio/main.cc +++ b/repos/dde_bsd/src/drivers/audio/main.cc @@ -142,6 +142,7 @@ class Audio_out::Out } else { _play_silence(); + return; } _advance_position(p_left, p_right); From 6df66a77d0f9f61dfdff6c6114c715a1c45d6cda Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 14 Sep 2022 12:34:48 +0200 Subject: [PATCH 237/354] sculpt: avoid superfluous depot queries This patch avoids repetitive depot queries at the start of the Sculpt system. We don't need to trigger a query unconditionally whenever the managed/deploy changes because the call of 'handle_deploy' triggers a query when needed. We don't need to trigger a query once the prepare step is completed because the depot_query component is spawned at this point. The initial blueprint produced by the depot_query component, in turn, triggers the 'handle_deploy' mechanics in the sculpt manager. The constructor of the Sculpt manager's 'Main' does not need to call 'depot_deploy' because the prepare step - which is a precondition for the deployment - cannot be completed at this point anyway. --- repos/gems/src/app/sculpt_manager/deploy.h | 1 - repos/gems/src/app/sculpt_manager/main.cc | 4 ---- 2 files changed, 5 deletions(-) diff --git a/repos/gems/src/app/sculpt_manager/deploy.h b/repos/gems/src/app/sculpt_manager/deploy.h index 9670454c38..296ff54834 100644 --- a/repos/gems/src/app/sculpt_manager/deploy.h +++ b/repos/gems/src/app/sculpt_manager/deploy.h @@ -185,7 +185,6 @@ struct Sculpt::Deploy { _managed_deploy_rom.update(); handle_deploy(); - _depot_query.trigger_depot_query(); } /** diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 8b8940e40f..4ead90948d 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -1239,7 +1239,6 @@ struct Sculpt::Main : Input_event_handler, */ _handle_gui_mode(); _storage.handle_storage_devices_update(); - _deploy.handle_deploy(); _handle_pci_devices(); _handle_runtime_config(); _handle_clicked(); @@ -1737,9 +1736,6 @@ void Sculpt::Main::_handle_runtime_state() if (exit_state.exited) { _prepare_completed = _prepare_version; - /* trigger deployment */ - _deploy.handle_deploy(); - /* trigger update and deploy */ reconfigure_runtime = true; } From 3be0136901069a50cf12d21bea49950f5a43dec6 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 14 Sep 2022 15:35:13 +0200 Subject: [PATCH 238/354] base: add util/dictionary.h utility The new 'Dictionary' provides an easy way to access objects using strings as key. The 'String' received the 'operator >' to simplify the organization of strings in an AVL tree. The patch removes the former definition of the 'operator >' from the platform driver because it would be ambigious now. Fixes #4610 --- repos/base/include/util/dictionary.h | 148 ++++++++++++++++++ repos/base/include/util/string.h | 6 + .../src/app/trace_recorder/named_registry.h | 6 - repos/os/src/drivers/platform/types.h | 6 - 4 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 repos/base/include/util/dictionary.h diff --git a/repos/base/include/util/dictionary.h b/repos/base/include/util/dictionary.h new file mode 100644 index 0000000000..c393b0776c --- /dev/null +++ b/repos/base/include/util/dictionary.h @@ -0,0 +1,148 @@ +/* + * \brief Utility for accessing objects by name + * \author Norman Feske + * \date 2022-09-14 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _INCLUDE__UTIL__DICTIONARY_H_ +#define _INCLUDE__UTIL__DICTIONARY_H_ + +#include +#include +#include +#include +#include + +namespace Genode { template class Dictionary; } + + +template +class Genode::Dictionary : Noncopyable +{ + private: + + Avl_tree _tree { }; + + public: + + class Element : private Avl_node + { + public: + + NAME const name; + + private: + + using This = Dictionary::Element; + + Dictionary &_dictionary; + + bool higher(T const *other) const { return name > other->This::name; } + + friend class Avl_tree; + friend class Avl_node; + friend class Dictionary; + + static T *_matching_sub_tree(T &curr, NAME const &name) + { + typename Avl_node::Side side = (curr.This::name > name); + return curr.Avl_node::child(side); + } + + public: + + Element(Dictionary &dictionary, NAME const &name) + : + name(name), _dictionary(dictionary) + { + if (_dictionary.exists(name)) + warning("dictionary entry '", name, "' is not unique"); + + _dictionary._tree.insert(this); + } + + ~Element() + { + _dictionary._tree.remove(this); + } + }; + + /** + * Call 'match_fn' with named constant dictionary element + * + * The 'match_fn' functor is called with a const reference to the + * matching dictionary element. If no maching element exists, + * 'no_match_fn' is called without argument. + */ + template + auto with_element(NAME const &name, FN1 const &match_fn, FN2 const &no_match_fn) + -> typename Trait::Functor::Return_type + { + T *curr_ptr = _tree.first(); + for (;;) { + if (!curr_ptr) + break; + + if (curr_ptr->Element::name == name) { + return match_fn(*curr_ptr); + } + + curr_ptr = Element::_matching_sub_tree(*curr_ptr, name); + } + return no_match_fn(); + } + + /** + * Call 'match_fn' with named mutable dictionary element + * + * The 'match_fn' functor is called with a non-const reference to the + * matching dictionary element. If no maching element exists, + * 'no_match_fn' is called without argument. + */ + template + auto with_element(NAME const &name, FN1 const &match_fn, FN2 const &no_match_fn) const + -> typename Trait::Functor::Return_type + { + auto const_match_fn = [&] (T const &e) { return match_fn(e); }; + auto non_const_this = const_cast(this); + return non_const_this->with_element(name, const_match_fn, no_match_fn); + } + + /** + * Call 'fn' with a non-const reference to any dictionary element + * + * \return true if 'fn' was called, or + * false if the dictionary is empty + * + * This method is intended for the orderly destruction of a dictionary. + * It allows for the consecutive destruction of all elements. + */ + template + bool with_any_element(FUNC const &fn) + { + T *curr_ptr = _tree.first(); + if (!curr_ptr) + return false; + + fn(*curr_ptr); + return true; + } + + template + void for_each(FN const &fn) const { _tree.for_each(fn); } + + bool exists(NAME const &name) const + { + return with_element(name, [] (T const &) { return true; }, + [] { return false; }); + } +}; + +#endif /* _INCLUDE__UTIL__DICTIONARY_H_ */ diff --git a/repos/base/include/util/string.h b/repos/base/include/util/string.h index f82fbabacb..5eb4eb2162 100644 --- a/repos/base/include/util/string.h +++ b/repos/base/include/util/string.h @@ -808,6 +808,12 @@ class Genode::String return strcmp(string(), other.string()) != 0; } + template + bool operator > (String const &other) const + { + return strcmp(string(), other.string()) > 0; + } + void print(Output &out) const { Genode::print(out, string()); } }; diff --git a/repos/gems/src/app/trace_recorder/named_registry.h b/repos/gems/src/app/trace_recorder/named_registry.h index 51e29f98b1..ea5c07047c 100644 --- a/repos/gems/src/app/trace_recorder/named_registry.h +++ b/repos/gems/src/app/trace_recorder/named_registry.h @@ -22,12 +22,6 @@ namespace Trace_recorder { using namespace Genode; template class Named_registry; - - template - static inline bool operator > (String const &s1, String const &s2) - { - return strcmp(s1.string(), s2.string()) > 0; - } } template diff --git a/repos/os/src/drivers/platform/types.h b/repos/os/src/drivers/platform/types.h index 788aac18ee..54b93f8f93 100644 --- a/repos/os/src/drivers/platform/types.h +++ b/repos/os/src/drivers/platform/types.h @@ -20,12 +20,6 @@ namespace Driver { using namespace Genode; - template - static inline bool operator > (String const &s1, String const &s2) - { - return strcmp(s1.string(), s2.string()) > 0; - } - /** * Utility for switching clocks/resets/powers on/off depending on the * number of users From b4441bff04e56428ffba9522f32c5b8b1f417065 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 12 Sep 2022 14:17:47 +0200 Subject: [PATCH 239/354] depot_query: remove ineffective caches Upon closer inspection of real-world access patterns, it turns out that the 'Stat_cache' and 'Cached_rom_query' are not as effective as hoped for because cache hits are rare while querying pkg blueprints. However, by increasing the initial size of the blueprint reporter from 4 KiB (default) to 64 KiB has a great effect. With the small default report size, the querying of blueprints is repeated until the buffer size suffices, incrementing the buffer size by 4 KiB in each iteration. Issue #4611 --- repos/gems/src/app/depot_query/main.cc | 207 +++---------------------- 1 file changed, 20 insertions(+), 187 deletions(-) diff --git a/repos/gems/src/app/depot_query/main.cc b/repos/gems/src/app/depot_query/main.cc index 4ed59086b0..be9b554537 100644 --- a/repos/gems/src/app/depot_query/main.cc +++ b/repos/gems/src/app/depot_query/main.cc @@ -18,7 +18,6 @@ #include #include #include -#include /* fs_query includes */ #include @@ -31,9 +30,6 @@ namespace Depot_query { struct Recursion_limit; struct Dependencies; - class Stat_cache; - struct Rom_query; - class Cached_rom_query; struct Main; } @@ -155,172 +151,7 @@ class Depot_query::Dependencies }; -class Depot_query::Stat_cache -{ - private: - - struct Key - { - struct Value - { - Archive::Path path; - - bool operator > (Value const &other) const - { - return strcmp(path.string(), other.path.string()) > 0; - } - - bool operator == (Value const &other) const - { - return path == other.path; - } - - } value; - }; - - struct Result { bool file_exists; }; - - typedef Lru_cache Cache; - - Cache::Size const _size; - - Cache _cache; - - Directory const &_dir; - - public: - - Stat_cache(Directory const &dir, Allocator &alloc, Xml_node const config) - : - _size({.value = config.attribute_value("stat_cache", Number_of_bytes(64*1024)) - / Cache::element_size()}), - _cache(alloc, _size), - _dir(dir) - { } - - bool file_exists(Archive::Path const path) - { - /* don't cache the state of the 'local' depot user */ - if (Archive::user(path) == "local") - return _dir.file_exists(path); - - bool result = false; - - auto hit_fn = [&] (Result const &cached_result) - { - result = cached_result.file_exists; - }; - - auto miss_fn = [&] (Cache::Missing_element &missing_element) - { - Result const stat_result { _dir.file_exists(path) }; - - /* - * Don't cache negative results because files may appear - * during installation. Later queries may find files absent - * from earlier queries. - */ - if (stat_result.file_exists) - missing_element.construct(stat_result); - }; - - Key const key { .value = { .path = path } }; - (void)_cache.try_apply(key, hit_fn, miss_fn); - - return result; - } -}; - - -struct Depot_query::Rom_query : Interface -{ - /** - * Look up ROM module 'rom_label' in the archives referenced by 'pkg_path' - * - * \throw Directory::Nonexistent_directory - * \throw Directory::Nonexistent_file - * \throw File::Truncated_during_read - * \throw Recursion_limit::Reached - */ - virtual Archive::Path find_rom_in_pkg(Directory::Path const &pkg_path, - Rom_label const &rom_label, - Recursion_limit recursion_limit) = 0; -}; - - -class Depot_query::Cached_rom_query : public Rom_query -{ - private: - - struct Key - { - struct Value - { - Archive::Path pkg; - Rom_label rom; - - bool operator > (Value const &other) const - { - return strcmp(pkg.string(), other.pkg.string()) > 0 - && strcmp(rom.string(), other.rom.string()) > 0; - } - - bool operator == (Value const &other) const - { - return pkg == other.pkg && rom == other.rom; - } - - } value; - }; - - typedef Lru_cache Cache; - - Cache::Size const _size; - - Cache mutable _cache; - - Rom_query &_rom_query; - - public: - - Cached_rom_query(Rom_query &rom_query, Allocator &alloc, Xml_node const config) - : - _size({.value = config.attribute_value("rom_query_cache", Number_of_bytes(64*1024)) - / Cache::element_size() }), - _cache(alloc, _size), - _rom_query(rom_query) - { } - - Archive::Path find_rom_in_pkg(Directory::Path const &pkg_path, - Rom_label const &rom_label, - Recursion_limit recursion_limit) override - { - /* don't cache the state of the 'local' depot user */ - if (Archive::user(pkg_path) == "local") - return _rom_query.find_rom_in_pkg(pkg_path, rom_label, recursion_limit); - - Archive::Path result { }; - - auto hit_fn = [&] (Archive::Path const &path) { result = path; }; - - auto miss_fn = [&] (Cache::Missing_element &missing_element) - { - Archive::Path const path = - _rom_query.find_rom_in_pkg(pkg_path, rom_label, recursion_limit); - - if (path.valid()) - missing_element.construct(path); - }; - - Key const key { .value = { .pkg = pkg_path, .rom = rom_label } }; - (void)_cache.try_apply(key, hit_fn, miss_fn); - - return result; - } -}; - - -struct Depot_query::Main : private Rom_query +struct Depot_query::Main { Env &_env; @@ -334,8 +165,6 @@ struct Depot_query::Main : private Rom_query Directory _depot_dir { _root, "depot" }; - Stat_cache _depot_stat_cache { _depot_dir, _heap, _config.xml() }; - Signal_handler
_config_handler { _env.ep(), *this, &Main::_handle_config }; @@ -365,6 +194,11 @@ struct Depot_query::Main : private Rom_query Architecture _architecture { }; + bool _file_exists(Directory::Path const &path) + { + return _depot_dir.file_exists(path); + } + template void _with_file_content(Directory::Path const &path, char const *name, FN const &fn) { @@ -399,13 +233,7 @@ struct Depot_query::Main : private Rom_query }); } - Cached_rom_query _cached_rom_query { *this, _heap, _config.xml() }; - - /** - * Rom_query interface - */ - Archive::Path find_rom_in_pkg(Directory::Path const &, Rom_label const &, - Recursion_limit) override; + Archive::Path _find_rom_in_pkg(Directory::Path const &, Rom_label const &, Recursion_limit); void _gen_rom_path_nodes(Xml_generator &, Xml_node const &, Archive::Path const &, Xml_node const &); @@ -449,8 +277,13 @@ struct Depot_query::Main : private Rom_query _construct_if(query.has_sub_node("scan"), _scan_reporter, _env, "scan", "scan"); + /* + * Use 64 KiB as initial report size to avoid the repetitive querying + * when successively expanding the reporter. + */ _construct_if(query.has_sub_node("blueprint"), - _blueprint_reporter, _env, "blueprint", "blueprint"); + _blueprint_reporter, _env, "blueprint", "blueprint", + Expanding_reporter::Initial_buffer_size { 64*1024 }); _construct_if(query.has_sub_node("dependencies"), _dependencies_reporter, _env, "dependencies", "dependencies"); @@ -535,9 +368,9 @@ struct Depot_query::Main : private Rom_query Depot_query::Archive::Path -Depot_query::Main::find_rom_in_pkg(Directory::Path const &pkg_path, - Rom_label const &rom_label, - Recursion_limit recursion_limit) +Depot_query::Main::_find_rom_in_pkg(Directory::Path const &pkg_path, + Rom_label const &rom_label, + Recursion_limit recursion_limit) { /* * \throw Directory::Nonexistent_directory @@ -566,7 +399,7 @@ Depot_query::Main::find_rom_in_pkg(Directory::Path const &pkg_path, Archive::name(archive_path), "/", Archive::version(archive_path), "/", rom_label); - if (_depot_stat_cache.file_exists(rom_path)) + if (_file_exists(rom_path)) result = rom_path; } break; @@ -578,7 +411,7 @@ Depot_query::Main::find_rom_in_pkg(Directory::Path const &pkg_path, Archive::name(archive_path), "/", Archive::version(archive_path), "/", rom_label); - if (_depot_stat_cache.file_exists(rom_path)) + if (_file_exists(rom_path)) result = rom_path; } break; @@ -586,7 +419,7 @@ Depot_query::Main::find_rom_in_pkg(Directory::Path const &pkg_path, case Archive::PKG: Archive::Path const result_from_pkg = - _cached_rom_query.find_rom_in_pkg(archive_path, rom_label, recursion_limit); + _find_rom_in_pkg(archive_path, rom_label, recursion_limit); if (result_from_pkg.valid()) result = result_from_pkg; @@ -627,7 +460,7 @@ void Depot_query::Main::_gen_rom_path_nodes(Xml_generator &xml, } Archive::Path const rom_path = - _cached_rom_query.find_rom_in_pkg(pkg_path, label, Recursion_limit{8}); + _find_rom_in_pkg(pkg_path, label, Recursion_limit{8}); if (rom_path.valid()) { xml.node("rom", [&] () { From 851ae574d12753c862719bfd6246a67fa3de39a2 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 14 Sep 2022 15:51:52 +0200 Subject: [PATCH 240/354] depot_query: add directory cache By caching directory listings, the performance of depot_query is no longer impeded by a massive amount of stat calls while searching for ROM module locations. Issue #4611 --- repos/gems/src/app/depot_query/main.cc | 117 ++++++++++++++++++++++--- 1 file changed, 104 insertions(+), 13 deletions(-) diff --git a/repos/gems/src/app/depot_query/main.cc b/repos/gems/src/app/depot_query/main.cc index be9b554537..dd722eeb16 100644 --- a/repos/gems/src/app/depot_query/main.cc +++ b/repos/gems/src/app/depot_query/main.cc @@ -17,6 +17,7 @@ #include #include #include +#include #include /* fs_query includes */ @@ -28,12 +29,93 @@ namespace Depot_query { typedef String<64> Rom_label; + struct Directory_cache; struct Recursion_limit; struct Dependencies; struct Main; } +struct Depot_query::Directory_cache : Noncopyable +{ + Allocator &_alloc; + + using Name = Directory::Entry::Name; + + struct Listing; + using Listings = Dictionary; + + struct Listing : Listings::Element + { + Allocator &_alloc; + + struct File; + using Files = Dictionary; + + struct File : Files::Element + { + File(Files &files, Name const &name) : Files::Element(files, name) { } + }; + + Files _files { }; + + Listing(Listings &listings, Allocator &alloc, Directory &dir, + Directory::Path const &path) + : + Listings::Element(listings, path), _alloc(alloc) + { + try { + Directory(dir, path).for_each_entry([&] (Directory::Entry const &entry) { + new (_alloc) File(_files, entry.name()); }); + } + catch (Directory::Nonexistent_directory) { + warning("directory '", path, "' does not exist"); + } + } + + ~Listing() + { + auto destroy_fn = [&] (File &f) { destroy(_alloc, &f); }; + + while (_files.with_any_element(destroy_fn)); + } + + bool file_exists(Name const &name) const { return _files.exists(name); } + }; + + Listings mutable _listings { }; + + Directory_cache(Allocator &alloc) : _alloc(alloc) { } + + ~Directory_cache() + { + auto destroy_fn = [&] (Listing &l) { destroy(_alloc, &l); }; + + while (_listings.with_any_element(destroy_fn)); + } + + bool file_exists(Directory &dir, Directory::Path const &path, Name const &name) const + { + bool listing_known = false; + + bool const result = + _listings.with_element(path, + [&] /* match */ (Listing const &listing) { + listing_known = true; + return listing.file_exists(name); + }, + [&] /* no_match */ { return false; }); + + if (listing_known) + return result; + + Listing &new_listing = *new (_alloc) Listing(_listings, _alloc, dir, path); + + return new_listing.file_exists(name); + } +}; + + class Depot_query::Recursion_limit : Noncopyable { public: @@ -165,6 +247,8 @@ struct Depot_query::Main Directory _depot_dir { _root, "depot" }; + Constructible _directory_cache { }; + Signal_handler
_config_handler { _env.ep(), *this, &Main::_handle_config }; @@ -194,9 +278,14 @@ struct Depot_query::Main Architecture _architecture { }; - bool _file_exists(Directory::Path const &path) + bool _file_exists(Directory::Path const &path, Rom_label const &file_name) { - return _depot_dir.file_exists(path); + if (!_directory_cache.constructed()) { + error("directory cache is unexpectedly not constructed"); + return false; + } + + return _directory_cache->file_exists(_depot_dir, path, file_name); } template @@ -253,6 +342,8 @@ struct Depot_query::Main Xml_node const config = _config.xml(); + _directory_cache.construct(_heap); + /* * Depending of the 'query' config attribute, we obtain the query * information from a separate ROM session (attribute value "rom") @@ -394,25 +485,25 @@ Depot_query::Main::_find_rom_in_pkg(Directory::Path const &pkg_path, case Archive::SRC: { Archive::Path const - rom_path(Archive::user(archive_path), "/bin/", - _architecture, "/", - Archive::name(archive_path), "/", - Archive::version(archive_path), "/", rom_label); + rom_path(Archive::user(archive_path), "/bin/", + _architecture, "/", + Archive::name(archive_path), "/", + Archive::version(archive_path)); - if (_file_exists(rom_path)) - result = rom_path; + if (_file_exists(rom_path, rom_label)) + result = Archive::Path(rom_path, "/", rom_label); } break; case Archive::RAW: { Archive::Path const - rom_path(Archive::user(archive_path), "/raw/", - Archive::name(archive_path), "/", - Archive::version(archive_path), "/", rom_label); + rom_path(Archive::user(archive_path), "/raw/", + Archive::name(archive_path), "/", + Archive::version(archive_path)); - if (_file_exists(rom_path)) - result = rom_path; + if (_file_exists(rom_path, rom_label)) + result = Archive::Path(rom_path, "/", rom_label); } break; From ab7c0b40f294fa1bfd80603fbfa3c1ef4591c298 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 14 Sep 2022 16:58:16 +0200 Subject: [PATCH 241/354] depot_query: avoid repetitive file accesses This patch changes the access of pkg-archives files such that the file read only once per pkg, not for each ROM module used by the package. Issue #4611 --- repos/gems/src/app/depot_query/main.cc | 87 ++++++++++++-------------- 1 file changed, 40 insertions(+), 47 deletions(-) diff --git a/repos/gems/src/app/depot_query/main.cc b/repos/gems/src/app/depot_query/main.cc index dd722eeb16..c1455eed2a 100644 --- a/repos/gems/src/app/depot_query/main.cc +++ b/repos/gems/src/app/depot_query/main.cc @@ -298,6 +298,7 @@ struct Depot_query::Main } catch (File_content::Nonexistent_file) { } catch (Directory::Nonexistent_directory) { } + catch (File::Truncated_during_read) { } } /** @@ -322,8 +323,7 @@ struct Depot_query::Main }); } - Archive::Path _find_rom_in_pkg(Directory::Path const &, Rom_label const &, Recursion_limit); - + Archive::Path _find_rom_in_pkg(File_content const &, Rom_label const &, Recursion_limit); void _gen_rom_path_nodes(Xml_generator &, Xml_node const &, Archive::Path const &, Xml_node const &); void _gen_inherited_rom_path_nodes(Xml_generator &, Xml_node const &, @@ -459,21 +459,10 @@ struct Depot_query::Main Depot_query::Archive::Path -Depot_query::Main::_find_rom_in_pkg(Directory::Path const &pkg_path, +Depot_query::Main::_find_rom_in_pkg(File_content const &archives, Rom_label const &rom_label, Recursion_limit recursion_limit) { - /* - * \throw Directory::Nonexistent_directory - */ - Directory pkg_dir(_depot_dir, pkg_path); - - /* - * \throw Directory::Nonexistent_file - * \throw File::Truncated_during_read - */ - File_content archives(_heap, pkg_dir, "archives", File_content::Limit{16*1024}); - Archive::Path result; archives.for_each_line([&] (Archive::Path const &archive_path) { @@ -509,12 +498,14 @@ Depot_query::Main::_find_rom_in_pkg(Directory::Path const &pkg_path, case Archive::PKG: - Archive::Path const result_from_pkg = - _find_rom_in_pkg(archive_path, rom_label, recursion_limit); + _with_file_content(archive_path, "archives", [&] (File_content const &archives) { - if (result_from_pkg.valid()) - result = result_from_pkg; + Archive::Path const result_from_pkg = + _find_rom_in_pkg(archives, rom_label, recursion_limit); + if (result_from_pkg.valid()) + result = result_from_pkg; + }); break; } }); @@ -527,43 +518,45 @@ void Depot_query::Main::_gen_rom_path_nodes(Xml_generator &xml, Archive::Path const &pkg_path, Xml_node const &runtime) { - runtime.for_each_sub_node("content", [&] (Xml_node content) { - content.for_each_sub_node([&] (Xml_node node) { + _with_file_content(pkg_path, "archives", [&] (File_content const &archives) { + runtime.for_each_sub_node("content", [&] (Xml_node content) { + content.for_each_sub_node([&] (Xml_node node) { - /* skip non-rom nodes */ - if (!node.has_type("rom")) - return; + /* skip non-rom nodes */ + if (!node.has_type("rom")) + return; - Rom_label const label = node.attribute_value("label", Rom_label()); + Rom_label const label = node.attribute_value("label", Rom_label()); - /* skip ROM that is provided by the environment */ - bool provided_by_env = false; - env_xml.for_each_sub_node("rom", [&] (Xml_node node) { - if (node.attribute_value("label", Rom_label()) == label) - provided_by_env = true; }); + /* skip ROM that is provided by the environment */ + bool provided_by_env = false; + env_xml.for_each_sub_node("rom", [&] (Xml_node node) { + if (node.attribute_value("label", Rom_label()) == label) + provided_by_env = true; }); - if (provided_by_env) { - xml.node("rom", [&] () { - xml.attribute("label", label); - xml.attribute("env", "yes"); - }); - return; - } + if (provided_by_env) { + xml.node("rom", [&] () { + xml.attribute("label", label); + xml.attribute("env", "yes"); + }); + return; + } - Archive::Path const rom_path = - _find_rom_in_pkg(pkg_path, label, Recursion_limit{8}); + Archive::Path const rom_path = + _find_rom_in_pkg(archives, label, Recursion_limit{8}); - if (rom_path.valid()) { - xml.node("rom", [&] () { - xml.attribute("label", label); - xml.attribute("path", rom_path); - }); + if (rom_path.valid()) { + xml.node("rom", [&] () { + xml.attribute("label", label); + xml.attribute("path", rom_path); + }); - } else { + } else { - xml.node("missing_rom", [&] () { - xml.attribute("label", label); }); - } + xml.node("missing_rom", [&] () { + xml.attribute("label", label); }); + } + }); }); }); } From 4fd1b52d1fcbf3a0d2017ab96210512f668692cd Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 15 Sep 2022 10:40:07 +0200 Subject: [PATCH 242/354] trace_recorder: adopt Genode::Dictionary genodelabs/genode#4610 --- repos/gems/src/app/trace_recorder/backend.h | 21 ++-- repos/gems/src/app/trace_recorder/monitor.cc | 32 ++++--- .../src/app/trace_recorder/named_registry.h | 96 ------------------- repos/gems/src/app/trace_recorder/policy.cc | 4 +- repos/gems/src/app/trace_recorder/policy.h | 14 ++- 5 files changed, 38 insertions(+), 129 deletions(-) delete mode 100644 repos/gems/src/app/trace_recorder/named_registry.h diff --git a/repos/gems/src/app/trace_recorder/backend.h b/repos/gems/src/app/trace_recorder/backend.h index 0dbb4ac1dc..e3cf765b26 100644 --- a/repos/gems/src/app/trace_recorder/backend.h +++ b/repos/gems/src/app/trace_recorder/backend.h @@ -14,32 +14,33 @@ #ifndef _BACKEND_H_ #define _BACKEND_H_ +/* Genode includes */ +#include + /* local includes */ -#include #include namespace Trace_recorder { class Backend_base; - using Backends = Named_registry; + using Backend_name = Genode::String<64>; + using Backends = Genode::Dictionary; } class Trace_recorder::Backend_base : Backends::Element { protected: - friend class Backends::Element; - friend class Avl_node; - friend class Avl_tree; + friend class Genode::Dictionary; + friend class Genode::Avl_node; + friend class Genode::Avl_tree; public: - - using Name = Backends::Element::Name; + using Name = Backend_name; using Backends::Element::name; - using Backends::Element::Element; - Backend_base(Backends & registry, Name const &name) - : Backends::Element(registry, name) + Backend_base(Backends & backends, Name const &name) + : Backends::Element(backends, name) { } virtual ~Backend_base() { } diff --git a/repos/gems/src/app/trace_recorder/monitor.cc b/repos/gems/src/app/trace_recorder/monitor.cc index f10cc016d3..c42e87a9de 100644 --- a/repos/gems/src/app/trace_recorder/monitor.cc +++ b/repos/gems/src/app/trace_recorder/monitor.cc @@ -104,11 +104,14 @@ void Trace_recorder::Monitor::start(Xml_node config) /* find and assign policy; create/insert if not present */ Policy::Name const policy_name = session_policy.attribute_value("policy", Policy::Name()); - bool create = true; - _policies.apply(policy_name, [&] (Policy & policy) { - _trace.trace(id, policy.id(), buffer_sz); - create = false; - }); + bool const create = + _policies.with_element(policy_name, + [&] /* match */ (Policy & policy) { + _trace.trace(id, policy.id(), buffer_sz); + return false; + }, + [&] /* no_match */ { return true; } + ); /* create policy if it did not exist */ if (create) { @@ -128,14 +131,17 @@ void Trace_recorder::Monitor::start(Xml_node config) /* create and register writers at trace buffer */ session_policy.for_each_sub_node([&] (Xml_node & node) { - bool present = false; - _backends.apply(node.type(), [&] (Backend_base &backend) { - backend.create_writer(_alloc, - buffer.writers(), - _trace_directory->root(), - _trace_directory->subject_path(buffer.info())); - present = true; - }); + bool const present = + _backends.with_element(node.type(), + [&] /* match */ (Backend_base &backend) { + backend.create_writer(_alloc, + buffer.writers(), + _trace_directory->root(), + _trace_directory->subject_path(buffer.info())); + return true; + }, + [&] /* no_match */ { return false; } + ); if (!present) error("No writer available for <", node.type(), "/>."); diff --git a/repos/gems/src/app/trace_recorder/named_registry.h b/repos/gems/src/app/trace_recorder/named_registry.h deleted file mode 100644 index ea5c07047c..0000000000 --- a/repos/gems/src/app/trace_recorder/named_registry.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * \brief Utility for finding objecs by name - * \author Norman Feske - * \date 2021-11-11 - */ - -/* - * Copyright (C) 2021 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _NAMED_REGISTRY_H_ -#define _NAMED_REGISTRY_H_ - -#include -#include -#include - -namespace Trace_recorder { - using namespace Genode; - - template class Named_registry; -} - -template -class Trace_recorder::Named_registry : Noncopyable -{ - private: - - Avl_tree _tree { }; - - public: - - class Element : private Avl_node - { - public: - - using Name = Genode::String<64>; - Name const name; - - private: - - Named_registry &_registry; - - bool higher(T const *other) const { return name > other->name; } - - friend class Avl_tree; - friend class Avl_node; - friend class Named_registry; - - static T *_matching_sub_tree(T &curr, Name const &name) - { - typename Avl_node::Side side = (curr.name > name); - - return curr.Avl_node::child(side); - } - - public: - - Element(Named_registry ®istry, Name const &name) - : - name(name), _registry(registry) - { - _registry._tree.insert(this); - } - - ~Element() - { - _registry._tree.remove(this); - } - }; - - template - void apply(typename Element::Name const &name, FN && fn) - { - T *curr_ptr = _tree.first(); - for (;;) { - if (!curr_ptr) - return; - - if (curr_ptr->name == name) { - fn(*curr_ptr); - return; - } - - curr_ptr = Element::_matching_sub_tree(*curr_ptr, name); - } - } - - template - void for_each(FN && fn) { _tree.for_each(fn); } -}; - -#endif /* _NAMED_REGISTRY_H_ */ diff --git a/repos/gems/src/app/trace_recorder/policy.cc b/repos/gems/src/app/trace_recorder/policy.cc index 03bd389a42..f39fbce27f 100644 --- a/repos/gems/src/app/trace_recorder/policy.cc +++ b/repos/gems/src/app/trace_recorder/policy.cc @@ -19,9 +19,9 @@ using namespace Genode; Trace_recorder::Policy::Policy(Env &env, Trace::Connection &trace, Policy::Name const &name, - Policies ®istry) + Policies &policies) : - Policies::Element(registry, name), + Policies::Element(policies, name), _env(env), _trace(trace), _rom(env, name.string()) { Dataspace_capability dst_ds = _trace.policy(_id); diff --git a/repos/gems/src/app/trace_recorder/policy.h b/repos/gems/src/app/trace_recorder/policy.h index 1c7737b870..6653b329dd 100644 --- a/repos/gems/src/app/trace_recorder/policy.h +++ b/repos/gems/src/app/trace_recorder/policy.h @@ -14,10 +14,8 @@ #ifndef _POLICY_H_ #define _POLICY_H_ -/* local includes */ -#include - /* Genode includes */ +#include #include #include #include @@ -25,7 +23,8 @@ namespace Trace_recorder { class Policy; - using Policies = Named_registry; + using Policy_name = Genode::String<64>; + using Policies = Genode::Dictionary; } @@ -35,7 +34,7 @@ namespace Trace_recorder { class Trace_recorder::Policy : Policies::Element { private: - friend class Policies::Element; + friend class Genode::Dictionary; friend class Genode::Avl_node; friend class Genode::Avl_tree; @@ -48,14 +47,13 @@ class Trace_recorder::Policy : Policies::Element public: - using Name = Policies::Element::Name; + using Name = Policy_name; using Policies::Element::name; - using Policies::Element::Element; Policy(Genode::Env &env, Genode::Trace::Connection &trace, Name const &name, - Policies ®istry); + Policies &policies); /*************** From 99254b4d52ace5f663cb5af43fd42783a2ffaa4a Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Wed, 14 Sep 2022 14:30:56 +0200 Subject: [PATCH 243/354] nic_router: bind link state to remote DNS config The NIC router README claims that the 'dns_config_from' attribute in a DHCP server configuration binds the propagated link state of all interfaces at the domain of the server to the validity of the IP config of the domain that is given through 'dns_config_from'. However, this was not true. The router missed to implement this detail which led to clients of such a DHCP server sending DHCP DISCOVER packets too early. These early DHCP DISCOVER packets were dropped by the router potentially causing a big delay until the client started a new attempt. Unnecessary long network boot-up delays were observed with at least the lwip run script and Sculpt on the PinePhone and could be tracked down to this former inconsistency in the router. This commit fixes the inconsistency. Fixes #4612 --- repos/os/src/server/nic_router/README | 30 ++++++- repos/os/src/server/nic_router/dhcp_server.cc | 10 +-- repos/os/src/server/nic_router/dhcp_server.h | 2 +- repos/os/src/server/nic_router/domain.cc | 30 +++++-- repos/os/src/server/nic_router/domain.h | 4 + repos/os/src/server/nic_router/interface.cc | 33 ++++--- repos/os/src/server/nic_router/interface.h | 10 ++- repos/os/src/server/nic_router/nic_client.cc | 14 +-- repos/os/src/server/nic_router/nic_client.h | 5 +- .../src/server/nic_router/nic_session_root.cc | 86 ++++++++++--------- .../src/server/nic_router/nic_session_root.h | 3 +- .../server/nic_router/uplink_session_root.h | 3 +- 12 files changed, 137 insertions(+), 93 deletions(-) diff --git a/repos/os/src/server/nic_router/README b/repos/os/src/server/nic_router/README index fd28c047ef..0a1f032358 100644 --- a/repos/os/src/server/nic_router/README +++ b/repos/os/src/server/nic_router/README @@ -485,10 +485,32 @@ sub-tags. The attribute states the domain from whose IP config to take the DNS domain name and the list of DNS server addresses that shall be propagated. Note that the order of DNS server adresses is not altered thereby. This is useful in scenarios where these addresses must be obtained dynamically through the DHCP -client of another domain. An implication of the 'dns_config_from' attribute is -that the link state of all interfaces at the domain with the DHCP server -becomes bound to the validity of the IP config of the domain that is stated in -the attribute. +client of another domain. + +There is an additional feature the router implements together with the +'dns_config_from' functionality. If a domain has a DHCP server with a +'dns_config_from' value that denominates another valid domain, the link state +of all interfaces, where the router is a NIC session server, at the first +domain becomes bound to the validity of the IP config of the second domain. + +One motivation for having this feature is to optimize the network boot-up time +of application clients of the NIC router by preventing DHCP re-attempt +timeouts. Such timeouts would occur because clients attempt DHCP as soon as +their interface goes up and without the extra feature, the DHCP server would +potentially not be ready yet. + +But this feature is not only an optimization. It also implies that whenever the +domain denominated by 'dns_config_from' receives a new IP config with a new DNS +configuration, application clients are poked via a link state "down-up" +sequence to re-request DHCP and thereby update their DNS configuration. I.e. it +enables dynamic DNS config propagation. + +However, please be aware this feature is limited to applications that connect +directly and via a NIC session client to the NIC router. This is due to two +technical limitations. First, the router can't control the link state at +interfaces where he acts as NIC session client or Uplink session server. And +second, the router can't ensure that link state changes reach the client if +there are intermediate network components like a NIC bridge. The lifetime of an IP address assignment that was yet only offered to the client can be configured for all domains in the tag of the router: diff --git a/repos/os/src/server/nic_router/dhcp_server.cc b/repos/os/src/server/nic_router/dhcp_server.cc index 94652e4467..a0251021bc 100644 --- a/repos/os/src/server/nic_router/dhcp_server.cc +++ b/repos/os/src/server/nic_router/dhcp_server.cc @@ -223,14 +223,12 @@ Pointer Dhcp_server::_init_dns_config_from(Genode::Xml_node const node, } -bool Dhcp_server::ready() const +bool Dhcp_server::has_invalid_remote_dns_cfg() const { - if (!_dns_servers.empty()) { - return true; + if (_dns_config_from.valid()) { + return !_dns_config_from().ip_config().valid(); } - try { return _dns_config_from().ip_config().valid(); } - catch (Pointer::Invalid) { } - return true; + return false; } diff --git a/repos/os/src/server/nic_router/dhcp_server.h b/repos/os/src/server/nic_router/dhcp_server.h index a3e43d537e..28b0818db1 100644 --- a/repos/os/src/server/nic_router/dhcp_server.h +++ b/repos/os/src/server/nic_router/dhcp_server.h @@ -105,7 +105,7 @@ class Net::Dhcp_server : private Genode::Noncopyable, void free_ip(Domain const &domain, Ipv4_address const &ip); - bool ready() const; + bool has_invalid_remote_dns_cfg() const; template void for_each_dns_server_ip(FUNC && functor) const diff --git a/repos/os/src/server/nic_router/domain.cc b/repos/os/src/server/nic_router/domain.cc index a162527c44..bfbaf51f63 100644 --- a/repos/os/src/server/nic_router/domain.cc +++ b/repos/os/src/server/nic_router/domain.cc @@ -49,6 +49,26 @@ void Domain::_log_ip_config() const } +bool Domain::is_ready() const +{ + if (_dhcp_server.valid()) { + if (_dhcp_server().has_invalid_remote_dns_cfg()) { + return false; + } + } + return true; +} + + +void Domain::update_ready_state() +{ + bool const ready { is_ready() }; + _interfaces.for_each([&] (Interface &interface) { + interface.handle_domain_ready_state(ready); + }); +} + + void Domain::_prepare_reconstructing_ip_config() { if (!_ip_config_dynamic) { @@ -65,9 +85,7 @@ void Domain::_prepare_reconstructing_ip_config() interface.detach_from_ip_config(*this); }); _ip_config_dependents.for_each([&] (Domain &domain) { - domain._interfaces.for_each([&] (Interface &interface) { - interface.detach_from_remote_ip_config(); - }); + domain.update_ready_state(); }); /* dissolve foreign ARP waiters */ while (_foreign_arp_waiters.first()) { @@ -88,9 +106,7 @@ void Domain::_finish_reconstructing_ip_config() interface.attach_to_ip_config(*this, ip_config()); }); _ip_config_dependents.for_each([&] (Domain &domain) { - domain._interfaces.for_each([&] (Interface &interface) { - interface.attach_to_remote_ip_config(); - }); + domain.update_ready_state(); }); } else { _interfaces.for_each([&] (Interface &interface) { @@ -234,7 +250,7 @@ Domain::~Domain() Dhcp_server &Domain::dhcp_server() { Dhcp_server &dhcp_server = _dhcp_server(); - if (!dhcp_server.ready()) { + if (dhcp_server.has_invalid_remote_dns_cfg()) { throw Pointer::Invalid(); } return dhcp_server; diff --git a/repos/os/src/server/nic_router/domain.h b/repos/os/src/server/nic_router/domain.h index 2dfa4f234a..314b30299f 100644 --- a/repos/os/src/server/nic_router/domain.h +++ b/repos/os/src/server/nic_router/domain.h @@ -223,6 +223,10 @@ class Net::Domain : public Domain_base, void add_dropped_fragm_ipv4(unsigned long dropped_fragm_ipv4); + bool is_ready() const; + + void update_ready_state(); + /********* ** log ** diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 8d0958fddd..072e294ea0 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -337,7 +337,7 @@ Interface::_transport_rules(Domain &local_domain, L3_protocol const prot) const void Interface::_attach_to_domain_raw(Domain &domain) { _domain = domain; - _policy.interface_ready(); + _refetch_domain_ready_state(); _interfaces.remove(this); domain.attach_interface(*this); } @@ -349,7 +349,7 @@ void Interface::_detach_from_domain_raw() domain.detach_interface(*this); _interfaces.insert(this); _domain = Pointer(); - _policy.interface_unready(); + _refetch_domain_ready_state(); domain.add_dropped_fragm_ipv4(_dropped_fragm_ipv4); domain.tcp_stats().dissolve_interface(_tcp_stats); @@ -367,7 +367,7 @@ void Interface::_update_domain_object(Domain &new_domain) { old_domain.interface_updates_domain_object(*this); _interfaces.insert(this); _domain = Pointer(); - _policy.interface_unready(); + _refetch_domain_ready_state(); old_domain.add_dropped_fragm_ipv4(_dropped_fragm_ipv4); old_domain.tcp_stats().dissolve_interface(_tcp_stats); @@ -378,7 +378,7 @@ void Interface::_update_domain_object(Domain &new_domain) { /* attach raw */ _domain = new_domain; - _policy.interface_ready(); + _refetch_domain_ready_state(); _interfaces.remove(this); new_domain.attach_interface(*this); } @@ -452,18 +452,26 @@ void Interface::detach_from_ip_config(Domain &domain) } -void Interface::detach_from_remote_ip_config() +void Interface::handle_domain_ready_state(bool state) { - /* only the DNS server address of the local DHCP server can be remote */ - _policy.interface_unready(); - + _policy.handle_domain_ready_state(state); } -void Interface::attach_to_remote_ip_config() +void Interface::_refetch_domain_ready_state() { - /* only the DNS server address of the local DHCP server can be remote */ - _policy.interface_ready(); + if (_domain.valid()) { + handle_domain_ready_state(_domain().is_ready()); + } else { + handle_domain_ready_state(false); + } +} + + +void Interface::_reset_and_refetch_domain_ready_state() +{ + _policy.handle_domain_ready_state(false); + _refetch_domain_ready_state(); } @@ -2138,8 +2146,7 @@ void Interface::_update_dhcp_allocations(Domain &old_domain, } } if (dhcp_clients_outdated) { - _policy.interface_unready(); - _policy.interface_ready(); + _reset_and_refetch_domain_ready_state(); } } diff --git a/repos/os/src/server/nic_router/interface.h b/repos/os/src/server/nic_router/interface.h index 7a45753c3f..c97d9ac7e8 100644 --- a/repos/os/src/server/nic_router/interface.h +++ b/repos/os/src/server/nic_router/interface.h @@ -103,9 +103,7 @@ struct Net::Interface_policy virtual Genode::Session_label const &label() const = 0; - virtual void interface_ready() = 0; - - virtual void interface_unready() = 0; + virtual void handle_domain_ready_state(bool) = 0; virtual bool interface_link_state() const = 0; @@ -367,6 +365,10 @@ class Net::Interface : private Interface_list::Element void _handle_pkt_stream_signal(); + void _reset_and_refetch_domain_ready_state(); + + void _refetch_domain_ready_state(); + public: struct Free_resources_and_retry_handle_eth : Genode::Exception { L3_protocol prot; Free_resources_and_retry_handle_eth(L3_protocol prot = (L3_protocol)0) : prot(prot) { } }; @@ -456,6 +458,8 @@ class Net::Interface : private Interface_list::Element void report(Genode::Xml_generator &xml); + void handle_domain_ready_state(bool state); + /*************** ** Accessors ** diff --git a/repos/os/src/server/nic_router/nic_client.cc b/repos/os/src/server/nic_router/nic_client.cc index e232b227e6..15829078d3 100644 --- a/repos/os/src/server/nic_router/nic_client.cc +++ b/repos/os/src/server/nic_router/nic_client.cc @@ -127,21 +127,15 @@ Net::Nic_client_interface_base:: { } -void Net::Nic_client_interface_base::interface_unready() +void Net::Nic_client_interface_base::handle_domain_ready_state(bool state) { - _interface_ready = false; -}; - - -void Net::Nic_client_interface_base::interface_ready() -{ - _interface_ready = true; -}; + _domain_ready = state; +} bool Net::Nic_client_interface_base::interface_link_state() const { - return _interface_ready && _session_link_state; + return _domain_ready && _session_link_state; } diff --git a/repos/os/src/server/nic_router/nic_client.h b/repos/os/src/server/nic_router/nic_client.h index 5dbc780d0a..3615c1c247 100644 --- a/repos/os/src/server/nic_router/nic_client.h +++ b/repos/os/src/server/nic_router/nic_client.h @@ -107,7 +107,7 @@ class Net::Nic_client_interface_base : public Interface_policy Const_reference _domain_name; Genode::Session_label const _label; bool const &_session_link_state; - bool _interface_ready { false }; + bool _domain_ready { false }; /*************************** @@ -117,8 +117,7 @@ class Net::Nic_client_interface_base : public Interface_policy Domain_name determine_domain_name() const override { return _domain_name(); }; void handle_config(Configuration const &) override { } Genode::Session_label const &label() const override { return _label; } - void interface_unready() override; - void interface_ready() override; + void handle_domain_ready_state(bool state) override; bool interface_link_state() const override; public: diff --git a/repos/os/src/server/nic_router/nic_session_root.cc b/repos/os/src/server/nic_router/nic_session_root.cc index 2efe2205cf..1b5e98019d 100644 --- a/repos/os/src/server/nic_router/nic_session_root.cc +++ b/repos/os/src/server/nic_router/nic_session_root.cc @@ -52,7 +52,7 @@ Interface_policy::Interface_policy(Genode::Session_label const &label, _config { config }, _session_env { session_env } { - _session_link_state_transition(UP); + _session_link_state_transition(DOWN); } @@ -86,70 +86,72 @@ Interface_policy::_session_link_state_transition(Transient_link_state tls) } -void Net::Nic_session_component::Interface_policy::interface_unready() +void Net:: +Nic_session_component::Interface_policy::handle_domain_ready_state(bool state) { - switch (_transient_link_state) { - case UP_ACKNOWLEDGED: + if (state) { - _session_link_state_transition(DOWN); - break; + switch (_transient_link_state) { + case DOWN_ACKNOWLEDGED: - case UP: + _session_link_state_transition(UP); + break; - _transient_link_state = UP_DOWN; - break; + case DOWN: - case DOWN_UP: + _transient_link_state = DOWN_UP; + break; - _transient_link_state = DOWN_UP_DOWN; - break; + case UP_DOWN: - case UP_DOWN: + _transient_link_state = UP_DOWN_UP; + break; - break; + case DOWN_UP: - case UP_DOWN_UP: + break; - _transient_link_state = UP_DOWN; - break; + case DOWN_UP_DOWN: - case DOWN_ACKNOWLEDGED: break; - case DOWN: break; - case DOWN_UP_DOWN: break; - } -} + _transient_link_state = DOWN_UP; + break; + case UP_ACKNOWLEDGED: break; + case UP: break; + case UP_DOWN_UP: break; + } -void Net::Nic_session_component::Interface_policy::interface_ready() -{ - switch (_transient_link_state) { - case DOWN_ACKNOWLEDGED: + } else { - _session_link_state_transition(UP); - break; + switch (_transient_link_state) { + case UP_ACKNOWLEDGED: - case DOWN: + _session_link_state_transition(DOWN); + break; - _transient_link_state = DOWN_UP; - break; + case UP: - case UP_DOWN: + _transient_link_state = UP_DOWN; + break; - _transient_link_state = UP_DOWN_UP; - break; + case DOWN_UP: - case DOWN_UP: + _transient_link_state = DOWN_UP_DOWN; + break; - break; + case UP_DOWN: - case DOWN_UP_DOWN: + break; - _transient_link_state = DOWN_UP; - break; + case UP_DOWN_UP: - case UP_ACKNOWLEDGED: break; - case UP: break; - case UP_DOWN_UP: break; + _transient_link_state = UP_DOWN; + break; + + case DOWN_ACKNOWLEDGED: break; + case DOWN: break; + case DOWN_UP_DOWN: break; + } } } diff --git a/repos/os/src/server/nic_router/nic_session_root.h b/repos/os/src/server/nic_router/nic_session_root.h index 1b92414490..81d45c5b90 100644 --- a/repos/os/src/server/nic_router/nic_session_root.h +++ b/repos/os/src/server/nic_router/nic_session_root.h @@ -118,8 +118,7 @@ class Net::Nic_session_component : private Nic_session_component_base, void handle_config(Configuration const &config) override { _config = config; } Genode::Session_label const &label() const override { return _label; } void report(Genode::Xml_generator &xml) const override { _session_env.report(xml); }; - void interface_unready() override; - void interface_ready() override; + void handle_domain_ready_state(bool state) override; bool interface_link_state() const override; }; diff --git a/repos/os/src/server/nic_router/uplink_session_root.h b/repos/os/src/server/nic_router/uplink_session_root.h index 70c6bc68f7..a43142496b 100644 --- a/repos/os/src/server/nic_router/uplink_session_root.h +++ b/repos/os/src/server/nic_router/uplink_session_root.h @@ -82,8 +82,7 @@ class Net::Uplink_session_component : private Uplink_session_component_base, void handle_config(Configuration const &config) override { _config = config; } Genode::Session_label const &label() const override { return _label; } void report(Genode::Xml_generator &xml) const override { _session_env.report(xml); }; - void interface_unready() override { } - void interface_ready() override { } + void handle_domain_ready_state(bool /* state */) override { } bool interface_link_state() const override { return true; } }; From 20df224b19d1d1336d4f896822a5c4fcffd4c923 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 15 Sep 2022 14:05:06 +0200 Subject: [PATCH 244/354] dde_rump: increase max I/O request size to 1 MiB With the increase of MAXPHYS, the rump kernel requests a contiguous allocation of 2101248 bytes, which exceeds the allocator's block size of 2 MiB. Error: backend allocator: Unable to allocate memory (size: 2101248 align: 12) The patch avoids this corner case by increasing the allocator's block size to 4 MiB. Fixes #4613 --- repos/dde_rump/lib/mk/rump_common.inc | 2 +- repos/dde_rump/run/libc_vfs_ext2.run | 2 +- repos/dde_rump/run/libc_vfs_fs_ext2.run | 2 +- repos/dde_rump/run/rump_ext2.run | 4 ++-- repos/dde_rump/src/include/util/allocator_fap.h | 2 +- repos/dde_rump/src/lib/rump/io.cc | 10 +++++++++- repos/libports/run/libc_vfs_filesystem_test.inc | 4 ++-- repos/ports/run/virtualbox_auto.inc | 4 ++-- 8 files changed, 19 insertions(+), 11 deletions(-) diff --git a/repos/dde_rump/lib/mk/rump_common.inc b/repos/dde_rump/lib/mk/rump_common.inc index ce4aa7dfbb..dc02245539 100644 --- a/repos/dde_rump/lib/mk/rump_common.inc +++ b/repos/dde_rump/lib/mk/rump_common.inc @@ -1,7 +1,7 @@ RUMP_PORT_DIR := $(call select_from_ports,dde_rump)/src/lib/dde_rump RUMP_BASE := $(BUILD_BASE_DIR)/var/libcache/rump -CC_C_OPT += -D__NetBSD__ -D'CTASSERT(x)=' -DMAXPHYS=32768 -D_RUMP_NATIVE_ABI \ +CC_C_OPT += -D__NetBSD__ -D'CTASSERT(x)=' -DMAXPHYS=1048576 -D_RUMP_NATIVE_ABI \ -DMAXUSERS=32 -DCOMPAT_50=1 -DCOMPAT_60=1 -DDIAGNOSTIC -DKTRACE \ -DRUMP_KERNEL_IS_LIBC -D_RUMPKERNEL -D_KERNEL -DMULTIPROCESSOR \ -D_MODULE -DMODULAR -DRUMP_USE_CTOR diff --git a/repos/dde_rump/run/libc_vfs_ext2.run b/repos/dde_rump/run/libc_vfs_ext2.run index 653ea3d72c..12b02f39e1 100644 --- a/repos/dde_rump/run/libc_vfs_ext2.run +++ b/repos/dde_rump/run/libc_vfs_ext2.run @@ -3,7 +3,7 @@ set mkfs_opts "-F" set test_build_components "lib/vfs_rump" -set test_vfs_config "" +set test_vfs_config "" set test_boot_modules { rump_fs.lib.so diff --git a/repos/dde_rump/run/libc_vfs_fs_ext2.run b/repos/dde_rump/run/libc_vfs_fs_ext2.run index 205435e502..653d6e740c 100644 --- a/repos/dde_rump/run/libc_vfs_fs_ext2.run +++ b/repos/dde_rump/run/libc_vfs_fs_ext2.run @@ -8,7 +8,7 @@ set mkfs_opts "-F" set test_build_components "lib/vfs_rump" -set test_vfs_config "" +set test_vfs_config "" set test_boot_modules { rump_fs.lib.so diff --git a/repos/dde_rump/run/rump_ext2.run b/repos/dde_rump/run/rump_ext2.run index 592c7e137a..00697e0dfa 100644 --- a/repos/dde_rump/run/rump_ext2.run +++ b/repos/dde_rump/run/rump_ext2.run @@ -39,7 +39,7 @@ create_boot_directory # Generate config # append config { - + @@ -73,7 +73,7 @@ append config { - + diff --git a/repos/dde_rump/src/include/util/allocator_fap.h b/repos/dde_rump/src/include/util/allocator_fap.h index 2481470b82..499de98a28 100644 --- a/repos/dde_rump/src/include/util/allocator_fap.h +++ b/repos/dde_rump/src/include/util/allocator_fap.h @@ -56,7 +56,7 @@ namespace Allocator { private: enum { - BLOCK_SIZE = 2 * 1024 * 1024, /* 2 MB */ + BLOCK_SIZE = 4 * 1024 * 1024, /* bytes */ ELEMENTS = VM_SIZE / BLOCK_SIZE, /* MAX number of dataspaces in VM */ }; diff --git a/repos/dde_rump/src/lib/rump/io.cc b/repos/dde_rump/src/lib/rump/io.cc index 67b95f1e1f..f710df4f5b 100644 --- a/repos/dde_rump/src/lib/rump/io.cc +++ b/repos/dde_rump/src/lib/rump/io.cc @@ -107,7 +107,15 @@ class Backend Genode::Allocator_avl _alloc { &Rump::env().heap() }; Genode::Entrypoint &_ep { Rump::env().env().ep() }; - Block::Connection _session { Rump::env().env(), &_alloc }; + + /* + * The tx_buf_size is chosen such that one I/O request fits into the + * I/O buffer at once. The size of NetBSD's I/O requests is bounded by + * the definition of MAXPHYS. The 64 KiB are added to account for the + * space needed for the submit/ack queues. + */ + Block::Connection _session { Rump::env().env(), &_alloc, + 1024*1024 + 64*1024 }; Block::Session::Info _info { _session.info() }; Genode::Mutex _session_mutex; Io_signal_blockade _io_signal_blockade { _ep, diff --git a/repos/libports/run/libc_vfs_filesystem_test.inc b/repos/libports/run/libc_vfs_filesystem_test.inc index 6c2386a87a..48fab0b55c 100644 --- a/repos/libports/run/libc_vfs_filesystem_test.inc +++ b/repos/libports/run/libc_vfs_filesystem_test.inc @@ -68,7 +68,7 @@ set config { - + } append_if [have_include "power_on/qemu"] config { @@ -104,7 +104,7 @@ append config { append_if $use_vfs_server config " - + diff --git a/repos/ports/run/virtualbox_auto.inc b/repos/ports/run/virtualbox_auto.inc index ea0884506b..ab50964b12 100644 --- a/repos/ports/run/virtualbox_auto.inc +++ b/repos/ports/run/virtualbox_auto.inc @@ -152,11 +152,11 @@ append_if [have_spec nova] config { append_if [expr $use_rumpfs] config { - + - + } append_if [expr $use_rumpfs && $use_ram_fs && $use_overlay_from_disk] config { From 8bccc6e68f72049218f65c818877a025d7a693f3 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 15 Sep 2022 14:16:26 +0200 Subject: [PATCH 245/354] cached_fs_rom: increase fs buffer size to 4 MiB The default file-system communication-buffer size of 128 KiB combined with the clamping of requests to 1/4th the buffer size results in the fragementation of read operations into 32 KiB chunks. This is overly conservative and causes high context-switch overhead down the storage stack (vfs server -> part_block -> block driver). Related to #4613 --- repos/os/src/server/cached_fs_rom/main.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/os/src/server/cached_fs_rom/main.cc b/repos/os/src/server/cached_fs_rom/main.cc index cae731c3cd..5afb7cf95e 100755 --- a/repos/os/src/server/cached_fs_rom/main.cc +++ b/repos/os/src/server/cached_fs_rom/main.cc @@ -167,7 +167,7 @@ struct Cached_fs_rom::Transfer final if (!_fs.tx()->ready_to_submit()) throw Packet_alloc_failed(); - size_t chunk_size = (size_t)min(_size, _fs.tx()->bulk_buffer_size()/4); + size_t chunk_size = (size_t)min(_size, _fs.tx()->bulk_buffer_size()/2); return _fs.tx()->alloc_packet(chunk_size); } @@ -280,7 +280,7 @@ struct Cached_fs_rom::Main final : Genode::Session_request_handler Heap heap { env.pd(), env.rm() }; Allocator_avl fs_tx_block_alloc { &heap }; - File_system::Connection fs { env, fs_tx_block_alloc }; + File_system::Connection fs { env, fs_tx_block_alloc, "", "/", false, 4*1024*1024 }; Session_requests_rom session_requests { env, *this }; From 0ff755b236c43e01da25ec2ff1e1e696c48e02bb Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 15 Sep 2022 16:27:05 +0200 Subject: [PATCH 246/354] menu_view: remove minor code redundancy This is a follow-up commit for "menu_view: configurable alpha channel and bg color", which simplifies the code. The '_no_alpha' surface is not needed because the 'Gui_buffer' provides a 0x0 alpha surface when using the opaque mode. --- repos/gems/src/app/menu_view/main.cc | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/repos/gems/src/app/menu_view/main.cc b/repos/gems/src/app/menu_view/main.cc index afc4804d4e..ae04f2f673 100644 --- a/repos/gems/src/app/menu_view/main.cc +++ b/repos/gems/src/app/menu_view/main.cc @@ -41,11 +41,6 @@ struct Menu_view::Main Constructible _buffer { }; - /** - * Alpha surface used when operating in opaque mode - */ - Surface _no_alpha { nullptr, Area(0,0) }; - Gui::Session::View_handle _view_handle = _gui.create_view(); /** @@ -422,7 +417,7 @@ void Menu_view::Main::_handle_frame_timer() // don't perform a full dialog update _buffer->apply_to_surface([&] (Surface &pixel, Surface &alpha) { - _root_widget.draw(pixel, _opaque ? _no_alpha : alpha, Point(0, 0)); + _root_widget.draw(pixel, alpha, Point(0, 0)); }); _buffer->flush_surface(); From c0e303632e7811555643d664012d9568801c0ae1 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Thu, 15 Sep 2022 16:35:22 +0200 Subject: [PATCH 247/354] gems: fix clipping in polygon_gfx/line_painter.h This clipping check happened to wrongly test the surface's clipping area instead of the by 1x1 pixel reduced 'clip' rectangle. --- repos/gems/include/polygon_gfx/line_painter.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/repos/gems/include/polygon_gfx/line_painter.h b/repos/gems/include/polygon_gfx/line_painter.h index 65df7f621a..fed44197a3 100644 --- a/repos/gems/include/polygon_gfx/line_painter.h +++ b/repos/gems/include/polygon_gfx/line_painter.h @@ -128,9 +128,12 @@ struct Line_painter */ Rect const clip(surface.clip().p1(), surface.clip().p2() + Point(-1, -1)); + if (!clip.valid()) + return; + /* both points must reside within clipping area */ - if (!surface.clip().contains(Point(x1.integer(), y1.integer())) || - !surface.clip().contains(Point(x2.integer(), y2.integer()))) + if (!clip.contains(Point(x1.integer(), y1.integer())) || + !clip.contains(Point(x2.integer(), y2.integer()))) return; long const dx_f = x2.value - x1.value, From f25070d441c3e2d8e5370e4a9e88dca7cff83466 Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Fri, 9 Sep 2022 14:41:24 +0200 Subject: [PATCH 248/354] irq_connection: add constructor with session label When creating an Irq connection to a component (not core), e.g. a pin driver, we typically need a to provide a session label in order to apply a session policy and to distinguish multiple sessions from the same component. genodelabs/genode#4606 --- repos/base/include/irq_session/connection.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/repos/base/include/irq_session/connection.h b/repos/base/include/irq_session/connection.h index 38cb643640..f4b8f85ced 100644 --- a/repos/base/include/irq_session/connection.h +++ b/repos/base/include/irq_session/connection.h @@ -42,6 +42,26 @@ struct Genode::Irq_connection : Connection, Irq_session_client irq, trigger, polarity, device_config_phys)), Irq_session_client(cap()) { } + + /** + * Constructor for label-based configuration (used by pin driver) + * + * \param label session label + */ + Irq_connection(Env &env, + char const *label) + : + Connection(env, session(env.parent(), + "ram_quota=%u, cap_quota=%u, " + "irq_number=%u, irq_trigger=%u, " + "irq_polarity=%u, device_config_phys=0x%lx, " + "label=\"%s\"", + RAM_QUOTA, CAP_QUOTA, 0, + Irq_session::TRIGGER_UNCHANGED, + Irq_session::POLARITY_UNCHANGED, + 0, label)), + Irq_session_client(cap()) + { } }; #endif /* _INCLUDE__IRQ_SESSION__CONNECTION_H_ */ From 4b9fb10fdbc73159b1ad5f4f9b1834ea85597551 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 31 Aug 2022 11:30:37 +0200 Subject: [PATCH 249/354] platform_drv: aquire_single_device return first * Only acquire and return the first device Fix genodelabs/genode#4614 --- repos/os/src/drivers/platform/session_component.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/os/src/drivers/platform/session_component.cc b/repos/os/src/drivers/platform/session_component.cc index 6f15cb535b..7529105cca 100644 --- a/repos/os/src/drivers/platform/session_component.cc +++ b/repos/os/src/drivers/platform/session_component.cc @@ -153,7 +153,7 @@ Session_component::acquire_single_device() Capability cap; _devices.for_each([&] (Device & dev) { - if (matches(dev) && !dev.owner().valid()) + if (!cap.valid() && matches(dev) && !dev.owner().valid()) cap = _acquire(dev); }); return cap; From 0370b0fa23e969cb82a339265c7d1229759a7b72 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 14 Sep 2022 13:30:29 +0200 Subject: [PATCH 250/354] platform_drv: fix reference count in "Switch" class Only decrement by 1 in the "unuse" function. --- repos/os/src/drivers/platform/types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/os/src/drivers/platform/types.h b/repos/os/src/drivers/platform/types.h index 54b93f8f93..bc0c07069e 100644 --- a/repos/os/src/drivers/platform/types.h +++ b/repos/os/src/drivers/platform/types.h @@ -58,7 +58,7 @@ namespace Driver { _count--; - if (--_count == 0) + if (_count == 0) (_dev.*_deactivate)(); } }; From dda168fc102843484a06b1b11e230f8fef8d4dc0 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 2 Sep 2022 13:35:13 +0200 Subject: [PATCH 251/354] platform API: simplify _wait_for_device Fix genodelabs/genode#4615 --- .../os/include/platform_session/connection.h | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/repos/os/include/platform_session/connection.h b/repos/os/include/platform_session/connection.h index 350c8c7a1d..fbfa62a024 100644 --- a/repos/os/include/platform_session/connection.h +++ b/repos/os/include/platform_session/connection.h @@ -39,10 +39,11 @@ class Platform::Connection : public Genode::Connection, friend class Device; friend class Dma_buffer; - Env &_env; - Rom_session_client _rom {devices_rom()}; - Constructible _ds {}; - Constructible> _handler {}; + Env & _env; + Rom_session_client _rom { devices_rom() }; + Constructible _ds {}; + Io_signal_handler _handler { _env.ep(), *this, + &Connection::_handle_io }; void _try_attach() { @@ -60,19 +61,8 @@ class Platform::Connection : public Genode::Connection, for (;;) { /* repeatedly check for availability of device */ Capability cap = fn(); - if (cap.valid()) { - if (_handler.constructed()) { - sigh(Signal_context_capability()); - _handler.destruct(); - } + if (cap.valid()) return cap; - } - - if (!_handler.constructed()) { - _handler.construct(_env.ep(), *this, - &Connection::_handle_io); - sigh(*_handler); - } _env.ep().wait_and_dispatch_one_io_signal(); } @@ -89,6 +79,12 @@ class Platform::Connection : public Genode::Connection, _env(env) { _try_attach(); + + /* + * Initially register dummy handler, to be able to receive signals + * if _wait_for_device probes for a valid devices rom + */ + sigh(_handler); } void update() From 548c3b46ad4cfe0895b4e274d7f8612c0222616a Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 19 Sep 2022 09:32:54 +0200 Subject: [PATCH 252/354] test-trace_buffer: increase thread stack to 8K Prevents warnings on x86_32/linux. --- repos/os/src/test/trace_buffer/main.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/os/src/test/trace_buffer/main.cc b/repos/os/src/test/trace_buffer/main.cc index 325d506ca7..990d13c0d1 100644 --- a/repos/os/src/test/trace_buffer/main.cc +++ b/repos/os/src/test/trace_buffer/main.cc @@ -168,7 +168,7 @@ struct Test_thread : Thread } Test_thread(Env &env, Trace::Buffer &buffer, unsigned delay) - : Thread(env, "producer", 1024 * sizeof(addr_t)), + : Thread(env, "producer", 8*1024), env(env), buffer(buffer), delay(delay) From 3f1870841c8830d8eb0802b352ff0588b38a83b4 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 21 Sep 2022 12:16:46 +0200 Subject: [PATCH 253/354] depot: update recipe hashes --- repos/base-fiasco/recipes/src/base-fiasco/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash | 2 +- repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash | 2 +- repos/base-foc/recipes/src/base-foc-pbxa9/hash | 2 +- repos/base-foc/recipes/src/base-foc-pc/hash | 2 +- repos/base-foc/recipes/src/base-foc-rpi3/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash | 2 +- repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash | 2 +- repos/base-hw/recipes/src/base-hw-nit6_solox/hash | 2 +- repos/base-hw/recipes/src/base-hw-pbxa9/hash | 2 +- repos/base-hw/recipes/src/base-hw-pc/hash | 2 +- repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash | 2 +- repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash | 2 +- repos/base-linux/recipes/api/base-linux/hash | 2 +- repos/base-linux/recipes/src/base-linux/hash | 2 +- repos/base-nova/recipes/src/base-nova/hash | 2 +- repos/base-okl4/recipes/src/base-okl4/hash | 2 +- repos/base-pistachio/recipes/src/base-pistachio/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash | 2 +- repos/base-sel4/recipes/src/base-sel4-x86/hash | 2 +- repos/base/recipes/api/base/hash | 2 +- repos/base/recipes/pkg/test-ds_ownership/hash | 2 +- repos/base/recipes/pkg/test-entrypoint/hash | 2 +- repos/base/recipes/pkg/test-log/hash | 2 +- repos/base/recipes/pkg/test-mmio/hash | 2 +- repos/base/recipes/pkg/test-new_delete/hash | 2 +- repos/base/recipes/pkg/test-reconstructible/hash | 2 +- repos/base/recipes/pkg/test-registry/hash | 2 +- repos/base/recipes/pkg/test-rm_fault/hash | 2 +- repos/base/recipes/pkg/test-rm_fault_no_nox/hash | 2 +- repos/base/recipes/pkg/test-rm_nested/hash | 2 +- repos/base/recipes/pkg/test-rm_stress/hash | 2 +- repos/base/recipes/pkg/test-sanitizer/hash | 2 +- repos/base/recipes/pkg/test-stack_smash/hash | 2 +- repos/base/recipes/pkg/test-synced_interface/hash | 2 +- repos/base/recipes/pkg/test-timer/hash | 2 +- repos/base/recipes/pkg/test-tls/hash | 2 +- repos/base/recipes/pkg/test-token/hash | 2 +- repos/base/recipes/pkg/test-xml_generator/hash | 2 +- repos/base/recipes/pkg/test-xml_node/hash | 2 +- repos/base/recipes/src/test-ds_ownership/hash | 2 +- repos/base/recipes/src/test-entrypoint/hash | 2 +- repos/base/recipes/src/test-log/hash | 2 +- repos/base/recipes/src/test-mmio/hash | 2 +- repos/base/recipes/src/test-new_delete/hash | 2 +- repos/base/recipes/src/test-reconstructible/hash | 2 +- repos/base/recipes/src/test-registry/hash | 2 +- repos/base/recipes/src/test-rm_fault/hash | 2 +- repos/base/recipes/src/test-rm_nested/hash | 2 +- repos/base/recipes/src/test-rm_stress/hash | 2 +- repos/base/recipes/src/test-sanitizer/hash | 2 +- repos/base/recipes/src/test-segfault/hash | 2 +- repos/base/recipes/src/test-stack_smash/hash | 2 +- repos/base/recipes/src/test-synced_interface/hash | 2 +- repos/base/recipes/src/test-timer/hash | 2 +- repos/base/recipes/src/test-tls/hash | 2 +- repos/base/recipes/src/test-token/hash | 2 +- repos/base/recipes/src/test-xml_generator/hash | 2 +- repos/base/recipes/src/test-xml_node/hash | 2 +- repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash | 2 +- repos/dde_bsd/recipes/src/bsd_audio_drv/hash | 2 +- repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash | 2 +- repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash | 2 +- repos/dde_linux/recipes/pkg/usb_modem_drv/hash | 2 +- repos/dde_linux/recipes/pkg/wireguard/hash | 2 +- repos/dde_linux/recipes/src/fec_nic_drv/hash | 2 +- repos/dde_linux/recipes/src/legacy_usb_host_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_hid_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_modem_drv/hash | 2 +- repos/dde_linux/recipes/src/usb_net_drv/hash | 2 +- repos/dde_linux/recipes/src/vfs_lxip/hash | 2 +- repos/dde_linux/recipes/src/wireguard/hash | 2 +- repos/dde_rump/recipes/pkg/ext2_fs/hash | 2 +- repos/dde_rump/recipes/src/rump/hash | 2 +- repos/demo/recipes/src/demo/hash | 2 +- repos/gems/recipes/api/gems/hash | 2 +- repos/gems/recipes/api/polygon_gfx/hash | 2 +- repos/gems/recipes/pkg/backdrop/hash | 2 +- repos/gems/recipes/pkg/cbe_check/hash | 2 +- repos/gems/recipes/pkg/cbe_demo/hash | 2 +- repos/gems/recipes/pkg/cbe_fs/hash | 2 +- repos/gems/recipes/pkg/cbe_init/hash | 2 +- repos/gems/recipes/pkg/cbe_shell/hash | 2 +- repos/gems/recipes/pkg/cbe_ta_fs/hash | 2 +- repos/gems/recipes/pkg/cbe_ta_vfs/hash | 2 +- repos/gems/recipes/pkg/cbe_vbox5-nova/hash | 2 +- repos/gems/recipes/pkg/cbe_vfs/hash | 2 +- repos/gems/recipes/pkg/cbe_vm_fs/hash | 2 +- repos/gems/recipes/pkg/depot_download/hash | 2 +- repos/gems/recipes/pkg/download_coreplus/hash | 2 +- repos/gems/recipes/pkg/drivers_managed-pc/hash | 2 +- repos/gems/recipes/pkg/drivers_nic-pc/hash | 2 +- repos/gems/recipes/pkg/file_vault/hash | 2 +- repos/gems/recipes/pkg/fonts_fs/hash | 2 +- repos/gems/recipes/pkg/motif_decorator/hash | 2 +- repos/gems/recipes/pkg/motif_wm/hash | 2 +- repos/gems/recipes/pkg/nano3d/hash | 2 +- repos/gems/recipes/pkg/sculpt/hash | 2 +- repos/gems/recipes/pkg/sculpt_distribution-pc/hash | 2 +- repos/gems/recipes/pkg/sculpt_distribution/hash | 2 +- repos/gems/recipes/pkg/sticks_blue_backdrop/hash | 2 +- repos/gems/recipes/pkg/terminal/hash | 2 +- repos/gems/recipes/pkg/test-depot_query_index/hash | 2 +- repos/gems/recipes/pkg/test-fs_tool/hash | 2 +- repos/gems/recipes/pkg/test-libc_vfs_audit/hash | 2 +- repos/gems/recipes/pkg/themed_decorator/hash | 2 +- repos/gems/recipes/pkg/themed_wm/hash | 2 +- repos/gems/recipes/pkg/touch_keyboard/hash | 2 +- repos/gems/recipes/pkg/trace_fs/hash | 2 +- repos/gems/recipes/pkg/trace_recorder/hash | 2 +- repos/gems/recipes/pkg/window_layouter/hash | 2 +- repos/gems/recipes/pkg/wm/hash | 2 +- repos/gems/recipes/src/backdrop/hash | 2 +- repos/gems/recipes/src/cbe/hash | 2 +- repos/gems/recipes/src/cpu_load_display/hash | 2 +- repos/gems/recipes/src/decorator/hash | 2 +- repos/gems/recipes/src/depot_deploy/hash | 2 +- repos/gems/recipes/src/depot_download_manager/hash | 2 +- repos/gems/recipes/src/depot_query/hash | 2 +- repos/gems/recipes/src/driver_manager/hash | 2 +- repos/gems/recipes/src/file_terminal/hash | 2 +- repos/gems/recipes/src/file_vault/hash | 2 +- repos/gems/recipes/src/fs_query/hash | 2 +- repos/gems/recipes/src/fs_tool/hash | 2 +- repos/gems/recipes/src/gpt_write/hash | 2 +- repos/gems/recipes/src/gui_fader/hash | 2 +- repos/gems/recipes/src/menu_view/hash | 2 +- repos/gems/recipes/src/mixer_gui_qt/hash | 2 +- repos/gems/recipes/src/nano3d/hash | 2 +- repos/gems/recipes/src/sculpt_manager/hash | 2 +- repos/gems/recipes/src/terminal/hash | 2 +- repos/gems/recipes/src/test-tiled_wm/hash | 2 +- repos/gems/recipes/src/text_area/hash | 2 +- repos/gems/recipes/src/themed_decorator/hash | 2 +- repos/gems/recipes/src/touch_keyboard/hash | 2 +- repos/gems/recipes/src/trace_recorder/hash | 2 +- repos/gems/recipes/src/trace_recorder_policy/hash | 2 +- repos/gems/recipes/src/vfs_audit/hash | 2 +- repos/gems/recipes/src/vfs_gpu/hash | 2 +- repos/gems/recipes/src/vfs_import/hash | 2 +- repos/gems/recipes/src/vfs_pipe/hash | 2 +- repos/gems/recipes/src/vfs_trace/hash | 2 +- repos/gems/recipes/src/vfs_ttf/hash | 2 +- repos/gems/recipes/src/window_layouter/hash | 2 +- repos/gems/recipes/src/wm/hash | 2 +- repos/libports/recipes/api/libgcov/hash | 2 +- repos/libports/recipes/pkg/acpica/hash | 2 +- repos/libports/recipes/pkg/gcov/hash | 2 +- repos/libports/recipes/pkg/mesa_gears/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-cpu/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash | 2 +- repos/libports/recipes/pkg/mesa_gpu-intel/hash | 2 +- repos/libports/recipes/pkg/pdf_view/hash | 2 +- repos/libports/recipes/pkg/qt5_textedit/hash | 2 +- repos/libports/recipes/pkg/system_clock-pc/hash | 2 +- repos/libports/recipes/pkg/system_rtc-linux/hash | 2 +- repos/libports/recipes/pkg/system_rtc-pc/hash | 2 +- repos/libports/recipes/pkg/test-expat/hash | 2 +- repos/libports/recipes/pkg/test-ldso/hash | 2 +- repos/libports/recipes/pkg/test-libc/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lwip/hash | 2 +- repos/libports/recipes/pkg/test-libc_connect_lxip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash | 2 +- .../libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash | 2 +- repos/libports/recipes/pkg/test-libc_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_execve/hash | 2 +- repos/libports/recipes/pkg/test-libc_fifo_pipe/hash | 2 +- repos/libports/recipes/pkg/test-libc_fork/hash | 2 +- repos/libports/recipes/pkg/test-libc_getenv/hash | 2 +- repos/libports/recipes/pkg/test-libc_pipe/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_counter/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash | 2 +- repos/libports/recipes/pkg/test-libc_vfs_ram/hash | 2 +- repos/libports/recipes/pkg/test-pthread/hash | 2 +- repos/libports/recipes/pkg/test-sequence/hash | 2 +- repos/libports/recipes/pkg/test-spark/hash | 2 +- repos/libports/recipes/pkg/test-spark_exception/hash | 2 +- repos/libports/recipes/pkg/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/pkg/test-stdcxx/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash | 2 +- repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash | 2 +- repos/libports/recipes/pkg/usb_webcam/hash | 2 +- repos/libports/recipes/src/acpica/hash | 2 +- repos/libports/recipes/src/curl/hash | 2 +- repos/libports/recipes/src/expat/hash | 2 +- repos/libports/recipes/src/extract/hash | 2 +- repos/libports/recipes/src/fetchurl/hash | 2 +- repos/libports/recipes/src/ffi/hash | 2 +- repos/libports/recipes/src/freetype/hash | 2 +- repos/libports/recipes/src/gcov/hash | 2 +- repos/libports/recipes/src/gmp/hash | 2 +- repos/libports/recipes/src/icu/hash | 2 +- repos/libports/recipes/src/jbig2dec/hash | 2 +- repos/libports/recipes/src/jpeg/hash | 2 +- repos/libports/recipes/src/libarchive/hash | 2 +- repos/libports/recipes/src/libc/hash | 2 +- repos/libports/recipes/src/libdrm/hash | 2 +- repos/libports/recipes/src/libiconv/hash | 2 +- repos/libports/recipes/src/liblzma/hash | 2 +- repos/libports/recipes/src/libpng/hash | 2 +- repos/libports/recipes/src/libqgenodeviewwidget/hash | 2 +- repos/libports/recipes/src/libqpluginwidget/hash | 2 +- repos/libports/recipes/src/libsparkcrypto/hash | 2 +- repos/libports/recipes/src/libssh/hash | 2 +- repos/libports/recipes/src/libusb/hash | 2 +- repos/libports/recipes/src/libuvc/hash | 2 +- repos/libports/recipes/src/libyuv/hash | 2 +- repos/libports/recipes/src/mesa/hash | 2 +- repos/libports/recipes/src/mesa_gears/hash | 2 +- repos/libports/recipes/src/mupdf/hash | 2 +- repos/libports/recipes/src/ncurses/hash | 2 +- repos/libports/recipes/src/openjpeg/hash | 2 +- repos/libports/recipes/src/openssl/hash | 2 +- repos/libports/recipes/src/pcre/hash | 2 +- repos/libports/recipes/src/pcre16/hash | 2 +- repos/libports/recipes/src/pcsc-lite/hash | 2 +- repos/libports/recipes/src/pdf_view/hash | 2 +- repos/libports/recipes/src/posix/hash | 2 +- repos/libports/recipes/src/qt5_base/hash | 2 +- repos/libports/recipes/src/qt5_component/hash | 2 +- repos/libports/recipes/src/qt5_declarative/hash | 2 +- repos/libports/recipes/src/qt5_graphicaleffects/hash | 2 +- repos/libports/recipes/src/qt5_launchpad/hash | 2 +- repos/libports/recipes/src/qt5_quickcontrols/hash | 2 +- repos/libports/recipes/src/qt5_quickcontrols2/hash | 2 +- repos/libports/recipes/src/qt5_svg/hash | 2 +- repos/libports/recipes/src/qt5_virtualkeyboard/hash | 2 +- repos/libports/recipes/src/sanitizer/hash | 2 +- repos/libports/recipes/src/spark/hash | 2 +- repos/libports/recipes/src/stdcxx/hash | 2 +- repos/libports/recipes/src/system_rtc/hash | 2 +- repos/libports/recipes/src/test-ldso/hash | 2 +- repos/libports/recipes/src/test-libc/hash | 2 +- repos/libports/recipes/src/test-libc_fifo_pipe/hash | 2 +- repos/libports/recipes/src/test-libc_vfs/hash | 2 +- repos/libports/recipes/src/test-libc_vfs_block/hash | 2 +- repos/libports/recipes/src/test-netty/hash | 2 +- repos/libports/recipes/src/test-pthread/hash | 2 +- repos/libports/recipes/src/test-qpluginwidget/hash | 2 +- repos/libports/recipes/src/test-spark/hash | 2 +- repos/libports/recipes/src/test-spark_exception/hash | 2 +- repos/libports/recipes/src/test-spark_secondary_stack/hash | 2 +- repos/libports/recipes/src/test-tcp/hash | 2 +- repos/libports/recipes/src/usb_webcam/hash | 2 +- repos/libports/recipes/src/vesa_drv/hash | 2 +- repos/libports/recipes/src/vfs_fatfs/hash | 2 +- repos/libports/recipes/src/vfs_jitterentropy/hash | 2 +- repos/libports/recipes/src/vfs_libusb/hash | 2 +- repos/libports/recipes/src/vfs_lwip/hash | 2 +- repos/libports/recipes/src/vfs_oss/hash | 2 +- repos/libports/recipes/src/zlib/hash | 2 +- repos/os/recipes/api/audio_out_session/hash | 2 +- repos/os/recipes/api/file_system_session/hash | 2 +- repos/os/recipes/api/genode_c_api/hash | 2 +- repos/os/recipes/api/os/hash | 2 +- repos/os/recipes/api/platform_session/hash | 2 +- repos/os/recipes/pkg/black_hole/hash | 2 +- repos/os/recipes/pkg/chroot/hash | 2 +- repos/os/recipes/pkg/clipboard/hash | 2 +- repos/os/recipes/pkg/cpu_balancer/hash | 2 +- repos/os/recipes/pkg/cpu_balancer_config/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-linux/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-pc/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash | 2 +- repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash | 2 +- repos/os/recipes/pkg/drivers_nic-linux/hash | 2 +- repos/os/recipes/pkg/drivers_nic-pbxa9/hash | 2 +- repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash | 2 +- repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash | 2 +- repos/os/recipes/pkg/fs_report/hash | 2 +- repos/os/recipes/pkg/fs_rom/hash | 2 +- repos/os/recipes/pkg/mixer/hash | 2 +- repos/os/recipes/pkg/nic_router-nat/hash | 2 +- repos/os/recipes/pkg/nit_focus/hash | 2 +- repos/os/recipes/pkg/part_block/hash | 2 +- repos/os/recipes/pkg/recall_fs/hash | 2 +- repos/os/recipes/pkg/report_rom/hash | 2 +- repos/os/recipes/pkg/rom_filter/hash | 2 +- repos/os/recipes/pkg/rom_reporter/hash | 2 +- repos/os/recipes/pkg/test-black_hole/hash | 2 +- repos/os/recipes/pkg/test-capture/hash | 2 +- repos/os/recipes/pkg/test-clipboard/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config/hash | 2 +- repos/os/recipes/pkg/test-dynamic_config_loader/hash | 2 +- repos/os/recipes/pkg/test-fault_detection/hash | 2 +- repos/os/recipes/pkg/test-fs_packet/hash | 2 +- repos/os/recipes/pkg/test-fs_report/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_fs/hash | 2 +- repos/os/recipes/pkg/test-fs_rom_update_ram/hash | 2 +- repos/os/recipes/pkg/test-init/hash | 2 +- repos/os/recipes/pkg/test-init_loop/hash | 2 +- repos/os/recipes/pkg/test-lx_block/hash | 2 +- repos/os/recipes/pkg/test-nic_loopback/hash | 2 +- repos/os/recipes/pkg/test-nic_perf/hash | 2 +- repos/os/recipes/pkg/test-nic_perf_router/hash | 2 +- repos/os/recipes/pkg/test-part_block_gpt/hash | 2 +- repos/os/recipes/pkg/test-part_block_mbr/hash | 2 +- repos/os/recipes/pkg/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/pkg/test-read_only_rom/hash | 2 +- repos/os/recipes/pkg/test-report_rom/hash | 2 +- repos/os/recipes/pkg/test-resource_request/hash | 2 +- repos/os/recipes/pkg/test-resource_yield/hash | 2 +- repos/os/recipes/pkg/test-rom_filter/hash | 2 +- repos/os/recipes/pkg/test-rtc/hash | 2 +- repos/os/recipes/pkg/test-sandbox/hash | 2 +- repos/os/recipes/pkg/test-signal/hash | 2 +- repos/os/recipes/pkg/test-slab/hash | 2 +- repos/os/recipes/pkg/test-terminal_crosslink/hash | 2 +- repos/os/recipes/pkg/test-trace/hash | 2 +- repos/os/recipes/pkg/test-trace_buffer/hash | 2 +- repos/os/recipes/pkg/test-trace_logger/hash | 2 +- repos/os/recipes/pkg/test-utf8/hash | 2 +- repos/os/recipes/pkg/test-vfs_block/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_fs/hash | 2 +- repos/os/recipes/pkg/test-vfs_stress_ram/hash | 2 +- repos/os/recipes/pkg/test-weak_ptr/hash | 2 +- repos/os/recipes/pkg/trace_logger/hash | 2 +- repos/os/recipes/pkg/vfs/hash | 2 +- repos/os/recipes/pkg/vfs_block/hash | 2 +- repos/os/recipes/src/acpi_drv/hash | 2 +- repos/os/recipes/src/ahci_drv/hash | 2 +- repos/os/recipes/src/black_hole/hash | 2 +- repos/os/recipes/src/block_tester/hash | 2 +- repos/os/recipes/src/boot_fb_drv/hash | 2 +- repos/os/recipes/src/cached_fs_rom/hash | 2 +- repos/os/recipes/src/chroot/hash | 2 +- repos/os/recipes/src/clipboard/hash | 2 +- repos/os/recipes/src/cpu_balancer/hash | 2 +- repos/os/recipes/src/cpu_burner/hash | 2 +- repos/os/recipes/src/dummy/hash | 2 +- repos/os/recipes/src/dummy_rtc_drv/hash | 2 +- repos/os/recipes/src/dynamic_rom/hash | 2 +- repos/os/recipes/src/event_filter/hash | 2 +- repos/os/recipes/src/fb_sdl/hash | 2 +- repos/os/recipes/src/fs_report/hash | 2 +- repos/os/recipes/src/fs_rom/hash | 2 +- repos/os/recipes/src/global_keys_handler/hash | 2 +- repos/os/recipes/src/gui_fb/hash | 2 +- repos/os/recipes/src/init/hash | 2 +- repos/os/recipes/src/input_event_bridge/hash | 2 +- repos/os/recipes/src/intel_gpu_drv/hash | 2 +- repos/os/recipes/src/lan9118_nic_drv/hash | 2 +- repos/os/recipes/src/linux_nic_drv/hash | 2 +- repos/os/recipes/src/linux_rtc_drv/hash | 2 +- repos/os/recipes/src/loader/hash | 2 +- repos/os/recipes/src/log_core/hash | 2 +- repos/os/recipes/src/log_terminal/hash | 2 +- repos/os/recipes/src/lx_block/hash | 2 +- repos/os/recipes/src/lx_fs/hash | 2 +- repos/os/recipes/src/mixer/hash | 2 +- repos/os/recipes/src/nic_bridge/hash | 2 +- repos/os/recipes/src/nic_loopback/hash | 2 +- repos/os/recipes/src/nic_perf/hash | 2 +- repos/os/recipes/src/nic_router/hash | 2 +- repos/os/recipes/src/nit_focus/hash | 2 +- repos/os/recipes/src/nitpicker/hash | 2 +- repos/os/recipes/src/nvme_drv/hash | 2 +- repos/os/recipes/src/part_block/hash | 2 +- repos/os/recipes/src/pbxa9_drivers/hash | 2 +- repos/os/recipes/src/pci_decode/hash | 2 +- repos/os/recipes/src/platform_drv/hash | 2 +- repos/os/recipes/src/ps2_drv/hash | 2 +- repos/os/recipes/src/report_rom/hash | 2 +- repos/os/recipes/src/rom_filter/hash | 2 +- repos/os/recipes/src/rom_logger/hash | 2 +- repos/os/recipes/src/rom_reporter/hash | 2 +- repos/os/recipes/src/rom_to_file/hash | 2 +- repos/os/recipes/src/rtc_drv/hash | 2 +- repos/os/recipes/src/sandbox/hash | 2 +- repos/os/recipes/src/sequence/hash | 2 +- repos/os/recipes/src/shim/hash | 2 +- repos/os/recipes/src/terminal_crosslink/hash | 2 +- repos/os/recipes/src/terminal_log/hash | 2 +- repos/os/recipes/src/test-black_hole/hash | 2 +- repos/os/recipes/src/test-bomb/hash | 2 +- repos/os/recipes/src/test-capture/hash | 2 +- repos/os/recipes/src/test-clipboard/hash | 2 +- repos/os/recipes/src/test-dynamic_config/hash | 2 +- repos/os/recipes/src/test-fault_detection/hash | 2 +- repos/os/recipes/src/test-fs_packet/hash | 2 +- repos/os/recipes/src/test-fs_report/hash | 2 +- repos/os/recipes/src/test-immutable_rom/hash | 2 +- repos/os/recipes/src/test-init/hash | 2 +- repos/os/recipes/src/test-init_loop/hash | 2 +- repos/os/recipes/src/test-nic_loopback/hash | 2 +- repos/os/recipes/src/test-ram_fs_chunk/hash | 2 +- repos/os/recipes/src/test-report_rom/hash | 2 +- repos/os/recipes/src/test-resource_request/hash | 2 +- repos/os/recipes/src/test-resource_yield/hash | 2 +- repos/os/recipes/src/test-rtc/hash | 2 +- repos/os/recipes/src/test-sandbox/hash | 2 +- repos/os/recipes/src/test-signal/hash | 2 +- repos/os/recipes/src/test-slab/hash | 2 +- repos/os/recipes/src/test-terminal_crosslink/hash | 2 +- repos/os/recipes/src/test-trace/hash | 2 +- repos/os/recipes/src/test-trace_buffer/hash | 2 +- repos/os/recipes/src/test-trace_logger/hash | 2 +- repos/os/recipes/src/test-utf8/hash | 2 +- repos/os/recipes/src/test-vfs_capture/hash | 2 +- repos/os/recipes/src/test-vfs_stress/hash | 2 +- repos/os/recipes/src/test-weak_ptr/hash | 2 +- repos/os/recipes/src/top/hash | 2 +- repos/os/recipes/src/trace_logger/hash | 2 +- repos/os/recipes/src/trace_policy/hash | 2 +- repos/os/recipes/src/trace_subject_reporter/hash | 2 +- repos/os/recipes/src/usb_block_drv/hash | 2 +- repos/os/recipes/src/vfs/hash | 2 +- repos/os/recipes/src/vfs_block/hash | 2 +- repos/os/recipes/src/vfs_capture/hash | 2 +- repos/os/recipes/src/vfs_tap/hash | 2 +- repos/os/recipes/src/virt_qemu_drivers/hash | 2 +- repos/os/recipes/src/virtdev_rom/hash | 2 +- repos/os/recipes/src/virtio_fb_drv/hash | 2 +- repos/os/recipes/src/virtio_input_drv/hash | 2 +- repos/os/recipes/src/virtio_nic_drv/hash | 2 +- repos/os/recipes/src/vmm/hash | 2 +- repos/pc/recipes/api/pc_linux/hash | 2 +- repos/pc/recipes/pkg/test_usb_host_drv-pc/hash | 2 +- repos/pc/recipes/pkg/wifi/hash | 2 +- repos/pc/recipes/src/pc_intel_fb_drv/hash | 2 +- repos/pc/recipes/src/pc_usb_host_drv/hash | 2 +- repos/pc/recipes/src/pc_wifi_drv/hash | 2 +- repos/ports/recipes/pkg/report_dump/hash | 2 +- repos/ports/recipes/pkg/system_shell/hash | 2 +- repos/ports/recipes/pkg/vbox5-nova-capture/hash | 2 +- repos/ports/recipes/pkg/vbox5-nova-sculpt/hash | 2 +- repos/ports/recipes/pkg/vbox5/hash | 2 +- repos/ports/recipes/pkg/vbox6-capture/hash | 2 +- repos/ports/recipes/pkg/vbox6/hash | 2 +- repos/ports/recipes/src/vbox5-nova/hash | 2 +- repos/ports/recipes/src/vbox5/hash | 2 +- repos/ports/recipes/src/vbox6/hash | 2 +- repos/ports/recipes/src/verify/hash | 2 +- 441 files changed, 441 insertions(+), 441 deletions(-) diff --git a/repos/base-fiasco/recipes/src/base-fiasco/hash b/repos/base-fiasco/recipes/src/base-fiasco/hash index 45a676195f..add069a1e3 100644 --- a/repos/base-fiasco/recipes/src/base-fiasco/hash +++ b/repos/base-fiasco/recipes/src/base-fiasco/hash @@ -1 +1 @@ -2022-08-30 aafe34375020ddf2859d1971081c40853b186269 +2022-09-20 c3efe0a2a182f5951b2fb7fb3626148df7364191 diff --git a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash index 9a2694513e..cebfeaf8db 100644 --- a/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash +++ b/repos/base-foc/recipes/src/base-foc-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-08-30 a5da9bfbe75c845ed8cc772d05e6c99a3d0e83d3 +2022-09-20 c864d9b5c587a01ff755861615204db555297eaa diff --git a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash index aaf5be96d3..89fa3a41e7 100644 --- a/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash +++ b/repos/base-foc/recipes/src/base-foc-imx7d_sabre/hash @@ -1 +1 @@ -2022-08-30 319facb78b6be92fd922c07525a33b7a3a9274b6 +2022-09-20 c221c5bac07899f6458424006f8daef2661158a4 diff --git a/repos/base-foc/recipes/src/base-foc-pbxa9/hash b/repos/base-foc/recipes/src/base-foc-pbxa9/hash index 00069df9c3..9023aff458 100644 --- a/repos/base-foc/recipes/src/base-foc-pbxa9/hash +++ b/repos/base-foc/recipes/src/base-foc-pbxa9/hash @@ -1 +1 @@ -2022-08-30 0a610e08eec49b70bb5d1af08cf9995e3a225a4d +2022-09-20 f78577a0915cf56cb782df4ec6d457a0bf717705 diff --git a/repos/base-foc/recipes/src/base-foc-pc/hash b/repos/base-foc/recipes/src/base-foc-pc/hash index c5900c3ecd..7bb26728f3 100644 --- a/repos/base-foc/recipes/src/base-foc-pc/hash +++ b/repos/base-foc/recipes/src/base-foc-pc/hash @@ -1 +1 @@ -2022-08-30 bc093ac77dc87b634c181b71e203c0073d0daeb6 +2022-09-20 65b0bab36a16ee55d495aaeeb8efb10dd95de00a diff --git a/repos/base-foc/recipes/src/base-foc-rpi3/hash b/repos/base-foc/recipes/src/base-foc-rpi3/hash index c023f88b45..75fc9fe346 100644 --- a/repos/base-foc/recipes/src/base-foc-rpi3/hash +++ b/repos/base-foc/recipes/src/base-foc-rpi3/hash @@ -1 +1 @@ -2022-08-30 9ece95f88a8cf71fdcf5e76cd6a0c63dc8b6565d +2022-09-20 ece37c0703513786532ae58d191f672154027352 diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash index b7287abc40..5b0db5f1e6 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb/hash @@ -1 +1 @@ -2022-08-30 c0d1b320a5085a427d860ca15f7c3ff7ea5ec6bb +2022-09-20 76fc48d4e99994beae99cbd601215f5e06fd25ca diff --git a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash index aced420699..db84202757 100644 --- a/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash +++ b/repos/base-hw/recipes/src/base-hw-imx53_qsb_tz/hash @@ -1 +1 @@ -2022-08-30 6ef514f4f94bd8f7d32dc5b06165a01441bd44fe +2022-09-20 8cf966dca7dcf6ceb17c2775f05e7bd7f4d220f8 diff --git a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash index a71b3e112b..45b74a5196 100644 --- a/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash +++ b/repos/base-hw/recipes/src/base-hw-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-08-30 dcb018cff381ceec02ec81f68216aa69fa8d284a +2022-09-20 0cc7895fde07b45e9b983a0355a2206077aea85e diff --git a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash index fdcac604e4..f292a5ab17 100644 --- a/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash +++ b/repos/base-hw/recipes/src/base-hw-imx7d_sabre/hash @@ -1 +1 @@ -2022-08-30 20cc62e6a5a5aabc174c08f6dd267b9debb7a18c +2022-09-20 751c455f0c450850a38932d3c5d258dc98613627 diff --git a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash index 9308c45157..10b36f4805 100644 --- a/repos/base-hw/recipes/src/base-hw-nit6_solox/hash +++ b/repos/base-hw/recipes/src/base-hw-nit6_solox/hash @@ -1 +1 @@ -2022-08-30 422e8d2bc98f675041801e2dd910db30d9ede0f2 +2022-09-20 1272ceff2a70767dd787b152f5cbbd1d1753f741 diff --git a/repos/base-hw/recipes/src/base-hw-pbxa9/hash b/repos/base-hw/recipes/src/base-hw-pbxa9/hash index 541608897c..62913ef4b2 100644 --- a/repos/base-hw/recipes/src/base-hw-pbxa9/hash +++ b/repos/base-hw/recipes/src/base-hw-pbxa9/hash @@ -1 +1 @@ -2022-08-30 c3755946665a60da00bf52a95050614227f0653a +2022-09-20 c2d9ef6a9227ad676d66fd8dacf112fbe5336462 diff --git a/repos/base-hw/recipes/src/base-hw-pc/hash b/repos/base-hw/recipes/src/base-hw-pc/hash index aee565d2f4..d84cf46522 100644 --- a/repos/base-hw/recipes/src/base-hw-pc/hash +++ b/repos/base-hw/recipes/src/base-hw-pc/hash @@ -1 +1 @@ -2022-08-30 5cd480404f2bf48894ddffd23e23d2f6a4f1937b +2022-09-20 0d445f8b9d880ca4749413bf6563c58cdb86b77d diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash index 7d86d3ca14..711923c85e 100644 --- a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-08-30 6bca893dde41e5226bef81414a30fb525d23a418 +2022-09-20 d5a49115ee24f4617139a53560ca0e134458d8b3 diff --git a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash index 30e6f06cb7..6eec650f19 100644 --- a/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash +++ b/repos/base-hw/recipes/src/base-hw-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-30 3eb9f6cf7d19648c2c5a880942fc796e011e14a7 +2022-09-20 9b9827bd8ae79de1a22d767dc9a7fa038530408e diff --git a/repos/base-linux/recipes/api/base-linux/hash b/repos/base-linux/recipes/api/base-linux/hash index f53eb9d91a..fa55f39773 100644 --- a/repos/base-linux/recipes/api/base-linux/hash +++ b/repos/base-linux/recipes/api/base-linux/hash @@ -1 +1 @@ -2022-08-16 91752536f87f43d676cf7e253f16c64abf9f61fe +2022-09-20 e63b49c6b84940ce564596d054a33259025fd03b diff --git a/repos/base-linux/recipes/src/base-linux/hash b/repos/base-linux/recipes/src/base-linux/hash index 9e711870c1..3266bcd48a 100644 --- a/repos/base-linux/recipes/src/base-linux/hash +++ b/repos/base-linux/recipes/src/base-linux/hash @@ -1 +1 @@ -2022-08-30 64f7f0e014641d3ad55b70b8a7823e501fe81426 +2022-09-20 ba12eb3f3a73e59814ec106d95dda027081fe7d8 diff --git a/repos/base-nova/recipes/src/base-nova/hash b/repos/base-nova/recipes/src/base-nova/hash index 2975778717..e968f9d5e3 100644 --- a/repos/base-nova/recipes/src/base-nova/hash +++ b/repos/base-nova/recipes/src/base-nova/hash @@ -1 +1 @@ -2022-08-30 a4c2b9b3bdf24e810ab5802109da1cce84082de8 +2022-09-20 554e3c69f419e349ea27c4e77f41fc1bccebd001 diff --git a/repos/base-okl4/recipes/src/base-okl4/hash b/repos/base-okl4/recipes/src/base-okl4/hash index add2368f8b..e89e559244 100644 --- a/repos/base-okl4/recipes/src/base-okl4/hash +++ b/repos/base-okl4/recipes/src/base-okl4/hash @@ -1 +1 @@ -2022-08-30 8e83003e9f909e4af2a0c6606c7a814380c43c63 +2022-09-20 51ac73a99a77e2506ca770c15a25db24f3f99bad diff --git a/repos/base-pistachio/recipes/src/base-pistachio/hash b/repos/base-pistachio/recipes/src/base-pistachio/hash index f5669247e1..b18f46cc8c 100644 --- a/repos/base-pistachio/recipes/src/base-pistachio/hash +++ b/repos/base-pistachio/recipes/src/base-pistachio/hash @@ -1 +1 @@ -2022-08-30 df511524b85c60c9e146225adf942b17b1f35b4c +2022-09-20 4c8c92d5dda3e692b9ed5344343fe945602aa4fc diff --git a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash index ef035345ba..05ce5563c9 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx6q_sabrelite/hash @@ -1 +1 @@ -2022-08-30 1dd192b79c46ade57d19ee707f94b2df7ab16e2e +2022-09-20 58b6064c1fc4de63fa6290079553db53aca6d90f diff --git a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash index 31df7043f9..3af12688f7 100644 --- a/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash +++ b/repos/base-sel4/recipes/src/base-sel4-imx7d_sabre/hash @@ -1 +1 @@ -2022-08-30 694884964475aefb30b9e56383b1aaabeeb2d1ec +2022-09-20 6389e5bb16519bae4b6b78cbda3ba3dc6e193b2e diff --git a/repos/base-sel4/recipes/src/base-sel4-x86/hash b/repos/base-sel4/recipes/src/base-sel4-x86/hash index 6f9842aa98..675950666e 100644 --- a/repos/base-sel4/recipes/src/base-sel4-x86/hash +++ b/repos/base-sel4/recipes/src/base-sel4-x86/hash @@ -1 +1 @@ -2022-08-30 ac7641806f82d895aa4aeec1a844ca023d0f9475 +2022-09-20 7655ba497cac2bf8824ed892fc7e5372f764c39f diff --git a/repos/base/recipes/api/base/hash b/repos/base/recipes/api/base/hash index 886e14734c..f5bc40d77b 100644 --- a/repos/base/recipes/api/base/hash +++ b/repos/base/recipes/api/base/hash @@ -1 +1 @@ -2022-08-30 35829d246a23701b4a9e4b2fe5edbbe2ca55d585 +2022-09-20 9eb11030a67f814355c75aafd7fb9373890e84da diff --git a/repos/base/recipes/pkg/test-ds_ownership/hash b/repos/base/recipes/pkg/test-ds_ownership/hash index 30d361ef39..0a3d16f69b 100644 --- a/repos/base/recipes/pkg/test-ds_ownership/hash +++ b/repos/base/recipes/pkg/test-ds_ownership/hash @@ -1 +1 @@ -2022-08-30 5d3b8ce90b93645042bf443b56c1123607ae4a93 +2022-09-20 99c73bdd54edc9b8714063ae106ac50134bcd934 diff --git a/repos/base/recipes/pkg/test-entrypoint/hash b/repos/base/recipes/pkg/test-entrypoint/hash index 7f8585f26e..9e20a6042a 100644 --- a/repos/base/recipes/pkg/test-entrypoint/hash +++ b/repos/base/recipes/pkg/test-entrypoint/hash @@ -1 +1 @@ -2022-08-30 39833e8e29a813981e9514dc3c1fcd9cc6c062ea +2022-09-20 f40da6d604230ba95ee0b76f867a0782729c8f40 diff --git a/repos/base/recipes/pkg/test-log/hash b/repos/base/recipes/pkg/test-log/hash index 13a180386b..293d2475dc 100644 --- a/repos/base/recipes/pkg/test-log/hash +++ b/repos/base/recipes/pkg/test-log/hash @@ -1 +1 @@ -2022-08-30 4346c09cecbb540b0f36faef52277f1f2323117c +2022-09-20 d48a8a2a40fa7c250eee80614d2da20f21e092e4 diff --git a/repos/base/recipes/pkg/test-mmio/hash b/repos/base/recipes/pkg/test-mmio/hash index d6658c683a..1240368c3f 100644 --- a/repos/base/recipes/pkg/test-mmio/hash +++ b/repos/base/recipes/pkg/test-mmio/hash @@ -1 +1 @@ -2022-08-30 798a46dfa4b91ec3ff161816e624726f76c65bbe +2022-09-20 c00eb8dfd17cf10fe64dfe8e1ddf1284050e017f diff --git a/repos/base/recipes/pkg/test-new_delete/hash b/repos/base/recipes/pkg/test-new_delete/hash index a21e86b0ff..ebd2689330 100644 --- a/repos/base/recipes/pkg/test-new_delete/hash +++ b/repos/base/recipes/pkg/test-new_delete/hash @@ -1 +1 @@ -2022-08-30 4894a982cefa14498345c2e9f0a0870c6938f619 +2022-09-20 8710988ba237e0cfa5d0802c3aed8ca2bd481020 diff --git a/repos/base/recipes/pkg/test-reconstructible/hash b/repos/base/recipes/pkg/test-reconstructible/hash index c589ea24a7..6bbf5937ae 100644 --- a/repos/base/recipes/pkg/test-reconstructible/hash +++ b/repos/base/recipes/pkg/test-reconstructible/hash @@ -1 +1 @@ -2022-08-30 75fcae4d7c19ebe677069acb054002f823bd8055 +2022-09-20 46e537bfba9821475c7cd40e26274e59edf2ce42 diff --git a/repos/base/recipes/pkg/test-registry/hash b/repos/base/recipes/pkg/test-registry/hash index 9b90c381d9..e7c02d339f 100644 --- a/repos/base/recipes/pkg/test-registry/hash +++ b/repos/base/recipes/pkg/test-registry/hash @@ -1 +1 @@ -2022-08-30 8bed97fad788bf957604cbf2ef88ce99d41e0eb8 +2022-09-20 3aee9258dcb09f1a090b36304d2fba567b3a942d diff --git a/repos/base/recipes/pkg/test-rm_fault/hash b/repos/base/recipes/pkg/test-rm_fault/hash index 8ab1ac57d2..efa800672f 100644 --- a/repos/base/recipes/pkg/test-rm_fault/hash +++ b/repos/base/recipes/pkg/test-rm_fault/hash @@ -1 +1 @@ -2022-08-30 14c2945d5c160a4ca8b80b550d2a03db3055f8c3 +2022-09-20 532d1c2a8f877f842e04a1bd230bd055e6ffc199 diff --git a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash index 77a5d98a13..5037353ba2 100644 --- a/repos/base/recipes/pkg/test-rm_fault_no_nox/hash +++ b/repos/base/recipes/pkg/test-rm_fault_no_nox/hash @@ -1 +1 @@ -2022-08-30 71b883cc0243643cb9771911be7aad7cab5b7271 +2022-09-20 b94148f37547c69d93d3aa33cfcc1edfbdbf5bf0 diff --git a/repos/base/recipes/pkg/test-rm_nested/hash b/repos/base/recipes/pkg/test-rm_nested/hash index c8a02c2ce4..96e7ecef1d 100644 --- a/repos/base/recipes/pkg/test-rm_nested/hash +++ b/repos/base/recipes/pkg/test-rm_nested/hash @@ -1 +1 @@ -2022-08-30 a6f539d0cceaa3aab75e9354620763c9046ebd31 +2022-09-20 0fe0c5209d77dff002ee2154e653ed7381a87e98 diff --git a/repos/base/recipes/pkg/test-rm_stress/hash b/repos/base/recipes/pkg/test-rm_stress/hash index ecbea3f0c9..397066dded 100644 --- a/repos/base/recipes/pkg/test-rm_stress/hash +++ b/repos/base/recipes/pkg/test-rm_stress/hash @@ -1 +1 @@ -2022-08-30 a997cdda67e9be4ffb533e6a3e62c452f0990b94 +2022-09-20 1031b847c022efce430ce65548cbd7d127390a68 diff --git a/repos/base/recipes/pkg/test-sanitizer/hash b/repos/base/recipes/pkg/test-sanitizer/hash index 306e9e0e85..8290c17c9e 100644 --- a/repos/base/recipes/pkg/test-sanitizer/hash +++ b/repos/base/recipes/pkg/test-sanitizer/hash @@ -1 +1 @@ -2022-08-30 511e74e5610a4bcd0d76753dca398cc528637049 +2022-09-20 4eee717545feea6225d0ecb43442aadba8207893 diff --git a/repos/base/recipes/pkg/test-stack_smash/hash b/repos/base/recipes/pkg/test-stack_smash/hash index 235bec4a29..d41717314f 100644 --- a/repos/base/recipes/pkg/test-stack_smash/hash +++ b/repos/base/recipes/pkg/test-stack_smash/hash @@ -1 +1 @@ -2022-08-30 dccdee9221100b7012e2b5da0378914004eb2f63 +2022-09-20 dccf30c604cfbbd0f8551511b7df0ca67b9ea1dc diff --git a/repos/base/recipes/pkg/test-synced_interface/hash b/repos/base/recipes/pkg/test-synced_interface/hash index 100f27a0a5..9fe674ab7a 100644 --- a/repos/base/recipes/pkg/test-synced_interface/hash +++ b/repos/base/recipes/pkg/test-synced_interface/hash @@ -1 +1 @@ -2022-08-30 3584b950b6226b2214063217cb62fe44345cd615 +2022-09-20 10cc0093383a7284b48b3762260f1422d3272017 diff --git a/repos/base/recipes/pkg/test-timer/hash b/repos/base/recipes/pkg/test-timer/hash index 655b5f3e34..6e41376056 100644 --- a/repos/base/recipes/pkg/test-timer/hash +++ b/repos/base/recipes/pkg/test-timer/hash @@ -1 +1 @@ -2022-08-30 016f8758a2da3c5c9f35defda782d9b33fb2284c +2022-09-20 fad65ede3376a665121fc447ba1ff57757117b9d diff --git a/repos/base/recipes/pkg/test-tls/hash b/repos/base/recipes/pkg/test-tls/hash index b1822518a6..734853abcf 100644 --- a/repos/base/recipes/pkg/test-tls/hash +++ b/repos/base/recipes/pkg/test-tls/hash @@ -1 +1 @@ -2022-08-30 3c55775aff7a897eefe952db09d7a7b3990842ca +2022-09-20 1946affe57eeff6a208d2b44e6690448751d3a90 diff --git a/repos/base/recipes/pkg/test-token/hash b/repos/base/recipes/pkg/test-token/hash index 031ee90c9f..d181212c87 100644 --- a/repos/base/recipes/pkg/test-token/hash +++ b/repos/base/recipes/pkg/test-token/hash @@ -1 +1 @@ -2022-08-30 f644f970f3dfefeba603f45a21245de4c958ee09 +2022-09-20 107417854887b8224d76003dc5b1e7ccddff70dc diff --git a/repos/base/recipes/pkg/test-xml_generator/hash b/repos/base/recipes/pkg/test-xml_generator/hash index 8333b2148d..1635f317ae 100644 --- a/repos/base/recipes/pkg/test-xml_generator/hash +++ b/repos/base/recipes/pkg/test-xml_generator/hash @@ -1 +1 @@ -2022-08-30 b0058533e973a347f318104d8455f9e2288e44c6 +2022-09-20 c1631d38e9ab4758c96644b434a6da11825c1b7f diff --git a/repos/base/recipes/pkg/test-xml_node/hash b/repos/base/recipes/pkg/test-xml_node/hash index 6487825207..8fd83d357e 100644 --- a/repos/base/recipes/pkg/test-xml_node/hash +++ b/repos/base/recipes/pkg/test-xml_node/hash @@ -1 +1 @@ -2022-08-30 88d8904be1efa49a98838f1aca3878f19e884680 +2022-09-20 07ce4b0e11ff4032f027f0735265d23fcfeb27eb diff --git a/repos/base/recipes/src/test-ds_ownership/hash b/repos/base/recipes/src/test-ds_ownership/hash index 64d74cc3e2..2c3f6c83f7 100644 --- a/repos/base/recipes/src/test-ds_ownership/hash +++ b/repos/base/recipes/src/test-ds_ownership/hash @@ -1 +1 @@ -2022-08-30 b8eaa582c9fd6ad5cf1f3280fd55033b6d95194a +2022-09-20 e2e5ee2e924f09797a694d045e957d9e2ab0d741 diff --git a/repos/base/recipes/src/test-entrypoint/hash b/repos/base/recipes/src/test-entrypoint/hash index 52322363af..0c2888a4d0 100644 --- a/repos/base/recipes/src/test-entrypoint/hash +++ b/repos/base/recipes/src/test-entrypoint/hash @@ -1 +1 @@ -2022-08-30 df4b0aeeb78acee0e936210109e6d1b9bd18c8a6 +2022-09-20 7d7889f77f700cb9c1770ec17b4262be1819d761 diff --git a/repos/base/recipes/src/test-log/hash b/repos/base/recipes/src/test-log/hash index b3fe9ba64c..2db7ad393c 100644 --- a/repos/base/recipes/src/test-log/hash +++ b/repos/base/recipes/src/test-log/hash @@ -1 +1 @@ -2022-08-30 2e76aaab7bc9f6117528d489df2d53a9924b9dd8 +2022-09-20 667cffe56b967e0a31c24783bbcf4218585e7e39 diff --git a/repos/base/recipes/src/test-mmio/hash b/repos/base/recipes/src/test-mmio/hash index 5eede2de17..5cc4389fb9 100644 --- a/repos/base/recipes/src/test-mmio/hash +++ b/repos/base/recipes/src/test-mmio/hash @@ -1 +1 @@ -2022-08-30 eac06a4a5cfef6213b87e312f31ec925810c3054 +2022-09-20 80e893d881a0b25a9d69a479f34d077870c1dccd diff --git a/repos/base/recipes/src/test-new_delete/hash b/repos/base/recipes/src/test-new_delete/hash index 12e2b38ba6..12b5e23131 100644 --- a/repos/base/recipes/src/test-new_delete/hash +++ b/repos/base/recipes/src/test-new_delete/hash @@ -1 +1 @@ -2022-08-30 4bbe78f3e1ed2c9c899bf669d754233e470bde6f +2022-09-20 96f5bacac792c74c29d51cb314adf3db9d8ccbeb diff --git a/repos/base/recipes/src/test-reconstructible/hash b/repos/base/recipes/src/test-reconstructible/hash index 8902907a0e..ed60d0f20b 100644 --- a/repos/base/recipes/src/test-reconstructible/hash +++ b/repos/base/recipes/src/test-reconstructible/hash @@ -1 +1 @@ -2022-08-30 3a9299924e3fafd0545b7b7aa587035065da3be8 +2022-09-20 1069663d7dc87dbb7cd434f669f31a8a5f7e6f0d diff --git a/repos/base/recipes/src/test-registry/hash b/repos/base/recipes/src/test-registry/hash index 30817c6088..61d11a9a94 100644 --- a/repos/base/recipes/src/test-registry/hash +++ b/repos/base/recipes/src/test-registry/hash @@ -1 +1 @@ -2022-08-30 e4997c3f6f49fa2c38176a629965c21ebfa31beb +2022-09-20 db6ed56135ebd29e6ecb79ac76a7ba8fef9c8398 diff --git a/repos/base/recipes/src/test-rm_fault/hash b/repos/base/recipes/src/test-rm_fault/hash index 267e9a3745..84f29f027e 100644 --- a/repos/base/recipes/src/test-rm_fault/hash +++ b/repos/base/recipes/src/test-rm_fault/hash @@ -1 +1 @@ -2022-08-30 440014931ece3ed6b9093f491f4aae9c45a2e243 +2022-09-20 884c8c4a69b0a04c9170e5be80233ed345c4313b diff --git a/repos/base/recipes/src/test-rm_nested/hash b/repos/base/recipes/src/test-rm_nested/hash index 4b7ee2820f..05f02b7257 100644 --- a/repos/base/recipes/src/test-rm_nested/hash +++ b/repos/base/recipes/src/test-rm_nested/hash @@ -1 +1 @@ -2022-08-30 9d375a2d996abcd7f52e373fdf0b8d8c923d147c +2022-09-20 1ccd8e06493a7e8d6cc737614cd7a6af5d0ae9c8 diff --git a/repos/base/recipes/src/test-rm_stress/hash b/repos/base/recipes/src/test-rm_stress/hash index b4a80f87fe..6fac01f9f5 100644 --- a/repos/base/recipes/src/test-rm_stress/hash +++ b/repos/base/recipes/src/test-rm_stress/hash @@ -1 +1 @@ -2022-08-30 19e8d1ed74e2420298b60a3bc8276b9890b44fbc +2022-09-20 5fec809bb62c2d1755a7ad6674c8281235ddc3d8 diff --git a/repos/base/recipes/src/test-sanitizer/hash b/repos/base/recipes/src/test-sanitizer/hash index 28cc5827e8..0befe2be19 100644 --- a/repos/base/recipes/src/test-sanitizer/hash +++ b/repos/base/recipes/src/test-sanitizer/hash @@ -1 +1 @@ -2022-08-30 d72c79d7b5ca9f74c00aedcdc0029be0864c174d +2022-09-20 141481151f9b53266563cd9c7179bd76dc4ed479 diff --git a/repos/base/recipes/src/test-segfault/hash b/repos/base/recipes/src/test-segfault/hash index 6cd5186ad3..2d1539e0a7 100644 --- a/repos/base/recipes/src/test-segfault/hash +++ b/repos/base/recipes/src/test-segfault/hash @@ -1 +1 @@ -2022-08-30 343b6582bdeb21b3027db7762c21a90ead63bf3e +2022-09-20 651253a051f43da1880c3bada16b8ad16315c47b diff --git a/repos/base/recipes/src/test-stack_smash/hash b/repos/base/recipes/src/test-stack_smash/hash index 37a7f5758f..a928e0d72a 100644 --- a/repos/base/recipes/src/test-stack_smash/hash +++ b/repos/base/recipes/src/test-stack_smash/hash @@ -1 +1 @@ -2022-08-30 0cc93332097ac495902a2a0da770459e749eba43 +2022-09-20 371c18bcd754b34296a3e74094758b4cf74557f0 diff --git a/repos/base/recipes/src/test-synced_interface/hash b/repos/base/recipes/src/test-synced_interface/hash index 33bead38c8..99206e93c5 100644 --- a/repos/base/recipes/src/test-synced_interface/hash +++ b/repos/base/recipes/src/test-synced_interface/hash @@ -1 +1 @@ -2022-08-30 078c49966e7b00d3aede688c5c535ef4e8d84ee6 +2022-09-20 cf9888f7598cafbbccb89437a0ed68081870a88a diff --git a/repos/base/recipes/src/test-timer/hash b/repos/base/recipes/src/test-timer/hash index 0155b2c4c3..eb8487acea 100644 --- a/repos/base/recipes/src/test-timer/hash +++ b/repos/base/recipes/src/test-timer/hash @@ -1 +1 @@ -2022-08-30 d85de903b190d9ed5e47099de64bda7f300f0934 +2022-09-20 0302c89439aad7d21af176773a1797dc441cc9c7 diff --git a/repos/base/recipes/src/test-tls/hash b/repos/base/recipes/src/test-tls/hash index f401a3aa1f..a65dfcdbda 100644 --- a/repos/base/recipes/src/test-tls/hash +++ b/repos/base/recipes/src/test-tls/hash @@ -1 +1 @@ -2022-08-30 644912c90fec30e512a9a2c418330eca9ab23100 +2022-09-20 304f95508a4c934e7264ee0cc456bbd446a4d08d diff --git a/repos/base/recipes/src/test-token/hash b/repos/base/recipes/src/test-token/hash index c8b101bde9..0f650a73a3 100644 --- a/repos/base/recipes/src/test-token/hash +++ b/repos/base/recipes/src/test-token/hash @@ -1 +1 @@ -2022-08-30 bf130391ee0c8c89f5d1a3f77db85172f1a2bee7 +2022-09-20 2a6a0812f7b6f588441a7f10ecf264e4bfb9d204 diff --git a/repos/base/recipes/src/test-xml_generator/hash b/repos/base/recipes/src/test-xml_generator/hash index 9a869d5a83..0843987351 100644 --- a/repos/base/recipes/src/test-xml_generator/hash +++ b/repos/base/recipes/src/test-xml_generator/hash @@ -1 +1 @@ -2022-08-30 8938793156f0627e7f7541ef66c01a8bf36f043f +2022-09-20 9932a53159c71e94c9cf9a3027b62f03d84d56e6 diff --git a/repos/base/recipes/src/test-xml_node/hash b/repos/base/recipes/src/test-xml_node/hash index bbe1e3acb4..310ceec771 100644 --- a/repos/base/recipes/src/test-xml_node/hash +++ b/repos/base/recipes/src/test-xml_node/hash @@ -1 +1 @@ -2022-08-30 b4369807e0c250bd10ab66c1e35d06f1d4ab078d +2022-09-20 116a355ee0460d32df4e3831db872248e9d89423 diff --git a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash index 63645f224a..c9401d6637 100644 --- a/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/pkg/bsd_audio_drv/hash @@ -1 +1 @@ -2022-08-30 8cc57b8c8843983e1036455ae50d82417132f6a7 +2022-09-20 883b9e340a9227a8001f384941a6164b741947a2 diff --git a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash index e95d7f148e..bb132ca5f5 100644 --- a/repos/dde_bsd/recipes/src/bsd_audio_drv/hash +++ b/repos/dde_bsd/recipes/src/bsd_audio_drv/hash @@ -1 +1 @@ -2022-08-30 8d8b80f32fd28f29e8885c2c19babc96a10851d9 +2022-09-20 68f28b25f4f91b40367dce1e0b0feefe99681b20 diff --git a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash index 5df1245e6a..174fd048fe 100644 --- a/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/pkg/ipxe_nic_drv/hash @@ -1 +1 @@ -2022-08-30 d06d618dc29079bd7f37ad4196dd48eeb38f144b +2022-09-20 dd67a4e68eb828a2aad9afffb518e282871fb15f diff --git a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash index 38b52444bf..6a1475cf9f 100644 --- a/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash +++ b/repos/dde_ipxe/recipes/src/ipxe_nic_drv/hash @@ -1 +1 @@ -2022-08-30 794f38fe8b7370b2e26fcfac09c4cfe420113fae +2022-09-20 31ebd0af3163b6ba69a3dabd96355bdef5a48bda diff --git a/repos/dde_linux/recipes/pkg/usb_modem_drv/hash b/repos/dde_linux/recipes/pkg/usb_modem_drv/hash index ff61e20c19..b371b93295 100644 --- a/repos/dde_linux/recipes/pkg/usb_modem_drv/hash +++ b/repos/dde_linux/recipes/pkg/usb_modem_drv/hash @@ -1 +1 @@ -2022-08-30 b60625461aa7d48b3885ac7b23b857d548a3625d +2022-09-20 c993a9d5cf4ae695ed02a5ee24c5ea6504ec13bc diff --git a/repos/dde_linux/recipes/pkg/wireguard/hash b/repos/dde_linux/recipes/pkg/wireguard/hash index 39d9c3fa50..0dd3dd47dc 100644 --- a/repos/dde_linux/recipes/pkg/wireguard/hash +++ b/repos/dde_linux/recipes/pkg/wireguard/hash @@ -1 +1 @@ -2022-08-30 767496a1c1b3f82180eda8b0f9710fe03bc8ff65 +2022-09-20 eee34333636b5b7c4594c1ddbca1a3589464771b diff --git a/repos/dde_linux/recipes/src/fec_nic_drv/hash b/repos/dde_linux/recipes/src/fec_nic_drv/hash index 029ad52c1c..c3b876d02b 100644 --- a/repos/dde_linux/recipes/src/fec_nic_drv/hash +++ b/repos/dde_linux/recipes/src/fec_nic_drv/hash @@ -1 +1 @@ -2022-08-30 92a65428d91cb2ae21d259753199a48339fb0314 +2022-09-20 be74026a6d9a6e33bd30cfdb25b3e40768cfc608 diff --git a/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash b/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash index 96d83c0524..0c58720ed4 100644 --- a/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash +++ b/repos/dde_linux/recipes/src/legacy_usb_host_drv/hash @@ -1 +1 @@ -2022-08-30 73df9f46b5d3e5d82f1c670d88227ce4d7b37211 +2022-09-20 0473d2ef8e99daffa663dfd6a4c3cf6353cb2eea diff --git a/repos/dde_linux/recipes/src/usb_hid_drv/hash b/repos/dde_linux/recipes/src/usb_hid_drv/hash index fd652626d5..e0eb8b351e 100644 --- a/repos/dde_linux/recipes/src/usb_hid_drv/hash +++ b/repos/dde_linux/recipes/src/usb_hid_drv/hash @@ -1 +1 @@ -2022-08-30 fc049453f7ea57a4a452b5379da247031fe5d107 +2022-09-20 7ac8421dd171340534d016fad06e67574d7e5f00 diff --git a/repos/dde_linux/recipes/src/usb_modem_drv/hash b/repos/dde_linux/recipes/src/usb_modem_drv/hash index 2115e4a820..2cba855ae6 100644 --- a/repos/dde_linux/recipes/src/usb_modem_drv/hash +++ b/repos/dde_linux/recipes/src/usb_modem_drv/hash @@ -1 +1 @@ -2022-08-30 cb48bf70c38cc9863017e578c8011b98c5fd42a5 +2022-09-20 7857b801083c405cbfec6e1dea2cb45d3dc50696 diff --git a/repos/dde_linux/recipes/src/usb_net_drv/hash b/repos/dde_linux/recipes/src/usb_net_drv/hash index f4cf400599..afb9805cb1 100644 --- a/repos/dde_linux/recipes/src/usb_net_drv/hash +++ b/repos/dde_linux/recipes/src/usb_net_drv/hash @@ -1 +1 @@ -2022-08-30 f978cb4b4084157c47c352dbb483b3aa925d534e +2022-09-20 cf72db8039732f5328448d8d277ab275568c6f1b diff --git a/repos/dde_linux/recipes/src/vfs_lxip/hash b/repos/dde_linux/recipes/src/vfs_lxip/hash index d1cd6aa0c8..17be19bfe2 100644 --- a/repos/dde_linux/recipes/src/vfs_lxip/hash +++ b/repos/dde_linux/recipes/src/vfs_lxip/hash @@ -1 +1 @@ -2022-08-30 ad57183671dd49224a68a2e74a2bb32c13e98c01 +2022-09-20 ca3b9ea0103674b94dd6d7edb370a197596c55a8 diff --git a/repos/dde_linux/recipes/src/wireguard/hash b/repos/dde_linux/recipes/src/wireguard/hash index f4f1e1eaf1..aa8a44e428 100644 --- a/repos/dde_linux/recipes/src/wireguard/hash +++ b/repos/dde_linux/recipes/src/wireguard/hash @@ -1 +1 @@ -2022-08-30 f5eb4a449069bc3d408a0ea8da087cab0ed1b6f6 +2022-09-20 57b0bd32325859230f629f133ff901dc7a326ee2 diff --git a/repos/dde_rump/recipes/pkg/ext2_fs/hash b/repos/dde_rump/recipes/pkg/ext2_fs/hash index 3375d5bacf..2eea8879e8 100644 --- a/repos/dde_rump/recipes/pkg/ext2_fs/hash +++ b/repos/dde_rump/recipes/pkg/ext2_fs/hash @@ -1 +1 @@ -2022-08-30 42ffc6090bbdcda38ff75c798f9edc63fce54e52 +2022-09-20 641bb932cebfe4f8ae7436055cabeea999b272cb diff --git a/repos/dde_rump/recipes/src/rump/hash b/repos/dde_rump/recipes/src/rump/hash index 8881d893da..9dd2cd6f66 100644 --- a/repos/dde_rump/recipes/src/rump/hash +++ b/repos/dde_rump/recipes/src/rump/hash @@ -1 +1 @@ -2022-08-30 ffd73ea071460abd6734c226074f64d7fc1f1b64 +2022-09-20 20777dbdc4f59792c0a8e0f9506f4b13d005bbe1 diff --git a/repos/demo/recipes/src/demo/hash b/repos/demo/recipes/src/demo/hash index d89792e986..108c7c8db0 100644 --- a/repos/demo/recipes/src/demo/hash +++ b/repos/demo/recipes/src/demo/hash @@ -1 +1 @@ -2022-08-30 ffe1cded0850d2839553c3ce7c6933664d806d44 +2022-09-20 5c71fb30cf63c971603eb41ca6eb00cf0366198b diff --git a/repos/gems/recipes/api/gems/hash b/repos/gems/recipes/api/gems/hash index 1156c93735..c540520406 100644 --- a/repos/gems/recipes/api/gems/hash +++ b/repos/gems/recipes/api/gems/hash @@ -1 +1 @@ -2022-08-30 d30ad7a288df95ccebe047587572707d93e6ef11 +2022-09-20 5fea0ab5512d6ddb9ed2020475cdba1daa60b1eb diff --git a/repos/gems/recipes/api/polygon_gfx/hash b/repos/gems/recipes/api/polygon_gfx/hash index cbfdcb0a81..86d195765b 100644 --- a/repos/gems/recipes/api/polygon_gfx/hash +++ b/repos/gems/recipes/api/polygon_gfx/hash @@ -1 +1 @@ -2021-12-16 6ae0f81878256d92faba95cec6911722f0cab3ba +2022-09-20 14c0f9db7671c38dee03df8dae9fd1ada7f9e3de diff --git a/repos/gems/recipes/pkg/backdrop/hash b/repos/gems/recipes/pkg/backdrop/hash index abaece3a94..3bf0dd4ff1 100644 --- a/repos/gems/recipes/pkg/backdrop/hash +++ b/repos/gems/recipes/pkg/backdrop/hash @@ -1 +1 @@ -2022-08-30 09fd3768e23d5e0f1c305cd0326b982e1166c57e +2022-09-20 390ff26e1811732dd3ad55a4fc8185e783b5bcb1 diff --git a/repos/gems/recipes/pkg/cbe_check/hash b/repos/gems/recipes/pkg/cbe_check/hash index 327729c56c..7110ce1e4f 100644 --- a/repos/gems/recipes/pkg/cbe_check/hash +++ b/repos/gems/recipes/pkg/cbe_check/hash @@ -1 +1 @@ -2022-08-30 14f83bb768765cb4546c065cdb0767e05879023f +2022-09-20 1eab9a3846d3832c8e15254700dbe469fc93e158 diff --git a/repos/gems/recipes/pkg/cbe_demo/hash b/repos/gems/recipes/pkg/cbe_demo/hash index 5557945550..fb27d9c8b8 100644 --- a/repos/gems/recipes/pkg/cbe_demo/hash +++ b/repos/gems/recipes/pkg/cbe_demo/hash @@ -1 +1 @@ -2022-08-30 e49c03c7f6063121414de0df58f68efc64e2d73d +2022-09-20 3c7282dff78a5837cb26d337cd1abbba70f4b856 diff --git a/repos/gems/recipes/pkg/cbe_fs/hash b/repos/gems/recipes/pkg/cbe_fs/hash index dfca78d927..8af95dbdfa 100644 --- a/repos/gems/recipes/pkg/cbe_fs/hash +++ b/repos/gems/recipes/pkg/cbe_fs/hash @@ -1 +1 @@ -2022-08-30 88751bcf0cf4c9705476ae86fe01af3e4353cb82 +2022-09-20 404e2228c60cede04a5adb41395e0c43c1ea9640 diff --git a/repos/gems/recipes/pkg/cbe_init/hash b/repos/gems/recipes/pkg/cbe_init/hash index 938804e650..cf510b4e61 100644 --- a/repos/gems/recipes/pkg/cbe_init/hash +++ b/repos/gems/recipes/pkg/cbe_init/hash @@ -1 +1 @@ -2022-08-30 7abc09dd51e23cd836c3d7d3bf17b7692cf7ec29 +2022-09-20 b19e101d56df3e23dc8da694966699c4da60c389 diff --git a/repos/gems/recipes/pkg/cbe_shell/hash b/repos/gems/recipes/pkg/cbe_shell/hash index c51253e80e..04e1df9f5a 100644 --- a/repos/gems/recipes/pkg/cbe_shell/hash +++ b/repos/gems/recipes/pkg/cbe_shell/hash @@ -1 +1 @@ -2022-08-30 1e8254bfd74fafccd229ab84b4a984f7f860a2f1 +2022-09-20 45f6e0979ca36a41cac5211e6fe81e89ac3e1100 diff --git a/repos/gems/recipes/pkg/cbe_ta_fs/hash b/repos/gems/recipes/pkg/cbe_ta_fs/hash index 2b595a59f1..ce6a7dc4b7 100644 --- a/repos/gems/recipes/pkg/cbe_ta_fs/hash +++ b/repos/gems/recipes/pkg/cbe_ta_fs/hash @@ -1 +1 @@ -2022-08-30 16deb466c6d1fbde22d47a6db5344f6d8be07d5c +2022-09-20 b3b4212241e326a591dd5766157abfdc89b2f589 diff --git a/repos/gems/recipes/pkg/cbe_ta_vfs/hash b/repos/gems/recipes/pkg/cbe_ta_vfs/hash index e8214b422a..81258cb3a0 100644 --- a/repos/gems/recipes/pkg/cbe_ta_vfs/hash +++ b/repos/gems/recipes/pkg/cbe_ta_vfs/hash @@ -1 +1 @@ -2022-08-30 ddf18118ce1e3248bddd0a747ca3cec91a8f9bb9 +2022-09-20 50be668c48a1dcab4ef408dee7a19fd7f308c2ba diff --git a/repos/gems/recipes/pkg/cbe_vbox5-nova/hash b/repos/gems/recipes/pkg/cbe_vbox5-nova/hash index 67d6141d7e..3065bbe125 100644 --- a/repos/gems/recipes/pkg/cbe_vbox5-nova/hash +++ b/repos/gems/recipes/pkg/cbe_vbox5-nova/hash @@ -1 +1 @@ -2022-08-30 2c5e28636f99807eafbfba70b0c57662aa37b20b +2022-09-20 f74ef09e70f96fe024c168129dfe693392eb3fb9 diff --git a/repos/gems/recipes/pkg/cbe_vfs/hash b/repos/gems/recipes/pkg/cbe_vfs/hash index 61d00b2e29..8df279c211 100644 --- a/repos/gems/recipes/pkg/cbe_vfs/hash +++ b/repos/gems/recipes/pkg/cbe_vfs/hash @@ -1 +1 @@ -2022-08-30 0c7b26f8c871429b4cfc72152d5f4f1a73989287 +2022-09-20 e3313ab5d0384053a716dd2a0115a63bf55ea049 diff --git a/repos/gems/recipes/pkg/cbe_vm_fs/hash b/repos/gems/recipes/pkg/cbe_vm_fs/hash index 1500477d31..4cad653d5a 100644 --- a/repos/gems/recipes/pkg/cbe_vm_fs/hash +++ b/repos/gems/recipes/pkg/cbe_vm_fs/hash @@ -1 +1 @@ -2022-08-30 44d6da875d4eb6271c3f29aceb5a16a5a86dc5ad +2022-09-20 85cc4d508a2ea823f2d4b8a9ed0e37db7b925cb4 diff --git a/repos/gems/recipes/pkg/depot_download/hash b/repos/gems/recipes/pkg/depot_download/hash index a6dc3b9780..0e84200d68 100644 --- a/repos/gems/recipes/pkg/depot_download/hash +++ b/repos/gems/recipes/pkg/depot_download/hash @@ -1 +1 @@ -2022-08-30 4c4f8410c190ca392bd200012e38a99fbe9fe361 +2022-09-20 915c74624876413e5e917bc2b46282130882d198 diff --git a/repos/gems/recipes/pkg/download_coreplus/hash b/repos/gems/recipes/pkg/download_coreplus/hash index dd29abc1f4..44952faac2 100644 --- a/repos/gems/recipes/pkg/download_coreplus/hash +++ b/repos/gems/recipes/pkg/download_coreplus/hash @@ -1 +1 @@ -2022-08-30 30b06d456331099d2466522e24e47af7fd9fe9cf +2022-09-20 6f53b56df3a766157e052f1cd2b9445271b41f6b diff --git a/repos/gems/recipes/pkg/drivers_managed-pc/hash b/repos/gems/recipes/pkg/drivers_managed-pc/hash index f5275f858c..01c765f265 100644 --- a/repos/gems/recipes/pkg/drivers_managed-pc/hash +++ b/repos/gems/recipes/pkg/drivers_managed-pc/hash @@ -1 +1 @@ -2022-08-30 54c2ca81d437d005d8e621bb9e7c2a4e86a0a9b8 +2022-09-20 0abec3d48b0f4283c31af548cb8d8135cd13b116 diff --git a/repos/gems/recipes/pkg/drivers_nic-pc/hash b/repos/gems/recipes/pkg/drivers_nic-pc/hash index 74cf618ace..db80af0d43 100644 --- a/repos/gems/recipes/pkg/drivers_nic-pc/hash +++ b/repos/gems/recipes/pkg/drivers_nic-pc/hash @@ -1 +1 @@ -2022-08-30 7b5d8b55a3024c795a6e5d45c1b83897398de508 +2022-09-20 84b3f6df64ea0dfcf1f715e9a204b0f5532748eb diff --git a/repos/gems/recipes/pkg/file_vault/hash b/repos/gems/recipes/pkg/file_vault/hash index faf10b1e4e..63dd64be52 100644 --- a/repos/gems/recipes/pkg/file_vault/hash +++ b/repos/gems/recipes/pkg/file_vault/hash @@ -1 +1 @@ -2022-08-30 8ca3e4d6a477c1806c133989ac0d5c662e7f0bd7 +2022-09-20 d640c5b7ac78d22d5bd873bf0d53d4d5a4fbb389 diff --git a/repos/gems/recipes/pkg/fonts_fs/hash b/repos/gems/recipes/pkg/fonts_fs/hash index 23487f5bda..3a87cd498f 100644 --- a/repos/gems/recipes/pkg/fonts_fs/hash +++ b/repos/gems/recipes/pkg/fonts_fs/hash @@ -1 +1 @@ -2022-08-30 ed35820034f02c63f4b9a246b75363607eb0009c +2022-09-20 0703be25c6141b59d2a2fe96ecf0c00e49d51e24 diff --git a/repos/gems/recipes/pkg/motif_decorator/hash b/repos/gems/recipes/pkg/motif_decorator/hash index a2f95bb09b..53443b5356 100644 --- a/repos/gems/recipes/pkg/motif_decorator/hash +++ b/repos/gems/recipes/pkg/motif_decorator/hash @@ -1 +1 @@ -2022-08-30 dc58e6b86bf0170e9281a98167381faa8b6d6bab +2022-09-20 444da7f8c799e164e6e86626d185a26cf6dfc2a3 diff --git a/repos/gems/recipes/pkg/motif_wm/hash b/repos/gems/recipes/pkg/motif_wm/hash index d742a7b6f5..de0de3fa80 100644 --- a/repos/gems/recipes/pkg/motif_wm/hash +++ b/repos/gems/recipes/pkg/motif_wm/hash @@ -1 +1 @@ -2022-08-30 60aab08fa14bfd53603a683c3e50c815e18562e8 +2022-09-20 5d75ddabd8a9cb0e4c2feb426fdbd2e7ec8ccb72 diff --git a/repos/gems/recipes/pkg/nano3d/hash b/repos/gems/recipes/pkg/nano3d/hash index 1cded1c092..a1718a790f 100644 --- a/repos/gems/recipes/pkg/nano3d/hash +++ b/repos/gems/recipes/pkg/nano3d/hash @@ -1 +1 @@ -2022-08-30 17b31ed76623ba3adb87690555a4e99858040624 +2022-09-20 45dc39de0b367a4db3ac622a169c149b4d7a68b3 diff --git a/repos/gems/recipes/pkg/sculpt/hash b/repos/gems/recipes/pkg/sculpt/hash index c4f8b9f2bb..7e2e6140f6 100644 --- a/repos/gems/recipes/pkg/sculpt/hash +++ b/repos/gems/recipes/pkg/sculpt/hash @@ -1 +1 @@ -2022-08-30 aaad9b09c1a50bc5ad2a5c01514fbaef1f334246 +2022-09-20 6072263a81832abc841dfdc87685f3aab166434e diff --git a/repos/gems/recipes/pkg/sculpt_distribution-pc/hash b/repos/gems/recipes/pkg/sculpt_distribution-pc/hash index b569038122..7c2b40a7b1 100644 --- a/repos/gems/recipes/pkg/sculpt_distribution-pc/hash +++ b/repos/gems/recipes/pkg/sculpt_distribution-pc/hash @@ -1 +1 @@ -2022-08-30 d4acb7461859308b3c3d445ac2a337e206534911 +2022-09-20 daec6b1bee84d2d5f0c249376ec8ff3743ea5b72 diff --git a/repos/gems/recipes/pkg/sculpt_distribution/hash b/repos/gems/recipes/pkg/sculpt_distribution/hash index fb4f393164..5f10dabdfd 100644 --- a/repos/gems/recipes/pkg/sculpt_distribution/hash +++ b/repos/gems/recipes/pkg/sculpt_distribution/hash @@ -1 +1 @@ -2022-08-30 cc01e8b5f2e2813a99306a4e7fa6612c9213a780 +2022-09-20 6353993276a831ed74187efedb326022db2c3ceb diff --git a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash index 3acf17b7e3..48c9270f6e 100644 --- a/repos/gems/recipes/pkg/sticks_blue_backdrop/hash +++ b/repos/gems/recipes/pkg/sticks_blue_backdrop/hash @@ -1 +1 @@ -2022-08-30 f0267144ec184397d35f1433d4849a6653f2e1f6 +2022-09-20 fcf04d21a28d2e2622b949b67f55ca2c8330a751 diff --git a/repos/gems/recipes/pkg/terminal/hash b/repos/gems/recipes/pkg/terminal/hash index f7da894b57..9188f58ed0 100644 --- a/repos/gems/recipes/pkg/terminal/hash +++ b/repos/gems/recipes/pkg/terminal/hash @@ -1 +1 @@ -2022-08-30 ff230f0c67dc57413eadba65451cdfee78013020 +2022-09-20 f79898f9549a44bf49351d677927cbef32a679b3 diff --git a/repos/gems/recipes/pkg/test-depot_query_index/hash b/repos/gems/recipes/pkg/test-depot_query_index/hash index d40ca27604..e8ed01cde1 100644 --- a/repos/gems/recipes/pkg/test-depot_query_index/hash +++ b/repos/gems/recipes/pkg/test-depot_query_index/hash @@ -1 +1 @@ -2022-08-30 eddcda79e6f3a7726ce6b8f0c83815367dbc9e17 +2022-09-20 5946402cd062e15d526bebfc519fb17345639682 diff --git a/repos/gems/recipes/pkg/test-fs_tool/hash b/repos/gems/recipes/pkg/test-fs_tool/hash index 3020bf2aa6..668f9f6af5 100644 --- a/repos/gems/recipes/pkg/test-fs_tool/hash +++ b/repos/gems/recipes/pkg/test-fs_tool/hash @@ -1 +1 @@ -2022-08-30 0cc78267ebbbd4813f09748e9652a4edd1d499f4 +2022-09-20 fe7d52366f4bbda141918260a2f1af0b409054f2 diff --git a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash index 3b84a5a74f..b447588ade 100644 --- a/repos/gems/recipes/pkg/test-libc_vfs_audit/hash +++ b/repos/gems/recipes/pkg/test-libc_vfs_audit/hash @@ -1 +1 @@ -2022-08-30 d6faae410188c6f6265e1f1884eb74e3b6f6c50e +2022-09-20 0049bb2f337455a552594421a0231acb4f2f96a0 diff --git a/repos/gems/recipes/pkg/themed_decorator/hash b/repos/gems/recipes/pkg/themed_decorator/hash index c8bf83c8c2..0051c861b5 100644 --- a/repos/gems/recipes/pkg/themed_decorator/hash +++ b/repos/gems/recipes/pkg/themed_decorator/hash @@ -1 +1 @@ -2022-08-30 ab5ce532d3941f7257b9a119335b9ab2966a1f80 +2022-09-20 a5a557c1ae465ac5333e211e493a46ed6a0ae6d9 diff --git a/repos/gems/recipes/pkg/themed_wm/hash b/repos/gems/recipes/pkg/themed_wm/hash index 3e64cfa764..af9851ff55 100644 --- a/repos/gems/recipes/pkg/themed_wm/hash +++ b/repos/gems/recipes/pkg/themed_wm/hash @@ -1 +1 @@ -2022-08-30 f2129ec373aaeaebcc02d196325b906e21130c95 +2022-09-20 c47abaf38eba30ac6c8a19eacdda644248a164b7 diff --git a/repos/gems/recipes/pkg/touch_keyboard/hash b/repos/gems/recipes/pkg/touch_keyboard/hash index d6b108737e..07e59a06fb 100644 --- a/repos/gems/recipes/pkg/touch_keyboard/hash +++ b/repos/gems/recipes/pkg/touch_keyboard/hash @@ -1 +1 @@ -2022-08-30 eeef58a361dcaff53ec496e15b1130b341fdf183 +2022-09-20 9be52b0fb7027d2b35e97236be311c91f3491966 diff --git a/repos/gems/recipes/pkg/trace_fs/hash b/repos/gems/recipes/pkg/trace_fs/hash index 745e5428c0..6ecf1adce3 100644 --- a/repos/gems/recipes/pkg/trace_fs/hash +++ b/repos/gems/recipes/pkg/trace_fs/hash @@ -1 +1 @@ -2022-08-30 9e67e92efe7123bb5f781bb0a2fa9a93e9a1e0be +2022-09-20 8b6efca5371bf0a87065854c782d45488181338f diff --git a/repos/gems/recipes/pkg/trace_recorder/hash b/repos/gems/recipes/pkg/trace_recorder/hash index 9800274dda..a295a0f6c1 100644 --- a/repos/gems/recipes/pkg/trace_recorder/hash +++ b/repos/gems/recipes/pkg/trace_recorder/hash @@ -1 +1 @@ -2022-08-30 b30cf59e0b4a9cde4a2ac078082913b594eeb6ef +2022-09-20 5b948e624a918fda48462eec42879b9096030c28 diff --git a/repos/gems/recipes/pkg/window_layouter/hash b/repos/gems/recipes/pkg/window_layouter/hash index 8bf9d44c54..70427bc51f 100644 --- a/repos/gems/recipes/pkg/window_layouter/hash +++ b/repos/gems/recipes/pkg/window_layouter/hash @@ -1 +1 @@ -2022-08-30 6fa9d103da49cc7bf5ca9b618315b45b3cf3dd9f +2022-09-20 6d54760650cbaece38d4d32ef25688a396fef188 diff --git a/repos/gems/recipes/pkg/wm/hash b/repos/gems/recipes/pkg/wm/hash index 1646d3bb0b..96f6b30d0c 100644 --- a/repos/gems/recipes/pkg/wm/hash +++ b/repos/gems/recipes/pkg/wm/hash @@ -1 +1 @@ -2022-08-30 ff8704759a9e463c650448ea113c2358a317cafb +2022-09-20 a2aab9b526a2815a589ec0d8a208e8427d4187fc diff --git a/repos/gems/recipes/src/backdrop/hash b/repos/gems/recipes/src/backdrop/hash index 7928b2da26..7e79838874 100644 --- a/repos/gems/recipes/src/backdrop/hash +++ b/repos/gems/recipes/src/backdrop/hash @@ -1 +1 @@ -2022-08-30 1374b46bc7faa121117feb4a699e6b808655f621 +2022-09-20 312b078e1b44f00eb38140e01d801a92b55ad14b diff --git a/repos/gems/recipes/src/cbe/hash b/repos/gems/recipes/src/cbe/hash index 7b9938100b..f9f1930318 100644 --- a/repos/gems/recipes/src/cbe/hash +++ b/repos/gems/recipes/src/cbe/hash @@ -1 +1 @@ -2022-08-30 eefc8dee4f7e704f49dd1157e692e623f0d66c44 +2022-09-20 fda7d12f73c2bd5900420bb3e00751da307c7f42 diff --git a/repos/gems/recipes/src/cpu_load_display/hash b/repos/gems/recipes/src/cpu_load_display/hash index 662588fcf8..d5ebcd3e99 100644 --- a/repos/gems/recipes/src/cpu_load_display/hash +++ b/repos/gems/recipes/src/cpu_load_display/hash @@ -1 +1 @@ -2022-08-30 2c979917810596845407c3d154ad42385600c720 +2022-09-20 f4a06937dde6539559adc38b43aac704f8cb0287 diff --git a/repos/gems/recipes/src/decorator/hash b/repos/gems/recipes/src/decorator/hash index 17aa8f63df..9b9746859e 100644 --- a/repos/gems/recipes/src/decorator/hash +++ b/repos/gems/recipes/src/decorator/hash @@ -1 +1 @@ -2022-08-30 f1d00d1ca0b34393787095562314f7c3b23b289f +2022-09-20 800cd534e5c806c76e12e7b6b140c81798b8db15 diff --git a/repos/gems/recipes/src/depot_deploy/hash b/repos/gems/recipes/src/depot_deploy/hash index e1a50ecfde..dbd050ff34 100644 --- a/repos/gems/recipes/src/depot_deploy/hash +++ b/repos/gems/recipes/src/depot_deploy/hash @@ -1 +1 @@ -2022-08-30 1cbffb581e06df6194cc371aac02e2999792a6fe +2022-09-20 f5d1c2b25fe001576d5d4817e9a901b52b0e143e diff --git a/repos/gems/recipes/src/depot_download_manager/hash b/repos/gems/recipes/src/depot_download_manager/hash index 080d8bf9bf..123b3c3621 100644 --- a/repos/gems/recipes/src/depot_download_manager/hash +++ b/repos/gems/recipes/src/depot_download_manager/hash @@ -1 +1 @@ -2022-08-30 786082aeae1fea40c35e09baf8557ff98ff9bf53 +2022-09-20 298860451ecb8d47a285db88aa22bcd157b60724 diff --git a/repos/gems/recipes/src/depot_query/hash b/repos/gems/recipes/src/depot_query/hash index e176513932..27fba27ed4 100644 --- a/repos/gems/recipes/src/depot_query/hash +++ b/repos/gems/recipes/src/depot_query/hash @@ -1 +1 @@ -2022-08-30 204452250a5561e00d8dc5057eb0538b1491528b +2022-09-20 195b4136f4ccbcb234ceb56a231f65910b985074 diff --git a/repos/gems/recipes/src/driver_manager/hash b/repos/gems/recipes/src/driver_manager/hash index 2f7871933c..216f18e5db 100644 --- a/repos/gems/recipes/src/driver_manager/hash +++ b/repos/gems/recipes/src/driver_manager/hash @@ -1 +1 @@ -2022-08-30 d500af16df4b24a29c74c62621fd32f564fe7267 +2022-09-20 726bee6eee63d3e4b254f4c620d048d54b1c0b51 diff --git a/repos/gems/recipes/src/file_terminal/hash b/repos/gems/recipes/src/file_terminal/hash index 052e7700b8..57f5f707f9 100644 --- a/repos/gems/recipes/src/file_terminal/hash +++ b/repos/gems/recipes/src/file_terminal/hash @@ -1 +1 @@ -2022-08-30 0670940516f57bffeb6d1493d1f92fb3dd903e36 +2022-09-20 d8be3f3420f523d1565772be9acf9f654a4d57bf diff --git a/repos/gems/recipes/src/file_vault/hash b/repos/gems/recipes/src/file_vault/hash index afc8c42a15..e3cd8f5e8b 100644 --- a/repos/gems/recipes/src/file_vault/hash +++ b/repos/gems/recipes/src/file_vault/hash @@ -1 +1 @@ -2022-08-30 db0730aecabcebc7a9d5cd550c270f00934c9849 +2022-09-20 9f925e4d29bfdf44d99e873a5b309465a2c9d983 diff --git a/repos/gems/recipes/src/fs_query/hash b/repos/gems/recipes/src/fs_query/hash index fd28277752..e9dbe095d0 100644 --- a/repos/gems/recipes/src/fs_query/hash +++ b/repos/gems/recipes/src/fs_query/hash @@ -1 +1 @@ -2022-08-30 0de3fa48f1e90f34a802f3d966dd71f998a9e969 +2022-09-20 aa1a37abc3a40fe0a95fca86b5fa1b7bca9d11f4 diff --git a/repos/gems/recipes/src/fs_tool/hash b/repos/gems/recipes/src/fs_tool/hash index 5b2da3f02d..38f920758a 100644 --- a/repos/gems/recipes/src/fs_tool/hash +++ b/repos/gems/recipes/src/fs_tool/hash @@ -1 +1 @@ -2022-08-30 f9e495ac5a19fe90184ea5e7761f6251be9e98d1 +2022-09-20 23041cd2fe70116155fb0ca6f7d45e30c26568ec diff --git a/repos/gems/recipes/src/gpt_write/hash b/repos/gems/recipes/src/gpt_write/hash index da7979be0e..cb19c7f982 100644 --- a/repos/gems/recipes/src/gpt_write/hash +++ b/repos/gems/recipes/src/gpt_write/hash @@ -1 +1 @@ -2022-08-30 938563d43230e97ff48cc02b258b2f7e68196dff +2022-09-20 e4dbc4ddde27408139016bc096da135a6622a817 diff --git a/repos/gems/recipes/src/gui_fader/hash b/repos/gems/recipes/src/gui_fader/hash index 692c0d16fc..0e586cd3e5 100644 --- a/repos/gems/recipes/src/gui_fader/hash +++ b/repos/gems/recipes/src/gui_fader/hash @@ -1 +1 @@ -2022-08-30 da84540aa943ada8536168936c08e778535e948c +2022-09-20 8884cab5658c7677b47e470947683e6cf974bdbd diff --git a/repos/gems/recipes/src/menu_view/hash b/repos/gems/recipes/src/menu_view/hash index 3cc8ac997f..2866fe24a3 100644 --- a/repos/gems/recipes/src/menu_view/hash +++ b/repos/gems/recipes/src/menu_view/hash @@ -1 +1 @@ -2022-08-30 1c531b98df46f7c317e36304895598deb85108cf +2022-09-20 7994cbde096fce8e5c6dba84cc437761a7e92777 diff --git a/repos/gems/recipes/src/mixer_gui_qt/hash b/repos/gems/recipes/src/mixer_gui_qt/hash index 34c4b0c32f..d6fd4ac829 100644 --- a/repos/gems/recipes/src/mixer_gui_qt/hash +++ b/repos/gems/recipes/src/mixer_gui_qt/hash @@ -1 +1 @@ -2022-08-30 ad6e2c35d64341fe364e4154a5f3f581af1d1b56 +2022-09-20 b4ea58434c4e8b7947ccda6be381a2d1c2019524 diff --git a/repos/gems/recipes/src/nano3d/hash b/repos/gems/recipes/src/nano3d/hash index 2cbb6d0a53..7886a645c6 100644 --- a/repos/gems/recipes/src/nano3d/hash +++ b/repos/gems/recipes/src/nano3d/hash @@ -1 +1 @@ -2022-08-30 b6100e750cc31205dea1bd5b8fdb757c4a792d79 +2022-09-20 26da4d3cc652dea789d1e71c86c19cf858a24c41 diff --git a/repos/gems/recipes/src/sculpt_manager/hash b/repos/gems/recipes/src/sculpt_manager/hash index 4194858209..b51fe8d1e3 100644 --- a/repos/gems/recipes/src/sculpt_manager/hash +++ b/repos/gems/recipes/src/sculpt_manager/hash @@ -1 +1 @@ -2022-08-30 06520abbc28572cfa70dede8c9bb5fe4dfc70d03 +2022-09-20 71b6aef0ee5ceed30d4f243d6fc6380a25aad88a diff --git a/repos/gems/recipes/src/terminal/hash b/repos/gems/recipes/src/terminal/hash index 84406f9303..2578682ba6 100644 --- a/repos/gems/recipes/src/terminal/hash +++ b/repos/gems/recipes/src/terminal/hash @@ -1 +1 @@ -2022-08-30 37ce42b74153a9dc79c8acf65965e720c6ce44c5 +2022-09-20 55ffd44f99a521b717560f2f2436a284fed03145 diff --git a/repos/gems/recipes/src/test-tiled_wm/hash b/repos/gems/recipes/src/test-tiled_wm/hash index 29c7fe833b..650f9be696 100644 --- a/repos/gems/recipes/src/test-tiled_wm/hash +++ b/repos/gems/recipes/src/test-tiled_wm/hash @@ -1 +1 @@ -2022-08-30 8fa2c0968a846fca4f7dbfc9091703d05284d334 +2022-09-20 7bc3c8487b0ef98202b501692c806d9e767fe9df diff --git a/repos/gems/recipes/src/text_area/hash b/repos/gems/recipes/src/text_area/hash index 0605360ba6..c909b49ffb 100644 --- a/repos/gems/recipes/src/text_area/hash +++ b/repos/gems/recipes/src/text_area/hash @@ -1 +1 @@ -2022-08-30 521185e41a8fc8dd95371ee87137ec6c2f41b6a0 +2022-09-20 2c16d233cba10ca1b85411815b8a64233258af59 diff --git a/repos/gems/recipes/src/themed_decorator/hash b/repos/gems/recipes/src/themed_decorator/hash index 86e593aa8e..88b9b3d2b1 100644 --- a/repos/gems/recipes/src/themed_decorator/hash +++ b/repos/gems/recipes/src/themed_decorator/hash @@ -1 +1 @@ -2022-08-30 78b72b06b9bd37701fe8d4c9445244df7b5ba768 +2022-09-20 2d647dce5fd505751b52a68e0e355754e02e59db diff --git a/repos/gems/recipes/src/touch_keyboard/hash b/repos/gems/recipes/src/touch_keyboard/hash index a611b253a5..a3373af404 100644 --- a/repos/gems/recipes/src/touch_keyboard/hash +++ b/repos/gems/recipes/src/touch_keyboard/hash @@ -1 +1 @@ -2022-08-30 4bc179e2b15b4636e0dc7a6bd7ce80503420f92c +2022-09-20 2a75e2cfa3f312dbbaf3f640102ea846bff6bfef diff --git a/repos/gems/recipes/src/trace_recorder/hash b/repos/gems/recipes/src/trace_recorder/hash index 31c848f0ba..10a8148763 100644 --- a/repos/gems/recipes/src/trace_recorder/hash +++ b/repos/gems/recipes/src/trace_recorder/hash @@ -1 +1 @@ -2022-08-30 49d15a2e637dbdf70a66a90b1cc4e57e9aa78578 +2022-09-20 2a20809eac1ae99ad03f77e0669269544bd7027f diff --git a/repos/gems/recipes/src/trace_recorder_policy/hash b/repos/gems/recipes/src/trace_recorder_policy/hash index 65228e29ff..8b83059385 100644 --- a/repos/gems/recipes/src/trace_recorder_policy/hash +++ b/repos/gems/recipes/src/trace_recorder_policy/hash @@ -1 +1 @@ -2022-08-30 5a38181f12e1c1c0c0b4b32f332a456f6359f7b6 +2022-09-20 2a0f0d6a4d1d3107c04d301163ecd33d9e96f017 diff --git a/repos/gems/recipes/src/vfs_audit/hash b/repos/gems/recipes/src/vfs_audit/hash index 5648f438d1..8161f44704 100644 --- a/repos/gems/recipes/src/vfs_audit/hash +++ b/repos/gems/recipes/src/vfs_audit/hash @@ -1 +1 @@ -2022-08-30 a47f8ab0040ac4b6c170fa58ffb26e0d65cb66bb +2022-09-20 7f694363e88dfa42d6b0bd6d256b1916c476bc57 diff --git a/repos/gems/recipes/src/vfs_gpu/hash b/repos/gems/recipes/src/vfs_gpu/hash index 63e988713d..a9c4512470 100644 --- a/repos/gems/recipes/src/vfs_gpu/hash +++ b/repos/gems/recipes/src/vfs_gpu/hash @@ -1 +1 @@ -2022-08-30 12891eeb2fbe5ba0826228920840c99d4cd52bbf +2022-09-20 a0cf0f22cd24dab4120ab525b5f34ddc2ebf46a8 diff --git a/repos/gems/recipes/src/vfs_import/hash b/repos/gems/recipes/src/vfs_import/hash index 0b97ec0f16..bd7a0d7df1 100644 --- a/repos/gems/recipes/src/vfs_import/hash +++ b/repos/gems/recipes/src/vfs_import/hash @@ -1 +1 @@ -2022-08-30 a841e1f2da10d5268e99d109125dce2b5b20e7ba +2022-09-20 b05baa200b1c628efbe9ea22ddc2904a6e37d62d diff --git a/repos/gems/recipes/src/vfs_pipe/hash b/repos/gems/recipes/src/vfs_pipe/hash index c60e517751..8641bd9592 100644 --- a/repos/gems/recipes/src/vfs_pipe/hash +++ b/repos/gems/recipes/src/vfs_pipe/hash @@ -1 +1 @@ -2022-08-30 41b53b2f4df1d73e1cfe3e972f202ce57a7a1e24 +2022-09-20 5122744c54526884e60409f48b53fb9165de730d diff --git a/repos/gems/recipes/src/vfs_trace/hash b/repos/gems/recipes/src/vfs_trace/hash index 46b163a16a..ec8c8e5eaf 100644 --- a/repos/gems/recipes/src/vfs_trace/hash +++ b/repos/gems/recipes/src/vfs_trace/hash @@ -1 +1 @@ -2022-08-30 5e846fbc4da2f387bd21d97ca3eec4e744a294b7 +2022-09-20 e505eb226cc433d24ea68ee1832c538caa97c5d6 diff --git a/repos/gems/recipes/src/vfs_ttf/hash b/repos/gems/recipes/src/vfs_ttf/hash index bcb46920bf..17a3108389 100644 --- a/repos/gems/recipes/src/vfs_ttf/hash +++ b/repos/gems/recipes/src/vfs_ttf/hash @@ -1 +1 @@ -2022-08-30 662dacac176309542977fb006986089009d51c7e +2022-09-20 54e56b1cfa15f94c037a8f49e1430d037a3ced78 diff --git a/repos/gems/recipes/src/window_layouter/hash b/repos/gems/recipes/src/window_layouter/hash index 756d8b8152..c7e88c88cd 100644 --- a/repos/gems/recipes/src/window_layouter/hash +++ b/repos/gems/recipes/src/window_layouter/hash @@ -1 +1 @@ -2022-08-30 32862bea5a0e4a23fa2f7600cdd67036ac087c09 +2022-09-20 b4d83e18488b00f81f6f5d25441a0476d15a89cc diff --git a/repos/gems/recipes/src/wm/hash b/repos/gems/recipes/src/wm/hash index 24978cc954..652583fff3 100644 --- a/repos/gems/recipes/src/wm/hash +++ b/repos/gems/recipes/src/wm/hash @@ -1 +1 @@ -2022-08-30 332800192fb71eaaa024e67645b25eaec4191601 +2022-09-20 af4dba1b573d2117b349e2c21041823c5bed213b diff --git a/repos/libports/recipes/api/libgcov/hash b/repos/libports/recipes/api/libgcov/hash index 833ff32269..6472dbecf9 100644 --- a/repos/libports/recipes/api/libgcov/hash +++ b/repos/libports/recipes/api/libgcov/hash @@ -1 +1 @@ -2022-02-14 de05203f758e663b228d1166a4054b11fca56d10 +2022-09-20 b00d5d04adde01f4724f6a3a9005e5a06721f432 diff --git a/repos/libports/recipes/pkg/acpica/hash b/repos/libports/recipes/pkg/acpica/hash index 5e00bb6703..8ede7dae47 100644 --- a/repos/libports/recipes/pkg/acpica/hash +++ b/repos/libports/recipes/pkg/acpica/hash @@ -1 +1 @@ -2022-08-30 5ba5c0a2d5604a98d17b66684dde325ffefac371 +2022-09-20 84c1efb950b8715049ed3b9d5b9e1f76ac6f4b44 diff --git a/repos/libports/recipes/pkg/gcov/hash b/repos/libports/recipes/pkg/gcov/hash index 2c92bfab7f..fa2151dbc2 100644 --- a/repos/libports/recipes/pkg/gcov/hash +++ b/repos/libports/recipes/pkg/gcov/hash @@ -1 +1 @@ -2022-08-30 22eeaac151369cb6106fa3441ecfdc98b93c0808 +2022-09-20 0cd78441f396ccae62fd59981980a09e3df84d7f diff --git a/repos/libports/recipes/pkg/mesa_gears/hash b/repos/libports/recipes/pkg/mesa_gears/hash index b716acbe2c..46a782b153 100644 --- a/repos/libports/recipes/pkg/mesa_gears/hash +++ b/repos/libports/recipes/pkg/mesa_gears/hash @@ -1 +1 @@ -2022-08-30 52081432e2a9680d74e36c23e1a80e80f51fe23f +2022-09-20 3ae3ac7ca3cb196dde2377dc50a06b01a4771fba diff --git a/repos/libports/recipes/pkg/mesa_gpu-cpu/hash b/repos/libports/recipes/pkg/mesa_gpu-cpu/hash index b0e4eb8861..bfc09ebeab 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-cpu/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-cpu/hash @@ -1 +1 @@ -2022-08-30 660e77c4c8c06c37b05b7a65f634b42a46e77c21 +2022-09-20 d759658d7ca68f4bd95e4e1f3bcf11f251b10972 diff --git a/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash b/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash index 9d3c55797c..61c41ef107 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-etnaviv/hash @@ -1 +1 @@ -2022-08-30 f1ca12dcb0a225f69c1d663c8071e1eb23f32436 +2022-09-20 180b530982ee65ff1e554bf0299f8a32a28ecf41 diff --git a/repos/libports/recipes/pkg/mesa_gpu-intel/hash b/repos/libports/recipes/pkg/mesa_gpu-intel/hash index 30fe799ec0..1d49b20bfc 100644 --- a/repos/libports/recipes/pkg/mesa_gpu-intel/hash +++ b/repos/libports/recipes/pkg/mesa_gpu-intel/hash @@ -1 +1 @@ -2022-08-30 da0e1a04117c934a74bcdd659135f072adedcd52 +2022-09-20 c86cf50647571cfabccec13e395fad06b3fbf36c diff --git a/repos/libports/recipes/pkg/pdf_view/hash b/repos/libports/recipes/pkg/pdf_view/hash index acde59563b..bbd9493565 100644 --- a/repos/libports/recipes/pkg/pdf_view/hash +++ b/repos/libports/recipes/pkg/pdf_view/hash @@ -1 +1 @@ -2022-08-30 16e81dc7acde181ade10c31af58b5ef3e8a2311e +2022-09-20 f786987d31ed07ac7c9ac525c760cd020da6ca30 diff --git a/repos/libports/recipes/pkg/qt5_textedit/hash b/repos/libports/recipes/pkg/qt5_textedit/hash index de539069e9..9f8a0f746e 100644 --- a/repos/libports/recipes/pkg/qt5_textedit/hash +++ b/repos/libports/recipes/pkg/qt5_textedit/hash @@ -1 +1 @@ -2022-08-30 c88f40f5d6c3a68d21e667b66e6322dd7a7a51a7 +2022-09-20 43fa809d97b1d3c5eb1380efe03f50f57d842c44 diff --git a/repos/libports/recipes/pkg/system_clock-pc/hash b/repos/libports/recipes/pkg/system_clock-pc/hash index 81081ac06e..44d2e32520 100644 --- a/repos/libports/recipes/pkg/system_clock-pc/hash +++ b/repos/libports/recipes/pkg/system_clock-pc/hash @@ -1 +1 @@ -2022-08-30 ebd9c34462a2ca5f0d77ced30aa469f0a9d844fb +2022-09-20 a2a88ff17c3a9e7f3101946154274343ae82c818 diff --git a/repos/libports/recipes/pkg/system_rtc-linux/hash b/repos/libports/recipes/pkg/system_rtc-linux/hash index 4d7a34f61a..2d86eabcfa 100644 --- a/repos/libports/recipes/pkg/system_rtc-linux/hash +++ b/repos/libports/recipes/pkg/system_rtc-linux/hash @@ -1 +1 @@ -2022-08-30 ed68d7785b1b4186079fe8c915243b1df7c49a5a +2022-09-20 e4ddda6eef57b361eeb5bd320eaae6cdda293014 diff --git a/repos/libports/recipes/pkg/system_rtc-pc/hash b/repos/libports/recipes/pkg/system_rtc-pc/hash index 510ffda00f..7e832df874 100644 --- a/repos/libports/recipes/pkg/system_rtc-pc/hash +++ b/repos/libports/recipes/pkg/system_rtc-pc/hash @@ -1 +1 @@ -2022-08-30 3a71e19bb7c707c4ef3e0fb9e2a488e735b0a800 +2022-09-20 a1ea5a14b66b2f78355cf518faddf42e4ba260f3 diff --git a/repos/libports/recipes/pkg/test-expat/hash b/repos/libports/recipes/pkg/test-expat/hash index 39d8206c8b..e41e391eca 100644 --- a/repos/libports/recipes/pkg/test-expat/hash +++ b/repos/libports/recipes/pkg/test-expat/hash @@ -1 +1 @@ -2022-08-30 99962fbd6f3866a64144a7c574f18977383a49c8 +2022-09-20 6c9261dca3cd311187ff5205e7d6348025bdc6f8 diff --git a/repos/libports/recipes/pkg/test-ldso/hash b/repos/libports/recipes/pkg/test-ldso/hash index 8dda5d9811..882619a8b3 100644 --- a/repos/libports/recipes/pkg/test-ldso/hash +++ b/repos/libports/recipes/pkg/test-ldso/hash @@ -1 +1 @@ -2022-08-30 c3239684a9238fd38cbd7826e5f7cd74ca4aea96 +2022-09-20 4c01b44c338c0592a2e33cca7646821c21b80c09 diff --git a/repos/libports/recipes/pkg/test-libc/hash b/repos/libports/recipes/pkg/test-libc/hash index 3d665017b3..47a3dce837 100644 --- a/repos/libports/recipes/pkg/test-libc/hash +++ b/repos/libports/recipes/pkg/test-libc/hash @@ -1 +1 @@ -2022-08-30 e0d31ed977af03c5945d18e88c2eebc43151c142 +2022-09-20 36190e638229c4952cfd55577e750e2a2d81130c diff --git a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash index e3b62c55c7..0c19031fe8 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lwip/hash @@ -1 +1 @@ -2022-08-30 d7f028438ed22d4b2b34136c879a005a7d8692b5 +2022-09-20 d15f2e1c7298d02f4d68cd623ac7921baa0c8394 diff --git a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash index 85923d0483..0d4348c0d1 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_lxip/hash @@ -1 +1 @@ -2022-08-30 49cd465fec5d5b2cd3d230c6bcc445d3977eb65d +2022-09-20 39eb4690525570d893c495de2b5a1bdee9f42661 diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash index 55d06a08da..55e9243eb4 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lwip/hash @@ -1 +1 @@ -2022-08-30 ad27752a7c03d8cbdac5d4dab3abde2f61dbe417 +2022-09-20 a5a50601c73cb9a2d701781b3b1d8ec56ab060b8 diff --git a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash index f5142716d7..4c32c1c949 100644 --- a/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash +++ b/repos/libports/recipes/pkg/test-libc_connect_vfs_server_lxip/hash @@ -1 +1 @@ -2022-08-30 0c56a02df0d609a0880309050c5d5fd92fea72f1 +2022-09-20 f81cc7960235e32148050f5eb8f278a7c5f30377 diff --git a/repos/libports/recipes/pkg/test-libc_counter/hash b/repos/libports/recipes/pkg/test-libc_counter/hash index 693b16fb94..748700330f 100644 --- a/repos/libports/recipes/pkg/test-libc_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_counter/hash @@ -1 +1 @@ -2022-08-30 033c049d0f102858354906e638ba021b55e73977 +2022-09-20 24e7c679abcb290a30b654ba735a4e7d95ef5fa0 diff --git a/repos/libports/recipes/pkg/test-libc_execve/hash b/repos/libports/recipes/pkg/test-libc_execve/hash index 77a30175ad..8f3d901dcd 100644 --- a/repos/libports/recipes/pkg/test-libc_execve/hash +++ b/repos/libports/recipes/pkg/test-libc_execve/hash @@ -1 +1 @@ -2022-08-30 ae2ec384c5b3aabdfa8e5f1e55972043add2b4d3 +2022-09-20 bc174f3fdc267fde22b0ce4561ef13a2b95aff19 diff --git a/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash b/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash index 45cb7da97b..91d9908a14 100644 --- a/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_fifo_pipe/hash @@ -1 +1 @@ -2022-08-30 ab379af824f5dca2cb38f4b5a28f44845601324c +2022-09-20 011632de714cdc0431e36f8a1d07cf65c78d7d47 diff --git a/repos/libports/recipes/pkg/test-libc_fork/hash b/repos/libports/recipes/pkg/test-libc_fork/hash index 3b0f1f785f..593472d081 100644 --- a/repos/libports/recipes/pkg/test-libc_fork/hash +++ b/repos/libports/recipes/pkg/test-libc_fork/hash @@ -1 +1 @@ -2022-08-30 6b1d4ad8a536f2cb9c1aecb5bda8e2af5457762b +2022-09-20 4be1006dffa26a42cc268133c1573db94def2d0f diff --git a/repos/libports/recipes/pkg/test-libc_getenv/hash b/repos/libports/recipes/pkg/test-libc_getenv/hash index 3420d8ce4f..f64012233f 100644 --- a/repos/libports/recipes/pkg/test-libc_getenv/hash +++ b/repos/libports/recipes/pkg/test-libc_getenv/hash @@ -1 +1 @@ -2022-08-30 b1f0a811747285c47d3611d6ecfae1d6f2e3d6ff +2022-09-20 a6274f248a1eb2f5ff73723ce3d24d808f2f3b9b diff --git a/repos/libports/recipes/pkg/test-libc_pipe/hash b/repos/libports/recipes/pkg/test-libc_pipe/hash index 7e014c3ba3..272025ba04 100644 --- a/repos/libports/recipes/pkg/test-libc_pipe/hash +++ b/repos/libports/recipes/pkg/test-libc_pipe/hash @@ -1 +1 @@ -2022-08-30 3d319b9a9c71c7c989e582b32f4e420fa2399a72 +2022-09-20 aed5ee9c698126ebc11b0e94a9704f8527f60851 diff --git a/repos/libports/recipes/pkg/test-libc_vfs/hash b/repos/libports/recipes/pkg/test-libc_vfs/hash index 99d10cc07d..98089333c8 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs/hash @@ -1 +1 @@ -2022-08-30 65350a9998b2a085c79e3c10706074a141dc3377 +2022-09-20 5fde0234fe58b8e36f8117a8800cdb7af3196cb2 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_block/hash b/repos/libports/recipes/pkg/test-libc_vfs_block/hash index a30ab8ffb1..7c3e3af746 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_block/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_block/hash @@ -1 +1 @@ -2022-08-30 f116e35a8ca27514074770d12fa1fe1c05d58980 +2022-09-20 625c4f20dc27b26e63a3d3004461a66a4462453a diff --git a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash index 693e7047cd..50cc07690f 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_counter/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_counter/hash @@ -1 +1 @@ -2022-08-30 c6c9eb921e2336facec686e7549c992e2fd31c66 +2022-09-20 612fd3c3f2e2a2e796711efdbd5d453de8639fa9 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash index a871dc5265..0ceabe420b 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs/hash @@ -1 +1 @@ -2022-08-30 8ed4e32d5666e169477c0eb5b87f2b301cea6a27 +2022-09-20 b3c05e7a9f6c217790c5d254925e44baed3edcf8 diff --git a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash index fc6c0377fc..1319c3755b 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_fs_chained/hash @@ -1 +1 @@ -2022-08-30 bdebee5db63ba1abfeb48ac3d54641ea71d64db8 +2022-09-20 93f65f72406d37ba0037f1807c7ddfd2e91d628a diff --git a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash index 496d42e355..4f25bc2ecd 100644 --- a/repos/libports/recipes/pkg/test-libc_vfs_ram/hash +++ b/repos/libports/recipes/pkg/test-libc_vfs_ram/hash @@ -1 +1 @@ -2022-08-30 4f332f8265797ccd2febadcd742a01a102205a58 +2022-09-20 e4f8c6ae3845acd511b30cbdd2042edfb9d16e12 diff --git a/repos/libports/recipes/pkg/test-pthread/hash b/repos/libports/recipes/pkg/test-pthread/hash index f362a36c87..e64357eb94 100644 --- a/repos/libports/recipes/pkg/test-pthread/hash +++ b/repos/libports/recipes/pkg/test-pthread/hash @@ -1 +1 @@ -2022-08-30 16c700299b4298e6b5834cd80f699ac507567023 +2022-09-20 a1687572cdf80d46e4a81cda6402c7b43f8d0a91 diff --git a/repos/libports/recipes/pkg/test-sequence/hash b/repos/libports/recipes/pkg/test-sequence/hash index ef4052ea5f..419d7cb583 100644 --- a/repos/libports/recipes/pkg/test-sequence/hash +++ b/repos/libports/recipes/pkg/test-sequence/hash @@ -1 +1 @@ -2022-08-30 ed0329500e4da43e1af090567fa46bbba4988b88 +2022-09-20 ae43f2ee40042d08c64019e3a434175b4b64b187 diff --git a/repos/libports/recipes/pkg/test-spark/hash b/repos/libports/recipes/pkg/test-spark/hash index d728ad8fe3..a5ecdbbd15 100644 --- a/repos/libports/recipes/pkg/test-spark/hash +++ b/repos/libports/recipes/pkg/test-spark/hash @@ -1 +1 @@ -2022-08-30 638aa49242bde00ff86d8b64438b9e5f90e245d2 +2022-09-20 6b964a889ef0895943429ff0875ca729a39063df diff --git a/repos/libports/recipes/pkg/test-spark_exception/hash b/repos/libports/recipes/pkg/test-spark_exception/hash index edb9023b66..ea339f89a0 100644 --- a/repos/libports/recipes/pkg/test-spark_exception/hash +++ b/repos/libports/recipes/pkg/test-spark_exception/hash @@ -1 +1 @@ -2022-08-30 84b10c29c17ea870c43e3f2003ee9a11d9a963be +2022-09-20 ec732f259864633a374b07c2865b4c359cbb8bae diff --git a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash index eca5f3a015..4f71d9985e 100644 --- a/repos/libports/recipes/pkg/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/pkg/test-spark_secondary_stack/hash @@ -1 +1 @@ -2022-08-30 36581c52f8e74f21122897af49a3383825eb138e +2022-09-20 d2354c7d5ffbf4a4a9d6209423eb847ede045847 diff --git a/repos/libports/recipes/pkg/test-stdcxx/hash b/repos/libports/recipes/pkg/test-stdcxx/hash index 77b5edc383..4dedd59aea 100644 --- a/repos/libports/recipes/pkg/test-stdcxx/hash +++ b/repos/libports/recipes/pkg/test-stdcxx/hash @@ -1 +1 @@ -2022-08-30 3100169985337456b88e006aa7b6ff927defdc48 +2022-09-20 4bdec849a63d1f2e0a037e8bbdcd2d6660218849 diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash index 3924912277..cccad0fcbb 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lwip/hash @@ -1 +1 @@ -2022-08-30 b6d86a65cb73492ed8b56cc80ccac39882321edd +2022-09-20 df934b22b9affa177efdbdc138471486318f2df4 diff --git a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash index b54bbda835..4494b68262 100644 --- a/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash +++ b/repos/libports/recipes/pkg/test-tcp_bulk_lxip/hash @@ -1 +1 @@ -2022-08-30 6df14f497967809dcd1205008844c50789006305 +2022-09-20 27be6e14c344133e400fa3be80f659aa2d766675 diff --git a/repos/libports/recipes/pkg/usb_webcam/hash b/repos/libports/recipes/pkg/usb_webcam/hash index e8e0d51c6a..05af42175e 100644 --- a/repos/libports/recipes/pkg/usb_webcam/hash +++ b/repos/libports/recipes/pkg/usb_webcam/hash @@ -1 +1 @@ -2022-08-30 6fa1eccff8ced8e8c8a2745d119160cf390d7bdf +2022-09-20 f905b8a83bb1efc5fc923c371220a99daa8e4190 diff --git a/repos/libports/recipes/src/acpica/hash b/repos/libports/recipes/src/acpica/hash index ea1b0c93a8..c38d58dc0b 100644 --- a/repos/libports/recipes/src/acpica/hash +++ b/repos/libports/recipes/src/acpica/hash @@ -1 +1 @@ -2022-08-30 7511cc6ad341b5c37e25a6c3327701e153a76a36 +2022-09-20 2f7dbd3af3aebe95a173960988094755cd282fbd diff --git a/repos/libports/recipes/src/curl/hash b/repos/libports/recipes/src/curl/hash index 822836c7ad..32ff57deca 100644 --- a/repos/libports/recipes/src/curl/hash +++ b/repos/libports/recipes/src/curl/hash @@ -1 +1 @@ -2022-08-30 8a512354d0399fa098aa471fcc265a3682b3eefe +2022-09-20 2b42dc9b73136d8971e0a660daf8c12479be5ec2 diff --git a/repos/libports/recipes/src/expat/hash b/repos/libports/recipes/src/expat/hash index a215b07832..089a872c3b 100644 --- a/repos/libports/recipes/src/expat/hash +++ b/repos/libports/recipes/src/expat/hash @@ -1 +1 @@ -2022-08-30 89a84ab30037f0c4fb6a7e34f2892ade6cb51a66 +2022-09-20 2ed1beeb343ab5bae0caefa23adb84b5e79b6449 diff --git a/repos/libports/recipes/src/extract/hash b/repos/libports/recipes/src/extract/hash index a0aa070357..4535814b68 100644 --- a/repos/libports/recipes/src/extract/hash +++ b/repos/libports/recipes/src/extract/hash @@ -1 +1 @@ -2022-08-30 23af68368bfc64c5fda6cd7f118719f66970059c +2022-09-20 55f8474ccc8f29fe1108d357fe574451fb31a99d diff --git a/repos/libports/recipes/src/fetchurl/hash b/repos/libports/recipes/src/fetchurl/hash index d1399ee917..a246485252 100644 --- a/repos/libports/recipes/src/fetchurl/hash +++ b/repos/libports/recipes/src/fetchurl/hash @@ -1 +1 @@ -2022-08-30 16f55c7c211281c4d2c6ed0f77579bd81f17194f +2022-09-20 b307d91b321011f72cd96172c6beda61477d4b1b diff --git a/repos/libports/recipes/src/ffi/hash b/repos/libports/recipes/src/ffi/hash index 29860f0e52..103fa42c11 100644 --- a/repos/libports/recipes/src/ffi/hash +++ b/repos/libports/recipes/src/ffi/hash @@ -1 +1 @@ -2022-08-30 0be8b75858700b2055d1afd97202856599fb4444 +2022-09-20 2884df560359edc475faf202944e6d2c33461d58 diff --git a/repos/libports/recipes/src/freetype/hash b/repos/libports/recipes/src/freetype/hash index eaeb90faf5..6afaa9a40b 100644 --- a/repos/libports/recipes/src/freetype/hash +++ b/repos/libports/recipes/src/freetype/hash @@ -1 +1 @@ -2022-08-30 83ccac5cdb99106656cdfd1d95ef706b00e5225b +2022-09-20 679662de62ef840937909e168d687efba4eaeb01 diff --git a/repos/libports/recipes/src/gcov/hash b/repos/libports/recipes/src/gcov/hash index 94bd2782f4..0c62d17a94 100644 --- a/repos/libports/recipes/src/gcov/hash +++ b/repos/libports/recipes/src/gcov/hash @@ -1 +1 @@ -2022-08-30 24cc4e600ed16e709a81656d6daa5b0ce787d884 +2022-09-20 4757970dade1e5a66b64f4fe83b233ad1e3c5bf9 diff --git a/repos/libports/recipes/src/gmp/hash b/repos/libports/recipes/src/gmp/hash index baa3c89154..6479928113 100644 --- a/repos/libports/recipes/src/gmp/hash +++ b/repos/libports/recipes/src/gmp/hash @@ -1 +1 @@ -2022-08-30 571d17e4c1b89d9b7aa72eaca3ed9ef55641eb4a +2022-09-20 b5b7cedcb6d1c91e90df4e237044d4b615b171bc diff --git a/repos/libports/recipes/src/icu/hash b/repos/libports/recipes/src/icu/hash index 181657c19b..aac6b686b7 100644 --- a/repos/libports/recipes/src/icu/hash +++ b/repos/libports/recipes/src/icu/hash @@ -1 +1 @@ -2022-08-30 ce3cf01a4f081281f4780673515ea760a2f68779 +2022-09-20 2c33a86082764c248d194ee056510d3618c6fb3e diff --git a/repos/libports/recipes/src/jbig2dec/hash b/repos/libports/recipes/src/jbig2dec/hash index de98ef94a6..646155e6cc 100644 --- a/repos/libports/recipes/src/jbig2dec/hash +++ b/repos/libports/recipes/src/jbig2dec/hash @@ -1 +1 @@ -2022-08-30 694d9637c0949be5d52172acff175e2c26e20358 +2022-09-20 1a9994db1bf4b4a33ccba255d80398eefe9b0b8c diff --git a/repos/libports/recipes/src/jpeg/hash b/repos/libports/recipes/src/jpeg/hash index 758cbe7887..beca8ba600 100644 --- a/repos/libports/recipes/src/jpeg/hash +++ b/repos/libports/recipes/src/jpeg/hash @@ -1 +1 @@ -2022-08-30 5b1c05f8cb16f3712eba069ed0b111ce86ad33d0 +2022-09-20 041bd52075e34cf85c25f8afe43aa24ea7683a3a diff --git a/repos/libports/recipes/src/libarchive/hash b/repos/libports/recipes/src/libarchive/hash index a663155038..5753f6768c 100644 --- a/repos/libports/recipes/src/libarchive/hash +++ b/repos/libports/recipes/src/libarchive/hash @@ -1 +1 @@ -2022-08-30 6d481d917238851ea7c7f800cac211d2eee35372 +2022-09-20 da2a277ee6fd4078d223a1005a71e38362265a70 diff --git a/repos/libports/recipes/src/libc/hash b/repos/libports/recipes/src/libc/hash index cb18c09520..dcdfeb2570 100644 --- a/repos/libports/recipes/src/libc/hash +++ b/repos/libports/recipes/src/libc/hash @@ -1 +1 @@ -2022-08-30 c1968280fa519a45f20312b8927dfaea803ca095 +2022-09-20 8d301a0b436f820a3f342b2ab5a0c15a533bc8f1 diff --git a/repos/libports/recipes/src/libdrm/hash b/repos/libports/recipes/src/libdrm/hash index 28a9fa6615..9e4624edbc 100644 --- a/repos/libports/recipes/src/libdrm/hash +++ b/repos/libports/recipes/src/libdrm/hash @@ -1 +1 @@ -2022-08-30 f639588e9e3c6a2248d241510e67b77bc1102603 +2022-09-20 8da314c5723d8b1591d5dfd400848faee1d6c168 diff --git a/repos/libports/recipes/src/libiconv/hash b/repos/libports/recipes/src/libiconv/hash index 1a9255cdd6..9d949face1 100644 --- a/repos/libports/recipes/src/libiconv/hash +++ b/repos/libports/recipes/src/libiconv/hash @@ -1 +1 @@ -2022-08-30 bd0fb235e0fa960759ae779fae741422aed4e4e6 +2022-09-20 b0d0abcfe4bf3cea9cf0f8bad058511692bdb275 diff --git a/repos/libports/recipes/src/liblzma/hash b/repos/libports/recipes/src/liblzma/hash index fca088429b..03b777390d 100644 --- a/repos/libports/recipes/src/liblzma/hash +++ b/repos/libports/recipes/src/liblzma/hash @@ -1 +1 @@ -2022-08-30 db2f672e6b072a2bbac64caecf97cf05b9ed7021 +2022-09-20 657a45131c8ce48b2e136eb7f6e3e92eddc8ee6b diff --git a/repos/libports/recipes/src/libpng/hash b/repos/libports/recipes/src/libpng/hash index 7a5826438d..c3d8f83dc4 100644 --- a/repos/libports/recipes/src/libpng/hash +++ b/repos/libports/recipes/src/libpng/hash @@ -1 +1 @@ -2022-08-30 456843d544091720450963ec403e2817dec83d47 +2022-09-20 844606386400336a4f72d4b5a6ddd7db5028da8f diff --git a/repos/libports/recipes/src/libqgenodeviewwidget/hash b/repos/libports/recipes/src/libqgenodeviewwidget/hash index cbac2197f2..e5d833cefb 100644 --- a/repos/libports/recipes/src/libqgenodeviewwidget/hash +++ b/repos/libports/recipes/src/libqgenodeviewwidget/hash @@ -1 +1 @@ -2022-08-30 555336977f6d654152dbae114125bc59ac245a00 +2022-09-20 f5f9e876039281aabdea9814bcc915a11a2cef1e diff --git a/repos/libports/recipes/src/libqpluginwidget/hash b/repos/libports/recipes/src/libqpluginwidget/hash index ffc09fe53c..65dac6c496 100644 --- a/repos/libports/recipes/src/libqpluginwidget/hash +++ b/repos/libports/recipes/src/libqpluginwidget/hash @@ -1 +1 @@ -2022-08-30 c035c594225a254d5860f488ec93b952d1f00f3c +2022-09-20 698ee9c8459a9f5c7c4df4333c80ce068097d970 diff --git a/repos/libports/recipes/src/libsparkcrypto/hash b/repos/libports/recipes/src/libsparkcrypto/hash index a3e9dbebda..c822c1a1be 100644 --- a/repos/libports/recipes/src/libsparkcrypto/hash +++ b/repos/libports/recipes/src/libsparkcrypto/hash @@ -1 +1 @@ -2022-08-30 d195f923dfe1220d57e3cf1c67e13f916f3df7f1 +2022-09-20 cd03ec783d3ffd717b985fefba11d80031e6b038 diff --git a/repos/libports/recipes/src/libssh/hash b/repos/libports/recipes/src/libssh/hash index 9307c77e69..d4ac9156dc 100644 --- a/repos/libports/recipes/src/libssh/hash +++ b/repos/libports/recipes/src/libssh/hash @@ -1 +1 @@ -2022-08-30 6bffb42e979e2efac10b33c7d27e872b55631f79 +2022-09-20 55658b63d0770036d91d8db34fbae90d65a1d285 diff --git a/repos/libports/recipes/src/libusb/hash b/repos/libports/recipes/src/libusb/hash index e169eb5ba1..6ce9f51649 100644 --- a/repos/libports/recipes/src/libusb/hash +++ b/repos/libports/recipes/src/libusb/hash @@ -1 +1 @@ -2022-08-30 6e56b87d13cb56f41947e9118ba92b736ba9f073 +2022-09-20 ddf232333a45670244392656a5baf2a53810f126 diff --git a/repos/libports/recipes/src/libuvc/hash b/repos/libports/recipes/src/libuvc/hash index 119a139e0f..d8abaf3769 100644 --- a/repos/libports/recipes/src/libuvc/hash +++ b/repos/libports/recipes/src/libuvc/hash @@ -1 +1 @@ -2022-08-30 0ca48139c9d7bf66a2433c35844d2cad0e32136f +2022-09-20 d338f6475fafa2a202a8259ddfbf1c9ad0bde31d diff --git a/repos/libports/recipes/src/libyuv/hash b/repos/libports/recipes/src/libyuv/hash index 02269383ef..58b928f5cc 100644 --- a/repos/libports/recipes/src/libyuv/hash +++ b/repos/libports/recipes/src/libyuv/hash @@ -1 +1 @@ -2022-08-30 214b12c209675a3aae86d56bcd097424be869442 +2022-09-20 bf41103397fdfdbd5e460638b8617159747b634d diff --git a/repos/libports/recipes/src/mesa/hash b/repos/libports/recipes/src/mesa/hash index 0cd0ad66ce..fad24b804f 100644 --- a/repos/libports/recipes/src/mesa/hash +++ b/repos/libports/recipes/src/mesa/hash @@ -1 +1 @@ -2022-08-30 fb9a55a2ef72e7040ed05e95c6eeed7f4523aec0 +2022-09-20 734c4b03edc84265f4b01e1425b4d6ee784b0737 diff --git a/repos/libports/recipes/src/mesa_gears/hash b/repos/libports/recipes/src/mesa_gears/hash index 9cfc02b6ef..22b7e5f7b4 100644 --- a/repos/libports/recipes/src/mesa_gears/hash +++ b/repos/libports/recipes/src/mesa_gears/hash @@ -1 +1 @@ -2022-08-30 8624fc2e9fdd83dee979d55f33a7545391ac90cd +2022-09-20 8f675b174196652e4ea461c2e18f9caf21a89a53 diff --git a/repos/libports/recipes/src/mupdf/hash b/repos/libports/recipes/src/mupdf/hash index 75194fe153..2af03489ca 100644 --- a/repos/libports/recipes/src/mupdf/hash +++ b/repos/libports/recipes/src/mupdf/hash @@ -1 +1 @@ -2022-08-30 ed82461e0720286089dff87672e515706caaaf68 +2022-09-20 b23e9f4006299c420f3fdfacf841527ac24d63e9 diff --git a/repos/libports/recipes/src/ncurses/hash b/repos/libports/recipes/src/ncurses/hash index 545edff86b..cf7db41134 100644 --- a/repos/libports/recipes/src/ncurses/hash +++ b/repos/libports/recipes/src/ncurses/hash @@ -1 +1 @@ -2022-08-30 90af827fa8627c7906232cbf64a99d960c7f7de9 +2022-09-20 a326fde06a4c3de889c82aafc654d79bb5864d47 diff --git a/repos/libports/recipes/src/openjpeg/hash b/repos/libports/recipes/src/openjpeg/hash index 70bd47a6d3..f23f210ceb 100644 --- a/repos/libports/recipes/src/openjpeg/hash +++ b/repos/libports/recipes/src/openjpeg/hash @@ -1 +1 @@ -2022-08-30 1c7b3d013679131ecea0bc73844b68929aef5aaa +2022-09-20 9ff601aceafac1b63c4fb079923b93e59d411979 diff --git a/repos/libports/recipes/src/openssl/hash b/repos/libports/recipes/src/openssl/hash index 1d8fa81242..42f9121328 100644 --- a/repos/libports/recipes/src/openssl/hash +++ b/repos/libports/recipes/src/openssl/hash @@ -1 +1 @@ -2022-08-30 e7b37a0000bd69a05d8fc42757d8d0f37f2fcde8 +2022-09-20 1f50428a4a36a39cda1186a6101bcfd2cc4192aa diff --git a/repos/libports/recipes/src/pcre/hash b/repos/libports/recipes/src/pcre/hash index 72ea8a003a..df4ccc6f57 100644 --- a/repos/libports/recipes/src/pcre/hash +++ b/repos/libports/recipes/src/pcre/hash @@ -1 +1 @@ -2022-08-30 a152619b05946f449e41b9171889db8cd13f5422 +2022-09-20 c33bc2cf1d617362619763ecdfa47bd3b04ec024 diff --git a/repos/libports/recipes/src/pcre16/hash b/repos/libports/recipes/src/pcre16/hash index 8ef40ff335..67f6e3c959 100644 --- a/repos/libports/recipes/src/pcre16/hash +++ b/repos/libports/recipes/src/pcre16/hash @@ -1 +1 @@ -2022-08-30 de72d6dcdf36ec84ff3890b27425a0c313a53bd1 +2022-09-20 9012960553c3c4cf8cbcb96ef8f8b7222c465d9d diff --git a/repos/libports/recipes/src/pcsc-lite/hash b/repos/libports/recipes/src/pcsc-lite/hash index de7c3ab9f7..75ebd0931c 100644 --- a/repos/libports/recipes/src/pcsc-lite/hash +++ b/repos/libports/recipes/src/pcsc-lite/hash @@ -1 +1 @@ -2022-08-30 1d1c5306f8b63d7906686e644e96a9c365980784 +2022-09-20 21226bd2f3e54fb9cac3385f7421aa4a1c8b3492 diff --git a/repos/libports/recipes/src/pdf_view/hash b/repos/libports/recipes/src/pdf_view/hash index 02a288b8ea..5b8d91d41f 100644 --- a/repos/libports/recipes/src/pdf_view/hash +++ b/repos/libports/recipes/src/pdf_view/hash @@ -1 +1 @@ -2022-08-30 a4cda35e3fdcda892f1f374214dab93e1e7559ac +2022-09-20 19b27493336afd89b2f8d0ac2e79a3a8a9e41b14 diff --git a/repos/libports/recipes/src/posix/hash b/repos/libports/recipes/src/posix/hash index a16a61db46..3bb82c4c77 100644 --- a/repos/libports/recipes/src/posix/hash +++ b/repos/libports/recipes/src/posix/hash @@ -1 +1 @@ -2022-08-30 b71f7c65086511e590d0d4ade5f7d11071aee9c9 +2022-09-20 9fad721b8562656dc64c65780ebb76204c762ab4 diff --git a/repos/libports/recipes/src/qt5_base/hash b/repos/libports/recipes/src/qt5_base/hash index e211054f36..2ca6ddc491 100644 --- a/repos/libports/recipes/src/qt5_base/hash +++ b/repos/libports/recipes/src/qt5_base/hash @@ -1 +1 @@ -2022-08-30 97acf77739cf1f46e9e1b5b46aa6ac4305a990da +2022-09-20 659529a248f567ecc760bfb2db710b9db94f2a5f diff --git a/repos/libports/recipes/src/qt5_component/hash b/repos/libports/recipes/src/qt5_component/hash index 1ba4a55604..168c8e8518 100644 --- a/repos/libports/recipes/src/qt5_component/hash +++ b/repos/libports/recipes/src/qt5_component/hash @@ -1 +1 @@ -2022-08-30 88759aaa2ed5630abb70a19742b73aad2f2adf4c +2022-09-20 281fd2079a59855a664095b567cf2c1beb2aba86 diff --git a/repos/libports/recipes/src/qt5_declarative/hash b/repos/libports/recipes/src/qt5_declarative/hash index 66a7f362ff..7d3c28d59d 100644 --- a/repos/libports/recipes/src/qt5_declarative/hash +++ b/repos/libports/recipes/src/qt5_declarative/hash @@ -1 +1 @@ -2022-08-30 c7948c911c30080615997a4fb7d870a84e4ab6d2 +2022-09-20 55e8fcd3ee409df0dbf9c2f5cd02778fe21b7e86 diff --git a/repos/libports/recipes/src/qt5_graphicaleffects/hash b/repos/libports/recipes/src/qt5_graphicaleffects/hash index 53acb8fd53..f78b9f2255 100644 --- a/repos/libports/recipes/src/qt5_graphicaleffects/hash +++ b/repos/libports/recipes/src/qt5_graphicaleffects/hash @@ -1 +1 @@ -2022-08-30 b41fedefeb2407a2c0cf273d3375afe0341f186a +2022-09-20 6cf72310c4eb2905e3efbe3adfec288433f2e934 diff --git a/repos/libports/recipes/src/qt5_launchpad/hash b/repos/libports/recipes/src/qt5_launchpad/hash index c82b27e3ec..9cfa230d8f 100644 --- a/repos/libports/recipes/src/qt5_launchpad/hash +++ b/repos/libports/recipes/src/qt5_launchpad/hash @@ -1 +1 @@ -2022-08-30 a4c661ce43a480dd57e33663c247a19db0fb2da9 +2022-09-20 b78a4d26d981dfd168480b2b6dce0a135e7ed887 diff --git a/repos/libports/recipes/src/qt5_quickcontrols/hash b/repos/libports/recipes/src/qt5_quickcontrols/hash index 25b6fb8689..d1f627e5d7 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols/hash +++ b/repos/libports/recipes/src/qt5_quickcontrols/hash @@ -1 +1 @@ -2022-08-30 5830aa0d6e1b3dd218c8d3dd4dbcc3d11195f882 +2022-09-20 4fefc4a7c46449a25e150001b73bdb5f98e22c95 diff --git a/repos/libports/recipes/src/qt5_quickcontrols2/hash b/repos/libports/recipes/src/qt5_quickcontrols2/hash index d5c7d142e4..1f9fc0d6b7 100644 --- a/repos/libports/recipes/src/qt5_quickcontrols2/hash +++ b/repos/libports/recipes/src/qt5_quickcontrols2/hash @@ -1 +1 @@ -2022-08-30 ce2f270275698310a22df0cee8ac160b6456d865 +2022-09-20 31d009b78ff030010f6db9dfaa15bccd3ba445b5 diff --git a/repos/libports/recipes/src/qt5_svg/hash b/repos/libports/recipes/src/qt5_svg/hash index 33f402ab43..f7994eab1f 100644 --- a/repos/libports/recipes/src/qt5_svg/hash +++ b/repos/libports/recipes/src/qt5_svg/hash @@ -1 +1 @@ -2022-08-30 897a055ee195409f9e1e3e114b4b6f2d13ef1f12 +2022-09-20 0f5fe887f6983361292900c4ad65d03e60deeb55 diff --git a/repos/libports/recipes/src/qt5_virtualkeyboard/hash b/repos/libports/recipes/src/qt5_virtualkeyboard/hash index 9dc5b4ef67..36e3279481 100644 --- a/repos/libports/recipes/src/qt5_virtualkeyboard/hash +++ b/repos/libports/recipes/src/qt5_virtualkeyboard/hash @@ -1 +1 @@ -2022-08-30 8fdf9279aba854dba759c31cfca3b85662e01d5c +2022-09-20 06964a1a05dc8fbb04c04bdbc975e770e316f183 diff --git a/repos/libports/recipes/src/sanitizer/hash b/repos/libports/recipes/src/sanitizer/hash index d84a438e7e..1797e10dc6 100644 --- a/repos/libports/recipes/src/sanitizer/hash +++ b/repos/libports/recipes/src/sanitizer/hash @@ -1 +1 @@ -2022-08-30 2d84ab57188e34ae16291422e8febd95438adbe8 +2022-09-20 d20eed725c9f138542a7ae65757d06540669fa43 diff --git a/repos/libports/recipes/src/spark/hash b/repos/libports/recipes/src/spark/hash index a840759a43..6ce1e6c3ec 100644 --- a/repos/libports/recipes/src/spark/hash +++ b/repos/libports/recipes/src/spark/hash @@ -1 +1 @@ -2022-08-30 7abf757493fa381dfa5032197edc5cd98f3bf3fd +2022-09-20 454034f0ab6296cac4b4ba0f7fbe69924fe859f0 diff --git a/repos/libports/recipes/src/stdcxx/hash b/repos/libports/recipes/src/stdcxx/hash index 302588d4eb..e90dc7d2b1 100644 --- a/repos/libports/recipes/src/stdcxx/hash +++ b/repos/libports/recipes/src/stdcxx/hash @@ -1 +1 @@ -2022-08-30 5d3f749aec25b0ca2ce5fd68aaffc73ed5729ef4 +2022-09-20 824f40cafadc0c65375f7cac6493a7929651d9a7 diff --git a/repos/libports/recipes/src/system_rtc/hash b/repos/libports/recipes/src/system_rtc/hash index e984fb283e..f6a65bf2c8 100644 --- a/repos/libports/recipes/src/system_rtc/hash +++ b/repos/libports/recipes/src/system_rtc/hash @@ -1 +1 @@ -2022-08-30 0b6ac0e4e87cd7bc4d804ae562f2f6e03bb02d85 +2022-09-20 38bd2b06a6f3e39a55d322ca1cd1ee51810ffa2f diff --git a/repos/libports/recipes/src/test-ldso/hash b/repos/libports/recipes/src/test-ldso/hash index 6bbe8b326b..48c2dc3aea 100644 --- a/repos/libports/recipes/src/test-ldso/hash +++ b/repos/libports/recipes/src/test-ldso/hash @@ -1 +1 @@ -2022-08-30 68334fcad9fcbb0f93bd90013ad8768066a400ff +2022-09-20 88c66a49e022b96e14bdd9e7bae63fa48b93fe27 diff --git a/repos/libports/recipes/src/test-libc/hash b/repos/libports/recipes/src/test-libc/hash index 48daa3e773..d37c53f12a 100644 --- a/repos/libports/recipes/src/test-libc/hash +++ b/repos/libports/recipes/src/test-libc/hash @@ -1 +1 @@ -2022-08-30 b0c6ff465b1430d7b66c27cb59e2ccf20086bdcc +2022-09-20 d7e9e58cca32fff50f25f6c4d0e1539c770c2731 diff --git a/repos/libports/recipes/src/test-libc_fifo_pipe/hash b/repos/libports/recipes/src/test-libc_fifo_pipe/hash index 62654122f2..78564dad83 100644 --- a/repos/libports/recipes/src/test-libc_fifo_pipe/hash +++ b/repos/libports/recipes/src/test-libc_fifo_pipe/hash @@ -1 +1 @@ -2022-08-30 26ce138988e559dee07aea386572090bb5f2024d +2022-09-20 784d1abb0afebb54c60ff1f6f1a59dcf577d353c diff --git a/repos/libports/recipes/src/test-libc_vfs/hash b/repos/libports/recipes/src/test-libc_vfs/hash index 6ec08097ae..6aa34e51b3 100644 --- a/repos/libports/recipes/src/test-libc_vfs/hash +++ b/repos/libports/recipes/src/test-libc_vfs/hash @@ -1 +1 @@ -2022-08-30 6a64bbc89399e6b6f77de93d1ef9a9bb4486ec00 +2022-09-20 104252758ed3da987c75e918a168afec112e2273 diff --git a/repos/libports/recipes/src/test-libc_vfs_block/hash b/repos/libports/recipes/src/test-libc_vfs_block/hash index 18530a57e2..a03a9f1dcf 100644 --- a/repos/libports/recipes/src/test-libc_vfs_block/hash +++ b/repos/libports/recipes/src/test-libc_vfs_block/hash @@ -1 +1 @@ -2022-08-30 1a19bb6fcb1146fdb0a57e3bc0ed0a42ebc686a8 +2022-09-20 8fca7b8aa43dd6b4ddddb643c88644ea5d46524e diff --git a/repos/libports/recipes/src/test-netty/hash b/repos/libports/recipes/src/test-netty/hash index 605b45645c..452d4c35cd 100644 --- a/repos/libports/recipes/src/test-netty/hash +++ b/repos/libports/recipes/src/test-netty/hash @@ -1 +1 @@ -2022-08-30 c56e6744ccd071000455ca64dea482c88a24bfda +2022-09-20 c023ee73fa454e1ff60f1647e845db4eacd42849 diff --git a/repos/libports/recipes/src/test-pthread/hash b/repos/libports/recipes/src/test-pthread/hash index 1c9df4c8c2..92e43e8963 100644 --- a/repos/libports/recipes/src/test-pthread/hash +++ b/repos/libports/recipes/src/test-pthread/hash @@ -1 +1 @@ -2022-08-30 f481c6de3acdbb92559888064c862bef5ae239b0 +2022-09-20 19af5dc755128a48d97325fa19a425bda094c1c8 diff --git a/repos/libports/recipes/src/test-qpluginwidget/hash b/repos/libports/recipes/src/test-qpluginwidget/hash index 0110c5addc..3092dcf189 100644 --- a/repos/libports/recipes/src/test-qpluginwidget/hash +++ b/repos/libports/recipes/src/test-qpluginwidget/hash @@ -1 +1 @@ -2022-08-30 c5471327fbb9478b5005ca9e111d914c2b06ecb4 +2022-09-20 4689070acae1fa2f62393c62dd01333ab5e1ec2f diff --git a/repos/libports/recipes/src/test-spark/hash b/repos/libports/recipes/src/test-spark/hash index f03b4a56b4..70f9866961 100644 --- a/repos/libports/recipes/src/test-spark/hash +++ b/repos/libports/recipes/src/test-spark/hash @@ -1 +1 @@ -2022-08-30 2cb577a1c1e7dd1db8dbf22b6c31449dd99fe565 +2022-09-20 f48f5b8998d01aa72592bbeb45c3d350f034821b diff --git a/repos/libports/recipes/src/test-spark_exception/hash b/repos/libports/recipes/src/test-spark_exception/hash index fad74c7eb5..6e6809a51f 100644 --- a/repos/libports/recipes/src/test-spark_exception/hash +++ b/repos/libports/recipes/src/test-spark_exception/hash @@ -1 +1 @@ -2022-08-30 a44a0b74da6816e5e078f10feb4efdb101b2c177 +2022-09-20 af46504b49eedecaf75dd67597f0e28c5fd1fb65 diff --git a/repos/libports/recipes/src/test-spark_secondary_stack/hash b/repos/libports/recipes/src/test-spark_secondary_stack/hash index f076cef121..848073effa 100644 --- a/repos/libports/recipes/src/test-spark_secondary_stack/hash +++ b/repos/libports/recipes/src/test-spark_secondary_stack/hash @@ -1 +1 @@ -2022-08-30 23661f5a53e44bd011fc61c0acc27b7f447dac1d +2022-09-20 4d6b091342aab26a89193ad0929231bd50065f3c diff --git a/repos/libports/recipes/src/test-tcp/hash b/repos/libports/recipes/src/test-tcp/hash index 41e4b0f24f..72b345c18f 100644 --- a/repos/libports/recipes/src/test-tcp/hash +++ b/repos/libports/recipes/src/test-tcp/hash @@ -1 +1 @@ -2022-08-30 129a83702c5f94cd17ca33f37276becc5e17e09a +2022-09-20 48e9471cfaef7438796f5f82e1c294cec5b934ec diff --git a/repos/libports/recipes/src/usb_webcam/hash b/repos/libports/recipes/src/usb_webcam/hash index ae74dc6c09..2da131d66d 100644 --- a/repos/libports/recipes/src/usb_webcam/hash +++ b/repos/libports/recipes/src/usb_webcam/hash @@ -1 +1 @@ -2022-08-30 f5579f6c9b33e33cb4eeaf502c29c79018b321da +2022-09-20 313aff3bac4f0c3d8ae3a5038558efc0bc5284d2 diff --git a/repos/libports/recipes/src/vesa_drv/hash b/repos/libports/recipes/src/vesa_drv/hash index ba82b58c6d..06c53319a5 100644 --- a/repos/libports/recipes/src/vesa_drv/hash +++ b/repos/libports/recipes/src/vesa_drv/hash @@ -1 +1 @@ -2022-08-30 5eea2e26dd5461b3f8b45fa28e3085e3e94dcf73 +2022-09-20 c04f2f3c52c2cde357602fccc7d80fc952e0405e diff --git a/repos/libports/recipes/src/vfs_fatfs/hash b/repos/libports/recipes/src/vfs_fatfs/hash index 00dd43249d..ff4796c402 100644 --- a/repos/libports/recipes/src/vfs_fatfs/hash +++ b/repos/libports/recipes/src/vfs_fatfs/hash @@ -1 +1 @@ -2022-08-30 0d06c8d282135f1163ef5c68117880d9dd3fe49f +2022-09-20 3b1cfae611376e0db8b66b7705264acd17c5f761 diff --git a/repos/libports/recipes/src/vfs_jitterentropy/hash b/repos/libports/recipes/src/vfs_jitterentropy/hash index d3189c95c5..170ed949d7 100644 --- a/repos/libports/recipes/src/vfs_jitterentropy/hash +++ b/repos/libports/recipes/src/vfs_jitterentropy/hash @@ -1 +1 @@ -2022-08-30 997afc858ed63ca8bbdda1aee9af80d158b9a0ae +2022-09-20 89f86937539d4b09c30742ba6c0178613f5d7b30 diff --git a/repos/libports/recipes/src/vfs_libusb/hash b/repos/libports/recipes/src/vfs_libusb/hash index 13f89f483c..69be695e51 100644 --- a/repos/libports/recipes/src/vfs_libusb/hash +++ b/repos/libports/recipes/src/vfs_libusb/hash @@ -1 +1 @@ -2022-08-30 06fb434372ea8bc3bf0001d4d0bfbc116cd496f5 +2022-09-20 467f53171e61722b1c81c05d87510c71b9650561 diff --git a/repos/libports/recipes/src/vfs_lwip/hash b/repos/libports/recipes/src/vfs_lwip/hash index 8d77e093c6..fc302c4b16 100644 --- a/repos/libports/recipes/src/vfs_lwip/hash +++ b/repos/libports/recipes/src/vfs_lwip/hash @@ -1 +1 @@ -2022-08-30 3f41ebbb81c1d1364ae641e6c2cdbb7069a79eb2 +2022-09-20 7e450c02895c8a56365faa0a1b3c5e2189b2fbcd diff --git a/repos/libports/recipes/src/vfs_oss/hash b/repos/libports/recipes/src/vfs_oss/hash index 1399b3c077..1a198dbd68 100644 --- a/repos/libports/recipes/src/vfs_oss/hash +++ b/repos/libports/recipes/src/vfs_oss/hash @@ -1 +1 @@ -2022-08-30 ad08565315d6d8295fbfdd3221b4fde2019dd958 +2022-09-20 b86303c31fd77cb3d6580bf65d51e3b1a80985c9 diff --git a/repos/libports/recipes/src/zlib/hash b/repos/libports/recipes/src/zlib/hash index 0fc9aa04d7..c28bbde692 100644 --- a/repos/libports/recipes/src/zlib/hash +++ b/repos/libports/recipes/src/zlib/hash @@ -1 +1 @@ -2022-08-30 e97c1e2c15d171a81106d9f5e3bfd58223b9ad82 +2022-09-20 7dcd0c79c0ada0df3a5279207760e61e86367c2f diff --git a/repos/os/recipes/api/audio_out_session/hash b/repos/os/recipes/api/audio_out_session/hash index 08f7723b57..84980f4d00 100644 --- a/repos/os/recipes/api/audio_out_session/hash +++ b/repos/os/recipes/api/audio_out_session/hash @@ -1 +1 @@ -2022-01-18 7e8b0238ef01fa0e844a513d490f26e3a0d8df02 +2022-09-20 367b89903fd6b510ad8c7aa429cd367361981e6b diff --git a/repos/os/recipes/api/file_system_session/hash b/repos/os/recipes/api/file_system_session/hash index 30ff43282f..a004571a1a 100644 --- a/repos/os/recipes/api/file_system_session/hash +++ b/repos/os/recipes/api/file_system_session/hash @@ -1 +1 @@ -2022-02-14 620c7c83e3285d08858d8a4e69894bf9d35d0dbd +2022-09-20 077fa78b70134123b3b5005eb7bd7d0dcc4d1d6c diff --git a/repos/os/recipes/api/genode_c_api/hash b/repos/os/recipes/api/genode_c_api/hash index 3d285f3826..faaf835e4d 100644 --- a/repos/os/recipes/api/genode_c_api/hash +++ b/repos/os/recipes/api/genode_c_api/hash @@ -1 +1 @@ -2022-08-16 32c12bc18e39ca5d7f02f9b254016fc1b2d68b43 +2022-09-20 a4488c152b5ff9071cdcd7d135f62efcaf53b6ac diff --git a/repos/os/recipes/api/os/hash b/repos/os/recipes/api/os/hash index 1654e23869..bbf0894569 100644 --- a/repos/os/recipes/api/os/hash +++ b/repos/os/recipes/api/os/hash @@ -1 +1 @@ -2022-08-30 1e58f17f870aae78de902e28bbc0d333b7ed90f3 +2022-09-20 05001935cb19df92ebc91951c66189ea0d323a8c diff --git a/repos/os/recipes/api/platform_session/hash b/repos/os/recipes/api/platform_session/hash index ca5b798959..5dc7a1c05b 100644 --- a/repos/os/recipes/api/platform_session/hash +++ b/repos/os/recipes/api/platform_session/hash @@ -1 +1 @@ -2022-08-16 0e1b693e2463484a8dbb22a069bc9438a0adc64d +2022-09-20 3ccf48691b36e51f382d5e23450153deef12dbbc diff --git a/repos/os/recipes/pkg/black_hole/hash b/repos/os/recipes/pkg/black_hole/hash index 17b7761ec1..ffea2d6bf6 100644 --- a/repos/os/recipes/pkg/black_hole/hash +++ b/repos/os/recipes/pkg/black_hole/hash @@ -1 +1 @@ -2022-08-30 548e66d71b20908005b91ed89e1032f08ac54005 +2022-09-20 0038e92c5d365365e6e084c51f0ae3019e96348c diff --git a/repos/os/recipes/pkg/chroot/hash b/repos/os/recipes/pkg/chroot/hash index 7bfea43e5a..d6b1fb8039 100644 --- a/repos/os/recipes/pkg/chroot/hash +++ b/repos/os/recipes/pkg/chroot/hash @@ -1 +1 @@ -2022-08-30 150b1c4195d94b46af7fc924af0a8d058a6e3844 +2022-09-20 05b554689a1e57d30bd07b6b932ef25ec01d0123 diff --git a/repos/os/recipes/pkg/clipboard/hash b/repos/os/recipes/pkg/clipboard/hash index 83b0290d59..b9b08b80f3 100644 --- a/repos/os/recipes/pkg/clipboard/hash +++ b/repos/os/recipes/pkg/clipboard/hash @@ -1 +1 @@ -2022-08-30 57239da39b1739f60da365790e25895d9d6dedbf +2022-09-20 b008344b1f9aa3f29a045fbd6cb14c597c428ae0 diff --git a/repos/os/recipes/pkg/cpu_balancer/hash b/repos/os/recipes/pkg/cpu_balancer/hash index 39c54a2858..8cc4fd140d 100644 --- a/repos/os/recipes/pkg/cpu_balancer/hash +++ b/repos/os/recipes/pkg/cpu_balancer/hash @@ -1 +1 @@ -2022-08-30 cf53467ed5a16c7c3f3d1708e61e8c302b7d7f87 +2022-09-20 98dce9b3ec5c47960a9002f3b42697073a0001d3 diff --git a/repos/os/recipes/pkg/cpu_balancer_config/hash b/repos/os/recipes/pkg/cpu_balancer_config/hash index 4e05fc1219..fe1604b4ad 100644 --- a/repos/os/recipes/pkg/cpu_balancer_config/hash +++ b/repos/os/recipes/pkg/cpu_balancer_config/hash @@ -1 +1 @@ -2022-08-30 1def3725d1741270644259aaace26cdeb6dbca90 +2022-09-20 6ba43fd14dc9b7aaa3933edee923a7a323b03a94 diff --git a/repos/os/recipes/pkg/drivers_interactive-linux/hash b/repos/os/recipes/pkg/drivers_interactive-linux/hash index 27038028e8..80a3151142 100644 --- a/repos/os/recipes/pkg/drivers_interactive-linux/hash +++ b/repos/os/recipes/pkg/drivers_interactive-linux/hash @@ -1 +1 @@ -2022-08-30 5e013219f8d7cb146125ed78383a0a31353b9bac +2022-09-20 afdbc7a789944b226852c82277815881888627c2 diff --git a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash index ecb33cfde6..9e6aa6d27d 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pbxa9/hash @@ -1 +1 @@ -2022-08-30 701468b62b23b28466b06a224c2191580d838936 +2022-09-20 c481155ad6dd3c0179b50cc4f60778ad336754c5 diff --git a/repos/os/recipes/pkg/drivers_interactive-pc/hash b/repos/os/recipes/pkg/drivers_interactive-pc/hash index 0a6a05b364..0b4829e1dc 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pc/hash +++ b/repos/os/recipes/pkg/drivers_interactive-pc/hash @@ -1 +1 @@ -2022-08-30 6147b5578f090cd437d61c37a936337d573ee7be +2022-09-20 02d9bb791f968c08f6ba7552795bf1e93f7ddbcd diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash index c58738d65e..c6fddd0d56 100644 --- a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-08-30 73de7c0e6c168458950433dda0b7769e47b610f4 +2022-09-20 28678fd109a87562344e05a7dd43330fd3794eeb diff --git a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash index c58738d65e..c6fddd0d56 100644 --- a/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash +++ b/repos/os/recipes/pkg/drivers_interactive-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-30 73de7c0e6c168458950433dda0b7769e47b610f4 +2022-09-20 28678fd109a87562344e05a7dd43330fd3794eeb diff --git a/repos/os/recipes/pkg/drivers_nic-linux/hash b/repos/os/recipes/pkg/drivers_nic-linux/hash index 0bfaf28fce..030f55131e 100644 --- a/repos/os/recipes/pkg/drivers_nic-linux/hash +++ b/repos/os/recipes/pkg/drivers_nic-linux/hash @@ -1 +1 @@ -2022-08-30 f4df611982fe98291104d6e2571fe9ecef61e54d +2022-09-20 41d5a9d136fa105567170ccf5eb73cceae91d7c1 diff --git a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash index 1c0f3b1e62..f753eb8992 100644 --- a/repos/os/recipes/pkg/drivers_nic-pbxa9/hash +++ b/repos/os/recipes/pkg/drivers_nic-pbxa9/hash @@ -1 +1 @@ -2022-08-30 f94b3d89290a8bae10e003b76c686f1e791b9cd0 +2022-09-20 ded9d181b0c12c955977921572718ce03c93d502 diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash index 486e8fa78b..1ac9e95bf3 100644 --- a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v7a/hash @@ -1 +1 @@ -2022-08-30 a3ed8ada481156406f89cc25e36408aa3491767a +2022-09-20 81cc73765b3c8f9171ba313db28e3df222fe783e diff --git a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash index 486e8fa78b..1ac9e95bf3 100644 --- a/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash +++ b/repos/os/recipes/pkg/drivers_nic-virt_qemu_arm_v8a/hash @@ -1 +1 @@ -2022-08-30 a3ed8ada481156406f89cc25e36408aa3491767a +2022-09-20 81cc73765b3c8f9171ba313db28e3df222fe783e diff --git a/repos/os/recipes/pkg/fs_report/hash b/repos/os/recipes/pkg/fs_report/hash index a34e58c799..df7e804cc2 100644 --- a/repos/os/recipes/pkg/fs_report/hash +++ b/repos/os/recipes/pkg/fs_report/hash @@ -1 +1 @@ -2022-08-30 2d37ef00f08439d11b5166e75c6c6455e4131f9d +2022-09-20 2c2b915cc1bd5b1f5535f72d751cb52061af8fb8 diff --git a/repos/os/recipes/pkg/fs_rom/hash b/repos/os/recipes/pkg/fs_rom/hash index 0b6d62561a..d2a760edce 100644 --- a/repos/os/recipes/pkg/fs_rom/hash +++ b/repos/os/recipes/pkg/fs_rom/hash @@ -1 +1 @@ -2022-08-30 acb5af3f7ec9fc41b3cfcfda50191dea3cb5fb0c +2022-09-20 76088b118759eab88d456a3b092adafe0061f1b2 diff --git a/repos/os/recipes/pkg/mixer/hash b/repos/os/recipes/pkg/mixer/hash index dc3bf62cc6..6343ded1dc 100644 --- a/repos/os/recipes/pkg/mixer/hash +++ b/repos/os/recipes/pkg/mixer/hash @@ -1 +1 @@ -2022-08-30 7a1224d3bb055c28e1a140540b39a988f49d196a +2022-09-20 dd0b533d829118155c55ece5a49b4304e193eeca diff --git a/repos/os/recipes/pkg/nic_router-nat/hash b/repos/os/recipes/pkg/nic_router-nat/hash index 776a631a89..87338ad75e 100644 --- a/repos/os/recipes/pkg/nic_router-nat/hash +++ b/repos/os/recipes/pkg/nic_router-nat/hash @@ -1 +1 @@ -2022-08-30 07790a1879694e66e2f21fe4a2add1a3d006b775 +2022-09-20 66d9d8268805e44bb620ed334bfedb1369cd751f diff --git a/repos/os/recipes/pkg/nit_focus/hash b/repos/os/recipes/pkg/nit_focus/hash index 35994c5b30..47ebad3239 100644 --- a/repos/os/recipes/pkg/nit_focus/hash +++ b/repos/os/recipes/pkg/nit_focus/hash @@ -1 +1 @@ -2022-08-30 22e3376c01622f0bc4b0c18bc88f7ef098fdaeb8 +2022-09-20 0e3b919196ae0662b89202c3dde5daaebbaa4b1b diff --git a/repos/os/recipes/pkg/part_block/hash b/repos/os/recipes/pkg/part_block/hash index bdc853fa02..238b05c696 100644 --- a/repos/os/recipes/pkg/part_block/hash +++ b/repos/os/recipes/pkg/part_block/hash @@ -1 +1 @@ -2022-08-30 e94476faeb204b4ae0b5a40c80796f40c1f51a37 +2022-09-20 65155e929a1c70f092becdf047174a95d1ad92e8 diff --git a/repos/os/recipes/pkg/recall_fs/hash b/repos/os/recipes/pkg/recall_fs/hash index 5894e5bd3d..fd8db914a7 100644 --- a/repos/os/recipes/pkg/recall_fs/hash +++ b/repos/os/recipes/pkg/recall_fs/hash @@ -1 +1 @@ -2022-08-30 f633555eb143c1afa7be73541e58e2f069dbcd27 +2022-09-20 bed58c13ebb1239f7a693218c1910055299b436d diff --git a/repos/os/recipes/pkg/report_rom/hash b/repos/os/recipes/pkg/report_rom/hash index c17b32e452..2aa6106af1 100644 --- a/repos/os/recipes/pkg/report_rom/hash +++ b/repos/os/recipes/pkg/report_rom/hash @@ -1 +1 @@ -2022-08-30 b659825f24d7db513201ff684b36aefa22cdec35 +2022-09-20 9325cd98afea1416e312786492030c4be9c9f98c diff --git a/repos/os/recipes/pkg/rom_filter/hash b/repos/os/recipes/pkg/rom_filter/hash index c0e0768162..8854fac6a9 100644 --- a/repos/os/recipes/pkg/rom_filter/hash +++ b/repos/os/recipes/pkg/rom_filter/hash @@ -1 +1 @@ -2022-08-30 dd635a44173172f4d9960223f1214bc03c907e87 +2022-09-20 28d505bbb927aad9510eb185db6a27cfa9f2a19a diff --git a/repos/os/recipes/pkg/rom_reporter/hash b/repos/os/recipes/pkg/rom_reporter/hash index 3a8145464c..d2daa861e7 100644 --- a/repos/os/recipes/pkg/rom_reporter/hash +++ b/repos/os/recipes/pkg/rom_reporter/hash @@ -1 +1 @@ -2022-08-30 932d472ac644a1e341697ba1b0b639c8fc5b38e9 +2022-09-20 3bcd69ff86a8183bdc41267536d274e998fdb22f diff --git a/repos/os/recipes/pkg/test-black_hole/hash b/repos/os/recipes/pkg/test-black_hole/hash index d5878e3312..f5c8f81c29 100644 --- a/repos/os/recipes/pkg/test-black_hole/hash +++ b/repos/os/recipes/pkg/test-black_hole/hash @@ -1 +1 @@ -2022-08-30 6888ed9940fb82cb5693dbf7b2bcf3ecc7622e40 +2022-09-20 7db57eeb6886967eec2d4f16af9983277fa84deb diff --git a/repos/os/recipes/pkg/test-capture/hash b/repos/os/recipes/pkg/test-capture/hash index 0bdb1e20f1..e734b73773 100644 --- a/repos/os/recipes/pkg/test-capture/hash +++ b/repos/os/recipes/pkg/test-capture/hash @@ -1 +1 @@ -2022-08-30 47071e641c27480d5d290453a234b3599c67047f +2022-09-20 51d18009160b759c6f5a98b10f76ec09165a8aed diff --git a/repos/os/recipes/pkg/test-clipboard/hash b/repos/os/recipes/pkg/test-clipboard/hash index 01d7d830bc..de7145e708 100644 --- a/repos/os/recipes/pkg/test-clipboard/hash +++ b/repos/os/recipes/pkg/test-clipboard/hash @@ -1 +1 @@ -2022-08-30 065f96fd6055ad919b20355726943040dadd6451 +2022-09-20 d3b63100c909feb2c3ae1eb7cf1a3368d99ef77a diff --git a/repos/os/recipes/pkg/test-dynamic_config/hash b/repos/os/recipes/pkg/test-dynamic_config/hash index cba06599a1..32a5ba154d 100644 --- a/repos/os/recipes/pkg/test-dynamic_config/hash +++ b/repos/os/recipes/pkg/test-dynamic_config/hash @@ -1 +1 @@ -2022-08-30 cd65a467e75ddc386fdee00d0e4ff8feaac0df66 +2022-09-20 da9bd12dc384f801e8e1885cba903c119ad91962 diff --git a/repos/os/recipes/pkg/test-dynamic_config_loader/hash b/repos/os/recipes/pkg/test-dynamic_config_loader/hash index 9529a18c51..9fcea048c0 100644 --- a/repos/os/recipes/pkg/test-dynamic_config_loader/hash +++ b/repos/os/recipes/pkg/test-dynamic_config_loader/hash @@ -1 +1 @@ -2022-08-30 fa57bdc85788c2b2c5284886b3e3cc555a6cf504 +2022-09-20 dc80cf0ada013aec4cd9ea278396d5c72f4b0b13 diff --git a/repos/os/recipes/pkg/test-fault_detection/hash b/repos/os/recipes/pkg/test-fault_detection/hash index 44e3271bfc..e4d66f3511 100644 --- a/repos/os/recipes/pkg/test-fault_detection/hash +++ b/repos/os/recipes/pkg/test-fault_detection/hash @@ -1 +1 @@ -2022-08-30 73117b6900bdd2d027c7e3b20b6373007ef96db1 +2022-09-20 d801fe5ec2375750b9cbefe6ab732c5a9b8251f1 diff --git a/repos/os/recipes/pkg/test-fs_packet/hash b/repos/os/recipes/pkg/test-fs_packet/hash index 408496b235..7322ac4e27 100644 --- a/repos/os/recipes/pkg/test-fs_packet/hash +++ b/repos/os/recipes/pkg/test-fs_packet/hash @@ -1 +1 @@ -2022-08-30 92130a73460c608379b24564ddc6756224f46fc6 +2022-09-20 f2ade6e06e6616f4ec9ce18e58731e44ffb85237 diff --git a/repos/os/recipes/pkg/test-fs_report/hash b/repos/os/recipes/pkg/test-fs_report/hash index 8ab272e5fe..48afd5e1b2 100644 --- a/repos/os/recipes/pkg/test-fs_report/hash +++ b/repos/os/recipes/pkg/test-fs_report/hash @@ -1 +1 @@ -2022-08-30 e32ce8b986cee28f418c4abcfce07622bfd99b2a +2022-09-20 e74881071a7f4ce5a1061571a27dc07618ebb130 diff --git a/repos/os/recipes/pkg/test-fs_rom_update/hash b/repos/os/recipes/pkg/test-fs_rom_update/hash index 9136db8db2..530f115831 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update/hash @@ -1 +1 @@ -2022-08-30 5dc0c091f5b49ff446257ceec7383079fbf67edf +2022-09-20 68c83370f2555a74f6423bd6140310c1eb61d03d diff --git a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash index aa14bc0359..739f13a08a 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_fs/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_fs/hash @@ -1 +1 @@ -2022-08-30 f17c5bcd2528cf0f94a28a6ad7e6a3fb042af514 +2022-09-20 3f715c9e2efcee841fef854980d60108ec94433d diff --git a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash index 877e8141b9..aeacf9e346 100644 --- a/repos/os/recipes/pkg/test-fs_rom_update_ram/hash +++ b/repos/os/recipes/pkg/test-fs_rom_update_ram/hash @@ -1 +1 @@ -2022-08-30 c2a0697584d797dd51a3843841bce06119a6286f +2022-09-20 2c0f11da2a6a0c3286b162351e03b0ee25966d10 diff --git a/repos/os/recipes/pkg/test-init/hash b/repos/os/recipes/pkg/test-init/hash index db90de114f..427fe31d3f 100644 --- a/repos/os/recipes/pkg/test-init/hash +++ b/repos/os/recipes/pkg/test-init/hash @@ -1 +1 @@ -2022-08-30 320f10bf4d0e5d334e88a98f38bc3e829ad6e04d +2022-09-20 591b204a1cdd5473fdc4c654a71382f62ecbceff diff --git a/repos/os/recipes/pkg/test-init_loop/hash b/repos/os/recipes/pkg/test-init_loop/hash index 992017c574..d7140415cb 100644 --- a/repos/os/recipes/pkg/test-init_loop/hash +++ b/repos/os/recipes/pkg/test-init_loop/hash @@ -1 +1 @@ -2022-08-30 17003addc8e7f4b81239a5dcdbad1f4c0905d1a5 +2022-09-20 15755b0bea0e3b8b5a415f2e34a8e82b762bed9e diff --git a/repos/os/recipes/pkg/test-lx_block/hash b/repos/os/recipes/pkg/test-lx_block/hash index 999bb19e8a..456befb374 100644 --- a/repos/os/recipes/pkg/test-lx_block/hash +++ b/repos/os/recipes/pkg/test-lx_block/hash @@ -1 +1 @@ -2022-08-30 a25becd5f3f5352a9552492450c6ffdce2d4f617 +2022-09-20 beb8d72ba6c022bceb8a060532224ddfe04ad953 diff --git a/repos/os/recipes/pkg/test-nic_loopback/hash b/repos/os/recipes/pkg/test-nic_loopback/hash index dd05c49f10..9273ed8750 100644 --- a/repos/os/recipes/pkg/test-nic_loopback/hash +++ b/repos/os/recipes/pkg/test-nic_loopback/hash @@ -1 +1 @@ -2022-08-30 956d00009e49c69aa41b4cb4754b9f2107d482a4 +2022-09-20 d7e8ff1df8c03360668116f82c05f61ce282e97d diff --git a/repos/os/recipes/pkg/test-nic_perf/hash b/repos/os/recipes/pkg/test-nic_perf/hash index 69b1664a0b..03d32385b5 100644 --- a/repos/os/recipes/pkg/test-nic_perf/hash +++ b/repos/os/recipes/pkg/test-nic_perf/hash @@ -1 +1 @@ -2022-08-30 abe10d1267ab6993f9c8e1d1712a531bce4ebc06 +2022-09-20 f6ef77914a1ce576e640aa00bb18641d2dd12cd1 diff --git a/repos/os/recipes/pkg/test-nic_perf_router/hash b/repos/os/recipes/pkg/test-nic_perf_router/hash index 86d80223f8..85a2ff9a6e 100644 --- a/repos/os/recipes/pkg/test-nic_perf_router/hash +++ b/repos/os/recipes/pkg/test-nic_perf_router/hash @@ -1 +1 @@ -2022-08-30 95ed861f7590c3a16a8f576aea2ab3c880145d5f +2022-09-20 6ae790e9a49a4e5889e4b3e1ceb57b5899a098cf diff --git a/repos/os/recipes/pkg/test-part_block_gpt/hash b/repos/os/recipes/pkg/test-part_block_gpt/hash index f7c9afeada..78a7a72e3f 100644 --- a/repos/os/recipes/pkg/test-part_block_gpt/hash +++ b/repos/os/recipes/pkg/test-part_block_gpt/hash @@ -1 +1 @@ -2022-08-30 1899b15954c46bfb78d6b1dd57f5f3b036c11632 +2022-09-20 e202c77673026ca8ba3d8c6eda16521b344be55c diff --git a/repos/os/recipes/pkg/test-part_block_mbr/hash b/repos/os/recipes/pkg/test-part_block_mbr/hash index 6d01c39f24..11f98d50a7 100644 --- a/repos/os/recipes/pkg/test-part_block_mbr/hash +++ b/repos/os/recipes/pkg/test-part_block_mbr/hash @@ -1 +1 @@ -2022-08-30 106f93dfc09ca97a01e16fe3f530585c799a1bef +2022-09-20 bc1ce357eb56403784c9c4e4681026dae053667e diff --git a/repos/os/recipes/pkg/test-ram_fs_chunk/hash b/repos/os/recipes/pkg/test-ram_fs_chunk/hash index 803bc05b4b..027eb9f623 100644 --- a/repos/os/recipes/pkg/test-ram_fs_chunk/hash +++ b/repos/os/recipes/pkg/test-ram_fs_chunk/hash @@ -1 +1 @@ -2022-08-30 94f62e2e53351bf5a5fdb0d8ace987648539fda1 +2022-09-20 b3e6820c8fd7f3b5ab1523f0420c1acc3c30d16a diff --git a/repos/os/recipes/pkg/test-read_only_rom/hash b/repos/os/recipes/pkg/test-read_only_rom/hash index 70bfff0d18..78c90fcb7b 100644 --- a/repos/os/recipes/pkg/test-read_only_rom/hash +++ b/repos/os/recipes/pkg/test-read_only_rom/hash @@ -1 +1 @@ -2022-08-30 ebf8cc1457d429e508d6b0adf7fc50c2300d7e9f +2022-09-20 8b90d5f87b10f79b55902adfef3eb60e43e6d3b9 diff --git a/repos/os/recipes/pkg/test-report_rom/hash b/repos/os/recipes/pkg/test-report_rom/hash index 0208046319..8df8c8c049 100644 --- a/repos/os/recipes/pkg/test-report_rom/hash +++ b/repos/os/recipes/pkg/test-report_rom/hash @@ -1 +1 @@ -2022-08-30 0b1ad277c13dabe7af6575fc0a72f6317ed8efe2 +2022-09-20 ff8d6459e78016e69abc4c9cdb92dd6bbb4d19d4 diff --git a/repos/os/recipes/pkg/test-resource_request/hash b/repos/os/recipes/pkg/test-resource_request/hash index 1e7c18904b..eeba11f032 100644 --- a/repos/os/recipes/pkg/test-resource_request/hash +++ b/repos/os/recipes/pkg/test-resource_request/hash @@ -1 +1 @@ -2022-08-30 f482150d19bfdc8af697d5ff2ce2caf0cdeaa8e3 +2022-09-20 2188146cd5339b4b3a28d0474eb312e12633f837 diff --git a/repos/os/recipes/pkg/test-resource_yield/hash b/repos/os/recipes/pkg/test-resource_yield/hash index c69b644a4e..b5dea8bf19 100644 --- a/repos/os/recipes/pkg/test-resource_yield/hash +++ b/repos/os/recipes/pkg/test-resource_yield/hash @@ -1 +1 @@ -2022-08-30 ea5f930adc5192555717684f8fb78d456f785857 +2022-09-20 8215871fa12d0f12d9e6e55c9364c0a1eeafd55d diff --git a/repos/os/recipes/pkg/test-rom_filter/hash b/repos/os/recipes/pkg/test-rom_filter/hash index 507addbdb9..fe6bc16652 100644 --- a/repos/os/recipes/pkg/test-rom_filter/hash +++ b/repos/os/recipes/pkg/test-rom_filter/hash @@ -1 +1 @@ -2022-08-30 5e6d2a3ef199f99d28145d74f085536abef375cd +2022-09-20 c8c7defa54af8771926d0a83ea7e462083c1cf08 diff --git a/repos/os/recipes/pkg/test-rtc/hash b/repos/os/recipes/pkg/test-rtc/hash index aa26158efb..f80af8b6fd 100644 --- a/repos/os/recipes/pkg/test-rtc/hash +++ b/repos/os/recipes/pkg/test-rtc/hash @@ -1 +1 @@ -2022-08-30 eeecda8170ced98f32a935c2989bad7b7fc0f6c0 +2022-09-20 8d34a44e2328e6ad5275b8d31183aefcde1ef30d diff --git a/repos/os/recipes/pkg/test-sandbox/hash b/repos/os/recipes/pkg/test-sandbox/hash index 49881cbb45..f3e5d5d054 100644 --- a/repos/os/recipes/pkg/test-sandbox/hash +++ b/repos/os/recipes/pkg/test-sandbox/hash @@ -1 +1 @@ -2022-08-30 c6a05c15bd9630662c956d9205f55314e628f454 +2022-09-20 547fd99d02fe57a30cc7316185ab17c2c1b045d8 diff --git a/repos/os/recipes/pkg/test-signal/hash b/repos/os/recipes/pkg/test-signal/hash index 1d5b20eeef..145ae52e5a 100644 --- a/repos/os/recipes/pkg/test-signal/hash +++ b/repos/os/recipes/pkg/test-signal/hash @@ -1 +1 @@ -2022-08-30 e56f7e94d8131d9af76a060613624545d85f38c9 +2022-09-20 303b5b29bdb7ab8ae4d922e15c27b194466ccf9c diff --git a/repos/os/recipes/pkg/test-slab/hash b/repos/os/recipes/pkg/test-slab/hash index 786abb6157..8d35a7966d 100644 --- a/repos/os/recipes/pkg/test-slab/hash +++ b/repos/os/recipes/pkg/test-slab/hash @@ -1 +1 @@ -2022-08-30 484b6fd4d0dae7bcb96b32dfbbbdb34994a90c13 +2022-09-20 a6411f0c838aeb3dc96a36ba9f3c3bc597646b02 diff --git a/repos/os/recipes/pkg/test-terminal_crosslink/hash b/repos/os/recipes/pkg/test-terminal_crosslink/hash index 4b7bb56976..8c148e1bea 100644 --- a/repos/os/recipes/pkg/test-terminal_crosslink/hash +++ b/repos/os/recipes/pkg/test-terminal_crosslink/hash @@ -1 +1 @@ -2022-08-30 39e457c600fa4ce106421e84213d1dbbaef31c65 +2022-09-20 fb98e106b68d5bcb1f24cb1ff76491fb69bb299e diff --git a/repos/os/recipes/pkg/test-trace/hash b/repos/os/recipes/pkg/test-trace/hash index 9ce0314d0a..1a0a1f74e6 100644 --- a/repos/os/recipes/pkg/test-trace/hash +++ b/repos/os/recipes/pkg/test-trace/hash @@ -1 +1 @@ -2022-08-30 f5e177adb5fed8df161d5bb2fc9ba794eb9c859c +2022-09-20 8692b64f708da3a64da9197d96d4d4edbdab8726 diff --git a/repos/os/recipes/pkg/test-trace_buffer/hash b/repos/os/recipes/pkg/test-trace_buffer/hash index b5d1b400cf..89d54ebe9c 100644 --- a/repos/os/recipes/pkg/test-trace_buffer/hash +++ b/repos/os/recipes/pkg/test-trace_buffer/hash @@ -1 +1 @@ -2022-08-30 69b05a0392854edbb6d41533aa19aa4d7763708b +2022-09-20 d0081c818dec57216e8a6abdae974b13c7b4534b diff --git a/repos/os/recipes/pkg/test-trace_logger/hash b/repos/os/recipes/pkg/test-trace_logger/hash index dc07539a3b..8eb0211ad3 100644 --- a/repos/os/recipes/pkg/test-trace_logger/hash +++ b/repos/os/recipes/pkg/test-trace_logger/hash @@ -1 +1 @@ -2022-08-30 47c54b12eeff8570018782d8a47f44a667e0bc14 +2022-09-20 160e2e3275b3ca966787b5389eaa813067a65f2b diff --git a/repos/os/recipes/pkg/test-utf8/hash b/repos/os/recipes/pkg/test-utf8/hash index 742e38e435..d781a2894c 100644 --- a/repos/os/recipes/pkg/test-utf8/hash +++ b/repos/os/recipes/pkg/test-utf8/hash @@ -1 +1 @@ -2022-08-30 3dc076556441e0b2daf95ebda5639587cde9e902 +2022-09-20 3a811579c7fc5d4a124d8aeda6d522b6ad88af55 diff --git a/repos/os/recipes/pkg/test-vfs_block/hash b/repos/os/recipes/pkg/test-vfs_block/hash index 3e980d2f32..fd7623d9d0 100644 --- a/repos/os/recipes/pkg/test-vfs_block/hash +++ b/repos/os/recipes/pkg/test-vfs_block/hash @@ -1 +1 @@ -2022-08-30 745666ae73d2b782038eb15e8d3c1d3b948ef0f2 +2022-09-20 c1883c4fb8b3d5cd1ab2214cd35b650a4cbad821 diff --git a/repos/os/recipes/pkg/test-vfs_stress_fs/hash b/repos/os/recipes/pkg/test-vfs_stress_fs/hash index 9acdef9d81..a04956bcb0 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_fs/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_fs/hash @@ -1 +1 @@ -2022-08-30 0f3afa10bc919704aec9d437ed29caa45f863dc8 +2022-09-20 26828eb490d8ffb9d2d81fbd470a76fab7fd271c diff --git a/repos/os/recipes/pkg/test-vfs_stress_ram/hash b/repos/os/recipes/pkg/test-vfs_stress_ram/hash index 4a2f94af98..33bac18482 100644 --- a/repos/os/recipes/pkg/test-vfs_stress_ram/hash +++ b/repos/os/recipes/pkg/test-vfs_stress_ram/hash @@ -1 +1 @@ -2022-08-30 2bde636d7552b1c45d57a32c742fe717ad126111 +2022-09-20 1e252ca9a756d7ce8c55bd5b352f55c9c57d097d diff --git a/repos/os/recipes/pkg/test-weak_ptr/hash b/repos/os/recipes/pkg/test-weak_ptr/hash index e31a7e54c0..6be2ab32e3 100644 --- a/repos/os/recipes/pkg/test-weak_ptr/hash +++ b/repos/os/recipes/pkg/test-weak_ptr/hash @@ -1 +1 @@ -2022-08-30 dc025a9353abb9d79541a56a06b9d4b1052df12d +2022-09-20 53a08fd72b5c09721d557d9cbd970f524f81d5e0 diff --git a/repos/os/recipes/pkg/trace_logger/hash b/repos/os/recipes/pkg/trace_logger/hash index 5dfe397477..9f8e7c7a41 100644 --- a/repos/os/recipes/pkg/trace_logger/hash +++ b/repos/os/recipes/pkg/trace_logger/hash @@ -1 +1 @@ -2022-08-30 7beeff22efba7a371000c8323a0b4aae9b7e17b0 +2022-09-20 143f9eec96179da33e9cda2de9066967a8a09851 diff --git a/repos/os/recipes/pkg/vfs/hash b/repos/os/recipes/pkg/vfs/hash index 1a4b1af96c..1b304a281d 100644 --- a/repos/os/recipes/pkg/vfs/hash +++ b/repos/os/recipes/pkg/vfs/hash @@ -1 +1 @@ -2022-08-30 f8f7ab6515594fc19369e933314034943735773c +2022-09-20 b004bba21e78fe1a3a253d3484a4bac234fe5b55 diff --git a/repos/os/recipes/pkg/vfs_block/hash b/repos/os/recipes/pkg/vfs_block/hash index e66164be5c..47e5962563 100644 --- a/repos/os/recipes/pkg/vfs_block/hash +++ b/repos/os/recipes/pkg/vfs_block/hash @@ -1 +1 @@ -2022-08-30 ded8ca3174da32834173c8ab71c50a7959466d37 +2022-09-20 aac591c71d9b15d1c87bdca7136c045484c00173 diff --git a/repos/os/recipes/src/acpi_drv/hash b/repos/os/recipes/src/acpi_drv/hash index 9418e58dcc..1bffb2fe76 100644 --- a/repos/os/recipes/src/acpi_drv/hash +++ b/repos/os/recipes/src/acpi_drv/hash @@ -1 +1 @@ -2022-08-30 317da7a0dd3af3d3181333b0babbe0ac56fd1a75 +2022-09-20 30eacdb0cc809e8c984ba78228ad6d2f7a0c38fc diff --git a/repos/os/recipes/src/ahci_drv/hash b/repos/os/recipes/src/ahci_drv/hash index 468274ba7b..b3adae3c70 100644 --- a/repos/os/recipes/src/ahci_drv/hash +++ b/repos/os/recipes/src/ahci_drv/hash @@ -1 +1 @@ -2022-08-30 334ce6e00ea9f558f5dffc487ab35c3648ded9aa +2022-09-20 f124b9aa9aa9fab03c2d1abf34a8dcc5ebc1a212 diff --git a/repos/os/recipes/src/black_hole/hash b/repos/os/recipes/src/black_hole/hash index 90da6e0d27..75227269c1 100644 --- a/repos/os/recipes/src/black_hole/hash +++ b/repos/os/recipes/src/black_hole/hash @@ -1 +1 @@ -2022-08-30 d7a79f4c3af7c05bac76cb77e5d13daa2ceaa557 +2022-09-20 16ad776ee19c949764c4df32fa129e0f9033e2de diff --git a/repos/os/recipes/src/block_tester/hash b/repos/os/recipes/src/block_tester/hash index 7b1d7d6791..d140645f9e 100644 --- a/repos/os/recipes/src/block_tester/hash +++ b/repos/os/recipes/src/block_tester/hash @@ -1 +1 @@ -2022-08-30 36dd9f4cda1ca034229069f71b38a40967cc6453 +2022-09-20 ae5d1b4be8913b324f0da2bdc3af31a5f0287394 diff --git a/repos/os/recipes/src/boot_fb_drv/hash b/repos/os/recipes/src/boot_fb_drv/hash index 856cda4259..e9b14e70f8 100644 --- a/repos/os/recipes/src/boot_fb_drv/hash +++ b/repos/os/recipes/src/boot_fb_drv/hash @@ -1 +1 @@ -2022-08-30 b0be32b983c5d71a79f8311696e73adbadc74194 +2022-09-20 c11f46b6d5ccec3e4a0b7fbcde1b0d756d97a5aa diff --git a/repos/os/recipes/src/cached_fs_rom/hash b/repos/os/recipes/src/cached_fs_rom/hash index a30d7c5ad2..a294247fed 100644 --- a/repos/os/recipes/src/cached_fs_rom/hash +++ b/repos/os/recipes/src/cached_fs_rom/hash @@ -1 +1 @@ -2022-08-30 ce7bde2666f6ecf04844e7035746ceb5bc7a337e +2022-09-20 f6aa7c8365df494226ffcedabacf6866f437a04e diff --git a/repos/os/recipes/src/chroot/hash b/repos/os/recipes/src/chroot/hash index c4714005d1..ea9b7f2e8e 100644 --- a/repos/os/recipes/src/chroot/hash +++ b/repos/os/recipes/src/chroot/hash @@ -1 +1 @@ -2022-08-30 ae3bcfbde7fe75053eef45bb55ec74194842fbe1 +2022-09-20 712e290051507234bd3ef3d5bc15a7602f21964e diff --git a/repos/os/recipes/src/clipboard/hash b/repos/os/recipes/src/clipboard/hash index fab05f8a05..6904ca0c0f 100644 --- a/repos/os/recipes/src/clipboard/hash +++ b/repos/os/recipes/src/clipboard/hash @@ -1 +1 @@ -2022-08-30 9cd845a00de442dbb967117910ea2c1b8eea71ff +2022-09-20 10be2ed944a1a0f293d8bb83d5115dcf98178d82 diff --git a/repos/os/recipes/src/cpu_balancer/hash b/repos/os/recipes/src/cpu_balancer/hash index 4c31828dea..0b5d246224 100644 --- a/repos/os/recipes/src/cpu_balancer/hash +++ b/repos/os/recipes/src/cpu_balancer/hash @@ -1 +1 @@ -2022-08-30 a99403875f5f22d5e003ba4f16cab021b8044ad7 +2022-09-20 e806670d84b1b7f8ed48d660c15522719d6aab84 diff --git a/repos/os/recipes/src/cpu_burner/hash b/repos/os/recipes/src/cpu_burner/hash index ed66b21768..5745373698 100644 --- a/repos/os/recipes/src/cpu_burner/hash +++ b/repos/os/recipes/src/cpu_burner/hash @@ -1 +1 @@ -2022-08-30 be372d7bdedf6aa3a13cfc5f3a3d1ac162bcc05b +2022-09-20 40ce93404488ff12a4513fdc64ff807323cd5f70 diff --git a/repos/os/recipes/src/dummy/hash b/repos/os/recipes/src/dummy/hash index 6d98b5a4bf..86bb5707ba 100644 --- a/repos/os/recipes/src/dummy/hash +++ b/repos/os/recipes/src/dummy/hash @@ -1 +1 @@ -2022-08-30 19c755cf82b813689f13aec550af84d6d5afb00d +2022-09-20 39c7b48294e40125e9f5a4d09b8edd70b079a3ec diff --git a/repos/os/recipes/src/dummy_rtc_drv/hash b/repos/os/recipes/src/dummy_rtc_drv/hash index 3d043a5eb7..e2774d2499 100644 --- a/repos/os/recipes/src/dummy_rtc_drv/hash +++ b/repos/os/recipes/src/dummy_rtc_drv/hash @@ -1 +1 @@ -2022-08-30 ee590334a3eb8123ded1527f0a620e03505f6f10 +2022-09-20 80e18f74accb275bff9151b3e029a0f352e3605a diff --git a/repos/os/recipes/src/dynamic_rom/hash b/repos/os/recipes/src/dynamic_rom/hash index 6590413870..1a2b59b31a 100644 --- a/repos/os/recipes/src/dynamic_rom/hash +++ b/repos/os/recipes/src/dynamic_rom/hash @@ -1 +1 @@ -2022-08-30 6af1cb67af2909dd86af5368a2cc7aa53c7c9747 +2022-09-20 82f88e84c62a7840873e9fb65c32450218f22d24 diff --git a/repos/os/recipes/src/event_filter/hash b/repos/os/recipes/src/event_filter/hash index 37a1b8a943..9e8fab306b 100644 --- a/repos/os/recipes/src/event_filter/hash +++ b/repos/os/recipes/src/event_filter/hash @@ -1 +1 @@ -2022-08-30 55e6b39f2f6b258d09631c65ff916fa7ab7a145d +2022-09-20 d3e481f3c28b4923db10d74e380f51ec4f9dcfe8 diff --git a/repos/os/recipes/src/fb_sdl/hash b/repos/os/recipes/src/fb_sdl/hash index eb38348ae8..1356c705e3 100644 --- a/repos/os/recipes/src/fb_sdl/hash +++ b/repos/os/recipes/src/fb_sdl/hash @@ -1 +1 @@ -2022-08-30 458ea94b43c82ecd3cc99ba810746716dc145ceb +2022-09-20 7f8f5ebfa67fae7ef72aad906a7a3398be21ba32 diff --git a/repos/os/recipes/src/fs_report/hash b/repos/os/recipes/src/fs_report/hash index 21dd5a8636..5eaf0a210d 100644 --- a/repos/os/recipes/src/fs_report/hash +++ b/repos/os/recipes/src/fs_report/hash @@ -1 +1 @@ -2022-08-30 9efb96281d494a6126c296eefde4219d0af8afe9 +2022-09-20 f97649465614a54537aed485051fefa6f686737a diff --git a/repos/os/recipes/src/fs_rom/hash b/repos/os/recipes/src/fs_rom/hash index f19a5930a4..51b087285a 100644 --- a/repos/os/recipes/src/fs_rom/hash +++ b/repos/os/recipes/src/fs_rom/hash @@ -1 +1 @@ -2022-08-30 733dcab875b6871d26ef7c131a9eb9217f3b24a3 +2022-09-20 836d668678170d1531fa78347f7d5e151ab5fa66 diff --git a/repos/os/recipes/src/global_keys_handler/hash b/repos/os/recipes/src/global_keys_handler/hash index a555c4e597..a22a29bf09 100644 --- a/repos/os/recipes/src/global_keys_handler/hash +++ b/repos/os/recipes/src/global_keys_handler/hash @@ -1 +1 @@ -2022-08-30 3f144eee7a0fec74e25f114458ed9e8e189e0eaa +2022-09-20 ad351005378a297f2eddffe6fa3c7d939a33a159 diff --git a/repos/os/recipes/src/gui_fb/hash b/repos/os/recipes/src/gui_fb/hash index c0af063f84..f0ac436d89 100644 --- a/repos/os/recipes/src/gui_fb/hash +++ b/repos/os/recipes/src/gui_fb/hash @@ -1 +1 @@ -2022-08-30 1571e2e77c5a808e65d6814667e0ba68a536d0fe +2022-09-20 9bfde1388d35353466589dbb8f114fd74339ab20 diff --git a/repos/os/recipes/src/init/hash b/repos/os/recipes/src/init/hash index 850e90f5e5..4091a7f73a 100644 --- a/repos/os/recipes/src/init/hash +++ b/repos/os/recipes/src/init/hash @@ -1 +1 @@ -2022-08-30 ca0474f85ab1d9be4dbfaefb5772cabd4ac7a3b6 +2022-09-20 d0e0f8cdeefe886bd8f350a2bfee85892a021fbd diff --git a/repos/os/recipes/src/input_event_bridge/hash b/repos/os/recipes/src/input_event_bridge/hash index 57bafd1f9b..93c56ba653 100644 --- a/repos/os/recipes/src/input_event_bridge/hash +++ b/repos/os/recipes/src/input_event_bridge/hash @@ -1 +1 @@ -2022-08-30 5c974b0ab3c2f4c5a7a2dffa8ca8b7190a1169bc +2022-09-20 e31f88ff3150f6a2c6a7e53ef762821310bc3ff8 diff --git a/repos/os/recipes/src/intel_gpu_drv/hash b/repos/os/recipes/src/intel_gpu_drv/hash index 64f8e7a40e..e217fc4660 100644 --- a/repos/os/recipes/src/intel_gpu_drv/hash +++ b/repos/os/recipes/src/intel_gpu_drv/hash @@ -1 +1 @@ -2022-08-30 610e32a5c09f3dee37fe1043db56813b21e4635d +2022-09-20 8844f76c8f9856026dea5cc30a4607bdf5b83bab diff --git a/repos/os/recipes/src/lan9118_nic_drv/hash b/repos/os/recipes/src/lan9118_nic_drv/hash index 84149a6670..209fd78072 100644 --- a/repos/os/recipes/src/lan9118_nic_drv/hash +++ b/repos/os/recipes/src/lan9118_nic_drv/hash @@ -1 +1 @@ -2022-08-30 dfc6600b75e27aa8fb428838a7bcac71af0f3927 +2022-09-20 354559fe27ec4db82b692bb9f3178d3e294d5239 diff --git a/repos/os/recipes/src/linux_nic_drv/hash b/repos/os/recipes/src/linux_nic_drv/hash index 2ae8b1a1a4..5c0c33f801 100644 --- a/repos/os/recipes/src/linux_nic_drv/hash +++ b/repos/os/recipes/src/linux_nic_drv/hash @@ -1 +1 @@ -2022-08-30 5ba900195c0f810ddac57e7119ef0b2f90f0ac31 +2022-09-20 7b2dda4f67618814c231152bedc8c51dbaa1366d diff --git a/repos/os/recipes/src/linux_rtc_drv/hash b/repos/os/recipes/src/linux_rtc_drv/hash index c088987c53..8737e81abd 100644 --- a/repos/os/recipes/src/linux_rtc_drv/hash +++ b/repos/os/recipes/src/linux_rtc_drv/hash @@ -1 +1 @@ -2022-08-30 986710ac70a3e0a4c3857080f85fc080408d0573 +2022-09-20 17202fd2ac0fd753b5418cc78c01b70aed4fa50b diff --git a/repos/os/recipes/src/loader/hash b/repos/os/recipes/src/loader/hash index fdb80d0232..0d2b19939c 100644 --- a/repos/os/recipes/src/loader/hash +++ b/repos/os/recipes/src/loader/hash @@ -1 +1 @@ -2022-08-30 193ca1c6d569ac2db37b6adecad687fec40c7a41 +2022-09-20 e6cad65a2e1d47e5abe7f11b6550da53e70790b9 diff --git a/repos/os/recipes/src/log_core/hash b/repos/os/recipes/src/log_core/hash index 7193a53877..b384316fc2 100644 --- a/repos/os/recipes/src/log_core/hash +++ b/repos/os/recipes/src/log_core/hash @@ -1 +1 @@ -2022-08-30 d644592957e747a2850b576d56408e2d37f7a58d +2022-09-20 2310b0f7619828c75c2be97adb1a6ff4a8fdd7f9 diff --git a/repos/os/recipes/src/log_terminal/hash b/repos/os/recipes/src/log_terminal/hash index e06dc94951..fe6362882f 100644 --- a/repos/os/recipes/src/log_terminal/hash +++ b/repos/os/recipes/src/log_terminal/hash @@ -1 +1 @@ -2022-08-30 72b04ee91a2a4753cbe7e0bda26194c686086f13 +2022-09-20 85449c66e86bf50609470747b5edb469be4a5ea5 diff --git a/repos/os/recipes/src/lx_block/hash b/repos/os/recipes/src/lx_block/hash index d68d293b6a..c8dd659a26 100644 --- a/repos/os/recipes/src/lx_block/hash +++ b/repos/os/recipes/src/lx_block/hash @@ -1 +1 @@ -2022-08-30 79af2a3d1a8989cf86d5836e2ed5dd210f4530e3 +2022-09-20 2903e6cecb725f1c844f718cb19ea8f0c2a4d8d3 diff --git a/repos/os/recipes/src/lx_fs/hash b/repos/os/recipes/src/lx_fs/hash index fd7c5d9aff..b734abc89d 100644 --- a/repos/os/recipes/src/lx_fs/hash +++ b/repos/os/recipes/src/lx_fs/hash @@ -1 +1 @@ -2022-08-30 822aab56492fe927ad674cf1ca951d4a22e7daa2 +2022-09-20 bfef637954e4fafd02529d7d10d95bef4c2e6729 diff --git a/repos/os/recipes/src/mixer/hash b/repos/os/recipes/src/mixer/hash index 4111eade1d..3e163accff 100644 --- a/repos/os/recipes/src/mixer/hash +++ b/repos/os/recipes/src/mixer/hash @@ -1 +1 @@ -2022-08-30 9b9b703d6392c9b54f9131fb8b6d09a80f7f647f +2022-09-20 ee33f5012fb1c91fc59da25c0ae3710f00ffb724 diff --git a/repos/os/recipes/src/nic_bridge/hash b/repos/os/recipes/src/nic_bridge/hash index daa6a1cddb..6a9084bb08 100644 --- a/repos/os/recipes/src/nic_bridge/hash +++ b/repos/os/recipes/src/nic_bridge/hash @@ -1 +1 @@ -2022-08-30 5f48764dd22557740d527eb2da54ed331761d0e0 +2022-09-20 5db4be94d4de5008b6fb102c33c7088816f45452 diff --git a/repos/os/recipes/src/nic_loopback/hash b/repos/os/recipes/src/nic_loopback/hash index 5b134f3c43..31cb60b0e4 100644 --- a/repos/os/recipes/src/nic_loopback/hash +++ b/repos/os/recipes/src/nic_loopback/hash @@ -1 +1 @@ -2022-08-30 75cbfd553c96e8e16a33d0010f502b7a32c604ae +2022-09-20 f4f3420ba22093037187b52e26a3d8f9fac08955 diff --git a/repos/os/recipes/src/nic_perf/hash b/repos/os/recipes/src/nic_perf/hash index 7d5bc69cdd..e583b5911d 100644 --- a/repos/os/recipes/src/nic_perf/hash +++ b/repos/os/recipes/src/nic_perf/hash @@ -1 +1 @@ -2022-08-30 e51e2d3b991902c387444c5edcf700fb2d28b658 +2022-09-20 c8d8d64e5fd48603aa6f48bf32178b5fd5ec9497 diff --git a/repos/os/recipes/src/nic_router/hash b/repos/os/recipes/src/nic_router/hash index ff201033e4..b6c6b9c236 100644 --- a/repos/os/recipes/src/nic_router/hash +++ b/repos/os/recipes/src/nic_router/hash @@ -1 +1 @@ -2022-08-30 443b264f9b11a95823133fa57b9bc972d45ebf3e +2022-09-20 cef7be10f414f5600eea3d55a7dff209a360bf00 diff --git a/repos/os/recipes/src/nit_focus/hash b/repos/os/recipes/src/nit_focus/hash index 715ae84fe5..65787eecf9 100644 --- a/repos/os/recipes/src/nit_focus/hash +++ b/repos/os/recipes/src/nit_focus/hash @@ -1 +1 @@ -2022-08-30 1d1ba6740dc6fa4e795e439b9d2010cde43f9b9f +2022-09-20 6864131c7fae898ad95b14012a9df9d18896c3d8 diff --git a/repos/os/recipes/src/nitpicker/hash b/repos/os/recipes/src/nitpicker/hash index 6eb81561b9..a1c39e2c0f 100644 --- a/repos/os/recipes/src/nitpicker/hash +++ b/repos/os/recipes/src/nitpicker/hash @@ -1 +1 @@ -2022-08-30 5fa8f844eb3c95bb33531085a282b917a83a3606 +2022-09-20 b8ed0806639947d82d499f8cab384476868026d6 diff --git a/repos/os/recipes/src/nvme_drv/hash b/repos/os/recipes/src/nvme_drv/hash index f08ebd0ad3..ee3f6447e7 100644 --- a/repos/os/recipes/src/nvme_drv/hash +++ b/repos/os/recipes/src/nvme_drv/hash @@ -1 +1 @@ -2022-08-30 f5fc640ba506cc679574491ef49f681dceb8ac8b +2022-09-20 6cfe13f2d3af886261180e56e0581ee0846f81ed diff --git a/repos/os/recipes/src/part_block/hash b/repos/os/recipes/src/part_block/hash index 0c25c6b68d..ae4888a4a0 100644 --- a/repos/os/recipes/src/part_block/hash +++ b/repos/os/recipes/src/part_block/hash @@ -1 +1 @@ -2022-08-30 07c2e2132e9031cc9eb39321d86d75aa8eae8cb8 +2022-09-20 9789296eed45073095f73e5b0434f4715839aa31 diff --git a/repos/os/recipes/src/pbxa9_drivers/hash b/repos/os/recipes/src/pbxa9_drivers/hash index 0d3356d405..2ce56e25b5 100644 --- a/repos/os/recipes/src/pbxa9_drivers/hash +++ b/repos/os/recipes/src/pbxa9_drivers/hash @@ -1 +1 @@ -2022-08-30 634e9b074a9fc8d601bb5a12576e7b77890650fe +2022-09-20 082ec155407ba0b3cbf6a971aaa7ed247310b244 diff --git a/repos/os/recipes/src/pci_decode/hash b/repos/os/recipes/src/pci_decode/hash index 7498373127..d70815b1cc 100644 --- a/repos/os/recipes/src/pci_decode/hash +++ b/repos/os/recipes/src/pci_decode/hash @@ -1 +1 @@ -2022-08-30 60cb25fc4b6dc90522121d333f77fa9d56650c59 +2022-09-20 e53aefdb6c7f7a76dba891182ae33ec96bc4af58 diff --git a/repos/os/recipes/src/platform_drv/hash b/repos/os/recipes/src/platform_drv/hash index 35fa4b9bc6..95c5865bb7 100644 --- a/repos/os/recipes/src/platform_drv/hash +++ b/repos/os/recipes/src/platform_drv/hash @@ -1 +1 @@ -2022-08-30 9a7278b681b07b0006685f45b970212ca9b5b57c +2022-09-20 f0ab8c86e196789acd58245f20a9bf3c5e6dfdc1 diff --git a/repos/os/recipes/src/ps2_drv/hash b/repos/os/recipes/src/ps2_drv/hash index 30ff208912..696566ad38 100644 --- a/repos/os/recipes/src/ps2_drv/hash +++ b/repos/os/recipes/src/ps2_drv/hash @@ -1 +1 @@ -2022-08-30 f5d418978137b880cc499474c724168942635a6d +2022-09-20 da4a1402eaa6a75940aa8152d8c710bde1725ce7 diff --git a/repos/os/recipes/src/report_rom/hash b/repos/os/recipes/src/report_rom/hash index a67d3a2b11..4f32b57b86 100644 --- a/repos/os/recipes/src/report_rom/hash +++ b/repos/os/recipes/src/report_rom/hash @@ -1 +1 @@ -2022-08-30 1a8ab75591d2c35c0b199e829be327ffeacc3f28 +2022-09-20 052d765db5d87e910db3550629347ea3ad40e8c1 diff --git a/repos/os/recipes/src/rom_filter/hash b/repos/os/recipes/src/rom_filter/hash index 3a5d22909e..273a1d7b1a 100644 --- a/repos/os/recipes/src/rom_filter/hash +++ b/repos/os/recipes/src/rom_filter/hash @@ -1 +1 @@ -2022-08-30 b23da0a02af86c1431fc86a68b8a8a7aae32f4a5 +2022-09-20 7e51cc88f4d985564d14eb8d5e46076bdfcda71a diff --git a/repos/os/recipes/src/rom_logger/hash b/repos/os/recipes/src/rom_logger/hash index 99b93a6cef..8960620f23 100644 --- a/repos/os/recipes/src/rom_logger/hash +++ b/repos/os/recipes/src/rom_logger/hash @@ -1 +1 @@ -2022-08-30 174123222a0f6ca6ede2309ba8efd7d87da7e9c1 +2022-09-20 67278f495a37c26c251a68c6992d3b02f0c94fbf diff --git a/repos/os/recipes/src/rom_reporter/hash b/repos/os/recipes/src/rom_reporter/hash index 9c71db9b74..043195e7e8 100644 --- a/repos/os/recipes/src/rom_reporter/hash +++ b/repos/os/recipes/src/rom_reporter/hash @@ -1 +1 @@ -2022-08-30 c5a1d2b90fd51cfbc72c0130c32638fdf42d4ab0 +2022-09-20 5276368201389a1bdb744f79ee8d2999d21510c4 diff --git a/repos/os/recipes/src/rom_to_file/hash b/repos/os/recipes/src/rom_to_file/hash index 1cbe43b5f5..2e3dc43478 100644 --- a/repos/os/recipes/src/rom_to_file/hash +++ b/repos/os/recipes/src/rom_to_file/hash @@ -1 +1 @@ -2022-08-30 fe8e76b7e81522af8d21d7a0f568d5e5fb63648a +2022-09-20 2892f824f101f2f67ed21235cde3d525597f7adc diff --git a/repos/os/recipes/src/rtc_drv/hash b/repos/os/recipes/src/rtc_drv/hash index 3877df9735..0c5bb13a68 100644 --- a/repos/os/recipes/src/rtc_drv/hash +++ b/repos/os/recipes/src/rtc_drv/hash @@ -1 +1 @@ -2022-08-30 5433a4abce0182ca7497d0f89ef7b0b3adddc572 +2022-09-20 61bdf48fd247b7ed1e71bbe57fb69b0bdc147bb0 diff --git a/repos/os/recipes/src/sandbox/hash b/repos/os/recipes/src/sandbox/hash index 5dedb7eef5..b340e45719 100644 --- a/repos/os/recipes/src/sandbox/hash +++ b/repos/os/recipes/src/sandbox/hash @@ -1 +1 @@ -2022-08-30 d6dcba71dca67f299b72e8efa7badab034a3c239 +2022-09-20 bb45d2fd617c5fed3ae6079d43a23471f833b8b9 diff --git a/repos/os/recipes/src/sequence/hash b/repos/os/recipes/src/sequence/hash index 658a631e06..84ddb94d5f 100644 --- a/repos/os/recipes/src/sequence/hash +++ b/repos/os/recipes/src/sequence/hash @@ -1 +1 @@ -2022-08-30 d529a1c3e46d7f72d4fb73e949464e363df333ab +2022-09-20 31aa3acefa4e552f30960de1c974db6e5395387a diff --git a/repos/os/recipes/src/shim/hash b/repos/os/recipes/src/shim/hash index 59a86f082d..6b2a9d3437 100644 --- a/repos/os/recipes/src/shim/hash +++ b/repos/os/recipes/src/shim/hash @@ -1 +1 @@ -2022-08-30 1cea68954ea81deee6e45b75d8a65857ef86dddb +2022-09-20 8a2fde07f00b86dd9868337885aca420ce11d156 diff --git a/repos/os/recipes/src/terminal_crosslink/hash b/repos/os/recipes/src/terminal_crosslink/hash index c589cf4adb..650d06d5b4 100644 --- a/repos/os/recipes/src/terminal_crosslink/hash +++ b/repos/os/recipes/src/terminal_crosslink/hash @@ -1 +1 @@ -2022-08-30 f6ef67224b7c0fe8caa0e1b3992d8cfa6f1e70d8 +2022-09-20 46a25733dbb3b15e1567944bae526e6843af4b23 diff --git a/repos/os/recipes/src/terminal_log/hash b/repos/os/recipes/src/terminal_log/hash index 3d7584b354..363073f8bb 100644 --- a/repos/os/recipes/src/terminal_log/hash +++ b/repos/os/recipes/src/terminal_log/hash @@ -1 +1 @@ -2022-08-30 fb1a4f27ec4840c33c83eeca6f5afb59dda4ff49 +2022-09-20 41f7194622c885185c21cb11c1ce7edeaf888264 diff --git a/repos/os/recipes/src/test-black_hole/hash b/repos/os/recipes/src/test-black_hole/hash index 223a229ade..5382cfbdf4 100644 --- a/repos/os/recipes/src/test-black_hole/hash +++ b/repos/os/recipes/src/test-black_hole/hash @@ -1 +1 @@ -2022-08-30 d4a684a513dfc1ef1f09d8a8b6988eaea7b565d7 +2022-09-20 c72051778edd62db47eac0ae099d260552d9c247 diff --git a/repos/os/recipes/src/test-bomb/hash b/repos/os/recipes/src/test-bomb/hash index 9ab717b97d..a7c995f37d 100644 --- a/repos/os/recipes/src/test-bomb/hash +++ b/repos/os/recipes/src/test-bomb/hash @@ -1 +1 @@ -2022-08-30 576f1afa013de6f31f9738e6992b9feb7008ddbb +2022-09-20 f5c5680728583936584bfca7a431c5b21b3ab672 diff --git a/repos/os/recipes/src/test-capture/hash b/repos/os/recipes/src/test-capture/hash index eb77cd07f4..784e082630 100644 --- a/repos/os/recipes/src/test-capture/hash +++ b/repos/os/recipes/src/test-capture/hash @@ -1 +1 @@ -2022-08-30 38dbb5e21ef06a0bce13734a7319cd8466fd20de +2022-09-20 3399f94892459d2ae78841dc12c20dd163fabd3e diff --git a/repos/os/recipes/src/test-clipboard/hash b/repos/os/recipes/src/test-clipboard/hash index 4930206580..d19aef62fa 100644 --- a/repos/os/recipes/src/test-clipboard/hash +++ b/repos/os/recipes/src/test-clipboard/hash @@ -1 +1 @@ -2022-08-30 a1d116d84f5a13f2d5ce2cc8b0d5835b9398dc37 +2022-09-20 fe8baa2c694f6404adb67177a67e8d70b9264915 diff --git a/repos/os/recipes/src/test-dynamic_config/hash b/repos/os/recipes/src/test-dynamic_config/hash index 867e062c6a..064a436b9c 100644 --- a/repos/os/recipes/src/test-dynamic_config/hash +++ b/repos/os/recipes/src/test-dynamic_config/hash @@ -1 +1 @@ -2022-08-30 bc4b7671ccfa160bc8cc0261687d2d63df7de8d6 +2022-09-20 1da485256e861fccc8af731728219b79e3ac9936 diff --git a/repos/os/recipes/src/test-fault_detection/hash b/repos/os/recipes/src/test-fault_detection/hash index 2995c054ee..c32f5a379f 100644 --- a/repos/os/recipes/src/test-fault_detection/hash +++ b/repos/os/recipes/src/test-fault_detection/hash @@ -1 +1 @@ -2022-08-30 24cea1cabbfa051a0e4024391a99545c3aa83c41 +2022-09-20 4b34af7bf702e24a883eeb9f01b35bab87a82547 diff --git a/repos/os/recipes/src/test-fs_packet/hash b/repos/os/recipes/src/test-fs_packet/hash index 5554f0447b..13e8815d33 100644 --- a/repos/os/recipes/src/test-fs_packet/hash +++ b/repos/os/recipes/src/test-fs_packet/hash @@ -1 +1 @@ -2022-08-30 85cf4f46024126fe26ce5c077d6c531eecac0337 +2022-09-20 b48189baba85d5e7e9c5276d3ca81447e78669d6 diff --git a/repos/os/recipes/src/test-fs_report/hash b/repos/os/recipes/src/test-fs_report/hash index 247495d269..f94d96c7f3 100644 --- a/repos/os/recipes/src/test-fs_report/hash +++ b/repos/os/recipes/src/test-fs_report/hash @@ -1 +1 @@ -2022-08-30 877c399a1fa8cea8af0a964719d6cbc6109a6b99 +2022-09-20 fe193127bf613f741ab183de88c19c744d4d5061 diff --git a/repos/os/recipes/src/test-immutable_rom/hash b/repos/os/recipes/src/test-immutable_rom/hash index 64fc6442e0..50dd41869b 100644 --- a/repos/os/recipes/src/test-immutable_rom/hash +++ b/repos/os/recipes/src/test-immutable_rom/hash @@ -1 +1 @@ -2022-08-30 0c0eb724a1739abc1c45d0982b30facd8dc87bb2 +2022-09-20 57d496c1a975ad64a6de3de72a07be8f86d810ba diff --git a/repos/os/recipes/src/test-init/hash b/repos/os/recipes/src/test-init/hash index ea8e9052c1..df4971265a 100644 --- a/repos/os/recipes/src/test-init/hash +++ b/repos/os/recipes/src/test-init/hash @@ -1 +1 @@ -2022-08-30 4ff6066aacbb9921cd6eff4d11402734591319f0 +2022-09-20 cb60f7abfa8af117e97a9c9eea7021bf8e069c57 diff --git a/repos/os/recipes/src/test-init_loop/hash b/repos/os/recipes/src/test-init_loop/hash index 1cd5ee4bae..f3cc261035 100644 --- a/repos/os/recipes/src/test-init_loop/hash +++ b/repos/os/recipes/src/test-init_loop/hash @@ -1 +1 @@ -2022-08-30 6cb4005615ab6ede60375176b506ef46a96c37c0 +2022-09-20 050acc021f28a17bd12dc56cf74caa808f561cd2 diff --git a/repos/os/recipes/src/test-nic_loopback/hash b/repos/os/recipes/src/test-nic_loopback/hash index e809a778e8..1b06d7cf16 100644 --- a/repos/os/recipes/src/test-nic_loopback/hash +++ b/repos/os/recipes/src/test-nic_loopback/hash @@ -1 +1 @@ -2022-08-30 0b8afe67c197ff75c36de7df9344e4ee32c2eb65 +2022-09-20 1be110cd74b05a951d597bffe73e15cd93ecb15d diff --git a/repos/os/recipes/src/test-ram_fs_chunk/hash b/repos/os/recipes/src/test-ram_fs_chunk/hash index 83d3ed572c..7d3d6430f3 100644 --- a/repos/os/recipes/src/test-ram_fs_chunk/hash +++ b/repos/os/recipes/src/test-ram_fs_chunk/hash @@ -1 +1 @@ -2022-08-30 5d1af7355c0dea81460a0a85197332c56663eb6d +2022-09-20 edf4ebf4394c27b5442d78bac3e75e38a4f099d3 diff --git a/repos/os/recipes/src/test-report_rom/hash b/repos/os/recipes/src/test-report_rom/hash index 585952e6c4..853cea0d00 100644 --- a/repos/os/recipes/src/test-report_rom/hash +++ b/repos/os/recipes/src/test-report_rom/hash @@ -1 +1 @@ -2022-08-30 195464a38771447ef860636766f1c2bf86964bf7 +2022-09-20 ff97c8c41033b6e4241b66b1768697db9ad5747a diff --git a/repos/os/recipes/src/test-resource_request/hash b/repos/os/recipes/src/test-resource_request/hash index e2943ce2a4..9d266c5c86 100644 --- a/repos/os/recipes/src/test-resource_request/hash +++ b/repos/os/recipes/src/test-resource_request/hash @@ -1 +1 @@ -2022-08-30 51a6fc2e3b3fbe26c0d7b646b81e40994cb825d3 +2022-09-20 05d0a4596e24e224bab04b27671fb749e44ed872 diff --git a/repos/os/recipes/src/test-resource_yield/hash b/repos/os/recipes/src/test-resource_yield/hash index 9b59200f46..2bc46e5bd2 100644 --- a/repos/os/recipes/src/test-resource_yield/hash +++ b/repos/os/recipes/src/test-resource_yield/hash @@ -1 +1 @@ -2022-08-30 4c716c4359ea1546239ec36b99fa3c1c6948c2b6 +2022-09-20 f4ff9999ef964fb83a64b35d530a4effb21d36c9 diff --git a/repos/os/recipes/src/test-rtc/hash b/repos/os/recipes/src/test-rtc/hash index d816a67a6c..f7a9e694df 100644 --- a/repos/os/recipes/src/test-rtc/hash +++ b/repos/os/recipes/src/test-rtc/hash @@ -1 +1 @@ -2022-08-30 226507e9ed58c0bcc249bf1114637520ebe5022b +2022-09-20 9fd83da8c60a47787d24f16482ec7a3d2b9a4cc6 diff --git a/repos/os/recipes/src/test-sandbox/hash b/repos/os/recipes/src/test-sandbox/hash index b0b027e662..7ea22b32e0 100644 --- a/repos/os/recipes/src/test-sandbox/hash +++ b/repos/os/recipes/src/test-sandbox/hash @@ -1 +1 @@ -2022-08-30 26c47ea3e06bb6e1751d02a2364448d56602a481 +2022-09-20 b12e00894c85f728ff95177432d896f108d18c9f diff --git a/repos/os/recipes/src/test-signal/hash b/repos/os/recipes/src/test-signal/hash index d47995bd38..d537e7127a 100644 --- a/repos/os/recipes/src/test-signal/hash +++ b/repos/os/recipes/src/test-signal/hash @@ -1 +1 @@ -2022-08-30 35ed62b21719bf72ff37064e35163e442da797cc +2022-09-20 51d5cb82efdc7d31570814e02d8fba3d84c34428 diff --git a/repos/os/recipes/src/test-slab/hash b/repos/os/recipes/src/test-slab/hash index b073cfc233..33bb49fed6 100644 --- a/repos/os/recipes/src/test-slab/hash +++ b/repos/os/recipes/src/test-slab/hash @@ -1 +1 @@ -2022-08-30 a48f9bf4945c89c44d2b0a1d29af2f0f91ea474f +2022-09-20 e4a9857baab39a59737d9a1efc295913d1df0e04 diff --git a/repos/os/recipes/src/test-terminal_crosslink/hash b/repos/os/recipes/src/test-terminal_crosslink/hash index 1f0e4fe8f9..b920e0d78f 100644 --- a/repos/os/recipes/src/test-terminal_crosslink/hash +++ b/repos/os/recipes/src/test-terminal_crosslink/hash @@ -1 +1 @@ -2022-08-30 d51ff101e8e9c3c1ce7e407cd1f65912a4f0bb59 +2022-09-20 9d9172804b4d36d0f9fc7aa4ece43b1bad56a611 diff --git a/repos/os/recipes/src/test-trace/hash b/repos/os/recipes/src/test-trace/hash index 7505ce382f..0e7065e388 100644 --- a/repos/os/recipes/src/test-trace/hash +++ b/repos/os/recipes/src/test-trace/hash @@ -1 +1 @@ -2022-08-30 ea5efd746fc71f177dbe5f83780b117ef4d29825 +2022-09-20 f74c5400c267fea8f384d6ce6225adbb2f48f3e0 diff --git a/repos/os/recipes/src/test-trace_buffer/hash b/repos/os/recipes/src/test-trace_buffer/hash index 9fe9efa2d7..0d40155f72 100644 --- a/repos/os/recipes/src/test-trace_buffer/hash +++ b/repos/os/recipes/src/test-trace_buffer/hash @@ -1 +1 @@ -2022-08-30 7b71ad6ae71d7d925d0238d9a8af7f9b8ad1e3d2 +2022-09-20 41e42a6b613ce0e3726dea381fd6aa39e088281f diff --git a/repos/os/recipes/src/test-trace_logger/hash b/repos/os/recipes/src/test-trace_logger/hash index da5c319f77..b58c7b7307 100644 --- a/repos/os/recipes/src/test-trace_logger/hash +++ b/repos/os/recipes/src/test-trace_logger/hash @@ -1 +1 @@ -2022-08-30 854869e01241f56fe531a4214bafc48a260d4557 +2022-09-20 31fb9149bda926d41e6d2156107ad77bc36d6883 diff --git a/repos/os/recipes/src/test-utf8/hash b/repos/os/recipes/src/test-utf8/hash index 0b8e8673b6..99e8e10742 100644 --- a/repos/os/recipes/src/test-utf8/hash +++ b/repos/os/recipes/src/test-utf8/hash @@ -1 +1 @@ -2022-08-30 ec48902b3dea669e57058b42ce9b3b1a6cc86404 +2022-09-20 a15e1951d06b9b15f185bd6c67ca16956cc6b65c diff --git a/repos/os/recipes/src/test-vfs_capture/hash b/repos/os/recipes/src/test-vfs_capture/hash index 6ab3deeb8a..c6bd1e2d46 100644 --- a/repos/os/recipes/src/test-vfs_capture/hash +++ b/repos/os/recipes/src/test-vfs_capture/hash @@ -1 +1 @@ -2022-08-30 688e234ef74c143268cad273a58daad77c25c705 +2022-09-20 7d92fd8c09a4dde65347adf72468b1e78b1f09ba diff --git a/repos/os/recipes/src/test-vfs_stress/hash b/repos/os/recipes/src/test-vfs_stress/hash index 82ac8176b0..776d0d60c9 100644 --- a/repos/os/recipes/src/test-vfs_stress/hash +++ b/repos/os/recipes/src/test-vfs_stress/hash @@ -1 +1 @@ -2022-08-30 a08d2bde4151b88e4ad351c823849653554d6e8e +2022-09-20 60b8fb8dff4461129c5e9903d184a093dac8550d diff --git a/repos/os/recipes/src/test-weak_ptr/hash b/repos/os/recipes/src/test-weak_ptr/hash index 48ccdae318..39d71ab777 100644 --- a/repos/os/recipes/src/test-weak_ptr/hash +++ b/repos/os/recipes/src/test-weak_ptr/hash @@ -1 +1 @@ -2022-08-30 f59d5eb4d86172c3eab7a52873b9148a5cdcb257 +2022-09-20 5eaac3e48d515c6d4f000eb3a6193be916f676ed diff --git a/repos/os/recipes/src/top/hash b/repos/os/recipes/src/top/hash index 07a789ff9b..4eb6ff8215 100644 --- a/repos/os/recipes/src/top/hash +++ b/repos/os/recipes/src/top/hash @@ -1 +1 @@ -2022-08-30 d603cdeeee0c3fb03394cf9b5b814e13a2646da1 +2022-09-20 d7b9a001c33e9a459701be6147f849b9553a46f1 diff --git a/repos/os/recipes/src/trace_logger/hash b/repos/os/recipes/src/trace_logger/hash index c4cb0737ce..3ea0d7c42d 100644 --- a/repos/os/recipes/src/trace_logger/hash +++ b/repos/os/recipes/src/trace_logger/hash @@ -1 +1 @@ -2022-08-30 1da2ba5fd5bd35fe54218bbac769a68fc102bc46 +2022-09-20 98c6d9f2ec4be5a0c90f213b76cfd399eedb5750 diff --git a/repos/os/recipes/src/trace_policy/hash b/repos/os/recipes/src/trace_policy/hash index d2b2da8f55..42ec2eeff8 100644 --- a/repos/os/recipes/src/trace_policy/hash +++ b/repos/os/recipes/src/trace_policy/hash @@ -1 +1 @@ -2022-08-30 b9701cdff1d363f22f7689a86d8044b1cfa7a915 +2022-09-20 4d6efe7d351f014903adb3a42147ce5e539ee492 diff --git a/repos/os/recipes/src/trace_subject_reporter/hash b/repos/os/recipes/src/trace_subject_reporter/hash index 92c39195f2..850116fd54 100644 --- a/repos/os/recipes/src/trace_subject_reporter/hash +++ b/repos/os/recipes/src/trace_subject_reporter/hash @@ -1 +1 @@ -2022-08-30 2fa2ef3f0f3818cda8c0d196d8753d53574ebe3f +2022-09-20 a80dd4e3162fdb05535185e216b53773f60baf00 diff --git a/repos/os/recipes/src/usb_block_drv/hash b/repos/os/recipes/src/usb_block_drv/hash index df9e370209..3991444b21 100644 --- a/repos/os/recipes/src/usb_block_drv/hash +++ b/repos/os/recipes/src/usb_block_drv/hash @@ -1 +1 @@ -2022-08-30 64afe25ab9ee9a73f27f09768a35bed409bcecab +2022-09-20 07997786c78ae439d3e20566741f818c424ded66 diff --git a/repos/os/recipes/src/vfs/hash b/repos/os/recipes/src/vfs/hash index bfbbc18f10..6bad70bda3 100644 --- a/repos/os/recipes/src/vfs/hash +++ b/repos/os/recipes/src/vfs/hash @@ -1 +1 @@ -2022-08-30 55b269a7ff0531f898ef72fa9660186042139389 +2022-09-20 a609a4068df8a24cf9a824bb5a439bfc63a07946 diff --git a/repos/os/recipes/src/vfs_block/hash b/repos/os/recipes/src/vfs_block/hash index 1be083f24c..aa76f471fd 100644 --- a/repos/os/recipes/src/vfs_block/hash +++ b/repos/os/recipes/src/vfs_block/hash @@ -1 +1 @@ -2022-08-30 e7919158b57fa83bf650e43007e53395ad48f1f5 +2022-09-20 6aaaf6ee5b1ab9c608c427391df1b3b718665941 diff --git a/repos/os/recipes/src/vfs_capture/hash b/repos/os/recipes/src/vfs_capture/hash index 23ef39b4e9..d8a65c4b1c 100644 --- a/repos/os/recipes/src/vfs_capture/hash +++ b/repos/os/recipes/src/vfs_capture/hash @@ -1 +1 @@ -2022-08-30 bb935641858856f281718e9de0f1fb0c84f14784 +2022-09-20 857c989ec5180864b51aedd96847184b89e68717 diff --git a/repos/os/recipes/src/vfs_tap/hash b/repos/os/recipes/src/vfs_tap/hash index a179e8cd4c..f7c4336762 100644 --- a/repos/os/recipes/src/vfs_tap/hash +++ b/repos/os/recipes/src/vfs_tap/hash @@ -1 +1 @@ -2022-08-30 4b262ee2ba6d45e67ed9f62cf035463bad9ef10e +2022-09-20 0663c6c25d8daf61a7e6e70231502156aced9261 diff --git a/repos/os/recipes/src/virt_qemu_drivers/hash b/repos/os/recipes/src/virt_qemu_drivers/hash index da60fb4828..81d3c1fbef 100644 --- a/repos/os/recipes/src/virt_qemu_drivers/hash +++ b/repos/os/recipes/src/virt_qemu_drivers/hash @@ -1 +1 @@ -2022-08-30 4be1a934e48b2c114acc040e2aded55db5bc7a23 +2022-09-20 1050d2995a6678816e7ca852b21648ec9b35e5cd diff --git a/repos/os/recipes/src/virtdev_rom/hash b/repos/os/recipes/src/virtdev_rom/hash index e8324fc345..ba8a4a45d9 100644 --- a/repos/os/recipes/src/virtdev_rom/hash +++ b/repos/os/recipes/src/virtdev_rom/hash @@ -1 +1 @@ -2022-08-30 97f6f47319b9943a0b973543ea365456a1436bed +2022-09-20 003f0793cb1460a88689a007ad198e55691def27 diff --git a/repos/os/recipes/src/virtio_fb_drv/hash b/repos/os/recipes/src/virtio_fb_drv/hash index e4f0e75503..ac5c019a0a 100644 --- a/repos/os/recipes/src/virtio_fb_drv/hash +++ b/repos/os/recipes/src/virtio_fb_drv/hash @@ -1 +1 @@ -2022-08-30 cf0cf0a8a6e93c4ac97a00e3e1fde5a9916d0cf5 +2022-09-20 51126d57f84c6a120a6f4a42d08a34b1ce3def98 diff --git a/repos/os/recipes/src/virtio_input_drv/hash b/repos/os/recipes/src/virtio_input_drv/hash index 14e554eb23..aed9d156ab 100644 --- a/repos/os/recipes/src/virtio_input_drv/hash +++ b/repos/os/recipes/src/virtio_input_drv/hash @@ -1 +1 @@ -2022-08-30 177d558b7be8e589ccade499f731c78f7bfdc99f +2022-09-20 9cb94f847a36597aceb2fa6bfe8fa78257572cdf diff --git a/repos/os/recipes/src/virtio_nic_drv/hash b/repos/os/recipes/src/virtio_nic_drv/hash index 2879443d7e..b91ed8c34a 100644 --- a/repos/os/recipes/src/virtio_nic_drv/hash +++ b/repos/os/recipes/src/virtio_nic_drv/hash @@ -1 +1 @@ -2022-08-30 227fde817e628f13dfbbe4b9e3a3f8fede7ea947 +2022-09-20 f3a821da9704cf2e8d59bc0d75d4f7da1d0e13e3 diff --git a/repos/os/recipes/src/vmm/hash b/repos/os/recipes/src/vmm/hash index d01175b10d..c6a0914d5c 100644 --- a/repos/os/recipes/src/vmm/hash +++ b/repos/os/recipes/src/vmm/hash @@ -1 +1 @@ -2022-08-30 a271e57cc177b1a7ebe7164f7bcb791dfcce6a56 +2022-09-20 16364bc10cae097dde6f375d203f2308bc1ad379 diff --git a/repos/pc/recipes/api/pc_linux/hash b/repos/pc/recipes/api/pc_linux/hash index 93b5f6d7f2..40e31791e8 100644 --- a/repos/pc/recipes/api/pc_linux/hash +++ b/repos/pc/recipes/api/pc_linux/hash @@ -1 +1 @@ -2022-08-16 1a13070cd6d7c135c1fdd63e3178a1e9dc73c33b +2022-09-20 430615749e117aadeee1e48798771874638bf10d diff --git a/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash b/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash index c8bfd5d1de..de50c9464f 100644 --- a/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash +++ b/repos/pc/recipes/pkg/test_usb_host_drv-pc/hash @@ -1 +1 @@ -2022-08-30 e0450aee90f72fe9bf15f86f27460536a59712dd +2022-09-20 6f6f21336b7451d89b350ce06e68c772feb83f30 diff --git a/repos/pc/recipes/pkg/wifi/hash b/repos/pc/recipes/pkg/wifi/hash index 52cdce2f18..f494710b38 100644 --- a/repos/pc/recipes/pkg/wifi/hash +++ b/repos/pc/recipes/pkg/wifi/hash @@ -1 +1 @@ -2022-08-30 182e4a2d93bb4cc2488190f7a714fc48dc7e1a68 +2022-09-20 1a8ac68e10fd2a4e517b7a217e5bfe5a0c41db8b diff --git a/repos/pc/recipes/src/pc_intel_fb_drv/hash b/repos/pc/recipes/src/pc_intel_fb_drv/hash index 2436d8302a..8cceb9e2c8 100644 --- a/repos/pc/recipes/src/pc_intel_fb_drv/hash +++ b/repos/pc/recipes/src/pc_intel_fb_drv/hash @@ -1 +1 @@ -2022-08-30 1bca1343bd4eff0f0c3ee5433890fd7d79d3ab32 +2022-09-20 cc4f3c1d27bc04e214a81426f7ec66a7ec50cf41 diff --git a/repos/pc/recipes/src/pc_usb_host_drv/hash b/repos/pc/recipes/src/pc_usb_host_drv/hash index fd36eeafea..9879cc5eaa 100644 --- a/repos/pc/recipes/src/pc_usb_host_drv/hash +++ b/repos/pc/recipes/src/pc_usb_host_drv/hash @@ -1 +1 @@ -2022-08-30 eff7d016819dc3e378faee87b59cbac94aab50a6 +2022-09-20 8a091c44c4ec6b770b81985dd583fa47dddbe3d4 diff --git a/repos/pc/recipes/src/pc_wifi_drv/hash b/repos/pc/recipes/src/pc_wifi_drv/hash index eeb39f6a2d..3ff8eaa14b 100644 --- a/repos/pc/recipes/src/pc_wifi_drv/hash +++ b/repos/pc/recipes/src/pc_wifi_drv/hash @@ -1 +1 @@ -2022-08-30 4df0ef3b45cc098aa5d7c8305d7c9cf4b14955e0 +2022-09-20 6c2e0ce43b054ba03ac42b0c237e850d4a541a24 diff --git a/repos/ports/recipes/pkg/report_dump/hash b/repos/ports/recipes/pkg/report_dump/hash index feb2c9d589..27009de276 100644 --- a/repos/ports/recipes/pkg/report_dump/hash +++ b/repos/ports/recipes/pkg/report_dump/hash @@ -1 +1 @@ -2022-08-30 761fb6a86a9394e6bac0e2c9d2ab5f96c788966d +2022-09-20 ca1510a999d9e810ad4c3cf01dfe1c80bb7c997e diff --git a/repos/ports/recipes/pkg/system_shell/hash b/repos/ports/recipes/pkg/system_shell/hash index feed71f643..4ba38ed7fe 100644 --- a/repos/ports/recipes/pkg/system_shell/hash +++ b/repos/ports/recipes/pkg/system_shell/hash @@ -1 +1 @@ -2022-08-30 20689e09adf784f05b602dc7627d7e821c53b0e2 +2022-09-20 1b79cb90233c4187b4f70e219c4b2ded8a18b9b0 diff --git a/repos/ports/recipes/pkg/vbox5-nova-capture/hash b/repos/ports/recipes/pkg/vbox5-nova-capture/hash index e4f243f197..8dc0a34f9e 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-capture/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-capture/hash @@ -1 +1 @@ -2022-08-30 c03192c93df65c5cc6ece0f0a338962005463fbe +2022-09-20 7baf567ee510af13b73e4a84f7befde185131d8a diff --git a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash index a0d3bac41d..f342558d54 100644 --- a/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash +++ b/repos/ports/recipes/pkg/vbox5-nova-sculpt/hash @@ -1 +1 @@ -2022-08-30 4009d26264f7ed93a65f17f2d6e366fcf1b5d2e4 +2022-09-20 4460402ccf39b2de376e75efdb7451800833958e diff --git a/repos/ports/recipes/pkg/vbox5/hash b/repos/ports/recipes/pkg/vbox5/hash index e0acfc6783..495f792fac 100644 --- a/repos/ports/recipes/pkg/vbox5/hash +++ b/repos/ports/recipes/pkg/vbox5/hash @@ -1 +1 @@ -2022-08-30 50027a6c7baa4c90436c7cc83339f7b28fdc7690 +2022-09-20 b7452c8ae92dece4f52fb1b721b7ee49f7821b22 diff --git a/repos/ports/recipes/pkg/vbox6-capture/hash b/repos/ports/recipes/pkg/vbox6-capture/hash index 55a8c6b7c4..ef30092d51 100644 --- a/repos/ports/recipes/pkg/vbox6-capture/hash +++ b/repos/ports/recipes/pkg/vbox6-capture/hash @@ -1 +1 @@ -2022-08-30 fd0c4016721d25fc546e0bfed93d0e3b388cb0cb +2022-09-20 b1409eebbe4302243d5d50bea70243cfd45c1572 diff --git a/repos/ports/recipes/pkg/vbox6/hash b/repos/ports/recipes/pkg/vbox6/hash index 6755274710..c683e21113 100644 --- a/repos/ports/recipes/pkg/vbox6/hash +++ b/repos/ports/recipes/pkg/vbox6/hash @@ -1 +1 @@ -2022-08-30 1c46011fe132b73c167aae2e0925d2c9dad5d978 +2022-09-20 42cd04c2ce28bc130c6f15769fc3aad97f958183 diff --git a/repos/ports/recipes/src/vbox5-nova/hash b/repos/ports/recipes/src/vbox5-nova/hash index f9d619dd61..e2fab14b8c 100644 --- a/repos/ports/recipes/src/vbox5-nova/hash +++ b/repos/ports/recipes/src/vbox5-nova/hash @@ -1 +1 @@ -2022-08-30 80e7faccd2b1ceb4fcc47a14d3c2e216c77eeaf3 +2022-09-20 1bf2466e833bbea3ae9cff77dc50378aa5a7ff83 diff --git a/repos/ports/recipes/src/vbox5/hash b/repos/ports/recipes/src/vbox5/hash index b28fc8c760..c639699d0f 100644 --- a/repos/ports/recipes/src/vbox5/hash +++ b/repos/ports/recipes/src/vbox5/hash @@ -1 +1 @@ -2022-08-30 d2261060dc4de366c2f60c64514786ecfb28fbc2 +2022-09-20 30774c1591b83e31bbe40d14081fc256c33f9697 diff --git a/repos/ports/recipes/src/vbox6/hash b/repos/ports/recipes/src/vbox6/hash index 9f80c53c5a..17f5e36ec4 100644 --- a/repos/ports/recipes/src/vbox6/hash +++ b/repos/ports/recipes/src/vbox6/hash @@ -1 +1 @@ -2022-08-30 f6eadd025ae2d557d0daf014a0bc071c4a27d6c5 +2022-09-20 423100ea7c4198e0bf9b18a60a7d46914cc29163 diff --git a/repos/ports/recipes/src/verify/hash b/repos/ports/recipes/src/verify/hash index 10a501af2a..e52a6b500d 100644 --- a/repos/ports/recipes/src/verify/hash +++ b/repos/ports/recipes/src/verify/hash @@ -1 +1 @@ -2022-08-30 2243fe357a50123349c299967b04fd1d23cf32f4 +2022-09-20 a4db59fbfc57fc465f3dce5e1e6067cf37218ac7 From 3a616fed4da5fb721f671e9a9f3af0c8659b6fb9 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Mon, 19 Sep 2022 09:44:55 +0200 Subject: [PATCH 254/354] nic_router: rename is_ready() to ready() Ref #4612 --- repos/os/src/server/nic_router/domain.cc | 6 +++--- repos/os/src/server/nic_router/domain.h | 2 +- repos/os/src/server/nic_router/interface.cc | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/repos/os/src/server/nic_router/domain.cc b/repos/os/src/server/nic_router/domain.cc index bfbaf51f63..868bebc92e 100644 --- a/repos/os/src/server/nic_router/domain.cc +++ b/repos/os/src/server/nic_router/domain.cc @@ -49,7 +49,7 @@ void Domain::_log_ip_config() const } -bool Domain::is_ready() const +bool Domain::ready() const { if (_dhcp_server.valid()) { if (_dhcp_server().has_invalid_remote_dns_cfg()) { @@ -62,9 +62,9 @@ bool Domain::is_ready() const void Domain::update_ready_state() { - bool const ready { is_ready() }; + bool const rdy { ready() }; _interfaces.for_each([&] (Interface &interface) { - interface.handle_domain_ready_state(ready); + interface.handle_domain_ready_state(rdy); }); } diff --git a/repos/os/src/server/nic_router/domain.h b/repos/os/src/server/nic_router/domain.h index 314b30299f..ac521eeca7 100644 --- a/repos/os/src/server/nic_router/domain.h +++ b/repos/os/src/server/nic_router/domain.h @@ -223,7 +223,7 @@ class Net::Domain : public Domain_base, void add_dropped_fragm_ipv4(unsigned long dropped_fragm_ipv4); - bool is_ready() const; + bool ready() const; void update_ready_state(); diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index 072e294ea0..f22a4c1df3 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -461,7 +461,7 @@ void Interface::handle_domain_ready_state(bool state) void Interface::_refetch_domain_ready_state() { if (_domain.valid()) { - handle_domain_ready_state(_domain().is_ready()); + handle_domain_ready_state(_domain().ready()); } else { handle_domain_ready_state(false); } From 88cddc35dd6289dcfaccfd302e34cfe6c988fa08 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Fri, 16 Sep 2022 11:26:52 +0200 Subject: [PATCH 255/354] nic_router: use the dictionary data structure This commit gets rid of the router-local wrapper of Genode's AVL string tree and replaces it with Genode's new Dictionary structure. The Dictionary is now used for managing domains and NIC clients. Due to this change, the formerly necessary helper classes Domain_base and Nic_client_base could be removed as well. Ref #4610 --- .../src/server/nic_router/avl_string_tree.h | 140 ------------------ .../os/src/server/nic_router/configuration.cc | 74 +++++---- .../os/src/server/nic_router/configuration.h | 9 +- repos/os/src/server/nic_router/dhcp_server.cc | 4 +- repos/os/src/server/nic_router/dhcp_server.h | 6 +- repos/os/src/server/nic_router/dictionary.h | 55 +++++++ repos/os/src/server/nic_router/domain.cc | 33 ++--- repos/os/src/server/nic_router/domain.h | 50 +++---- .../os/src/server/nic_router/forward_rule.cc | 2 +- repos/os/src/server/nic_router/forward_rule.h | 4 +- repos/os/src/server/nic_router/interface.cc | 30 ++-- repos/os/src/server/nic_router/ip_rule.cc | 2 +- repos/os/src/server/nic_router/ip_rule.h | 4 +- repos/os/src/server/nic_router/nat_rule.cc | 2 +- repos/os/src/server/nic_router/nat_rule.h | 4 +- repos/os/src/server/nic_router/nic_client.cc | 55 +++---- repos/os/src/server/nic_router/nic_client.h | 68 +++------ repos/os/src/server/nic_router/permit_rule.cc | 4 +- repos/os/src/server/nic_router/permit_rule.h | 6 +- repos/os/src/server/nic_router/report.cc | 2 +- repos/os/src/server/nic_router/report.h | 6 +- .../src/server/nic_router/transport_rule.cc | 4 +- .../os/src/server/nic_router/transport_rule.h | 4 +- 23 files changed, 218 insertions(+), 350 deletions(-) delete mode 100644 repos/os/src/server/nic_router/avl_string_tree.h create mode 100644 repos/os/src/server/nic_router/dictionary.h diff --git a/repos/os/src/server/nic_router/avl_string_tree.h b/repos/os/src/server/nic_router/avl_string_tree.h deleted file mode 100644 index eb20010532..0000000000 --- a/repos/os/src/server/nic_router/avl_string_tree.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * \brief AVL tree of strings with additional functions needed by NIC router - * \author Martin Stein - * \date 2016-08-19 - */ - -/* - * Copyright (C) 2016-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _AVL_STRING_TREE_H_ -#define _AVL_STRING_TREE_H_ - -/* local includes */ -#include - -/* Genode includes */ -#include -#include - -namespace Net { template class Avl_string_tree; } - - -template -class Net::Avl_string_tree : public Genode::Avl_tree -{ - private: - - using Node = Genode::Avl_string_base; - using Tree = Genode::Avl_tree; - - template - - void _node_find_by_name(Node &node, - char const *name_ptr, - HANDLE_MATCH_FN && handle_match, - HANDLE_NO_MATCH_FN && handle_no_match) - { - int const name_diff { - Genode::strcmp(name_ptr, node.name()) }; - - if (name_diff != 0) { - - Node *child_ptr { node.child(name_diff > 0) }; - - if (child_ptr != nullptr) { - - _node_find_by_name( - *child_ptr, name_ptr, handle_match, handle_no_match); - - } else { - - handle_no_match(); - } - } else { - - handle_match(*static_cast(&node)); - } - } - - template - - void _find_by_name(char const *name_ptr, - HANDLE_MATCH_FN && handle_match, - HANDLE_NO_MATCH_FN && handle_no_match) - { - if (first() != nullptr) { - - _node_find_by_name( - *first(), name_ptr, handle_match, handle_no_match); - - } else { - - handle_no_match(); - } - } - - public: - - template - - void find_by_name(NAME const &name, - HANDLE_MATCH_FN && handle_match, - HANDLE_NO_MATCH_FN && handle_no_match) - { - _find_by_name(name.string(), handle_match, handle_no_match); - } - - template - void for_each(FUNCTOR && functor) const { - Tree::for_each([&] (Node const &node) { - - /* - * FIXME This constness cast sneaked in with an older - * implementation where it was done implicitely and - * therefore not that obvious. Now the router relies on - * it and we should either get rid of the dependency to - * const Avl_tree::for_each or of the the need for - * mutable objects in Avl_string_tree::for_each. - */ - functor(*const_cast(static_cast(&node))); - }); - } - - void destroy_each(Genode::Deallocator &dealloc) - { - while (Node *node = first()) { - Tree::remove(node); - Genode::destroy(dealloc, static_cast(node)); - } - } - - template - - void insert(OBJECT &obj, - HANDLE_NAME_NOT_UNIQUE_FN && handle_name_not_unique) - { - _find_by_name( - static_cast(&obj)->name(), - [&] /* handle_match */ (OBJECT &other_obj) - { - handle_name_not_unique(other_obj); - }, - [&] /* handle_no_match */ () { Tree::insert(&obj); } - ); - } - - void remove(OBJECT &object) { Tree::remove(&object); } -}; - - - -#endif /* _AVL_STRING_TREE_H_ */ diff --git a/repos/os/src/server/nic_router/configuration.cc b/repos/os/src/server/nic_router/configuration.cc index 020782a2cc..4549bd8877 100644 --- a/repos/os/src/server/nic_router/configuration.cc +++ b/repos/os/src/server/nic_router/configuration.cc @@ -50,24 +50,12 @@ Configuration::Configuration(Xml_node const node, { } -void Configuration::_invalid_nic_client(Nic_client &nic_client, - char const *reason) -{ - if (_verbose) { - log("[", nic_client.domain(), "] invalid NIC client: ", nic_client, " (", reason, ")"); } - - _nic_clients.remove(nic_client); - destroy(_alloc, &nic_client); -} - - void Configuration::_invalid_domain(Domain &domain, char const *reason) { if (_verbose) { log("[", domain, "] invalid domain (", reason, ") "); } - _domains.remove(domain); destroy(_alloc, &domain); } @@ -133,13 +121,27 @@ Configuration::Configuration(Env &env, /* do parts of domain initialization that do not lookup other domains */ node.for_each_sub_node("domain", [&] (Xml_node const node) { try { - Domain &domain = *new (_alloc) Domain(*this, node, _alloc); - _domains.insert( - domain, - [&] /* handle_name_not_unique */ (Domain &other_domain) + Domain_name const name { + node.attribute_value("name", Domain_name { }) }; + + _domains.with_element( + name, + [&] /* match_fn */ (Domain &other_domain) { - _invalid_domain(domain, "name not unique"); - _invalid_domain(other_domain, "name not unique"); + if (_verbose) { + + log("[", name, + "] invalid domain (name not unique) "); + + log("[", other_domain, + "] invalid domain (name not unique) "); + } + destroy(_alloc, &other_domain); + }, + [&] /* no_match_fn */ () + { + new (_alloc) Domain { + *this, node, name, _alloc, _domains }; } ); } @@ -165,7 +167,6 @@ Configuration::Configuration(Env &env, catch (Retry_without_domain exception) { /* destroy domain that became invalid during initialization */ - _domains.remove(exception.domain); destroy(_alloc, &exception.domain); /* deinitialize the remaining domains again */ @@ -203,24 +204,39 @@ Configuration::Configuration(Env &env, /* initialize NIC clients */ _node.for_each_sub_node("nic-client", [&] (Xml_node const node) { try { - Nic_client &nic_client = *new (_alloc) - Nic_client { node, alloc, old_config._nic_clients, env, timer, - interfaces, *this }; + Session_label const label { + node.attribute_value("label", Session_label::String { }) }; - _nic_clients.insert( - nic_client, - [&] /* handle_name_not_unique */ (Nic_client &other_nic_client) + Domain_name const domain { + node.attribute_value("domain", Domain_name { }) }; + + _nic_clients.with_element( + label, + [&] /* match */ (Nic_client &nic_client) { - _invalid_nic_client(nic_client, "label not unique"); - _invalid_nic_client(other_nic_client, "label not unique"); + if (_verbose) { + + log("[", domain, "] invalid NIC client: ", + label, " (label not unique)"); + + log("[", nic_client.domain(), "] invalid NIC client: ", + nic_client.label(), " (label not unique)"); + } + destroy(_alloc, &nic_client); + }, + [&] /* no_match */ () + { + new (_alloc) Nic_client { + label, domain, alloc, old_config._nic_clients, + _nic_clients, env, timer, interfaces, *this }; } ); } catch (Nic_client::Invalid) { } }); /* - * Destroy old NIC clients to ensure that NIC client interfaces that were not - * re-used are not re-attached to the new domains. + * Destroy old NIC clients to ensure that NIC client interfaces that were + * not re-used are not re-attached to the new domains. */ old_config._nic_clients.destroy_each(_alloc); } diff --git a/repos/os/src/server/nic_router/configuration.h b/repos/os/src/server/nic_router/configuration.h index 2f80214cbf..a6c4fca841 100644 --- a/repos/os/src/server/nic_router/configuration.h +++ b/repos/os/src/server/nic_router/configuration.h @@ -51,16 +51,13 @@ class Net::Configuration Genode::Microseconds const _tcp_max_segm_lifetime; Pointer _report { }; Pointer _reporter { }; - Domain_tree _domains { }; - Nic_client_tree _nic_clients { }; + Domain_dict _domains { }; + Nic_client_dict _nic_clients { }; Genode::Xml_node const _node; Icmp_packet::Code _init_icmp_type_3_code_on_fragm_ipv4(Genode::Xml_node const &node) const; - void _invalid_nic_client(Nic_client &nic_client, - char const *reason); - void _invalid_domain(Domain &domain, char const *reason); @@ -100,7 +97,7 @@ class Net::Configuration Genode::Microseconds udp_idle_timeout() const { return _udp_idle_timeout; } Genode::Microseconds tcp_idle_timeout() const { return _tcp_idle_timeout; } Genode::Microseconds tcp_max_segm_lifetime() const { return _tcp_max_segm_lifetime; } - Domain_tree &domains() { return _domains; } + Domain_dict &domains() { return _domains; } Report &report() { return _report(); } Genode::Xml_node node() const { return _node; } }; diff --git a/repos/os/src/server/nic_router/dhcp_server.cc b/repos/os/src/server/nic_router/dhcp_server.cc index a0251021bc..756c22cb0e 100644 --- a/repos/os/src/server/nic_router/dhcp_server.cc +++ b/repos/os/src/server/nic_router/dhcp_server.cc @@ -95,7 +95,7 @@ Dhcp_server::Dhcp_server(Xml_node const node, Domain &domain, Allocator &alloc, Ipv4_address_prefix const &interface, - Domain_tree &domains) + Domain_dict &domains) : Dhcp_server_base(node, domain, alloc), _dns_config_from(_init_dns_config_from(node, domains)), @@ -206,7 +206,7 @@ void Dhcp_server::free_ip(Domain const &domain, Pointer Dhcp_server::_init_dns_config_from(Genode::Xml_node const node, - Domain_tree &domains) + Domain_dict &domains) { if (!_dns_servers.empty() || _dns_domain_name.valid()) { diff --git a/repos/os/src/server/nic_router/dhcp_server.h b/repos/os/src/server/nic_router/dhcp_server.h index 28b0818db1..6022272797 100644 --- a/repos/os/src/server/nic_router/dhcp_server.h +++ b/repos/os/src/server/nic_router/dhcp_server.h @@ -40,7 +40,7 @@ namespace Net { /* forward declarations */ class Interface; class Domain; - class Domain_tree; + class Domain_dict; } @@ -81,7 +81,7 @@ class Net::Dhcp_server : private Genode::Noncopyable, Genode::Microseconds _init_ip_lease_time(Genode::Xml_node const node); Pointer _init_dns_config_from(Genode::Xml_node const node, - Domain_tree &domains); + Domain_dict &domains); Ipv4_config const &_resolve_dns_config_from() const; @@ -96,7 +96,7 @@ class Net::Dhcp_server : private Genode::Noncopyable, Domain &domain, Genode::Allocator &alloc, Ipv4_address_prefix const &interface, - Domain_tree &domains); + Domain_dict &domains); Ipv4_address alloc_ip(); diff --git a/repos/os/src/server/nic_router/dictionary.h b/repos/os/src/server/nic_router/dictionary.h new file mode 100644 index 0000000000..635c5f88e8 --- /dev/null +++ b/repos/os/src/server/nic_router/dictionary.h @@ -0,0 +1,55 @@ +/* + * \brief Local convenience wrapper for the Genode dictionary + * \author Martin Stein + * \date 2022-09-16 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#ifndef _DICTIONARY_H_ +#define _DICTIONARY_H_ + +/* Genode includes */ +#include +#include + +namespace Net { template class Dictionary; } + + +template + +class Net::Dictionary : public Genode::Dictionary +{ + private: + + using Dict = Genode::Dictionary; + + public: + + template + void for_each(FUNCTION_T const &function) const + { + Dict::for_each( + [&] (OBJECT_T const &obj) + { + function(*const_cast(&obj)); + } + ); + } + + void destroy_each(Genode::Deallocator &dealloc) + { + auto destroy_element { [&] (OBJECT_T &obj) { + destroy(dealloc, &obj); + } }; + while (this->with_any_element(destroy_element)) { } + } +}; + +#endif /* _DICTIONARY_H_ */ diff --git a/repos/os/src/server/nic_router/domain.cc b/repos/os/src/server/nic_router/domain.cc index 868bebc92e..25b5001c90 100644 --- a/repos/os/src/server/nic_router/domain.cc +++ b/repos/os/src/server/nic_router/domain.cc @@ -26,16 +26,6 @@ using namespace Net; using namespace Genode; -/***************** - ** Domain_base ** - *****************/ - -Domain_base::Domain_base(Xml_node const node) -: - _name(node.attribute_value("name", Domain_name())) -{ } - - /************ ** Domain ** ************/ @@ -148,7 +138,7 @@ void Domain::try_reuse_ip_config(Domain const &domain) void Domain::_read_forward_rules(Cstring const &protocol, - Domain_tree &domains, + Domain_dict &domains, Xml_node const node, char const *type, Forward_rule_tree &rules) @@ -174,7 +164,7 @@ void Domain::_invalid(char const *reason) const void Domain::_read_transport_rules(Cstring const &protocol, - Domain_tree &domains, + Domain_dict &domains, Xml_node const node, char const *type, Transport_rule_list &rules) @@ -193,17 +183,20 @@ void Domain::_read_transport_rules(Cstring const &protocol, void Domain::print(Output &output) const { - if (_name == Domain_name()) { + if (name() == Domain_name()) { Genode::print(output, "?"); } else { - Genode::print(output, _name); } + Genode::print(output, name()); } } -Domain::Domain(Configuration &config, Xml_node const node, Allocator &alloc) +Domain::Domain(Configuration &config, + Xml_node const &node, + Domain_name const &name, + Allocator &alloc, + Domain_dict &domains) : - Domain_base { node }, - Avl_string_base { Domain_base::_name.string() }, + Domain_dict::Element { domains, name }, _config { config }, _node { node }, _alloc { alloc }, @@ -222,7 +215,7 @@ Domain::Domain(Configuration &config, Xml_node const node, Allocator &alloc) { _log_ip_config(); - if (_name == Domain_name()) { + if (Domain::name() == Domain_name()) { _invalid("missing name attribute"); } if (_config.verbose_domain_state()) { @@ -257,7 +250,7 @@ Dhcp_server &Domain::dhcp_server() } -void Domain::init(Domain_tree &domains) +void Domain::init(Domain_dict &domains) { /* read DHCP server configuration */ try { @@ -404,7 +397,7 @@ void Domain::report(Xml_generator &xml) { xml.node("domain", [&] () { bool empty = true; - xml.attribute("name", _name); + xml.attribute("name", name()); if (_config.report().bytes()) { xml.attribute("rx_bytes", _tx_bytes); xml.attribute("tx_bytes", _rx_bytes); diff --git a/repos/os/src/server/nic_router/domain.h b/repos/os/src/server/nic_router/domain.h index ac521eeca7..fb8ce11403 100644 --- a/repos/os/src/server/nic_router/domain.h +++ b/repos/os/src/server/nic_router/domain.h @@ -25,7 +25,7 @@ #include #include #include -#include +#include /* Genode includes */ #include @@ -40,10 +40,9 @@ namespace Net { class Interface; class Configuration; - class Domain_base; class Domain; using Domain_name = Genode::String<160>; - class Domain_tree; + class Domain_dict; class Domain_link_stats; class Domain_object_stats; } @@ -71,18 +70,18 @@ struct Net::Domain_link_stats : Domain_object_stats }; -class Net::Domain_tree : public Avl_string_tree +class Net::Domain_dict : public Dictionary { public: template - Domain &deprecated_find_by_name(Domain_name const &name) + Domain &deprecated_find_by_name(Domain_name const &domain_name) { Domain *dom_ptr { nullptr }; - find_by_name( - name, - [&] /* handle_match */ (Domain &dom) { dom_ptr = &dom; }, - [&] /* handle_no_match */ () { throw NO_MATCH_EXCEPTION { }; } + with_element( + domain_name, + [&] /* match_fn */ (Domain &dom) { dom_ptr = &dom; }, + [&] /* no_match_fn */ () { throw NO_MATCH_EXCEPTION { }; } ); return *dom_ptr; } @@ -90,27 +89,16 @@ class Net::Domain_tree : public Avl_string_tree template Domain &deprecated_find_by_domain_attr(Genode::Xml_node const &node) { - Domain_name const name { + Domain_name const domain_name { node.attribute_value("domain", Domain_name { }) }; - return deprecated_find_by_name(name); + return deprecated_find_by_name(domain_name); } }; -class Net::Domain_base -{ - protected: - - Domain_name const _name; - - Domain_base(Genode::Xml_node const node); -}; - - -class Net::Domain : public Domain_base, - public List::Element, - public Genode::Avl_string_base +class Net::Domain : public List::Element, + public Domain_dict::Element { private: @@ -154,13 +142,13 @@ class Net::Domain : public Domain_base, unsigned long _dropped_fragm_ipv4 { 0 }; void _read_forward_rules(Genode::Cstring const &protocol, - Domain_tree &domains, + Domain_dict &domains, Genode::Xml_node const node, char const *type, Forward_rule_tree &rules); void _read_transport_rules(Genode::Cstring const &protocol, - Domain_tree &domains, + Domain_dict &domains, Genode::Xml_node const node, char const *type, Transport_rule_list &rules); @@ -190,12 +178,14 @@ class Net::Domain : public Domain_base, struct No_next_hop : Genode::Exception { }; Domain(Configuration &config, - Genode::Xml_node const node, - Genode::Allocator &alloc); + Genode::Xml_node const &node, + Domain_name const &name, + Genode::Allocator &alloc, + Domain_dict &domain_dict); ~Domain(); - void init(Domain_tree &domains); + void init(Domain_dict &domains); void deinit(); @@ -247,7 +237,7 @@ class Net::Domain : public Domain_base, Genode::Session_label const &label() const { return _label; } Ipv4_config const &ip_config() const { return *_ip_config; } List &ip_config_dependents() { return _ip_config_dependents; } - Domain_name const &name() const { return _name; } + Domain_name const &name() const { return Domain_dict::Element::name; } Ip_rule_list &ip_rules() { return _ip_rules; } Forward_rule_tree &tcp_forward_rules() { return _tcp_forward_rules; } Forward_rule_tree &udp_forward_rules() { return _udp_forward_rules; } diff --git a/repos/os/src/server/nic_router/forward_rule.cc b/repos/os/src/server/nic_router/forward_rule.cc index eb6c77713f..24bfc8d751 100644 --- a/repos/os/src/server/nic_router/forward_rule.cc +++ b/repos/os/src/server/nic_router/forward_rule.cc @@ -33,7 +33,7 @@ void Forward_rule::print(Output &output) const } -Forward_rule::Forward_rule(Domain_tree &domains, Xml_node const node) +Forward_rule::Forward_rule(Domain_dict &domains, Xml_node const node) : _port { node.attribute_value("port", Port(0)) }, _to_ip { node.attribute_value("to", Ipv4_address()) }, diff --git a/repos/os/src/server/nic_router/forward_rule.h b/repos/os/src/server/nic_router/forward_rule.h index 3552ab8ef1..fde85bdb19 100644 --- a/repos/os/src/server/nic_router/forward_rule.h +++ b/repos/os/src/server/nic_router/forward_rule.h @@ -27,7 +27,7 @@ namespace Genode { class Xml_node; } namespace Net { class Domain; - class Domain_tree; + class Domain_dict; class Forward_rule; class Forward_rule_tree; @@ -49,7 +49,7 @@ class Net::Forward_rule : public Genode::Avl_node struct Invalid : Genode::Exception { }; - Forward_rule(Domain_tree &domains, Genode::Xml_node const node); + Forward_rule(Domain_dict &domains, Genode::Xml_node const node); template diff --git a/repos/os/src/server/nic_router/interface.cc b/repos/os/src/server/nic_router/interface.cc index f22a4c1df3..7ac1f6989c 100644 --- a/repos/os/src/server/nic_router/interface.cc +++ b/repos/os/src/server/nic_router/interface.cc @@ -386,9 +386,9 @@ void Interface::_update_domain_object(Domain &new_domain) { void Interface::attach_to_domain() { - _config().domains().find_by_name( + _config().domains().with_element( _policy.determine_domain_name(), - [&] /* handle_match */ (Domain &domain) + [&] /* match_fn */ (Domain &domain) { _attach_to_domain_raw(domain); @@ -398,7 +398,7 @@ void Interface::attach_to_domain() } attach_to_domain_finish(); }, - [&] /* handle_no_match */ () { } + [&] /* no_match_fn */ () { } ); } @@ -2158,9 +2158,9 @@ void Interface::_update_own_arp_waiters(Domain &domain) { Arp_waiter &arp_waiter { *le.object() }; bool dismiss_arp_waiter { true }; - _config().domains().find_by_name( + _config().domains().with_element( arp_waiter.dst().name(), - [&] /* handle_match */ (Domain &dst) + [&] /* match_fn */ (Domain &dst) { /* dismiss ARP waiter if IP config of target domain changed */ if (dst.ip_config() != arp_waiter.dst().ip_config()) { @@ -2173,7 +2173,7 @@ void Interface::_update_own_arp_waiters(Domain &domain) } dismiss_arp_waiter = false; }, - [&] /* handle_no_match */ () + [&] /* no_match_fn */ () { /* dismiss ARP waiter as the target domain disappeared */ } @@ -2207,13 +2207,13 @@ void Interface::handle_config_1(Configuration &config) return; } /* interface stays with its domain, so, try to reuse IP config */ - config.domains().find_by_name( + config.domains().with_element( new_domain_name, - [&] /* handle_match */ (Domain &new_domain) + [&] /* match_fn */ (Domain &new_domain) { new_domain.try_reuse_ip_config(old_domain); }, - [&] /* handle_no_match */ () { } + [&] /* no_match_fn */ () { } ); } catch (Pointer::Invalid) { } @@ -2246,9 +2246,9 @@ void Interface::handle_config_2() Domain_name const &new_domain_name = _policy.determine_domain_name(); try { Domain &old_domain = domain(); - _config().domains().find_by_name( + _config().domains().with_element( new_domain_name, - [&] /* handle_match */ (Domain &new_domain) + [&] /* match_fn */ (Domain &new_domain) { /* if the domains differ, detach completely from the domain */ if (old_domain.name() != new_domain_name) { @@ -2282,7 +2282,7 @@ void Interface::handle_config_2() /* remember that the interface stays attached to the same domain */ _update_domain.construct(old_domain, new_domain); }, - [&] /* handle_no_match */ () + [&] /* no_match_fn */ () { /* the interface no longer has a domain */ _detach_from_domain(); @@ -2297,9 +2297,9 @@ void Interface::handle_config_2() catch (Pointer::Invalid) { /* the interface had no domain but now it may get one */ - _config().domains().find_by_name( + _config().domains().with_element( new_domain_name, - [&] /* handle_match */ (Domain &new_domain) + [&] /* match_fn */ (Domain &new_domain) { _attach_to_domain_raw(new_domain); @@ -2308,7 +2308,7 @@ void Interface::handle_config_2() _dhcp_client.construct(_timer, *this); } }, - [&] /* handle_no_match */ () { } + [&] /* no_match_fn */ () { } ); } } diff --git a/repos/os/src/server/nic_router/ip_rule.cc b/repos/os/src/server/nic_router/ip_rule.cc index efcaea257a..b808afee32 100644 --- a/repos/os/src/server/nic_router/ip_rule.cc +++ b/repos/os/src/server/nic_router/ip_rule.cc @@ -19,7 +19,7 @@ using namespace Net; using namespace Genode; -Ip_rule::Ip_rule(Domain_tree &domains, Xml_node const node) +Ip_rule::Ip_rule(Domain_dict &domains, Xml_node const node) : Direct_rule { node }, _domain { domains.deprecated_find_by_domain_attr(node) } diff --git a/repos/os/src/server/nic_router/ip_rule.h b/repos/os/src/server/nic_router/ip_rule.h index 15258dcb76..8340231155 100644 --- a/repos/os/src/server/nic_router/ip_rule.h +++ b/repos/os/src/server/nic_router/ip_rule.h @@ -20,7 +20,7 @@ namespace Net { class Domain; - class Domain_tree; + class Domain_dict; class Ip_rule; struct Ip_rule_list : Direct_rule_list { }; @@ -35,7 +35,7 @@ class Net::Ip_rule : public Direct_rule public: - Ip_rule(Domain_tree &domains, Genode::Xml_node const node); + Ip_rule(Domain_dict &domains, Genode::Xml_node const node); /*************** diff --git a/repos/os/src/server/nic_router/nat_rule.cc b/repos/os/src/server/nic_router/nat_rule.cc index 501a150478..b7a3ff445b 100644 --- a/repos/os/src/server/nic_router/nat_rule.cc +++ b/repos/os/src/server/nic_router/nat_rule.cc @@ -32,7 +32,7 @@ bool Nat_rule::higher(Nat_rule *rule) } -Nat_rule::Nat_rule(Domain_tree &domains, +Nat_rule::Nat_rule(Domain_dict &domains, Port_allocator &tcp_port_alloc, Port_allocator &udp_port_alloc, Port_allocator &icmp_port_alloc, diff --git a/repos/os/src/server/nic_router/nat_rule.h b/repos/os/src/server/nic_router/nat_rule.h index ffbacf1ef5..be1be378f5 100644 --- a/repos/os/src/server/nic_router/nat_rule.h +++ b/repos/os/src/server/nic_router/nat_rule.h @@ -25,7 +25,7 @@ namespace Net { class Domain; - class Domain_tree; + class Domain_dict; class Port_allocator; class Nat_rule_base; @@ -47,7 +47,7 @@ class Net::Nat_rule : public Genode::Avl_node struct Invalid : Genode::Exception { }; - Nat_rule(Domain_tree &domains, + Nat_rule(Domain_dict &domains, Port_allocator &tcp_port_alloc, Port_allocator &udp_port_alloc, Port_allocator &icmp_port_alloc, diff --git a/repos/os/src/server/nic_router/nic_client.cc b/repos/os/src/server/nic_router/nic_client.cc index 15829078d3..e289318cc1 100644 --- a/repos/os/src/server/nic_router/nic_client.cc +++ b/repos/os/src/server/nic_router/nic_client.cc @@ -22,17 +22,6 @@ using namespace Net; using namespace Genode; -/********************* - ** Nic_client_base ** - *********************/ - -Net::Nic_client_base::Nic_client_base(Xml_node const &node) -: - _label { node.attribute_value("label", Session_label::String()) }, - _domain { node.attribute_value("domain", Domain_name()) } -{ } - - /**************** ** Nic_client ** ****************/ @@ -40,26 +29,29 @@ Net::Nic_client_base::Nic_client_base(Xml_node const &node) void Nic_client::_invalid(char const *reason) const { if (_config.verbose()) { - log("[", domain(), "] invalid NIC client: ", *this, " (", reason, ")"); } - + log("[", domain(), "] invalid NIC client: ", label(), + " (", reason, ")"); + } throw Invalid(); } -Net::Nic_client::Nic_client(Xml_node const &node, - Allocator &alloc, - Nic_client_tree &old_nic_clients, - Env &env, - Cached_timer &timer, - Interface_list &interfaces, - Configuration &config) +Net::Nic_client::Nic_client(Session_label const &label_arg, + Domain_name const &domain_arg, + Allocator &alloc, + Nic_client_dict &old_nic_clients, + Nic_client_dict &new_nic_clients, + Env &env, + Cached_timer &timer, + Interface_list &interfaces, + Configuration &config) : - Nic_client_base { node }, - Avl_string_base { label().string() }, - _alloc { alloc }, - _config { config } + Nic_client_dict::Element { new_nic_clients, label_arg }, + _alloc { alloc }, + _config { config }, + _domain { domain_arg } { - old_nic_clients.find_by_name( + old_nic_clients.with_element( label(), [&] /* handle_match */ (Nic_client &old_nic_client) { @@ -73,7 +65,7 @@ Net::Nic_client::Nic_client(Xml_node const &node, { /* create a new interface */ if (config.verbose()) { - log("[", domain(), "] create NIC client: ", *this); } + log("[", domain(), "] create NIC client: ", label()); } try { _interface = *new (_alloc) @@ -95,7 +87,7 @@ Net::Nic_client::~Nic_client() try { Nic_client_interface &interface = _interface(); if (_config.verbose()) { - log("[", domain(), "] destroy NIC client: ", *this); } + log("[", domain(), "] destroy NIC client: ", label()); } destroy(_alloc, &interface); } @@ -103,15 +95,6 @@ Net::Nic_client::~Nic_client() } -void Net::Nic_client::print(Output &output) const -{ - if (label() == Session_label()) { - Genode::print(output, "?"); } - else { - Genode::print(output, label()); } -} - - /******************************* ** Nic_client_interface_base ** *******************************/ diff --git a/repos/os/src/server/nic_router/nic_client.h b/repos/os/src/server/nic_router/nic_client.h index 3615c1c247..6e7b650315 100644 --- a/repos/os/src/server/nic_router/nic_client.h +++ b/repos/os/src/server/nic_router/nic_client.h @@ -19,60 +19,31 @@ #include /* local includes */ -#include +#include #include #include namespace Net { using Domain_name = Genode::String<160>; - class Nic_client_base; class Nic_client; - class Nic_client_tree; + using Nic_client_dict = Dictionary; class Nic_client_interface_base; class Nic_client_interface; } -class Net::Nic_client_tree -: - public Avl_string_tree -{ }; - - -class Net::Nic_client_base +class Net::Nic_client : private Nic_client_dict::Element { - private: - - Genode::Session_label const _label; - Domain_name const _domain; - - public: - - Nic_client_base(Genode::Xml_node const &node); - - virtual ~Nic_client_base() { } - - - /************** - ** Acessors ** - **************/ - - Genode::Session_label const &label() const { return _label; } - Domain_name const &domain() const { return _domain; } -}; - - -class Net::Nic_client : public Nic_client_base, - private Genode::Avl_string_base -{ - friend class Avl_string_tree; - friend class Genode::List; + friend class Genode::Avl_tree; + friend class Genode::Avl_node; + friend class Genode::Dictionary; private: Genode::Allocator &_alloc; Configuration const &_config; + Domain_name const _domain; Pointer _interface { }; void _invalid(char const *reason) const; @@ -81,22 +52,25 @@ class Net::Nic_client : public Nic_client_base, struct Invalid : Genode::Exception { }; - Nic_client(Genode::Xml_node const &node, - Genode::Allocator &alloc, - Nic_client_tree &old_nic_clients, - Genode::Env &env, - Cached_timer &timer, - Interface_list &interfaces, - Configuration &config); + Nic_client(Genode::Session_label const &label_arg, + Domain_name const &domain_arg, + Genode::Allocator &alloc, + Nic_client_dict &old_nic_clients, + Nic_client_dict &new_nic_clients, + Genode::Env &env, + Cached_timer &timer, + Interface_list &interfaces, + Configuration &config); ~Nic_client(); - /********* - ** log ** - *********/ + /************** + ** Acessors ** + **************/ - void print(Genode::Output &output) const; + Domain_name const &domain() const { return _domain; } + Genode::Session_label const &label() const { return Nic_client_dict::Element::name; } }; diff --git a/repos/os/src/server/nic_router/permit_rule.cc b/repos/os/src/server/nic_router/permit_rule.cc index acf5edc0cb..fe5a73b830 100644 --- a/repos/os/src/server/nic_router/permit_rule.cc +++ b/repos/os/src/server/nic_router/permit_rule.cc @@ -32,7 +32,7 @@ void Permit_any_rule::print(Output &output) const } -Permit_any_rule::Permit_any_rule(Domain_tree &domains, Xml_node const node) +Permit_any_rule::Permit_any_rule(Domain_dict &domains, Xml_node const node) : Permit_rule { domains.deprecated_find_by_domain_attr(node) } { } @@ -55,7 +55,7 @@ void Permit_single_rule::print(Output &output) const } -Permit_single_rule::Permit_single_rule(Domain_tree &domains, +Permit_single_rule::Permit_single_rule(Domain_dict &domains, Xml_node const node) : Permit_rule { domains.deprecated_find_by_domain_attr(node) }, diff --git a/repos/os/src/server/nic_router/permit_rule.h b/repos/os/src/server/nic_router/permit_rule.h index aaeee27948..db2cbb49a0 100644 --- a/repos/os/src/server/nic_router/permit_rule.h +++ b/repos/os/src/server/nic_router/permit_rule.h @@ -31,7 +31,7 @@ namespace Net { class Interface; class Domain; - class Domain_tree; + class Domain_dict; class Permit_rule; class Permit_any_rule; @@ -74,7 +74,7 @@ struct Net::Permit_any_rule : Permit_rule struct Invalid : Genode::Exception { }; - Permit_any_rule(Domain_tree &domains, Genode::Xml_node const node); + Permit_any_rule(Domain_dict &domains, Genode::Xml_node const node); /********* @@ -101,7 +101,7 @@ class Net::Permit_single_rule : public Permit_rule, struct Invalid : Genode::Exception { }; - Permit_single_rule(Domain_tree &domains, + Permit_single_rule(Domain_dict &domains, Genode::Xml_node const node); template _timeout; Genode::Signal_transmitter _signal_transmitter; @@ -70,7 +70,7 @@ class Net::Report Report(bool const &verbose, Genode::Xml_node const node, Cached_timer &timer, - Domain_tree &domains, + Domain_dict &domains, Quota const &shared_quota, Genode::Pd_session &pd, Genode::Reporter &reporter, diff --git a/repos/os/src/server/nic_router/transport_rule.cc b/repos/os/src/server/nic_router/transport_rule.cc index c61c7c4dad..70721cf01a 100644 --- a/repos/os/src/server/nic_router/transport_rule.cc +++ b/repos/os/src/server/nic_router/transport_rule.cc @@ -25,7 +25,7 @@ using namespace Genode; Pointer -Transport_rule::_read_permit_any_rule(Domain_tree &domains, +Transport_rule::_read_permit_any_rule(Domain_dict &domains, Xml_node const node, Allocator &alloc) { @@ -39,7 +39,7 @@ Transport_rule::_read_permit_any_rule(Domain_tree &domains, } -Transport_rule::Transport_rule(Domain_tree &domains, +Transport_rule::Transport_rule(Domain_dict &domains, Xml_node const node, Allocator &alloc, Cstring const &protocol, diff --git a/repos/os/src/server/nic_router/transport_rule.h b/repos/os/src/server/nic_router/transport_rule.h index e1fae0e646..abc34b8ac2 100644 --- a/repos/os/src/server/nic_router/transport_rule.h +++ b/repos/os/src/server/nic_router/transport_rule.h @@ -38,13 +38,13 @@ class Net::Transport_rule : public Direct_rule Permit_single_rule_tree _permit_single_rules { }; static Pointer - _read_permit_any_rule(Domain_tree &domains, + _read_permit_any_rule(Domain_dict &domains, Genode::Xml_node const node, Genode::Allocator &alloc); public: - Transport_rule(Domain_tree &domains, + Transport_rule(Domain_dict &domains, Genode::Xml_node const node, Genode::Allocator &alloc, Genode::Cstring const &protocol, From 6c6ce30389af3ff1ef4958991aa6f89a7b53f192 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 21 Sep 2022 14:45:39 +0200 Subject: [PATCH 256/354] depot_autopilot: disable unsupported tests on riscv --- repos/gems/run/depot_autopilot.run | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repos/gems/run/depot_autopilot.run b/repos/gems/run/depot_autopilot.run index 0ad2dba1c6..d5a10a50a3 100644 --- a/repos/gems/run/depot_autopilot.run +++ b/repos/gems/run/depot_autopilot.run @@ -771,10 +771,12 @@ if {[have_spec riscv]} { set skip_test(gcov) true set skip_test(test-libc_connect_lxip) true set skip_test(test-libc_connect_vfs_server_lxip) true + set skip_test(test-rm_fault_no_nox) true set skip_test(test-spark) true set skip_test(test-spark_exception) true set skip_test(test-spark_secondary_stack) true set skip_test(test-tcp_bulk_lxip) true + set skip_test(test-trace_logger) true set skip_test(test-xml_generator) true } From 0231ee4ad30b3ffd9f9681d61c0e0490b01a2d5d Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 20 Sep 2022 14:13:01 +0200 Subject: [PATCH 257/354] hw: don't halt kernel due to unknown cpu exception Fix genodelabs/genode#4617 --- repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc index 73cb72bb34..17e431043c 100644 --- a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc @@ -55,6 +55,16 @@ void Thread::exception(Cpu & cpu) " ISS=", Cpu::Esr::Iss::get(esr), " ip=", (void*)regs->ip); }; + + /* + * If the machine exception is caused by a non-privileged + * component, mark it dead, and continue execution. + */ + if (regs->exception_type == Cpu::SYNC_LEVEL_EL0) { + Genode::raw("Will freeze thread ", *this); + _become_inactive(DEAD); + return; + } break; } default: From c8dd433e8b1facb482857245ef3d4d50e4def83b Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 21 Sep 2022 15:32:55 +0200 Subject: [PATCH 258/354] depot_autopilot: disable unsupported tests on foc/pbxa9 --- repos/gems/run/depot_autopilot.run | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/repos/gems/run/depot_autopilot.run b/repos/gems/run/depot_autopilot.run index d5a10a50a3..605d6f4e17 100644 --- a/repos/gems/run/depot_autopilot.run +++ b/repos/gems/run/depot_autopilot.run @@ -757,7 +757,7 @@ proc non_executable_supported { } { # set skip_test(test-fault_detection) [expr [have_spec pistachio] || [have_spec fiasco]] set skip_test(test-fs_packet) [expr ![interactive] && [have_include "power_on/qemu"]] -set skip_test(test-libc) [expr [have_spec sel4] || [have_board rpi] || [expr [have_board pbxa9] && [have_spec foc]] || [have_board imx53_qsb_tz]] +set skip_test(test-libc) [expr [have_spec sel4] || [have_board rpi] || [have_board imx53_qsb_tz]] set skip_test(test-lx_block) [expr ![have_board linux]] set skip_test(test-rm_fault) [expr [have_board linux] || ![non_executable_supported]] set skip_test(test-rm_fault_no_nox) [expr [have_board linux] || ![skip_test test-rm_fault]] @@ -767,6 +767,11 @@ set skip_test(test-spark_exception) [expr [have_spec arm]] set skip_test(test-tcp_bulk_lwip) [expr ![have_spec x86] && ![have_include "power_on/qemu"]] set skip_test(test-tcp_bulk_lxip) [expr ![have_spec x86] && ![have_include "power_on/qemu"]] +if {[have_spec foc]} { + set skip_test(test-entrypoint) [have_board pbxa9] + set skip_test(test-libc) [have_board pbxa9] + set skip_test(test-tcp_bulk_lxip) [have_board pbxa9] +} if {[have_spec riscv]} { set skip_test(gcov) true set skip_test(test-libc_connect_lxip) true From 0ead7eacfd063ea07979ba2cfa1f78ab949e8604 Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 21 Sep 2022 15:48:11 +0200 Subject: [PATCH 259/354] tool_chain_auto: disable on unsupported platforms all: imx53_qsb_tz, rpi foc: imx6q_sabrelite --- repos/ports/run/tool_chain_auto.run | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repos/ports/run/tool_chain_auto.run b/repos/ports/run/tool_chain_auto.run index 8d350d9985..47d55537ac 100644 --- a/repos/ports/run/tool_chain_auto.run +++ b/repos/ports/run/tool_chain_auto.run @@ -4,6 +4,8 @@ if {[get_cmd_switch --autopilot] && [have_include "power_on/qemu"]} { } if {[have_spec pistachio] || [have_spec sel4] || + [have_board imx53_qsb_tz] || [have_board rpi] || + [expr [have_spec foc] && [have_board imx6q_sabrelite]] || [expr [have_spec foc] && [have_board imx7d_sabre]] } { puts "Platform is unsupported." exit 0 From ef269ea2e0228983ff6b92485dfb8d06191b4c7e Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Wed, 21 Sep 2022 16:05:32 +0200 Subject: [PATCH 260/354] sd_card_bench: disable on rpi --- repos/os/run/sd_card_bench.run | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/repos/os/run/sd_card_bench.run b/repos/os/run/sd_card_bench.run index e3a2b9226c..32932a7d58 100644 --- a/repos/os/run/sd_card_bench.run +++ b/repos/os/run/sd_card_bench.run @@ -1,7 +1,8 @@ # # Check for platform support # -if {[get_cmd_switch --autopilot] && [have_board virt_qemu_riscv]} { +if {[get_cmd_switch --autopilot] && + [expr [have_board virt_qemu_riscv] || [have_board rpi]]} { puts "Autopilot mode is not supported on this platform." exit 0 } From da150dbb1c3d64764eec317384264c0644cb6674 Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Wed, 21 Sep 2022 17:57:34 +0200 Subject: [PATCH 261/354] Xml_node: allow whitespace around '=' characters Fixes #4167 --- repos/base/include/util/token.h | 2 +- repos/base/include/util/xml_node.h | 17 ++++++++--------- repos/base/recipes/pkg/test-xml_node/runtime | 3 +++ repos/base/src/test/xml_node/test.cc | 10 ++++++++++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/repos/base/include/util/token.h b/repos/base/include/util/token.h index e67d6e633d..2d60d00b94 100644 --- a/repos/base/include/util/token.h +++ b/repos/base/include/util/token.h @@ -110,7 +110,7 @@ class Genode::Token /** * Access single characters of token */ - char operator [] (int idx) + char operator [] (int idx) const { return ((idx >= 0) && ((unsigned)idx < _len)) ? _start[idx] : 0; } diff --git a/repos/base/include/util/xml_node.h b/repos/base/include/util/xml_node.h index 12b761c742..7dd4eefd0c 100644 --- a/repos/base/include/util/xml_node.h +++ b/repos/base/include/util/xml_node.h @@ -55,17 +55,16 @@ class Genode::Xml_attribute struct Tokens { Token name; - Token value; + Token equals { name .next().eat_whitespace() }; + Token value { equals.next().eat_whitespace() }; - Tokens(Token t) - : name(t.eat_whitespace()), value(name.next().next()) { }; + Tokens(Token t) : name(t.eat_whitespace()) { }; bool valid() const { - bool const tag_present = (name.type() == Token::IDENT); - bool const value_present = (name.next()[0] == '=' && - value.type() == Token::STRING); - return tag_present && value_present; + return (name.type() == Token::IDENT) + && (equals[0] == '=') + && (value.type() == Token::STRING); } } _tokens; @@ -103,7 +102,7 @@ class Genode::Xml_attribute /** * Return token following the attribute declaration */ - Token _next_token() const { return _tokens.name.next().next().next(); } + Token _next_token() const { return _tokens.value.next(); } public: @@ -355,7 +354,7 @@ class Genode::Xml_node } /** - * Return true if tag as at least one attribute + * Return true if tag has at least one attribute */ bool has_attribute() const { return Xml_attribute::_valid(_name.next()); } diff --git a/repos/base/recipes/pkg/test-xml_node/runtime b/repos/base/recipes/pkg/test-xml_node/runtime index 080a24193b..e526210460 100644 --- a/repos/base/recipes/pkg/test-xml_node/runtime +++ b/repos/base/recipes/pkg/test-xml_node/runtime @@ -99,6 +99,9 @@ [init -> test-xml_node] -- Test backslash as attribute value -- [init -> test-xml_node] attribute value: '\' [init -> test-xml_node] + [init -> test-xml_node] -- Test whitespace around assignment character -- + [init -> test-xml_node] attribute value: '123' + [init -> test-xml_node] [init -> test-xml_node] -- Test exporting decoded content from XML node -- [init -> test-xml_node] step 1 [init -> test-xml_node] step 2 diff --git a/repos/base/src/test/xml_node/test.cc b/repos/base/src/test/xml_node/test.cc index 494cdabd6b..4d26d66147 100644 --- a/repos/base/src/test/xml_node/test.cc +++ b/repos/base/src/test/xml_node/test.cc @@ -152,6 +152,10 @@ static const char *xml_test_comments = static const char *xml_test_backslash = ""; +/* withspace around attribute assignment character */ +static const char *xml_test_whitespace_assign = + ""; + /****************** ** Test program ** @@ -415,6 +419,12 @@ void Component::construct(Genode::Env &env) log("attribute value: '", node.attribute_value("attr", String<10>()), "'\n"); } + log("-- Test whitespace around assignment character --"); + { + Xml_node const node(xml_test_whitespace_assign); + log("attribute value: '", node.attribute_value("attr", String<10>()), "'\n"); + } + log("-- Test exporting decoded content from XML node --"); test_decoded_content<~0UL>(env, 1, xml_test_comments, 8, 119); test_decoded_content<119 >(env, 2, xml_test_comments, 8, 119); From c23b74e150de82a7b076322c14cdc3b1b2e0f940 Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Tue, 20 Sep 2022 12:23:46 +0200 Subject: [PATCH 262/354] base-hw: problems with timeout lib in src recipe This commit fixes two issues with the timeout lib and the base-hw src recipe: * Add source files of timeout lib to recipe content. The files weren't copied to the depot until now. However, the archive nonetheless built successfully because of the second issue that is described below. * Get rid of the usage of the BASE_DIR variable in the timeout lib. The BASE_DIR variable always resolves to the repos/base directory even when building in a depot. That said, the use of BASE_DIR in make-files that are not part of the build system itself must be avoided. Instead, REP_DIR, REP_INC_DIR, and $(call select_from_repositories, ...) should be used. Ref #4209 --- repos/base-hw/lib/mk/timeout-hw.mk | 4 ++-- repos/base-hw/recipes/src/base-hw_content.inc | 7 +++++++ repos/base-nova/recipes/api/base-nova/content.mk | 5 ++++- repos/base/lib/mk/timeout-arm.mk | 4 ++-- repos/base/lib/mk/timeout.mk | 2 +- 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/repos/base-hw/lib/mk/timeout-hw.mk b/repos/base-hw/lib/mk/timeout-hw.mk index aad9ffa127..eabca0ad00 100644 --- a/repos/base-hw/lib/mk/timeout-hw.mk +++ b/repos/base-hw/lib/mk/timeout-hw.mk @@ -4,6 +4,6 @@ SRC_CC += timer_connection_time.cc SRC_CC += hw/timer_connection_timestamp.cc SRC_CC += duration.cc -INC_DIR += $(BASE_DIR)/src/include +REP_INC_DIR += src/include -vpath % $(BASE_DIR)/src/lib/timeout +vpath % $(call select_from_repositories,src/lib/timeout) diff --git a/repos/base-hw/recipes/src/base-hw_content.inc b/repos/base-hw/recipes/src/base-hw_content.inc index f75752b537..ee1b9ae2f8 100644 --- a/repos/base-hw/recipes/src/base-hw_content.inc +++ b/repos/base-hw/recipes/src/base-hw_content.inc @@ -115,6 +115,12 @@ SRC_LIB_BASE += $(notdir $(wildcard $(BASE_HW_DIR)/src/lib/base/*.cc)) \ $(notdir $(wildcard $(BASE_DIR)/src/lib/base/*.cc)) \ ${call selected_content,SRC_LIB_BASE_SPECS} +SRC_LIB_TIMEOUT += duration.cc \ + hw/timer_connection_timestamp.cc \ + timeout.cc \ + timer_connection.cc \ + timer_connection_time.cc + SRC_LIB_STARTUP += init_main_thread.cc _main.cc \ $(addprefix spec/,${call selected_content,SRC_LIB_STARTUP_SPECS}) @@ -142,6 +148,7 @@ CONTENT += $(addprefix src/timer/,$(SRC_TIMER)) \ $(addprefix src/bootstrap/,$(SRC_BOOTSTRAP)) \ $(addprefix lib/mk/,$(LIB_MK)) \ $(addprefix src/lib/base/,$(SRC_LIB_BASE)) \ + $(addprefix src/lib/timeout/,$(SRC_LIB_TIMEOUT)) \ $(addprefix src/lib/startup/,$(SRC_LIB_STARTUP)) \ $(addprefix src/core/,$(SRC_CORE)) \ src/lib/hw src/lib/ld src/lib/cxx \ diff --git a/repos/base-nova/recipes/api/base-nova/content.mk b/repos/base-nova/recipes/api/base-nova/content.mk index c49d05cd49..dbb72ce372 100644 --- a/repos/base-nova/recipes/api/base-nova/content.mk +++ b/repos/base-nova/recipes/api/base-nova/content.mk @@ -1,5 +1,8 @@ FROM_BASE_NOVA := etc include -FROM_BASE := lib/mk/timeout.mk src/lib/timeout + +# base-nova.lib.a depends on timeout.lib.a, which includes base/internal/gloabls.h +FROM_BASE := lib/mk/timeout.mk src/lib/timeout \ + src/include/base/internal/globals.h content: $(FROM_BASE_NOVA) $(FROM_BASE) LICENSE diff --git a/repos/base/lib/mk/timeout-arm.mk b/repos/base/lib/mk/timeout-arm.mk index e4af0c127f..064e501abd 100644 --- a/repos/base/lib/mk/timeout-arm.mk +++ b/repos/base/lib/mk/timeout-arm.mk @@ -3,6 +3,6 @@ SRC_CC += timer_connection.cc SRC_CC += arm/timer_connection_time.cc SRC_CC += duration.cc -INC_DIR += $(BASE_DIR)/src/include +REP_INC_DIR += src/include -vpath % $(BASE_DIR)/src/lib/timeout +vpath % $(call select_from_repositories,src/lib/timeout) diff --git a/repos/base/lib/mk/timeout.mk b/repos/base/lib/mk/timeout.mk index 5862c2343c..871948edda 100644 --- a/repos/base/lib/mk/timeout.mk +++ b/repos/base/lib/mk/timeout.mk @@ -4,6 +4,6 @@ SRC_CC += timer_connection_time.cc SRC_CC += timer_connection_timestamp.cc SRC_CC += duration.cc -INC_DIR += $(BASE_DIR)/src/include +REP_INC_DIR += src/include vpath % $(call select_from_repositories,src/lib/timeout) From 13bfe50d00ad8cef295d1ceae3d9905fd7c7430b Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Thu, 22 Sep 2022 16:40:16 +0200 Subject: [PATCH 263/354] Update expat to version 2.4.9 The tar.gz archive of version 2.4.6 vanished from sourceforge. --- repos/libports/ports/expat.hash | 2 +- repos/libports/ports/expat.port | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/repos/libports/ports/expat.hash b/repos/libports/ports/expat.hash index d4268bbd2d..18e0f7956f 100644 --- a/repos/libports/ports/expat.hash +++ b/repos/libports/ports/expat.hash @@ -1 +1 @@ -6af8cf04ee4b5325ad883f9922d9320548c853bc +0670a7b071ea29d0287d5f89c7fba1b852c8a146 diff --git a/repos/libports/ports/expat.port b/repos/libports/ports/expat.port index 301c450a45..3cd81de14a 100644 --- a/repos/libports/ports/expat.port +++ b/repos/libports/ports/expat.port @@ -1,9 +1,9 @@ LICENSE := MIT DOWNLOADS := expat.archive -VERSION := 2.4.6 +VERSION := 2.4.9 URL(expat) := http://sourceforge.net/projects/expat/files/expat/$(VERSION)/expat-$(VERSION).tar.gz -SHA(expat) := a0eb5af56b1c2ba812051c49bf3b4e5763293fe5394a0219df7208845c3efb8c +SHA(expat) := 4415710268555b32c4e5ab06a583bea9fec8ff89333b218b70b43d4ca10e38fa DIR(expat) := src/lib/expat/contrib DIRS := include From debd41081ecdd2d858a7a4c0d7ddb89257fdb418 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 7 Sep 2022 16:45:27 +0200 Subject: [PATCH 264/354] base-hw: optimize & cleanup scheduler * Remove useless `ready_check` function * Implement fine-grained checking when schedule updating is necessary Ref genodelabs/genode#4151 --- repos/base-hw/src/core/kernel/cpu.cc | 11 +-- .../base-hw/src/core/kernel/cpu_scheduler.cc | 71 ++++++++----------- repos/base-hw/src/core/kernel/cpu_scheduler.h | 7 +- 3 files changed, 33 insertions(+), 56 deletions(-) diff --git a/repos/base-hw/src/core/kernel/cpu.cc b/repos/base-hw/src/core/kernel/cpu.cc index 02e190d63e..cd7e57b5b9 100644 --- a/repos/base-hw/src/core/kernel/cpu.cc +++ b/repos/base-hw/src/core/kernel/cpu.cc @@ -121,14 +121,9 @@ Cpu::Idle_thread::Idle_thread(Board::Address_space_id_allocator &addr_space_id_a void Cpu::schedule(Job * const job) { - if (_id == executing_id()) - _scheduler.ready(job->share()); - else { - _scheduler.ready_check(job->share()); - - if (_scheduler.need_to_schedule()) - trigger_ip_interrupt(); - } + _scheduler.ready(job->share()); + if (_id != executing_id() && _scheduler.need_to_schedule()) + trigger_ip_interrupt(); } diff --git a/repos/base-hw/src/core/kernel/cpu_scheduler.cc b/repos/base-hw/src/core/kernel/cpu_scheduler.cc index a9ac614e5d..b56d771656 100644 --- a/repos/base-hw/src/core/kernel/cpu_scheduler.cc +++ b/repos/base-hw/src/core/kernel/cpu_scheduler.cc @@ -191,45 +191,17 @@ void Cpu_scheduler::update(time_t time) } -void Cpu_scheduler::ready_check(Share &s1) -{ - assert(_head); - - ready(s1); - - if (_need_to_schedule) - return; - - Share * s2 = _head; - if (!s1._claim) { - _need_to_schedule = s2 == &_idle; - } else if (!_head_claims) { - _need_to_schedule = true; - } else if (s1._prio != s2->_prio) { - _need_to_schedule = s1._prio > s2->_prio; - } else { - for ( - ; s2 && s2 != &s1; - s2 = - Double_list::next(&s2->_claim_item) != nullptr ? - &Double_list::next(&s2->_claim_item)->payload() : - nullptr) ; - - _need_to_schedule = !s2; - } -} - - void Cpu_scheduler::ready(Share &s) { assert(!s._ready && &s != &_idle); - _need_to_schedule = true; - s._ready = 1; s._fill = _fill; _fills.insert_tail(&s._fill_item); + if (_head == &_idle) + _need_to_schedule = true; + if (!s._quota) return; @@ -239,6 +211,28 @@ void Cpu_scheduler::ready(Share &s) _rcl[s._prio].insert_head(&s._claim_item); else _rcl[s._prio].insert_tail(&s._claim_item); + + /* + * Check whether we need to re-schedule + */ + if (_need_to_schedule) + return; + + /* current head has no quota left */ + if (!_head_claims) { + _need_to_schedule = true; + return; + } + + /* if current head has different priority */ + if (s._prio != _head->_prio) { + _need_to_schedule = s._prio > _head->_prio; + return; + } + + /* if current head has same priority, the ready share gets active */ + if (s._claim) + _need_to_schedule = true; } @@ -246,7 +240,8 @@ void Cpu_scheduler::unready(Share &s) { assert(s._ready && &s != &_idle); - _need_to_schedule = true; + if (&s == _head) + _need_to_schedule = true; s._ready = 0; _fills.remove(&s._fill_item); @@ -270,21 +265,15 @@ void Cpu_scheduler::remove(Share &s) { assert(&s != &_idle); - _need_to_schedule = true; + if (s._ready) unready(s); if (&s == _head) _head = nullptr; - if (s._ready) - _fills.remove(&s._fill_item); - if (!s._quota) return; - if (s._ready) - _rcl[s._prio].remove(&s._claim_item); - else - _ucl[s._prio].remove(&s._claim_item); + _ucl[s._prio].remove(&s._claim_item); } @@ -292,8 +281,6 @@ void Cpu_scheduler::insert(Share &s) { assert(!s._ready); - _need_to_schedule = true; - if (!s._quota) return; diff --git a/repos/base-hw/src/core/kernel/cpu_scheduler.h b/repos/base-hw/src/core/kernel/cpu_scheduler.h index ad8624a257..70e921f44c 100644 --- a/repos/base-hw/src/core/kernel/cpu_scheduler.h +++ b/repos/base-hw/src/core/kernel/cpu_scheduler.h @@ -180,15 +180,10 @@ class Kernel::Cpu_scheduler void timeout() { _need_to_schedule = true; } /** - * Update head according to the consumed time + * Update head according to the current (absolute) time */ void update(time_t time); - /** - * Set 's1' ready and return wether this outdates current head - */ - void ready_check(Share &s1); - /** * Set share 's' ready */ From b85b3abe20afb61c165806f9d5d3cc9961d58ee1 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 7 Sep 2022 16:48:44 +0200 Subject: [PATCH 265/354] base-hw: update cpu_scheduler unit test * Modernize routines, eliminate pointers, use constructibles, etc. * Use absolute time instead of relative time consumption when updating the scheduler Ref genodelabs/genode#4151 --- repos/base-hw/src/test/cpu_scheduler/test.cc | 228 +++++++++---------- 1 file changed, 110 insertions(+), 118 deletions(-) diff --git a/repos/base-hw/src/test/cpu_scheduler/test.cc b/repos/base-hw/src/test/cpu_scheduler/test.cc index 470a8ba44f..f26e2924ce 100644 --- a/repos/base-hw/src/test/cpu_scheduler/test.cc +++ b/repos/base-hw/src/test/cpu_scheduler/test.cc @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2014-2017 Genode Labs GmbH + * Copyright (C) 2014-2022 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. @@ -18,125 +18,110 @@ /* core includes */ #include -/* - * Utilities - */ +using namespace Genode; +using namespace Kernel; -using Genode::size_t; -using Genode::addr_t; -using Genode::construct_at; -using Kernel::Cpu_share; -using Kernel::Cpu_scheduler; - - -struct Data +struct Main { - Cpu_share idle; - Cpu_scheduler scheduler; - char shares[9][sizeof(Cpu_share)]; + enum { MAX_SHARES = 10 }; - Data() : idle(0, 0), scheduler(idle, 1000, 100) { } + Constructible shares[MAX_SHARES] {}; + Cpu_scheduler scheduler; + time_t current_time { 0 }; + + Cpu_share & _idle() + { + if (!shares[0].constructed()) shares[0].construct(0, 0); + return *shares[0]; + } + + Main() : scheduler(_idle(), 1000, 100) { } + + void done() + { + Genode::log("done"); + while (1) ; + } + + unsigned share_id(Cpu_share & share) + { + for (unsigned i = 0; i < MAX_SHARES; i++) + if (shares[i].constructed() && (&*shares[i] == &share)) + return i; + return ~0U; + } + + Cpu_share & share(unsigned const id) + { + return *shares[id]; + } + + void create(unsigned const id) + { + switch (id) { + case 1: shares[id].construct(2, 230); break; + case 2: shares[id].construct(0, 170); break; + case 3: shares[id].construct(3, 110); break; + case 4: shares[id].construct(1, 90); break; + case 5: shares[id].construct(3, 120); break; + case 6: shares[id].construct(3, 0); break; + case 7: shares[id].construct(2, 180); break; + case 8: shares[id].construct(2, 100); break; + case 9: shares[id].construct(2, 0); break; + default: return; + } + scheduler.insert(*shares[id]); + } + + void destroy(unsigned const id) + { + if (!id || id >= MAX_SHARES) + return; + + scheduler.remove(share(id)); + shares[id].destruct(); + } + + unsigned time() + { + return scheduler.quota() - scheduler.residual(); + } + + void update_check(unsigned const l, unsigned const c, unsigned const t, + unsigned const s, unsigned const q) + { + current_time += c; + scheduler.update(current_time); + unsigned const st = time(); + if (t != st) { + log("wrong time ", st, " in line ", l); + done(); + } + Cpu_share & hs = scheduler.head(); + unsigned const hq = scheduler.head_quota(); + if (&hs != &share(s)) { + log("wrong share ", share_id(hs), " in line ", l); + done(); + } + if (hq != q) { + log("wrong quota ", hq, " in line ", l); + done(); + } + } + + void ready_check(unsigned const l, unsigned const s, bool const x) + { + scheduler.ready(share(s)); + if (scheduler.need_to_schedule() != x) { + log("wrong check result ", scheduler.need_to_schedule(), " in line ", l); + done(); + } + } + + void test(); }; -Data * data() -{ - static Data d; - return &d; -} - - -void done() -{ - Genode::log("done"); - while (1) ; -} - - -unsigned share_id(void * const pointer) -{ - addr_t const address = (addr_t)pointer; - addr_t const base = (addr_t)data()->shares; - if (address < base || address >= base + sizeof(data()->shares)) { - return 0; } - return (unsigned)((address - base) / sizeof(Cpu_share) + 1); -} - - -Cpu_share * share(unsigned const id) -{ - if (!id) { return &data()->idle; } - return reinterpret_cast(&data()->shares[id - 1]); -} - - -void create(unsigned const id) -{ - Cpu_share * const s = share(id); - void * const p = (void *)s; - switch (id) { - case 1: construct_at(p, 2, 230); break; - case 2: construct_at(p, 0, 170); break; - case 3: construct_at(p, 3, 110); break; - case 4: construct_at(p, 1, 90); break; - case 5: construct_at(p, 3, 120); break; - case 6: construct_at(p, 3, 0); break; - case 7: construct_at(p, 2, 180); break; - case 8: construct_at(p, 2, 100); break; - case 9: construct_at(p, 2, 0); break; - default: return; - } - data()->scheduler.insert(*s); -} - - -void destroy(unsigned const id) -{ - Cpu_share * const s = share(id); - data()->scheduler.remove(*s); - s->~Cpu_share(); -} - - -unsigned time() -{ - return data()->scheduler.quota() - - data()->scheduler.residual(); -} - - -void update_check(unsigned const l, unsigned const c, unsigned const t, - unsigned const s, unsigned const q) -{ - data()->scheduler.update(c); - unsigned const st = time(); - if (t != st) { - Genode::log("wrong time ", st, " in line ", l); - done(); - } - Cpu_share &hs = data()->scheduler.head(); - unsigned const hq = data()->scheduler.head_quota(); - if (&hs != share(s)) { - unsigned const hi = share_id(&hs); - Genode::log("wrong share ", hi, " in line ", l); - done(); - } - if (hq != q) { - Genode::log("wrong quota ", hq, " in line ", l); - done(); - } -} - - -void ready_check(unsigned const l, unsigned const s, bool const x) -{ - data()->scheduler.ready_check(*share(s)); - if (data()->scheduler.need_to_schedule() != x) { - Genode::log("wrong check result ", data()->scheduler.need_to_schedule(), " in line ", l); - done(); - } -} - /* * Shortcuts for all basic operations that the test consists of @@ -144,10 +129,10 @@ void ready_check(unsigned const l, unsigned const s, bool const x) #define C(s) create(s); #define D(s) destroy(s); -#define A(s) data()->scheduler.ready(*share(s)); -#define I(s) data()->scheduler.unready(*share(s)); -#define Y data()->scheduler.yield(); -#define Q(s, q) data()->scheduler.quota(*share(s), q); +#define A(s) scheduler.ready(share(s)); +#define I(s) scheduler.unready(share(s)); +#define Y scheduler.yield(); +#define Q(s, q) scheduler.quota(share(s), q); #define U(c, t, s, q) update_check(__LINE__, c, t, s, q); #define O(s) ready_check(__LINE__, s, true); #define N(s) ready_check(__LINE__, s, false); @@ -157,6 +142,13 @@ void ready_check(unsigned const l, unsigned const s, bool const x) * Main routine */ void Component::construct(Genode::Env &) +{ + static Main main; + main.test(); +} + + +void Main::test() { /* * Step-by-step testing From c583446adedccd0ed1dac5e8b3169cc9718983c6 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 9 Sep 2022 11:46:27 +0200 Subject: [PATCH 266/354] platform_drv: add HDAUDIO PCI quirks Ref genodelabs/genode#4578 --- repos/os/include/pci/config.h | 21 ++++---- repos/os/src/drivers/platform/pci.cc | 2 + repos/os/src/drivers/platform/pci_hd_audio.h | 52 ++++++++++++++++++++ 3 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 repos/os/src/drivers/platform/pci_hd_audio.h diff --git a/repos/os/include/pci/config.h b/repos/os/include/pci/config.h index a4d49be11d..f96f25e10e 100644 --- a/repos/os/include/pci/config.h +++ b/repos/os/include/pci/config.h @@ -44,16 +44,17 @@ struct Pci::Config : Genode::Mmio struct Command : Register<0x4, 16> { - struct Io_space_enable : Bitfield<0, 1> {}; - struct Memory_space_enable : Bitfield<1, 1> {}; - struct Bus_master_enable : Bitfield<2, 1> {}; - struct Special_cycle_enable : Bitfield<3, 1> {}; - struct Memory_write_invalidate : Bitfield<4, 1> {}; - struct Vga_palette_snoop : Bitfield<5, 1> {}; - struct Parity_error_response : Bitfield<6, 1> {}; - struct Idsel : Bitfield<7, 1> {}; - struct Serror_enable : Bitfield<8, 1> {}; - struct Interrupt_enable : Bitfield<10, 1> {}; + struct Io_space_enable : Bitfield<0, 1> {}; + struct Memory_space_enable : Bitfield<1, 1> {}; + struct Bus_master_enable : Bitfield<2, 1> {}; + struct Special_cycle_enable : Bitfield<3, 1> {}; + struct Memory_write_invalidate : Bitfield<4, 1> {}; + struct Vga_palette_snoop : Bitfield<5, 1> {}; + struct Parity_error_response : Bitfield<6, 1> {}; + struct Idsel : Bitfield<7, 1> {}; + struct Serror_enable : Bitfield<8, 1> {}; + struct Fast_back_to_back_enable : Bitfield<9, 1> {}; + struct Interrupt_enable : Bitfield<10, 1> {}; }; struct Status : Register<0x6, 16> diff --git a/repos/os/src/drivers/platform/pci.cc b/repos/os/src/drivers/platform/pci.cc index a73d25643e..eb0a5b92b0 100644 --- a/repos/os/src/drivers/platform/pci.cc +++ b/repos/os/src/drivers/platform/pci.cc @@ -20,6 +20,7 @@ #include #include #include +#include using namespace Genode; using namespace Pci; @@ -62,6 +63,7 @@ struct Config_helper /* apply different PCI quirks, bios handover etc. */ Driver::pci_uhci_quirks(_cfg, _config.base()); + Driver::pci_hd_audio_quirks(_cfg, _config); } void disable() diff --git a/repos/os/src/drivers/platform/pci_hd_audio.h b/repos/os/src/drivers/platform/pci_hd_audio.h new file mode 100644 index 0000000000..bf2c14523b --- /dev/null +++ b/repos/os/src/drivers/platform/pci_hd_audio.h @@ -0,0 +1,52 @@ +/* + * \brief Platform driver - PCI HD AUDIO utilities + * \author Stefan Kalkowski + * \date 2022-09-09 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + +#include +#include + +namespace Driver { + static void pci_hd_audio_quirks(Device::Pci_config cfg, + Pci::Config & config); +} + + +void Driver::pci_hd_audio_quirks(Device::Pci_config cfg, + Pci::Config & config) +{ + enum { HDAUDIO_CLASS_CODE = 0x40300 }; + + if ((cfg.class_code & 0xffff00) != HDAUDIO_CLASS_CODE) + return; + + /* PCI configuration register for HDAUDIO */ + struct Hdaudio : Mmio + { + struct Traffic_class_select : Register<0x44, 8> {}; + + struct Intel_device_control : Register<0x78, 16> + { + struct No_snoop : Bitfield<11,1> {}; + }; + + using Mmio::Mmio; + }; + + config.write(1); + + Hdaudio audio(config.base()); + audio.write(0); + + if (cfg.vendor_id == 0x8086) + audio.write(0); +} + From 281785f6bd9a7f60dfa3c25af47ff1d2fa27a92c Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 13 Sep 2022 14:26:08 +0200 Subject: [PATCH 267/354] platform API: make MMIO dataspace cap accessible In case of the GPU multiplexer, we need to delegate MMIO memory to the framebuffer client in form of a managed dataspace. To be able to attach a given Platform::Device::Mmio object to a region map we need to access its capability. Ref genodelabs/genode#4578 --- repos/os/include/platform_session/device.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repos/os/include/platform_session/device.h b/repos/os/include/platform_session/device.h index 736fc5ceeb..a320ffb070 100644 --- a/repos/os/include/platform_session/device.h +++ b/repos/os/include/platform_session/device.h @@ -117,6 +117,8 @@ class Platform::Device::Mmio : Range, Attached_dataspace, public Genode::Mmio template T *local_addr() { return reinterpret_cast(_local_addr()); } + + Dataspace_capability cap() { return Attached_dataspace::cap(); } }; From 85dc2e5b9bd55e8b968a3b920e0a62a03982f26e Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 15 Sep 2022 11:26:32 +0200 Subject: [PATCH 268/354] pci_decode: interpret reserved memory from ACPI We need the information about reserved memory region reports from the ACPI tables within the platform driver to pre-fill IOMMU tables with the corresponding mappings. Therefore, the pci_decode component now parses the information from the ACPI ROM, and adds "reserved_memory" nodes to all related devices in the devices report. Ref genodelabs/genode#4578 --- repos/os/src/app/pci_decode/main.cc | 16 ++++++ repos/os/src/app/pci_decode/rmrr.h | 75 +++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 repos/os/src/app/pci_decode/rmrr.h diff --git a/repos/os/src/app/pci_decode/main.cc b/repos/os/src/app/pci_decode/main.cc index c97853ef39..afdbb64b97 100644 --- a/repos/os/src/app/pci_decode/main.cc +++ b/repos/os/src/app/pci_decode/main.cc @@ -19,6 +19,7 @@ #include #include +#include #include using namespace Genode; @@ -43,6 +44,7 @@ struct Main List_model irq_routing_list {}; List_model irq_override_list {}; + List_model reserved_memory_list {}; Constructible pci_config_ds {}; @@ -168,6 +170,15 @@ void Main::parse_pci_function(Bdf bdf, gen.attribute("number", irq); }); + + reserved_memory_list.for_each([&] (Rmrr & rmrr) { + if (rmrr.bdf == bdf) + gen.node("reserved_memory", [&] + { + gen.attribute("address", rmrr.addr); + gen.attribute("size", rmrr.size); + }); + }); }); } @@ -259,6 +270,11 @@ void Main::sys_rom_update() irq_routing_list.update_from_xml(policy, xml); } + { + Rmrr_policy policy(heap); + reserved_memory_list.update_from_xml(policy, xml); + } + parse_pci_config_spaces(xml); } diff --git a/repos/os/src/app/pci_decode/rmrr.h b/repos/os/src/app/pci_decode/rmrr.h new file mode 100644 index 0000000000..2576c152f7 --- /dev/null +++ b/repos/os/src/app/pci_decode/rmrr.h @@ -0,0 +1,75 @@ +/* + * \brief Reserved memory region reporting from ACPI information in list models + * \author Stefan Kalkowski + * \date 2022-09-12 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU Affero General Public License version 3. + */ + + +#include +#include +#include + +using namespace Genode; +using namespace Pci; + + +struct Rmrr : List_model::Element +{ + Bdf bdf; + addr_t addr; + size_t size; + + Rmrr(Bdf bdf, addr_t addr, size_t size) + : bdf(bdf), addr(addr), size(size) {} +}; + + +struct Rmrr_policy : List_model::Update_policy +{ + Heap & heap; + + void destroy_element(Rmrr & rmrr) { + destroy(heap, &rmrr); } + + Rmrr & create_element(Xml_node node) + { + bus_t bus = 0; + dev_t dev = 0; + func_t fn = 0; + addr_t start = node.attribute_value("start", 0UL); + addr_t end = node.attribute_value("end", 0UL); + + node.with_optional_sub_node("scope", [&] (Xml_node node) { + bus = node.attribute_value("bus_start", 0U); + node.with_optional_sub_node("path", [&] (Xml_node node) { + dev = node.attribute_value("dev", 0); + fn = node.attribute_value("func", 0); + }); + }); + + return *(new (heap) Rmrr({bus, dev, fn}, start, (end-start+1))); + } + + void update_element(Rmrr &, Xml_node) {} + + static bool element_matches_xml_node(Rmrr const & rmrr, + Genode::Xml_node node) + { + addr_t start = node.attribute_value("start", 0UL); + addr_t end = node.attribute_value("end", 0UL); + return rmrr.addr == start && + rmrr.size == (end-start+1); + } + + static bool node_is_element(Genode::Xml_node node) { + return node.has_type("rmrr"); } + + Rmrr_policy(Heap & heap) : heap(heap) {} +}; From 5e42f347d89b50dc93a3975395707c8137ae3436 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 15 Sep 2022 11:28:29 +0200 Subject: [PATCH 269/354] platform_drv: attach reserved memory to device PD Consumes the information about reserved memory region reports from the devices ROM, and adds appropriated mappings to the corresponding device PD. Ref genodelabs/genode#4578 --- repos/os/src/drivers/platform/device.h | 80 ++++++++++++++++--- .../src/drivers/platform/device_component.cc | 22 +++++ .../src/drivers/platform/device_component.h | 1 + .../drivers/platform/device_model_policy.cc | 10 +++ 4 files changed, 100 insertions(+), 13 deletions(-) diff --git a/repos/os/src/drivers/platform/device.h b/repos/os/src/drivers/platform/device.h index 8c631c6ca1..979bafb7cb 100644 --- a/repos/os/src/drivers/platform/device.h +++ b/repos/os/src/drivers/platform/device.h @@ -44,6 +44,7 @@ namespace Driver { struct Reset_domain_update_policy; struct Power_domain_update_policy; struct Pci_config_update_policy; + struct Reserved_memory_update_policy; } @@ -197,6 +198,15 @@ class Driver::Device : private List_model::Element bridge(bridge) {} }; + struct Reserved_memory : List_model::Element + { + using Range = Platform::Device_interface::Range; + + Range range; + + Reserved_memory(Range range) : range(range) {} + }; + Device(Env & env, Device_model & model, Name name, Type type); virtual ~Device(); @@ -245,6 +255,14 @@ class Driver::Device : private List_model::Element }); } + template + void for_each_reserved_memory(FN const & fn) const + { + unsigned idx = 0; + _reserved_mem_list.for_each([&] (Reserved_memory const & mem) { + fn(idx++, mem.range); }); + } + void generate(Xml_generator &, bool) const; protected: @@ -253,19 +271,20 @@ class Driver::Device : private List_model::Element friend class List_model; friend class List; - Env & _env; - Device_model & _model; - Name const _name; - Type const _type; - Owner _owner {}; - List_model _io_mem_list {}; - List_model _irq_list {}; - List_model _io_port_range_list {}; - List_model _property_list {}; - List_model _clock_list {}; - List_model _power_domain_list {}; - List_model _reset_domain_list {}; - List_model _pci_config_list {}; + Env & _env; + Device_model & _model; + Name const _name; + Type const _type; + Owner _owner {}; + List_model _io_mem_list {}; + List_model _irq_list {}; + List_model _io_port_range_list {}; + List_model _property_list {}; + List_model _clock_list {}; + List_model _power_domain_list {}; + List_model _reset_domain_list {}; + List_model _pci_config_list {}; + List_model _reserved_mem_list {}; /* * Noncopyable @@ -633,4 +652,39 @@ struct Driver::Pci_config_update_policy } }; + +struct Driver::Reserved_memory_update_policy +: Genode::List_model::Update_policy +{ + Genode::Allocator & alloc; + + Reserved_memory_update_policy(Genode::Allocator & alloc) : alloc(alloc) {} + + void destroy_element(Element & pd) { + Genode::destroy(alloc, &pd); } + + Element & create_element(Genode::Xml_node node) + { + using namespace Pci; + + addr_t addr = node.attribute_value("address", 0UL); + size_t size = node.attribute_value("size", 0UL); + return *(new (alloc) Element({addr, size})); + } + + void update_element(Element &, Genode::Xml_node) {} + + static bool element_matches_xml_node(Element const & e, Genode::Xml_node node) + { + addr_t addr = node.attribute_value("address", 0UL); + size_t size = node.attribute_value("size", 0UL); + return addr == e.range.start && size == e.range.size; + } + + static bool node_is_element(Genode::Xml_node node) + { + return node.has_type("reserved_memory"); + } +}; + #endif /* _SRC__DRIVERS__PLATFORM__DEVICE_H_ */ diff --git a/repos/os/src/drivers/platform/device_component.cc b/repos/os/src/drivers/platform/device_component.cc index 5733249c45..bed1211299 100644 --- a/repos/os/src/drivers/platform/device_component.cc +++ b/repos/os/src/drivers/platform/device_component.cc @@ -27,6 +27,14 @@ void Driver::Device_component::_release_resources() _irq_registry.for_each([&] (Irq & irq) { destroy(_session.heap(), &irq); }); + _io_port_range_registry.for_each([&] (Io_port_range & iop) { + destroy(_session.heap(), &iop); }); + + _reserved_mem_registry.for_each([&] (Io_mem & iomem) { + destroy(_session.heap(), &iomem); }); + + if (_pci_config.constructed()) _pci_config.destruct(); + _session.ram_quota_guard().replenish(Ram_quota{_ram_quota}); _session.cap_quota_guard().replenish(Cap_quota{_cap_quota}); } @@ -177,6 +185,20 @@ Device_component::Device_component(Registry & registry, _cap_quota += Io_mem_session::CAP_QUOTA; _pci_config.construct(cfg.addr); }); + + device.for_each_reserved_memory([&] (unsigned idx, Range range) + { + session.ram_quota_guard().withdraw(Ram_quota{Io_mem_session::RAM_QUOTA}); + _ram_quota += Io_mem_session::RAM_QUOTA; + session.cap_quota_guard().withdraw(Cap_quota{Io_mem_session::CAP_QUOTA}); + _cap_quota += Io_mem_session::CAP_QUOTA; + Io_mem & iomem = *(new (session.heap()) + Io_mem(_reserved_mem_registry, idx, range)); + iomem.io_mem.construct(_env, iomem.range.start, + iomem.range.size, false); + session.device_pd().attach_dma_mem(iomem.io_mem->dataspace(), + iomem.range.start); + }); } catch(...) { _release_resources(); throw; diff --git a/repos/os/src/drivers/platform/device_component.h b/repos/os/src/drivers/platform/device_component.h index ce1a5e4f97..b65f28c480 100644 --- a/repos/os/src/drivers/platform/device_component.h +++ b/repos/os/src/drivers/platform/device_component.h @@ -123,6 +123,7 @@ class Driver::Device_component : public Rpc_object _irq_registry {}; Registry _io_mem_registry {}; Registry _io_port_range_registry {}; + Registry _reserved_mem_registry {}; Constructible _pci_config {}; void _release_resources(); diff --git a/repos/os/src/drivers/platform/device_model_policy.cc b/repos/os/src/drivers/platform/device_model_policy.cc index 0ddf15c9a8..45a04d8321 100644 --- a/repos/os/src/drivers/platform/device_model_policy.cc +++ b/repos/os/src/drivers/platform/device_model_policy.cc @@ -58,6 +58,11 @@ void Device_model::destroy_element(Device & device) device._pci_config_list.destroy_all_elements(policy); } + { + Reserved_memory_update_policy policy(_heap); + device._reserved_mem_list.destroy_all_elements(policy); + } + Genode::destroy(_heap, &device); } @@ -112,4 +117,9 @@ void Device_model::update_element(Device & device, Pci_config_update_policy policy(_heap); device._pci_config_list.update_from_xml(policy, node); } + + { + Reserved_memory_update_policy policy(_heap); + device._reserved_mem_list.update_from_xml(policy, node); + } } From 42a46b75f176952a140c4cd28364448066a3c132 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 15 Sep 2022 15:10:29 +0200 Subject: [PATCH 270/354] depot: add recipe for pc devices rom Ref genodelabs/genode#4578 --- repos/pc/recipes/raw/pc-devices/content.mk | 4 ++++ repos/pc/recipes/raw/pc-devices/hash | 1 + 2 files changed, 5 insertions(+) create mode 100644 repos/pc/recipes/raw/pc-devices/content.mk create mode 100644 repos/pc/recipes/raw/pc-devices/hash diff --git a/repos/pc/recipes/raw/pc-devices/content.mk b/repos/pc/recipes/raw/pc-devices/content.mk new file mode 100644 index 0000000000..b9b79df7c4 --- /dev/null +++ b/repos/pc/recipes/raw/pc-devices/content.mk @@ -0,0 +1,4 @@ +content: devices + +devices: + cp $(GENODE_DIR)/repos/base/board/pc/$@ $@ diff --git a/repos/pc/recipes/raw/pc-devices/hash b/repos/pc/recipes/raw/pc-devices/hash new file mode 100644 index 0000000000..b744230dec --- /dev/null +++ b/repos/pc/recipes/raw/pc-devices/hash @@ -0,0 +1 @@ +2022-09-15 184a930a9bf6fa8dc67582adbd3f940bf815a767 From 71129fca2d9bd5d5762ead5c2b82c83e039015d0 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 3 May 2022 14:02:30 +0200 Subject: [PATCH 271/354] nvme_drv: use generic platform API Ref genodelabs/genode#4578 --- repos/os/run/nvme.run | 74 ++++- repos/os/src/drivers/nvme/main.cc | 460 ++++++++++++---------------- repos/os/src/drivers/nvme/pci.h | 154 ---------- repos/os/src/drivers/nvme/target.mk | 1 - 4 files changed, 260 insertions(+), 429 deletions(-) delete mode 100644 repos/os/src/drivers/nvme/pci.h diff --git a/repos/os/run/nvme.run b/repos/os/run/nvme.run index 28f1e0485f..ade076d6e3 100644 --- a/repos/os/run/nvme.run +++ b/repos/os/run/nvme.run @@ -48,13 +48,14 @@ proc writeable { } { # set build_components { core init timer + server/report_rom + app/pci_decode + drivers/acpi + drivers/platform drivers/nvme app/block_tester } -source ${genode_dir}/repos/base/run/platform_drv.inc -append_platform_drv_build_components - build $build_components @@ -89,13 +90,69 @@ append config { - } + -append_platform_drv_config + + + + + + + + -append config { - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -192,11 +249,10 @@ install_config $config set boot_modules { core init timer nvme_drv + pci_decode platform_drv report_rom acpi_drv ld.lib.so block_tester } -append_platform_drv_boot_modules - build_boot_image $boot_modules append qemu_args " -nographic " diff --git a/repos/os/src/drivers/nvme/main.cc b/repos/os/src/drivers/nvme/main.cc index 76050cc626..44ed8d7ffb 100644 --- a/repos/os/src/drivers/nvme/main.cc +++ b/repos/os/src/drivers/nvme/main.cc @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include #include #include @@ -33,7 +35,6 @@ /* local includes */ #include -#include namespace { @@ -397,14 +398,17 @@ struct Nvme::Sqe_io : Nvme::Sqe /* * Queue base structure */ -struct Nvme::Queue +struct Nvme::Queue : Platform::Dma_buffer { - Genode::Ram_dataspace_capability ds { }; - addr_t pa { 0 }; - addr_t va { 0 }; - uint32_t max_entries { 0 }; + size_t len; + uint32_t max_entries; - bool valid() const { return pa != 0ul; } + Queue(Platform::Connection & platform, + uint32_t max_entries, + size_t len) + : + Dma_buffer(platform, len * max_entries, UNCACHED), + len(len), max_entries(max_entries) {}; }; @@ -416,9 +420,11 @@ struct Nvme::Sq : Nvme::Queue uint32_t tail { 0 }; uint16_t id { 0 }; + using Queue::Queue; + addr_t next() { - addr_t a = va + (tail * SQE_LEN); + addr_t a = (addr_t)local_addr() + (tail * SQE_LEN); Genode::memset((void*)a, 0, SQE_LEN); tail = (tail + 1) % max_entries; return a; @@ -434,7 +440,9 @@ struct Nvme::Cq : Nvme::Queue uint32_t head { 0 }; uint32_t phase { 1 }; - addr_t next() { return va + (head * CQE_LEN); } + using Queue::Queue; + + addr_t next() { return (addr_t)local_addr() + (head * CQE_LEN); } void advance_head() { @@ -449,9 +457,12 @@ struct Nvme::Cq : Nvme::Queue /* * Controller */ -struct Nvme::Controller : public Genode::Attached_dataspace, - public Genode::Mmio +class Nvme::Controller : Platform::Device, + Platform::Device::Mmio, + Platform::Device::Irq { + public: + /********** ** MMIO ** **********/ @@ -641,39 +652,51 @@ struct Nvme::Controller : public Genode::Attached_dataspace, struct Cqh : Bitfield< 0, 16> { }; /* completion queue tail */ }; + struct Initialization_failed : Genode::Exception { }; + + struct Info + { + Genode::String<8> version { }; + Identify_data::Sn sn { }; + Identify_data::Mn mn { }; + Identify_data::Fr fr { }; + size_t mdts { }; + }; + + struct Nsinfo + { + Block::sector_t count { 0 }; + size_t size { 0 }; + Block::sector_t max_request_count { 0 }; + bool valid() const { return count && size; } + }; + + private: + /********** ** CODE ** **********/ - struct Mem_address - { - addr_t va { 0 }; - addr_t pa { 0 }; - }; - - struct Initialization_failed : Genode::Exception { }; - - Genode::Env &_env; - - Util::Dma_allocator &_dma_alloc; - Mmio::Delayer &_delayer; + Genode::Env &_env; + Platform::Connection &_platform; + Mmio::Delayer &_delayer; /* * There is a completion and submission queue for * every namespace and one pair for the admin queues. */ - Nvme::Cq _cq[NUM_QUEUES] { }; - Nvme::Sq _sq[NUM_QUEUES] { }; + Constructible _cq[NUM_QUEUES] { }; + Constructible _sq[NUM_QUEUES] { }; - Nvme::Cq &_admin_cq = _cq[0]; - Nvme::Sq &_admin_sq = _sq[0]; + Constructible &_admin_cq = _cq[0]; + Constructible &_admin_sq = _sq[0]; - Mem_address _nvme_identify { }; + Platform::Dma_buffer _nvme_identify { _platform, IDENTIFY_LEN, UNCACHED }; Genode::Constructible _identify_data { }; - Mem_address _nvme_nslist { }; - uint32_t _nvme_nslist_count { 0 }; + Platform::Dma_buffer _nvme_nslist { _platform, IDENTIFY_LEN, UNCACHED }; + uint32_t _nvme_nslist_count { 0 }; size_t _mdts_bytes { 0 }; @@ -696,27 +719,10 @@ struct Nvme::Controller : public Genode::Attached_dataspace, CREATE_IO_SQ_CID, }; - Mem_address _nvme_query_ns[MAX_NS] { }; - - struct Info - { - Genode::String<8> version { }; - Identify_data::Sn sn { }; - Identify_data::Mn mn { }; - Identify_data::Fr fr { }; - size_t mdts { }; - }; + Constructible _nvme_query_ns[MAX_NS] { }; Info _info { }; - struct Nsinfo - { - Block::sector_t count { 0 }; - size_t size { 0 }; - Block::sector_t max_request_count { 0 }; - bool valid() const { return count && size; } - }; - /* create larger array to use namespace id to as index */ Nsinfo _nsinfo[MAX_NS+1] { }; @@ -772,22 +778,6 @@ struct Nvme::Controller : public Genode::Attached_dataspace, write(SQE_LEN_LOG2); } - /** - * Setup queue, i.e., fill out fields - * - * \param q reference to queue - * \param num number of entries - * \param len size of one entry - */ - void _setup_queue(Queue &q, size_t const num, size_t const len) - { - size_t const size = num * len; - q.ds = _dma_alloc.alloc(size); - q.pa = _dma_alloc.dma_addr(q.ds); - q.va = (addr_t)_env.rm().attach(q.ds); - q.max_entries = num; - } - /** * Check if given queue tuple is full * @@ -806,13 +796,13 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ void _setup_admin() { - _setup_queue(_admin_cq, MAX_ADMIN_ENTRIES, CQE_LEN); + _admin_cq.construct(_platform, MAX_ADMIN_ENTRIES, CQE_LEN); write(MAX_ADMIN_ENTRIES_MASK); - write(_admin_cq.pa); + write(_admin_cq->dma_addr()); - _setup_queue(_admin_sq, MAX_ADMIN_ENTRIES, SQE_LEN); + _admin_sq.construct(_platform, MAX_ADMIN_ENTRIES, SQE_LEN); write(MAX_ADMIN_ENTRIES_MASK); - write(_admin_sq.pa); + write(_admin_sq->dma_addr()); } /** @@ -827,9 +817,9 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ addr_t _admin_command(Opcode opc, uint32_t nsid, uint32_t cid) { - if (_queue_full(_admin_sq, _admin_cq)) { return 0ul; } + if (_queue_full(*_admin_sq, *_admin_cq)) { return 0ul; } - Sqe b(_admin_sq.next()); + Sqe b(_admin_sq->next()); b.write(opc); b.write(cid); b.write(nsid); @@ -852,17 +842,17 @@ struct Nvme::Controller : public Genode::Attached_dataspace, for (uint32_t i = 0; i < num; i++) { _delayer.usleep(100 * 1000); - Cqe b(_admin_cq.next()); + Cqe b(_admin_cq->next()); if (b.read() != cid) { continue; } - _admin_cq.advance_head(); + _admin_cq->advance_head(); success = true; - write(_admin_cq.head); + write(_admin_cq->head); break; } @@ -874,14 +864,7 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ void _query_nslist() { - if (!_nvme_nslist.va) { - Ram_dataspace_capability ds = _dma_alloc.alloc(IDENTIFY_LEN); - _nvme_nslist.va = (addr_t)_env.rm().attach(ds); - _nvme_nslist.pa = _dma_alloc.dma_addr(ds); - - } - - uint32_t *nslist = (uint32_t*)_nvme_nslist.va; + uint32_t *nslist = _nvme_nslist.local_addr(); bool const nsm = _identify_data->read(); if (!nsm) { @@ -892,10 +875,10 @@ struct Nvme::Controller : public Genode::Attached_dataspace, Sqe_identify b(_admin_command(Opcode::IDENTIFY, 0, NSLIST_CID)); - b.write(_nvme_nslist.pa); + b.write(_nvme_nslist.dma_addr()); b.write(Cns::NSLIST); - write(_admin_sq.tail); + write(_admin_sq->tail); if (!_wait_for_admin_cq(10, NSLIST_CID)) { error("identify name space list failed"); @@ -923,27 +906,24 @@ struct Nvme::Controller : public Genode::Attached_dataspace, if (max > 1) { warning("only the first name space is used"); } - uint32_t const *ns = (uint32_t const*)_nvme_nslist.va; + uint32_t const *ns = _nvme_nslist.local_addr(); uint16_t const id = 0; - if (!_nvme_query_ns[id].va) { - Ram_dataspace_capability ds = _dma_alloc.alloc(IDENTIFY_LEN); - _nvme_query_ns[id].va = (addr_t)_env.rm().attach(ds); - _nvme_query_ns[id].pa = _dma_alloc.dma_addr(ds); - } + if (!_nvme_query_ns[id].constructed()) + _nvme_query_ns[id].construct(_platform, IDENTIFY, UNCACHED); Sqe_identify b(_admin_command(Opcode::IDENTIFY, ns[id], QUERYNS_CID)); - b.write(_nvme_query_ns[id].pa); + b.write(_nvme_query_ns[id]->dma_addr()); b.write(Cns::IDENTIFY_NS); - write(_admin_sq.tail); + write(_admin_sq->tail); if (!_wait_for_admin_cq(10, QUERYNS_CID)) { error("identify name space failed"); throw Initialization_failed(); } - Identify_ns_data nsdata(_nvme_query_ns[id].va); + Identify_ns_data nsdata((addr_t)_nvme_query_ns[id]->local_addr()); uint32_t const flbas = nsdata.read(); /* use array subscription, omit first entry */ @@ -959,24 +939,18 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ void _identify() { - if (!_nvme_identify.va) { - Ram_dataspace_capability ds = _dma_alloc.alloc(IDENTIFY_LEN); - _nvme_identify.va = (addr_t)_env.rm().attach(ds); - _nvme_identify.pa = _dma_alloc.dma_addr(ds); - } - Sqe_identify b(_admin_command(Opcode::IDENTIFY, 0, IDENTIFY_CID)); - b.write(_nvme_identify.pa); + b.write(_nvme_identify.dma_addr()); b.write(Cns::IDENTIFY); - write(_admin_sq.tail); + write(_admin_sq->tail); if (!_wait_for_admin_cq(10, IDENTIFY_CID)) { error("identify failed"); throw Initialization_failed(); } - _identify_data.construct(_nvme_identify.va); + _identify_data.construct((addr_t)_nvme_identify.local_addr()); /* store information */ _info.version = Genode::String<8>(read(), ".", @@ -1008,17 +982,19 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ void _setup_io_cq(uint16_t id) { - Nvme::Cq &cq = _cq[id]; - if (!cq.valid()) { _setup_queue(cq, _max_io_entries, CQE_LEN); } + if (!_cq[id].constructed()) + _cq[id].construct(_platform, _max_io_entries, CQE_LEN); + + Nvme::Cq &cq = *_cq[id]; Sqe_create_cq b(_admin_command(Opcode::CREATE_IO_CQ, 0, CREATE_IO_CQ_CID)); - b.write(cq.pa); + b.write(cq.dma_addr()); b.write(id); b.write(_max_io_entries_mask); b.write(1); b.write(1); - write(_admin_sq.tail); + write(_admin_sq->tail); if (!_wait_for_admin_cq(10, CREATE_IO_CQ_CID)) { error("create I/O cq failed"); @@ -1036,18 +1012,20 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ void _setup_io_sq(uint16_t id, uint16_t cqid) { - Nvme::Sq &sq = _sq[id]; - if (!sq.valid()) { _setup_queue(sq, _max_io_entries, SQE_LEN); } + if (!_sq[id].constructed()) + _sq[id].construct(_platform, _max_io_entries, SQE_LEN); + + Nvme::Sq &sq = *_sq[id]; Sqe_create_sq b(_admin_command(Opcode::CREATE_IO_SQ, 0, CREATE_IO_SQ_CID)); - b.write(sq.pa); + b.write(sq.dma_addr()); b.write(id); b.write(_max_io_entries_mask); b.write(1); b.write(0b00); /* urgent for now */ b.write(cqid); - write(_admin_sq.tail); + write(_admin_sq->tail); if (!_wait_for_admin_cq(10, CREATE_IO_SQ_CID)) { error("create I/O sq failed"); @@ -1055,17 +1033,23 @@ struct Nvme::Controller : public Genode::Attached_dataspace, } } + public: + /** * Constructor */ - Controller(Genode::Env &env, Util::Dma_allocator &dma_alloc, - Genode::Io_mem_dataspace_capability ds_cap, - Mmio::Delayer &delayer) + Controller(Genode::Env &env, + Platform::Connection &platform, + Mmio::Delayer &delayer, + Signal_context_capability irq_sigh) : - Genode::Attached_dataspace(env.rm(), ds_cap), - Genode::Mmio((addr_t)local_addr()), - _env(env), _dma_alloc(dma_alloc), _delayer(delayer) - { } + Platform::Device(platform), + Platform::Device::Mmio((Platform::Device&)*this), + Platform::Device::Irq((Platform::Device&)*this), + _env(env), _platform(platform), _delayer(delayer) + { + sigh(irq_sigh); + } /** * Initialize controller @@ -1086,6 +1070,8 @@ struct Nvme::Controller : public Genode::Attached_dataspace, } throw Initialization_failed(); } + + clear_intr(); } /** @@ -1096,7 +1082,11 @@ struct Nvme::Controller : public Genode::Attached_dataspace, /** * Clean interrupts */ - void clear_intr() { write(1); } + void clear_intr() + { + write(1); + ack(); + } /* * Identify NVM system @@ -1126,7 +1116,7 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ addr_t io_command(uint16_t nsid, uint16_t cid) { - Nvme::Sq &sq = _sq[nsid]; + Nvme::Sq &sq = *_sq[nsid]; Sqe e(sq.next()); e.write(cid); @@ -1143,8 +1133,8 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ bool io_queue_full(uint16_t nsid) const { - Nvme::Sq const &sq = _sq[nsid]; - Nvme::Cq const &cq = _cq[nsid]; + Nvme::Sq const &sq = *_sq[nsid]; + Nvme::Cq const &cq = *_cq[nsid]; return _queue_full(sq, cq); } @@ -1155,7 +1145,7 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ void commit_io(uint16_t nsid) { - Nvme::Sq &sq = _sq[nsid]; + Nvme::Sq &sq = *_sq[nsid]; write(sq.tail); } @@ -1168,9 +1158,10 @@ struct Nvme::Controller : public Genode::Attached_dataspace, template void handle_io_completion(uint16_t nsid, FUNC const &func) { - Nvme::Cq &cq = _cq[nsid]; + if (!_cq[nsid].constructed()) + return; - if (!cq.valid()) { return; } + Nvme::Cq &cq = *_cq[nsid]; do { Cqe e(cq.next()); @@ -1196,7 +1187,7 @@ struct Nvme::Controller : public Genode::Attached_dataspace, */ void ack_io_completions(uint16_t nsid) { - Nvme::Cq &cq = _cq[nsid]; + Nvme::Cq &cq = *_cq[nsid]; write(cq.head); } @@ -1273,7 +1264,7 @@ struct Nvme::Controller : public Genode::Attached_dataspace, void dump_nslist() { - uint32_t const *p = (uint32_t const*)_nvme_nslist.va; + uint32_t const *p = _nvme_nslist.local_addr(); if (!p) { return; } for (size_t i = 0; i < 1024; i++) { @@ -1334,8 +1325,8 @@ class Nvme::Driver : Genode::Noncopyable Driver(const Driver&) = delete; Driver& operator=(const Driver&) = delete; - Genode::Env &_env; - Genode::Allocator &_alloc; + Genode::Env &_env; + Platform::Connection _platform { _env }; Genode::Attached_rom_dataspace &_config_rom; @@ -1366,12 +1357,12 @@ class Nvme::Driver : Genode::Noncopyable { try { Genode::Reporter::Xml_generator xml(_namespace_reporter, [&]() { - Nvme::Controller::Info const &info = _nvme_ctrlr->info(); + Nvme::Controller::Info const &info = _nvme_ctrlr.info(); xml.attribute("serial", info.sn); xml.attribute("model", info.mn); - Nvme::Controller::Nsinfo ns = _nvme_ctrlr->nsinfo(Nvme::IO_NSID); + Nvme::Controller::Nsinfo ns = _nvme_ctrlr.nsinfo(Nvme::IO_NSID); xml.node("namespace", [&]() { xml.attribute("id", (uint16_t)Nvme::IO_NSID); @@ -1386,43 +1377,14 @@ class Nvme::Driver : Genode::Noncopyable ** DMA ** *********/ - addr_t _dma_base { 0 }; - - Genode::Constructible _nvme_pci { }; + Constructible _dma_buffer { }; /* * The PRP (Physical Region Pages) page is used to setup * large requests. */ - - struct Prp_list_helper - { - struct Page - { - addr_t pa; - addr_t va; - }; - - Genode::Ram_dataspace_capability _ds; - addr_t _phys_addr; - addr_t _virt_addr; - - Prp_list_helper(Genode::Ram_dataspace_capability ds, - addr_t phys, addr_t virt) - : _ds(ds), _phys_addr(phys), _virt_addr(virt) { } - - Genode::Ram_dataspace_capability dataspace() { return _ds; } - - Page page(uint16_t cid) - { - addr_t const offset = cid * Nvme::MPS; - - return Page { .pa = offset + _phys_addr, - .va = offset + _virt_addr }; - } - }; - - Genode::Constructible _prp_list_helper { }; + Platform::Dma_buffer _prp_list_helper { _platform, Nvme::PRP_DS_SIZE, + UNCACHED }; /************** ** Requests ** @@ -1473,7 +1435,7 @@ class Nvme::Driver : Genode::Noncopyable template bool _for_any_request(FUNC const &func) const { - for (uint16_t i = 0; i < _nvme_ctrlr->max_io_entries(); i++) { + for (uint16_t i = 0; i < _nvme_ctrlr.max_io_entries(); i++) { if (_command_id_allocator.used(i) && func(_requests[i])) { return true; } @@ -1497,7 +1459,8 @@ class Nvme::Driver : Genode::Noncopyable void usleep(uint64_t us) override { Timer::Connection::usleep(us); } } _delayer { _env }; - Genode::Constructible _nvme_ctrlr { }; + Signal_context_capability _irq_sigh; + Nvme::Controller _nvme_ctrlr { _env, _platform, _delayer, _irq_sigh }; /*********** ** Block ** @@ -1511,10 +1474,10 @@ class Nvme::Driver : Genode::Noncopyable * Constructor */ Driver(Genode::Env &env, - Genode::Allocator &alloc, Genode::Attached_rom_dataspace &config_rom, Genode::Signal_context_capability request_sigh) - : _env(env), _alloc(alloc), _config_rom(config_rom) + : _env(env), + _config_rom(config_rom), _irq_sigh(request_sigh) { _config_rom.sigh(_config_sigh); _handle_config_update(); @@ -1523,61 +1486,37 @@ class Nvme::Driver : Genode::Noncopyable * Setup and identify NVMe PCI controller */ - try { - _nvme_pci.construct(_env); - } catch (Nvme::Pci::Missing_controller) { - error("no NVMe PCIe controller found"); - throw; - } + if (_verbose_regs) { _nvme_ctrlr.dump_cap(); } - try { - _nvme_ctrlr.construct(_env, *_nvme_pci, _nvme_pci->io_mem_ds(), - _delayer); - } catch (...) { - error("could not access NVMe controller MMIO"); - throw; - } - - if (_verbose_regs) { _nvme_ctrlr->dump_cap(); } - - _nvme_ctrlr->init(); - _nvme_ctrlr->identify(); + _nvme_ctrlr.init(); + _nvme_ctrlr.identify(); if (_verbose_identify) { - _nvme_ctrlr->dump_identify(); - _nvme_ctrlr->dump_nslist(); + _nvme_ctrlr.dump_identify(); + _nvme_ctrlr.dump_nslist(); } /* * Setup I/O */ - { - Genode::Ram_dataspace_capability ds = _nvme_pci->alloc(Nvme::PRP_DS_SIZE); - if (!ds.valid()) { - error("could not allocate DMA backing store"); - throw Nvme::Controller::Initialization_failed(); - } - addr_t const phys_addr = _nvme_pci->dma_addr(ds); - addr_t const virt_addr = (addr_t)_env.rm().attach(ds); - _prp_list_helper.construct(ds, phys_addr, virt_addr); - - if (_verbose_mem) { - log("DMA", " virt: [", Hex(virt_addr), ",", - Hex(virt_addr + Nvme::PRP_DS_SIZE), "]", - " phys: [", Hex(phys_addr), ",", - Hex(phys_addr + Nvme::PRP_DS_SIZE), "]"); - } + if (_verbose_mem) { + addr_t virt_addr = (addr_t)_prp_list_helper.local_addr(); + addr_t phys_addr = _prp_list_helper.dma_addr(); + log("DMA", " virt: [", Hex(virt_addr), ",", + Hex(virt_addr + Nvme::PRP_DS_SIZE), "]", + " phys: [", Hex(phys_addr), ",", + Hex(phys_addr + Nvme::PRP_DS_SIZE), "]"); } - _nvme_ctrlr->setup_io(Nvme::IO_NSID, Nvme::IO_NSID); + _nvme_ctrlr.setup_io(Nvme::IO_NSID, Nvme::IO_NSID); /* * Setup Block session */ /* set Block session properties */ - Nvme::Controller::Nsinfo nsinfo = _nvme_ctrlr->nsinfo(Nvme::IO_NSID); + Nvme::Controller::Nsinfo nsinfo = _nvme_ctrlr.nsinfo(Nvme::IO_NSID); if (!nsinfo.valid()) { error("could not query namespace information"); throw Nvme::Controller::Initialization_failed(); @@ -1588,7 +1527,7 @@ class Nvme::Driver : Genode::Noncopyable .align_log2 = Nvme::MPS_LOG2, .writeable = false }; - Nvme::Controller::Info const &info = _nvme_ctrlr->info(); + Nvme::Controller::Info const &info = _nvme_ctrlr.info(); log("NVMe:", info.version.string(), " " "serial:'", info.sn.string(), "'", " " @@ -1598,7 +1537,7 @@ class Nvme::Driver : Genode::Noncopyable log("Block", " " "size: ", _info.block_size, " " "count: ", _info.block_count, " " - "I/O entries: ", _nvme_ctrlr->max_io_entries()); + "I/O entries: ", _nvme_ctrlr.max_io_entries()); /* generate Report if requested */ try { @@ -1608,29 +1547,12 @@ class Nvme::Driver : Genode::Noncopyable _report_namespaces(); } } catch (...) { } - - _nvme_pci->sigh_irq(request_sigh); - _nvme_ctrlr->clear_intr(); - _nvme_pci->ack_irq(); } ~Driver() { /* free resources */ } Block::Session::Info info() const { return _info; } - Genode::Ram_dataspace_capability dma_alloc(size_t size) - { - Genode::Ram_dataspace_capability cap = _nvme_pci->alloc(size); - _dma_base = _nvme_pci->dma_addr(cap); - return cap; - } - - void dma_free(Genode::Ram_dataspace_capability cap) - { - _dma_base = 0; - _nvme_pci->free(cap); - } - void writeable(bool writeable) { _info.writeable = writeable; } @@ -1645,7 +1567,7 @@ class Nvme::Driver : Genode::Noncopyable * MAX_IO_ENTRIES requests, so it is safe to only check the * I/O queue. */ - if (_nvme_ctrlr->io_queue_full(Nvme::IO_NSID)) { + if (_nvme_ctrlr.io_queue_full(Nvme::IO_NSID)) { return Response::RETRY; } @@ -1670,8 +1592,8 @@ class Nvme::Driver : Genode::Noncopyable case Block::Operation::Type::READ: /* limit request to what we can handle, needed for overlap check */ - if (request.operation.count > _nvme_ctrlr->max_count(Nvme::IO_NSID)) { - request.operation.count = _nvme_ctrlr->max_count(Nvme::IO_NSID); + if (request.operation.count > _nvme_ctrlr.max_count(Nvme::IO_NSID)) { + request.operation.count = _nvme_ctrlr.max_count(Nvme::IO_NSID); } } @@ -1704,12 +1626,15 @@ class Nvme::Driver : Genode::Noncopyable void _submit(Block::Request request) { + if (!_dma_buffer.constructed()) + return; + bool const write = request.operation.type == Block::Operation::Type::WRITE; /* limit request to what we can handle */ - if (request.operation.count > _nvme_ctrlr->max_count(Nvme::IO_NSID)) { - request.operation.count = _nvme_ctrlr->max_count(Nvme::IO_NSID); + if (request.operation.count > _nvme_ctrlr.max_count(Nvme::IO_NSID)) { + request.operation.count = _nvme_ctrlr.max_count(Nvme::IO_NSID); } size_t const count = request.operation.count; @@ -1717,7 +1642,7 @@ class Nvme::Driver : Genode::Noncopyable size_t const len = request.operation.count * _info.block_size; bool const need_list = len > 2 * Nvme::MPS; - addr_t const request_pa = _dma_base + request.offset; + addr_t const request_pa = _dma_buffer->dma_addr() + request.offset; if (_verbose_io) { log("Submit: ", write ? "WRITE" : "READ", @@ -1725,7 +1650,7 @@ class Nvme::Driver : Genode::Noncopyable " need_list: ", need_list, " block count: ", count, " lba: ", lba, - " dma_base: ", Hex(_dma_base), + " dma_base: ", Hex(_dma_buffer->dma_addr()), " offset: ", Hex(request.offset)); } @@ -1735,7 +1660,7 @@ class Nvme::Driver : Genode::Noncopyable r = Request { .block_request = request, .id = id }; - Nvme::Sqe_io b(_nvme_ctrlr->io_command(Nvme::IO_NSID, cid)); + Nvme::Sqe_io b(_nvme_ctrlr.io_command(Nvme::IO_NSID, cid)); Nvme::Opcode const op = write ? Nvme::Opcode::WRITE : Nvme::Opcode::READ; b.write(op); b.write(request_pa); @@ -1746,18 +1671,21 @@ class Nvme::Driver : Genode::Noncopyable } else if (need_list) { /* get page to store list of mps chunks */ - Prp_list_helper::Page page = _prp_list_helper->page(cid); + addr_t const offset = cid * Nvme::MPS; + addr_t pa = _prp_list_helper.dma_addr() + offset; + addr_t va = (addr_t)_prp_list_helper.local_addr() + + offset; /* omit first page and write remaining pages to iob */ addr_t npa = request_pa + Nvme::MPS; using Page_entry = uint64_t; - Page_entry *pe = (Page_entry*)page.va; + Page_entry *pe = (Page_entry*)va; size_t const mps_len = Genode::align_addr(len, Nvme::MPS_LOG2); size_t const num = (mps_len - Nvme::MPS) / Nvme::MPS; if (_verbose_io) { - log(" page.va: ", Hex(page.va), " page.pa: ", - Hex(page.pa), " num: ", num); + log(" page.va: ", Hex(va), " page.pa: ", + Hex(pa), " num: ", num); } for (size_t i = 0; i < num; i++) { @@ -1767,7 +1695,7 @@ class Nvme::Driver : Genode::Noncopyable pe[i] = npa; npa += Nvme::MPS; } - b.write(page.pa); + b.write(pa); } b.write(lba); @@ -1782,7 +1710,7 @@ class Nvme::Driver : Genode::Noncopyable r = Request { .block_request = request, .id = id }; - Nvme::Sqe_io b(_nvme_ctrlr->io_command(Nvme::IO_NSID, cid)); + Nvme::Sqe_io b(_nvme_ctrlr.io_command(Nvme::IO_NSID, cid)); b.write(Nvme::Opcode::FLUSH); } @@ -1797,7 +1725,7 @@ class Nvme::Driver : Genode::Noncopyable size_t const count = request.operation.count; Block::sector_t const lba = request.operation.block_number; - Nvme::Sqe_io b(_nvme_ctrlr->io_command(Nvme::IO_NSID, cid)); + Nvme::Sqe_io b(_nvme_ctrlr.io_command(Nvme::IO_NSID, cid)); b.write(Nvme::Opcode::WRITE_ZEROS); b.write(lba); @@ -1812,7 +1740,7 @@ class Nvme::Driver : Genode::Noncopyable void _get_completed_request(Block::Request &out, uint16_t &out_cid) { - _nvme_ctrlr->handle_io_completion(Nvme::IO_NSID, [&] (Nvme::Cqe const &b) { + _nvme_ctrlr.handle_io_completion(Nvme::IO_NSID, [&] (Nvme::Cqe const &b) { if (_verbose_io) { Nvme::Cqe::dump(b); } @@ -1872,20 +1800,19 @@ class Nvme::Driver : Genode::Noncopyable void mask_irq() { - _nvme_ctrlr->mask_intr(); + _nvme_ctrlr.mask_intr(); } void ack_irq() { - _nvme_ctrlr->clear_intr(); - _nvme_pci->ack_irq(); + _nvme_ctrlr.clear_intr(); } bool execute() { if (!_submits_pending) { return false; } - _nvme_ctrlr->commit_io(Nvme::IO_NSID); + _nvme_ctrlr.commit_io(Nvme::IO_NSID); _submits_pending = false; return true; } @@ -1908,9 +1835,17 @@ class Nvme::Driver : Genode::Noncopyable { if (!_completed_pending) { return; } - _nvme_ctrlr->ack_io_completions(Nvme::IO_NSID); + _nvme_ctrlr.ack_io_completions(Nvme::IO_NSID); _completed_pending = false; } + + Dataspace_capability dma_buffer_construct(size_t size) + { + _dma_buffer.construct(_platform, size, UNCACHED); + return _dma_buffer->cap(); + } + + void dma_buffer_destruct() { _dma_buffer.destruct(); } }; @@ -1920,28 +1855,28 @@ class Nvme::Driver : Genode::Noncopyable struct Nvme::Main : Rpc_object> { - Genode::Env &_env; - Genode::Heap _heap { _env.ram(), _env.rm() }; + Genode::Env &_env; Genode::Attached_rom_dataspace _config_rom { _env, "config" }; Genode::Ram_dataspace_capability _block_ds_cap { }; Constructible _block_session { }; - Constructible _driver { }; Signal_handler
_request_handler { _env.ep(), *this, &Main::_handle_requests }; Signal_handler
_irq_handler { _env.ep(), *this, &Main::_handle_irq }; + Nvme::Driver _driver { _env, _config_rom, _irq_handler }; + void _handle_irq() { - _driver->mask_irq(); + _driver.mask_irq(); _handle_requests(); - _driver->ack_irq(); + _driver.ack_irq(); } void _handle_requests() { - if (!_block_session.constructed() || !_driver.constructed()) + if (!_block_session.constructed()) return; Block_session_component &block_session = *_block_session; @@ -1953,11 +1888,11 @@ struct Nvme::Main : Rpc_object> /* import new requests */ block_session.with_requests([&] (Block::Request request) { - Response response = _driver->acceptable(request); + Response response = _driver.acceptable(request); switch (response) { case Response::ACCEPTED: - _driver->submit(request); + _driver.submit(request); [[fallthrough]]; case Response::REJECTED: progress = true; @@ -1970,12 +1905,12 @@ struct Nvme::Main : Rpc_object> }); /* process I/O */ - progress |= _driver->execute(); + progress |= _driver.execute(); /* acknowledge finished jobs */ block_session.try_acknowledge([&] (Block_session_component::Ack &ack) { - _driver->with_any_completed_job([&] (Block::Request request) { + _driver.with_any_completed_job([&] (Block::Request request) { ack.submit(request); progress = true; @@ -1983,7 +1918,7 @@ struct Nvme::Main : Rpc_object> }); /* defered acknowledge on the controller */ - _driver->acknowledge_if_completed(); + _driver.acknowledge_if_completed(); if (!progress) { break; } } @@ -2013,11 +1948,10 @@ struct Nvme::Main : Rpc_object> } bool const writeable = policy.attribute_value("writeable", false); - _driver->writeable(writeable); + _driver.writeable(writeable); - _block_ds_cap = _driver->dma_alloc(tx_buf_size); - _block_session.construct(_env, _block_ds_cap, _request_handler, - _driver->info()); + _block_session.construct(_env, _driver.dma_buffer_construct(tx_buf_size), + _request_handler, _driver.info()); return _block_session->cap(); } @@ -2030,15 +1964,11 @@ struct Nvme::Main : Rpc_object> * XXX a malicious client could submit all its requests * and close the session... */ - _driver->dma_free(_block_ds_cap); + _driver.dma_buffer_destruct(); } - Main(Genode::Env &env) : _env(env) - { - _driver.construct(_env, _heap, _config_rom, _irq_handler); - - _env.parent().announce(_env.ep().manage(*this)); - } + Main(Genode::Env &env) : _env(env) { + _env.parent().announce(_env.ep().manage(*this)); } }; diff --git a/repos/os/src/drivers/nvme/pci.h b/repos/os/src/drivers/nvme/pci.h deleted file mode 100644 index f3e2c6211c..0000000000 --- a/repos/os/src/drivers/nvme/pci.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * \brief NVMe PCIe backend - * \author Josef Soentgen - * \date 2018-03-05 - */ - -/* - * Copyright (C) 2018 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _NVME_PCI_H_ -#define _NVME_PCI_H_ - -/* Genode includes */ -#include -#include -#include - - -namespace Nvme { - - using namespace Genode; - - struct Pci; -} - - -struct Nvme::Pci : Platform::Connection, - Util::Dma_allocator -{ - struct Missing_controller : Genode::Exception { }; - - enum { - CLASS_MASS_STORAGE = 0x010000u, - CLASS_MASK = 0xffff00u, - SUBCLASS_NVME = 0x000800u, - NVME_DEVICE = CLASS_MASS_STORAGE | SUBCLASS_NVME, - NVME_PCI = 0x02, - NVME_BASE_ID = 0, - }; - - enum Pci_config { IRQ = 0x3c, CMD = 0x4, CMD_IO = 0x1, - CMD_MEMORY = 0x2, CMD_MASTER = 0x4 }; - - Platform::Device_capability _device_cap { }; - Genode::Constructible _device { }; - - Io_mem_session_capability _io_mem_cap { }; - Genode::Constructible _irq { }; - - /** - * Constructor - */ - Pci(Genode::Env &env) : Platform::Connection(env) - { - upgrade_ram(2*4096u); - upgrade_caps(8); - - _device_cap = with_upgrade([&] () { - return next_device(_device_cap, - NVME_DEVICE, CLASS_MASK); - }); - - if (!_device_cap.valid()) { throw Missing_controller(); } - - _device.construct(_device_cap); - - uint16_t cmd = _device->config_read(Pci_config::CMD, Platform::Device::ACCESS_16BIT); - cmd |= 0x2; /* respond to memory space accesses */ - cmd |= 0x4; /* enable bus master */ - - _device->config_write(Pci_config::CMD, cmd, Platform::Device::ACCESS_16BIT); - - _io_mem_cap = _device->io_mem(_device->phys_bar_to_virt(NVME_BASE_ID)); - _irq.construct(_device->irq(0)); - - Genode::log("NVMe PCIe controller found (", - Genode::Hex(_device->vendor_id()), ":", - Genode::Hex(_device->device_id()), ")"); - } - - /** - * Return base address of controller MMIO region - */ - Io_mem_dataspace_capability io_mem_ds() const { - return Io_mem_session_client(_io_mem_cap).dataspace(); } - - /** - * Set interrupt signal handler - * - * \parm sigh signal capability - */ - void sigh_irq(Genode::Signal_context_capability sigh) - { - _irq->sigh(sigh); - _irq->ack_irq(); - } - - /** - * Acknowledge interrupt - */ - void ack_irq() { _irq->ack_irq(); } - - /***************************** - ** Dma_allocator interface ** - *****************************/ - - /** - * Allocator DMA buffer - * - * \param size size of the buffer - * - * \return Ram_dataspace_capability - */ - Genode::Ram_dataspace_capability alloc(size_t size) override - { - size_t donate = size; - return retry( - [&] () { - return retry( - [&] () { return Pci::Connection::alloc_dma_buffer(size, UNCACHED); }, - [&] () { upgrade_caps(2); }); - }, - [&] () { - upgrade_ram(donate); - donate = donate * 2 > size ? 4096 : donate * 2; - }); - } - - /** - * Free DMA buffer - * - * \param cap RAM dataspace capability - */ - void free(Genode::Ram_dataspace_capability cap) override - { - Pci::Connection::free_dma_buffer(cap); - } - - /** - * Return bus address of DMA buffer - * - * \param cap RAM dataspace capability - */ - addr_t dma_addr(Ram_dataspace_capability cap) override - { - return Pci::Connection::dma_addr(cap); - } -}; - -#endif /* _NVME_PCI_H_ */ diff --git a/repos/os/src/drivers/nvme/target.mk b/repos/os/src/drivers/nvme/target.mk index 4cb20fa13b..bdf35f06c0 100644 --- a/repos/os/src/drivers/nvme/target.mk +++ b/repos/os/src/drivers/nvme/target.mk @@ -2,6 +2,5 @@ TARGET = nvme_drv SRC_CC = main.cc INC_DIR += $(PRG_DIR) LIBS += base -REQUIRES = x86 CC_CXX_WARN_STRICT_CONVERSION = From 9f9a5186e0a0877eb7be1d0370863f9ab51f5ea0 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 28 Apr 2022 15:56:02 +0200 Subject: [PATCH 272/354] ps2_drv: use generic platform API Ref genodelabs/genode#4578 --- repos/base/board/pc/devices | 13 ++++++++++++ repos/os/run/input.run | 28 ++++++++++++++++++-------- repos/os/src/drivers/ps2/irq_handler.h | 18 ++++++++--------- repos/os/src/drivers/ps2/x86/i8042.h | 13 ++++++------ repos/os/src/drivers/ps2/x86/main.cc | 19 ++++------------- 5 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 repos/base/board/pc/devices diff --git a/repos/base/board/pc/devices b/repos/base/board/pc/devices new file mode 100644 index 0000000000..b5ca5a1261 --- /dev/null +++ b/repos/base/board/pc/devices @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/repos/os/run/input.run b/repos/os/run/input.run index fbd05ac87e..ae2cd0fe8f 100644 --- a/repos/os/run/input.run +++ b/repos/os/run/input.run @@ -6,9 +6,7 @@ assert_spec x86 set build_components { core init timer server/dynamic_rom server/event_dump } -source ${genode_dir}/repos/base/run/platform_drv.inc -append_platform_drv_build_components - +lappend_if [have_board pc] build_components drivers/platform lappend_if [have_board pc] build_components drivers/ps2 lappend_if [have_board linux] build_components drivers/framebuffer/sdl lappend_if [have_board linux] build_components server/nitpicker @@ -50,9 +48,24 @@ append config { } -append_platform_drv_config - append_if [have_board pc] config { + + + + + + + + + + + + + + + + + -#include +#include /* local includes */ #include "input_driver.h" @@ -25,14 +25,14 @@ class Irq_handler { private: - Genode::Irq_session_client _irq; + Platform::Device::Irq _irq; Genode::Signal_handler _handler; Input_driver &_input_driver; Event::Session_client &_event_session; void _handle() { - _irq.ack_irq(); + _irq.ack(); _event_session.with_batch([&] (Event::Session_client::Batch &batch) { while (_input_driver.event_pending()) @@ -42,18 +42,18 @@ class Irq_handler public: - Irq_handler(Genode::Entrypoint &ep, - Input_driver &input_driver, - Event::Session_client &event_session, - Genode::Irq_session_capability irq_cap) + Irq_handler(Genode::Entrypoint &ep, + Input_driver &input_driver, + Event::Session_client &event_session, + Platform::Device &device, + unsigned idx) : - _irq(irq_cap), + _irq(device, {idx}), _handler(ep, *this, &Irq_handler::_handle), _input_driver(input_driver), _event_session(event_session) { _irq.sigh(_handler); - _irq.ack_irq(); } }; diff --git a/repos/os/src/drivers/ps2/x86/i8042.h b/repos/os/src/drivers/ps2/x86/i8042.h index 437004aa25..3105684d7f 100644 --- a/repos/os/src/drivers/ps2/x86/i8042.h +++ b/repos/os/src/drivers/ps2/x86/i8042.h @@ -14,7 +14,7 @@ #ifndef _DRIVERS__INPUT__SPEC__PS2__X86__I8042_H_ #define _DRIVERS__INPUT__SPEC__PS2__X86__I8042_H_ -#include +#include #include #include "serial_interface.h" @@ -179,8 +179,8 @@ class I8042 private: - Genode::Io_port_session_client _data_port; /* data port */ - Genode::Io_port_session_client _stat_port; /* status/command port */ + Platform::Device::Io_port_range _data_port; /* data port */ + Platform::Device::Io_port_range _stat_port; /* status/command port */ bool _kbd_xlate = false; /* translation mode to scan-code set 1 */ @@ -266,11 +266,10 @@ class I8042 /** * Constructor */ - I8042(Genode::Io_port_session_capability cap_data, - Genode::Io_port_session_capability cap_status) + I8042(Platform::Device & device) : - _data_port(cap_data), - _stat_port(cap_status), + _data_port(device, {0}), + _stat_port(device, {1}), _kbd_interface(*this, false), _aux_interface(*this, true) { diff --git a/repos/os/src/drivers/ps2/x86/main.cc b/repos/os/src/drivers/ps2/x86/main.cc index de195f5d9f..ee2160cfa2 100644 --- a/repos/os/src/drivers/ps2/x86/main.cc +++ b/repos/os/src/drivers/ps2/x86/main.cc @@ -18,7 +18,6 @@ /* os includes */ #include -#include #include /* local includes */ @@ -44,21 +43,11 @@ struct Ps2::Main Event::Connection _event { _env }; Platform::Connection _platform { _env }; + Platform::Device _device { _platform }; Timer::Connection _timer { _env }; - Platform::Device_capability _ps2_device_cap() - { - return _platform.with_upgrade([&] () { - return _platform.device("PS2"); }); - } - - Platform::Device_client _device_ps2 { _ps2_device_cap() }; - - enum { REG_IOPORT_DATA = 0, REG_IOPORT_STATUS = 1 }; - - I8042 _i8042 { _device_ps2.io_port(REG_IOPORT_DATA), - _device_ps2.io_port(REG_IOPORT_STATUS) }; + I8042 _i8042 { _device }; Attached_rom_dataspace _config { _env, "config" }; @@ -70,8 +59,8 @@ struct Ps2::Main Mouse _mouse { _i8042.aux_interface(), _timer, *_verbose }; - Irq_handler _keyboard_irq { _env.ep(), _keyboard, _event, _device_ps2.irq(0) }; - Irq_handler _mouse_irq { _env.ep(), _mouse, _event, _device_ps2.irq(1) }; + Irq_handler _keyboard_irq { _env.ep(), _keyboard, _event, _device, 0 }; + Irq_handler _mouse_irq { _env.ep(), _mouse, _event, _device, 1 }; Led_state _capslock { _env, "capslock" }, _numlock { _env, "numlock" }, From 5528434fb64afe95fe6e6c3fb3baa56cbbc7349c Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 29 Jul 2022 17:31:20 +0200 Subject: [PATCH 273/354] lx_kit & lx_emul: use generic platform API * Remove wrapper for legacy x86 platform API * Move PCI configuration space quirks to corresponding driver (pc_usb_host_drv, pc_wifi_drv, pc_intel_fb_drv) * Adapt driver test run-scripts to changed configuration Ref genodelabs/genode#4578 --- .../lib/import/import-lx_emul_common.inc | 6 - .../src/drivers/usb_host/spec/x86/target.inc | 1 - repos/dde_linux/src/include/lx_emul/pci.h | 56 ++ .../src/include/lx_emul/pci_config_space.h | 28 - repos/dde_linux/src/include/lx_kit/device.h | 88 ++- .../x86/lx_kit/platform_session/connection.h | 87 --- .../spec/x86/lx_kit/platform_session/device.h | 181 ------ repos/dde_linux/src/lib/lx_emul/pci.cc | 104 ++++ repos/dde_linux/src/lib/lx_emul/pci_bus.c | 199 ++++++ .../src/lib/lx_emul/pci_config_space.cc | 82 --- repos/dde_linux/src/lib/lx_emul/pci_init.cc | 46 -- .../lx_emul/shadow/drivers/pci/host-bridge.c | 11 + .../lx_emul/shadow/drivers/pci/pci-sysfs.c | 34 + .../src/lib/lx_emul/shadow/drivers/pci/pci.c | 36 ++ .../lib/lx_emul/shadow/drivers/pci/search.c | 44 ++ .../lx_emul/shadow/drivers/pci/setup-irq.c | 24 + .../lx_emul/shadow/drivers/pci/setup-res.c | 11 + .../dde_linux/src/lib/lx_emul/spec/x86/pci.c | 194 ------ repos/dde_linux/src/lib/lx_kit/device.cc | 78 ++- .../src/lib/lx_kit/spec/x86/platform.cc | 581 ------------------ repos/pc/lib/import/import-pc_lx_emul.mk | 11 +- repos/pc/lib/mk/wifi.inc | 1 - repos/pc/recipes/api/pc_linux/content.mk | 4 + .../recipes/pkg/test_usb_host_drv-pc/archives | 1 + .../raw/test_usb_host_drv-pc/drivers.config | 58 +- repos/pc/run/intel_fb.run | 93 ++- repos/pc/run/wifi.run | 82 ++- .../drivers/framebuffer/intel/pc/dummies.c | 30 + .../src/drivers/framebuffer/intel/pc/emul.cc | 19 + .../framebuffer/intel/pc/generated_dummies.c | 92 +-- .../drivers/framebuffer/intel/pc/lx_emul.h | 13 +- .../src/drivers/framebuffer/intel/pc/misc.cc | 20 - .../framebuffer/intel/pc/opregion_io_mem.cc | 11 +- .../pc/src/drivers/framebuffer/intel/pc/pci.c | 140 +++++ .../intel/pc/spec/x86_32/source.list | 14 - .../intel/pc/spec/x86_64/source.list | 14 - .../drivers/framebuffer/intel/pc/target.inc | 6 +- repos/pc/src/drivers/usb_host/pc/dummies.c | 8 + .../drivers/usb_host/pc/generated_dummies.c | 104 +--- repos/pc/src/drivers/usb_host/pc/lx_emul.c | 73 +++ repos/pc/src/drivers/usb_host/pc/lx_emul.h | 2 - .../usb_host/pc/spec/x86_32/source.list | 13 - .../usb_host/pc/spec/x86_64/source.list | 13 - repos/pc/src/drivers/usb_host/pc/target.inc | 3 +- repos/pc/src/include/lx_emul/pci_fixups.h | 22 - repos/pc/src/lib/wifi/dummies.c | 33 + repos/pc/src/lib/wifi/generated_dummies.c | 115 +--- repos/pc/src/lib/wifi/lx_emul.c | 30 + repos/pc/src/lib/wifi/spec/x86_32/source.list | 13 - repos/pc/src/lib/wifi/spec/x86_64/source.list | 13 - repos/pc/src/test/driver_time/dummies.c | 9 + .../src/test/driver_time/generated_dummies.c | 191 +++--- repos/pc/src/test/driver_time/source.list | 1 + 53 files changed, 1308 insertions(+), 1835 deletions(-) create mode 100644 repos/dde_linux/src/include/lx_emul/pci.h delete mode 100644 repos/dde_linux/src/include/lx_emul/pci_config_space.h delete mode 100644 repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/connection.h delete mode 100644 repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/device.h create mode 100644 repos/dde_linux/src/lib/lx_emul/pci.cc create mode 100644 repos/dde_linux/src/lib/lx_emul/pci_bus.c delete mode 100644 repos/dde_linux/src/lib/lx_emul/pci_config_space.cc delete mode 100644 repos/dde_linux/src/lib/lx_emul/pci_init.cc create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/host-bridge.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci-sysfs.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/search.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-irq.c create mode 100644 repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-res.c delete mode 100644 repos/dde_linux/src/lib/lx_emul/spec/x86/pci.c delete mode 100644 repos/dde_linux/src/lib/lx_kit/spec/x86/platform.cc delete mode 100644 repos/pc/src/drivers/framebuffer/intel/pc/misc.cc create mode 100644 repos/pc/src/drivers/framebuffer/intel/pc/pci.c delete mode 100644 repos/pc/src/include/lx_emul/pci_fixups.h diff --git a/repos/dde_linux/lib/import/import-lx_emul_common.inc b/repos/dde_linux/lib/import/import-lx_emul_common.inc index 6845a15452..600b37b075 100644 --- a/repos/dde_linux/lib/import/import-lx_emul_common.inc +++ b/repos/dde_linux/lib/import/import-lx_emul_common.inc @@ -58,9 +58,6 @@ SPEC_ARCH := x86_32 SRC_C += lx_emul/shadow/arch/x86/kernel/irq.c SRC_C += lx_emul/shadow/arch/x86/kernel/setup_percpu.c - -# temporarily add the following include path for x86 platform_session wrapper -INC_DIR += $(DDE_LINUX_DIR)/src/include/spec/x86/lx_kit endif ifeq ($(filter-out $(SPECS),x86_64),) @@ -70,9 +67,6 @@ SPEC_ARCH := x86_64 SRC_C += lx_emul/shadow/arch/x86/kernel/irq.c SRC_C += lx_emul/shadow/arch/x86/kernel/setup_percpu.c - -# temporarily add the following include path for x86 platform_session wrapper -INC_DIR += $(DDE_LINUX_DIR)/src/include/spec/x86/lx_kit endif ifeq ($(filter-out $(SPECS),arm),) diff --git a/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc b/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc index 5b43fc0d6c..71cd68ac4c 100644 --- a/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc +++ b/repos/dde_linux/src/drivers/usb_host/spec/x86/target.inc @@ -14,7 +14,6 @@ SRC_C += usb/host/uhci-hcd.c SRC_C += usb/host/xhci-pci.c SRC_CC += lx_kit/mapped_io_mem_range.cc -SRC_CC += lx_kit/pci.cc SRC_CC += spec/x86/platform.cc diff --git a/repos/dde_linux/src/include/lx_emul/pci.h b/repos/dde_linux/src/include/lx_emul/pci.h new file mode 100644 index 0000000000..64daed7280 --- /dev/null +++ b/repos/dde_linux/src/include/lx_emul/pci.h @@ -0,0 +1,56 @@ +/* + * \brief Lx_emul support for accessing PCI devices + * \author Stefan Kalkowski + * \date 2022-05-23 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#ifndef _LX_EMUL__PCI_H_ +#define _LX_EMUL__PCI_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*lx_emul_add_resource_callback_t) + (void * dev, + unsigned number, + unsigned long addr, + unsigned long size, + int io_port); + + +typedef void (*lx_emul_add_device_callback_t) + (void * bus, + unsigned number, + char const * const name, + unsigned short vendor_id, + unsigned short device_id, + unsigned short sub_vendor, + unsigned short sub_device, + unsigned int class_code, + unsigned char revision, + unsigned irq); + + +void lx_emul_pci_for_each_resource(const char * const name, void * dev, + lx_emul_add_resource_callback_t fn); + +void lx_emul_pci_for_each_device(void * bus, lx_emul_add_device_callback_t fn); + +void lx_emul_pci_enable(const char * const name); + +void * lx_emul_pci_root_bus(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _LX_EMUL__PCI_H_ */ + diff --git a/repos/dde_linux/src/include/lx_emul/pci_config_space.h b/repos/dde_linux/src/include/lx_emul/pci_config_space.h deleted file mode 100644 index 4ea46796a1..0000000000 --- a/repos/dde_linux/src/include/lx_emul/pci_config_space.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * \brief Lx_emul support for accessing PCI(e) config space - * \author Josef Soentgen - * \date 2022-01-18 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#ifndef _LX_EMUL__PCI_CONFIG_SPACE_H_ -#define _LX_EMUL__PCI_CONFIG_SPACE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -int lx_emul_pci_read_config(unsigned bus, unsigned devfn, unsigned reg, unsigned len, unsigned *val); -int lx_emul_pci_write_config(unsigned bus, unsigned devfn, unsigned reg, unsigned len, unsigned val); - -#ifdef __cplusplus -} -#endif - -#endif /* _LX_EMUL__PCI_CONFIG_SPACE_H_ */ diff --git a/repos/dde_linux/src/include/lx_kit/device.h b/repos/dde_linux/src/include/lx_kit/device.h index ddf1a80f4e..aa6f1fa713 100644 --- a/repos/dde_linux/src/include/lx_kit/device.h +++ b/repos/dde_linux/src/include/lx_kit/device.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -35,10 +36,7 @@ struct clk { class Lx_kit::Device : List::Element { - private: - - friend class Device_list; - friend class List; + public: using Name = String<64>; using Type = Platform::Device::Type; @@ -47,16 +45,17 @@ class Lx_kit::Device : List::Element { using Index = Platform::Device::Mmio::Index; - Index idx; - addr_t addr; - size_t size; + Index idx; + addr_t addr; + size_t size; + unsigned pci_bar; Constructible io_mem {}; bool match(addr_t addr, size_t size); - Io_mem(unsigned idx, addr_t addr, size_t size) - : idx{idx}, addr(addr), size(size) {} + Io_mem(unsigned idx, addr_t addr, size_t size, unsigned pci_bar) + : idx{idx}, addr(addr), size(size), pci_bar(pci_bar) {} }; struct Irq : List::Element @@ -81,13 +80,15 @@ class Lx_kit::Device : List::Element Index idx; uint16_t addr; uint16_t size; + unsigned pci_bar; Constructible io_port {}; bool match(uint16_t addr); - Io_port(unsigned idx, uint16_t addr, uint16_t size) - : idx{idx}, addr(addr), size(size) {} + Io_port(unsigned idx, uint16_t addr, uint16_t size, + unsigned pci_bar) + : idx{idx}, addr(addr), size(size), pci_bar(pci_bar) {} }; struct Clock : List::Element @@ -100,6 +101,21 @@ class Lx_kit::Device : List::Element : idx(idx), name(name), lx_clock{0} {} }; + struct Pci_config + { + Pci::vendor_t vendor_id; + Pci::device_t device_id; + Pci::class_t class_code; + Pci::rev_t rev; + Pci::vendor_t sub_v_id; + Pci::device_t sub_d_id; + }; + + private: + + friend class Device_list; + friend class List; + Device(Entrypoint & ep, Platform::Connection & plat, Xml_node & xml, @@ -108,23 +124,12 @@ class Lx_kit::Device : List::Element Platform::Connection & _platform; Name const _name; Type const _type; - List _io_mems {}; - List _io_ports {}; - List _irqs {}; - List _clocks {}; - Constructible _pdev {}; - - template - void _for_each_io_mem(FN const & fn) { - for (Io_mem * i = _io_mems.first(); i; i = i->next()) fn(*i); } - - template - void _for_each_io_port(FN const & fn) { - for (Io_port * i = _io_ports.first(); i; i = i->next()) fn(*i); } - - template - void _for_each_irq(FN const & fn) { - for (Irq * i = _irqs.first(); i; i = i->next()) fn(*i); } + List _io_mems {}; + List _io_ports {}; + List _irqs {}; + List _clocks {}; + Constructible _pci_config {}; + Constructible _pdev {}; template void _for_each_clock(FN const & fn) { @@ -133,7 +138,23 @@ class Lx_kit::Device : List::Element public: const char * compatible(); - const char * name(); + Name name(); + + template + void for_each_io_mem(FN const & fn) { + for (Io_mem * i = _io_mems.first(); i; i = i->next()) fn(*i); } + + template + void for_each_io_port(FN const & fn) { + for (Io_port * i = _io_ports.first(); i; i = i->next()) fn(*i); } + + template + void for_each_irq(FN const & fn) { + for (Irq * i = _irqs.first(); i; i = i->next()) fn(*i); } + + template + void for_pci_config(FN const & fn) { + if (_pci_config.constructed()) fn(*_pci_config); } void enable(); clk * clock(const char * name); @@ -163,12 +184,21 @@ class Lx_kit::Device_list : List Platform::Connection & _platform; + void _handle_signal() {} + public: template void for_each(FN const & fn) { for (Device * d = first(); d; d = d->next()) fn(*d); } + template + void with_xml(FN const & fn) + { + _platform.update(); + _platform.with_xml([&] (Xml_node & xml) { fn(xml); }); + } + Device_list(Entrypoint & ep, Heap & heap, Platform::Connection & platform); diff --git a/repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/connection.h b/repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/connection.h deleted file mode 100644 index 8ff8aba1a4..0000000000 --- a/repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/connection.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * \brief Dummy - platform session device interface - * \author Stefan Kalkowski - * \date 2022-01-07 - */ - -/* - * Copyright (C) 2021 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _PLATFORM_SESSION__CONNECTION_H_ -#define _PLATFORM_SESSION__CONNECTION_H_ - -#include -#include -#include -#include -#include - -namespace Platform { - struct Connection; - class Dma_buffer; - - using namespace Genode; -} - -#define Platform Legacy_platform -#include -#undef Platform - - -struct Platform::Connection -{ - Env &_env; - Region_map &_rm { _env.rm() }; - char _devices_node_buffer[4096u] { }; - Constructible _devices_node { }; - - Constructible _legacy_platform { }; - struct Device - { - using Name = String<16>; - - Name name { }; - Legacy_platform::Device_capability cap { }; - - Device(Name const &name, Legacy_platform::Device_capability cap) - : name { name }, cap { cap } { } - }; - - enum : unsigned char { MAX_DEVICES = 4 }; - Constructible _devices_list[MAX_DEVICES] { }; - - Legacy_platform::Device_capability device_cap(char const *name); - - Connection(Env &); - - /******************************** - ** Platform session interface ** - ********************************/ - - void update(); - - template void with_xml(FN const & fn) - { - if (_devices_node.constructed()) - fn(*_devices_node); - } - - Ram_dataspace_capability alloc_dma_buffer(size_t size, Cache cache); - - void free_dma_buffer(Ram_dataspace_capability); - - addr_t dma_addr(Ram_dataspace_capability); - - template - auto retry_with_upgrade(Ram_quota ram, Cap_quota caps, FUNC func) -> decltype(func()) - { - return _legacy_platform->retry_with_upgrade(ram, caps, func); - } -}; - - -#endif /* _PLATFORM_SESSION__CONNECTION_H_ */ diff --git a/repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/device.h b/repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/device.h deleted file mode 100644 index babf70c672..0000000000 --- a/repos/dde_linux/src/include/spec/x86/lx_kit/platform_session/device.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * \brief Dummy - platform session device interface - * \author Stefan Kalkowski - * \date 2022-01-07 - */ - -/* - * Copyright (C) 2021 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _PLATFORM_SESSION__DEVICE_H_ -#define _PLATFORM_SESSION__DEVICE_H_ - -/* Genode includes */ -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace Platform { - struct Connection; - class Device; - - using namespace Genode; -} - - -class Platform::Device : Interface, Noncopyable -{ - public: - - struct Range { addr_t start; size_t size; }; - - struct Mmio; - struct Io_port_range; - struct Irq; - struct Config_space; - - using Name = String<64>; - - private: - - Connection &_platform; - Legacy_platform::Device_capability _device_cap { }; - Name _name { }; - unsigned _class_code { }; - - public: - - int _bar_checked_for_size[6] { }; - - struct Index { unsigned value; }; - - explicit Device(Connection &platform) - : _platform { platform } { } - - struct Type { String<64> name; }; - - Device(Connection &platform, Type type); - - Device(Connection &platform, Name name); - - ~Device() { } - - Name const &name() const - { - return _name; - } -}; - - -class Platform::Device::Mmio : Range -{ - public: - - struct Index { unsigned value; }; - - private: - - Constructible _attached_ds { }; - - void *_local_addr(); - - Device &_device; - Index _index; - - public: - - Mmio(Device &device, Index index) - : _device { device }, _index { index } { } - - explicit Mmio(Device &device) - : _device { device }, _index { ~0u } { } - - size_t size() const; - - template - T *local_addr() { return reinterpret_cast(_local_addr()); } -}; - - -class Platform::Device::Io_port_range : Noncopyable -{ - public: - - struct Index { unsigned value; }; - - private: - - Device &_device; - Index _index; - - Constructible _io_port { }; - - public: - - Io_port_range(Device &device, Index index); - - explicit Io_port_range(Device &device) - : _device { device }, _index { ~0u } { } - - uint8_t inb(uint16_t addr); - uint16_t inw(uint16_t addr); - uint32_t inl(uint16_t addr); - - void outb(uint16_t addr, uint8_t val); - void outw(uint16_t addr, uint16_t val); - void outl(uint16_t addr, uint32_t val); -}; - - -class Platform::Device::Irq : Noncopyable -{ - public: - - struct Index { unsigned value; }; - - private: - - Device &_device; - Index _index; - - Constructible _irq { }; - - public: - - Irq(Device &device, Index index); - - explicit Irq(Device &device) - : _device { device }, _index { ~0u } { } - - void ack(); - void sigh(Signal_context_capability); - void sigh_omit_initial_signal(Signal_context_capability); -}; - - -class Platform::Device::Config_space : Noncopyable -{ - public: - - Device &_device; - - enum class Access_size : unsigned { ACCESS_8BIT, ACCESS_16BIT, ACCESS_32BIT }; - - Config_space(Device &device) : _device { device } { } - - unsigned read(unsigned char address, Access_size size); - void write(unsigned char address, unsigned value, Access_size size); -}; - - -#endif /* _PLATFORM_SESSION__DEVICE_H_ */ diff --git a/repos/dde_linux/src/lib/lx_emul/pci.cc b/repos/dde_linux/src/lib/lx_emul/pci.cc new file mode 100644 index 0000000000..713492293a --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/pci.cc @@ -0,0 +1,104 @@ +/* + * \brief Lx_emul backend for PCI devices + * \author Stefan Kalkowski + * \date 2022-05-23 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include +#include +#include +#include + +extern "C" void lx_emul_pci_enable(const char * const name) +{ + using namespace Lx_kit; + + env().devices.for_each([&] (Device & d) { + if (d.name() == name) d.enable(); }); +}; + + +extern "C" void +lx_emul_pci_for_each_resource(const char * const name, void * dev, + lx_emul_add_resource_callback_t fn) +{ + using namespace Lx_kit; + using namespace Genode; + using namespace Pci; + + env().devices.for_each([&] (Device & d) { + if (d.name() != name) + return; + + d.for_each_io_mem([&] (Device::Io_mem & io_mem) { + fn(dev, io_mem.pci_bar, io_mem.addr, io_mem.size, 0); + }); + + d.for_each_io_port([&] (Device::Io_port & io_port) { + fn(dev, io_port.pci_bar, io_port.addr, io_port.size, 1); + }); + }); +} + + +extern "C" void +lx_emul_pci_for_each_device(void * bus, lx_emul_add_device_callback_t fn) +{ + using namespace Lx_kit; + using namespace Genode; + using namespace Pci; + + unsigned num = 0; + env().devices.for_each([&] (Device & d) { + unsigned irq = 0; + d.for_each_irq([&] (Device::Irq & i) { + if (!irq) irq = i.number; }); + + d.for_pci_config([&] (Device::Pci_config & cfg) { + fn(bus, num++, d.name().string(), cfg.vendor_id, cfg.device_id, + cfg.sub_v_id, cfg.sub_d_id, cfg.class_code, cfg.rev, irq); + }); + }); +} + + +static const char * lx_emul_pci_final_fixups[] = { + "__pci_fixup_final_quirk_usb_early_handoff", + "END_OF_PCI_FIXUPS" +}; + + +extern "C" __attribute__((weak)) int inhibit_pci_fixup(char const *) +{ + return 0; +} + + +extern "C" void lx_emul_register_pci_fixup(void (*fn)(struct pci_dev*), const char * name) +{ + if (inhibit_pci_fixup(name)) + return; + + for (unsigned i = 0; i < (sizeof(lx_emul_pci_final_fixups) / sizeof(char*)); + i++) { + if (Genode::strcmp(name, lx_emul_pci_final_fixups[i]) == 0) { + Lx_kit::env().pci_fixup_calls.add(fn); + return; + } + } + Genode::error(__func__, " ignore unkown PCI fixup '", name, "'"); +} + + +extern "C" void lx_emul_execute_pci_fixup(struct pci_dev *pci_dev) +{ + Lx_kit::env().pci_fixup_calls.execute(pci_dev); +} diff --git a/repos/dde_linux/src/lib/lx_emul/pci_bus.c b/repos/dde_linux/src/lib/lx_emul/pci_bus.c new file mode 100644 index 0000000000..ec0fe9691d --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/pci_bus.c @@ -0,0 +1,199 @@ +/* + * \brief PCI backend + * \author Josef Soentgen + * \date 2022-05-10 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include +#include + +#include +#include +#include + + +extern void lx_backtrace(void); + + +int arch_probe_nr_irqs(void) +{ + /* needed for 'irq_get_irq_data()' in 'pci_assign_irq()' below */ + return 256; +} + + +static const struct attribute_group *pci_dev_attr_groups[] = { + NULL, +}; + + +const struct device_type pci_dev_type = { + .groups = pci_dev_attr_groups, +}; + + +extern const struct device_type pci_dev_type; + + +static struct pci_bus *_pci_bus; + + +void * lx_emul_pci_root_bus() +{ + return _pci_bus; +} + + +static struct device * host_bridge_device = NULL; +extern struct device * pci_get_host_bridge_device(struct pci_dev * dev); +struct device * pci_get_host_bridge_device(struct pci_dev * dev) +{ + return host_bridge_device; +} + + +static struct pci_dev *_pci_alloc_dev(struct pci_bus *bus) +{ + struct pci_dev *dev; + + dev = kzalloc(sizeof(struct pci_dev), GFP_KERNEL); + if (!dev) + return NULL; + + INIT_LIST_HEAD(&dev->bus_list); + dev->dev.type = &pci_dev_type; + dev->bus = bus; + + return dev; +} + + +static void pci_add_resource_to_device_callback(void * data, + unsigned number, + unsigned long addr, + unsigned long size, + int io_port) +{ + struct pci_dev * dev = (struct pci_dev*) data; + dev->resource[number].start = addr; + dev->resource[number].end = dev->resource[number].start + size - 1; + if (io_port) + dev->resource[number].flags |= IORESOURCE_IO; +} + + +static void pci_add_single_device_callback(void * data, + unsigned number, + char const * const name, + u16 vendor_id, + u16 device_id, + u16 sub_vendor, + u16 sub_device, + u32 class_code, + u8 revision, + unsigned irq) +{ + struct pci_bus * bus = (struct pci_bus*) data; + struct pci_dev * dev = _pci_alloc_dev(bus); + + if (!dev) { + printk("Error: out of memory, cannot allocate pci device %s\n", name); + return; + } + + dev->devfn = number * 8; + dev->vendor = vendor_id; + dev->device = device_id; + dev->subsystem_vendor = sub_vendor; + dev->subsystem_device = sub_device; + dev->irq = irq; + dev->dma_mask = 0xffffffff; + dev->dev.bus = &pci_bus_type; + dev->revision = revision; + dev->class = class_code; + dev->current_state = PCI_UNKNOWN; + + lx_emul_pci_for_each_resource(name, dev, + pci_add_resource_to_device_callback); + + list_add_tail(&dev->bus_list, &bus->devices); + + device_initialize(&dev->dev); + + dev_set_name(&dev->dev, name); + dev->dev.dma_mask = &dev->dma_mask; + + if (number == 0) { /* host bridge */ + host_bridge_device = &dev->dev; + bus->bridge = &dev->dev; + } + + dev->match_driver = false; + if (device_add(&dev->dev)) { + list_del(&dev->bus_list); + kfree(dev); + printk("Error: could not add pci device %s\n", name); + return; + } + + lx_emul_execute_pci_fixup(dev); + + dev->match_driver = true; + if (device_attach(&dev->dev)) { + list_del(&dev->bus_list); + kfree(dev); + printk("Error: could not attach pci device %s\n", name); + return; + } +} + + +static int __init pci_subsys_init(void) +{ + struct pci_bus *b; + struct pci_sysdata *sd; + + /* pci_alloc_bus(NULL) */ + b = kzalloc(sizeof (struct pci_bus), GFP_KERNEL); + if (!b) + return -ENOMEM; + + sd = kzalloc(sizeof (struct pci_sysdata), GFP_KERNEL); + if (!sd) { + kfree(b); + return -ENOMEM; + } + + /* needed by intel_fb */ + sd->domain = 0; + + b->sysdata = sd; + + INIT_LIST_HEAD(&b->node); + INIT_LIST_HEAD(&b->children); + INIT_LIST_HEAD(&b->devices); + INIT_LIST_HEAD(&b->slots); + INIT_LIST_HEAD(&b->resources); + b->max_bus_speed = PCI_SPEED_UNKNOWN; + b->cur_bus_speed = PCI_SPEED_UNKNOWN; + + _pci_bus = b; + + /* add host bridge device */ + pci_add_single_device_callback(b, 0, "00:00.0", 0x8086, 0x44, 0x17aa, 0x2193, 0x60000, 2, 0); + + /* attach PCI devices */ + lx_emul_pci_for_each_device(b, pci_add_single_device_callback); + return 0; +} + + +subsys_initcall(pci_subsys_init); diff --git a/repos/dde_linux/src/lib/lx_emul/pci_config_space.cc b/repos/dde_linux/src/lib/lx_emul/pci_config_space.cc deleted file mode 100644 index 3fb22b4c72..0000000000 --- a/repos/dde_linux/src/lib/lx_emul/pci_config_space.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* - * \brief Lx_emul backend for accessing PCI(e) config space - * \author Josef Soentgen - * \date 2022-01-18 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#include -#include - - -using Device_name = Genode::String<16>; - -template -static Device_name to_string(T const &arg, TAIL &&... args) -{ - return Device_name(arg, args...); -} - - -static Device_name assemble(unsigned bus, unsigned devfn) -{ - using namespace Genode; - return to_string("pci-", - Hex(bus, Hex::OMIT_PREFIX), ":", - Hex((devfn >> 3) & 0x1fu, Hex::OMIT_PREFIX), ".", - Hex(devfn & 0x7u, Hex::OMIT_PREFIX)); -} - - -int lx_emul_pci_read_config(unsigned bus, unsigned devfn, - unsigned reg, unsigned len, unsigned *val) -{ - using namespace Lx_kit; - using namespace Genode; - - Device_name name = assemble(bus, devfn); - - bool result = false; - bool matched = false; - - env().devices.for_each([&] (Device & d) { - matched = name == d.name(); - if (matched && val) - result = d.read_config(reg, len, val); - }); - - if (!result && matched) - error("could not read config space register ", Hex(reg)); - - return result ? 0 : -1; -} - - -int lx_emul_pci_write_config(unsigned bus, unsigned devfn, - unsigned reg, unsigned len, unsigned val) -{ - using namespace Lx_kit; - using namespace Genode; - - Device_name name = assemble(bus, devfn); - - bool result = false; - bool matched = false; - env().devices.for_each ([&] (Device & d) { - matched = name == d.name(); - if (matched) - result = d.write_config(reg, len, val); - }); - - if (!result && matched) - error("could not write config space register ", Hex(reg), - " with ", Hex(val)); - - return result ? 0 : -1; -} diff --git a/repos/dde_linux/src/lib/lx_emul/pci_init.cc b/repos/dde_linux/src/lib/lx_emul/pci_init.cc deleted file mode 100644 index b20b2b1e59..0000000000 --- a/repos/dde_linux/src/lib/lx_emul/pci_init.cc +++ /dev/null @@ -1,46 +0,0 @@ -/* - * \brief Lx_emul backend for PCI fixup calls - * \author Josef Soentgen - * \date 2022-02-04 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#include -#include -#include - -#include - - -extern "C" __attribute__((weak)) int inhibit_pci_fixup(char const *) -{ - return 0; -} - - -extern "C" void lx_emul_register_pci_fixup(void (*fn)(struct pci_dev*), const char * name) -{ - if (inhibit_pci_fixup(name)) - return; - - for (unsigned i = 0; i < (sizeof(lx_emul_pci_final_fixups) / sizeof(char*)); - i++) { - if (Genode::strcmp(name, lx_emul_pci_final_fixups[i]) == 0) { - Lx_kit::env().pci_fixup_calls.add(fn); - return; - } - } - Genode::error(__func__, " ignore unkown PCI fixup '", name, "'"); -} - - -extern "C" void lx_emul_execute_pci_fixup(struct pci_dev *pci_dev) -{ - Lx_kit::env().pci_fixup_calls.execute(pci_dev); -} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/host-bridge.c b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/host-bridge.c new file mode 100644 index 0000000000..7d86619469 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/host-bridge.c @@ -0,0 +1,11 @@ +#include + +void pcibios_resource_to_bus(struct pci_bus *bus, struct pci_bus_region *region, + struct resource *res) +{ + region->start = res->start; + region->end = res->end; +} + + +void pci_put_host_bridge_device(struct device * dev) { } diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci-sysfs.c b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci-sysfs.c new file mode 100644 index 0000000000..174228d7de --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci-sysfs.c @@ -0,0 +1,34 @@ +#include + +static struct attribute *pci_bus_attrs[] = { + NULL, +}; + + +static const struct attribute_group pci_bus_group = { + .attrs = pci_bus_attrs, +}; + + +const struct attribute_group *pci_bus_groups[] = { + &pci_bus_group, + NULL, +}; + + +static struct attribute *pci_dev_attrs[] = { + NULL, +}; + + +static const struct attribute_group pci_dev_group = { + .attrs = pci_dev_attrs, +}; + + +const struct attribute_group *pci_dev_groups[] = { + &pci_dev_group, + NULL, +}; + + diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci.c b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci.c new file mode 100644 index 0000000000..f9fc4b7aae --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/pci.c @@ -0,0 +1,36 @@ +#include +#include + +int pci_enable_device(struct pci_dev * dev) +{ + lx_emul_pci_enable(dev_name(&dev->dev)); + return 0; +} + + +int pcim_enable_device(struct pci_dev *pdev) +{ + /* for now ignore devres */ + return pci_enable_device(pdev); +} + + +void pci_set_master(struct pci_dev * dev) { } + + +int pci_set_mwi(struct pci_dev * dev) +{ + return 1; +} + + +bool pci_dev_run_wake(struct pci_dev * dev) +{ + return false; +} + + +u8 pci_find_capability(struct pci_dev * dev,int cap) +{ + return 0; +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/search.c b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/search.c new file mode 100644 index 0000000000..ea12ef7fab --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/search.c @@ -0,0 +1,44 @@ +#include +#include + +struct pci_dev * pci_get_class(unsigned int class, struct pci_dev *from) +{ + struct pci_dev *dev; + struct pci_bus *bus = (struct pci_bus *) lx_emul_pci_root_bus(); + + /* + * Break endless loop (see 'intel_dsm_detect()') by only querying + * the bus on the first executuin. + */ + if (from) + return NULL; + + list_for_each_entry(dev, &bus->devices, bus_list) { + if (dev->class == class) { + return dev; + } + } + + return NULL; +} + + +struct pci_dev *pci_get_domain_bus_and_slot(int domain, unsigned int bus, + unsigned int devfn) +{ + struct pci_dev *dev; + struct pci_bus *pbus = (struct pci_bus *) lx_emul_pci_root_bus(); + + list_for_each_entry(dev, &pbus->devices, bus_list) { + if (dev->devfn == devfn && dev->class == 0x60000) + return dev; + } + + return NULL; +} + + +struct pci_dev * pci_get_device(unsigned int vendor,unsigned int device,struct pci_dev * from) +{ + return NULL; +} diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-irq.c b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-irq.c new file mode 100644 index 0000000000..51f668b44e --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-irq.c @@ -0,0 +1,24 @@ +#include +#include + +extern struct irq_chip dde_irqchip_data_chip; + + +void pci_assign_irq(struct pci_dev * dev) +{ + struct irq_data *irq_data; + + /* + * Be lazy and treat irq as hwirq as this is used by the + * dde_irqchip_data_chip for (un-)masking. + */ + irq_data = irq_get_irq_data(dev->irq); + + irq_data->hwirq = dev->irq; + + irq_set_chip_and_handler(dev->irq, &dde_irqchip_data_chip, + handle_level_irq); +} + + + diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-res.c b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-res.c new file mode 100644 index 0000000000..1d54d06eb9 --- /dev/null +++ b/repos/dde_linux/src/lib/lx_emul/shadow/drivers/pci/setup-res.c @@ -0,0 +1,11 @@ +#include + +resource_size_t __weak pcibios_align_resource(void *data, + const struct resource *res, + resource_size_t size, + resource_size_t align) +{ + return res->start; +} + + diff --git a/repos/dde_linux/src/lib/lx_emul/spec/x86/pci.c b/repos/dde_linux/src/lib/lx_emul/spec/x86/pci.c deleted file mode 100644 index 35d208d10d..0000000000 --- a/repos/dde_linux/src/lib/lx_emul/spec/x86/pci.c +++ /dev/null @@ -1,194 +0,0 @@ -/* - * \brief Linux kernel PCI - * \author Josef Soentgen - * \date 2022-01-14 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#include -#include - - -#include - -int arch_probe_nr_irqs(void) -{ - return 16; -} - - -#include - -static int x86_init_pci_init(void) -{ - return 1; -} - - -static void x86_init_pci_init_irq(void) { } - - -struct x86_init_ops x86_init = { - .pci = { - .init = x86_init_pci_init, - .init_irq = x86_init_pci_init_irq, - }, -}; - - -#include - -#include -#include -#include - -static int pci_raw_ops_read(unsigned int domain, unsigned int bus, unsigned int devfn, - int reg, int len, u32 *val) -{ - return lx_emul_pci_read_config(bus, devfn, (unsigned)reg, (unsigned)len, val); -} - - -static int pci_raw_ops_write(unsigned int domain, unsigned int bus, unsigned int devfn, - int reg, int len, u32 val) -{ - return lx_emul_pci_write_config(bus, devfn, (unsigned)reg, (unsigned)len, val); -} - - -const struct pci_raw_ops genode_raw_pci_ops = { - .read = pci_raw_ops_read, - .write = pci_raw_ops_write, -}; - -const struct pci_raw_ops *raw_pci_ops = &genode_raw_pci_ops; - - -static int pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value) -{ - return pci_raw_ops_read(0, bus->number, devfn, where, size, value); -} - - -static int pci_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value) -{ - return pci_raw_ops_write(0, bus->number, devfn, where, size, value); -} - - -struct pci_ops pci_root_ops = { - .read = pci_read, - .write = pci_write, -}; - - -#include - -static struct resource _dummy_parent; - -void pcibios_scan_root(int busnum) -{ - struct pci_bus *bus; - struct pci_sysdata *sd; - struct pci_dev *dev; - - LIST_HEAD(resources); - - sd = kzalloc(sizeof(*sd), GFP_KERNEL); - if (!sd) { - return; - } - sd->node = NUMA_NO_NODE; - pci_add_resource(&resources, &ioport_resource); - pci_add_resource(&resources, &iomem_resource); - - bus = pci_scan_root_bus(NULL, busnum, &pci_root_ops, sd, &resources); - - if (!bus) { - pci_free_resource_list(&resources); - kfree(sd); - return; - } - pci_bus_add_devices(bus); - - /* handle early quirks */ - list_for_each_entry(dev, &bus->devices, bus_list) { - - /* - * As pci_enable_resources() is only going to check if - * the parent of the resource is set register the dummy. - */ - struct resource *r; - int i; - for (i = 0; i < PCI_NUM_RESOURCES; i++) { - - r = &dev->resource[i]; - r->parent = &_dummy_parent; - } - - lx_emul_execute_pci_fixup(dev); - } -} - - -#include -#include - -extern struct irq_chip dde_irqchip_data_chip; - - -void pci_assign_irq(struct pci_dev * dev) -{ - struct irq_data *irq_data; - - /* - * Be lazy and treat irq as hwirq as this is used by the - * dde_irqchip_data_chip for (un-)masking. - */ - irq_data = irq_get_irq_data(dev->irq); - irq_data->hwirq = dev->irq; - - irq_set_chip_and_handler(dev->irq, &dde_irqchip_data_chip, - handle_level_irq); -} - - -#include - -unsigned long pci_mem_start = 0xaeedbabe; - -const struct attribute_group aspm_ctrl_attr_group[] = { 0 }; -const struct attribute_group pci_dev_vpd_attr_group = { }; - -struct pci_fixup __start_pci_fixups_early[] = { 0 }; -struct pci_fixup __end_pci_fixups_early[] = { 0 }; -struct pci_fixup __start_pci_fixups_header[] = { 0 }; -struct pci_fixup __end_pci_fixups_header[] = { 0 }; -struct pci_fixup __start_pci_fixups_final[] = { 0 }; -struct pci_fixup __end_pci_fixups_final[] = { 0 }; -struct pci_fixup __start_pci_fixups_enable[] = { 0 }; -struct pci_fixup __end_pci_fixups_enable[] = { 0 }; -struct pci_fixup __start_pci_fixups_resume[] = { 0 }; -struct pci_fixup __end_pci_fixups_resume[] = { 0 }; -struct pci_fixup __start_pci_fixups_resume_early[] = { 0 }; -struct pci_fixup __end_pci_fixups_resume_early[] = { 0 }; -struct pci_fixup __start_pci_fixups_suspend[] = { 0 }; -struct pci_fixup __end_pci_fixups_suspend[] = { 0 }; -struct pci_fixup __start_pci_fixups_suspend_late[] = { 0 }; -struct pci_fixup __end_pci_fixups_suspend_late[] = { 0 }; - -int pcibios_last_bus = -1; - - -extern int __init pcibios_init(void); -int __init pcibios_init(void) -{ - lx_emul_trace(__func__); - return 0; -} diff --git a/repos/dde_linux/src/lib/lx_kit/device.cc b/repos/dde_linux/src/lib/lx_kit/device.cc index 88e54b1dd4..de52007ed2 100644 --- a/repos/dde_linux/src/lib/lx_kit/device.cc +++ b/repos/dde_linux/src/lib/lx_kit/device.cc @@ -34,7 +34,7 @@ bool Device::Io_mem::match(addr_t addr, size_t size) bool Device::Io_port::match(uint16_t addr) { return (this->addr <= addr) && - ((this->addr + this->size) >= addr); + ((this->addr + this->size) > addr); } @@ -67,9 +67,9 @@ const char * Device::compatible() } -const char * Device::name() +Device::Name Device::name() { - return _name.string(); + return _name; } @@ -102,7 +102,7 @@ clk * Device::clock(unsigned idx) bool Device::io_mem(addr_t phys_addr, size_t size) { bool ret = false; - _for_each_io_mem([&] (Io_mem & io) { + for_each_io_mem([&] (Io_mem & io) { if (io.match(phys_addr, size)) ret = true; }); @@ -113,7 +113,7 @@ bool Device::io_mem(addr_t phys_addr, size_t size) void * Device::io_mem_local_addr(addr_t phys_addr, size_t size) { void * ret = nullptr; - _for_each_io_mem([&] (Io_mem & io) { + for_each_io_mem([&] (Io_mem & io) { if (!io.match(phys_addr, size)) return; @@ -132,7 +132,7 @@ bool Device::irq_unmask(unsigned number) { bool ret = false; - _for_each_irq([&] (Irq & irq) { + for_each_irq([&] (Irq & irq) { if (irq.number != number) return; @@ -156,7 +156,7 @@ void Device::irq_mask(unsigned number) if (!_pdev.constructed()) return; - _for_each_irq([&] (Irq & irq) { + for_each_irq([&] (Irq & irq) { if (irq.number != number) return; irq.session.destruct(); @@ -170,7 +170,7 @@ void Device::irq_ack(unsigned number) if (!_pdev.constructed()) return; - _for_each_irq([&] (Irq & irq) { + for_each_irq([&] (Irq & irq) { if (irq.number != number || !irq.session.constructed()) return; irq.session->ack(); @@ -181,7 +181,7 @@ void Device::irq_ack(unsigned number) bool Device::io_port(uint16_t addr) { bool ret = false; - _for_each_io_port([&] (Io_port & io) { + for_each_io_port([&] (Io_port & io) { if (io.match(addr)) ret = true; }); @@ -192,7 +192,7 @@ bool Device::io_port(uint16_t addr) uint8_t Device::io_port_inb(uint16_t addr) { uint8_t ret = 0; - _for_each_io_port([&] (Device::Io_port & io) { + for_each_io_port([&] (Device::Io_port & io) { if (!io.match(addr)) return; @@ -209,7 +209,7 @@ uint8_t Device::io_port_inb(uint16_t addr) uint16_t Device::io_port_inw(uint16_t addr) { uint16_t ret = 0; - _for_each_io_port([&] (Device::Io_port & io) { + for_each_io_port([&] (Device::Io_port & io) { if (!io.match(addr)) return; @@ -226,7 +226,7 @@ uint16_t Device::io_port_inw(uint16_t addr) uint32_t Device::io_port_inl(uint16_t addr) { uint32_t ret = 0; - _for_each_io_port([&] (Device::Io_port & io) { + for_each_io_port([&] (Device::Io_port & io) { if (!io.match(addr)) return; @@ -242,7 +242,7 @@ uint32_t Device::io_port_inl(uint16_t addr) void Device::io_port_outb(uint16_t addr, uint8_t val) { - _for_each_io_port([&] (Device::Io_port & io) { + for_each_io_port([&] (Device::Io_port & io) { if (!io.match(addr)) return; @@ -256,7 +256,7 @@ void Device::io_port_outb(uint16_t addr, uint8_t val) void Device::io_port_outw(uint16_t addr, uint16_t val) { - _for_each_io_port([&] (Device::Io_port & io) { + for_each_io_port([&] (Device::Io_port & io) { if (!io.match(addr)) return; @@ -270,7 +270,7 @@ void Device::io_port_outw(uint16_t addr, uint16_t val) void Device::io_port_outl(uint16_t addr, uint32_t val) { - _for_each_io_port([&] (Device::Io_port & io) { + for_each_io_port([&] (Device::Io_port & io) { if (!io.match(addr)) return; @@ -317,16 +317,18 @@ Device::Device(Entrypoint & ep, { unsigned i = 0; xml.for_each_sub_node("io_mem", [&] (Xml_node node) { - addr_t addr = node.attribute_value("phys_addr", 0UL); - size_t size = node.attribute_value("size", 0UL); - _io_mems.insert(new (heap) Io_mem(i++, addr, size)); + addr_t addr = node.attribute_value("phys_addr", 0UL); + size_t size = node.attribute_value("size", 0UL); + unsigned bar = node.attribute_value("pci_bar", 0U); + _io_mems.insert(new (heap) Io_mem(i++, addr, size, bar)); }); i = 0; - xml.for_each_sub_node("io_port", [&] (Xml_node node) { + xml.for_each_sub_node("io_port_range", [&] (Xml_node node) { uint16_t addr = node.attribute_value("phys_addr", 0U); uint16_t size = node.attribute_value("size", 0U); - _io_ports.insert(new (heap) Io_port(i++, addr, size)); + unsigned bar = node.attribute_value("pci_bar", 0U); + _io_ports.insert(new (heap) Io_port(i++, addr, size, bar)); }); i = 0; @@ -339,6 +341,17 @@ Device::Device(Entrypoint & ep, Device::Name name = node.attribute_value("name", Device::Name()); _clocks.insert(new (heap) Device::Clock(i++, name)); }); + + xml.for_each_sub_node("pci-config", [&] (Xml_node node) { + using namespace Pci; + _pci_config.construct(Pci_config{ + node.attribute_value("vendor_id", 0xffff), + node.attribute_value("device_id", 0xffff), + node.attribute_value("class", 0xff), + node.attribute_value("revision", 0xff), + node.attribute_value("sub_vendor_id", 0xffff), + node.attribute_value("sub_device_id", 0xffff)}); + }); } @@ -352,9 +365,26 @@ Device_list::Device_list(Entrypoint & ep, : _platform(platform) { - _platform.with_xml([&] (Xml_node & xml) { - xml.for_each_sub_node("device", [&] (Xml_node node) { - insert(new (heap) Device(ep, _platform, node, heap)); + bool initialized = false; + Constructible> handler {}; + + while (!initialized) { + _platform.update(); + _platform.with_xml([&] (Xml_node & xml) { + if (!xml.num_sub_nodes()) { + if (!handler.constructed()) { + handler.construct(ep, *this, &Device_list::_handle_signal); + _platform.sigh(*handler); + } + ep.wait_and_dispatch_one_io_signal(); + } else { + _platform.sigh(Signal_context_capability()); + handler.destruct(); + xml.for_each_sub_node("device", [&] (Xml_node node) { + insert(new (heap) Device(ep, _platform, node, heap)); + }); + initialized = true; + } }); - }); + } } diff --git a/repos/dde_linux/src/lib/lx_kit/spec/x86/platform.cc b/repos/dde_linux/src/lib/lx_kit/spec/x86/platform.cc deleted file mode 100644 index c1ea9d3fbb..0000000000 --- a/repos/dde_linux/src/lib/lx_kit/spec/x86/platform.cc +++ /dev/null @@ -1,581 +0,0 @@ -/* - * \brief Legacy platform session wrapper - * \author Josef Soentgen - * \date 2022-01-14 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -/* Genode includes */ -#include -#include - -/* DDE includes */ -#include -#include -#include - - -using namespace Genode; - - -using Str = String<16>; - -template -static Str to_string(T const &arg, TAIL &&... args) -{ - return Str(arg, args...); -} - - -template -static void scan_resources(Legacy_platform::Device &device, - FN const &fn) -{ - using R = Legacy_platform::Device::Resource; - for (unsigned resource_id = 0; resource_id < 6; resource_id++) { - - R const resource = device.resource(resource_id); - if (resource.type() != R::INVALID) - fn(resource_id, resource); - } -} - - -static Str create_device_node(Xml_generator &xml, - Legacy_platform::Device &device) -{ - using namespace Genode; - - /* start arbitrarily and count up */ - static unsigned char irq = 8; - - /* start arbitrarily at the dev 1 for the first device */ - static unsigned char bdf[3] = { 0, 1, 0 }; - - /* start arbitrarily at 1 GiB */ - static unsigned long mmio_phys_addr = 0x40000000; - - unsigned char pbdf[3]; - device.bus_address(&pbdf[0], &pbdf[1], &pbdf[2]); - - /* - * The host-bridge is only required by the Intel framebuffer - * driver and has to be located at 00:00.0. For every other - * type of device we simply count upwards. - */ - unsigned char vbdf[3] = { 0, 0, 0 }; - unsigned const class_code = device.class_code() >> 8; - if (class_code != 0x600 /* host-bridge */) { - vbdf[0] = bdf[0]; vbdf[1] = bdf[1]; vbdf[2] = bdf[2]; - bdf[1]++; - } - - log("override physical BDF ", - Hex(pbdf[0], Hex::OMIT_PREFIX), ":", - Hex(pbdf[1], Hex::OMIT_PREFIX), ".", - Hex(pbdf[2], Hex::OMIT_PREFIX), " -> ", - Hex(vbdf[0], Hex::OMIT_PREFIX), ":", - Hex(vbdf[1], Hex::OMIT_PREFIX), ".", - Hex(vbdf[2], Hex::OMIT_PREFIX)); - - Str name = to_string("pci-", - Hex(vbdf[0], Hex::OMIT_PREFIX), ":", - Hex(vbdf[1], Hex::OMIT_PREFIX), ".", - Hex(vbdf[2], Hex::OMIT_PREFIX)); - - xml.node("device", [&] () { - xml.attribute("name", name); - xml.attribute("type", "pci"); - - xml.node("irq", [&] () { - xml.attribute("number", irq++); - }); - - using R = Legacy_platform::Device::Resource; - - scan_resources(device, [&] (unsigned id, R const &r) { - - bool const memory = r.type() == R::MEMORY; - - if (memory) { - xml.node("io_mem", [&] () { - xml.attribute("phys_addr", to_string(Hex(mmio_phys_addr))); - xml.attribute("size", to_string(Hex(r.size()))); - xml.attribute("bar", id); - }); - - mmio_phys_addr += align_addr(r.size(), 12); - } else { - - xml.node("io_port", [&] () { - xml.attribute("phys_addr", to_string(Hex(r.bar()))); - xml.attribute("size", to_string(Hex(r.size()))); - xml.attribute("bar", id); - }); - } - }); - }); - - return name; -} - - -Platform::Connection::Connection(Env &env) -: - _env { env } -{ - try { - _legacy_platform.construct(env); - } catch (...) { - error("could not construct legacy platform connection"); - throw; - } - - /* empirically determined */ - _legacy_platform->upgrade_ram(32768); - _legacy_platform->upgrade_caps(8); - - Xml_generator xml { _devices_node_buffer, - sizeof (_devices_node_buffer), - "devices", [&] () { - _legacy_platform->with_upgrade([&] () { - - /* scan the virtual bus but limit to MAX_DEVICES */ - Legacy_platform::Device_capability cap { }; - for (auto &dev : _devices_list) { - - cap = _legacy_platform->next_device(cap, 0x0u, 0x0u); - if (!cap.valid()) break; - - Legacy_platform::Device_client device { cap }; - Str name = create_device_node(xml, device); - dev.construct(name, cap); - } - }); - } }; - - _devices_node.construct(_devices_node_buffer, - sizeof (_devices_node_buffer)); -} - - -Legacy_platform::Device_capability -Platform::Connection::device_cap(char const *name) -{ - for (auto const &dev : _devices_list) { - if (!dev.constructed()) - continue; - - if (dev->name == name) - return dev->cap; - } - - return Legacy_platform::Device_capability(); -} - - -void Platform::Connection::update() { } - - -Ram_dataspace_capability -Platform::Connection::alloc_dma_buffer(size_t size, Cache) -{ - return _legacy_platform->with_upgrade([&] () { - return _legacy_platform->alloc_dma_buffer(size, Cache::UNCACHED); - }); -} - - -void Platform::Connection::free_dma_buffer(Ram_dataspace_capability ds_cap) -{ - _legacy_platform->free_dma_buffer(ds_cap); -} - - -addr_t Platform::Connection::dma_addr(Ram_dataspace_capability ds_cap) -{ - return _legacy_platform->dma_addr(ds_cap); -} - - -static Legacy_platform::Device::Access_size convert(Platform::Device::Config_space::Access_size size) -{ - using PAS = Platform::Device::Config_space::Access_size; - using LAS = Legacy_platform::Device::Access_size; - switch (size) { - case PAS::ACCESS_8BIT: - return LAS::ACCESS_8BIT; - case PAS::ACCESS_16BIT: - return LAS::ACCESS_16BIT; - case PAS::ACCESS_32BIT: - return LAS::ACCESS_32BIT; - } - - return LAS::ACCESS_8BIT; -} - - -template -static void apply(Platform::Device const &device, - Xml_node const &devices, - FN const &fn) -{ - using namespace Genode; - using N = Platform::Device::Name; - - auto lookup_device = [&] (Xml_node const &node) { - if (node.attribute_value("name", N()) == device.name()) - fn(node); - }; - - devices.for_each_sub_node("device", lookup_device); -} - - -static unsigned bar_size(Platform::Device const &dev, - Xml_node const &devices, unsigned bar) -{ - if (bar > 6) - return 0; - - using namespace Genode; - - unsigned val = 0; - apply(dev, devices, [&] (Xml_node device) { - device.for_each_sub_node("io_mem", [&] (Xml_node node) { - if (node.attribute_value("bar", 6u) != bar) - return; - - val = node.attribute_value("size", 0u); - }); - - device.for_each_sub_node("io_port", [&] (Xml_node node) { - if (node.attribute_value("bar", 6u) != bar) - return; - - val = node.attribute_value("size", 0u); - }); - }); - - return val; -} - - -static unsigned bar_address(Platform::Device const &dev, - Xml_node const &devices, unsigned bar) -{ - if (bar > 6) - return 0; - - using namespace Genode; - - unsigned val = 0; - apply(dev, devices, [&] (Xml_node device) { - device.for_each_sub_node("io_mem", [&] (Xml_node node) { - if (node.attribute_value("bar", 6u) != bar) - return; - - val = node.attribute_value("phys_addr", 0u); - }); - - device.for_each_sub_node("io_port", [&] (Xml_node node) { - if (node.attribute_value("bar", 6u) != bar) - return; - - val = node.attribute_value("phys_addr", 0u); - }); - }); - - return val; -} - - -static unsigned char irq_line(Platform::Device const &dev, - Xml_node const &devices) -{ - enum : unsigned char { INVALID_IRQ_LINE = 0xffu }; - unsigned char irq = INVALID_IRQ_LINE; - - apply(dev, devices, [&] (Xml_node device) { - device.for_each_sub_node("irq", [&] (Xml_node node) { - irq = node.attribute_value("number", (unsigned char)INVALID_IRQ_LINE); - }); - }); - - return irq; -} - - -Platform::Device::Device(Connection &platform, Type) -: _platform { platform } { } - - -Platform::Device::Device(Connection &platform, Name name) -: - _platform { platform }, - _device_cap { _platform.device_cap(name.string()) }, - _name { name } -{ - if (!_device_cap.valid()) { - error(__func__, ": could not get device capability"); - throw -1; - } - - Legacy_platform::Device_client device(_device_cap); - _class_code = device.class_code() >> 8; -} - - -unsigned Platform::Device::Config_space::read(unsigned char address, - Access_size size) -{ - /* 32bit BARs only for now */ - if (address >= 0x10 && address <= 0x24) { - unsigned const bar = (address - 0x10) / 4; - if (_device._bar_checked_for_size[bar]) { - _device._bar_checked_for_size[bar] = 0; - return bar_size(_device, *_device._platform._devices_node, bar); - } - - return bar_address(_device, *_device._platform._devices_node, bar); - } - - /* - * If any PCI device reports 0 as interrupt PIN, drivers may try to force - * MSI setup (e.g., xhci). So, we clamp the interrupt PIN to 1 to let - * drivers finish initialization and don't bother the platform driver. - */ - if (address == 0x3d) - return 0x01; - - if (address == 0x3c) - return irq_line(_device, *_device._platform._devices_node); - - if (address == 0x34) - return 0u; - - Legacy_platform::Device::Access_size const as = convert(size); - Legacy_platform::Device_client device { _device._device_cap }; - return device.config_read(address, as); -} - - -void Platform::Device::Config_space::write(unsigned char address, - unsigned value, - Access_size size) -{ - /* 32bit BARs only for now */ - if (address >= 0x10 && address <= 0x24) { - unsigned const bar = (address - 0x10) / 4; - if (value == 0xffffffffu) - _device._bar_checked_for_size[bar] = 1; - return; - } - - enum { - CLASS_CODE_USB = 0xc03, - }; - - switch(_device._class_code) { - case CLASS_CODE_USB: - /* reject writes to unknown addresses */ - switch (address) { - case 0x04: - /* - * Doing this multiple times induces multiple "assignment of PCI - * device" diasgnostics currently. - */ - /* command register (value for enable io, memory, bus master) */ - value = 7; - break; - - /* - * Write in [0x40,0xff] should be okay if there are is no capability - * list (status register bit 4 + capability list pointer). Otherwise, - * writes into capability-list entries should be rejected. - */ - - case 0xc0: /* UHCI BIOS handoff (UHCI_USBLEGSUP) */ break; - case 0xc4: /* UHCI INTEL resume-enable (USBRES_INTEL) */ break; - case 0x60 ... 0x6f: /* EHCI BIOS handoff (just empiric, address not fixed) */ break; - - default: - return; - } - break; - } - - Legacy_platform::Device::Access_size const as = convert(size); - Legacy_platform::Device_client device { _device._device_cap }; - device.config_write(address, value, as); -} - - -size_t Platform::Device::Mmio::size() const -{ - return _attached_ds.constructed() ? _attached_ds->size() : 0; -} - - -void *Platform::Device::Mmio::_local_addr() -{ - if (!_attached_ds.constructed()) { - Legacy_platform::Device_client device { _device._device_cap }; - - Cache cache = Cache::UNCACHED; - - { - uint8_t phys_bar_id = 0; - - /* convert virtual bar id into phys bar id */ - for (unsigned virt_id = 0, i = 0; i < 6; i++) { - auto const type = device.resource(i).type(); - if (type == Legacy_platform::Device::Resource::Type::MEMORY) { - virt_id ++; - phys_bar_id = uint8_t(i); - } - if (virt_id > _index.value) - break; - } - - if (device.resource(phys_bar_id).prefetchable()) - cache = Cache::WRITE_COMBINED; - - auto const r = device.resource(phys_bar_id); - Range::start = (r.base() & 0xfffu); - } - - Io_mem_session_capability io_mem_cap = - device.io_mem(uint8_t(_index.value), cache); - - Io_mem_session_client io_mem_client(io_mem_cap); - - _attached_ds.construct(Lx_kit::env().env.rm(), - io_mem_client.dataspace()); - } - - return (void*)(_attached_ds->local_addr() + Range::start); -} - - -Platform::Device::Io_port_range::Io_port_range(Device &device, Index index) -: - _device { device }, - _index { index } -{ - Legacy_platform::Device_client client { _device._device_cap }; - - _io_port.construct(client.io_port((uint8_t)index.value)); -} - - -unsigned char Platform::Device::Io_port_range::inb(uint16_t addr) -{ - return _io_port->inb(addr); -} - - -unsigned short Platform::Device::Io_port_range::inw(uint16_t addr) -{ - return _io_port->inw(addr); -} - - -unsigned int Platform::Device::Io_port_range::inl(uint16_t addr) -{ - return _io_port->inl(addr); -} - - -void Platform::Device::Io_port_range::outb(uint16_t addr, uint8_t val) -{ - return _io_port->outb(addr, val); -} - - -void Platform::Device::Io_port_range::outw(uint16_t addr, uint16_t val) -{ - return _io_port->outw(addr, val); -} - - -void Platform::Device::Io_port_range::outl(uint16_t addr, uint32_t val) -{ - return _io_port->outl(addr, val); -} - - -Platform::Device::Irq::Irq(Platform::Device &device, Index index) -: - _device { device }, - _index { index } -{ - Legacy_platform::Device_client client { _device._device_cap }; - - _irq.construct(client.irq((uint8_t)index.value)); -} - -void Platform::Device::Irq::ack() -{ - _irq->ack_irq(); -} - - -void Platform::Device::Irq::sigh(Signal_context_capability sigh) -{ - _irq->sigh(sigh); - _irq->ack_irq(); -} - - -void Platform::Device::Irq::sigh_omit_initial_signal(Signal_context_capability sigh) -{ - _irq->sigh(sigh); -} - - -static Platform::Device::Config_space::Access_size access_size(unsigned len) -{ - using AS = Platform::Device::Config_space::Access_size; - AS as = AS::ACCESS_8BIT; - if (len == 4) as = AS::ACCESS_32BIT; - else if (len == 2) as = AS::ACCESS_16BIT; - else as = AS::ACCESS_8BIT; - - return as; -} - - -bool Lx_kit::Device::read_config(unsigned reg, unsigned len, unsigned *val) -{ - if (!_pdev.constructed()) - enable(); - - if (!val) - return false; - - using AS = Platform::Device::Config_space::Access_size; - AS const as = access_size(len); - - *val = Platform::Device::Config_space(*_pdev).read((unsigned char)reg, as); - return true; -} - - -bool Lx_kit::Device::write_config(unsigned reg, unsigned len, unsigned val) -{ - if (!_pdev.constructed()) - return false; - - using AS = Platform::Device::Config_space::Access_size; - AS const as = access_size(len); - - Platform::Device::Config_space(*_pdev).write((unsigned char)reg, val, as); - return true; -} diff --git a/repos/pc/lib/import/import-pc_lx_emul.mk b/repos/pc/lib/import/import-pc_lx_emul.mk index 5f9b724e7f..55ab8d47ea 100644 --- a/repos/pc/lib/import/import-pc_lx_emul.mk +++ b/repos/pc/lib/import/import-pc_lx_emul.mk @@ -25,11 +25,16 @@ SRC_C += lx_emul/shadow/lib/devres.c SRC_C += lx_emul/shadow/lib/smp_processor_id.c SRC_C += lx_emul/shadow/mm/memblock.c SRC_C += lx_emul/shadow/mm/page_alloc.c -SRC_CC += lx_emul/pci_config_space.cc -SRC_CC += lx_emul/pci_init.cc +SRC_C += lx_emul/shadow/drivers/pci/host-bridge.c +SRC_C += lx_emul/shadow/drivers/pci/pci.c +SRC_C += lx_emul/shadow/drivers/pci/pci-sysfs.c +SRC_C += lx_emul/shadow/drivers/pci/search.c +SRC_C += lx_emul/shadow/drivers/pci/setup-irq.c +SRC_C += lx_emul/shadow/drivers/pci/setup-res.c +SRC_CC += lx_emul/pci.cc +SRC_CC += lx_emul/pci_bus.c SRC_CC += lx_kit/device.cc SRC_CC += lx_kit/memory_dma.cc -SRC_CC += lx_kit/spec/x86/platform.cc SRC_C += lx_emul/shadow/fs/sysfs/dir.c SRC_C += lx_emul/shadow/fs/sysfs/file.c diff --git a/repos/pc/lib/mk/wifi.inc b/repos/pc/lib/mk/wifi.inc index 1510384a19..54583be571 100644 --- a/repos/pc/lib/mk/wifi.inc +++ b/repos/pc/lib/mk/wifi.inc @@ -25,7 +25,6 @@ SRC_C += lx_socket_call.c SRC_C += $(notdir $(wildcard $(TARGET_LIB_DIR)/generated_dummies.c)) SRC_C += lx_emul/common_dummies.c -SRC_C += lx_emul/spec/x86/pci.c CC_C_OPT += -I$(LX_SRC_DIR)/drivers/net/wireless/intel/iwlwifi CC_C_OPT += -I$(LX_SRC_DIR)/include/linux diff --git a/repos/pc/recipes/api/pc_linux/content.mk b/repos/pc/recipes/api/pc_linux/content.mk index 3f5fd64d3a..690b3cc7f9 100644 --- a/repos/pc/recipes/api/pc_linux/content.mk +++ b/repos/pc/recipes/api/pc_linux/content.mk @@ -2,6 +2,10 @@ # Content hosted in the dde_linux repository # +content: include/pci +include/pci: + mkdir -p $(dir $@); cp -r $(GENODE_DIR)/repos/os/$@ $(dir $@) + MIRRORED_FROM_DDE_LINUX := src/lib/lx_emul \ src/lib/lx_kit \ src/include/lx_emul \ diff --git a/repos/pc/recipes/pkg/test_usb_host_drv-pc/archives b/repos/pc/recipes/pkg/test_usb_host_drv-pc/archives index 77ea7d26a7..373005556b 100644 --- a/repos/pc/recipes/pkg/test_usb_host_drv-pc/archives +++ b/repos/pc/recipes/pkg/test_usb_host_drv-pc/archives @@ -1,5 +1,6 @@ _/raw/test_usb_host_drv-pc _/src/acpi_drv +_/src/pci_decode _/src/pc_usb_host_drv _/src/platform_drv _/src/report_rom diff --git a/repos/pc/recipes/raw/test_usb_host_drv-pc/drivers.config b/repos/pc/recipes/raw/test_usb_host_drv-pc/drivers.config index 44e481bd46..08b2fbe9b4 100644 --- a/repos/pc/recipes/raw/test_usb_host_drv-pc/drivers.config +++ b/repos/pc/recipes/raw/test_usb_host_drv-pc/drivers.config @@ -15,6 +15,24 @@ + + + + + + + + + + + + + + + + + + @@ -28,33 +46,27 @@ - + - - - - - - - - - - - + + + + + + + + + + - - - - - - - + + + - - + @@ -65,11 +77,11 @@ - + - + diff --git a/repos/pc/run/intel_fb.run b/repos/pc/run/intel_fb.run index bcae18868a..83a5098c12 100644 --- a/repos/pc/run/intel_fb.run +++ b/repos/pc/run/intel_fb.run @@ -19,6 +19,9 @@ set use_top 0 set build_components { core init timer + drivers/acpi + drivers/platform + app/pci_decode drivers/framebuffer/intel/pc test/framebuffer server/report_rom @@ -31,9 +34,6 @@ set build_components { append_if $use_gpu build_components { drivers/gpu/intel } append_if $use_top build_components { app/top } -source ${genode_dir}/repos/base/run/platform_drv.inc -append_platform_drv_build_components - build $build_components create_boot_directory @@ -58,22 +58,86 @@ append config { - } + -append_platform_drv_config + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -append config { - - - - - - @@ -81,7 +145,7 @@ append config { - + @@ -221,13 +285,12 @@ install_config $config set boot_modules { core ld.lib.so init timer pc_intel_fb_drv intel_fb_controller test-framebuffer report_rom fs_rom vfs vfs.lib.so vfs_import.lib.so + platform_drv acpi_drv pci_decode } append_if $use_gpu boot_modules { intel_gpu_drv } append_if $use_top boot_modules { top } -append_platform_drv_boot_modules - build_boot_image $boot_modules if { [get_cmd_switch --autopilot] } { diff --git a/repos/pc/run/wifi.run b/repos/pc/run/wifi.run index 2e87c25e43..ef5df2b717 100644 --- a/repos/pc/run/wifi.run +++ b/repos/pc/run/wifi.run @@ -65,6 +65,9 @@ assert_spec x86 set build_components { core init timer + app/pci_decode + drivers/acpi + drivers/platform drivers/rtc drivers/wifi/pc server/report_rom @@ -76,9 +79,6 @@ set build_components { lib/vfs_lwip } -source ${genode_dir}/repos/base/run/platform_drv.inc -append_platform_drv_build_components - build $build_components create_boot_directory @@ -108,6 +108,73 @@ append config { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -227,11 +294,6 @@ append config { -} - -append_platform_drv_config - -append config { } @@ -267,15 +329,13 @@ set boot_modules { wpa_driver_nl80211.lib.so wpa_supplicant.lib.so pc_wifi_drv wifi.lib.so vfs_wifi.lib.so nic_router - + platform_drv acpi_drv pci_decode test-lwip_httpsrv vfs_lwip.lib.so } append boot_modules $firmware_modules -append_platform_drv_boot_modules - build_boot_image $boot_modules run_genode_until forever diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c index c3d5c16d12..2dcdda40a9 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/dummies.c @@ -547,3 +547,33 @@ int wbinvd_on_all_cpus(void) lx_emul_trace(__func__); return 0; } + + +void srcu_drive_gp(struct work_struct *wp); +void srcu_drive_gp(struct work_struct *wp) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int pci_bus_read_config_byte(struct pci_bus *bus, unsigned int devfn, + int where, u8 *val) +{ + lx_emul_trace_and_stop(__func__); +} + + +int pci_bus_read_config_word(struct pci_bus *bus, unsigned int devfn, + int where, u16 *val) +{ + lx_emul_trace_and_stop(__func__); +} + + +int pci_bus_write_config_byte(struct pci_bus *bus, unsigned int devfn, + int where, u8 val) +{ + lx_emul_trace_and_stop(__func__); +} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/emul.cc b/repos/pc/src/drivers/framebuffer/intel/pc/emul.cc index 243f0a6501..0baedcea44 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/emul.cc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/emul.cc @@ -29,3 +29,22 @@ void emul_free_shmem_file_buffer(void *addr) { Lx_kit::env().memory.free_buffer(addr); } + + +unsigned short emul_intel_gmch_control_reg() +{ + using namespace Genode; + + unsigned short ret = 0; + Lx_kit::env().devices.with_xml([&] (Xml_node node) { + node.for_each_sub_node("device", [&] (Xml_node node) { + node.for_each_sub_node("pci-config", [&] (Xml_node node) { + unsigned short gmch = + node.attribute_value("intel_gmch_control", 0U); + if (gmch) ret = gmch; + }); + }); + }); + + return ret; +} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c b/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c index e6c1c56582..805a441ff3 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c +++ b/repos/pc/src/drivers/framebuffer/intel/pc/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-06-24 + * \date 2022-07-28 */ #include @@ -1525,14 +1525,6 @@ void mark_page_accessed(struct page * page) } -#include - -unsigned long long memparse(const char * ptr,char ** retptr) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void memunmap(void * addr) @@ -1646,7 +1638,7 @@ enum reboot_mode panic_reboot_mode; #include -void pci_assign_unassigned_bridge_resources(struct pci_dev * bridge) +int pci_dev_present(const struct pci_device_id * ids) { lx_emul_trace_and_stop(__func__); } @@ -1654,14 +1646,7 @@ void pci_assign_unassigned_bridge_resources(struct pci_dev * bridge) #include -void pci_assign_unassigned_bus_resources(struct pci_bus * bus) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern unsigned long pci_cardbus_resource_alignment(struct resource * res); -unsigned long pci_cardbus_resource_alignment(struct resource * res) +void pci_disable_device(struct pci_dev * dev) { lx_emul_trace_and_stop(__func__); } @@ -1669,11 +1654,7 @@ unsigned long pci_cardbus_resource_alignment(struct resource * res) #include -unsigned int pci_flags; - - -extern int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout); -int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout) +int pci_read_config_byte(const struct pci_dev * dev,int where,u8 * val) { lx_emul_trace_and_stop(__func__); } @@ -1681,28 +1662,7 @@ int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout) #include -int pci_mmap_resource_range(struct pci_dev * pdev,int bar,struct vm_area_struct * vma,enum pci_mmap_state mmap_state,int write_combine) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void __init pci_realloc_get_opt(char * str); -void __init pci_realloc_get_opt(char * str) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pci_restore_vc_state(struct pci_dev * dev); -void pci_restore_vc_state(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern int pci_save_vc_state(struct pci_dev * dev); -int pci_save_vc_state(struct pci_dev * dev) +int pci_save_state(struct pci_dev * dev) { lx_emul_trace_and_stop(__func__); } @@ -1710,42 +1670,23 @@ int pci_save_vc_state(struct pci_dev * dev) #include -void pci_stop_and_remove_bus_device_locked(struct pci_dev * dev) +int pci_set_power_state(struct pci_dev * dev,pci_power_t state) { lx_emul_trace_and_stop(__func__); } -extern void pci_vpd_release(struct pci_dev * dev); -void pci_vpd_release(struct pci_dev * dev) +#include + +void pci_unmap_rom(struct pci_dev * pdev,void __iomem * rom) { lx_emul_trace_and_stop(__func__); } -extern unsigned int pcibios_assign_all_busses(void); -unsigned int pcibios_assign_all_busses(void) -{ - lx_emul_trace_and_stop(__func__); -} +#include - -extern void pcie_aspm_init_link_state(struct pci_dev * pdev); -void pcie_aspm_init_link_state(struct pci_dev * pdev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_pm_state_change(struct pci_dev * pdev); -void pcie_aspm_pm_state_change(struct pci_dev * pdev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_powersave_config_link(struct pci_dev * pdev); -void pcie_aspm_powersave_config_link(struct pci_dev * pdev) +int pci_write_config_byte(const struct pci_dev * dev,int where,u8 val) { lx_emul_trace_and_stop(__func__); } @@ -1789,14 +1730,6 @@ void put_pid(struct pid * pid) } -#include - -int raw_pci_read(unsigned int domain,unsigned int bus,unsigned int devfn,int reg,int len,u32 * val) -{ - lx_emul_trace_and_stop(__func__); -} - - #include enum reboot_mode reboot_mode; @@ -1899,7 +1832,7 @@ void * skb_put(struct sk_buff * skb,unsigned int len) #include -int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int wait) +int smp_call_function_single(int cpu,smp_call_func_t func,void * info,int wait) { lx_emul_trace_and_stop(__func__); } @@ -2016,3 +1949,4 @@ void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) { lx_emul_trace_and_stop(__func__); } + diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h index 7dc6902aa1..aa6eb2c74e 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h +++ b/repos/pc/src/drivers/framebuffer/intel/pc/lx_emul.h @@ -28,21 +28,16 @@ struct dma_fence_work_ops; void lx_emul_time_udelay(unsigned long usec); -/* shadow/asm/io.h */ -void lx_emul_io_port_outb(unsigned char value, unsigned short port); -void lx_emul_io_port_outw(unsigned short value, unsigned short port); -void lx_emul_io_port_outl(unsigned int value, unsigned short port); - -unsigned char lx_emul_io_port_inb(unsigned short port); -unsigned short lx_emul_io_port_inw(unsigned short port); -unsigned int lx_emul_io_port_inl(unsigned short port); - void *emul_alloc_shmem_file_buffer(unsigned long); void * intel_io_mem_map(unsigned long offset, unsigned long size); #include "lx_i915.h" +unsigned short emul_intel_gmch_control_reg(void); + +enum { OPREGION_PSEUDO_PHYS_ADDR = 0xffffefff }; + #ifdef __cplusplus } #endif diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/misc.cc b/repos/pc/src/drivers/framebuffer/intel/pc/misc.cc deleted file mode 100644 index 73f6e67174..0000000000 --- a/repos/pc/src/drivers/framebuffer/intel/pc/misc.cc +++ /dev/null @@ -1,20 +0,0 @@ -/* - * \brief Misc - * \author Josef Soentgen - * \date 2022-01-20 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -/* Genode includes */ -#include - -extern "C" void lx_backtrace(void) -{ - Genode::backtrace(); -} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc b/repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc index b97e7d56d5..3271d51f16 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/opregion_io_mem.cc @@ -21,6 +21,7 @@ #include #include +#include extern "C" void * intel_io_mem_map(unsigned long const phys, unsigned long const size) @@ -51,12 +52,16 @@ extern "C" void * intel_io_mem_map(unsigned long const phys, } } - if ((opregion_start <= phys) && - (phys + size <= opregion_start + opregion_size)) { + /* + * we have to substract the pseudo physical address + * we returned when reading the ASLS from config space + */ + addr_t offset = phys - OPREGION_PSEUDO_PHYS_ADDR; + if ((offset + size) <= opregion_size) { try { auto ptr = ((addr_t)rom_opregion->local_addr()) - + (phys - opregion_start) + (phys & 0xffful); + + offset + (opregion_start & 0xffful); return (void *)ptr; } catch (...) { error("Intel opregion lookup failed"); diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/pci.c b/repos/pc/src/drivers/framebuffer/intel/pc/pci.c new file mode 100644 index 0000000000..883e1c0795 --- /dev/null +++ b/repos/pc/src/drivers/framebuffer/intel/pc/pci.c @@ -0,0 +1,140 @@ +/* + * \brief Additional PCI functions needed by Intel graphics driver + * \author Stefan Kalkowski + * \author Josef Soentgen + * \date 2022-07-27 + */ + +/* + * Copyright (C) 2022 Genode Labs GmbH + * + * This file is distributed under the terms of the GNU General Public License + * version 2. + */ + +#include +#include +#include + +#include +#include +#include <../drivers/gpu/drm/i915/i915_reg.h> +#undef GFX_FLSH_CNTL /* suppress warning of double define */ +#include <../drivers/char/agp/intel-agp.h> + + +unsigned long pci_mem_start = 0xaeedbabe; + + +int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, + resource_size_t size, resource_size_t align, + resource_size_t min, unsigned long type_mask, + resource_size_t (*alignf)(void *, + const struct resource *, + resource_size_t, + resource_size_t), + void *alignf_data) +{ + return -1; +} + + +void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) +{ + struct resource *r; + unsigned long phys_addr; + unsigned long size; + + if (!dev || bar > 5) { + printk("%s:%d: invalid request for dev: %p bar: %d\n", + __func__, __LINE__, dev, bar); + return NULL; + } + + printk("pci_iomap: request for dev: %s bar: %d\n", dev_name(&dev->dev), bar); + + r = &dev->resource[bar]; + + phys_addr = r->start; + size = r->end - r->start; + + if (!phys_addr || !size) + return NULL; + + return lx_emul_io_mem_map(phys_addr, size); +} + + +void __iomem * pci_map_rom(struct pci_dev * pdev,size_t * size) +{ + /* + * Needed for VBT access which we do not allow + */ + return NULL; +} + + +int pci_read_config_word(const struct pci_dev * dev, int where, u16 *val) +{ + switch (where) { + /* Intel graphics and memory controller hub control register */ + /* I830_GMCH_CTRL is identical to INTEL_GMCH_CTRL */ + case SNB_GMCH_CTRL: + case INTEL_GMCH_CTRL: + *val = emul_intel_gmch_control_reg(); + return 0; + case SWSCI: /* intel_fb: software smi sci */ + *val = 0; + return 0; + }; + + printk("%s: %s %d %d\n", __func__, dev_name(&dev->dev), dev->devfn, where); + lx_emul_trace_and_stop(__func__); +} + + +int pci_read_config_dword(const struct pci_dev * dev, int where, u32 *val) +{ + switch (where) { + case MCHBAR_I915: + case MCHBAR_I965: + *val = 0x1; /* return ENABLE bit being set */ + return 0; + case I965_IFPADDR: /* intel host bridge flush page (lower) */ + case I965_IFPADDR + 4: /* intel host bridge flush page (higher) */ + *val = 0; + return 0; + case ASLS: + /* + * we just use a physical address as token here, + * hopefully it never crashes with other I/O memory addresses + */ + *val = OPREGION_PSEUDO_PHYS_ADDR; + return 0; + }; + + lx_emul_trace_and_stop(__func__); +} + + +int pci_write_config_word(const struct pci_dev * dev, int where, u16 val) +{ + switch (where) { + case SWSCI: /* intel_fb: software smi sci */ + /* just ignore */ + return 0; + }; + lx_emul_trace_and_stop(__func__); +} + + +int pci_write_config_dword(const struct pci_dev * dev, int where, u32 val) +{ + switch (where) { + case I965_IFPADDR: /* intel host bridge flush page (lower) */ + case I965_IFPADDR + 4: /* intel host bridge flush page (higher) */ + /* just ignore */ + return 0; + }; + lx_emul_trace_and_stop(__func__); +} diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list index 0e717db882..5935c1e143 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_32/source.list @@ -1,5 +1,4 @@ arch/x86/lib/hweight.S -arch/x86/pci/legacy.c arch/x86/platform/intel/iosf_mbi.c drivers/base/bus.c drivers/base/class.c @@ -183,19 +182,7 @@ drivers/i2c/algos/i2c-algo-bit.c drivers/i2c/i2c-boardinfo.c drivers/i2c/i2c-core-acpi.c drivers/i2c/i2c-core-base.c -drivers/pci/access.c -drivers/pci/bus.c -drivers/pci/host-bridge.c -drivers/pci/msi.c drivers/pci/pci-driver.c -drivers/pci/pci-label.c -drivers/pci/pci-sysfs.c -drivers/pci/pci.c -drivers/pci/probe.c -drivers/pci/rom.c -drivers/pci/search.c -drivers/pci/setup-res.c -drivers/pci/slot.c drivers/video/backlight/backlight.c drivers/video/fbdev/core/fb_notify.c drivers/video/fbdev/core/fbcmap.c @@ -257,7 +244,6 @@ lib/kstrtox.c lib/list_sort.c lib/llist.c lib/math/div64.c -lib/pci_iomap.c lib/radix-tree.c lib/rbtree.c lib/refcount.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list index abdcec0de1..a0e3aabad9 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/framebuffer/intel/pc/spec/x86_64/source.list @@ -2,7 +2,6 @@ arch/x86/lib/hweight.S arch/x86/lib/memcpy_64.S arch/x86/lib/memmove_64.S arch/x86/lib/memset_64.S -arch/x86/pci/legacy.c arch/x86/platform/intel/iosf_mbi.c drivers/base/bus.c drivers/base/class.c @@ -186,19 +185,7 @@ drivers/i2c/algos/i2c-algo-bit.c drivers/i2c/i2c-boardinfo.c drivers/i2c/i2c-core-acpi.c drivers/i2c/i2c-core-base.c -drivers/pci/access.c -drivers/pci/bus.c -drivers/pci/host-bridge.c -drivers/pci/msi.c drivers/pci/pci-driver.c -drivers/pci/pci-label.c -drivers/pci/pci-sysfs.c -drivers/pci/pci.c -drivers/pci/probe.c -drivers/pci/rom.c -drivers/pci/search.c -drivers/pci/setup-res.c -drivers/pci/slot.c drivers/video/backlight/backlight.c drivers/video/fbdev/core/fb_notify.c drivers/video/fbdev/core/fbcmap.c @@ -259,7 +246,6 @@ lib/kobject_uevent.c lib/kstrtox.c lib/list_sort.c lib/llist.c -lib/pci_iomap.c lib/radix-tree.c lib/rbtree.c lib/refcount.c diff --git a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc index 5a50f3cf6e..e9d62979af 100644 --- a/repos/pc/src/drivers/framebuffer/intel/pc/target.inc +++ b/repos/pc/src/drivers/framebuffer/intel/pc/target.inc @@ -9,21 +9,21 @@ INC_DIR += $(REL_PRG_DIR) INC_DIR += $(REL_PRG_DIR)/shadow SRC_CC += main.cc -SRC_CC += misc.cc SRC_CC += emul.cc SRC_CC += time.cc SRC_CC += opregion_io_mem.cc SRC_C += dummies.c +SRC_C += pci.c SRC_C += lx_emul.c SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c)) SRC_C += fb.c SRC_C += lx_user.c SRC_C += gem.c SRC_C += lx_emul/common_dummies.c -SRC_C += lx_emul/spec/x86/pci.c SRC_C += lx_emul/shadow/mm/page_alloc.c +SRC_C += lx_emul/shadow/drivers/char/random.c -vpath %.c $(REL_PRG_DIR) +vpath %.c $(REL_PRG_DIR) vpath %.cc $(REL_PRG_DIR) vpath %.c $(REP_DIR)/src/lib/pc diff --git a/repos/pc/src/drivers/usb_host/pc/dummies.c b/repos/pc/src/drivers/usb_host/pc/dummies.c index 66714bec4d..6b4d44448d 100644 --- a/repos/pc/src/drivers/usb_host/pc/dummies.c +++ b/repos/pc/src/drivers/usb_host/pc/dummies.c @@ -90,3 +90,11 @@ u32 prandom_u32(void) { lx_emul_trace_and_stop(__func__); } + + +#include + +void pci_disable_device(struct pci_dev * dev) +{ + lx_emul_trace(__func__); +} diff --git a/repos/pc/src/drivers/usb_host/pc/generated_dummies.c b/repos/pc/src/drivers/usb_host/pc/generated_dummies.c index 2befa28591..c26547801b 100644 --- a/repos/pc/src/drivers/usb_host/pc/generated_dummies.c +++ b/repos/pc/src/drivers/usb_host/pc/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-05-06 + * \date 2022-07-29 */ #include @@ -301,14 +301,6 @@ int kobject_uevent_env(struct kobject * kobj,enum kobject_action action,char * e } -#include - -unsigned long long memparse(const char * ptr,char ** retptr) -{ - lx_emul_trace_and_stop(__func__); -} - - #include struct irq_chip no_irq_chip; @@ -348,7 +340,7 @@ int param_set_copystring(const char * val,const struct kernel_param * kp) #include -void pci_assign_unassigned_bridge_resources(struct pci_dev * bridge) +void pci_clear_mwi(struct pci_dev * dev) { lx_emul_trace_and_stop(__func__); } @@ -356,14 +348,7 @@ void pci_assign_unassigned_bridge_resources(struct pci_dev * bridge) #include -void pci_assign_unassigned_bus_resources(struct pci_bus * bus) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern unsigned long pci_cardbus_resource_alignment(struct resource * res); -unsigned long pci_cardbus_resource_alignment(struct resource * res) +struct pci_dev * pci_get_slot(struct pci_bus * bus,unsigned int devfn) { lx_emul_trace_and_stop(__func__); } @@ -371,11 +356,7 @@ unsigned long pci_cardbus_resource_alignment(struct resource * res) #include -unsigned int pci_flags; - - -extern int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout); -int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout) +int pci_set_power_state(struct pci_dev * dev,pci_power_t state) { lx_emul_trace_and_stop(__func__); } @@ -383,71 +364,7 @@ int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout) #include -int pci_mmap_resource_range(struct pci_dev * pdev,int bar,struct vm_area_struct * vma,enum pci_mmap_state mmap_state,int write_combine) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void __init pci_realloc_get_opt(char * str); -void __init pci_realloc_get_opt(char * str) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pci_restore_vc_state(struct pci_dev * dev); -void pci_restore_vc_state(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern int pci_save_vc_state(struct pci_dev * dev); -int pci_save_vc_state(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void pci_stop_and_remove_bus_device_locked(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pci_vpd_release(struct pci_dev * dev); -void pci_vpd_release(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern unsigned int pcibios_assign_all_busses(void); -unsigned int pcibios_assign_all_busses(void) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_init_link_state(struct pci_dev * pdev); -void pcie_aspm_init_link_state(struct pci_dev * pdev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_pm_state_change(struct pci_dev * pdev); -void pcie_aspm_pm_state_change(struct pci_dev * pdev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_powersave_config_link(struct pci_dev * pdev); -void pcie_aspm_powersave_config_link(struct pci_dev * pdev) +int pci_write_config_dword(const struct pci_dev * dev,int where,u32 val) { lx_emul_trace_and_stop(__func__); } @@ -469,14 +386,6 @@ void put_pid(struct pid * pid) } -#include - -int raw_pci_read(unsigned int domain,unsigned int bus,unsigned int devfn,int reg,int len,u32 * val) -{ - lx_emul_trace_and_stop(__func__); -} - - #include bool refcount_dec_not_one(refcount_t * r) @@ -511,7 +420,7 @@ void seq_printf(struct seq_file * m,const char * f,...) #include -int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int wait) +int smp_call_function_single(int cpu,smp_call_func_t func,void * info,int wait) { lx_emul_trace_and_stop(__func__); } @@ -572,3 +481,4 @@ void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) { lx_emul_trace_and_stop(__func__); } + diff --git a/repos/pc/src/drivers/usb_host/pc/lx_emul.c b/repos/pc/src/drivers/usb_host/pc/lx_emul.c index a9b63c84ac..63c49b4c63 100644 --- a/repos/pc/src/drivers/usb_host/pc/lx_emul.c +++ b/repos/pc/src/drivers/usb_host/pc/lx_emul.c @@ -12,3 +12,76 @@ */ #include +#include + +void __iomem * pci_ioremap_bar(struct pci_dev * pdev, int bar) +{ + struct resource *res = &pdev->resource[bar]; + return ioremap(res->start, resource_size(res)); +} + + +enum { + UHCI_USBLEGSUP = 0xc0, + UHCI_USBRES_INTEL = 0xc4, + EHCI_SERIAL_BUS_RELEASE = 0x60, + EHCI_PORT_WAKE = 0x62, +}; + + +int pci_read_config_byte(const struct pci_dev * dev,int where,u8 * val) +{ + switch (where) { + case EHCI_SERIAL_BUS_RELEASE: + *val = 0x20; + return 0; + }; + lx_emul_trace_and_stop(__func__); +} + + +int pci_read_config_word(const struct pci_dev * dev,int where,u16 * val) +{ + switch (where) { + case PCI_COMMAND: + *val = 0x7; + return 0; + case EHCI_PORT_WAKE: + *val = 0; + return 0; + case UHCI_USBLEGSUP: + /* force the driver to do a full_reset */ + *val = 0xffff; + return 0; + }; + lx_emul_trace_and_stop(__func__); +} + + +int pci_read_config_dword(const struct pci_dev * dev,int where,u32 * val) +{ + *val = 0; + return 0; +} + + +int pci_write_config_byte(const struct pci_dev * dev,int where,u8 val) +{ + switch (where) { + case UHCI_USBRES_INTEL: + /* do nothing */ + return 0; + } + lx_emul_trace_and_stop(__func__); +} + + +int pci_write_config_word(const struct pci_dev * dev,int where,u16 val) +{ + switch (where) { + case UHCI_USBLEGSUP: + /* do nothing */ + return 0; + } + lx_emul_trace_and_stop(__func__); +} diff --git a/repos/pc/src/drivers/usb_host/pc/lx_emul.h b/repos/pc/src/drivers/usb_host/pc/lx_emul.h index fc240b2d77..2b25b75d96 100644 --- a/repos/pc/src/drivers/usb_host/pc/lx_emul.h +++ b/repos/pc/src/drivers/usb_host/pc/lx_emul.h @@ -24,8 +24,6 @@ extern "C" { #endif -void lx_backtrace(void); - void lx_emul_time_udelay(unsigned long usec); #ifdef __cplusplus diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list index 1c750d29c8..510dc028d8 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_32/source.list @@ -1,5 +1,4 @@ arch/x86/lib/hweight.S -arch/x86/pci/legacy.c drivers/base/bus.c drivers/base/class.c drivers/base/component.c @@ -10,18 +9,7 @@ drivers/base/driver.c drivers/base/platform.c drivers/base/property.c drivers/clk/clk-devres.c -drivers/pci/access.c -drivers/pci/bus.c -drivers/pci/host-bridge.c -drivers/pci/msi.c drivers/pci/pci-driver.c -drivers/pci/pci-sysfs.c -drivers/pci/pci.c -drivers/pci/probe.c -drivers/pci/rom.c -drivers/pci/search.c -drivers/pci/setup-res.c -drivers/pci/slot.c drivers/usb/common/common.c drivers/usb/common/debug.c drivers/usb/core/buffer.c @@ -110,7 +98,6 @@ lib/kobject.c lib/kstrtox.c lib/list_sort.c lib/math/div64.c -lib/pci_iomap.c lib/radix-tree.c lib/rbtree.c lib/scatterlist.c diff --git a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list index 38d72247eb..bf4158e88b 100644 --- a/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list +++ b/repos/pc/src/drivers/usb_host/pc/spec/x86_64/source.list @@ -1,5 +1,4 @@ arch/x86/lib/hweight.S -arch/x86/pci/legacy.c drivers/base/bus.c drivers/base/class.c drivers/base/component.c @@ -10,18 +9,7 @@ drivers/base/driver.c drivers/base/platform.c drivers/base/property.c drivers/clk/clk-devres.c -drivers/pci/access.c -drivers/pci/bus.c -drivers/pci/host-bridge.c -drivers/pci/msi.c drivers/pci/pci-driver.c -drivers/pci/pci-sysfs.c -drivers/pci/pci.c -drivers/pci/probe.c -drivers/pci/rom.c -drivers/pci/search.c -drivers/pci/setup-res.c -drivers/pci/slot.c drivers/usb/common/common.c drivers/usb/common/debug.c drivers/usb/core/buffer.c @@ -109,7 +97,6 @@ lib/klist.c lib/kobject.c lib/kstrtox.c lib/list_sort.c -lib/pci_iomap.c lib/radix-tree.c lib/rbtree.c lib/scatterlist.c diff --git a/repos/pc/src/drivers/usb_host/pc/target.inc b/repos/pc/src/drivers/usb_host/pc/target.inc index 1a6b805031..d9c11ce49e 100644 --- a/repos/pc/src/drivers/usb_host/pc/target.inc +++ b/repos/pc/src/drivers/usb_host/pc/target.inc @@ -7,15 +7,14 @@ LIBS := base pc_lx_emul jitterentropy INC_DIR += $(REL_PRG_DIR) SRC_CC += main.cc -SRC_CC += misc.cc SRC_CC += time.cc SRC_CC += lx_emul/shared_dma_buffer.cc SRC_C += dummies.c SRC_C += lx_emul.c SRC_C += $(notdir $(wildcard $(REL_PRG_DIR)/generated_dummies.c)) SRC_C += common_dummies.c -SRC_C += lx_emul/spec/x86/pci.c SRC_C += lx_emul/usb.c + SRC_C += lx_emul/shadow/lib/kobject_uevent.c vpath %.c $(REP_DIR)/src/lib/pc vpath %.cc $(REP_DIR)/src/lib/pc diff --git a/repos/pc/src/include/lx_emul/pci_fixups.h b/repos/pc/src/include/lx_emul/pci_fixups.h deleted file mode 100644 index 860d419eec..0000000000 --- a/repos/pc/src/include/lx_emul/pci_fixups.h +++ /dev/null @@ -1,22 +0,0 @@ -/** - * \brief PCI fixup calls to execute - * \author Josef Soentgen - * \date 2022-02-07 - */ - -/* - * Copyright (C) 2022 Genode Labs GmbH - * - * This file is distributed under the terms of the GNU General Public License - * version 2. - */ - -#ifndef _LX_EMUL__PCI_FIXUPS_H_ -#define _LX_EMUL__PCI_FIXUPS_H_ - -static const char * lx_emul_pci_final_fixups[] = { - "__pci_fixup_final_quirk_usb_early_handoff", - "END_OF_PCI_FIXUPS" -}; - -#endif /* _LX_EMUL__PCI_FIXUPS_H_ */ diff --git a/repos/pc/src/lib/wifi/dummies.c b/repos/pc/src/lib/wifi/dummies.c index 16fbf04a48..c77659d25d 100644 --- a/repos/pc/src/lib/wifi/dummies.c +++ b/repos/pc/src/lib/wifi/dummies.c @@ -244,6 +244,39 @@ bool pciehp_is_native(struct pci_dev *bridge) } +void pci_lock_rescan_remove(void) +{ + lx_emul_trace(__func__); +} + + +void pci_unlock_rescan_remove(void) +{ + lx_emul_trace(__func__); +} + + +bool pci_pme_capable(struct pci_dev *dev, pci_power_t state) +{ + lx_emul_trace(__func__); + return false; +} + + +int pcie_capability_read_word(struct pci_dev *dev, int pos, u16 *val) +{ + lx_emul_trace(__func__); + return -1; +} + + +u16 pci_find_ext_capability(struct pci_dev *dev, int cap) +{ + lx_emul_trace(__func__); + return 0; +} + + #include struct thermal_cooling_device *thermal_cooling_device_register(const char *s, diff --git a/repos/pc/src/lib/wifi/generated_dummies.c b/repos/pc/src/lib/wifi/generated_dummies.c index 958ae3b0b2..384f9637a7 100644 --- a/repos/pc/src/lib/wifi/generated_dummies.c +++ b/repos/pc/src/lib/wifi/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-06-24 + * \date 2022-07-29 */ #include @@ -639,14 +639,6 @@ int kobject_synth_uevent(struct kobject * kobj,const char * buf,size_t count) } -#include - -unsigned long long memparse(const char * ptr,char ** retptr) -{ - lx_emul_trace_and_stop(__func__); -} - - #include void migrate_disable(void) @@ -712,63 +704,7 @@ enum reboot_mode panic_reboot_mode; #include -void pci_assign_unassigned_bridge_resources(struct pci_dev * bridge) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void pci_assign_unassigned_bus_resources(struct pci_bus * bus) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern unsigned long pci_cardbus_resource_alignment(struct resource * res); -unsigned long pci_cardbus_resource_alignment(struct resource * res) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -unsigned int pci_flags; - - -extern int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout); -int pci_idt_bus_quirk(struct pci_bus * bus,int devfn,u32 * l,int timeout) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -int pci_mmap_resource_range(struct pci_dev * pdev,int bar,struct vm_area_struct * vma,enum pci_mmap_state mmap_state,int write_combine) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void __init pci_realloc_get_opt(char * str); -void __init pci_realloc_get_opt(char * str) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pci_restore_vc_state(struct pci_dev * dev); -void pci_restore_vc_state(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern int pci_save_vc_state(struct pci_dev * dev); -int pci_save_vc_state(struct pci_dev * dev) +int pci_read_config_dword(const struct pci_dev * dev,int where,u32 * val) { lx_emul_trace_and_stop(__func__); } @@ -784,42 +720,7 @@ void pci_stop_and_remove_bus_device(struct pci_dev * dev) #include -void pci_stop_and_remove_bus_device_locked(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pci_vpd_release(struct pci_dev * dev); -void pci_vpd_release(struct pci_dev * dev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern unsigned int pcibios_assign_all_busses(void); -unsigned int pcibios_assign_all_busses(void) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_init_link_state(struct pci_dev * pdev); -void pcie_aspm_init_link_state(struct pci_dev * pdev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_pm_state_change(struct pci_dev * pdev); -void pcie_aspm_pm_state_change(struct pci_dev * pdev) -{ - lx_emul_trace_and_stop(__func__); -} - - -extern void pcie_aspm_powersave_config_link(struct pci_dev * pdev); -void pcie_aspm_powersave_config_link(struct pci_dev * pdev) +int pci_write_config_word(const struct pci_dev * dev,int where,u16 val) { lx_emul_trace_and_stop(__func__); } @@ -889,14 +790,6 @@ void put_unused_fd(unsigned int fd) } -#include - -int raw_pci_read(unsigned int domain,unsigned int bus,unsigned int devfn,int reg,int len,u32 * val) -{ - lx_emul_trace_and_stop(__func__); -} - - #include enum reboot_mode reboot_mode; @@ -1112,7 +1005,7 @@ int sk_reuseport_attach_filter(struct sock_fprog * fprog,struct sock * sk) #include -int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int wait) +int smp_call_function_single(int cpu,smp_call_func_t func,void * info,int wait) { lx_emul_trace_and_stop(__func__); } diff --git a/repos/pc/src/lib/wifi/lx_emul.c b/repos/pc/src/lib/wifi/lx_emul.c index e5340ddf20..2f307ae823 100644 --- a/repos/pc/src/lib/wifi/lx_emul.c +++ b/repos/pc/src/lib/wifi/lx_emul.c @@ -574,3 +574,33 @@ void kvfree_call_rcu(struct rcu_head * head,rcu_callback_t func) void *ptr = (void *) head - (unsigned long) func; kvfree(ptr); } + + +#include +#include + +int pci_write_config_byte(const struct pci_dev * dev,int where,u8 val) +{ + enum { PCI_CFG_RETRY_TIMEOUT = 0x41 }; + + switch (where) { + /* + * iwlwifi: "We disable the RETRY_TIMEOUT register (0x41) to keep + * PCI Tx retries from interfering with C3 CPU state" + */ + case PCI_CFG_RETRY_TIMEOUT: + return 0; + }; + lx_emul_trace_and_stop(__func__); +} + + +int pci_read_config_word(const struct pci_dev * dev,int where,u16 * val) +{ + switch (where) { + case PCI_COMMAND: + *val = PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY | PCI_COMMAND_IO; + return 0; + }; + lx_emul_trace_and_stop(__func__); +} diff --git a/repos/pc/src/lib/wifi/spec/x86_32/source.list b/repos/pc/src/lib/wifi/spec/x86_32/source.list index 94cbcb048b..35f22c35b1 100644 --- a/repos/pc/src/lib/wifi/spec/x86_32/source.list +++ b/repos/pc/src/lib/wifi/spec/x86_32/source.list @@ -1,5 +1,4 @@ arch/x86/lib/hweight.S -arch/x86/pci/legacy.c certs/common.c crypto/acompress.c crypto/aead.c @@ -117,18 +116,7 @@ drivers/net/wireless/intel/iwlwifi/pcie/trans.c drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c drivers/net/wireless/intel/iwlwifi/pcie/tx.c drivers/net/wireless/intel/iwlwifi/queue/tx.c -drivers/pci/access.c -drivers/pci/bus.c -drivers/pci/host-bridge.c -drivers/pci/msi.c drivers/pci/pci-driver.c -drivers/pci/pci-sysfs.c -drivers/pci/pci.c -drivers/pci/probe.c -drivers/pci/rom.c -drivers/pci/search.c -drivers/pci/setup-res.c -drivers/pci/slot.c fs/nls/nls_base.c kernel/irq/chip.c kernel/irq/devres.c @@ -187,7 +175,6 @@ lib/kstrtox.c lib/list_sort.c lib/math/div64.c lib/nlattr.c -lib/pci_iomap.c lib/radix-tree.c lib/rbtree.c lib/refcount.c diff --git a/repos/pc/src/lib/wifi/spec/x86_64/source.list b/repos/pc/src/lib/wifi/spec/x86_64/source.list index f6e3ae909b..40f2646615 100644 --- a/repos/pc/src/lib/wifi/spec/x86_64/source.list +++ b/repos/pc/src/lib/wifi/spec/x86_64/source.list @@ -1,5 +1,4 @@ arch/x86/lib/hweight.S -arch/x86/pci/legacy.c certs/common.c crypto/acompress.c crypto/aead.c @@ -117,18 +116,7 @@ drivers/net/wireless/intel/iwlwifi/pcie/trans.c drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c drivers/net/wireless/intel/iwlwifi/pcie/tx.c drivers/net/wireless/intel/iwlwifi/queue/tx.c -drivers/pci/access.c -drivers/pci/bus.c -drivers/pci/host-bridge.c -drivers/pci/msi.c drivers/pci/pci-driver.c -drivers/pci/pci-sysfs.c -drivers/pci/pci.c -drivers/pci/probe.c -drivers/pci/rom.c -drivers/pci/search.c -drivers/pci/setup-res.c -drivers/pci/slot.c fs/nls/nls_base.c kernel/irq/chip.c kernel/irq/devres.c @@ -186,7 +174,6 @@ lib/kobject.c lib/kstrtox.c lib/list_sort.c lib/nlattr.c -lib/pci_iomap.c lib/radix-tree.c lib/rbtree.c lib/refcount.c diff --git a/repos/pc/src/test/driver_time/dummies.c b/repos/pc/src/test/driver_time/dummies.c index 188ff680d6..efb54bd300 100644 --- a/repos/pc/src/test/driver_time/dummies.c +++ b/repos/pc/src/test/driver_time/dummies.c @@ -40,6 +40,15 @@ int ___ratelimit(struct ratelimit_state * rs, const char * func) return 1; } + +#include + +long io_schedule_timeout(long timeout) +{ + lx_emul_trace_and_stop(__func__); +} + + void register_syscore_ops(struct syscore_ops * ops) { lx_emul_trace(__func__); diff --git a/repos/pc/src/test/driver_time/generated_dummies.c b/repos/pc/src/test/driver_time/generated_dummies.c index a9436b07b2..04b188f12e 100644 --- a/repos/pc/src/test/driver_time/generated_dummies.c +++ b/repos/pc/src/test/driver_time/generated_dummies.c @@ -1,7 +1,7 @@ /* * \brief Dummy definitions of Linux Kernel functions * \author Automatically generated file - do no edit - * \date 2022-05-06 + * \date 2022-09-27 */ #include @@ -23,6 +23,14 @@ const char * __clk_get_name(const struct clk * clk) } +#include + +void __put_task_struct(struct task_struct * tsk) +{ + lx_emul_trace_and_stop(__func__); +} + + #include void __srcu_read_unlock(struct srcu_struct * ssp,int idx) @@ -31,49 +39,9 @@ void __srcu_read_unlock(struct srcu_struct * ssp,int idx) } -#include +#include -int printk_deferred(const char * fmt,...) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void irq_work_tick(void) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -asmlinkage __visible void dump_stack(void) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -int io_schedule_prepare(void) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void io_schedule_finish(int token) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -long io_schedule_timeout(long timeout) +unsigned long _copy_to_user(void __user * to,const void * from,unsigned long n) { lx_emul_trace_and_stop(__func__); } @@ -88,15 +56,47 @@ void ack_bad_irq(unsigned int irq) #include -int kobject_synth_uevent(struct kobject * kobj,const char * buf,size_t count) +int add_uevent_var(struct kobj_uevent_env * env,const char * format,...) { lx_emul_trace_and_stop(__func__); } -#include +#include -int add_uevent_var(struct kobj_uevent_env * env,const char * format,...) +asmlinkage __visible void dump_stack(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +bool file_ns_capable(const struct file * file,struct user_namespace * ns,int cap) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void fwnode_remove_software_node(struct fwnode_handle * fwnode) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int get_option(char ** str,int * pint) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +struct pseudo_fs_context * init_pseudo(struct fs_context * fc,unsigned long magic) { lx_emul_trace_and_stop(__func__); } @@ -107,9 +107,36 @@ int add_uevent_var(struct kobj_uevent_env * env,const char * format,...) bool initcall_debug; -#include +#include -struct irq_chip no_irq_chip; +void io_schedule_finish(int token) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +int io_schedule_prepare(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +void irq_work_tick(void) +{ + lx_emul_trace_and_stop(__func__); +} + + +#include + +bool is_software_node(const struct fwnode_handle * fwnode) +{ + lx_emul_trace_and_stop(__func__); +} #include @@ -125,49 +152,30 @@ void kill_anon_super(struct super_block * sb) } -#include +#include -bool is_software_node(const struct fwnode_handle * fwnode) +int kobject_synth_uevent(struct kobject * kobj,const char * buf,size_t count) { lx_emul_trace_and_stop(__func__); } -#include +#include -void fwnode_remove_software_node(struct fwnode_handle * fwnode) +struct irq_chip no_irq_chip; + + +#include + +void note_interrupt(struct irq_desc * desc,irqreturn_t action_ret) { lx_emul_trace_and_stop(__func__); } -#include +#include -void __put_task_struct(struct task_struct * tsk) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -int get_option(char ** str,int * pint) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -bool file_ns_capable(const struct file * file,struct user_namespace * ns,int cap) +int printk_deferred(const char * fmt,...) { lx_emul_trace_and_stop(__func__); } @@ -181,25 +189,9 @@ void seq_printf(struct seq_file * m,const char * f,...) } -#include - -struct pseudo_fs_context * init_pseudo(struct fs_context * fc,unsigned long magic) -{ - lx_emul_trace_and_stop(__func__); -} - - #include -int smp_call_function_single(int cpu,void (* func)(void * info),void * info,int wait) -{ - lx_emul_trace_and_stop(__func__); -} - - -#include - -unsigned long _copy_to_user(void __user * to,const void * from,unsigned long n) +int smp_call_function_single(int cpu,smp_call_func_t func,void * info,int wait) { lx_emul_trace_and_stop(__func__); } @@ -216,3 +208,12 @@ int string_escape_mem(const char * src,size_t isz,char * dst,size_t osz,unsigned { lx_emul_trace_and_stop(__func__); } + + +#include + +void wake_q_add_safe(struct wake_q_head * head,struct task_struct * task) +{ + lx_emul_trace_and_stop(__func__); +} + diff --git a/repos/pc/src/test/driver_time/source.list b/repos/pc/src/test/driver_time/source.list index 0bcffb7da8..ef8f09d03b 100644 --- a/repos/pc/src/test/driver_time/source.list +++ b/repos/pc/src/test/driver_time/source.list @@ -7,6 +7,7 @@ drivers/base/devres.c drivers/base/driver.c drivers/base/platform.c drivers/base/property.c +drivers/pci/pci-driver.c kernel/async.c kernel/irq/chip.c kernel/irq/devres.c From ed8f71e459de2a4fdb664c25711e3b288a53eac1 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 31 Aug 2022 11:31:17 +0200 Subject: [PATCH 274/354] ahci_drv: use generic platform API Ref genodelabs/genode#4578 --- repos/os/run/ahci_block.run | 103 +++++++--- repos/os/src/drivers/ahci/ahci.h | 184 +++++++++++------- repos/os/src/drivers/ahci/ata_protocol.h | 6 +- repos/os/src/drivers/ahci/atapi_protocol.h | 8 +- repos/os/src/drivers/ahci/main.cc | 54 ++--- .../os/src/drivers/ahci/spec/x86/platform.cc | 93 --------- repos/os/src/drivers/ahci/spec/x86/platform.h | 65 ------- repos/os/src/drivers/ahci/spec/x86/target.mk | 7 - repos/os/src/drivers/ahci/target.inc | 8 - repos/os/src/drivers/ahci/target.mk | 8 + 10 files changed, 215 insertions(+), 321 deletions(-) delete mode 100644 repos/os/src/drivers/ahci/spec/x86/platform.cc delete mode 100644 repos/os/src/drivers/ahci/spec/x86/platform.h delete mode 100644 repos/os/src/drivers/ahci/spec/x86/target.mk delete mode 100644 repos/os/src/drivers/ahci/target.inc create mode 100644 repos/os/src/drivers/ahci/target.mk diff --git a/repos/os/run/ahci_block.run b/repos/os/run/ahci_block.run index 43d6895f63..6fdb74bd8e 100644 --- a/repos/os/run/ahci_block.run +++ b/repos/os/run/ahci_block.run @@ -1,35 +1,25 @@ assert_spec x86 -set mke2fs [installed_command mke2fs] -set dd [installed_command dd] - -# -# Build -# -set build_components { +create_boot_directory +build { core init timer + drivers/platform + drivers/acpi drivers/ahci + app/pci_decode server/report_rom app/block_tester } -source ${genode_dir}/repos/base/run/platform_drv.inc -append_platform_drv_build_components - -build $build_components - # # Build EXT2-file-system image # +set mke2fs [installed_command mke2fs] +set dd [installed_command dd] catch { exec $dd if=/dev/zero of=bin/ext2.raw bs=1M count=16 } catch { exec $mke2fs -F bin/ext2.raw } -create_boot_directory - -# -# Generate config -# -set config { +install_config { @@ -45,20 +35,78 @@ set config { + - } + -append_platform_drv_config + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -append config { + @@ -72,6 +120,7 @@ append config { + @@ -86,6 +135,7 @@ append config { + @@ -101,16 +151,13 @@ append config { } -install_config $config - # # Boot modules # -set boot_modules { core ld.lib.so init timer ahci_drv report_rom block_tester } - -append_platform_drv_boot_modules - -build_boot_image $boot_modules +build_boot_image { + core ld.lib.so init timer + pci_decode platform_drv report_rom acpi_drv + ahci_drv report_rom block_tester } append qemu_args " -nographic -device ahci,id=ahci -boot d " append qemu_args " -drive id=disk,file=bin/ext2.raw,format=raw,if=none -device ide-hd,drive=disk,bus=ahci.0 " diff --git a/repos/os/src/drivers/ahci/ahci.h b/repos/os/src/drivers/ahci/ahci.h index b0478ffdd9..8a11e51923 100644 --- a/repos/os/src/drivers/ahci/ahci.h +++ b/repos/os/src/drivers/ahci/ahci.h @@ -16,19 +16,18 @@ #define _AHCI__AHCI_H_ #include -#include +#include #include #include #include -#include - static bool constexpr verbose = false; namespace Ahci { + using namespace Genode; + struct Missing_controller : Exception { }; - class Platform; struct Protocol; struct Port; struct Port_base; @@ -39,47 +38,70 @@ namespace Ahci { using block_count_t = Block::block_count_t; } -class Ahci::Platform -{ - private : - - Data _data; - - protected: - - /** - * Return base address and size of HBA device registers - */ - addr_t _mmio_base() const; - - public: - - Platform(Env &env) : _data(env) { }; - - /** - * Register interrupt signal context - */ - void sigh_irq(Signal_context_capability sigh); - void ack_irq(); - - /** - * DMA - */ - Ram_dataspace_capability alloc_dma_buffer(size_t size); - void free_dma_buffer(Ram_dataspace_capability ds); - addr_t dma_addr(Ram_dataspace_capability); -}; - /** * HBA definitions */ -struct Ahci::Hba : Ahci::Platform, - Mmio +struct Ahci::Hba : private Platform::Device::Mmio { - Mmio::Delayer &_delayer; + using Platform::Device::Mmio::base; + using Index = Platform::Device::Mmio::Index; - Hba(Env &env, Mmio::Delayer &delayer) - : Platform(env), Mmio(_mmio_base()), _delayer(delayer) { } + Platform::Device::Irq _irq; + + /* + * mmio region of AHCI controller is always in BAR 5 + */ + class No_bar : Genode::Exception { }; + + Index _mmio_index(Platform::Connection &platform) + { + unsigned index = 0; + unsigned bar5 = ~0u; + + platform.update(); + + platform.with_xml([&] (Xml_node & xml) { + xml.with_optional_sub_node("device", [&] (Xml_node xml) { + xml.for_each_sub_node("io_mem", [&] (Xml_node node) { + unsigned bar = node.attribute_value("pci_bar", ~0u); + if (bar == 5) bar5 = index; + index++; + }); + }); + }); + + if (bar5 == ~0u) { + error("MMIO region of HBA (BAR 5) not found. Try adding\n" + "\n" + "to platform driver configuration."); + throw No_bar(); + } + + return { bar5 }; + } + + Hba(Platform::Device & dev, + Signal_context_capability cap, + Platform::Connection & platform) + : + Platform::Device::Mmio(dev, _mmio_index(platform)), + _irq(dev) + { + log("version: " + "major=", Hex(read()), " " + "minor=", Hex(read())); + log("command slots: ", command_slots()); + log("native command queuing: ", ncq() ? "yes" : "no"); + log("64-bit support: ", supports_64bit() ? "yes" : "no"); + + _irq.sigh(cap); + + /* enable AHCI */ + write(1); + + /* enable interrupts */ + write(1); + } /** * Host capabilites @@ -116,7 +138,7 @@ struct Ahci::Hba : Ahci::Platform, void ack_irq() { write(read()); - Platform::ack_irq(); + _irq.ack(); } /** @@ -135,16 +157,24 @@ struct Ahci::Hba : Ahci::Platform, struct Cap2 : Register<0x24, 32> { }; - void init() + bool port_implemented(unsigned port) const { - /* enable AHCI */ - write(1); - - /* enable interrupts */ - write(1); + return read() & (1u << port); } - Mmio::Delayer &delayer() { return _delayer; } + template + void handle_irq(FN const & fn) + { + unsigned port_list = read(); + while (port_list) { + unsigned port = log2(port_list); + port_list &= ~(1U << port); + fn(port); + } + + /* clear status register */ + ack_irq(); + } }; @@ -434,8 +464,10 @@ struct Ahci::Port_base : Mmio ATAPI_SIG_QEMU = 0xeb140000, /* will be fixed in Qemu */ }; - unsigned index { }; - Hba &hba; + unsigned index { }; + Platform::Connection &plat; + Hba &hba; + Mmio::Delayer &delayer; /** * Port signature @@ -445,13 +477,14 @@ struct Ahci::Port_base : Mmio static constexpr addr_t offset() { return 0x100; } static constexpr size_t size() { return 0x80; } - Port_base(unsigned index, Hba &hba) + Port_base(unsigned index, Platform::Connection &plat, Hba &hba, + Mmio::Delayer &delayer) : Mmio(hba.base() + offset() + (index * size())), - index(index), hba(hba) { } + index(index), plat(plat), hba(hba), delayer(delayer) { } bool implemented() const { - return hba.read() & (1u << index); + return hba.port_implemented(index); } bool ata() const { return read() == ATA_SIG; } @@ -488,6 +521,7 @@ struct Ahci::Port : private Port_base using Port_base::Register_set::Polling_timeout; using Port_base::index; using Port_base::hba; + using Port_base::delayer; struct Not_ready : Exception { }; @@ -507,10 +541,10 @@ struct Ahci::Port : private Port_base addr_t device_info = 0; addr_t dma_base = 0; /* physical address of DMA memory */ - Port(Protocol &protocol, Region_map &rm, Hba &hba, - unsigned index) + Port(Protocol &protocol, Region_map &rm, Platform::Connection & plat, + Hba &hba, Mmio::Delayer &delayer, unsigned index) : - Port_base(index, hba), + Port_base(index, plat, hba, delayer), protocol(protocol), rm(rm) { reset(); @@ -519,7 +553,7 @@ struct Ahci::Port : private Port_base stop(); - wait_for(hba.delayer(), Cmd::Cr::Equal(0)); + wait_for(delayer, Cmd::Cr::Equal(0)); init(); @@ -540,17 +574,17 @@ struct Ahci::Port : private Port_base { if (device_ds.valid()) { rm.detach((void *)cmd_list); - hba.free_dma_buffer(device_ds); + plat.free_dma_buffer(device_ds); } if (cmd_ds.valid()) { rm.detach((void *)cmd_table); - hba.free_dma_buffer(cmd_ds); + plat.free_dma_buffer(cmd_ds); } if (device_info_ds.valid()) { rm.detach((void*)device_info); - hba.free_dma_buffer(device_info_ds); + plat.free_dma_buffer(device_info_ds); } } @@ -679,14 +713,14 @@ struct Ahci::Port : private Port_base return; try { - wait_for(hba.delayer(), Tfd::Sts_bsy::Equal(0)); + wait_for(delayer, Tfd::Sts_bsy::Equal(0)); } catch (Polling_timeout) { error("HBA busy unable to start command processing."); return; } try { - wait_for(hba.delayer(), Tfd::Sts_drq::Equal(0)); + wait_for(delayer, Tfd::Sts_drq::Equal(0)); } catch (Polling_timeout) { error("HBA in DRQ unable to start command processing."); return; @@ -758,7 +792,7 @@ struct Ahci::Port : private Port_base throw Not_ready(); }, [&] { - hba.delayer().usleep(1000); + delayer.usleep(1000); status = read(); }, 10); } @@ -782,11 +816,11 @@ struct Ahci::Port : private Port_base warning("CMD.ST bit set during device reset --> unknown behavior"); write(1); - hba.delayer().usleep(1000); + delayer.usleep(1000); write(0); try { - wait_for(hba.delayer(), Ssts::Dec::Equal(Ssts::Dec::ESTABLISHED)); + wait_for(delayer, Ssts::Dec::Equal(Ssts::Dec::ESTABLISHED)); } catch (Polling_timeout) { warning("Port reset failed"); } @@ -846,10 +880,10 @@ struct Ahci::Port : private Port_base void setup_memory() { - device_ds = hba.alloc_dma_buffer(0x1000); + device_ds = plat.alloc_dma_buffer(0x1000, CACHED); /* command list 1K */ - addr_t phys = hba.dma_addr(device_ds); + addr_t phys = plat.dma_addr(device_ds); cmd_list = (addr_t)rm.attach(device_ds); command_list_base(phys); @@ -861,14 +895,14 @@ struct Ahci::Port : private Port_base * (FIS receive running) to clear */ write(0); - wait_for(hba.delayer(), Cmd::Fr::Equal(0)); + wait_for(delayer, Cmd::Fr::Equal(0)); fis_rcv_base(phys + 1024); /* command table */ size_t cmd_size = align_addr(cmd_slots * Command_table::size(), 12); - cmd_ds = hba.alloc_dma_buffer(cmd_size); + cmd_ds = plat.alloc_dma_buffer(cmd_size, CACHED); cmd_table = (addr_t)rm.attach(cmd_ds); - phys = hba.dma_addr(cmd_ds); + phys = plat.dma_addr(cmd_ds); /* set command table addresses in command list */ for (unsigned i = 0; i < cmd_slots; i++) { @@ -877,8 +911,8 @@ struct Ahci::Port : private Port_base } /* dataspace for device info */ - device_info_ds = hba.alloc_dma_buffer(0x1000); - device_info_dma_addr = hba.dma_addr(device_info_ds); + device_info_ds = plat.alloc_dma_buffer(0x1000, CACHED); + device_info_dma_addr = plat.dma_addr(device_info_ds); device_info = rm.attach(device_info_ds); } @@ -921,15 +955,15 @@ struct Ahci::Port : private Port_base { if (dma_base) return Ram_dataspace_capability(); - Ram_dataspace_capability dma = hba.alloc_dma_buffer(size); - dma_base = hba.dma_addr(dma); + Ram_dataspace_capability dma = plat.alloc_dma_buffer(size, CACHED); + dma_base = plat.dma_addr(dma); return dma; } void free_buffer(Ram_dataspace_capability ds) { dma_base = 0; - hba.free_dma_buffer(ds); + plat.free_dma_buffer(ds); } /********************** diff --git a/repos/os/src/drivers/ahci/ata_protocol.h b/repos/os/src/drivers/ahci/ata_protocol.h index cfd9ebc41f..88fb85424c 100644 --- a/repos/os/src/drivers/ahci/ata_protocol.h +++ b/repos/os/src/drivers/ahci/ata_protocol.h @@ -227,9 +227,9 @@ class Ata::Protocol : public Ahci::Protocol, Noncopyable table.fis.identify_device(); port.execute(0); - port.wait_for_any(port.hba.delayer(), Port::Is::Dss::Equal(1), - Port::Is::Pss::Equal(1), - Port::Is::Dhrs::Equal(1)); + port.wait_for_any(port.delayer, Port::Is::Dss::Equal(1), + Port::Is::Pss::Equal(1), + Port::Is::Dhrs::Equal(1)); _identity.construct(port.device_info); serial.construct(*_identity); diff --git a/repos/os/src/drivers/ahci/atapi_protocol.h b/repos/os/src/drivers/ahci/atapi_protocol.h index 4b0a2cbb58..e1cb346da1 100644 --- a/repos/os/src/drivers/ahci/atapi_protocol.h +++ b/repos/os/src/drivers/ahci/atapi_protocol.h @@ -93,21 +93,21 @@ class Atapi::Protocol : public Ahci::Protocol, Noncopyable [&] { _start_unit(port); - port.wait_for_any(port.hba.delayer(), + port.wait_for_any(port.delayer, Port::Is::Dss::Equal(1), Port::Is::Pss::Equal(1), Port::Is::Dhrs::Equal(1)); port.ack_irq(); /* read sense */ _read_sense(port); - port.wait_for_any(port.hba.delayer(), + port.wait_for_any(port.delayer, Port::Is::Dss::Equal(1), Port::Is::Pss::Equal(1), Port::Is::Dhrs::Equal(1)); port.ack_irq(); /* test unit ready */ _test_unit_ready(port); - port.wait_for(port.hba.delayer(), Port::Is::Dhrs::Equal(1)); + port.wait_for(port.delayer, Port::Is::Dhrs::Equal(1)); port.ack_irq(); Device_fis f(port.fis_base); @@ -116,7 +116,7 @@ class Atapi::Protocol : public Ahci::Protocol, Noncopyable throw Port::Polling_timeout(); _read_capacity(port); - port.wait_for_any(port.hba.delayer(), + port.wait_for_any(port.delayer, Port::Is::Dss::Equal(1), Port::Is::Pss::Equal(1), Port::Is::Dhrs::Equal(1)); port.ack_irq(); diff --git a/repos/os/src/drivers/ahci/main.cc b/repos/os/src/drivers/ahci/main.cc index 2b050b1939..b535e384a1 100644 --- a/repos/os/src/drivers/ahci/main.cc +++ b/repos/os/src/drivers/ahci/main.cc @@ -55,39 +55,30 @@ class Ahci::Driver : Noncopyable struct Timer_delayer : Mmio::Delayer, Timer::Connection { - Timer_delayer(Env &env) - : Timer::Connection(env) { } + using Timer::Connection::Connection; void usleep(uint64_t us) override { Timer::Connection::usleep(us); } } _delayer { _env }; - Hba _hba { _env, _delayer }; + Signal_handler _handler { _env.ep(), *this, &Driver::handle_irq }; + + Platform::Connection _plat { _env }; + Platform::Device _device { _plat }; + Hba _hba { _device, _handler, _plat }; Constructible _ata[MAX_PORTS]; Constructible _atapi[MAX_PORTS]; Constructible _ports[MAX_PORTS]; - Signal_handler _irq { _env.ep(), *this, &Driver::handle_irq }; - bool _enable_atapi; - - void _info() - { - log("version: " - "major=", Hex(_hba.read()), " " - "minor=", Hex(_hba.read())); - log("command slots: ", _hba.command_slots()); - log("native command queuing: ", _hba.ncq() ? "yes" : "no"); - log("64-bit support: ", _hba.supports_64bit() ? "yes" : "no"); - } + bool _enable_atapi; void _scan_ports(Region_map &rm) { - log("number of ports: ", _hba.port_count(), " pi: ", - Hex(_hba.read())); + log("number of ports: ", _hba.port_count()); for (unsigned index = 0; index < MAX_PORTS; index++) { - Port_base port(index, _hba); + Port_base port(index, _plat, _hba, _delayer); if (port.implemented() == false) continue; @@ -96,7 +87,8 @@ class Ahci::Driver : Noncopyable if (port.ata()) { try { _ata[index].construct(); - _ports[index].construct(*_ata[index], rm, _hba, index); + _ports[index].construct(*_ata[index], rm, _plat, + _hba, _delayer, index); enabled = true; } catch (...) { } @@ -104,7 +96,8 @@ class Ahci::Driver : Noncopyable } else if (port.atapi() && _enable_atapi) { try { _atapi[index].construct(); - _ports[index].construct(*_atapi[index], rm, _hba, index); + _ports[index].construct(*_atapi[index], rm, _plat, + _hba, _delayer, index); enabled = true; } catch (...) { } @@ -121,14 +114,6 @@ class Ahci::Driver : Noncopyable Driver(Env &env, Dispatch &dispatch, bool support_atapi) : _env(env), _dispatch(dispatch), _enable_atapi(support_atapi) { - _info(); - - /* register irq handler */ - _hba.sigh_irq(_irq); - - /* initialize HBA (IRQs, memory) */ - _hba.init(); - /* search for devices */ _scan_ports(env.rm()); } @@ -138,22 +123,15 @@ class Ahci::Driver : Noncopyable */ void handle_irq() { - unsigned port_list = _hba.read(); - while (port_list) { - unsigned port = log2(port_list); - port_list &= ~(1U << port); - - /* ack irq */ + _hba.handle_irq([&] (unsigned port) { if (_ports[port].constructed()) _ports[port]->handle_irq(); /* handle (pending) requests */ _dispatch.session(port); - } - - /* clear status register */ - _hba.ack_irq(); + }); } + Port &port(Session_label const &label, Session_policy const &policy) { /* try read device port number attribute */ diff --git a/repos/os/src/drivers/ahci/spec/x86/platform.cc b/repos/os/src/drivers/ahci/spec/x86/platform.cc deleted file mode 100644 index bc12cb560d..0000000000 --- a/repos/os/src/drivers/ahci/spec/x86/platform.cc +++ /dev/null @@ -1,93 +0,0 @@ -/* - * \brief Driver for PCI-bus platforms - * \author Sebastian Sumpf - * \date 2020-01-20 - */ - -/* - * Copyright (C) 2020 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#include - -Ahci::Data::Data(Env &env) - : env(env) -{ - pci_device_cap = pci.with_upgrade( - [&] () { return pci.next_device(pci_device_cap, AHCI_DEVICE, - CLASS_MASK); }); - - if (!pci_device_cap.valid()) { - throw Missing_controller(); - } - - /* construct pci client */ - pci_device.construct(pci_device_cap); - log("AHCI found (" - "vendor: ", Hex(pci_device->vendor_id()), " " - "device: ", Hex(pci_device->device_id()), " " - "class: ", Hex(pci_device->class_code()), ")"); - - /* map base address of controller */ - Io_mem_session_capability iomem_cap = pci_device->io_mem(pci_device->phys_bar_to_virt(AHCI_BASE_ID)); - iomem.construct(env.rm(), Io_mem_session_client(iomem_cap).dataspace()); - - uint16_t cmd = (uint16_t)pci_device->config_read(PCI_CMD, ::Platform::Device::ACCESS_16BIT); - cmd |= 0x2; /* respond to memory space accesses */ - cmd |= 0x4; /* enable bus master */ - _config_write(PCI_CMD, cmd, ::Platform::Device::ACCESS_16BIT); - - irq.construct(pci_device->irq(0)); -} - - -/************************ - ** Platform interface ** - ************************/ - -Genode::addr_t Ahci::Platform::_mmio_base() const -{ - return addr_t(_data.iomem->local_addr()); -} - - -void Ahci::Platform::sigh_irq(Signal_context_capability sigh) -{ - _data.irq->sigh(sigh); - ack_irq(); -} - - -void Ahci::Platform::ack_irq() { _data.irq->ack_irq(); } - - -Genode::Ram_dataspace_capability Ahci::Platform::alloc_dma_buffer(size_t size) -{ - size_t donate = size; - - return retry( - [&] () { - return retry( - [&] () { return _data.pci.alloc_dma_buffer(size, Genode::UNCACHED); }, - [&] () { _data.pci.upgrade_caps(2); }); - }, - [&] () { - _data.pci.upgrade_ram(donate); - donate = donate * 2 > size ? 4096 : donate * 2; - }); -} - - -void Ahci::Platform::free_dma_buffer(Genode::Ram_dataspace_capability ds) -{ - _data.pci.free_dma_buffer(ds); -} - - -Genode::addr_t Ahci::Platform::dma_addr(Genode::Ram_dataspace_capability ds) -{ - return _data.pci.dma_addr(ds); -} diff --git a/repos/os/src/drivers/ahci/spec/x86/platform.h b/repos/os/src/drivers/ahci/spec/x86/platform.h deleted file mode 100644 index fc5c53b110..0000000000 --- a/repos/os/src/drivers/ahci/spec/x86/platform.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef _AHCI__SPEC__X86__PLATFORM_H_ -#define _AHCI__SPEC__X86__PLATFORM_H_ -/* - * \brief Driver for PCI-bus platforms - * \author Sebastian Sumpf - * \date 2020-01-20 - */ - -/* - * Copyright (C) 2020 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#include -#include -#include -#include - -namespace Ahci { - struct Data; - using namespace Genode; -} - -struct Ahci::Data -{ - enum Pci_config { - CLASS_MASS_STORAGE = 0x10000u, - SUBCLASS_AHCI = 0x600u, - CLASS_MASK = 0xffff00u, - AHCI_DEVICE = CLASS_MASS_STORAGE | SUBCLASS_AHCI, - AHCI_BASE_ID = 0x5, /* resource id of ahci base addr */ - PCI_CMD = 0x4, - }; - - Genode::Env &env; - - Platform::Connection pci { env }; - Platform::Device_capability pci_device_cap { }; - Constructible pci_device { }; - Constructible irq { }; - Constructible iomem { }; - - Data(Env &env); - - void _config_write(uint8_t op, uint16_t cmd, - Platform::Device::Access_size width) - { - size_t donate = 4096; - retry( - [&] () { - retry( - [&] () { pci_device->config_write(op, cmd, width); }, - [&] () { pci.upgrade_caps(2); }); - }, - [&] () { - pci.upgrade_ram(donate); - donate *= 2; - }); - } -}; - - -#endif /* _AHCI__SPEC__X86__PLATFORM_H_ */ diff --git a/repos/os/src/drivers/ahci/spec/x86/target.mk b/repos/os/src/drivers/ahci/spec/x86/target.mk deleted file mode 100644 index fe44856e5b..0000000000 --- a/repos/os/src/drivers/ahci/spec/x86/target.mk +++ /dev/null @@ -1,7 +0,0 @@ -TARGET = ahci_drv -REQUIRES = x86 - -INC_DIR += $(REP_DIR)/src/drivers/ahci/spec/x86 - -include $(REP_DIR)/src/drivers/ahci/target.inc - diff --git a/repos/os/src/drivers/ahci/target.inc b/repos/os/src/drivers/ahci/target.inc deleted file mode 100644 index dee2052fcc..0000000000 --- a/repos/os/src/drivers/ahci/target.inc +++ /dev/null @@ -1,8 +0,0 @@ -SRC_CC += main.cc platform.cc -INC_DIR += $(REP_DIR)/src/drivers/ahci -LIBS += base - -CC_CXX_WARN_STRICT_CONVERSION = - -vpath platform.cc $(PRG_DIR) -vpath %.cc $(REP_DIR)/src/drivers/ahci diff --git a/repos/os/src/drivers/ahci/target.mk b/repos/os/src/drivers/ahci/target.mk new file mode 100644 index 0000000000..7d22e9a0dd --- /dev/null +++ b/repos/os/src/drivers/ahci/target.mk @@ -0,0 +1,8 @@ +TARGET = ahci_drv +SRC_CC += main.cc +INC_DIR += $(PRG_DIR) +LIBS += base + +CC_CXX_WARN_STRICT_CONVERSION = + +vpath %.cc $(PRG_DIR) From 92b5dda2bc944d4bc82f230b67a6a89aa60c49cf Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 31 Aug 2022 13:51:10 +0200 Subject: [PATCH 275/354] vesa_fb_drv: use generic platform API Ref genodelabs/genode#4578 --- .../drivers/framebuffer/vesa/framebuffer.cc | 11 -- .../src/drivers/framebuffer/vesa/hw_emul.cc | 143 ++++++------------ 2 files changed, 47 insertions(+), 107 deletions(-) diff --git a/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc b/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc index 68ffca72e7..fb225c0339 100644 --- a/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc +++ b/repos/libports/src/drivers/framebuffer/vesa/framebuffer.cc @@ -16,7 +16,6 @@ #include #include #include -#include /* local includes */ #include "framebuffer.h" @@ -263,16 +262,6 @@ int Framebuffer::set_mode(unsigned &width, unsigned &height, unsigned mode) void Framebuffer::init(Genode::Env &env, Genode::Allocator &heap) { local_init_genode_env(env, heap); - - { - /* - * Wait until Acpi/Pci driver initialization is done to avoid - * potentially concurrent access by this driver and the Acpi/Pci driver - * to the graphics device, i.e., to the PCI config space. - */ - Platform::Connection sync(env); - } - hw_emul_init(env); X86emu::init(env, heap); } diff --git a/repos/libports/src/drivers/framebuffer/vesa/hw_emul.cc b/repos/libports/src/drivers/framebuffer/vesa/hw_emul.cc index 6f21c597f7..f53ab27ab7 100644 --- a/repos/libports/src/drivers/framebuffer/vesa/hw_emul.cc +++ b/repos/libports/src/drivers/framebuffer/vesa/hw_emul.cc @@ -33,8 +33,7 @@ static const bool verbose = false; ** PCI virtualization ** ************************/ -#include -#include +#include enum { PCI_ADDR_REG = 0xcf8, @@ -42,89 +41,59 @@ enum { }; -struct Devfn -{ - unsigned char b, d, f; - - Devfn(Platform::Device &device) { device.bus_address(&b, &d, &f); } - - Devfn(unsigned short devfn) - : b((devfn >> 8) & 0xff), d((devfn >> 3) & 0x1f), f(devfn & 7) { } - - unsigned short devfn() const { return b << 8 | d << 3 | f; } - - void print(Genode::Output &out) const - { - Genode::print(out, Hex(b, Hex::OMIT_PREFIX, Hex::PAD), ":", - Hex(d, Hex::OMIT_PREFIX, Hex::PAD), ".", - Hex(f, Hex::OMIT_PREFIX)); - } -}; - - class Pci_card { private: - Platform::Connection _pci_drv; - Platform::Device_client _device; - Devfn _devfn; + enum { BAR_MAX = 6 }; - Platform::Device_capability _first_device() - { - return _pci_drv.with_upgrade([&] () { - return _pci_drv.first_device(); }); - } - - Platform::Device_capability _next_device(Platform::Device_capability prev) - { - return _pci_drv.with_upgrade([&] () { - return _pci_drv.next_device(prev); }); - } - - Platform::Device_capability _find_vga_card() - { - /* - * Iterate through all accessible devices. - */ - Platform::Device_capability prev_device_cap, device_cap; - for (device_cap = _first_device(); - device_cap.valid(); - device_cap = _next_device(prev_device_cap)) { - - Platform::Device_client device(device_cap); - - if (prev_device_cap.valid()) - _pci_drv.release_device(prev_device_cap); - /* - * If the device is an VGA compatible controller with base - * class 0x03 and sub class 0x00 stop iteration. (We shift out - * the interface bits.) - */ - if ((device.class_code() >> 8) == 0x0300) - break; - - prev_device_cap = device_cap; - } - - if (!device_cap.valid()) { - Genode::error("PCI VGA card not found."); - throw Framebuffer::Fatal(); - } - - return device_cap; - } + Platform::Connection _pci_drv; + Platform::Device _device { _pci_drv }; + unsigned _vendor_device_id { 0 }; + unsigned _class_code { 0 }; + uint32_t _bar[BAR_MAX] { 0xffffffff}; public: - Pci_card(Genode::Env &env) - : _pci_drv(env), _device(_find_vga_card()), _devfn(_device) + struct Invalid_bar : Exception {}; + + Pci_card(Genode::Env &env) : _pci_drv(env) { - Genode::log("Found PCI VGA at ", _devfn); + _pci_drv.update(); + _pci_drv.with_xml([&] (Xml_node node) { + node.with_optional_sub_node("device", [&] (Xml_node node) { + node.for_each_sub_node("io_mem", [&] (Xml_node node) { + unsigned bar = node.attribute_value("pci_bar", 0U); + uint32_t addr = node.attribute_value("phys_addr", 0UL); + if (bar >= BAR_MAX) throw Invalid_bar(); + _bar[bar] = addr; + }); + node.for_each_sub_node("io_port_range", [&] (Xml_node node) { + unsigned bar = node.attribute_value("pci_bar", 0U); + uint32_t addr = node.attribute_value("phys_addr", 0UL); + if (bar >= BAR_MAX) throw Invalid_bar(); + _bar[bar] = addr | 1; + }); + node.with_optional_sub_node("pci-config", [&] (Xml_node node) { + unsigned v = node.attribute_value("vendor_id", 0U); + unsigned d = node.attribute_value("device_id", 0U); + unsigned c = node.attribute_value("class", 0U); + unsigned r = node.attribute_value("revision", 0U); + _vendor_device_id = v | d << 16; + _class_code = r | c << 8; + }); + }); + }); } - Platform::Device &device() { return _device; } - unsigned short devfn() const { return _devfn.devfn(); } + unsigned vendor_device_id() { return _vendor_device_id; } + unsigned class_code() { return _class_code; } + + uint32_t bar(unsigned bar) + { + if (bar >= BAR_MAX) throw Invalid_bar(); + return _bar[bar]; + } }; @@ -154,14 +123,6 @@ static bool handle_pci_port_write(unsigned short port, T val) return true; } - unsigned const devfn = (val >> 8) & 0xffff; - if (devfn != pci_card->devfn()) { - if (verbose) - warning("accessing unknown PCI device ", Devfn(devfn)); - pci_cfg_addr_valid = false; - return true; - } - /* remember the configuration address */ pci_cfg_addr = val & 0xfc; pci_cfg_addr_valid = true; @@ -208,14 +169,12 @@ static bool handle_pci_port_read(unsigned short port, T *val) switch (pci_cfg_addr) { case 0: /* vendor / device ID */ - raw_val = pci_card->device().vendor_id() | - (pci_card->device().device_id() << 16); + raw_val = pci_card->vendor_device_id(); break; case 4: /* status and command */ case 8: /* class code / revision ID */ - raw_val = pci_card->device().config_read(pci_cfg_addr, - Platform::Device::ACCESS_32BIT); + raw_val = pci_card->class_code(); break; case 0x10: /* base address register 0 */ @@ -225,16 +184,8 @@ static bool handle_pci_port_read(unsigned short port, T *val) case 0x20: /* base address register 4 */ case 0x24: /* base address register 5 */ { - unsigned bar = (pci_cfg_addr - 0x10) / 4; - Platform::Device::Resource res = pci_card->device().resource(bar); - if (res.type() == Platform::Device::Resource::INVALID) { - warning("requested PCI resource ", bar, " invalid"); - *val = 0; - return true; - } - - raw_val = res.bar(); - break; + raw_val = pci_card->bar((pci_cfg_addr-0x10)/4); + break; } default: From feaaaa3e8be3b5a2b3f379e2909b8926485c7682 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Wed, 31 Aug 2022 13:51:54 +0200 Subject: [PATCH 276/354] drivers_interactive-pc: use generic platform_drv Ref genodelabs/genode#4578 --- .../pkg/drivers_interactive-pc/archives | 3 ++ .../raw/drivers_interactive-pc/drivers.config | 54 +++++++++++++++---- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/repos/os/recipes/pkg/drivers_interactive-pc/archives b/repos/os/recipes/pkg/drivers_interactive-pc/archives index 764954b3de..3749d1bf72 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pc/archives +++ b/repos/os/recipes/pkg/drivers_interactive-pc/archives @@ -5,5 +5,8 @@ _/src/pc_usb_host_drv _/src/usb_hid_drv _/src/vesa_drv _/src/report_rom +_/src/rom_filter _/src/event_filter +_/src/pci_decode _/raw/drivers_interactive-pc +_/raw/pc-devices diff --git a/repos/os/recipes/raw/drivers_interactive-pc/drivers.config b/repos/os/recipes/raw/drivers_interactive-pc/drivers.config index 7edf0fac53..6e8093a435 100644 --- a/repos/os/recipes/raw/drivers_interactive-pc/drivers.config +++ b/repos/os/recipes/raw/drivers_interactive-pc/drivers.config @@ -36,7 +36,8 @@ - + + @@ -47,16 +48,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + @@ -67,11 +100,10 @@ - - - - - + + + + @@ -127,7 +159,7 @@ - + From 7cf6651d2c2f3e746b08aacc56bad1815108db95 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 2 Sep 2022 13:35:47 +0200 Subject: [PATCH 277/354] ipxe_nic_drv: use generic platform API Ref genodelabs/genode#4578 --- .../dde_ipxe/src/lib/dde_ipxe/dde_support.cc | 374 ++++++------------ .../src/lib/dde_ipxe/include/dde_support.h | 19 +- repos/dde_ipxe/src/lib/dde_ipxe/nic.c | 98 ++--- 3 files changed, 153 insertions(+), 338 deletions(-) diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc index 8852015120..52bbb35793 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc +++ b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc @@ -22,14 +22,16 @@ /* Genode includes */ #include #include +#include +#include #include #include #include #include #include #include -#include -#include +#include +#include #include #include #include @@ -43,8 +45,8 @@ /* DDE support includes */ #include +using namespace Genode; -static Genode::Entrypoint *_global_ep; static Genode::Env *_global_env; static Genode::Allocator *_global_alloc; @@ -52,7 +54,6 @@ static Genode::Allocator *_global_alloc; void dde_support_init(Genode::Env &env, Genode::Allocator &alloc) { _global_env = &env; - _global_ep = &env.ep(); _global_alloc = &alloc; } @@ -142,145 +143,118 @@ extern "C" void dde_mdelay(unsigned long msecs) ** PCI handling ** ******************/ +struct Range { addr_t start; size_t size; }; + +using Io_mem = Platform::Device::Mmio; +using Io_port = Platform::Device::Io_port_range; + struct Pci_driver { - enum { - PCI_BASE_CLASS_NETWORK = 0x02, - CLASS_MASK = 0xff0000, - CLASS_NETWORK = PCI_BASE_CLASS_NETWORK << 16 - }; + enum { BACKING_STORE_SIZE = 1024 * 1024 }; - Genode::Region_map &_rm; + Env & _env; + Heap _heap { _env.ram(), _env.rm() }; + Platform::Connection _pci { _env }; + Platform::Device _dev { _pci }; + Platform::Device::Irq _irq { _dev }; + Platform::Dma_buffer _dma { _pci, BACKING_STORE_SIZE, CACHED }; + Constructible _mmio {}; + Constructible _io_port {}; - Platform::Connection _pci; - Platform::Device_capability _cap; - Platform::Device_capability _last_cap; + Io_signal_handler _io_handler { _env.ep(), *this, + &Pci_driver::_irq_handle }; - struct Region + typedef void (*irq_handler)(void*); + irq_handler _irq_handler { nullptr }; + void * _irq_data { nullptr }; + + String<16> _name; + dde_pci_device_t _pci_info; + + void _device_handle() {} /* just ignore changes here */ + + void _irq_handle() { - Genode::addr_t base; - Genode::addr_t mapped_base; - } _region; - - template - Platform::Device::Access_size _access_size(T t) - { - switch (sizeof(T)) { - case 1: return Platform::Device::ACCESS_8BIT; - case 2: return Platform::Device::ACCESS_16BIT; - default: return Platform::Device::ACCESS_32BIT; - } + if (_irq_handler) _irq_handler(_irq_data); + _irq.ack(); } - void _bus_address(int *bus, int *dev, int *fun) + Pci_driver(Genode::Env &env) : _env(env) { - Platform::Device_client client(_cap); - unsigned char b, d, f; - client.bus_address(&b, &d, &f); + _pci.update(); + _pci.with_xml([&] (Xml_node node) { + node.with_optional_sub_node("device", [&] (Xml_node node) + { + node.with_optional_sub_node("pci-config", [&] (Xml_node node) + { + _name = node.attribute_value("name", String<16>()); + _pci_info.vendor = node.attribute_value("vendor_id", 0U); + _pci_info.device = node.attribute_value("device_id", 0U); + _pci_info.class_code = node.attribute_value("class", 0U); + _pci_info.revision = node.attribute_value("revision", 0U); + _pci_info.name = _name.string(); + }); - *bus = b; - *dev = d; - *fun = f; + node.with_optional_sub_node("io_mem", [&] (Xml_node node) + { + _mmio.construct(_dev); + _pci_info.io_mem_addr = (addr_t)_mmio->local_addr(); + }); + + node.with_optional_sub_node("io_port", [&] (Xml_node node) + { + _io_port.construct(_dev); + _pci_info.io_port_start = 0x10; + }); + }); + }); + + _irq.sigh(_io_handler); } - - Pci_driver(Genode::Env &env, Genode::Region_map &rm) - : _rm(rm), _pci(env) { } - template void config_read(unsigned int devfn, T *val) { - Platform::Device_client client(_cap); - *val = client.config_read(devfn, _access_size(*val)); + switch (devfn) { + case 0x4: /* CMD */ + *val = 0x7; + return; + default: + *val = 0; + }; } template - void config_write(unsigned int devfn, T val) - { - Platform::Device_client client(_cap); + void config_write(unsigned int devfn, T val) { } - _pci.with_upgrade([&] () { - client.config_write(devfn, val, _access_size(val)); }); + dde_pci_device_t device() { return _pci_info; } + + Range dma() { + return { (addr_t)_dma.local_addr(), BACKING_STORE_SIZE }; } + + Genode::addr_t virt_to_dma(Genode::addr_t virt) { + return virt - (addr_t)_dma.local_addr() + _dma.dma_addr(); } + + void irq(irq_handler handler, void * data) + { + _irq_handler = handler; + _irq_data = data; } - int first_device(int *bus, int *dev, int *fun) - { - _cap = _pci.with_upgrade([&] () { - return _pci.first_device(CLASS_NETWORK, CLASS_MASK); }); - - if (!_cap.valid()) - return -1; - - _bus_address(bus, dev, fun); - return 0; - } - - int next_device(int *bus, int *dev, int *fun) - { - int result = -1; - - _last_cap = _cap; - _cap = _pci.with_upgrade([&] () { - return _pci.next_device(_cap, CLASS_NETWORK, CLASS_MASK); }); - - if (_cap.valid()) { - _bus_address(bus, dev, fun); - result = 0; - } - - if (_last_cap.valid()) - _pci.release_device(_last_cap); - - return result; - } - - Genode::addr_t alloc_dma_memory(Genode::size_t size) - { - try { - using namespace Genode; - - size_t donate = size; - - Ram_dataspace_capability ram_cap = - retry( - [&] () { - return retry( - [&] () { return _pci.alloc_dma_buffer(size, UNCACHED); }, - [&] () { _pci.upgrade_caps(2); }); - }, - [&] () { - _pci.upgrade_ram(donate); - donate = donate * 2 > size ? 4096 : donate * 2; - }); - - _region.mapped_base = _rm.attach(ram_cap); - _region.base = _pci.dma_addr(ram_cap); - - return _region.mapped_base; - } catch (...) { - Genode::error("failed to allocate dma memory"); - return 0; - } - } - - Genode::addr_t virt_to_phys(Genode::addr_t virt) { - return virt - _region.mapped_base + _region.base; } + template + void with_io_port(FN const & fn) { + if (_io_port.constructed()) fn(*_io_port); } }; static Pci_driver& pci_drv() { - static Pci_driver _pci_drv { *_global_env , _global_env->rm() }; + static Pci_driver _pci_drv { *_global_env }; return _pci_drv; } -extern "C" int dde_pci_first_device(int *bus, int *dev, int *fun) { - return pci_drv().first_device(bus, dev, fun); } - - -extern "C" int dde_pci_next_device(int *bus, int *dev, int *fun) { - return pci_drv().next_device(bus, dev, fun); } +extern "C" dde_pci_device_t dde_pci_device() { return pci_drv().device(); } extern "C" void dde_pci_readb(int pos, dde_uint8_t *val) { @@ -311,69 +285,22 @@ extern "C" void dde_pci_writel(int pos, dde_uint32_t val) { ** Interrupt handling ** ************************/ -struct Irq_handler -{ - Genode::Irq_session_client irq; - Genode::Signal_handler dispatcher; - - typedef void (*irq_handler)(void*); - - irq_handler handler; - void *priv; - - void handle() - { - handler(priv); - irq.ack_irq(); - } - - Irq_handler(Genode::Entrypoint &ep, Genode::Irq_session_capability cap, - irq_handler handler, void *priv) - : - irq(cap), dispatcher(ep, *this, &Irq_handler::handle), - handler(handler), priv(priv) - { - irq.sigh(dispatcher); - - /* intial ack so that we will receive IRQ signals */ - irq.ack_irq(); - } -}; - - -extern "C" int dde_interrupt_attach(void(*handler)(void *), void *priv) -{ - static Genode::Constructible _irq_handler; - - if (_irq_handler.constructed()) { - Genode::error("Irq_handler already registered"); - return -1; - } - - try { - Platform::Device_client device(pci_drv()._cap); - _irq_handler.construct(*_global_ep, device.irq(0), handler, priv); - } catch (...) { return -1; } - - return 0; -} +extern "C" void dde_interrupt_attach(void(*handler)(void *), void *priv) { + pci_drv().irq(handler, priv); } /*************************************************** ** Support for aligned and DMA memory allocation ** ***************************************************/ -enum { BACKING_STORE_SIZE = 1024 * 1024 }; - struct Backing_store { Genode::Allocator_avl _avl; Backing_store (Genode::Allocator &alloc) : _avl(&alloc) { - Genode::addr_t base = pci_drv().alloc_dma_memory(BACKING_STORE_SIZE); - /* add to allocator */ - _avl.add_range(base, BACKING_STORE_SIZE); + Range r = pci_drv().dma(); + _avl.add_range(r.start, r.size); } }; @@ -407,55 +334,43 @@ extern "C" void dde_dma_free(void *p, dde_size_t size) { extern "C" dde_addr_t dde_dma_get_physaddr(void *virt) { - return pci_drv().virt_to_phys((Genode::addr_t)virt); } + return pci_drv().virt_to_dma((Genode::addr_t)virt); } /************** ** I/O port ** **************/ -static Genode::Constructible & io_port() +extern "C" dde_uint8_t dde_inb(dde_addr_t port) { - static Genode::Constructible _io_port; - return _io_port; + dde_uint8_t v; + pci_drv().with_io_port([&] (Io_port & iop) { v = iop.inb(port); }); + return v; } - -extern "C" void dde_request_io(dde_uint8_t virt_bar_ioport) +extern "C" dde_uint16_t dde_inw(dde_addr_t port) { - using namespace Genode; - - if (io_port().constructed()) { io_port().destruct(); } - - Platform::Device_client device(pci_drv()._cap); - Io_port_session_capability cap = device.io_port(virt_bar_ioport); - - io_port().construct(cap); + dde_uint16_t v; + pci_drv().with_io_port([&] (Io_port & iop) { v = iop.inw(port); }); + return v; } - -extern "C" dde_uint8_t dde_inb(dde_addr_t port) { - return io_port()->inb(port); } - - -extern "C" dde_uint16_t dde_inw(dde_addr_t port) { - return io_port()->inw(port); } - - -extern "C" dde_uint32_t dde_inl(dde_addr_t port) { - return io_port()->inl(port); } +extern "C" dde_uint32_t dde_inl(dde_addr_t port) +{ + dde_uint32_t v; + pci_drv().with_io_port([&] (Io_port & iop) { v = iop.inl(port); }); + return v; +} extern "C" void dde_outb(dde_addr_t port, dde_uint8_t data) { - io_port()->outb(port, data); } - + pci_drv().with_io_port([&] (Io_port & iop) { iop.outb(port, data); }); } extern "C" void dde_outw(dde_addr_t port, dde_uint16_t data) { - io_port()->outw(port, data); } - + pci_drv().with_io_port([&] (Io_port & iop) { iop.outw(port, data); }); } extern "C" void dde_outl(dde_addr_t port, dde_uint32_t data) { - io_port()->outl(port, data); } + pci_drv().with_io_port([&] (Io_port & iop) { iop.outl(port, data); }); } /********************** @@ -671,74 +586,15 @@ extern "C" void dde_slab_free(void *p) { ** I/O memory ** ****************/ -struct Io_memory -{ - Genode::Io_mem_session_client _mem; - Genode::Io_mem_dataspace_capability _mem_ds; - - Genode::addr_t _vaddr; - - Io_memory(Genode::Region_map &rm, - Genode::addr_t base, Genode::Io_mem_session_capability cap) - : - _mem(cap), - _mem_ds(_mem.dataspace()) - { - if (!_mem_ds.valid()) - throw Genode::Exception(); - - _vaddr = rm.attach(_mem_ds); - _vaddr |= base & 0xfff; - } - - Genode::addr_t vaddr() const { return _vaddr; } -}; - - -static Genode::Constructible & io_mem() -{ - static Genode::Constructible _io_mem; - return _io_mem; -} - - extern "C" int dde_request_iomem(dde_addr_t start, dde_addr_t *vaddr) { - if (io_mem().constructed()) { - Genode::error("Io_memory already requested"); - return -1; - } - - Platform::Device_client device(pci_drv()._cap); - Genode::Io_mem_session_capability cap; - - Genode::uint8_t virt_iomem_bar = 0; - for (unsigned i = 0; i < Platform::Device::NUM_RESOURCES; i++) { - Platform::Device::Resource res = device.resource(i); - if (res.type() == Platform::Device::Resource::MEMORY) { - if (res.base() == start) { - cap = device.io_mem(virt_iomem_bar); - break; - } - virt_iomem_bar ++; - } - } - - if (!cap.valid()) { return -1; } - - try { - io_mem().construct(_global_env->rm(), start, cap); - } catch (...) { return -1; } - - *vaddr = io_mem()->vaddr(); + /* + * We just return the virtual address as physical one, + * because io_mem address announced was already a virtual one + */ + *vaddr = start; return 0; } -extern "C" int dde_release_iomem(dde_addr_t start, dde_size_t size) -{ - try { - io_mem().destruct(); - return 0; - } catch (...) { return -1; } -} +extern "C" int dde_release_iomem(dde_addr_t start, dde_size_t size) { return 0; } diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h b/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h index 8ee6e28606..79cfe41994 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h +++ b/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h @@ -72,15 +72,26 @@ void dde_lock_leave(void); ** Interrupt handling ** ************************/ -int dde_interrupt_attach(void (*handler)(void *), void *priv); +void dde_interrupt_attach(void (*handler)(void *), void *priv); /****************** ** PCI handling ** ******************/ -int dde_pci_first_device(int *, int *, int *); -int dde_pci_next_device(int *, int *, int *); +struct dde_pci_device_info +{ + const char * name; + unsigned short vendor; + unsigned short device; + unsigned int class_code; + unsigned int revision; + unsigned long io_mem_addr; + unsigned short io_port_start; +}; +typedef struct dde_pci_device_info dde_pci_device_t; + +dde_pci_device_t dde_pci_device(void); void dde_pci_readb(int, dde_uint8_t *); void dde_pci_readw(int, dde_uint16_t *); @@ -94,8 +105,6 @@ void dde_pci_writel(int, dde_uint32_t); ** I/O port ** **************/ -void dde_request_io(dde_uint8_t); - dde_uint8_t dde_inb(dde_addr_t); dde_uint16_t dde_inw(dde_addr_t); dde_uint32_t dde_inl(dde_addr_t); diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c index 73c25ff550..b992d6bc40 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c +++ b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c @@ -54,34 +54,6 @@ static struct pci_driver *pci_drivers[] = { &tg3_pci_driver }; -/** - * Update BARs of PCI device - */ -static void pci_read_bases(struct pci_device *pci_dev) -{ - uint32_t bar; - int reg; - uint8_t virt_bar_ioport = 0; - - for (reg = PCI_BASE_ADDRESS_0; reg <= PCI_BASE_ADDRESS_5; reg += 4) { - pci_read_config_dword(pci_dev, reg, &bar); - if (bar & PCI_BASE_ADDRESS_SPACE_IO) { - if (!pci_dev->ioaddr) { - pci_dev->ioaddr = bar & PCI_BASE_ADDRESS_IO_MASK; - - dde_request_io(virt_bar_ioport); - } - virt_bar_ioport ++; - } else { - if (!pci_dev->membase) - pci_dev->membase = bar & PCI_BASE_ADDRESS_MEM_MASK; - /* Skip next BAR if 64-bit */ - if (bar & PCI_BASE_ADDRESS_MEM_TYPE_64) - reg += 4; - } - } -} - /** * Probe one PCI device @@ -125,52 +97,34 @@ enum { NO_DEVICE_FOUND = ~0U }; */ static unsigned scan_pci(void) { - int ret, bus = 0, dev = 0, fun = 0; - for (ret = dde_pci_first_device(&bus, &dev, &fun); - ret == 0; - ret = dde_pci_next_device(&bus, &dev, &fun)) { + dde_pci_device_t dev = dde_pci_device(); + struct pci_device *pci_dev = zalloc(sizeof(*pci_dev)); - dde_uint32_t class_code; - dde_pci_readl(PCI_CLASS_REVISION, &class_code); - class_code >>= 8; - if (PCI_BASE_CLASS(class_code) != PCI_BASE_CLASS_NETWORK) - continue; + LOG("Found: %s %04x:%04x (rev %02x)", + dev.name, dev.vendor, dev.device, dev.revision); - dde_uint16_t vendor, device; - dde_pci_readw(PCI_VENDOR_ID, &vendor); - dde_pci_readw(PCI_DEVICE_ID, &device); - dde_uint8_t rev, irq; - dde_pci_readb(PCI_REVISION_ID, &rev); - dde_pci_readb(PCI_INTERRUPT_LINE, &irq); - LOG("Found: " FMT_BUSDEVFN " %04x:%04x (rev %02x) IRQ %02x", - bus, dev, fun, vendor, device, rev, irq); + pci_dev->busdevfn = PCI_BUSDEVFN(0, 1, 0); + pci_dev->vendor = dev.vendor; + pci_dev->device = dev.device; + pci_dev->class = dev.class_code; + pci_dev->membase = dev.io_mem_addr; + pci_dev->ioaddr = dev.io_port_start; + pci_dev->irq = 32; - struct pci_device *pci_dev = zalloc(sizeof(*pci_dev)); + pci_dev->dev.desc.bus_type = BUS_TYPE_PCI; + pci_dev->dev.desc.location = pci_dev->busdevfn; + pci_dev->dev.desc.vendor = pci_dev->vendor; + pci_dev->dev.desc.device = pci_dev->device; + pci_dev->dev.desc.class = pci_dev->class; + pci_dev->dev.desc.ioaddr = pci_dev->ioaddr; + pci_dev->dev.desc.irq = pci_dev->irq; - pci_dev->busdevfn = PCI_BUSDEVFN(bus, dev, fun); - pci_dev->vendor = vendor; - pci_dev->device = device; - pci_dev->class = class_code; - pci_dev->irq = irq; - - pci_read_bases(pci_dev); - - pci_dev->dev.desc.bus_type = BUS_TYPE_PCI; - pci_dev->dev.desc.location = pci_dev->busdevfn; - pci_dev->dev.desc.vendor = pci_dev->vendor; - pci_dev->dev.desc.device = pci_dev->device; - pci_dev->dev.desc.class = pci_dev->class; - pci_dev->dev.desc.ioaddr = pci_dev->ioaddr; - pci_dev->dev.desc.irq = pci_dev->irq; - - /* we found our device -> break loop */ - if (!probe_pci_device(pci_dev)) - return pci_dev->dev.desc.location; - - /* free device if no driver was found */ - free(pci_dev); - } + /* we found our device -> break loop */ + if (!probe_pci_device(pci_dev)) + return pci_dev->dev.desc.location; + /* free device if no driver was found */ + free(pci_dev); return NO_DEVICE_FOUND; } @@ -348,11 +302,7 @@ int dde_ipxe_nic_init() } /* initialize IRQ handler */ - int err = dde_interrupt_attach(irq_handler, 0); - if (err) { - LOG("attaching to IRQ %02x failed", net_dev->dev->desc.irq); - return 0; - } + dde_interrupt_attach(irq_handler, 0); netdev_irq(net_dev, 1); dde_lock_leave(); From 8d746a701edbc85cce438f2a6681db52d74b5b6d Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 2 Sep 2022 13:37:36 +0200 Subject: [PATCH 278/354] drivers_nic-pc: use generic platform_drv Ref genodelabs/genode#4578 --- .../gems/recipes/pkg/drivers_nic-pc/archives | 1 + .../recipes/raw/drivers_nic-pc/drivers.config | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/repos/gems/recipes/pkg/drivers_nic-pc/archives b/repos/gems/recipes/pkg/drivers_nic-pc/archives index f1cf2b2ddf..2dfdd6f505 100644 --- a/repos/gems/recipes/pkg/drivers_nic-pc/archives +++ b/repos/gems/recipes/pkg/drivers_nic-pc/archives @@ -2,4 +2,5 @@ _/src/platform_drv _/src/acpi_drv _/src/ipxe_nic_drv _/src/report_rom +_/src/pci_decode _/raw/drivers_nic-pc diff --git a/repos/gems/recipes/raw/drivers_nic-pc/drivers.config b/repos/gems/recipes/raw/drivers_nic-pc/drivers.config index a1527c084f..8420d00037 100644 --- a/repos/gems/recipes/raw/drivers_nic-pc/drivers.config +++ b/repos/gems/recipes/raw/drivers_nic-pc/drivers.config @@ -38,7 +38,8 @@ - + + @@ -48,16 +49,28 @@ - - + + + + + + + + + + + + + + + - - + @@ -72,7 +85,7 @@ - + From 03cec5cdd7be8d5cd3819ae29be9ec3765a68c7f Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 9 Sep 2022 11:49:07 +0200 Subject: [PATCH 279/354] dde_bsd: use generic platform API Ref genodelabs/genode#4578 --- repos/dde_bsd/README | 6 +- repos/dde_bsd/audio.list | 5 - repos/dde_bsd/lib/mk/dde_bsd_audio.inc | 2 +- repos/dde_bsd/lib/mk/dde_bsd_audio_pci.inc | 13 + repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk | 49 -- .../lib/mk/spec/x86_32/dde_bsd_audio.mk | 2 +- .../lib/mk/spec/x86_64/dde_bsd_audio.mk | 2 +- repos/dde_bsd/ports/dde_bsd.hash | 2 +- .../recipes/src/bsd_audio_drv/content.mk | 7 +- repos/dde_bsd/run/audio_out.run | 156 +++--- .../src/drivers/audio/pci_audio_drv/target.mk | 2 +- repos/dde_bsd/src/lib/audio/bsd.h | 17 - repos/dde_bsd/src/lib/audio/bsd_emul_pci.c | 2 - repos/dde_bsd/src/lib/audio/driver.cc | 1 - repos/dde_bsd/src/lib/audio/irq.cc | 161 ------ repos/dde_bsd/src/lib/audio/pci.cc | 521 ++++++++---------- 16 files changed, 317 insertions(+), 631 deletions(-) create mode 100644 repos/dde_bsd/lib/mk/dde_bsd_audio_pci.inc delete mode 100644 repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk delete mode 100644 repos/dde_bsd/src/lib/audio/irq.cc diff --git a/repos/dde_bsd/README b/repos/dde_bsd/README index 9bdd3e131c..9f30b6d92c 100644 --- a/repos/dde_bsd/README +++ b/repos/dde_bsd/README @@ -4,10 +4,8 @@ Audio ##### The audio driver is ported from OpenBSD 6.6 and includes support for -Intel HD Audio, ICH as well as for Ensoniq AudioPCI (ES1370) compatible -soundcards. The HDA driver works on real hardware and Virtualbox -whereas the ES1370 driver is only used in Qemu. The ICH driver is only -tested in Virtualbox where it produces audible artifacts. +Intel HD Audio devices. The HDA driver works on real hardware and +supposedly in VirtualBox. Usage and configuration diff --git a/repos/dde_bsd/audio.list b/repos/dde_bsd/audio.list index fa48dbcc7a..af13f3c404 100644 --- a/repos/dde_bsd/audio.list +++ b/repos/dde_bsd/audio.list @@ -1,18 +1,13 @@ sys/lib/libkern/strlcpy.c sys/dev/audio.c sys/dev/audio_if.h -sys/dev/pci/auich.c sys/dev/pci/azalia.c sys/dev/pci/azalia.h sys/dev/pci/azalia_codec.c -sys/dev/pci/eap.c -sys/dev/pci/eapreg.h sys/dev/pci/pcidevs.h sys/dev/pci/pcidevs_data.h sys/dev/mulaw.c sys/dev/mulaw.h -sys/dev/ic/ac97.c -sys/dev/ic/ac97.h sys/sys/audioio.h sys/sys/device.h sys/sys/queue.h diff --git a/repos/dde_bsd/lib/mk/dde_bsd_audio.inc b/repos/dde_bsd/lib/mk/dde_bsd_audio.inc index 2bb34dc03c..75a3b1d454 100644 --- a/repos/dde_bsd/lib/mk/dde_bsd_audio.inc +++ b/repos/dde_bsd/lib/mk/dde_bsd_audio.inc @@ -13,7 +13,7 @@ INC_DIR += $(AUDIO_CONTRIB_DIR) LIBS += dde_bsd_audio_include -SRC_CC += dummies.cc driver.cc irq.cc mem.cc misc.cc scheduler.cc timer.cc +SRC_CC += dummies.cc driver.cc mem.cc misc.cc scheduler.cc timer.cc SRC_C += bsd_emul.c SRC_S += setjmp.S diff --git a/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.inc b/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.inc new file mode 100644 index 0000000000..448f2f3c94 --- /dev/null +++ b/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.inc @@ -0,0 +1,13 @@ +include $(REP_DIR)/lib/mk/dde_bsd_audio.inc + +SRC_C += bsd_emul_pci.c +SRC_CC += pci.cc + +# enable when debugging +#CC_OPT += -DAZALIA_DEBUG +#CC_OPT += -DDIAGNOSTIC + +# HDA driver +SRC_C += dev/pci/azalia.c dev/pci/azalia_codec.c + +# vi: set ft=make : diff --git a/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk b/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk deleted file mode 100644 index 6518114a49..0000000000 --- a/repos/dde_bsd/lib/mk/dde_bsd_audio_pci.mk +++ /dev/null @@ -1,49 +0,0 @@ -LIB_DIR = $(REP_DIR)/src/lib/audio -LIB_INC_DIR = $(LIB_DIR)/include - -AUDIO_CONTRIB_DIR := $(call select_from_ports,dde_bsd)/src/lib/audio - -# -# Set include paths up before adding the dde_bsd_audio_include library -# because it will use INC_DIR += and must be at the end -# -INC_DIR += $(LIB_DIR) -INC_DIR += $(LIB_INC_DIR) -INC_DIR += $(AUDIO_CONTRIB_DIR) - -LIBS += dde_bsd_audio_include - -SRC_C := bsd_emul_pci.c -SRC_CC += pci.cc - -CC_OPT += -Wno-unused-but-set-variable - -# disable builtins -CC_OPT += -fno-builtin-printf -fno-builtin-snprintf -fno-builtin-vsnprintf \ - -fno-builtin-malloc -fno-builtin-free -fno-builtin-log -fno-builtin-log2 - -CC_OPT += -D_KERNEL - -# enable when debugging -#CC_OPT += -DAC97_DEBUG -#CC_OPT += -DAUICH_DEBUG -#CC_OPT += -DAZALIA_DEBUG -#CC_OPT += -DDIAGNOSTIC - -# AC97 codec -SRC_C += dev/ic/ac97.c - -# HDA driver -SRC_C += dev/pci/azalia.c dev/pci/azalia_codec.c - -# ICH driver -SRC_C += dev/pci/auich.c - -# ES1370 -SRC_C += dev/pci/eap.c - -vpath %.c $(AUDIO_CONTRIB_DIR) -vpath %.c $(LIB_DIR) -vpath %.cc $(LIB_DIR) - -# vi: set ft=make : diff --git a/repos/dde_bsd/lib/mk/spec/x86_32/dde_bsd_audio.mk b/repos/dde_bsd/lib/mk/spec/x86_32/dde_bsd_audio.mk index 98f3796d58..357ca1c22c 100644 --- a/repos/dde_bsd/lib/mk/spec/x86_32/dde_bsd_audio.mk +++ b/repos/dde_bsd/lib/mk/spec/x86_32/dde_bsd_audio.mk @@ -1,6 +1,6 @@ INC_DIR += $(LIB_INC_DIR)/spec/x86_32 $(LIB_INC_DIR)/spec/x86 -include $(REP_DIR)/lib/mk/dde_bsd_audio.inc +include $(REP_DIR)/lib/mk/dde_bsd_audio_pci.inc vpath %.S $(LIB_DIR)/spec/x86_32 diff --git a/repos/dde_bsd/lib/mk/spec/x86_64/dde_bsd_audio.mk b/repos/dde_bsd/lib/mk/spec/x86_64/dde_bsd_audio.mk index fe3e57dfae..e573623a53 100644 --- a/repos/dde_bsd/lib/mk/spec/x86_64/dde_bsd_audio.mk +++ b/repos/dde_bsd/lib/mk/spec/x86_64/dde_bsd_audio.mk @@ -1,6 +1,6 @@ INC_DIR += $(LIB_INC_DIR)/spec/x86_64 $(LIB_INC_DIR)/spec/x86 -include $(REP_DIR)/lib/mk/dde_bsd_audio.inc +include $(REP_DIR)/lib/mk/dde_bsd_audio_pci.inc vpath %.S $(LIB_DIR)/spec/x86_64 diff --git a/repos/dde_bsd/ports/dde_bsd.hash b/repos/dde_bsd/ports/dde_bsd.hash index a0f7b8dd2c..02274e60a8 100644 --- a/repos/dde_bsd/ports/dde_bsd.hash +++ b/repos/dde_bsd/ports/dde_bsd.hash @@ -1 +1 @@ -4d3a973ccec12ca00589f9213c2ce663d4a4e496 +03360eec0f7a11d523e2b0c88568c95cb691d3ac diff --git a/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk b/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk index f104af33c5..01764c9ed0 100644 --- a/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk +++ b/repos/dde_bsd/recipes/src/bsd_audio_drv/content.mk @@ -1,6 +1,6 @@ PORT_DIR := $(call port_dir,$(REP_DIR)/ports/dde_bsd) -MK_FILES := dde_bsd_audio.inc dde_bsd_audio_include.mk dde_bsd_audio_pci.mk +MK_FILES := dde_bsd_audio.inc dde_bsd_audio_include.mk dde_bsd_audio_pci.inc LIB_MK := $(addprefix lib/mk/, $(MK_FILES)) \ $(foreach SPEC,x86_32 x86_64,lib/mk/spec/$(SPEC)/dde_bsd_audio.mk) \ @@ -11,18 +11,13 @@ MIRROR_FROM_REP_DIR := $(LIB_MK) src/lib src/drivers patches include MIRROR_FROM_PORT_DIR := $(addprefix src/lib/audio/, \ dev/pci/azalia_codec.c \ dev/pci/pcidevs.h \ - dev/pci/eap.c \ dev/pci/pcidevs_data.h \ dev/pci/azalia.h \ - dev/pci/eapreg.h \ dev/pci/azalia.c \ - dev/pci/auich.c \ dev/mulaw.h \ dev/audio_if.h \ dev/mulaw.c \ dev/audio.c \ - dev/ic/ac97.h \ - dev/ic/ac97.c \ lib/libkern \ sys/device.h \ sys/audioio.h \ diff --git a/repos/dde_bsd/run/audio_out.run b/repos/dde_bsd/run/audio_out.run index 462a23d43f..c83bb0a629 100644 --- a/repos/dde_bsd/run/audio_out.run +++ b/repos/dde_bsd/run/audio_out.run @@ -1,47 +1,33 @@ assert_spec x86 -# -# Check used commands -# +if {[have_include "power_on/qemu"]} { + puts "\nAudio_out test running on Qemu is not supported.\n" + exit 0 +} -set wget [installed_command wget] +if {[have_spec linux]} { + puts"\nAudio_out test running on Linux is not supported.\n" + exit 0 +} -# -# Configure -# -set use_mixer 0 - -# -# Build -# - -set build_components { +create_boot_directory +build { core init timer + drivers/acpi + drivers/platform + app/pci_decode + server/report_rom drivers/audio test/audio_out } -lappend_if $use_mixer build_components server/mixer - -source ${genode_dir}/repos/base/run/platform_drv.inc -append_platform_drv_build_components - -build $build_components - -create_boot_directory - -# -# Config -# - -append config { - +install_config { + - @@ -54,60 +40,86 @@ append config { - } + -append_platform_drv_config - -append_if $use_mixer config { - + - - - - - - } + + + + + + -append_if [have_spec linux] config { - } -append_if [expr ![have_spec linux]] config { - } -append config { - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + sample.raw - } -append_if $use_mixer config { - } -append config { + } -install_config $config - - # # Get sample file # -if {[info exists env(GENODE_SAMPLE_RAW)]} { - catch { exec $wget $::env(GENODE_SAMPLE_RAW) -O bin/sample.raw } -} - if {![file exists bin/sample.raw]} { puts "" puts "The sample file is missing. Please take a look at" @@ -117,22 +129,12 @@ if {![file exists bin/sample.raw]} { exit 1 } -# -# Boot modules -# - -append boot_modules { - core ld.lib.so init timer } [audio_drv_binary] { - test-audio_out sample.raw +build_boot_image { + core ld.lib.so init timer + platform_drv acpi_drv pci_decode report_rom + pci_audio_drv test-audio_out sample.raw } -lappend_if $use_mixer boot_modules mixer - -append_platform_drv_boot_modules - -build_boot_image $boot_modules - -append qemu_args " -nographic -soundhw es1370 " # # For obvious reasons the timeout depends on the total diff --git a/repos/dde_bsd/src/drivers/audio/pci_audio_drv/target.mk b/repos/dde_bsd/src/drivers/audio/pci_audio_drv/target.mk index 9f089ea4bd..00a3f837c9 100644 --- a/repos/dde_bsd/src/drivers/audio/pci_audio_drv/target.mk +++ b/repos/dde_bsd/src/drivers/audio/pci_audio_drv/target.mk @@ -1,7 +1,7 @@ REQUIRES = x86 TARGET = pci_audio_drv SRC_CC = main.cc -LIBS = dde_bsd_audio dde_bsd_audio_pci base +LIBS = dde_bsd_audio base INC_DIR += $(REP_DIR)/include vpath %.cc $(REP_DIR)/src/drivers/audio diff --git a/repos/dde_bsd/src/lib/audio/bsd.h b/repos/dde_bsd/src/lib/audio/bsd.h index 8f60c79df7..919a9a05c1 100644 --- a/repos/dde_bsd/src/lib/audio/bsd.h +++ b/repos/dde_bsd/src/lib/audio/bsd.h @@ -24,25 +24,8 @@ namespace Bsd { int probe_drivers(Genode::Env&, Genode::Allocator&); void mem_init(Genode::Env&, Genode::Allocator &); - void irq_init(Genode::Entrypoint&, Genode::Allocator&); void timer_init(Genode::Env&); void update_time(); - - - /************************** - ** Bus_driver interface ** - **************************/ - - struct Bus_driver - { - virtual Genode::Irq_session_capability irq_session() = 0; - - virtual Genode::addr_t alloc(Genode::size_t size, int align) = 0; - virtual void free(Genode::addr_t virt, Genode::size_t size) = 0; - virtual Genode::addr_t virt_to_phys(Genode::addr_t virt) = 0; - virtual Genode::addr_t phys_to_virt(Genode::addr_t phys) = 0; - }; - } #endif /* _BSD_H_ */ diff --git a/repos/dde_bsd/src/lib/audio/bsd_emul_pci.c b/repos/dde_bsd/src/lib/audio/bsd_emul_pci.c index ad0886c663..062d4c3dd6 100644 --- a/repos/dde_bsd/src/lib/audio/bsd_emul_pci.c +++ b/repos/dde_bsd/src/lib/audio/bsd_emul_pci.c @@ -40,8 +40,6 @@ short pv[] = { -1, PCI_BUS_PARENT }; struct cfdata cfdata[] = { {&audio_ca, &audio_cd, 0, 0, 0, 0, pv+0, 0, 0}, {&azalia_ca, &azalia_cd, 0, 0, 0, 0, pv+1, 0, 0}, - {&eap_ca, &eap_cd, 0, 0, 0, 0, pv+1, 0, 0}, - {&auich_ca, &auich_cd, 0, 0, 0, 0, pv+1, 0, 0}, }; diff --git a/repos/dde_bsd/src/lib/audio/driver.cc b/repos/dde_bsd/src/lib/audio/driver.cc index bf8311fef3..85278ce2bd 100644 --- a/repos/dde_bsd/src/lib/audio/driver.cc +++ b/repos/dde_bsd/src/lib/audio/driver.cc @@ -616,7 +616,6 @@ void Audio::init_driver(Genode::Env &env, Genode::Allocator &alloc, Genode::Signal_context_capability announce_sigh) { Bsd::mem_init(env, alloc); - Bsd::irq_init(env.ep(), alloc); Bsd::timer_init(env); static Task bsd_task(env, alloc, config, announce_sigh); diff --git a/repos/dde_bsd/src/lib/audio/irq.cc b/repos/dde_bsd/src/lib/audio/irq.cc deleted file mode 100644 index 1075b33f90..0000000000 --- a/repos/dde_bsd/src/lib/audio/irq.cc +++ /dev/null @@ -1,161 +0,0 @@ -/* - * \brief Signal context for IRQ's - * \author Josef Soentgen - * \date 2014-10-14 - */ - -/* - * Copyright (C) 2014-2020 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -/* Genode includes */ -#include -#include -#include -#include -#include - -/* local includes */ -#include