Hi David,
On 03/11/2016 03:21 PM, David Werner wrote:
Hi Stefan,
thank you for your answer!
Are you sure that in the scenario, where the child is created directly by init, your service's PRAM and PRM interfaces are used at all? When you route the child's RM and RAM session requests to your component that does not mean they are used to create the child. For this purpose the routes of init itself are decisive. Only RM and RAM sessions opened by the child itself are routed according to the child's policy.
i didn't express myself correctly with the part about starting another component as a child of init. Sorry for that.
What I meant is that when I start a component (created with core-services as environment) next to my server which executes a main method like this:
int main (void)
{ Proxy::Prm_connection prm; PDBG("Prm_connection established -> Prm_session created");
Proxy::Pram_connection pram; PDBG("Pram_connection established -> Pram_session created");
pram.ref_account(env()->ram_session_cap()); PDBG("Own ram_session is now ref_account of the pram_session");
env()->ram_session()->transfer_quota(pram.ram_cap(), 32*1024); PDBG("Quota transfered");
Ram_dataspace_capability ds = pram.alloc(4096); PDBG("Dataspace allocated"); void *addr = prm.attach(ds); PDBG("Dataspace attached to Prm_session"); prm.detach(addr); PDBG("Pram dataspace detached from Prm_session"); pram.free(ds); PDBG("Dataspace freed");
}
no problem occurs.
I see.
Here are some parts of my code. Could you take a look at it ? I will try your advice with the kernel debug.
Pram_session_component *_create_session(const char *args) from Pram_root { Genode::size_t ram_quota = Genode::Arg_string::find_arg(args, "ram_quota").ulong_value(0);
enum { MAX_LABEL_LEN = 64 }; char label[MAX_LABEL_LEN]; Genode::Arg_string::find_arg(args,
"label").string(label, ~0UL, "");
unsigned long phys_start =
Genode::Arg_string::find_arg(args, "size").ulong_value(~0UL); unsigned long phys_size = Genode::Arg_string::find_arg(args, "start").ulong_value(~0UL);
PDBG("Creating Pram_session_component..."); return new (md_alloc()) Pram_session_component(_ds_ep,
ep(), md_alloc(), ram_quota, (char *)label, phys_start, phys_size); }
class Pram_session_component : public Genode::Rpc_object<Pram_session> { private:
using Ds_slab =
Genode::Synced_allocator<Genode::Tslab<Pdataspace_component, 4096> >;
Genode::Rpc_entrypoint *_ds_ep; Genode::Rpc_entrypoint *_pram_session_ep; Genode::Allocator_guard _md_alloc; Ds_slab _ds_alloc; Genode::Ram_connection _ram; const char* _label; unsigned long _phys_start; unsigned long _phys_size; . . . }
Pram_session_component::Pram_session_component(Genode::Rpc_entrypoint *ds_ep, Genode::Rpc_entrypoint *pram_session_ep, Genode::Allocator *md_alloc, Genode::size_t ram_quota, const char *label, unsigned long phys_start, unsigned long phys_size) : _ds_ep(ds_ep), _pram_session_ep(pram_session_ep), _md_alloc(md_alloc, ram_quota), _ds_alloc(&_md_alloc), _ram(label, phys_start, phys_size), _label(label), _phys_start(phys_start), _phys_size(phys_size) { }
I cannot see any obvious reasons for the faulty execution you describe. Although, I would implement some things in a different manner, like extending RM and RAM instead of defining PRM and PRAM, and invoking the root component directly instead of calling the parent therefore. Anyway, theoretically it should work the way you have designed it.
The obvious difference in both examples is: in the working case you refer to a remotely implemented service, whereas in the broken example the service actually is a locally implemented one. Nevertheless, in both cases you use the parent (init) as intermediate component. For further assistance, as far as you do not succeed with the kernel debugger on your own, you might provide the complete example in form of a branch (or patch to a known Genode revision) including a working run-script that triggers the fault.
Regards Stefan
Thank you in advance.
Regards,
David
Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more. http://pubads.g.doubleclick.net/gampad/clk?id=278785111&iu=/4140
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main