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?