Hello,
In an experiment I tried making some modifications to sculpt on staging, most notably moving the file system stack onto the bottom-level init. However, opening block sessions with the drivers subsystem fails.
Simply said, if I add another part_blk component to sculpt.run as a child of init, and try to connect its Block-session to the drivers subsystem, I get the following error:
Error: init -> drivers: attempt to transfer initial
quota
Warning: PD (init -> drivers) RAM limit
(used=776K, limit=1089025) exceeded during
transfer_quota(4207020)
[init] child "drivers" requests resources:
ram_quota=4207020
Error: init -> drivers: attempt to transfer
initial quota
Warning: PD (init -> drivers) RAM limit
(used=776K, limit=1089025) exceeded during
transfer_quota(4207020)
[init] child "drivers" requests resources:
ram_quota=4207020
Error: init -> drivers: attempt to transfer
initial quota
Warning: PD (init -> drivers) RAM limit
(used=776K, limit=1089025) exceeded during
transfer_quota(4207830)
[init] Warning: part_blk: could not revert session
RAM quota (service=Block cid=6 args='tx_buf_size=4194304,
cap_quota=5, label="part_blk -> ", ram_quota=4207830, diag=0'
state=SERVICE_DENIED ram_quota=4207830, cap_quota=5)
[init -> part_blk] Error: Block-session creation
failed (ram_quota=4208640, cap_quota=5, tx_buf_size=4194304,
label="")
[init -> part_blk] Error: Uncaught exception of
type 'Genode::Service_denied'
[init -> part_blk] Warning: abort called - thread:
ep
[init] child "part_blk" exited with exit value 1
When I run part_blk in the normal fs runtime with fs.config and
default_fs_subinit.config (with part_blk not commented out), it
works fine. Of course I do not run both at the same time, as the
ahci_drv only supports one client at a time.
The config snippet I added to sculpt.run just below the drivers init looks as follows (I copied it from default_fs_subinit.config except that my computer has an MBR partition scheme):
<start name="part_blk" caps="100">
<resource name="RAM" quantum="10M"/>
<provides><service
name="Block"/></provides>
<config use_gpt="no">
<policy label_prefix="vfs"
writeable="yes" partition="1"/>
</config>
<route>
<service name="Block"> <child
name="drivers" label="default"/> </service>
<any-service> <parent/>
</any-service>
</route>
</start>
I tried giving part_blk more RAM, giving "drivers" more RAM,
giving "drivers -> dynamic" more RAM and giving "drivers ->
dynamic -> ahci_drv" more as well (by editing the
driver_manager), but the error message persists with the same
numbers as above.
Now I'm stuck on why this error occurs. One possibility is that the driver_manager has not yet loaded the correct policies for the ahci_drv or the config of the subinit and that it has updated them when I change the runtime config to run part_blk. However, I get no other errors, while I would have expected "no matching policy" or "no route" in that case.
I tried creating a clean run script with only the
drivers_managed-pc package and part_blk inside it. It gives me the
same error so it seems to be related to the drivers_managed-pc
subsystem. When I run all those drivers directly on top of init, I
do not get the error.
Can anyone explain what is going on?
-- Met vriendelijke groet / kind regards, Boris Mulder Cyber Security Labs B.V. | Gooimeer 6-31 | 1411 DD Naarden | The Netherlands +31 35 631 3253 (office)