Commit Graph

813 Commits

Author SHA1 Message Date
Bora Sahin
496fba81c8 A shared space multi-threaded example application presenting the use of the
thread library. It also exemplifies how a new sample application can be added.
2009-11-17 21:48:46 +02:00
Bora Sahin
9a8e1fa437 A few things needed in the destroy code paths of a thread are added.
The first one is related to resource recycling. The parent which is waiting its
child to exit did not delete its ktcb. Now, it deletes.

The second one is related to self destroy. The added code wakes up all the
waiters before it exits.
2009-11-17 21:20:09 +02:00
Bora Sahin
b2a2340594 Clean dcache CP0 instruction is corrected. Possibly it was caused by a typo. 2009-11-17 20:44:42 +02:00
Bora Sahin
7387d336cc Thread waiting is fixed.
In the former case, when a child was exiting there was a risk of being preempted while it
was also taken away from the runqueue. In this situatuion, it may not have had
the chance of waking up the parent in case if it waits for the child to exit.

This was also true for suspend & resume so they were patched also.
2009-11-17 18:13:32 +02:00
Bora Sahin
a5eede8fb9 The very same fix we applied to the thread library but for posix this time. 2009-11-17 12:05:56 +02:00
Bora Sahin
682c62f8bb A fix and a helper macro for the thread library.
The fix solves the problem of giving the last slice from a pool.

The helper macro makes utcb space creation easy for the user because we have to
consider a few things like alignment and total allocated space.
2009-11-16 21:49:37 +02:00
Bora Sahin
7fb923cd35 A workaround for an unmatched locker-unlocker mutex problem.
If sleepers on a mutex were more than one, only one of them was woken up. This
caused the other ones to sleep forever. Now, there is not any facility to check
if there are still sleepers on the kernel space when a thread is about to unlock
a mutex. To workaround this problem, we started waking up all the threads
instead of one. This brings another problem called thundering herd but also
provides random fairness which gives more oppurtunity to a higher priority
thread to get the lock.
2009-11-16 19:06:45 +02:00
Bora Sahin
58959d5fb0 A comprehensive overhaul on the thread library.
Lots of polishing, organizational changes, bug fixes, error handling etc. are
introduced.

COPY and NEW space thread creation are allowed but not thoroughly tested yet. It
seems they will work best if the lib supports utcb virtual range management
through the mapping.
2009-11-13 15:37:22 +02:00
Bora Sahin
9763296ddc Locking is added to the thread library.
Now, we support thread trees which are spanning more than one level depth. Any
thread can create any number of threads provided that they are under the limits
which are enforced by the kernel.

Also with this commit, we have almost finished supporting SHARED space thread
creation in which stack and utcb space are allocated statically.
2009-11-13 15:22:06 +02:00
Bora Sahin
c8a55f8834 Stack recycling is added to the thread library.
Still, it does not support thread trees which have more than one level depth.
2009-11-13 15:21:53 +02:00
Bora Sahin
344362e9da Task list is introduced to the thread library.
In order to do resource recycling we need a table structure. In the search of
one, we concluded that a task list will make things easier when we start adding
COPY and NEW space handling.

This commit is for utcb recycling. Now, it does not support thread trees more
than one level depth. Thus, to be able to test it, we preferred l4thread_destroy
instead of l4thread_exit.
2009-11-13 15:21:41 +02:00
Bora Sahin
20f2b2bfdb Lots of cosmetic changes to the thread library. 2009-11-13 15:21:28 +02:00
Bora Sahin
1256f1a13a The second step in creating a thread library.
UTCB support has beed added. It has the same drawback as in the stack support:
the area in question has to be already mapped-in.

There are also some minor fixes for the stack support and the utcb common helper
routines.
2009-11-13 15:21:15 +02:00
Bora Sahin
b31ab82437 The first step in creating a thread library.
The difference between this thread library and the existing ones like pthreads
is the necessity of informing the library about the address range of the stack
and the l4 specific utcb. Utcb has not been supported yet. As for stack, there
is also a drawback: library does not support mapping. In other words, the stack
area in question has to be already mapped-in. Thus, for now we only support
threads sharing their address spaces: TC_SHARE_SPACE. In this respect, it is
very similar to pthreads.
2009-11-13 15:20:50 +02:00
Bora Sahin
18a5c89c97 utcb handling helper routines for the thread library.
This is one of the steps we need in the process of providing a similar interface
for thread creation which can be found in the mainstream operating systems like
Linux.
2009-11-13 12:59:27 +02:00
Bora Sahin
00adcd9afa libl4thread skeleton is introduced.
With this library, it is aimed at easing thread manipulation, utcb handling etc.
2009-11-13 12:58:54 +02:00
Bora Sahin
69a09ea514 Automatic pager size calculation takes container name into account instead of
a fixed one.
2009-11-13 12:58:41 +02:00
Bora Sahin
bb6dd492e0 Bare container type is converted to Examples container type.
Examples container type is designed to keep applications using codezero
userspace libraries, which is aiming to help newcomers who would like to
develop programs on top of the l4 microkernel.

Now bare bone application is one of the examples. In the near future, lots of
new programs will be introduced to show the various aspects of codezero
eco-system.
2009-11-13 12:57:40 +02:00
Bora Sahin
871d40a6b4 Trying to fix merge / revert problems related to the thread library.
Revert "Merge branch 'libl4thread' of git://www.b-labs.co.uk/bora/git/codezero into bora"

This reverts commit dc7fd0d24d.
2009-11-13 12:32:33 +02:00
Bahadir Balban
4ab05d1b2a Added forgotten file
new file:   src/capability.c
2009-11-10 22:23:49 +02:00
Bahadir Balban
34a1c581a3 Added forgotten header 2009-11-10 22:21:19 +02:00
Bahadir Balban
dc7fd0d24d Merge branch 'libl4thread' of git://www.b-labs.co.uk/bora/git/codezero into bora
Conflicts:
	conts/libl4thread/include/l4thread/addr.h
	conts/libl4thread/include/l4thread/thread.h
	conts/libl4thread/include/l4thread/utcb.h
	conts/libl4thread/src/addr.c
	conts/libl4thread/src/thread.c
	conts/libl4thread/src/utcb.c
2009-11-10 17:38:51 +02:00
Bahadir Balban
d1bd77a135 Removed cap list prints from mm0 2009-11-10 17:22:46 +02:00
Bahadir Balban
2ba4736a8b Cleaned up various bits with capability syscalls.
Made grant interace same as other calls.
Corrected counting and reading of task capabilities by applying it
to all cap lists that a task has right.
2009-11-10 16:15:14 +02:00
Bora Sahin
a23b7fcbc2 Task list is introduced to the thread library.
In order to do resource recycling we need a table structure. In the search of
one, we concluded that a task list will make things easier when we start adding
COPY and NEW space handling.

This commit is for utcb recycling. Now, it does not support thread trees more
than one level depth. Thus, to be able to test it, we preferred l4thread_destroy
instead of l4thread_exit.
2009-11-10 14:46:54 +02:00
Bahadir Balban
d43fa1d3ae Simplified cap id finding and destroying it.
It is not very straightforward to reach a capabilities list. We
now use a single function to find out a capability by its id and
its list, since the two are used frequently together (i.e. cap
removal and destruction)
2009-11-09 23:50:03 +02:00
Bahadir Balban
ff14ce4735 Added switch statements to some capability checks that are more precise. 2009-11-09 23:10:44 +02:00
Bahadir Balban
f912f28731 Clarified a few confusing definitions in ipc.c 2009-11-09 22:59:24 +02:00
Bahadir Balban
da8b0a90f3 Fixed error with ipc transfer type checking.
Tested test0 mutex ipc successfully rejecting to occur when given
different micro-capabilities than the actual transfer type.
2009-11-09 22:50:21 +02:00
Bahadir Balban
8b12db741f Moved generic ipc flags to api/ipc.h 2009-11-09 22:01:44 +02:00
Bahadir Balban
78917835c7 Substantially fixed cap_split() behaviour.
Need to fix ipc flags capability checking yet.
2009-11-09 19:15:52 +02:00
Bora Sahin
8f55e72f00 Lots of cosmetic changes to the thread library. 2009-11-09 11:44:52 +02:00
Bahadir Balban
b24c8eb89d Capability replicate/split/destroy/grant working for test0 ipc.
Implemented a protocol between a client and its pager to
request and get a capability to ipc to another client of the pager.

Pager first ensures the request is valid from its client.
It then tries to use a greater capability that it possesses, to
produce a new capability that the client requested. Once the kernel
validates the correct one and replicates/reduces it to client's
need, it grants it to the client.
2009-11-09 00:40:07 +02:00
Bahadir Balban
1bb2c05c9b Added routines for pager to search a suitable capability to grant to clients
Pager handles client capability requests by using one of its own
capabilities to create a new one that suits the client's needs.

The current issue is that the kernel can have multiple caps and it
may not know which one is suitable for using to create one for the client.

The kernel knows this very well, so the solution would be to attempt to
use capabilities that roughly match (i.e. by type) and leave it to
the kernel to decide whether it is any powerful to suit client's needs.
2009-11-08 17:54:57 +02:00
Bahadir Balban
dc03c7b130 Implemented a protocol between client and pager for requesting caps.
In posix, test0 makes inter-space ipc for testing extended ipc. This
correctly fails when only the cap to ipc to pager is given to all tasks
in the container.

In order to overcome this problem, the tasks who fork for doing ipc to
each other make a request to the pager to get capabilities to do so.

Pager finds its own widened ipc capability over the container, replicates
it, validates and reduces it to desired boundaries (i.e. just ipc betw.
two spaces) and grants it as IMMUTABLE to requesting tasks.

This protocol may be useful in implementing a client/server capability
request relationship. Code builds but untested.
2009-11-08 14:15:33 +02:00
Bahadir Balban
b136b79a2d Capability replicate/deduce/share tested with mm0. 2009-11-07 23:45:57 +02:00
Bahadir Balban
e8f002f879 Fixed most of userspace (mm0) for capability manipulation 2009-11-07 19:43:05 +02:00
Bahadir Balban
e8f9f3f04a Added generic capability operation bits to autogenerated capabilities
cinfo.c generator script now has generic capability operation
bits added to all default capabilities that it generates.
2009-11-07 16:14:14 +02:00
Bahadir Balban
3728e7ef1e Capability manipulation syscalls
Support for capability replicate, share, grant, deduce, and split.
The code builds, but hasn't been tested.
2009-11-07 15:29:52 +02:00
Bahadir Balban
f7565118f1 Revert "Merge branch 'libl4thread' of git://www.b-labs.co.uk/bora/git/codezero into bora"
This reverts commit 3f870b540f.
2009-11-05 19:17:36 +02:00
Bahadir Balban
e28658c10e posix: MM0 task page access issues fixed. 2009-11-05 19:04:19 +02:00
Bahadir Balban
d306d6b451 posix: Fixing mm0 mapping task pages incorrectly
Modifying task_virt_to_page() so that it takes into account page
protections. If mm0 writes to a task page that is meant to be
read-only, (e.g. the zero page) the design is broken.

Every access to a task's page will take the page fault route,
and the page fault handler will return the page instead of 0.
2009-11-05 18:25:26 +02:00
Bora Sahin
52587141f4 The second step in creating a thread library.
UTCB support has beed added. It has the same drawback as in the stack support:
the area in question has to be already mapped-in.

There are also some minor fixes for the stack support and the utcb common helper
routines.
2009-11-05 16:19:39 +02:00
Bahadir Balban
35a5dc4c92 Added userland support for exregs/read, mm0 slightly more graceful for illegal access 2009-11-05 15:56:01 +02:00
Bahadir Balban
3f870b540f Merge branch 'libl4thread' of git://www.b-labs.co.uk/bora/git/codezero into bora 2009-11-05 14:59:59 +02:00
Bahadir Balban
78635bdd11 posix: When mapping a new task, data segment size was miscalculated 2009-11-05 14:10:22 +02:00
Bahadir Balban
74ad567312 Added err value to vma_split 2009-11-05 13:52:39 +02:00
Bora Sahin
55af5c83cb The second step in creating a thread library.
Utcb support has beed added. It has the same drawback as in the stack support:
the area in questen has to be already mapped-in. There is some basic
infrastructure for utcb to support mapping but it is far from being complete.
MAPPING_ENABLE symbolic constant controls this behaviour.

There are also some minor fixes for the stack support and the utcb common helper
routines.
2009-11-05 13:51:22 +02:00
Bora Sahin
352cb2daaa The first step in creating a thread library.
The difference between this thread library and the existing ones like pthreads
is the necessity of informing the library about the address range of the stack
and the l4 specific utcb. Utcb has not been supported yet. As for stack, there
is also a drawback: library does not support mapping. In other words, the stack
area in question has to be already mapped-in. Thus, for now we only support
threads sharing their address spaces: TC_SHARE_SPACE. In this respect, it is
very similar to pthreads.
2009-11-05 13:50:48 +02:00
Bora Sahin
8585482bd0 THREAD_RESUME is an alias to THREAD_RUN. 2009-11-05 13:48:58 +02:00