l4-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

New capability protocol implementation


From: Matthieu Lemerre
Subject: New capability protocol implementation
Date: Wed, 28 Sep 2005 23:12:23 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

Hi everybody,

I just finished the implementation of a replacement of the current
capability protocol (as described in the doc/ subdirs on CVS) with a
prototypal one, based on Marcus' presentation (see
http://medias.2005.rencontresmondiales.org/topics/os/).

The new capability passing protocol would rely on capability IDs
managed by the kernel; as it's not supported by the kernel yet, we use
plain words for now, so that we would just have to replace
transmission of words with transmission of capability IDs mappings.

So, until the upcoming L4s are ready, this cap server can still be
used to experiment capability pattern uses in the Hurd.

As a capability copy operation would be easy to implement (Tom Bachman
sent me a patch, but I didn't have time to read it yet), I guess we
have a working framework which could be used for implementing higher
level stuff.

I'm now going to clean up the notification server I wrote and
integrate it with this new cap interface, so that we can have a
working environment for passing high amount of data.

All capabilities are now passed dynamicaly, so the bootstap protocol
has much changed, hence the big changes in wortel. The cap server now
distributes the cap amongst the core servers.  What is missing is
passing dynamically the thread ids between servers; this is necessary
for faking mapping of communication end points, which is how things
will be done in the new L4s.

On the implementation of the patch, few changes were made to the
already existant servers. I modified libhurd-cap-server, which is now
single threaded, to support the use of a cap server.  I also replaced
the contents of libhurd-cap, which now provides functions to deal with
cap boxes and so on. (So, to apply the patch, one must first remove
the contents of these two directories).

Thanks,
Matthieu

libhurd-cap/Changelog:

2005-09-28  Matthieu Lemerre  <address@hidden>

        * Rewrite to handle new cap protocol.

libhurd-cap-server/Changelog:

2005-09-28  Matthieu Lemerre  <address@hidden>

        * Rewrite to handle new cap protocol.
        
hurd/Changelog

2005-09-28  Matthieu Lemerre  <address@hidden>

        * startup.h: (bootstrap_caps): new enum.
        (struct hurd_startup_data): Added postier_master and cap.server
        fields.

        * types.h: (l4_partner_t): new type.

libhurd-mm/Changelog:
        
2005-09-28  Matthieu Lemerre  <address@hidden>

        * physmem-user.c (hurd_pm_container_create): Use cap to retrieve
        the capability.

wortel/Changelog:       

2005-09-27  Matthieu Lemerre  <address@hidden>

        * wortel.h (WORTEL_MSG_GET_CAP_REPLY, WORTEL_MSG_GET_TASK_CAP_REQUEST)
        (WORTEL_MSG_GET_TASK_CAP_REPLY, WORTEL_MSG_GET_DEVA_CAP_REQUEST)
        (WORTEL_MSG_GET_DEVA_CAP_REPLY): removed defines.
        (WORTEL_MSG_START_NEXT, WORTEL_MSG_GET_CAP_REQUEST_PARAMS)
        (WORTEL_MSG_GET_CAP_SERVER_THREAD): new defines.
        (wortel_get_cap_reply, wortel_get_task_cap_request)
        (wortel_get_task_cap_reply, wortel_get_deva_cap_request)
        (wortel_get_deva_cap_reply): removed RPCs stubs.
        (wortel_start_next, wortel_get_cap_request_params)
        (wortel_get_cap_server_thread): new RPC stubs.

        * wortel.c (setup_components): Set MOD_CAP extra threads to 2.
        (start_elf): Added the cap server thread to the startup data.
        (start_elf): Start the cap server differently than the other servers.
        (serve_bootstrap_requests): containers aren't needed anymore.
        Implement the RPCs above, and delete the others.
        (main): Start cap first.
        
        * startup.c (map): Change the acceptor to L4_COMPLETE_ADDRESS_SPACE
        (assert): New macro.
        (cmain): Get the initial caps from cap before using them.

        * Makefile.am (startup_LDADD): Added library libhurd-cap.a

ruth/Changelog:

2005-09-27  Matthieu Lemerre  <address@hidden>
        
        * ia32-cmain.c (cmain): Added call to hurd_cap_init.
        Get task capability from cap.

        * ruth.c (bootstrap_final): New protocol to retrieve the last caps.
        (cap_get_cap_request): New function.
        (main): call to get_cap_cap_request so that cap proceed with booting.

        * Makefile.am: Added library libhurd-cap.a.

postier/Changelog:

2005-09-27  Matthieu Lemerre  <address@hidden>
        
        * ia32-cmain.c (cmain): Added call to hurd_cap_init.
        Get task capability from cap.

        * postier.c (bootstrap_final): New protocol to retrieve the last caps.
        (cap_get_cap_request): New function.
        (main): call to get_cap_cap_request so that cap proceed with booting.

        * Makefile.am: Added library libhurd-cap.a.
        
deva/Changelog:

2005-09-27  Matthieu Lemerre  <address@hidden>

        * deva.c (cap_get_cap_request): New function.
        (create_bootstrap_caps): Makes request to cap instead of wortel,
        with protocol change.
        (deva_server): Changed call to hurd_cap_bucket_manage_mt to
        hurd_cap_bucket_manage.
        (bootstrap_final): New protocol to retrieve the last caps.
        (main): Create manager thread before handling cap requests.

        * ia32-cmain.c (cmain): Added call to hurd_cap_init.
        Get task capability from cap.
        
        * Makefile.am: Added library libhurd-cap.a.

task/Changelog:

2005-09-27  Matthieu Lemerre  <address@hidden>

        * task.c (cap_get_cap_request): New function.
        (create_bootstrap_caps): Makes request to cap instead of wortel,
        with protocol change.
        (task_server): Changed call to hurd_cap_bucket_manage_mt to
        hurd_cap_bucket_manage.
        (bootstrap_final): New protocol to retrieve the last caps.
        (main): Create manager thread before handling cap requests.

        * ia32-cmain.c (cmain): Added call to hurd_cap_init
        
        * Makefile.am: Added library libhurd-cap.a.
        
physmem/Changelog:

2005-09-27  Matthieu Lemerre  <address@hidden>

        * physmem.c (cap_get_cap_request): New function.
        (create_bootstrap_caps): Makes request to cap instead of wortel,
        with protocol change.
        (physmem_server): Changed call to hurd_cap_bucket_manage_mt to
        hurd_cap_bucket_manage.
        (bootstrap_final): New protocol to retrieve the last caps.
        (main): Added cap initialisation, Create manager thread before
        handling cap requests.

        * container.c (container_create): Use new cap passing protocol.

        * Makefile.am: Added library libhurd-cap.a.

        

Attachment: patch
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]