Restarting siblings vs. restarting nieces
Martin Stein
martin.stein at genode-labs.com
Sat Jan 28 07:24:11 CET 2023
Hi Sid,
There is a pretty recent commit series on genodelabs/master for the HW
IPC mechanism that might be of interest for you:
1151706243 hw: rename functions of Ipc_node class signature
fd3c70ec5b hw: mark threads as dead in case of ipc violations
fc690f1c47 hw: re-work the ipc node's internal state machine
AFAIK, fc690f1c47 fixes at least two bugs with IPC on component exit. I
hope that helps you.
Cheers,
Martin
On 25.01.23 16:23, Sid Hussmann wrote:
> Dear Genodians,
>
> I noticed a behavior that I would like to understand. Let's assume we
> have the following parent-child relationship of a sub-system, omitting
> some ancestors for simplicity:
>
> ```
> .
> └── init
> ├── fs
> │ ├── init
> │ │ └── rump
> │ ├── fs_mgr
> │ └── report_rom
> ├── fs_client1
> └── fs_client2
> ```
>
> In this example, the config for the first `init` is written via the
> depot query/deploy mechanism. Thus, `fs`, `fs_client1`, and `fs_client2`
> are pkg archives. The `runtime` file from pkg archive `fs` contains a
> management component `fs_mgr` that generates an `init` config which
> starts a `vfs` server with a `rump` plugin within that `init`.
> For context, we use the `fs_mgr` to instrument it to start `fsck` or
> `mkfs` depending on its configuration. But that's not relevant right now.
>
> Let's also assume the routing is valid so that `fs_client1` and
> `fs_client2` are up and running, and they both consume the `File_system`
> session provided by `rump`.
>
> Now to my observation:
>
> When I restart `fs` by incrementing its version attribute in the deploy
> file, `fs`, `fs_client1`, and `fs_client2` all get restarted. That is
> what I would expect.
>
> However, the behavior is different when I instrument the `fs_mgr` to
> restart `rump`. Most of the time, both `fs_client1` and `fs_client2`
> don't seem to notice.
>
> Is this behavior by design? Is `init` designed to behave differently
> regarding client/server dependency when siblings get restarted vs. when
> a niece is restarted?
>
> Is there a way to instrument `fs_mgr` to write an `init` config, so that
> `fs_client1` and `fs_client2` get restarted?
>
> Granted, I observed this in a more complex scenario. I once had the
> following errors when restarting `rump` on `arm_v8a/base-hw`:
>
> ```
> Kernel: init -> init -> fs_client1 -> ep: cannot send to unknown recipient
> ...
> Kernel: Cpu 0 error: re-entered lock. Kernel exception?!
> ```
>
> Would it make sense for me to create a simplified scenario of it to dig
> into this behavior further?
>
> Kind regards,
> Sid
>
>
> _______________________________________________
> Genode users mailing list
> users at lists.genode.org
> https://lists.genode.org/listinfo/users
>
More information about the users
mailing list