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)