Compare commits

...

2148 Commits
12.02 ... 14.02

Author SHA1 Message Date
Norman Feske
9e33efde69 Release notes for version 14.02 2014-02-28 10:16:24 +01:00
Christian Helmuth
99a2511496 os: improve README for trace fs 2014-02-28 10:11:52 +01:00
Josef Söntgen
36608b3402 rump: filter ccache
Fixes #1048.
2014-02-28 10:11:52 +01:00
Norman Feske
00f4ff37f6 Update top-level README and doc/components.txt 2014-02-28 10:11:52 +01:00
Sebastian Sumpf
64d60bbc7f rump: Remove deprecated ARM instruction
Substitute 'swpb' (swap byte) instruction with 'ldrexb/strexb', because 'swpb'
needs to be enabled explicitly by the kernel, which is done by neither HW or FOC.
When disabled, 'swpb' will cause an undefined instruction exception.

Issue #1048
2014-02-28 10:11:51 +01:00
Norman Feske
aa1082bed7 dynamic_rom: Additional documentation 2014-02-28 10:11:51 +01:00
Norman Feske
0312bea38b dynamic_rom: Don't mention decorator
Omit the decorator.run script from the README file because it is not
integrated in mainline yet.
2014-02-28 10:11:51 +01:00
Christian Prochaska
0ca1606f10 Qt5: add the QPluginWidget test
Fixes #1073.
2014-02-28 10:11:51 +01:00
Christian Prochaska
6a1d07de86 Arora: increase RAM quota for 'testnit'
This patch increases the RAM quota for 'testnit' in the Arora nitpicker
plugin demo.

Fixes #1074.
2014-02-28 10:11:51 +01:00
Christian Prochaska
66957c8113 Qt5: use Nitpicker instead of liquid_fb
Fixes #1072.
2014-02-28 10:11:51 +01:00
Norman Feske
4c45f3451c os/reporter.h: Don't enable if connection fails
If opening a report session fails (for example because of invalid
session arguments) and an exception is thrown during the session
construction, the report would wrongly keep the enabled state.
By moving the assignment of the state after the construction,
the report stays disabled as it should be.
2014-02-28 10:11:51 +01:00
Norman Feske
57fdce0465 nitpicker: Respond to session-local focus change
This patch improves the focus handling by updating the menubar each time
the user clicks on a different view, even the old and new view belong
to the same session.
2014-02-28 10:11:51 +01:00
Norman Feske
1498bb740b nitpicker: Parent-child relation between views
Fixes #1020
2014-02-28 10:11:50 +01:00
Alexander Boettcher
93605c2b15 test: be more strict for affinity.run
Check that in every round really all threads are alive on all CPUs. It
happened that only the first round was ok (all alive) and in the next rounds
some were dead. Unfortunately the test claimed to be successful.
2014-02-28 10:11:50 +01:00
Sebastian Sumpf
ca0d79010d rump: Use fixed commit for NetBSD sources
Issue #1048
2014-02-28 10:11:50 +01:00
Christian Prochaska
148b8efe8e Adapt gallium and libdrm plugins to current libc
This patch adapts the gallium and libdrm libc plugins to the current
workings of the libc.

Fixes #1070.
2014-02-28 10:11:13 +01:00
Christian Prochaska
7fd53b52df gallium: link with pthread
Fixes #1069.
2014-02-28 10:11:13 +01:00
Sebastian Sumpf
1295d5e062 hw: Change link address for Panda
Don't load image at beginning of RAM, this may cause u-boot to show
unpredictable behavior.
2014-02-28 10:11:13 +01:00
Josef Söntgen
e90c77da89 os: increase ldso MEM_SIZE 2014-02-28 10:11:13 +01:00
Josef Söntgen
f407bc4cbb base: interim forked trace control fix
The destructor of the Area object uses invalid caps which results in
a wanted abort of the process on nova. This is mainly the case in forked
process in noux.
2014-02-28 10:11:13 +01:00
Martin Stein
e7f370f779 base: enable tracing not before reinit_main_thread
ref #989
2014-02-28 10:11:13 +01:00
Martin Stein
99ec536c53 thread: init thread cap for non-core main threads
ref #989
2014-02-28 10:11:13 +01:00
Stefan Kalkowski
379c6c1cd4 i.MX53: fix incorrect DMA protection settings
Within the central security unit of the i.MX53 SoC, one can set protection
level of various DMA bus master requests, distinguishing them between normal,
and secure access. Although, the access level was meant to be set correctly,
the enumeration values that denoted the kind of access were incorrect. Thereby,
until now every DMA requests was set as being secure. This commit corrects
the enumeration values, and sets all DMA operations as being unsecure, accept
from the graphical subsystem which is controlled by the secure world only.

Thanks to Andrea Barisani and Andrej Rosano from Inverse Path for discovering
this bug, as well as the hardware limitation!
2014-02-28 10:11:13 +01:00
Sebastian Sumpf
bf06b7e360 rump: Add repository to build.conf 2014-02-28 10:11:12 +01:00
Martin Stein
a7dd2b3171 base: ABI specific stack creation
ref #1042
2014-02-28 10:11:12 +01:00
Christian Prochaska
43c73eff13 Adapt GDB commands to ldso changes
Issue #1042.
2014-02-28 10:11:12 +01:00
Sebastian Sumpf
b4612d24ce base-linux: Repair hybrid programs
Do not link 'startup' and 'cxx' libraries against hybrid programs.
2014-02-28 10:11:12 +01:00
Alexander Boettcher
961bd41b05 vbox: auto test for win7 @ vbox/Genode/Nova
Issue #1055
2014-02-28 10:11:12 +01:00
Alexander Boettcher
d8c2a908b8 ports: add VirtualBox as VMM for Genode
Fixes #1055
2014-02-28 10:11:12 +01:00
Norman Feske
2e6f281cf0 libc_fs: Handle Packet_alloc_failed exception 2014-02-28 10:11:11 +01:00
Norman Feske
28c6763a7d lx_fs: Support large files on 32-bit machines 2014-02-28 10:11:11 +01:00
Alexander Boettcher
d1b0af5eb9 nova: nopcid required for thinkpad x201 2014-02-28 10:11:11 +01:00
Alexander Boettcher
737a3290d9 nova: for clearing a ds it must be ever writable 2014-02-28 10:11:11 +01:00
Alexander Boettcher
f69b206593 nova: fix utcb layout for 32bit
Makes virtualbox as 32bit VMM working
2014-02-28 10:11:11 +01:00
Alexander Boettcher
dd95266235 nova: add feature to yield a thread
used by virtualbox intensively
2014-02-28 10:11:11 +01:00
Alexander Boettcher
39a7ffd233 nova: use kernel branch with vCPU fpu support
branch r4 based on latest vanilla kernel of @udosteinberg
2014-02-28 10:11:11 +01:00
Alexander Boettcher
fa23c0bd4f nova: update syscall bindings 2014-02-28 10:11:11 +01:00
Alexander Boettcher
8c7cadde5f nova: support noreturn attribute for syscall reply 2014-02-28 10:11:10 +01:00
Alexander Boettcher
491817c00c base: add flex page iterator
Issue #8
2014-02-28 10:11:10 +01:00
Alexander Boettcher
fcd76d10dd pthread: catch time out exception 2014-02-28 10:11:10 +01:00
Christian Helmuth
a11a17147f pthread: limit timeouts to >= 10 ms
The timed semaphore supports a minimum timeout of 10 ms and logs a
warning if the timeout is lower than the minimum. To prevent the
warning, we limit timeouts to >= 10 ms.
2014-02-28 10:11:10 +01:00
Alexander Boettcher
5d9b563503 framebuffer: fix ambiguity for strncpy 2014-02-28 10:11:10 +01:00
Norman Feske
75366c66a4 libc: Add Libc::Mem_alloc::size_at
Adding this function eases the implementation of realloc based on
'Libc::Mem_alloc'. Note that this allocator is not used by libc's
default malloc implementation but it is useful for customized C
runtimes, e.g., for the runtime of VirtualBox.
2014-02-28 10:11:10 +01:00
Norman Feske
db2fe17269 base: Add Allocator_avl::size_at function
This function provides a way to request the size of an previously
allocated block. It is useful to to ease the implementation of realloc
functionality based on Allocator_avl.
2014-02-28 10:11:10 +01:00
Norman Feske
16bc2bc840 libc: Dummy for sys/user.h 2014-02-28 10:11:10 +01:00
Norman Feske
9a971a500d libc: Add sys/disk.h
Needed by the POSIX backend of the VirtualBox runtime.
2014-02-28 10:11:10 +01:00
Norman Feske
e02d643420 libc: export LIBC_REP_DIR in libc-common.inc
This information is useful if 'libc-common.inc' is included from
another repository, i.e., for building stripped-down libc variants
tailored to an individual application.
2014-02-28 10:11:09 +01:00
Sebastian Sumpf
4aef209c8b rump: Increase FS server stack size 2014-02-28 10:11:09 +01:00
Josef Söntgen
a282617407 libports: initial fuse_fs implementation
The fuse_fs server provides access to a FUSE based file system by using
a File_system_session.

Fixes #1058.
2014-02-28 10:11:09 +01:00
Josef Söntgen
829961b0ad libports: add libc_fuse_ntfs-3g
Fixes #1058.
2014-02-28 10:11:09 +01:00
Josef Söntgen
7998fdaf3f libports: less noisy compilation of libfuse
Out of laziness we only provide two dummy functions for all FUSE
operations, which are used in case the FUSE file system does not
implement them itself.

Fixes #1058.
2014-02-28 10:11:09 +01:00
Josef Söntgen
8f1e8c122f libports: less noisy libext2fs compilation
Fixes #1058.
2014-02-28 10:11:09 +01:00
Josef Söntgen
7bc49b05d0 libports: less noisy fuse_ext2 compilation
Fixes #1058.
2014-02-28 10:11:09 +01:00
Josef Söntgen
53c6675500 libports: prevent main symbol clash in fuse-ext2
Omit the main rountine in fuse-ext2.c. Otherwise using fuse-ext2 with
fuse_fs is not possible because the server framework already defines
a main routine.

Fixes #1058.
2014-02-28 10:11:09 +01:00
Josef Söntgen
9f5c13564c libports: extend FUSE implementation
* add sync method:
  Since file systems tend to have a inbuild caching mechansim we need to
  sync these caches at the end of session when using the fuse_fs server.
  Therefore each FUSE file system port has to implement a Fuse::sync_fs()
  function that executes the necessary actions if requested.

* add symlink check

* allow to check FUSE fs initialization
  This changes the private API of the FUSE implementation. The init_fs
  method now has to return true if the initialization was successful and
  otherwise false. All current users of the API are also changed
  accordingly.

Fixes #1058.
2014-02-28 10:11:09 +01:00
Stefan Kalkowski
3b69dc2a58 TrustZone: reenable memory protection (fix #1060) 2014-02-28 10:11:08 +01:00
Christian Prochaska
14a636f9a7 Noux: fix GDB arguments in run script
Noux generates 'argv[0]' for the initial child automatically (in contrast
to the 'config_args' library), so the first argument stated in the
configuration should not be the GDB program name.

Fixes #1062.
2014-02-28 10:11:08 +01:00
Christian Prochaska
46374a6932 gdb_monitor: show correct register state on FOC
On Genode/Fiasco.OC, when an unresolved page fault occurs, only the IP and
SP registers are valid in the thread state read by GDB monitor. This was
not taken into account so far and the other (possibly outdated) register
values got reported to the client, too.

With this patch, only IP and SP get reported to the client in the page
fault case.

Fixes #1063.
2014-02-28 10:11:08 +01:00
Sebastian Sumpf
dd974f00f7 usb_drv: Fix implicit declaration warnings
Issue #1050
2014-02-28 10:11:08 +01:00
Sebastian Sumpf
9251b1ede8 rump: Port of the rump kernels to Genode
For further information see: http://wiki.netbsd.org/rumpkernel/. In this version
I ported the central rump components to Genode in order to take advantage of
NetBSD file system implementation. The new 'dde_rump' repository contains the
Genode version of the rump libraries and a 'rump_fs' server that implements
Genode file-system-session interface. Currently ext2, iso9660, and fat
file-systems are supported.

Issue #1048
2014-02-28 10:11:08 +01:00
Sebastian Sumpf
ce27985b8a ram_blk: Writable loopback device
Issue #1048
2014-02-25 14:58:09 +01:00
Sebastian Sumpf
2e04cc2d87 libc_fs: Implemented and test 'unlink' call
Issue #1048
2014-02-25 14:58:09 +01:00
Sebastian Sumpf
1b1693e6ff libc: 'readlink' returns non-zero terminated buffer
Make so to handle zero termination correctly for 'stat' calls and for debugging
output.

Issue #1048
2014-02-25 14:58:09 +01:00
Sebastian Sumpf
b7575319bf run: Add 'check_installed' command to run env
'check_installed' takes a command name as argument and tries to call 'which' in
order to find the command path. If that does not succeed, paths like '/sbin' are
'/usr/sbin' searched. On success the absolute path of the command is returned,
on failure 'exit' is called with an error message.

Issue #1048
2014-02-25 14:58:09 +01:00
Sebastian Sumpf
1c4c4d6961 base: Make 'LD_SCRIPT_SO' overwritable
Issue #1048
2014-02-25 14:58:09 +01:00
Sebastian Sumpf
49ee13168b libc: malloc do not destruct allocator 2014-02-25 14:58:09 +01:00
Christian Prochaska
21f031371f Noux: fix build process of more 'e2fsprogs' programs
Fixes #1065.
2014-02-25 14:58:09 +01:00
Christian Prochaska
53c4aa6d22 Noux: fix build process of the 'fixincl' program
The 'LIBS' environment variable needs to get used to build the 'fixincl'
program correctly.

Fixes #1066.
2014-02-25 14:58:09 +01:00
Sebastian Sumpf
1e8f1b7a5b ldso: Do not use new rom connection during open
Search for already opened file, also do not throw any exceptions, since they
may be thrown during execption allocation.
2014-02-25 14:58:08 +01:00
Christian Prochaska
1ac034d16d Noux: fix the 'xxd' program
Fixes #1064.
2014-02-25 14:58:08 +01:00
Martin Stein
f74c70ec05 base: add startup lib to the base libs
Startup lib can now be filtered according to the same rules like
the other base libraries.

Issue #1042
2014-02-25 14:58:08 +01:00
Martin Stein
929a2387d1 hw: merge base-common and kernel_interface lib
Issue #1042
2014-02-25 14:58:08 +01:00
Martin Stein
4f0a75b0bc linux: clean-up lib-files of base and base-common
Issue #1042
2014-02-25 14:58:08 +01:00
Martin Stein
016c3a8d9e test-ldso: test stack alignment
Issue #1042
2014-02-25 14:58:08 +01:00
Martin Stein
13b1aab044 hw & arm7: prepare CPU driver for -O0 2014-02-25 14:58:08 +01:00
Martin Stein
6a2546d7e9 hw: ease syscall backends and prepare them for -O0
Previously we used to many registers in syscalls with much arguments
to build with optimization level O0. Additionally this fix fastens the
userland backend of syscalls.
2014-02-25 14:58:08 +01:00
Martin Stein
724efcb00c test-ldso: test ctors, dtors and atexit functions
Issue #1042
2014-02-25 14:58:08 +01:00
Martin Stein
bd52e49698 os: remove startup lib from dynamic programs
All the pre- and post-processing of the startup lib around the main
function of a dynamic program is now done by LDSO. Hence LDSO directly
calls the main function of the program.

Issue #1042
2014-02-25 14:58:07 +01:00
Martin Stein
8d21064b5e ldso: use generic CRT0 files
Issue #1042
2014-02-25 14:58:07 +01:00
Martin Stein
324af5d769 os: make program ctors and dtors visible to LDSO
This is needed later when eliminating the need for a startup lib in
dynamic programs to enable LDSO to call ctors and dtors of the program.

Issue #1042
2014-02-25 14:58:07 +01:00
Martin Stein
6e2b7c2b92 ldso: make function get_program_var_addr global
This is needed later to lookup program symbols like ctors and dtors to
eliminate the need for a startup lib in dynamic programs.

Issue #1042
2014-02-25 14:58:07 +01:00
Martin Stein
a100b37fdf base: provide a weak init_rtld dummy in base lib
This is needed later to eliminate LDSO specific CRT0 implementations.

Issue #1042
2014-02-25 14:58:07 +01:00
Martin Stein
3893dae673 cxx: implement __aeabi_atexit
Issue #1042
2014-02-25 14:58:07 +01:00
Martin Stein
e45f929eca ldso: make cxx symbols global
Issue #1042
2014-02-25 14:58:07 +01:00
Sebastian Sumpf
433a216919 base: Fix stack pointer alignment for ARM
After some research we found that the stack pointer on ARM platforms must be
at least double word aligned (See: "Procedure Call Standard for the ARM
Architecture" - 5.2.1.1). Since a 'call' on ARM will not result in a stack pointer
change (like on x86), the current behavior resulted in a 4 Byte aligned stack
only.

Follow up to #1043
2014-02-25 14:58:07 +01:00
Martin Stein
df066521a5 ldso: don't destruct Rm_area singleton in file.cc
This is needed to avoid access to invalid caps in forked noux programs.

ref #989
2014-02-25 14:58:07 +01:00
Stefan Kalkowski
6ca8a41232 core: lower default verbosity when quota exceeds
* only print quota exceeded message and statistic when explicitly enabled
* turn init's error message "cannot respond to request" into a warning
2014-02-25 14:58:06 +01:00
Stefan Kalkowski
30bfc63b63 block cache: quota to small for foc_x86_64 2014-02-25 14:58:06 +01:00
Stefan Kalkowski
746011ee28 blk_cache: fix deadlock in allocator hierarchy
This commit generalizes the bit array in 'base/util/bit_array.h',
so that it can be used in a statically, when the array size is known
at compile time, or dynamically. It uses the dynamic approach of the
bit array for a more generalized version of the packet allocator,
formerly only used by NIC session clients. The more generic packet
allocator is used by the block cache to circumvent the allocation
deadlock described in issue #1059.

Fixes #1059
2014-02-25 14:58:06 +01:00
Sebastian Sumpf
aa4f11905a ldso: Export 'lx_syscall' for base-linux
The syscall library in not linked to dynamic binaries anymore, hence ldso need
to export the required symbols

Follow up to #1017
2014-02-25 14:58:06 +01:00
Sebastian Sumpf
f447fbe1a5 base: Do not link base libs against shared libs
Base libraries are already contained within ldso.lib.so. Remove unnecessary
filtering from 'dep_lib.mk', make ldso depend on base libs.

Issue #1017
Issue #989
2014-02-25 14:58:06 +01:00
Sebastian Sumpf
481a8ede5f lxip: Fix implicit declaration warning
Issue #1050
2014-02-25 14:58:06 +01:00
Norman Feske
14718401ea nitpicker: Support for dynamic screen resizing
Fixes #1056
2014-02-25 14:58:06 +01:00
Norman Feske
0056167157 liquid_fb: Improve resize handling
This patch make the handling of resizing the virtual framebuffer more
consistent. Liquid_fb keeps track of two sizes. The "next size" is the
size of the framebuffer handed out via the next call of 'dataspace'.
The "designated size" is the size as demanded by the user. The latter
size may be updated more often than the "next" size, depending on the
responsiveness of the framebuffer client to mode-change signals.

The patch also removes the synchronization with refresh calls because
the synchronization made the flickering artifacts worse when executing
nitpicker within liquid_fb. So it was not properly working anyway.
In the future, we might reimplement such a synchronization mechanism
when switching to the server API.

Issue #1056
2014-02-25 14:58:06 +01:00
Martin Stein
4a61d008be base: beautify BSS stuff in CRT0s
fix #989
2014-02-25 14:58:05 +01:00
Martin Stein
5a6253eeff base: downsize initial main-thread stack
As the initial main-thread stack is not used for the whole main-thread life
anymore but only for the initialization of the Genode environment it can be
downsized to 32Kb for all architectures.

ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
83b0cdf709 base: bin out-commented EH_FRAME stuff in CRT0s
ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
523791b361 base: generic implementation of Context_allocator
ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
020edd3032 noux_fork: raise MAX_COUNT to 1000
To see the output of both, forker and fork, we must give the test
more time on OKL4 as fork seems to be not so fast with this kernel.

ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
9c1563be67 base: ease Platform_env::Resources
It is unnecessary to remember session caps in a Resources object as the
contained connections can cast implicitely to the appropriate caps.

ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
0b64328944 base: setup thread object for main thread in CRT0
For a main thread a thread object is created by the CRT0 before _main gets
called so that _main can already run in a generic environment that, e.g.,
catches stack overflows as a page-fault instead of corrupting the BSS.
Additionally dynamic programs have only one CRT0 - the one of the LDSO -
which does the initialization for both LDSO and program.

ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
ba8e61653f noux & 64bit: fix printf format-warning
ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
cfd4310684 libc_noux & 64bit: fix printf format-warning
Normally for intptr_t the printf format PRIiPTR should be used. As Genode
printf doens't support this format we cast it to long int (intptr_t is int
for 32 bit and long int for 64 bit).

ref #989
2014-02-25 14:58:05 +01:00
Martin Stein
c2af646ad8 noux: Noux_connection::context_area_rm_session()
This enables a forked process to update the capability of its
context area RM session.

ref #989
2014-02-25 14:58:04 +01:00
Martin Stein
f7149623ca base: rename reload_parent_cap.cc
ref #989
2014-02-25 14:58:04 +01:00
Norman Feske
276a1775f1 Accessors for Xml_node utility
This patch adds accessors to obtain the buffer of an attribute value,
which is useful to avoid the copying-out of such information by
maintaining pointers into the XML string as meta data.
2014-02-25 14:58:04 +01:00
Norman Feske
c265cfa593 Add 'operator *' to os/volatile_object.h
This operator is needed when we want to create a reference to (the
content of) a volatile object.
2014-02-25 14:58:04 +01:00
Norman Feske
638a9cfd40 base: optional length argument for String::String 2014-02-25 14:58:04 +01:00
Markus Partheymueller
31fc7c35e2 tool_chain: check for various autoconf installs.
There exist different default setups for a specific autoconf version:
* autoconf
* autoconf$(VERSION)
* autoconf-$(VERSION)

As of now, only the second option is recognized by the check in tool_chain.

This patch ensures that if one of those is present in the correct
version, it will be found and used in the build process.

Fixes #1053.
2014-02-25 14:58:04 +01:00
Christian Prochaska
69785504c7 Qt5: reserve screen space for the liquid_fb title bar
With this patch, the liquid_fb title bar height gets reserved at the top of the
screen, so if a Qt application wants to position a window at (0,0), there's
still enough space to show the title bar above.

Issue #1054.
2014-02-25 14:58:04 +01:00
Norman Feske
c30415fb9b News item for FOSDEM slides 2014-02-25 14:58:04 +01:00
Norman Feske
46eebede26 liquid_fb: Fix decoration config option
The decoration configuration is used by Qt5 to omit window decorations
from menus. It got lost during the restructuring of the scout widgets.
2014-02-25 14:58:03 +01:00
Norman Feske
718b0c0b67 d3m: quota adjustment for ps2 driver 2014-02-25 14:58:03 +01:00
Norman Feske
676c3830f9 d3m: Adaptation to USB driver config change 2014-02-25 14:58:03 +01:00
Norman Feske
e2d9b31bfe iso9660: Increase entrypoint stack size for 64bit 2014-02-25 14:58:03 +01:00
Norman Feske
9947c3d33b d3m: Fix deadlock of usb_drv
This deadlock was introduced by the change of USB driver to the server
API.

Fixes #1052
2014-02-25 14:58:03 +01:00
Norman Feske
6f9e15aff8 base: Add 'construct_at' utility
This utility allows for the manual placement of objects without the need
to have a global placement new operation nor the need for type-specific
new operators.

Issue #989
2014-02-25 14:58:03 +01:00
Christian Helmuth
cdb5030cbb Fix several format string warnings 2014-02-25 14:58:03 +01:00
Josef Söntgen
bdec3dd668 os: initial version of trace_fs
The trace_fs server provides access to a Trace_session by using a
File_system_session as frontend.

Each trace subject is represented by a directory ('thread_name.subject')
that contains specific files ('active', 'cleanup', 'enable', 'events',
'buffer_size' and 'policy'), which are used to control the tracing
process of the thread as well as storing the content of its trace
buffer.

The tracing of a thread is only activated if there is a valid policy
installed and the intend to trace the subject was made clear by writing
'1' to the 'enable' file.

The tracing of a thread may be deactived by writing a '0' to the
'enable' file.

A policy may be changed by overwriting the currently used one. In this
case the old policy is replaced by the new policy and is automatically
utilize.

Writing a value to the 'buffer_size' file changes the appointed size of
the trace buffer. This value is only evaluted by reactivating the
tracing process.

The content of the trace buffer may be accessed by reading from the
'events' file. Throughout all tracing session new trace events are
appended to this file.

Nodes of UNTRACED subjects are kept as long as they do not change their
tracing state to DEAD. In this case all nodes are removed from the
file system. Subjects that were traced before and are now UNTRACED will
only be removed by writing '1' to the 'cleanup' file - even if they
are DEAD by now.

To use the trace_fs a config similar to the following may be used:

! <start name="trace_fs">
! 	<resource name="RAM" quantum="128M"/>
! 	<provides><service name="File_system"/></provides>
! 	<config>
! 		<policy label="noux -> trace" interval="1000" subject_limit="512" trace_quota="64M" />
! 	</config>
! </start>

'interval' sets the periode in which the Trace_session is polled. The
time is given in milliseconds.
'subject_limit' speficies how many trace subject should by acquired at
most when the Trace_session is polled.
'trace_quota' is the amount of quota the trace_fs should use for the
Trace_session connection. The remaing amount of RAM quota will be used
for the actual nodes of the file system and the 'policy' as well as the
'events' files.
In addiition there are 'buffer_size' and 'buffer_size_limit' that define
the initial and the upper limit of the size of a trace buffer.
Tracing of parent processes or rather threads may be enabled by setting
'parent_levels' to a value greater than '0' (though this attribute is
available, the trace session component within core still lacks support
for it).

A ready-to-use runscript can by found in 'ports/run/noux_trace_fs.run'.

Fixes #1049.
2014-02-25 14:58:02 +01:00
Josef Söntgen
e79044d16a core: change policy incrementation to prefix op
Using prefix incrementation makes sure a policy with id == 0 is
invalid.

Fixes #1049.
2014-02-25 14:58:02 +01:00
Martin Stein
e68eadf57b hw: fix bug in IPC message-size calculation
ref #989
2014-02-25 14:58:02 +01:00
Martin Stein
a9747825fc hw: use descriptive bool value names in ipc.cc
ref #989
2014-02-25 14:58:02 +01:00
Martin Stein
901b3e2bb4 hw: ease usage of the kernel log
ref #989
2014-02-25 14:58:02 +01:00
Stefan Kalkowski
eeb2d95b1f block: prevent from dereferencing invalid pointers
Until now, block drivers had to deal with a pointer to the client
session component, e.g.: to acknowledge block packets already processed.
When a session was closed, the driver object wasn't informed explicitly,
which leads to defensive programming, or lastly to a race-condition in
test-blk-srv. To prevent from this class of errors, the pointer is now
private to the generic block driver base class, and not accessible to
the concrete driver implementation. Moreover, the driver gets explicitly
informed when a session got invalidated.

Ref #113
2014-02-25 14:58:02 +01:00
Stefan Kalkowski
ca513113f6 block: cache between one client and one device
This block cache component acts as a block device for a single client.
It uses fixed 4K blocks as caching granularity, thereby implicitly reads
ahead whenever a client requests lesser amount of blocks. Currently,
it only supports a least-recently-used replacement policy.

Fixes #113
2014-02-25 14:58:02 +01:00
Stefan Kalkowski
0bc012eb79 os: handle ipc error in server framework
When using the server framework, it might happen that the main thread
tries to forward a signal to the entrypoint, while the context of that
signal is already destroyed. In that case the main thread will get an
ipc error exception as result.

Related to #113
2014-02-25 14:58:01 +01:00
Christian Helmuth
41d5959ae5 base: extend thread test for stack alignment 2014-02-25 14:58:01 +01:00
Bjoern Doebel
9c9f67d0d6 Check for all missing tools at once
Instead of terminating tool/tool_chain when finding the first
missing tool, this patch runs all checks to completion before
bailing out. This eases finding missing programs, because the
user has to run the script only once to get a list of all missing
software.

Fixes #1046
Fixes #1047
2014-02-06 15:20:14 +01:00
Christian Prochaska
7008013625 Qt5: decrease memory amount needed for QtQWebkit
On 64-bit platforms Qt's JavaScript engine tries to reserve 1GiB of
virtual memory via 'mmap()', to be backed by physical memory on demand.
Genode's 'mmap()' implementation currently does not support on-demand
allocation of physical memory and tries to allocate the whole amount at
once, which is usually far more than needed.

With this patch, the amount to be reserved gets decreased to 32MiB.

Fixes #1041.
2014-02-03 11:37:47 +01:00
Christian Prochaska
4b420f6e71 Fix stack pointer alignment for x86_64 platforms
The x86_64 ABI requires the stack pointer to be 16-byte aligned before the
call of a function and decreased by 8 at the function entrypoint (after
the return address has been pushed to the stack).

Currently, when a new Genode thread gets created, the initial stack
pointer is aligned to 16 byte. On Genode/Linux, the thread entry function
is entered by a 'call' instruction, so the stack pointer alignment at the
function entrypoint is correct. On Fiasco.OC and NOVA, however, the thread
entry function gets executed without a return address being pushed to the
stack, so at the function entrypoint the stack pointer is still aligned to
16 byte, which can cause problems with compiler-generated SSE
instructions.

With this patch, the stack pointer given to a new thread gets aligned to
16 bytes and decreased by 8 by default, since most of the currently
supported base platforms execute the thread entry function without pushing
a return address to the stack. For base-linux, the stack pointer gets
realigned to 16 bytes before the thread entry function gets called.

Fixes #1043.
2014-02-03 11:34:30 +01:00
Norman Feske
a19d491fbd doc: Genode Porting Guide + news item 2014-01-30 10:05:44 +01:00
Christian Helmuth
f91b1b6258 base: test for races in thread-context allocation
Related to #1024.
2014-01-30 10:05:44 +01:00
Christian Prochaska
40aa553fa9 part_blk.run: build components before block image
With this patch, the components get built before the creation of the block
image to ensure that the 'bin' directory exists.

Fixes #1038.
2014-01-30 10:05:44 +01:00
Christian Prochaska
27ff408985 Noux: POSIX signal improvements
- 'kill()' syscall added
- 'wait()' gets unblocked when a signal occurs
- syscalls can get called from a signal handler without corrupting the 'sysio' object
- the child's exit status gets correctly reported to 'wait()'
- SIGCHLD gets ignored by default
- pending signals survive 'execve()'

Fixes #1035.
2014-01-30 10:05:44 +01:00
Stefan Kalkowski
7876dfcb5e block: free packet stream dataspace on destruction
Fixes #1033
2014-01-30 10:05:44 +01:00
Stefan Kalkowski
c888ff0d76 pci_session: add free_dma_buffer call (Fix #1037) 2014-01-30 10:05:44 +01:00
Christian Helmuth
aa02fb8256 Revise delete with allocators
Delete operators with additional allocator reference/pointer parameters
are needed if the constructor of an 'new(allocator)' allocated object
throws an exception. Also, destroy now uses the operator to free memory
and provides variants with allocator reference and pointer.

The commit includes a simple test scripts 'run/new_delete', which
exercises the several 'delete' cases.

Related to #1030.
2014-01-30 10:05:44 +01:00
Christian Helmuth
3234e4f775 Make Deallocator::need_size_for_free() pure virtual 2014-01-30 10:05:43 +01:00
Christian Helmuth
32f6d75cdb Fix compiler warnings 2014-01-28 09:27:09 +01:00
Christian Helmuth
b803375863 Fix ram-fs chunk test
The script was missing RM service and had color codes in output to
compare.
2014-01-28 09:27:09 +01:00
Christian Prochaska
ddc79d5563 base-linux: fix race condition in IPC code
Fixes #1013.
2014-01-27 18:54:09 +01:00
Stefan Kalkowski
5447c406e5 thread: rearrange thread context management
Use a bit allocator for the allocation management of thread contexts,
instead of holding allocation information within the Thread_base objects,
which lead to race conditions in the past.

Moreover, extend the Thread_base class interface with the ability to
to add additional stacks to a thread, and associate the context they're
located in with the corresponding Thread_base object. Additional stacks
can be used to do user-level scheduling with stack switching, without breaking
Genode's API.

Fixes #1024
Fixes #1036
2014-01-27 18:54:09 +01:00
Stefan Kalkowski
66c5887bd3 Move Bit_allocator from base-nova to base
Change the template parameter for Bit_allocator, and Bit_array. Instead of
assigning words to be used by the bit array, you can now tell the count of
items that shall be used.

Moreover, some dead code, previously using the Bit_allocator, was removed.

Related to #1024
2014-01-27 18:54:09 +01:00
Christian Helmuth
1645587b6a pistachio: Explicitly require autoconf >= 2.50
'make -C base-pistachio prepare' produces the following error otherwise

  autoconf: Undefined macros:
  configure.in:117:AC_CONFIG_HEADERS([config.h])
  configure.in:129:Please[AC_HELP_STRING([--with-comport=PORT],
  configure.in:138:Please[AC_HELP_STRING([--with-comspeed=SPEED],
  configure.in:147:Please[AC_HELP_STRING([--with-kickstart-linkbase=BASE],
  configure.in:152:Please[AC_HELP_STRING([--with-s0-linkbase=BASE],
  configure.in:157:Please[AC_HELP_STRING([--with-roottask-linkbase=BASE],
  configure.in:162:Please[AC_HELP_STRING([--with-kerneldir=DIR],
  configure.in:341:AC_CONFIG_FILES([
  configure.in:36:AC_CONFIG_SRCDIR([serv/sigma0/sigma0.cc])

Fixes #1034.
2014-01-27 18:54:09 +01:00
Christian Helmuth
8ed2e150a4 gdb_monitor: inhibit .gdbinit in unattended test 2014-01-27 18:54:09 +01:00
Rolf Sommerhalder
4ac81ad179 Fix run/uart, which fails to run without IO_PORT
Fixes #1031
2014-01-27 18:54:09 +01:00
Christian Helmuth
7e517179c9 Unify stack alignment among all platforms
The alignment is now done in Thread_base::Context. Implementations are
forced to use Context::stack_top(), which aligns the stack top.
2014-01-27 18:54:08 +01:00
Norman Feske
6ec36350d6 base: New Genode::Deallocator interface
Splitting the new Genode::Deallocator interface from the former
Genode::Allocator interface enables us to restrict the accessible
operations for code that is only supposed to release memory, but not
perform any allocations.

Additionally, this patch introduces variants of the 'new' operator
that takes a reference (as opposed to a pointer) to a Genode::Allocator
as argument.
2014-01-27 18:54:08 +01:00
Norman Feske
99979e09ed Xml_node::Attribute::value_size accessor 2014-01-27 18:54:08 +01:00
Norman Feske
a60966150e Service for reflecting reports as ROM modules
Issue #1026
2014-01-27 18:54:08 +01:00
Norman Feske
7c23d6cd81 nitpicker: Report pointer position 2014-01-27 18:54:08 +01:00
Norman Feske
2a576da2b0 Infrastructure for posting status reports
This commit introduces the "Report" session interface and a simple
service to forward reports to the LOG service.

Fixes #1026
2014-01-27 18:54:08 +01:00
Norman Feske
f32a97da38 Use filename as default label for ROM connections
By assigning the file name as label, we may become able to remove the
filename argument in the future by just interpreting the last part of
the label as filename. By keeping only the label, we won't need to
consider conditional routing (via <if-arg>) based on session arguments
other than the label anymore.
2014-01-27 18:54:07 +01:00
Norman Feske
9cb603eb5f Dynamic ROM service for automated testing 2014-01-27 18:54:07 +01:00
Norman Feske
332aeba844 util/string.h: String::operator == 2014-01-27 18:54:07 +01:00
Norman Feske
bdfbe9f20e New 'os/attached_dataspace.h' utility
The new Attached_dataspace complements the existing Attached_*
utilities with a simple version that can be used with any kind of
dataspaces. It may be even useful as a common base type for the other
variants. For example, this patch simplifies Attached_rom_dataspace
and removes the Terminal::Client::Io_buffer.
2014-01-27 18:54:07 +01:00
Norman Feske
759e11f9af Add Attached_rom_dataspace::update
This patch enhances the 'Attached_rom_dataspace' utility to support
dynamic updates of ROM modules.
2014-01-27 18:54:07 +01:00
Norman Feske
b6f59fb9be XML generator and test
Fixes #1019
2014-01-27 18:54:07 +01:00
Norman Feske
865f2b263f New utility for managing volatile class members
Fixes #1025
2014-01-27 18:54:07 +01:00
Norman Feske
3394be9464 Clean up scout widgets
This patch integrate the scout widgets with Genode's new API headers
'util/geometry.h', 'os/surface.h' and 'os/texture.h'. Thereby, we get
almost rid of the platform-abstraction shim that was never used anyway.

Furthermore, it extracts the parts that are worth reusing from the
scout implementation to the public location 'demo/include/scout'.
2014-01-27 18:54:06 +01:00
Norman Feske
8c8d53777f Generalization of nitpicker's graphics backend
This patch re-arranges nitpicker's graphics backend in a more modular
and expandable way. Generalized versions of the 'Canvas',
'Chunky_canvas', and 'Pixel_*' classes have been moved to
'os/include/util/' and 'os/include/os'. The only remaining parts that
are specific to nitpicker's needs are a few drawing functions, each
located in a distinct header at 'os/include/nitpicker_gfx/'.
2014-01-27 18:54:06 +01:00
Norman Feske
765053ea94 Remove nitpicker_gfx/nitpicker_types.h 2014-01-27 18:54:06 +01:00
Norman Feske
0063f217ca Move nitpicker_gfx/color.h to util/color.h 2014-01-27 18:54:06 +01:00
Norman Feske
e809192b97 Remove nitpicker_gfx/miscmath.h 2014-01-27 18:54:06 +01:00
Norman Feske
99ddd1cd85 Add demo/include/util/dither_matrix.h
This patch moves a repeatedly used dithering matrix from the scout
source code to a public header to share it across programs.
2014-01-27 18:54:06 +01:00
Norman Feske
35bfc34db5 Move nitpicker_gfx/geometry.h to util/geometry.h
This patch makes nitpicker's geometry utilities available for the use
by other programs. Thereby, the 'Point', 'Area', and 'Rect' classes
have become templates that take the coordinate type and distance type
as arguments.
2014-01-27 18:54:06 +01:00
Norman Feske
6efac7672f tool/fix_include_ifndef: consider license header 2014-01-27 18:54:05 +01:00
Norman Feske
8ca0f04ba0 Length and capacity accessors for Genode::String 2014-01-27 18:54:05 +01:00
Norman Feske
64a9a53c98 terminal_echo.run: Adjust timer quota 2014-01-27 18:54:05 +01:00
Christian Prochaska
4f9be09643 Arora: add gallium.lib.so boot module
QtGui depends on gallium now, so gallium.lib.so needs to be available as
boot module.

Fixes #992.
2014-01-27 18:54:05 +01:00
Christian Prochaska
5df654ace4 Fix memory leak in Gallium EGL driver
With this patch, the reference count of the textures created in
'Surface::_validate()' gets decreased in the '~Surface()' destructor.

Fixes #1012.
2014-01-27 18:54:05 +01:00
Christian Prochaska
cca2dbc400 Arora: fix the demo launchpad configuration
This patch adapts the launchpad configuration of the Nitpicker plugin demo
to the current launchpad config syntax.

Fixes #1018.
2014-01-27 18:54:05 +01:00
Christian Helmuth
a3e30cc96c run: instruct 'exec' to ignore stderr output
Unless '-ignorestderr' is set on 'exec' in expect, any output on stderr
is interpreted as execution failure. In this case, 'create_iso' logs
some diagnostics but does not fail.

We repeatedly promote our ISOs to be bootable from USB storage.
Therefore, we have a hard dependency on 'isohybrid' and should fail in
the case that the tool is missing.
2014-01-27 18:53:52 +01:00
Stefan Kalkowski
6a076ff621 block: use new server framework in block drivers
As a side effect, the entrypoints in the USB driver are merged into one thread.

Fixes #1027
2014-01-27 18:53:52 +01:00
Josef Söntgen
2e99c19601 libc: add support for sysconf(_SC_PAGESIZE)
Fixes #1029.
2014-01-17 14:04:29 +01:00
Josef Söntgen
6e15d966c7 noux: add e2fsprogs-v1.42.9 package
Fixes #1029.
2014-01-17 14:04:29 +01:00
Josef Söntgen
c4c43ffc9d noux: add block device file system
Access to a block session is provided by using the block file system.
By specifying the label, each block session request can be routed to
the proper block session provider:

! <fstab>
! 	...
! 	<dir name="dev">
! 		<block name="blkdev0" label="block_session_0" />
! 	</dir>
! 	...
! </fstab>

In addition to this file system, support for the DIOCGMEDIASIZE ioctl
request was added. This request is used by FreeBSD and therefore our
libc to query the size of the block device in bytes.

Fixes #1010.
2014-01-17 14:04:29 +01:00
Christian Helmuth
25b41e9cff hello: fix quota value and integration of timer
Fixes #1028.
2014-01-17 14:04:29 +01:00
Alexander Boettcher
041dd2a133 netperf: use Genode specific alarm timer
Fixes #1021
2014-01-17 14:04:29 +01:00
Norman Feske
fe45cc8c05 Road map for 2014 2014-01-17 14:04:09 +01:00
Norman Feske
68608bb62d Increase quota for resource_request test
Needed to let the test pass on foc_x86_64.
2014-01-16 18:34:06 +01:00
Norman Feske
6a19b30795 Vancouver: Clarify license headers
All source codes of the glue code between Vancouver and Genode that were
based on existing GPL code had already stated that Genode Labs is not
the sole owner of the code. To make the distinction between the Genode
OS framework and the glue code more clear, this patch removes the text
"is part of the Genode OS framework" from the glue code.
2014-01-16 18:34:06 +01:00
Stefan Kalkowski
23ce0b2071 block: fix race in generic block driver component
Fixes #1023
2014-01-16 18:34:06 +01:00
Stefan Kalkowski
65291902e0 os: manage/dissolve Signal_rpc_member in class
Instead of, passing responsibility to manage and dissolve Signal_rpc_member
objects at a corresponding entrypoint to the user, hand over entrypoint's
reference to the constructor, and do it in the constructor resp. destructor
of the class.

Fixes #1022
2014-01-16 18:34:06 +01:00
Alexander Boettcher
bf57a5d79c pci: increase memory for device pd
not enough anymore on 32 bit after #989 changes
2014-01-16 18:34:06 +01:00
Norman Feske
07b355b4e4 Clarify comment in base-libs.mk 2014-01-16 18:34:06 +01:00
Christian Prochaska
efd20a7ded loader: fix the 'constrain_geometry()' function
Fixes #1014.
2014-01-16 18:34:06 +01:00
Christian Prochaska
cbd3d0a878 Qt4: fix the 'qpluginwidget' test
Fixes #1015.
2014-01-16 18:34:06 +01:00
Sebastian Sumpf
880930cb4f lxip: support configuration of libc plugin
Added support for the 'ip_addr', 'gateway', and 'netmask' configuration
parameter.

Issue #984
2014-01-16 18:34:06 +01:00
Martin Stein
12f560dc0e fiasco: remove remains of once supported ARM port
ref #989
2014-01-16 18:34:05 +01:00
Ivan Loskutov
b6626607f0 libport: Fix of download location of pcre
Fixes #840
2014-01-08 11:41:07 +01:00
Norman Feske
feedbe4bb9 failsafe test: Fix destruction order 2014-01-07 12:16:16 +01:00
Norman Feske
c8cf882a94 News item for FOSDEM 2014 2014-01-06 11:46:13 +01:00
Norman Feske
89403a24b3 Avoid target-name ambiguity of "test-thread"
Both base/src/test/thread and base-okl4/src/test/okl4_03_thread used the
same target name, which ultimately confused the build system when
building on OKL4.
2013-12-28 19:50:25 +01:00
Josef Söntgen
2e6255d1cf libc_fs: fix potential memory leak in symlink()
Free always the file descriptor and plugin context, return
the appropriate value to the caller and only in the error
case set errno.

Fixes #1009.
2013-12-20 15:21:59 +01:00
Josef Söntgen
f71e38702f noux: add SYSCALL_SYNC
File systems using the File_system_session interface can now be
synchronized by using this syscall. This is needed for file system
that maintain an internal cache, which should be flushed.

Fixes #1008.
2013-12-20 15:21:08 +01:00
Josef Söntgen
e1370b558e add sync implementation to various fs servers
Fixes #1007.
2013-12-20 15:20:10 +01:00
Josef Söntgen
1c67e3bb43 os: extentend File_system interface with sync RPC
Users of a File_system_session might want to force a file system
to flush or rather to synchronize its internal cache. A concret
default implementation is provided because not all file systems
maintain an internal cache and are not required to synchronize
caches.

Fixes #1007.
2013-12-20 15:20:05 +01:00
Alexander Boettcher
944be1b4e6 nova: throw exception if ram_ds setup fails
Fail hard if no large enough virtual memory area can be found where to map
the memory from the kernel to core.

Additionally clear dataspaces in junks if it can't be done in one large junk.

Fixes #1011
2013-12-20 15:17:33 +01:00
Alexander Boettcher
22c1f8772b base: catch errors during ram_ds allocation
Issue #1011
2013-12-20 15:16:25 +01:00
Alexander Boettcher
b893968232 base: show size as %zu instead %zd
For big numbers otherwise negative sizes for memory chunks are displayed.

Issue #1011
2013-12-20 15:16:19 +01:00
Sebastian Sumpf
b8beba5bf3 ldso: Support for setting global object values
Make 'set_program_var' accessible outside of 'rtld.c'. Also, compile
dynamically linked programs with the '-fPIC' option. Doing not so,
yields to program-global symbols being put in the '.symtab' section
(which can be stripped) only. In order to get access to global
variables from the dynamic linker, the symbols need to reside within
the '.dynsym' section additionally. Hence the '-fPIC'.

ref #989
fix #1002
2013-12-20 14:48:06 +01:00
Martin Stein
1aadce4496 codezero: adjust pager ID to new thread order
ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
49eeb485d9 hw: mark caller when printing an activity-table
ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
906b4dc90a hw: format fix in activity table
ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
f4bd2368f6 hw: cancel unresolved faults before pager dissolve
If an RM client gets dissolved the RM server tries to first
dissolve and then destruct the according pager object. As pager objects
previously cancelled unresolved faults only in destructor the dissolve
operation blocked forever when an unresolved fault existed.
As every pager object should get dissolved before it gets destructed
(signal-context complains otherwise) no more unresolved-fault cancelling
is needed in the destructor.

ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
8eef91f2ac hw: do not block on destruction of signal receiver
As synchronization of signal contexts is now the users business instead of
cores and the signal framework ensures that every context of a receiver gets
synchronously destructed before the destruction of the receiver itself
synchronization and thus blocking at the destruction of a kernel
receiver-object isn't necessary anymore.

ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
1c8c30e1f4 hw: sync signal contexts directly as user
Kernel::signal_context_kill can be used by any program to halt the processing
of a signal context synchronously to prevent broken refs when core destructs
the according kernel object. In turn, Kernel::bin_signal_context doesn't block
anymore and destructs a signal context no matter if there are unacknowledged
signals. This way, cores entrypoint doesn't depend on signal acks of a
untrustworthy client anymore.

ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
2bdf0e70e9 hw: fix bug in Kernel::Thread::_print_activity
ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
3bdf70f771 hw: rename kill_* functions in bin_*
In the future bin_* means the direct destruction of a kernel object
without any blocking. kill_* in contrast is used for bringing a
kernel object such as signal contexts synchronized into a sleeping
state from where they can be destructed without the risk of getting
broken refs in userland.

ref #989
2013-12-20 14:48:06 +01:00
Martin Stein
750f5313f7 base: avoid compiler warning in Thread::stack_top
The statement _context->stack[-1] triggered the compiler warning
'array subscript is below array bounds'.

ref #989
2013-12-20 14:48:06 +01:00
Alexander Boettcher
a596bfe797 run: test for main thread_base object
ref #989
2013-12-20 14:48:05 +01:00
Martin Stein
6aa0ab1bf9 hw: communicate UTCB dataspace through start info
To remap its UTCB to its context area later, a main thread needs
to know the according dataspace capability. This is done through
the start-info it receives from its creator at startup.

ref #989
2013-12-20 14:48:05 +01:00
Martin Stein
42f51cd802 hw: use core-PD class to prevent singleton clashes
ref #989
2013-12-20 14:48:05 +01:00
Martin Stein
4009619206 base: natural default align in unmanaged singleton
I have no idea where the previous default alignment = 2 in the unsynchronized
singleton came from but as at least the Arndale IC-driver in base-hw needs an
alignment of 4 = address width, unmanaged singleton now uses sizeof(addr_t)
as default alignment.

ref #989
2013-12-20 14:48:05 +01:00
Martin Stein
77130a9404 hw: replace unsynchronized by unmanaged singleton
ref #989
2013-12-20 14:48:05 +01:00
Martin Stein
212fc47768 base: provide template for unmanaged singletons
An unmanaged singleton is a singleton object that isn't
constructed or destructed implicitly through the C++ runtime
enviroment. The new header provides a helper to create such objects
and is located in src/base/include.

ref #989
2013-12-20 14:48:05 +01:00
Stefan Kalkowski
ea9c0e20ba part_blk: increase ep stack size and bulk buffer
* Increase entrypoint stack size for part_blk server,
  since it crashes on 64 bit
* Consider packet alignment in bulk buffer size calculation of test-blk-cli
2013-12-19 11:34:05 +01:00
Stefan Kalkowski
af86e33c3f part_blk: re-design to work event driven
Fix #750
2013-12-19 11:34:05 +01:00
Stefan Kalkowski
35bb156972 block: extend block session test framework 2013-12-19 11:34:05 +01:00
Stefan Kalkowski
e73a71be12 packet stream: clean range allocator in destructor 2013-12-19 11:34:05 +01:00
Stefan Kalkowski
56a7d00a44 block: extend generic driver API (Ref #750)
* allow to handle a maximum of packets in parallel
  that fits free slots in the ack queue
* stop processing packets, when the driver can't handle
  more requests in parallel, and resume packet handling,
  when the driver is ready again
2013-12-19 11:34:04 +01:00
Stefan Kalkowski
b10b9e20a2 block: support for block number >32 bit (Fix #968) 2013-12-19 11:34:04 +01:00
Josef Söntgen
1bc16f3a23 ahci: missing shift when setting FIS adress
Fixes #997.
2013-12-12 08:49:41 +01:00
Josef Söntgen
038fcf032a os: dissolve contexts in Packet_stream
Fixes #1003.
2013-12-11 08:25:44 +01:00
Stefan Kalkowski
cc3b1599b8 Follow-follow-up fix for "hw: basic support..." 2013-12-09 14:05:53 +01:00
Christian Helmuth
1f75805d54 fs run: fix Qemu ATAPI compatibility test 2013-12-09 14:05:53 +01:00
Christian Helmuth
50c30b1702 libc_block: enable and fix warnings 2013-12-09 14:05:53 +01:00
Alexander Boettcher
05ad5a6ad4 noux: adjust timeouts for diverse platforms
Issue #996
2013-12-09 10:49:16 +01:00
Alexander Boettcher
9759000538 foc: evaluate run_opt target for uboot link
Unify handling as base-hw does and enables us to use uBoot image for foc_panda.
2013-12-09 10:49:16 +01:00
Christian Helmuth
776fdceaa5 vesa: explicitly request VBE 2.0 information
We also skip any non-direct-color modes now.
2013-12-09 10:49:16 +01:00
Christian Helmuth
eaed3ba207 acpi: print RMRR region (not just base) 2013-12-09 10:49:16 +01:00
Christian Helmuth
b24f48b125 framebuffer test: acpi_drv and pci_device_pd 2013-12-09 10:49:16 +01:00
Stefan Kalkowski
8b7c67976d Follow-up fix for "hw: basic support for ODROID" 2013-12-09 10:49:16 +01:00
Stefan Kalkowski
277ca33988 usb block: use generic block driver API (Fix #966) 2013-12-09 10:49:16 +01:00
Stefan Kalkowski
c3c643bcf1 block: let generic driver API work asynchronously
Fix #990
2013-12-04 11:14:18 +01:00
Martin Stein
9c698ab6c1 noux_tool_chain_auto & hw_arndale: adjust timeouts
As hw_arndale is a bit slower than foc_arm and spawn_serial timing
calculation has changed in general, timeouts of noux_tool_chain_auto test
must be adjusted.

fix #996
2013-12-03 18:05:10 +01:00
Stefan Kalkowski
7b49dbf2f3 hw: basic support for ODROID XU board (Fix #991) 2013-12-03 11:30:07 +01:00
Alexander Boettcher
9b456fb3be run: spelling fix 2013-12-03 10:40:23 +01:00
Christian Prochaska
4519b39ba7 Qt5: use pthread synchronization functions
The Genode-specific implementation of 'QWaitCondition' contains a race
condition which can make the 'qt5_samegame' application hang on Fiasco.OC.

Since most of the pthread synchronization functions needed by the
UNIX-specific implementation of 'QWaitCondition' and 'QMutex' are
available now, we can use these now instead of fixing and keeping
the Genode-specific implementation.

Fixes #993.
2013-12-03 10:40:23 +01:00
Martin Stein
c4068c4001 FB & omap4: fix mix-up of _fb_height and _fb_width
fix #983
2013-12-03 10:40:23 +01:00
Martin Stein
d57319bbcb FB test: add stripes to detect line-shift bugs
ref #983
2013-12-03 10:40:23 +01:00
Martin Stein
576b9389cb FB test: fix wrong FB access-widths
ref #983
2013-12-03 10:40:22 +01:00
Christian Helmuth
1ba4e033a7 lxip: fake get_random_bytes() 2013-12-03 10:40:22 +01:00
Christian Helmuth
c05a80a139 netperf: move check for qemu to netperf.inc 2013-12-03 10:40:22 +01:00
Stefan Kalkowski
9d82720a29 http_blk: add run script for automated tests
Ref #966
2013-12-03 10:40:22 +01:00
Stefan Kalkowski
020ba97106 http_blk: use libc_lwip plugin, not lwip directly
Ref #966
2013-12-03 10:40:22 +01:00
Stefan Kalkowski
adc63ef2a6 rom_blk test: abort if test fails
Instead of printing the success message at the end of the test,
abort as soon as two blocks differ.

Ref #966
2013-12-03 10:40:22 +01:00
Stefan Kalkowski
66d499e416 http_block: rename to http_blk to be consistent
Ref #966
2013-12-03 10:40:22 +01:00
Stefan Kalkowski
bf90fd5f66 http_block: use generic block component/driver
Ref #966
2013-12-03 10:40:22 +01:00
Stefan Kalkowski
fec51620f7 fb_block_adapter: use generic block component/driver
Ref #966
2013-12-03 10:40:21 +01:00
Stefan Kalkowski
1b7b0b2050 atapi_drv: use generic block component/driver
Ref #966
2013-12-03 10:40:21 +01:00
Stefan Kalkowski
4c74af274b rom_loopdev: rename to rom_blk to be consistent
Ref #966
2013-12-03 08:33:26 +01:00
Stefan Kalkowski
1256b01867 rom_loopdev: use generic block component/driver
Ref #966
2013-12-03 08:33:26 +01:00
Stefan Kalkowski
0c8a4f9f3a block: extend interface of generic driver class
To support read-only devices like CDROMs, or rom_blk the supported
block operations have to be stated by specific the device driver.

Ref #966
2013-12-03 08:33:26 +01:00
Stefan Kalkowski
5a4cb7fcfb block: eliminate thread in generic block_component
Instead of using an additional thread in each Session_component of a
block server, which uses the generic block component and driver classes,
replace it with signal dispatchers.

Ref #113
2013-12-03 08:33:26 +01:00
Martin Stein
f4c724639b arm: raise stack size of main thread
With 64K stack size, when doing 'make core' in noux on base-hw, the main thread
of /libexec/gcc/arm-elf-eabi/4.7.2/cc1plus runs into a stack overflow during
the compilation of core/main.o . Thus raise the stack size to 128K.

fix #964
2013-12-03 08:33:26 +01:00
Martin Stein
8514eecc90 noux_tool_chain.inc: remove trailing whitespaces
ref #964
2013-12-03 08:33:26 +01:00
Martin Stein
51db6a6056 noux_terminal_fs: remove bad bracket in run script
ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
a2e6fdd922 noux_shell_script: platform driver and usb input
Provide platform driver and USB input driver in run/noux_shell_script
if they are needed.

ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
31b4062688 hw: optionally provide activity table on RM faults
ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
f356ad2bdf hw: print activity table via Kernel::print_char(0)
ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
e35d7c979f hw: IPC nodes provide protected accessors
ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
16d48eaf1e hw: signalling roles provide protected accessors
ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
da116c66ba hw: public access to idle item of a scheduler
ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
8d19aad601 hw_pbxa9: provide 768 MB RAM
The previously used RAM 0x0..0x10000000 was just an alias for
0x70000000..0x80000000. Qemu provides up to of 768 MB RAM with the
correct -m argument. This RAM is located at 0x70000000..0x90000000 and
0x20000000..0x30000000. At least the noux_tool_chain scripts are
happy to have that much RAM.

ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
6e90f70ec2 run: force qemu to emulate PBXA9 with -m 768
For PBXA9 qemu adjusts provided RAM chips to the -m arg. Thus we
filter user values and force value that enables all chips that Genode
expects to be available. Not doing so leads to inexplicable errors.

ref #964
2013-12-03 08:33:25 +01:00
Martin Stein
b5922fb7f1 hw: dissolve signal context in Pager_entrypoint
ref #964
2013-12-03 08:33:24 +01:00
Martin Stein
1eeb68bf56 hw: adjust gcc package to makeinfo version 5
Makeinfo versions greater 5 treat an @itemx that isn't preceeded by an @item
not as warning anymore but as error. The GCC version 4.7.2 that is used by
noux currently triggers this error multiple times. This commit adds a patch
to 'make prepare PKG="gcc"' that avoids the use of @itemx without preceeding
@item. As GCC versions greater than 4.8 should fix this problem by themselves
this should be seen as temporary quick fix.

ref #964
2013-12-03 08:33:24 +01:00
Alexander Boettcher
aca62c7180 noux: enable some arm platforms running tool_chain
ref #964
2013-12-03 08:33:24 +01:00
Martin Stein
fd003f0e00 noux_fork: use pause() instead of endless loop
At least with base-hw, the endless loop at the end of the fork
parent slows execution of the fork child dramatically. Using
libc function pause() is a cleaner solution anyways.

ref #964
2013-12-03 08:33:24 +01:00
Martin Stein
54610247ad hw: don't communicate main-thread UTCB via SP
When using the initial SP of a main thread for the UTCB
startup-argument, fork_trampoline in libc_noux gets broken.
The function expects the SP to be initialized already in contrast
to the _start function in crt0.s that is called for processes that
are not forked. As the main-thread UTCB is located at the same virtual
address for every PD anyways, we can circumvent this problem by
defining it statically.

ref #964
2013-12-03 08:33:24 +01:00
Martin Stein
2b8e5d7b19 hw: turn Native_utcb into restrictive class
fix #958
2013-12-03 08:33:24 +01:00
Martin Stein
5e3d505ef4 hw: bin stupid case in Thread::_await_ipc_failed
ref #958
2013-12-03 08:33:24 +01:00
Martin Stein
dc8cbbf022 hw: rename Startup_msg in Start_info
ref #958
2013-12-03 08:33:24 +01:00
Martin Stein
4359b99c4f hw: rename Ipc_msg in Message
ref #958
2013-12-03 08:33:23 +01:00
Martin Stein
575a81a633 hw: turn Ipc_msg into restrictive class
ref #958
2013-12-03 08:33:23 +01:00
Martin Stein
f128a52e8b hw: get rid of struct Msg and Msg::Type
Struct Msg was introduced due to the handling of pagefaults
and interrupts via synchronous IPC. Its only purpose was to provide
the message type in front of the typed message. Now pagefaults and
interrupts are handled via signals and struct Msg is not necessary
anymore.

ref #958
2013-12-03 08:33:23 +01:00
Martin Stein
d46b30a711 hw: clarify names of messaging kernel-calls
ref #958
2013-12-03 08:33:23 +01:00
Stefan Kalkowski
fbeaa9e358 fix typo on challenges page (fix #988) 2013-12-02 10:56:46 +01:00
Norman Feske
aa220ba042 Minor fixes of the release notes for version 13.11 2013-12-02 10:56:46 +01:00
Norman Feske
8c61832389 News item for Genode 13.11 2013-11-28 11:49:03 +01:00
Norman Feske
7797be4dcf Release notes for version 13.11 2013-11-28 11:48:55 +01:00
Norman Feske
0cf1c961e6 Update components.txt 2013-11-28 11:48:49 +01:00
Stefan Kalkowski
c70bc350e8 tz_vmm: make scenario reproducible by everyone 2013-11-28 08:22:25 +01:00
Stefan Kalkowski
23ce6dad50 hw_vea9x4: re-enable TrustZone support 2013-11-28 08:22:25 +01:00
Stefan Kalkowski
7bf73fb0c1 hw_imx53: use same link address with or without TZ 2013-11-28 08:22:25 +01:00
Stefan Kalkowski
39efbafb54 TrustZone vmm: rename to tz_vmm due to ambiguity 2013-11-28 08:22:24 +01:00
Martin Stein
2124b4b9c2 hw_panda: provide EHCI interrupt for USB driver
fix #981
2013-11-28 08:22:24 +01:00
Martin Stein
062aa2851c usb & panda: move EHCI-interrupt to board spec
ref #981
2013-11-28 08:22:24 +01:00
Norman Feske
d4900ad54d Add exfat and fuse-ext2 includes to .gitignore 2013-11-28 08:22:24 +01:00
Martin Stein
9bca6bfb0d hw: provide Signal_context::submit
fix #980
2013-11-28 08:22:24 +01:00
Martin Stein
06f8848b36 base: spelling fix in signal/signal.h
ref #980
2013-11-28 08:22:24 +01:00
Christian Helmuth
31605fd85f autopilot: create only missing builddirs on --keep
This improvement prevents multiple execution of create_builddir on
existing directories.
2013-11-28 08:22:24 +01:00
Christian Helmuth
1ef8545469 autopilot: improve detection of genode dir
If the script is executed with an obscure path (e.g.,
'../tool/autopilot'), just taking the argv0 string fails. Therefore, the
file path is now normalized prior to the directory detection.
2013-11-28 08:22:24 +01:00
Christian Prochaska
6a395d9a29 Qt5: enable QML support
This patch enables experimental QML support in Qt5.

Only the QtQuick plugin is available yet.

Currently runs best on Linux and has some problems on NOVA and Fiasco.OC.

Fixes #979.
2013-11-28 08:22:24 +01:00
Josef Söntgen
c6ed7f13bf os: initial preparation for 64Bit AHCI support
The AHCI driver seems to work on x86_64, though it should be treated
carefully because for now all adresses involved are <= 32Bit.
2013-11-26 16:50:52 +01:00
Christian Prochaska
1884e16ecf base-nova: increase page fault handler stack size
When building Genode/NOVA with -O0, the page fault handler thread could
run out of stack.

Fixes #977.
2013-11-26 16:50:52 +01:00
Christian Prochaska
fb468c1c87 scout: fix size calculation
Fixes #978.
2013-11-26 16:50:52 +01:00
Josef Söntgen
d0ddc11c09 libc: use File_descriptor::lock in pread/pwrite
Replace the static lock with the file descriptor lock because recursive
calls of p{read,write} would result in a deadlock when using multiple
libc-plugins at the same time.

Fixes #948.
2013-11-26 16:50:52 +01:00
Josef Söntgen
36f91c2007 libc: add Genode::Lock to File_descriptor class
This lock is needed to prevent multiple threads and/or multiple
libc-plugins from using the same file descriptor in p{read,write}.

Fixes #948.
2013-11-26 16:50:52 +01:00
Josef Söntgen
607036718c libports: add fuse-ext2
Fixes #942.
2013-11-26 16:50:52 +01:00
Josef Söntgen
aba67e365f libports: add fuse-exfat
Fixes #942.
2013-11-26 16:50:52 +01:00
Josef Söntgen
3a0922001b libports: add FUSE implementation
This FUSE implementation consists of libfuse, which provides a
subset of the FUSE 2.6 API and libc_fuse, which provides support
for accessing FUSE based file system via the libc.

Fixes #942.
2013-11-26 16:50:52 +01:00
Josef Söntgen
2891653f8a libports: reuse libc_ffat as skeleton for fs tests
In addition, file-system tests will use the AHCI driver instead of the
ATAPI driver. This change side-steps certain issues with Qemu's IDE
emulation.

Fixes #942.
2013-11-26 16:49:26 +01:00
Norman Feske
45a4d59e07 Whitespace fix 2013-11-26 14:32:08 +01:00
Christian Prochaska
934c009eaa Qt5: enable OpenGL support
Known limitations:

- only one Qt window can use OpenGL at this time
- window resizing using the resize handle does not work

Fixes #975.
2013-11-26 14:32:08 +01:00
Christian Prochaska
bef7086f20 libc: fix size calculation in 'Mem_alloc_impl::alloc'
When allocating new backing store in 'Mem_alloc_impl::alloc()', the
requested alignment needs to be considered in the size calculation.

Fixes #973.
2013-11-26 14:32:08 +01:00
Christian Prochaska
ca9ae43e50 base-linux: round up RM session size to page size
Since RM sessions can be used as dataspaces and dataspace sizes are
supposed to have page granularity, RM session sizes should have page
granularity, too.

Fixes #972.
2013-11-26 14:32:08 +01:00
Christian Prochaska
a2e405f9e9 Mesa: improvements for use with Qt5
Among other changes, this patch makes it possible to let Mesa render into
a user-provided buffer instead of the screen. This can be achieved with
the 'eglCreateWindowSurface()' function, which takes a buffer
description as third argument.

Fixes #974.
2013-11-26 14:32:07 +01:00
Christian Prochaska
8e30a07b90 pthreads: add support for recursive mutexes
Fixes #971.
2013-11-26 14:32:07 +01:00
Christian Prochaska
4e9303ff6e ldso: increase MEM_SIZE in 'mmap()'
MEM_SIZE needs to get increased for the 64-bit 'linux_x86' platform when
building with -O0 on the current master branch.

Fixes #970.
2013-11-26 14:32:07 +01:00
Christian Prochaska
ab65a489ce Qt5: use 'git apply' to apply patches
One of the Qt5 patches is supposed to create symbolic links, which is not
supported by GNU patch before version 2.7. Using 'git apply' to apply the
patches solves this problem.

Fixes #969.
2013-11-26 14:32:07 +01:00
Martin Stein
4697e0e07d hw: make bootstrap save against multiple calls
In programs with dynamic linker, _main and thus also platform_main_bootstrap
are called twice. By now, platform_main_bootstrap tried to always access the
startup message in the UTCB of the main thread that gets overridden till the
second call.

fix #967
2013-11-26 14:32:07 +01:00
Martin Stein
5b90113d86 hw: no default values for kernel-call args
ref #967
2013-11-26 14:32:07 +01:00
Norman Feske
0d3f5be95b Dissolve sig contexts in rm_fault and signal tests 2013-11-26 14:32:07 +01:00
Alexander Boettcher
7ab863b495 base: Warn on undissolved signal contexts 2013-11-26 14:32:07 +01:00
Stefan Kalkowski
0c6c70a612 cpu_session: follow-up fix for scale_priority
This is a fixup for commit 5a42f40f04.

ref #961
2013-11-26 14:32:07 +01:00
Sebastian Sumpf
54667241f7 usb_drv: Use GPIO driver on PandaBoard
Also updated run scripts.

Issue #708
2013-11-26 14:32:06 +01:00
Sebastian Sumpf
014b7d665c gpio_drv: Fix linking on PandaBoard
Issue #708
2013-11-26 14:32:06 +01:00
Christian Helmuth
eda44d6154 base-linux: hybrid file-system server
The current implementation is missing support for symbolic links.

Fixes #944.
2013-11-26 14:32:06 +01:00
Christian Helmuth
1bbd54c9b7 ram_fs: use server skeleton library
Related to #944.
2013-11-26 14:32:06 +01:00
Christian Helmuth
76cd788479 Fix some typos 2013-11-26 14:32:06 +01:00
Josef Söntgen
2a7fc69679 libports: add sys/disk.h symlink
Fixes #965.
2013-11-26 14:32:06 +01:00
Josef Söntgen
88851ab699 libports: libc_block plugin
This plugin provides support for using a Block_session connection by
opening "/dev/blkdev".

Fixes #965.
2013-11-26 14:32:06 +01:00
Sebastian Sumpf
634f4c0d8c netperf: Add separate run scripts for lwip/lxip
Also removed target 'app/netperf' and added 'app/netperf/lwip' and
'app/netperf/lxip'.
2013-11-26 14:32:06 +01:00
Alexander Boettcher
80838831d8 make dde_linux repository an optional one
Since dde_linux now contains the port of the Linux IP stack available for all
Genode base-* platforms move the repository out of drivers_arm and drivers_x86
build.conf to the optional build.conf (available to all platforms).
2013-11-26 14:32:05 +01:00
Sebastian Sumpf
5e17fef898 lxip: Port of the Linux TCP/IP stack 2013-11-26 14:32:05 +01:00
Sebastian Sumpf
864a047206 base: Local signal submit 2013-11-25 12:12:31 +01:00
Stefan Kalkowski
50d73e7890 block_session: extend interface with sync() call
To support components, which implement the block session's server side
rpc object, and which doesn't write data to their device backend immediately,
an additional synchronization call is needed. Thereby, clients like for
instance a file system can tell these components, when a synchronization is
required.

Ref #113
2013-11-25 12:12:31 +01:00
Alexander Boettcher
44c7d64fb3 netperf: remove packet/s from statistics
Mixing MB/s and packet/s in one graph is a bit confusing - so remove it from
the graph, but is still in the log output.
2013-11-25 12:12:31 +01:00
Alexander Boettcher
f00195e26d seoul: support to run VM outside VMM's PD
Issue #949

Related to issue #808 - one way to nearly double the maximum VM size for
VMs on 32bit Genode/Nova host if decreased performance is acceptable.
2013-11-25 12:12:31 +01:00
Alexander Boettcher
67c1ad4cdd nova: support creation of vCPU in own PD
With the patch a VMM is not forced anymore to co-located the VMM and VM in same
PD.

Fixes #949
2013-11-25 12:12:31 +01:00
Norman Feske
1df48b8331 ports: common utilities for building VMMs on NOVA
To ease the creation of custom virtual machine monitors on top of
NOVA, this patch moves generic utilities from vancouver resp. seoul to the
public include location 'ports/include/vmm'. As a nice side effect,
this change simplifies 'vancouver/main.cc'.

Issue #949
2013-11-25 12:12:31 +01:00
Martin Stein
07aa56fffb hw: re-add priority down-scaling
This is a follow-up commit for "hw: beautify scheduling-priority code".

ref #960
2013-11-25 09:50:27 +01:00
Martin Stein
883aa83e62 okl4 & priority.run: new order of core services
ref #961
2013-11-25 09:46:28 +01:00
Norman Feske
a984c2342e demo.run: Support for Raspberry Pi 2013-11-25 09:46:28 +01:00
Norman Feske
4388c2a97c Do not try to start Qemu for platform_rpi 2013-11-25 09:46:28 +01:00
Norman Feske
b7b8d22bc3 dde_linux/rpi: Enable USB power on startup
Needed when booting Genode directly from SD card w/o u-boot.
2013-11-25 09:46:09 +01:00
Norman Feske
148206d757 rpi: Framebuffer and platform drivers
The platform driver is used to access the features provided by the
Videocore mboxes, i.e., power configuration and framebuffer setup. The
framebuffer driver uses the platform interface to setup a screen mode of
1024x768.
2013-11-25 09:46:09 +01:00
Norman Feske
1d5c11c7af rpi: Allow the access to videocore memory as MMIO 2013-11-25 09:46:09 +01:00
Norman Feske
62019be6d3 rpi: Change link address to support larger images 2013-11-25 09:46:09 +01:00
Norman Feske
93c7e852e9 dde_linux: USB networking for rpi
Even though the network adaptor gets initialized, networking is not
functional yet.
2013-11-25 09:46:09 +01:00
Norman Feske
c52b7d3076 rpi: Videocore cache definitions 2013-11-25 09:46:09 +01:00
Norman Feske
435bdd5755 dde_linux: Support for Raspberry Pi
At the current stage, the USB HID and storage drivers are prinicpally
working but not stable. If interrupts are not processed fast enough,
devices will get sporadically disconnected.

The USB host-controller driver is not part of the normal Linux kernel.
For this reason, we need to download it separately. There exists a
'prepare_rpi' rule in the 'dde_linux/Makefile' to automate this process.
2013-11-25 09:46:09 +01:00
Norman Feske
0db203fb75 dde_linux: Limit number of merged IRQs
This change makes Irq_context::_handle_one robust against misbehaving
IRQ handlers that always return IRQ_HANDLED, specifically dwc_otg.
2013-11-25 09:46:09 +01:00
Norman Feske
88f635b021 dde_linux: Follow symlinks while grepping includes
This patch principally allows to install symlinks to out-of-Linux tree
drivers into the contrib directory. Those files are then considered for
the 'lx_emul.h' symlink procedure. Is useful as a temporary mechanism
while developing the rpi USB driver.
2013-11-25 09:46:09 +01:00
Norman Feske
5b5ea76039 hw_rpi: Hand out IRQ for USB host controller 2013-11-25 09:46:08 +01:00
Stefan Kalkowski
ae5e5cefc1 hw: initialize sctrl register appropriately
Fixes #916
2013-11-25 09:46:08 +01:00
Stefan Kalkowski
debec59e30 imx53: add missing break to input driver (fix #957) 2013-11-25 09:46:08 +01:00
Stefan Kalkowski
a7d7337b16 vmm: add i.MX53 platform as target (ref #954) 2013-11-25 09:46:08 +01:00
Stefan Kalkowski
6f136bef7a hw: add TrustZone support for i.MX53 (ref #954) 2013-11-25 09:46:08 +01:00
Stefan Kalkowski
238430a362 hw: save MMU registers for TrustZone VMM (ref #954)
When saving/resuming translation table base registers, and data fault register
a VMM is able to translate the VM's virtual addresses, and to analyse aborts
it has generated.
2013-11-25 09:46:08 +01:00
Martin Stein
b694045bd9 hw: get rid of Kernel::current_thread_id
Every thread receives a startup message from its creator through the initial
state of its userland thread-context. The thread-startup code remembers the
kernel name of the new thread by reading this message before the userland
thread-context gets polluted. This way, Kernel::current_thread_id becomes
unnecessary.

fix #953
2013-11-25 09:46:08 +01:00
Martin Stein
b5e92653bf hw: adjust expected serial start-message in run
ref #953
2013-11-25 09:46:08 +01:00
Martin Stein
fde150b052 hw: rename delete_thread in kill_thread
ref #953
2013-11-25 09:45:31 +01:00
Martin Stein
f054b70e33 hw: spelling fix in kernel/thread.cc
ref #953
2013-11-25 09:45:31 +01:00
Martin Stein
84e05e0653 hw: don't provide thread base via platform thread
ref #953
2013-11-25 09:45:31 +01:00
Martin Stein
99c649c42f hw: simplify Kernel::new_thread
Don't set priority and label in platform thread and then communicate this
core object via Kernel::new_thread but communicate priority and label directly.
This way kernel doesn't need to know anymore what a platform thread is.

ref #953
2013-11-25 09:45:31 +01:00
Martin Stein
210216e5e1 hw: simplify Kernel::start_thread
Instead of writing initial thread context to the platform-thread members
and then communicating this core object to kernel, core calls
Kernel::access_thread_regs first to initialize thread context and then
Kernel::start_thread without a platform-thread pointer. This way
the frontend as well as the backend of Kernel::start_thread loose
complexity and it is a first step to remove platform thread from the
vocabulary of the kernel.

ref #953
2013-11-25 09:45:31 +01:00
Martin Stein
77f55232fd hw: remove Kernel::get_thread
ref #953
2013-11-25 09:45:31 +01:00
Martin Stein
3b2590b65a hw: identify core threads through stack pointer
ref #953
2013-11-25 09:45:30 +01:00
Martin Stein
87da21d967 hw: use platform-thread pointer as pager badge
ref #953
2013-11-25 09:45:30 +01:00
Martin Stein
e0419b2401 hw: clearer naming scheme in kernel API
Rename kernel syscall in kernel call and the kernel-API
files in kernel/interface* .

ref #953
2013-11-25 09:45:30 +01:00
Norman Feske
b3ccac63c3 launchpad: Support configuration of launch entries
This patch enables the recursive startup of launchpad instances, which
was not possible since the recent removal of launchpad's built-in
default configuration.
2013-11-25 09:45:30 +01:00
Norman Feske
2f483500b0 Add 'Xml_node::has_sub_node' accessor 2013-11-25 09:45:30 +01:00
Norman Feske
373c5bdbf7 nitlog: Fixed adaptation to changed nitpicker API
Fixes #955
2013-11-25 09:45:30 +01:00
Alexander Boettcher
0d8abab3ee nova: remove cap_sel - use cap_map
Fixes #905
2013-11-18 11:01:46 +01:00
Alexander Boettcher
c139253439 nova: use cap_map for IPC
Issue #905
2013-11-18 11:01:46 +01:00
Alexander Boettcher
75ecdab9e8 nova: add inc/dec to native_types.h
Issue #905
2013-11-18 11:01:45 +01:00
Alexander Boettcher
63d902543b nova: initialize cap_map
Issue #905
2013-11-18 11:01:45 +01:00
Alexander Boettcher
f330b55227 nova: introduce cap_map
to be used for ref counting of Native_capabilities

* similar as used for base-foc
* will replace nova specific cap_sel_allocator interface

Issue #905
2013-11-18 11:01:45 +01:00
Alexander Boettcher
1dd2a199a5 nova: support cap receive window of various sizes
Open a capability receive window according to the number of the capabilities
expected as out parameter per RPC function.

Typically the number of capabilities expected during the reply of a RPC/IPC
call is 0 to 1. Before this patch ever a capability receive window of 4 has
been opened.

On Nova the capability selectors of receive windows must be naturally aligned
to the size/order of the expected capabilities. This leads until now to the
issue that the left over 3 capabilities couldn't be reused for new IPCs since
they are not naturally aligned to 4.

Issue #905
2013-11-18 11:01:45 +01:00
Alexander Boettcher
a6af6c80ab base: count caps replied by a rpc function
Issue #905
2013-11-18 11:01:45 +01:00
Alexander Boettcher
772616bf38 base: call deconstructor of context area
Issue #905
2013-11-18 11:01:45 +01:00
Alexander Boettcher
ff02dc8f10 x86emu: avoid compiler warning 2013-11-18 11:01:45 +01:00
Martin Stein
e450602196 hw: missing initialization in signal handler
fix #951
2013-11-18 11:01:45 +01:00
Martin Stein
653e14b74f hw: adjust SIGNAL SLAB sizes to new conditions
fix #950
2013-11-18 11:01:45 +01:00
Christian Helmuth
347ff635b3 fiasco: fix SYSTEM_TARGET prefix in l4env config
The config file is interpreted in a bash script. So, SYSTEM_TARGET is a
bash variable, i.e., ${SYSTEM_TARGET}.

Fixes #946. Related to #490.
2013-11-15 16:11:19 +01:00
Martin Stein
909ab8dcd0 hw: communicate page faults via signals
Enable routing of thread events to signal contexts via
Kernel::route_thread_event.

Replace Kernel::set_pager by Kernel::route_thread_event.

In base-hw a pager object is a signal context and a pager activation
is a signal receiver. If a thread wants to start communicating its page
faults via a pager object, the thread calls Kernel::route_thread_event with
its thread ID, event ID "FAULT", and the signal context ID of the pager object.
If a pager activation wants to start handling page faults of a pager object,
the pager activation assigns the corresponding signal context to its signal
receiver. If a pager activation wants to stop handling page faults of a pager
object, the pager activation dissolves the corresponding signal context from
its signal receiver. If a thread wants to start communicating its page faults
via a pager object, the thread calls Kernel::route_thread_event with its
thread ID, event ID "FAULT", and the invalid signal context ID.

Remove Kernel::resume_faulter.

Move all page fault related code from generic kernel sources to CPU
specific cpu_support.h and cpu_support.cc.

fix #935
2013-11-14 19:57:31 +01:00
Martin Stein
ba52529bd6 hw: beautify scheduling-priority code
ref #935
2013-11-14 19:57:31 +01:00
Martin Stein
da49f86f5b hw: provide placement via dedicated header
ref #935
2013-11-14 19:57:30 +01:00
Martin Stein
15a56bd682 hw: provide and use syscall access_thread_regs
ref #935
2013-11-14 19:57:30 +01:00
Martin Stein
1c6c90fed5 core: provide signals before other services
Provide core-local signal service before other services to enable the use
of signal connections while initialzing the other services. This has been
introduced due to the use of the signal framework by the pager lib in
base-hw (RM service).

ref #935
2013-11-14 19:57:30 +01:00
Martin Stein
20e91d0b60 base: individual implementations of pager-object
ref #935
2013-11-14 19:57:30 +01:00
Martin Stein
d24ed9783b hw: get rid of kernel_support.cc
ref #935
2013-11-14 19:57:30 +01:00
Martin Stein
f4b46fe55c hw: move kernel.cc to core/kernel/
ref #935
2013-11-14 19:57:30 +01:00
Martin Stein
9c1ae1f149 hw: no overloading of Signal_context constructor
ref #935
2013-11-14 19:57:30 +01:00
Martin Stein
47744e0019 hw: handle interrupts via signals
fix #874
2013-11-14 19:57:30 +01:00
Martin Stein
b88d7e3370 vea9x4: centralize spec of interrupt names
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
7c70a9bf7d rpi: centralize spec of interrupt names
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
493ea55a72 omap4 & gpio_drv: add config lib
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
cc17d82d92 panda: centralize spec of interrupt names
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
7e294a39f4 imx53: remove unused IPU-interrupt specs
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
e849cce39e pbxa9: centralize spec of interrupt names
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
ba1a82b485 arndale: centralize spec of interrupt names
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
002a5b8978 hw: distinct pagefault and IPC message type
ref #874
2013-11-14 19:56:39 +01:00
Martin Stein
6f935af278 hw: communicate message type through UTCB
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
1e7eb4512e hw: manage UTCB through use-case specific structs
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
96bbca6191 hw: send reply size & receive request size by UTCB
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
45d37e275d hw: send request size through UTCB
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
6b9376bb01 hw: clean up interface of Kernel::Thread
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
ffb26eb501 hw: make syscall backend private to Kernel::Thread
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
5cd2f6ee0b hw: make Kernel::mtc() global
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
0bb6ffa98d hw: header and source file for Kernel::Vm
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
22d61c241e hw: remove useless function handle_invalid_excpt
ref #874
2013-11-14 19:56:38 +01:00
Martin Stein
059aba0916 hw: remove unused function handle_invalid_syscall
ref #874
2013-11-14 19:56:38 +01:00
Josef Söntgen
9bc42ecd87 ports: native version of DosBox
DosBox is DOS-Emulator which is mainly used for playing old
DOS games on POSIX systems and newer Windows versions.

This port of DosBox runs natively on Genode by using its
SDL backend. It is currently only works on x86_*.

Fixes #937.
2013-11-14 19:54:14 +01:00
Norman Feske
1ed4b9fef9 Use log_terminal in noux.run script
This patch changes the noux.run script to use the new log_terminal
component instead of an UART driver. Besides being a nice way to test
the log_terminal service, the new version is much simpler and it just
became compatible to Linux as it no longer relies on an UART driver.

Issue #947
2013-11-12 17:59:29 +01:00
Norman Feske
f51c4be5d2 Server for writing terminal output to LOG session
Fixes #947
2013-11-12 17:59:29 +01:00
Stefan Kalkowski
5a42f40f04 cpu_session: fix semantic of scale_priority
Remove "inverse" argument from function, because its documented behaviour
wasn't implemented correctly, nor was it used by any code.
2013-11-12 15:02:17 +01:00
Stefan Kalkowski
265ec48c20 hw: implement priority-based scheduling (fix #945) 2013-11-12 15:01:54 +01:00
Norman Feske
1953acae77 qt4: Workarounds for missing C++11 compatibility
Since we switched to using C++11 by default, the webkit-related
parts of qt4 failed to compile because of C++11 compatibility
issues. This patch disables the use of C++11 for the offenders.
2013-11-07 14:58:34 +01:00
Christian Helmuth
d65220bcf2 base-nova: Use CROSS_DEV_PREFIX in run environment
Related to #490.
2013-11-06 14:33:33 +01:00
Josef Söntgen
8b8e3ef7a5 noux: calculate inode value from path
There are programms that use struct stat's st_ino field to check certain
conditions. Since we are using multiple filesystems in a noux session we
cannot use the inode number which the actual filesystem provides.
Therefore we calculate a random inode number by hashing the stated path.

Fixes #299.
2013-11-05 12:54:04 +01:00
Alexander Boettcher
bde7e24820 nova: fix size of virtual address space for 64bit
Fixes #933
2013-11-05 12:18:51 +01:00
Josef Söntgen
7ac23a2419 libports: use Timer_session as SDL's timer backend
A timer session is now used instead of a jiffy counter. This way, libSDL
can use a time source that is not bound to the granularity our libc's
nanosleep implementation. Currently, the granularity of nanosleep is in
the order of 10 milliseconds, which is far to coarse for the use of
SDL-using applications such as DosBox.

Fixes #934.
2013-11-05 12:14:37 +01:00
Josef Söntgen
4efd664619 libports: use SDL's SDL_cdrom dummy implementation
Fixes #934.
2013-11-05 12:14:23 +01:00
Christian Prochaska
c029557c8b pthreads: return error numbers
pthread functions are supposed to return error values instead of setting
'errno' and returning -1.

Fixes #856.
2013-11-05 12:13:45 +01:00
Josef Söntgen
1306915879 libports: add SDL_net
Fixes #936.
2013-11-05 12:13:19 +01:00
Christian Prochaska
1a22664fee Call exit handlers before notfying the parent
Fixes #941.
2013-11-05 12:01:13 +01:00
Alexander Boettcher
59cb7d9263 nova: show error message for un-handled exception
Fixes #938
2013-11-05 12:00:18 +01:00
Norman Feske
ac05a5efdd Spelling fix 2013-10-30 12:27:44 +01:00
Norman Feske
f75243f5dd Change codezero download location to github
Because the l4dev.org server seems to be unreliable, we obtain the
source code from github.
2013-10-30 12:27:43 +01:00
Stefan Kalkowski
2c1b8f4807 l4lx: extend l4linux_dynamic run script
Add a graphical scenario to the cli_monitor setup, which includes
a more complex GDB debugging scenario.
2013-10-30 12:27:43 +01:00
Stefan Kalkowski
fde93c3284 init: don't call Rom_session::dataspace() twice
In general, requesting a dataspace from a server twice is no good
idea. The server might react in a unrecoverable fashion. E.g. the rom_fs
service always throws away the corresponding dataspace from the first call
of dataspace(), and constructs a new one.
2013-10-29 18:08:30 +01:00
Christian Prochaska
a1458307da GDB monitor: test the 'set var' and 'call' commands
Fixes #930.
2013-10-29 18:08:29 +01:00
Christian Prochaska
27aeecf5d1 cli_monitor: add a 'gdb' command
This patch adds a 'gdb' command to 'cli_monitor', which makes it possible
to debug an application with GDB.

The command works similarly to the 'start' command, but instead of
starting the subsystem binary directly, an 'init' subsystem gets
started, which then starts 'terminal_crosslink', 'noux', GDB and
'gdb_monitor' (which starts the application binary as its target).

So, for the 'gdb' command to work, these additional components need to
be available, too. 'terminal_crosslink', 'noux', 'gdb_monitor' and the
file 'gdb_command_config' are expected to be ROM modules. The Noux GDB
client needs to get mounted at '/bin' in Noux and the target binaries need
to be available as ROM modules (loaded by 'gdb_monitor') and also mounted
at '/gdb' in Noux (loaded by the GDB client).
Additionally, the source code of the target application can be provided
at '/gdb/src/ in Noux. How the Noux mountings get established can
be configured in the 'gdb_command_config' file. The default configuration
in 'os/src/server/cli_monitor/gdb_command_config' mounts GDB from a tar
archive named 'gdb.tar', the GDB target binaries from a tar archive named
'gdb_target.tar' and the target source code from a tar archive named
'gdb_target-src.tar'.

The patch includes an 'expect' include file (ports/run/noux_gdb.inc)
which provides functions that help to create those tar files:

- 'create_gdb_tar' creates a tar archive for the 'gdb' client
- 'create_binary_tar' creates a tar archive for the target application
- 'create_source_tar' creates a tar archive for the source code of
  the target application
- 'create_binary_and_source_tars' is a convenience wrapper for the previous
  two functions

The patch also includes an example run script
(ports/run/noux_gdb_dynamic.run).

The 'gdb' command supports the following command line options:

- --ram: the initial RAM quota provided to the whole subsystem
         (including the GDB-related components)
- --ram-limit: limit for expanding RAM quota
- --gdb-ram-preserve: the RAM quota that 'gdb_monitor' ahould preserve
                      for itself

Fixes #928.
2013-10-29 18:08:29 +01:00
Christian Prochaska
cc04ffcf42 GDB monitor: find out page faulting thread
Fixes #898.
2013-10-25 23:49:00 +02:00
Sebastian Sumpf
5774a864b1 usb_drv: Fix PHY initialization for DWC3 XHCI
Make high speed (HS) and super speed (SS) hub use the same reference clock.
Also upgrade some quotas in USB run scripts.

Fixes #929.
2013-10-24 15:21:36 +02:00
Stefan Kalkowski
fc1005c7ee foc: re-dimension UTCB area in core (fixes #927)
Take the whole UTCB area out of core's region map to circumvent mapping errors.
With this fix, the HDMI quirks are getting unnecessary.
2013-10-22 08:00:17 +02:00
Stefan Kalkowski
2329184ddb cli_monitor: make preservation limit a hard limit
When a child requests more ram resources, it gets blocked immediately when
the preservation limit is reached. Otherwise, it might happen that the
cli_monitor runs out of memory.
2013-10-22 08:00:17 +02:00
Stefan Kalkowski
e0be6b9ed6 cli_monitor: ensure blocked children are waked up
When a command was executed, it is necessary to check not only whether the
preservation limit of the ram quota is reached, but also whether new ram quota
is available (e.g.: consequence of the kill command), and children are waiting
for additional resources.
2013-10-22 08:00:17 +02:00
Stefan Kalkowski
15741f73c0 cli_monitor: don't withdraw all ram quota from child
When a yield request is responded by a child, don't withdraw all ram
quota currently available from the child, but let it keep hold a bit to live.
2013-10-22 08:00:17 +02:00
Stefan Kalkowski
e559fb7df9 cli_monitor: limit request yields to children
Don't request resource yieldings from children that are in a resource request
themselfs to lower needless system load.
2013-10-22 08:00:17 +02:00
Stefan Kalkowski
d4922f9071 cli_monitor: consider instance count in quota check
In the start command when checking, whether the quota is enough to create
the new instance, consider the count of instances that should be started.
2013-10-22 08:00:17 +02:00
Stefan Kalkowski
59d6157441 l4lx: ballooning by using new parent interface
Implement a ballooning mechanism in L4Linux similar to solutions like XEN's
balloon driver. Therefore the new parent interface extensions for requesting
and yielding resources are used. L4Linux registers a yield signal context at
its parent. Whenever the parent triggers a yield, the balloon driver blows up,
which means it requests all pages available, and then frees the corresponding
backend memory.
2013-10-22 08:00:17 +02:00
Stefan Kalkowski
705c73d3f3 l4lx: allocate memory on demand 2013-10-22 08:00:16 +02:00
Christian Helmuth
78344dd672 libports: fix make clean for sdl port 2013-10-22 08:00:16 +02:00
Alexander Boettcher
69263f6593 seoul: increase memory for network with bridge
Fixes #918
2013-10-22 08:00:16 +02:00
Norman Feske
f82e1a7092 nitpicker: Late allocation of virtual framebuffer
This patch changes the interface of Nitpicker to support dynamically
dimensioned virtual frame buffers. This solves two problems:

First, it enables a client to create a connection to nitpicker without
donating much session quota in advance. The old interface required each
screen-size-dependent client to donate as much memory as needed to
allocate a screen-sized virtual framebuffer. For clients that are
interested int the screen size but cover just a small portion of the
screen (e.g., a banner, a menu, an applet that sits in the screen
corner), this overprovisioning is painful. The new interface allows such
clients to upgrade the session quota for an existing session as needed.

Second, because each nitpicker session used to have a virtual frame
buffer with a fixed size over the lifetime of the session, a client that
wanted to implement a variable-sized window had to either vastly
overprovide resources (by opening a session as large as the screen just
in order to be prepared for the worst case of a maximized window), or it
had to replace the session by a new one (thereby discarding the stacking
order of the old views) each time the window changes its dimensions. The
new interface accommodates such clients much better.
2013-10-22 08:00:16 +02:00
Norman Feske
2322ab202c Remove OKLinux
Fixes #29
Fixes #30
Fixes #889
2013-10-22 08:00:16 +02:00
Norman Feske
9f9e2daedf terminal_log.run: Add missing build of launchpad 2013-10-22 08:00:16 +02:00
Norman Feske
1c4e73d425 base: 'Allocator_guard::quota' accessor 2013-10-22 08:00:16 +02:00
Christian Prochaska
047d851fb6 Noux: add basic 'Ctrl-C' support
This patch implements the POSIX signal functionality needed to interrupt a
running Noux GDB by pressing 'Ctrl-C'.

It allows to register a signal handler for the 'SIGINT' signal, which
gets executed after 'Ctrl-C' is received from the terminal. With the
current state of the implementation, the signal handler only gets executed
when the Noux application calls a 'read()', 'write()', 'ftruncate()' or
'select()' syscall.

Fixes #923.
2013-10-22 08:00:16 +02:00
Christian Prochaska
cf040e2833 Ring_buffer: make synchronization optional
With this patch, the 'Ring_buffer' class can be made unsynchronized by
setting the 'Ring_buffer_unsynchronized' policy as third template
argument.

Fixes #922.
2013-10-22 08:00:16 +02:00
Christian Prochaska
dc8fc1a33c Ring_buffer: add 'avail_capacity()' function
The 'avail_capacity()' function returns how many more elements would
currently fit into the ring buffer.

Fixes #921.
2013-10-22 08:00:15 +02:00
Norman Feske
7296735816 cli_monitor: Init Ram::_resource_avail_sigh
Thanks to Stefan Kalkowski for the report.
2013-10-22 08:00:15 +02:00
Martin Stein
5fa98361c2 demo: support exynos5
fix #796
2013-10-22 08:00:15 +02:00
Martin Stein
4196b9bc5c fb & exynos5: avoid USB HID problems with FOC
USB HID gets stuck due to strange kernel error
as HDMI starts simulatnously. This workaround
delays HDMI init by a second (only in case we
build for Exynos5 & FOC with USB) to let
scenarious like demo get their USB HID started
without much CPU load.

ref #796
2013-10-22 08:00:15 +02:00
Martin Stein
1113f36e2f arndale: specs to enable demo scenario
ref #796
2013-10-22 08:00:15 +02:00
Martin Stein
abbb03555d fb test: view multiple pictures
ref #796
2013-10-22 08:00:15 +02:00
Martin Stein
7057a12304 fb test: support exynos5
ref #796
2013-10-22 08:00:15 +02:00
Martin Stein
515f4cff1e framebuffer: support HDMI@1920x1080p on exynos5
ref #796
2013-10-22 08:00:15 +02:00
Martin Stein
92b3171765 platform_drv & exynos5: provide HDMI switches
ref #796
2013-10-22 08:00:15 +02:00
Alexander Boettcher
f14213b5f4 base/os: catch Ipc_error messages in Service class
Fixes #910
2013-10-22 08:00:15 +02:00
Stefan Kalkowski
c95f11418a i.MX53: fit into u-boot's memory layout on tablet
Fixes #917
2013-10-22 08:00:14 +02:00
Stefan Kalkowski
3fc962b539 i.MX53: add config lib to GPIO driver (fix #915) 2013-10-22 08:00:14 +02:00
Stefan Kalkowski
81e69dc8da i.MX53 tablet: complete IOMUX routes for display
For the framebuffer driver of the i.MX53 platform to work even when u-boot
didn't prepared the display previously, there were some IOMUX routes missing.

Fixes #914
2013-10-22 08:00:14 +02:00
Stefan Kalkowski
ebbd721278 i.MX53 tablet: handle >1 button events concurrently
By now, only one button press/release event per IRQ was handled correctly.
Pressing and/or releasing several buttons concurrently could bring the input
driver into an inconsistent state.

Fixes #913
2013-10-22 08:00:14 +02:00
Stefan Kalkowski
4f541538bd noux: use lwip dhcp plugin, avoid code duplication
Ref #892
2013-10-22 08:00:14 +02:00
Stefan Kalkowski
8f0c789ed4 Make NIC RX/TX buffer sizes configureable in libc
* Remove far too low default values from Nic::Connection constructor
* Extend lwip initialization function with desired TX/RX buffer sizes
* Add configuration possibility to libc_lwip_dhcp plugin to define
  buffer sizes, like the following:

  '<libc tx_buf_size="1M" tx_buf_size="1M"/>'

Fixes #892
2013-10-22 08:00:14 +02:00
Martin Stein
c56927b76e hw: differ ID allocators even with same size
Previously, if two ID allocators for different kernel objects had the
same size, the kernel-object framework managed both objects types
through the same allocator instance. This is caused by the use of
unsynchronized singletons in the accessor functions and can be avoided
by creating new types through inheritance instead of using typedefs.
Anyways, this fix is a little bit ugly and should replaced by avoiding
the use of unsynchronized singletons in the future.

fix #906
2013-10-22 08:00:14 +02:00
Josef Söntgen
a9651d1728 gems: provide file to terminal service
Fixes #911.
2013-10-22 08:00:14 +02:00
Martin Stein
ee5d213c1f base: do not allow unnamed threads
fix #901
2013-10-22 08:00:07 +02:00
Josef Söntgen
afdabe9df8 hw: enable performance counter on ARMv6 and ARMv7
To actually enable the performance counter 'perf_counter' has to be
added to the SPECS make variable.

Fixes #893.
2013-10-17 11:05:53 +02:00
Josef Söntgen
341290a266 trace: implement timestamp also for ARMv6
Fixes #894.
2013-10-17 11:05:41 +02:00
Josef Söntgen
4d2b349380 os: don't close the Rm_connection in ldso
At this point we cannot close the connection anymore because all
mappings are gone and the needed stack is invalid. This is not a
problem since process will be discarded anyway.

Fixes #909.
2013-10-17 11:05:29 +02:00
Josef Söntgen
eab8217bdb base: call proper __cxa_finalize
Fixes #909.
2013-10-17 11:05:20 +02:00
Josef Söntgen
e1ed832ac1 USB-storage: free Packet_descriptor after ACK
Fixes #903.
2013-10-17 11:04:25 +02:00
Christian Prochaska
65f8f9c75a GDB monitor: add support for register writing
With this patch, register contents of a paused thread (which is not
currently executing a syscall) can get modified on Fiasco.OC by GDB.

Fixes #897.
2013-10-17 11:04:08 +02:00
Christian Prochaska
9090311a06 base-foc: enable CPU state modification
With this patch, the register contents of a paused thread (which is not
currently executing a syscall) can get modified by the
'Cpu_session::state()' function.

Fixes #896.
2013-10-17 11:03:40 +02:00
Stefan Kalkowski
f17727b70b multi_linux.run: fix initrd locations (fix #885) 2013-10-17 11:03:09 +02:00
Christian Prochaska
8a2e543b69 run: use 'wait_for_output' for Linux, too
With this patch, the Linux-specific 'run_genode_until' function uses
'wait_for_output' as it gets already used for other run targets.

Fixes #863.
2013-10-17 11:02:23 +02:00
Josef Söntgen
da2c6b62f2 core: fix iterating over trace policies
Fixes #920.
2013-10-17 11:00:23 +02:00
Martin Stein
618b83499c base: bug in copy constructor of Signal
The copy constructor of Signal did not copy the Signal::Data contents of
the copy source. This bug could survive undetected because the compiler
can optimize code in a way, that copy constructor and destructor are not
necessary when returning by value from simple functions. I assume that
it creates the object in CPU registers instead of RAM and reuses it
instead of copying it to save time. This way the bug triggered first
after wait_for_signal was changed in a way that avoided optimization.

ref #912
2013-10-16 09:26:11 +02:00
Christian Helmuth
f845be8c23 base-linux: support hybrid mode in lx_rmap test
In hybrid mode, all programs are dynamic executables and ld.lib.so is
not supported. Therefore, only the "static" variant of the test can be
build and executed.
2013-10-16 09:26:11 +02:00
Christian Helmuth
74425bd918 doc: clarify to edit build.conf after create_build_dir 2013-10-16 09:26:11 +02:00
Martin Stein
c117516296 hw: relax signal limits for resource_request test
ref #912
2013-10-16 09:26:11 +02:00
Martin Stein
f88fd35f22 hw: avoid upgrade need of 8192 in signal session
ref #912
2013-10-16 09:26:11 +02:00
Martin Stein
b5c6f2c260 hw: avoid generic exceptions in signal framework
ref #912
2013-10-16 09:26:11 +02:00
Martin Stein
bb9fa16a5e hw: throw expressive exceptions in signal session
ref #912
2013-10-16 09:26:11 +02:00
Norman Feske
04cbee4c76 terminal_mux.run: Let CLI monitor preserve RAM
This change allows for the testing of cli_monitor's automatic resource
balancing by executing the following command:

  start ram_eater --ram-limit 1G --count 5

The command starts 5 instances of a RAM-eating process, which is,
however, able to yield resources when instructed. The RAM quota for the
processes gets automatically extended because of the overly large limit
of 1 GiB, which is far more than CLI monitor's RAM resources (100 MiB).
When the RAM usage hits the preservation limit, CLI monitor broadcasts
yield requests to each ram_eater instance, which allow the scenario to
remain alive.
2013-10-16 09:26:11 +02:00
Norman Feske
11e628714d Build trace policies with -std=gnu++11 enabled 2013-10-16 09:26:11 +02:00
Martin Stein
563760eb08 base: fix bug in Object_pool::first_locked
fix #899
2013-10-16 09:26:11 +02:00
Martin Stein
0ad655f4be hw: return error code on IPC replies
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
ae76e441b1 hw: fix bug in Kernel::Thread::resume
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
b85126a638 hw: enable verbose thread starts
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
d961b9ae1e hw: enable multiple compilation units in kernel
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
0771a8e9cf launchpad: remove '\n' from PERR message
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
d6d4938916 hw: fix bug in Kernel::yield_thread
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
6912e638fb hw: kill signal receivers
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
26db598fc0 hw: cancel waiting for IPC requests
ref #899
2013-10-16 09:26:10 +02:00
Martin Stein
039bae9710 base: make FIFO elements zero-pointer save
fix #904
2013-10-16 09:26:10 +02:00
Alexander Boettcher
d1c0258301 usb: fix storage with IOMMU enabled
Fixes #747
2013-10-16 09:26:09 +02:00
Alexander Boettcher
73cff5c996 nova: don't wait for workers in cpu_session::pause
If a local thread is attempted to be 'pause'd via cpu_session, don't wait
until it gets into the recalled state. If the caller is lucky it is, if not
return only the stack pointer.

Avoids deadlocking of the gdb when attached to a process running a server.

Issue #478
2013-10-16 09:26:09 +02:00
Alexander Boettcher
d8cf17687e run: use gdb_monitor by autopilot
Issue #478
2013-10-16 09:26:09 +02:00
Alexander Boettcher
fe19103546 nova: create sm for signalling via pager
The 'pause' call on base-nova assumes that a thread can solely block in its
associated semaphore. Main reason is that so core can unblock a thread in order
that the recall exception gets delivered and the register state can be
obtained.

Unfortunately the signal session implementation creates a semaphore, which is
unknown by the pager code. Instead create the semaphore via the pager of the
thread, so that the pager can unblock the signal thread when a pause is issued.

Issue #478
2013-10-16 09:26:09 +02:00
Alexander Boettcher
816b4e0479 nova: fix thread in page fault and getting paused
If a thread caused a page fault and later on get be paused, then it left
the recall handler immediately due to the pause call instead of staying
in this handler.

Add some (complicated) state machine to detect and handle the case. Still not
waterproof, especially server threads may never get recalled if they never get
a IPC from the outside.

Fixes #478
2013-10-16 09:26:09 +02:00
Alexander Boettcher
2c983f3c89 nova: remove native_cap method from cpu_session
Remove native_cap method which caused the cpu_session implementation of the
gdb server to fail.

Issue #478
2013-10-16 09:26:09 +02:00
Alexander Boettcher
dd2e006309 nova: request native ec cap via pager
Prerequisite to get rid of the base-nova special native_cap method in
cpu_session.

Vancouver/Seoul bootstrap code gets also much simpler.

Issue #478
2013-10-16 09:26:09 +02:00
Alexander Boettcher
d3bcafc4c6 nova: support requesting multiple event portals
Enables us to request the exception handler portals at once instead each
separately.

Issue #478
2013-10-16 09:26:09 +02:00
Alexander Boettcher
c426bac8bb nova: create sm of each thread in pager
Mainly simplification of the code and getting rid of reserved (Genode) special
cap selectors in the syscall-generic.h file.

Issue #478
2013-10-16 09:26:09 +02:00
Norman Feske
a903049a1a cli_monitor: Resource-balancing support
This patch introduces new commands for dynamically balancing RAM between
subsystems. The 'status' command prints a table with the RAM status of
each subsystem. The 'ram' command changes the quota or a quota limit of
a given subsystem. The quota limit can be defined to allow the on-demand
expansion of the quota. Finally, the 'yield' command can be used to
instruct a subsystem to yield a specified amount of resources.

For trying out the new commands, a so-called 'ram_eater' example has
been added to the 'terminal_mux.run' scenario. This program simulates a
subsystem with a growing demand for resources, yet with the capability
to yield resources when instructed by the parent (i.e., cli_monitor).

Besides implementing the new features, the patch splits the
implementation of 'cli_monitor' into multiple files.
2013-10-16 09:26:09 +02:00
Norman Feske
cbdad73dd7 terminal_mux.run: LOG output of terminal_log
This patch tweaks the route of 'terminal_log' such that a LOG session
request of this program is directed to the parent rather to itself.
2013-10-16 09:26:08 +02:00
Norman Feske
baf6eab2dc terminal_mux: Add 'j' and 'k' keybindings 2013-10-16 09:26:08 +02:00
Norman Feske
d78ba43f64 Test for yielding resources 2013-10-16 09:26:08 +02:00
Norman Feske
9cf677cb0a os: Add resource balancing-support to 'Slave'
In order to be able to dynamically balance resources of slaves, we need
to provide an accessor to the slave's RAM session and a way to issue
yield requests.
2013-10-15 16:13:45 +02:00
Norman Feske
f80c0500af Test for 'Parent::resource_request' interface 2013-10-15 16:13:45 +02:00
Norman Feske
094c5211fd core: Fix off-by-one in quota check
The check was one byte too rigid. ;-)
2013-10-14 09:45:14 +02:00
Norman Feske
90aa4ef6b5 core: Don't account RAM metadata to RAM quota
The meta data for allocations should be accounted to the session quota
instead of the RAM accont managed by the session.
2013-10-14 09:45:14 +02:00
Norman Feske
61b94296b2 base: Use distinct error for ref_account mismatch 2013-10-14 09:45:14 +02:00
Norman Feske
5caed68fe4 init: Transfer slack memory to children on demand 2013-10-14 09:45:14 +02:00
Norman Feske
65c4246f95 base/env: Implementation of 'Expanding_parent' 2013-10-14 09:45:14 +02:00
Norman Feske
ae40cb545c base: Unify 'Platform_env' across platforms 2013-10-05 12:44:36 +02:00
Norman Feske
93bd4d55f8 Implement resource-balancing in parent interface 2013-10-05 12:44:35 +02:00
Norman Feske
f65606f179 Add resource-balancing support to parent interface
This is just the interface. The implementation is still missing.

Issue #887
2013-10-05 12:44:35 +02:00
Norman Feske
5befab7f3d Add 'String<SIZE>' buffer type to 'util/string.h'
The new 'String' buffer type is meant to replace the manually created
character buffers that are scattered throughout Genode. It plainly holds
a null-terminated string to be stored as a member variable (e.g., a
session label) or passed as RPC argument. It is not intended to become a
string API.
2013-10-05 12:44:35 +02:00
Stefan Kalkowski
339193a887 Linux: compile lx_hybrid_ctors test for correct ARCH
Fixes #900
2013-10-04 10:13:07 +02:00
Norman Feske
91de81a10a hello_tutorial: add missing <config> snippets
Thanks to Rudolf Weber for reporting.
2013-09-29 12:23:22 +02:00
Stefan Kalkowski
24007564bf l4lx: check for "bc" tool on prepare 2013-09-27 10:53:59 +02:00
Martin Stein
327cdfdf36 hw: always remove RM client on thread destruction
ref #589
2013-09-26 16:09:56 +02:00
Martin Stein
36111587be hw: don't use assertions in Kernel::get_thread
ref #589
2013-09-26 16:09:56 +02:00
Martin Stein
e5ea660e2e hw: enable to destruct thread after its RM client
ref #589
2013-09-26 16:09:55 +02:00
Martin Stein
d86bf3db64 hw: destruct protection domains
ref #589
2013-09-26 16:09:55 +02:00
Martin Stein
a4f52bec19 hw: enable direct unmap
ref #589
2013-09-26 16:09:55 +02:00
Martin Stein
4f4738427d hw: release pagers from faulting threads
ref #589
2013-09-26 16:09:55 +02:00
Martin Stein
c3be0b417a hw: fix bug in Kernel::Thread::crash
ref #589
2013-09-26 16:09:55 +02:00
Martin Stein
00f16be122 base: fix bug in Allocator_guard::free
ref #589
2013-09-26 15:58:05 +02:00
Martin Stein
a596fa56a6 hw: destruct scheduling contexts
ref #589
2013-09-26 15:58:05 +02:00
Martin Stein
52ec56c060 hw: destruct abstract interfaces of signal backend
ref #589
2013-09-26 15:58:05 +02:00
Martin Stein
611cd95eb3 hw: destruct IPC end-nodes
ref #589
2013-09-26 15:58:05 +02:00
Martin Stein
de87fa1b5c hw: avoid address overflow in Tlb::remove_region()
ref #589
2013-09-26 15:58:05 +02:00
Martin Stein
909c2dbc95 hw: remove note feature from IPC framework
ref #589
2013-09-26 15:58:04 +02:00
Martin Stein
349262a655 hw: handle pagefaults via IPC request/reply
ref #589
2013-09-26 15:58:04 +02:00
Martin Stein
6d03292a1e hw: destruct signal sessions
ref #589
2013-09-26 15:58:04 +02:00
Martin Stein
1571e09823 base: implement Object_pool::first_locked()
ref #589
2013-09-26 15:58:04 +02:00
Martin Stein
84c31a7ea1 hw: destruct signal receivers
ref #589
2013-09-26 15:58:04 +02:00
Martin Stein
e07781dc1c base: destruct signal receiver platform specific
This is made for future signal framework in base-hw
wich needs a platform specific hook in the signal-
receiver destruction.

ref #589
2013-09-26 15:58:04 +02:00
Martin Stein
e33ea2a8b7 hw: completely release signal-context resources
ref #589
2013-09-26 15:58:04 +02:00
Martin Stein
2223e72c7f hw: no assert checks by default, enable opt-in
fix #528
2013-09-26 15:58:04 +02:00
Martin Stein
3070af9194 hw: thread in extra header with asserts reviewed
ref #528
2013-09-26 15:58:04 +02:00
Martin Stein
1843f10c62 hw: PD in extra header with asserts reviewed
ref #528
2013-09-26 15:58:04 +02:00
Martin Stein
5f64411ad7 hw: add missing include in singleton header
ref #528
2013-09-26 15:58:04 +02:00
Martin Stein
48f831af3c hw: signal receiver in extra header without assert
ref #528
2013-09-26 15:58:04 +02:00
Martin Stein
bf37159eb9 base: provide class Genode::Fifo_element
ref #528
2013-09-26 15:58:04 +02:00
Martin Stein
9826294e6c hw: IPC node in extra header
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
01e8ee2752 hw: IRQ receiver in extra header & reviewed
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
2c357a4f04 hw: scheduler in extra header & asserts reviewed
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
4a1c218fd0 hw: object in extra header & asserts reviewed
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
e67016ca08 hw: kernel configuration in dedicated header
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
a4ab2a4f30 hw: avoid syscall fptr. array + threads can crash
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
f7fd7b0b11 hw: no assertions in pagers
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
2afa25be1d hw: no asserts in platform PD
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
36c453aa17 hw: no mandatory asserts in platform thread
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
e27c43acc0 hw: no implicit uint-to-int cast in signal submit
ref #528
2013-09-26 15:58:03 +02:00
Martin Stein
545a397fa6 hw: avoid mandatory function calls in assertions
ref #528
2013-09-26 15:58:03 +02:00
Christian Helmuth
385b7cdd31 base-linux: revised region management
Revised region management detects region conflicts by using _soft_
mappings per default. Overmapping is activated for population of managed
dataspaces only. For more information see header documentation of
base-linux/src/base/env/rm_session_mmap.cc.

Fixes #883.
2013-09-26 15:07:08 +02:00
Christian Helmuth
f763e5ec2a Move main bootstrap to platform-specific object
To prevent multiple execution of main-bootstrap, I moved the code to a
statically initialized object. The reason for this change is that
_main() is exeuted twice when starting dynamic binaries. Now, the object
is part of the base-common library which is linked with ld.lib.so.
2013-09-26 15:00:16 +02:00
Christian Helmuth
4556a9e353 Preserve thread-context area as early as possible 2013-09-26 14:42:52 +02:00
Christian Helmuth
b0559dabfc base-fiasco: check byacc installation on prepare 2013-09-26 14:28:46 +02:00
Christian Helmuth
ba8e01fda4 base-codezero: check scons and python2.6 on prepare 2013-09-26 14:28:46 +02:00
Norman Feske
b459f4384d demo.run: Don't delete 'launchpad.config'
Deleting the generated 'launchpad.config' file is a bad idea because in
contrast to most base platforms, on Linux, we merely create symlinks
from the 'var/run/demo/' directory to the 'bin/' directory instead of
copying the files.
2013-09-26 14:28:25 +02:00
Christian Helmuth
db125bad51 Increase quota of lwip_lx.run
See 33909779 for documentation.
2013-09-26 14:28:25 +02:00
Christian Helmuth
a7c5417369 base-linux: ld.lib.so loads dynamic binaries
For ARM support on N900, commit 4a9b1c6 changed the process library to
start dynamic binaries directly depending on the Linux kernel to comply
to the interp section info ("ld.lib.so"). This seems not required on
more recent platforms or kernel versions and also introduced challenging
corner cases in region handling on Linux. Therefore, this commit
restores the original behavior.
2013-09-24 09:44:32 +02:00
Norman Feske
45d0157d87 thread_join.run: Put success message on new line
This patch makes sure that a line break is printed before the test
finishes. This way, the "Test succeeded" message is printed on a new
line, which was not always the case (i.e., on Pistachio) otherwise.
2013-09-23 15:50:47 +02:00
Norman Feske
ad210e3981 Blacklist qt5_script library for now
Issue #890
2013-09-23 14:26:02 +02:00
Christian Helmuth
3620d889ac nic bridge: Increase entry-point stack size
4K stack on 32 bit does not suffice for G++ exception handling.
2013-09-23 14:26:02 +02:00
Norman Feske
c45cd8ad6e base-fiasco: Fix bug revealed by C++11 in contrib sources
The macro 'enter_kdebug' appended the 'text' argument immediately after
the '"' literal. Apparently, the old C++ standard accepted this code but
the new standard is more strict.
2013-09-23 14:26:02 +02:00
Norman Feske
9a7ed1de21 Remove Fiasco-UX input driver
The switch to C++11 breaks it. Because the driver remains unused for
years, it is not worth fixing it.
2013-09-23 14:26:02 +02:00
Norman Feske
fe0d9c0775 stdcxx: Add 'initializer_list' header of supc++
This header is needed to build icu when C++11 is enabled.
2013-09-23 14:26:02 +02:00
Christian Helmuth
5299dc4ab8 ldso: fix compiler errors with C++11
The warning

  error: expected unqualified-id before ‘STRING_USERDEF’ token

was caused by a missing whitespace in 'extern "C"int'.
2013-09-23 14:26:02 +02:00
Christian Helmuth
0d5d74fec6 netperf: enable netperf_bridge test on linux
Statically configured NIC bridge clients must be configured via
<policy...> nodes in the config. Otherwise, the bridge can't answer ARP
requests or route traffic.
2013-09-23 14:26:01 +02:00
Christian Helmuth
3056c718c8 nic bridge: connect to backend NIC on startup
After announcing the NIC service, the bridge connects to the driver to
ensure to see any incoming traffic in case the client itself only reacts
on connects from LAN (e.g., the netperf server).

Also, some styling issues were fixed.
2013-09-23 14:26:01 +02:00
Norman Feske
f1dcaa746d Enable C++11 by default 2013-09-23 14:26:01 +02:00
Alexander Boettcher
ff29f85cc9 nova: speed up cap selector allocation
Issue #485
2013-09-23 14:26:01 +02:00
Norman Feske
fb2998e534 Move generic platform_session parts to os/include
Both 'platform_session/capability.h' and 'platform_session/connection.h'
do not contain platform-specific information. By moving them from
'include/platform/imx53/platform_session/' to 'include/platform_session/',
this patch enables other platforms to reuse them.
2013-09-23 14:26:01 +02:00
Norman Feske
7f86eb3805 dde_linux: Fix MAC validity check 2013-09-23 14:26:01 +02:00
Norman Feske
c9194a2af4 attached_mmio: Support sub-page MMIO resources 2013-09-23 14:26:01 +02:00
Josef Söntgen
35118f0a32 trace: use new trace frontend in test-trace 2013-09-23 14:26:01 +02:00
Josef Söntgen
8b69d91c05 trace: method for getting buffer-wrap count 2013-09-23 14:26:01 +02:00
Norman Feske
20883c52b5 trace: Frontend for reading trace-buffer entries 2013-09-23 14:26:00 +02:00
Norman Feske
31d2730c9a dde_kit: Allow re-scheduling from timer handler
Prior this change, the attempt to re-schedule a timer from its timer
handler resulted in a clear '_pending' flag. This caused the timer event
to disappear from the scheduling queue without the handler being called
ever again. By resetting the '_pending' value before calling the hander,
we prevent a re-scheduled '_pending' flag to be cleared immediately
after calling the handler.
2013-09-23 14:26:00 +02:00
Norman Feske
0f663991c1 base-hw: Pic::mask for rpi 2013-09-23 14:26:00 +02:00
Norman Feske
33305dd08d Fix usb_storage.run for non-PC platforms
On non-PC platforms, the variable 'build' remains undefined, which lets
the 'build $build' step fail. Use the traditional 'build_components'
variable instead. As a further plus, this avoids multiple passes of the
build system.
2013-09-23 14:26:00 +02:00
Christian Helmuth
9f3c4c227e Put entry point at start of text segment / binary
Fixes #881.
2013-09-23 14:26:00 +02:00
Ivan Loskutov
0553490c9c libport: Fix download location of Mesa
Fixes #839
2013-09-23 14:26:00 +02:00
Christian Prochaska
eeacc5a297 Noux: register inherited file descriptors
With this patch, a Noux process registers all inherited open file
descriptors in its local libc file descriptor registry at program start.

Fixes #882.
2013-09-23 14:26:00 +02:00
Christian Prochaska
9370ba160b Noux: increase entrypoint stack size
Needed to run Noux built with -O0

Fixes #880.
2013-09-23 14:26:00 +02:00
Christian Prochaska
b0bfe6bfa7 base-linux: fix ELF dataspace execution
With this patch, if an ELF dataspace to be executed does not have a path
in the host file system, the dataspace content gets copied into a
temporary file whose path can be given to 'execve()'.

Fixes #879.
2013-09-23 14:26:00 +02:00
Norman Feske
29eeedf064 launchpad: Update config syntax, remove defaults
This patch updates the launchpad config to use XML attributes and
removes the built-in default configuration (which is only meaningful
for demo.run anyway).
2013-09-23 14:25:59 +02:00
Norman Feske
6cd5407ed9 nitpicker: Dynamic config of session policies 2013-09-23 14:25:59 +02:00
Norman Feske
6575856624 os: Split Session_label from Session_policy
By splitting Session_policy into two classes, we make it more flexible.
Originally, the constructor accepted solely an args string, which made it
unusable for situations where we already have extracted the session
label (e.g., stored in the session meta data of a server). Now, the
extraction of the label from the args string is performed by the new
Session_label class instead, which, in turn, can be passed to the
constructor of Session_policy.

This change causes a minor API change. The following code

  Session_policy policy(session_args);

Must be turned into

  Session_label  label(session_args);
  Session_policy policy(label);
2013-09-23 14:25:59 +02:00
Norman Feske
f371aef346 nitpicker: Use server skeleton library 2013-09-23 14:25:59 +02:00
Norman Feske
518a71ccf5 nitpicker: Simplify internal file structure 2013-09-23 14:25:59 +02:00
Norman Feske
602e36394d nitpicker: New signal handling, bg color config
This patch overhauls the signal handling of nitpicker to clear the way
towards dynamic reconfiguration. Furthermore, it moves the
implementation of the global-keys handling and input utilities to
separate files.
2013-09-23 14:25:59 +02:00
Norman Feske
430582c060 nitpicker: Remove local list.h 2013-09-23 14:25:59 +02:00
Norman Feske
74242c0906 nitpicker: Remove local string.h 2013-09-23 14:25:59 +02:00
Norman Feske
a6c019e0c6 nitpicker: Remove unmaintained TODO file 2013-09-23 14:25:59 +02:00
Norman Feske
ab3bc1bb58 nitpicker: Use signals for main loop 2013-09-23 14:25:58 +02:00
Norman Feske
fa34b79b2c nitpicker: Add const qualifiers 2013-09-23 14:25:58 +02:00
Norman Feske
7e35388336 os: Skeleton for server implementations 2013-09-23 14:25:58 +02:00
Norman Feske
94bcd3f1bf os: New Signal_rpc_dispatcher utility
The so-called Signal_rpc_dispatcher delegates the handling of signals to
the context of an RPC entrypoint.
2013-09-23 14:25:58 +02:00
Norman Feske
8243329ad4 os: Move Genode::Config into 'config' library
Originally, the convenience utility for accessing a process
configuration came in the form of a header file. But this causes
aliasing problems if multiple compilation units access the config while
the configuration gets dynamically updated. Moving the implementation of
the accessor to the singleton object into a library solves those
problems.
2013-09-23 14:25:58 +02:00
Norman Feske
a1effc5ad8 make Attached_ram_dataspace::local_addr const 2013-09-18 14:58:55 +02:00
Norman Feske
4b4ba30498 base: Make Signal_receiver noncopyable
This change prevents accidental copying of signal receivers via a
compile error.
2013-09-18 14:58:55 +02:00
Norman Feske
21462cdbd2 base: Add const qualifiers to 'util/list.h'
This patch adds support for iterating through a const list. This allows
users of lists to be more rigid with regard to constness. Furthermore,
the patch adds the function 'List::insert_at' for inserting an element
at a specified position. By adding this function, we can remove code
duplication in nitpicker.
2013-09-18 14:58:55 +02:00
Norman Feske
664aff2a56 os: Add const qualifiers to blit library 2013-09-18 14:58:55 +02:00
Norman Feske
690fc51fad Minor comment fix 2013-09-18 14:58:54 +02:00
Norman Feske
20daeb6d16 nitpicker: Support for global keys 2013-09-18 14:58:54 +02:00
Norman Feske
afbd7ea50e Reflection support for input/keycodes.h
To enable the specification of key names in configuration files parsed
at runtime, we need the association between key-code values and their
respective names.
2013-09-18 14:58:54 +02:00
Alexander Boettcher
380aa387d4 Adjust tcp_terminal quota
Nic_bridge requires more memory.
2013-09-18 14:58:54 +02:00
Alexander Boettcher
8ca068be43 noux: implement some libc dummy function
and quieten some noisy messages in non-verbose mode

Issue #485
2013-09-18 14:58:54 +02:00
Alexander Boettcher
94bce1425e noux: avoid 'no attachment at 0' messages
binary_ds cap is attempted to free up twice by
_root_dir->release(_name, _binary_ds) in ~Child de-constructor and by
Static_dataspace_info _binary_ds_info de-constructor.

This commit keeps all binary related information inside a struct which gets
freed up after all noux session book keep cleaning is done.

Issue #485
2013-09-18 14:58:54 +02:00
Alexander Boettcher
73bfdb8bb8 noux: fix deadlock during destruction
Issue #485
2013-09-18 14:58:54 +02:00
Alexander Boettcher
71aacd7ed8 noux: first remove from list, then dissolve
Avoids deadlock - which is out of the list can't be found twice to be deleted.

Issue #485
2013-09-18 14:58:54 +02:00
Alexander Boettcher
7c591a8151 noux: lock region list
Issue #485
2013-09-18 14:58:54 +02:00
Alexander Boettcher
bbb9c6daec noux: avoid dangling pointer
Issue #485
2013-09-18 14:58:54 +02:00
Norman Feske
78c8145d9b base-hw: Define CACHE_LINE_SIZE_LOG2 for rpi 2013-09-18 14:58:54 +02:00
Christian Helmuth
46ee8241b4 thread: convenience trace methods
Implementation of declared trace methods for (null-temrinated) C string
and character buffer with given length.
2013-09-06 16:24:48 +02:00
Christian Helmuth
4febaff66e netperf: netperf w/ static ip address on linux
The netperf test configures the target Genode system for with
10.0.2.55/24. Also, nic_drv on base-linux uses the virtual ethernet
device 'tap0', which must be configured for the test user and network
address 10.0.2.1/24 on the test host like follows.

  tunctl -t tap0 -u <user running test>
  ip address add 10.0.2.1/24 dev tap
  ip link set tap0 up
2013-09-06 15:05:38 +02:00
Norman Feske
d4c8b41bcc File permissions for os/run/framebuffer.run 2013-09-06 12:16:38 +02:00
Christian Prochaska
82111227d6 libc: set 'errno' for invalid file descriptors
Fixes #877.
2013-09-06 11:28:11 +02:00
Norman Feske
3d5f77599f Adjust nic_bridge quota for netperf tests 2013-09-06 11:24:38 +02:00
Norman Feske
7cbec0e915 Adjust nic_bridge quota in noux_net_netcat.run 2013-09-06 11:23:07 +02:00
Norman Feske
7b3dd51771 Blacklist noux_tool_chain run scripts on Linux 2013-09-06 11:13:19 +02:00
Norman Feske
47bb7da22f seoul: Improve boot-module error messages 2013-09-05 12:28:54 +02:00
Norman Feske
24e2310c36 seoul: Adjust nic_bridge quota 2013-09-05 12:28:48 +02:00
Christian Prochaska
33e176312e run: make 'is_qemu_available' return false for Linux
Fixes #862.
2013-09-04 22:44:37 +02:00
Christian Prochaska
5b8965cde9 GDB monitor: move GDB commands into separate file
This patch moves the GDB commands to set a breakpoint in the 'main()'
function into a separate file that can be included from other run scripts.

Fixes #876.
2013-09-04 22:43:47 +02:00
Christian Prochaska
3ca14f53fe Noux GDB: resolve '..' in run script
If the path of a Genode source file (as extracted from the binary test
application) contains a part like '/a/b/../' where '/a' exists, but '/a/b'
does not exist anymore, 'tar' complains. With this patch, the run script
normalizes the path before calling 'tar'.

Fixes #875.
2013-09-04 22:43:29 +02:00
Norman Feske
58b8e766d1 tool/run: Whitespace 2013-09-04 22:37:06 +02:00
Norman Feske
511a655efb init: Do not abort on invalid (re-)configurations 2013-09-04 22:37:06 +02:00
Norman Feske
cc975f26c4 ldso.run: Do not match escape sequences
Color escape sequences do not need to be considered when using
grep_output in run scripts.
2013-09-04 22:37:06 +02:00
Norman Feske
339097792c lwip.run: Increase quote of test-lwip_httpsrv
Adaptation to the recent increase of the NIC session quota.
2013-09-04 22:37:06 +02:00
Christian Helmuth
8707771d35 pingpong: fix compiler warnings 2013-09-04 12:14:22 +02:00
Christian Helmuth
989e880c69 lwip: remove redundant function declaration 2013-09-04 12:14:22 +02:00
Norman Feske
01c5226ef1 tool/run: Let grep_output strip colors from output 2013-09-04 12:06:35 +02:00
Christian Prochaska
5059f2e0b6 usb_drv: initialize '_tx_alloc' variable
Fixes #867.
2013-09-02 19:44:19 +02:00
Christian Prochaska
3cb6dba572 lwip: fix thread reset value in 'sys_arch_unprotect()'
Fixes #866.
2013-09-02 19:44:03 +02:00
Christian Prochaska
3e8e55ec16 CPU affinity configuration fixes
- if no affinity was set for a new thread before calling
  Cpu_session::start(), the CPU session's affinity gets set for this
  thread
- documentation fix: <affinity_space> -> <affinity-space>

Fixes #873.
2013-09-02 19:43:36 +02:00
Josef Söntgen
2501cb189e core: explicitly throw Out_of_metadata
In case there is not enough quota left to create the trace buffer
or trace policy dataspace throw Out_of_metadata explicitly instead
of rethrowing the Ram_session::Quota_exceeded exception. Now one
can catch Trace::Out_of_metadata exception in a client application.

In addition fix Allocator_guard::withdraw() checks because this
method does not throw any exceptions and a failed withdrawal goes
unoticed.

Fixes #871.
2013-09-02 19:43:00 +02:00
Stefan Kalkowski
ca0f677da9 Increase default NIC session's queue size (fix #870) 2013-09-02 19:42:26 +02:00
Stefan Kalkowski
6484edb657 nic_bridge: cache card's MAC address (Fixes #869) 2013-09-02 19:42:06 +02:00
Christian Prochaska
26ba81175b lwip: add checksum options to 'lwipopts.h'
This patch adds some of lwip's checksum calculation options to the
Genode-specific 'lwiptops.h' configuration file. The checksum calculations
are enabled by default.

Fixes #868.
2013-09-02 19:41:48 +02:00
Martin Stein
2e087bf4a9 tool/run: cancel 'run_genode_until forever'
Enables the user to cancel run scripts in
'run_genode_until forever' via 'ctrl+c'.

fix #826
2013-08-30 13:38:49 +02:00
Stefan Kalkowski
4254cb04e1 Reduce IPC with timer service in timed semaphore
Instead of using msleep to sleep periodically, and then increase jiffies
counter in the alarm scheduler implementation of the timed semaphore
use the 'trigger_periodic' call introduced by the change of the timer session
interface into an asynchronous one. Thereby, we can reduce the necessary IPC
communication with the timer service effectively.

Ref #35
2013-08-30 13:38:21 +02:00
Alexander Boettcher
7dfab657b2 vesa: avoid concurrent access by acpi driver
Issue #843
2013-08-30 13:37:26 +02:00
Josef Söntgen
d2f7c7bec4 os: reenable -fPIC and fix policy linkerscript
As it turns out using -fPIC was not the issue but discarding certain
sections. The policy_module_table is now located in .data.rel which
needs to be at the beginning of the binary.

Fixes #849.
2013-08-30 13:36:25 +02:00
Stefan Kalkowski
5afb5fcc12 Explicitly specify compile rule for tracing policy
Otherwise we might get conflicts e.g. like -fPIC flag on Fiasco.OC platform.

Fixes #849
2013-08-30 13:36:01 +02:00
Alexander Boettcher
35a96e1101 acpi: parse RMRR structures and print DMA regions
The regions reported by the RMRR structure are used by legacy devices for DMA
requests. Theses would need to be added to the device_pd to avoid DMAR faults
when used in legacy mode.

For now parse and print them, so that one has a clue about why we get DMAR
faults.

Issue #683
2013-08-30 13:34:14 +02:00
Alexander Boettcher
b142939d14 usb: fix usb stack when used with IOMMU
Fixes #683
2013-08-30 13:34:01 +02:00
Alexander Boettcher
39f32b5bd6 device_pd: survive failing attachment request
Be more robust. If the attachment fails continue to operate and just print a
error message. Before the commit the device_pd stopped to operate if an
attachment did not succeed.

Issue #683
2013-08-30 13:33:44 +02:00
Josef Söntgen
82eb5e4323 base: only commit useful trace events
If the length of a trace event entry is zero it should be ommitted.

Fixes #851.
2013-08-30 13:32:06 +02:00
Stefan Kalkowski
ae87f50ce3 Implement timestamp function for tracing for ARM
Use Armv7 performace counters for this.

Fixes #850
2013-08-30 13:31:47 +02:00
Martin Stein
eee671233c autopilot: add test of MMIO framework
ref #853
2013-08-30 13:29:44 +02:00
Martin Stein
d4e435d732 mmio: provide bitsets and test them
fix #853
2013-08-30 13:29:22 +02:00
Martin Stein
e272264cb2 regulator & arndale: prevent invalid array index
fix #831
2013-08-30 13:28:12 +02:00
Martin Stein
8188e85691 mmio: interpret read-verbosity switch
fix #825
2013-08-30 13:27:41 +02:00
Martin Stein
0bbfa3a501 ffat: require prepare_ffat if ffat not prepared
fix #534
2013-08-30 13:27:18 +02:00
Stefan Kalkowski
b3dd45942e usb_drv: change Driver_context to Signal_dispatcher
Fixes #861
2013-08-30 13:26:29 +02:00
Josef Söntgen
c437255d96 libports: remove right files when cleaning libc
Only the directories and files which were created in the first place
by the libc port should be removed. Thereby ignore the exit code of
the find command to prevent GNUmake from stopping its execution.

Fixes #841.
2013-08-30 13:26:14 +02:00
Alexander Boettcher
b1fe2b5ab9 acpi: skip parameters of DefName
Fixes #415
2013-08-30 13:23:28 +02:00
Christian Prochaska
a0a91475d1 dde_linux: remove superfluous 'msleep()' calls
Fixes #860.
2013-08-30 13:21:17 +02:00
Josef Söntgen
d967be473a base: fix pausing tracing subjects
Fixes #858.
2013-08-29 15:41:40 +02:00
Alexander Boettcher
77fe612adb base: fix thread_cap initialization
Fixes #842
2013-08-29 15:41:04 +02:00
Christian Helmuth
42739de9fd foc: print line numbers in decimal on assert 2013-08-27 16:06:53 +02:00
Martin Stein
0d803266ea hw: touch kernel scheduler and timer less often
fix #857
fix #855
2013-08-27 16:04:10 +02:00
Martin Stein
d0eaca9915 hw: don't unmask timer IRQ on any kernel pass
ref #855
2013-08-23 11:25:18 +02:00
Martin Stein
cbd1464ee3 hw: fix in signal-ack handling in kernel
ref #574
2013-08-23 11:23:47 +02:00
Martin Stein
fa047f4dda signal test: let sender yield CPU when idle
ref #574
2013-08-23 11:23:47 +02:00
Alexander Boettcher
bab1663ea2 ldso: be quiet by default 2013-08-22 15:13:12 +02:00
Alexander Boettcher
773b0ecc3d noux: add verbose config parameter
Explicitly enable verbose output if required.
2013-08-22 15:13:12 +02:00
Alexander Boettcher
c0c3b48357 terminal: refresh only if output changed 2013-08-22 15:13:12 +02:00
Alexander Boettcher
9cf315b37e noux: start time measuring with first noux output
Don't account the boottime to the actual compile time - since it varies quite
a lot if somebody else utilize the network with lwip tests for example ;-).
2013-08-22 15:13:12 +02:00
Alexander Boettcher
1df1611f45 run: support target serial for base-nova
Issue #683
2013-08-22 15:13:12 +02:00
Alexander Boettcher
6dd6525b48 seoul: support headless mode
+ run kernelbuild in headless mode, output dumped via serial output
2013-08-22 11:33:10 +02:00
Alexander Boettcher
6d5a66d8e7 seoul: refresh console only if required
Speeds up kernelbuild by over 35% !!!
2013-08-22 11:33:00 +02:00
Alexander Boettcher
90823eaf1d run: remove files of seoul-auto script 2013-08-22 09:03:29 +02:00
Christian Helmuth
a478213872 pci: no parsing errors if no config file 2013-08-19 10:59:50 +02:00
Christian Helmuth
338c49da23 vesa: fix error message (interval display) 2013-08-19 10:33:29 +02:00
Norman Feske
ef1cd4a276 News item for Genode 13.08 2013-08-15 12:05:39 +02:00
Norman Feske
d13605a9a3 Release notes for version 13.08 2013-08-15 12:05:39 +02:00
Norman Feske
3d42cb0693 doc/getting_started.txt: Mention VESA driver 2013-08-15 12:03:54 +02:00
Norman Feske
a652cb5110 Apply affinity subspacing to session requests 2013-08-15 09:22:50 +02:00
Josef Söntgen
a4066c358e Add trace points (RPC and signal) 2013-08-15 09:22:50 +02:00
Josef Söntgen
17eb342156 os: example trace policy-modules 2013-08-15 09:22:50 +02:00
Alexander Boettcher
baa55dabc4 seoul: add kernelbuild run script 2013-08-15 09:22:49 +02:00
Christian Prochaska
97374cf57e ldso: increase 'MEM_SIZE' in 'mmap()'
Fixes #838.
2013-08-15 09:22:49 +02:00
Christian Prochaska
d39dfef98f Qt: fix examples
With this patch, the 'textedit' example can run on base-linux again and
'qt_lauchpad' contains only runnable launch entries.

Fixes #837.
2013-08-15 09:22:49 +02:00
Christian Prochaska
d47468c005 Qt4: fix download location
Fixes #836.
2013-08-15 09:22:49 +02:00
Christian Prochaska
7f7c24fcc9 Pistachio: tell the compiler about 'edi' changes
Syscall binding functions which use '__L4_INDIRECT_CALL' need to tell the
compiler that the 'edi' register gets modified. Since 'edi' is an input
operand and input operands may not get added to the clobber list, this
patch defines 'edi' also as an output operand instead.

Fixes #834.
2013-08-15 09:22:49 +02:00
Stefan Kalkowski
3a6f639df8 Fix network_test run scripts for recent changes
Fix #833
2013-08-15 09:22:49 +02:00
Stefan Kalkowski
55e1c16c98 ports: enable re-preparation of contrib code
Avoid warnings of missing patches directory

Fixes #832
2013-08-15 09:22:49 +02:00
Norman Feske
0c22f3da75 doc: Update components.txt and top-level README 2013-08-15 09:22:48 +02:00
Norman Feske
7972e4587b qt5: hook for selectively inhibiting qt5 builds 2013-08-15 09:22:48 +02:00
Alexander Boettcher
ed3187aa74 seoul: add invalid guest state handling 2013-08-15 09:22:48 +02:00
Alexander Boettcher
e349c29736 seoul: add test for native runs
and add to autopilot list.
2013-08-15 09:22:48 +02:00
Alexander Boettcher
35f9ceb7ba seoul: fix run script issues 823 and 824
Fix #823
Fix #824
2013-08-15 09:22:48 +02:00
Alexander Boettcher
4474e9d6d6 seoul: add intel82576vf for 64bit 2013-08-15 09:22:48 +02:00
Alexander Boettcher
0654877392 seoul: update to recent seoul branch
Required to use intel82576vf in 64bit host mode
2013-08-15 09:22:48 +02:00
Alexander Boettcher
009adff441 seoul: fix region conflicts
At least 64bit Seoul dies with Region_conflict reliable and reproducible.

When during startup of Seoul some Genode code (caused by executing some
constructors) try to attach a region, the region manager code in the rm_session
will try to place the attachment at the smallest large enough aligned free
virtual region.

For now, I observed one attachment causing trouble (but not knowing who causes
this - it does also not really matter). The questionable region is 0x4000 of
size for 32bit and 0x8000 of size for 64bit.

To steer the region manager a bit, we try now following trick:

With this commit the load address of the binary for 32 and 64 bit is moved
close to the end of the virtual address space, but leaving enough free virtual
space for the above observed attachment (and a bit more).

The region manager code now will try to fill up the virtual region behind
the binary up to the end of the virtual address space, effectively letting the
lower virtual region untouched - hopefully.

Works for now, but it will break again - for sure.

Fixes #519
2013-08-15 09:22:48 +02:00
Josef Söntgen
32e3eee48c linux: add expanding Cpu_session_client 2013-08-15 09:22:48 +02:00
Norman Feske
149356f7ab core: TRACE service interface and implementation 2013-08-15 09:22:47 +02:00
Norman Feske
fe4a6d7d81 base: User-level tracing support 2013-08-14 18:43:19 +02:00
Norman Feske
a2b15349fd base: Add tracing support to CPU session interface 2013-08-13 17:27:40 +02:00
Christian Prochaska
f0b5c5eca5 Rename 'oss_drv' to 'audio_out_drv'
Fixes #829.
2013-08-13 17:27:40 +02:00
Sebastian Sumpf
a125f7179e foc: Fix interrupt-mode handling on x86
Set level/edge high/low values correctly.

Fixes issue #830
2013-08-13 17:27:40 +02:00
Sebastian Sumpf
258c74db59 base-foc: Checkout license file from TUDOS repo 2013-08-13 17:27:40 +02:00
Christian Prochaska
7b54eaaee1 libports: add Qt5
Fixes #345.
2013-08-13 17:27:40 +02:00
Christian Prochaska
572592b0f3 qt4: require 'qt4_deprecated' SPECS variable
To avoid build conflicts with Qt5, with this patch, 'qt4_deprecated' needs
to be added to the 'SPECS' variable (in specs.conf) when building for Qt4.

Issue #345.
2013-08-13 17:08:26 +02:00
Christian Prochaska
5b0a8e54f9 ldso: increase size of managed ELF dataspace
The size needs to be increased for Qt5 libraries.

Issue #345.
2013-08-13 17:08:26 +02:00
Christian Prochaska
fd11bd489e base: increase maximum file name length
This patch increases the maximum file name length to support
'qt5_qnitpickerviewwidget.lib.so'.

Issue #345.
2013-08-13 17:08:26 +02:00
Christian Prochaska
58e8481793 Implement more 'pthread' functions.
Issue #345.
2013-08-13 17:08:26 +02:00
Martin Stein
bb00aebc9e hw & signal: consider initial SLAB blocks
By now Signal_session_component has allocated initial SLAB
blocks in constructor, wich crashed with the root
components assumptions about the RAM quota needs of
session creation. Thus, if the background allocator was already
exhausted from component allocation the session was created
with broken initial SLAB blocks.

fix #574
2013-08-13 17:08:26 +02:00
Josef Söntgen
9b28395f0d noux: construct new child only if binary is valid
If a script is executed which uses a interpreter that does not exist the
construction of the child fails and potentially leaks memory because the
wrong delete operator is called.
Therefore the binary dataspace of the script and the binary dataspace of
the interpreter are now checked before a new child will be created.

Fixes #812.
2013-08-13 17:08:26 +02:00
Christian Prochaska
3ec16da03f libports: add ICU library
The ICU (International Components for Unicode) library is needed for Qt5.

Fixes #828.
2013-08-13 17:08:26 +02:00
Christian Prochaska
6741af07aa stdcxx: create 'typeinfo' symlink
The 'typeinfo' header file is needed by the ICU library.

Issue #828.
2013-08-13 17:08:26 +02:00
Norman Feske
c4627fab44 Update os/doc/init.txt with affinity information 2013-08-13 17:08:25 +02:00
Norman Feske
35723d813d core: evaluate CPU session affinity argument 2013-08-13 17:08:25 +02:00
Norman Feske
5ec07614e8 init: Read affinity assignments from config
The assignment of affinities consists of two parts, the definition
of the affinity space dimensions as used for the init process, and
the association sub systems with affinity locations (relative to the
affinity space). The affinity space is configured as a sub node of the
config node. For example, the following declaration describes an
affinity space of 4x2:

<config>
  ...
  <affinity_space width="4" height="2" />
  ...
</config>

Subsystems can be constrained to parts of the affinity space using
the '<affinity>' sub node of a '<start>' entry:

<config>
  ...
  <start name="loader">
    <affinity xpos="0" ypos="1" width="2" height="1" />
    ...
  </start>
  ...
</config>
2013-08-13 17:08:25 +02:00
Norman Feske
9111f060f5 Shortcut for 'Xml_node::Attribute::value()'
Also provide accessor function 'has_attribute'.
2013-08-13 17:08:25 +02:00
Norman Feske
fd95637289 Interface for setting CPU connection affinity 2013-08-13 17:08:25 +02:00
Alexander Boettcher
2e6504df62 run: disable libc_ffat test for some qemu versions
Disable qemu version known to be not working with the atapi driver.

Issue #827
2013-08-13 17:08:25 +02:00
Alexander Boettcher
6c994d19fe lwip: use alignment solely of 4
Temporarily 64bit fix for issue #817.
2013-08-13 17:08:25 +02:00
Norman Feske
6d837c9e26 Attach affinity information to session requests
This patch extends the 'Parent::session()' and 'Root::session()'
functions with an additional 'affinity' parameter, which is inteded to
express the preferred affinity of the new session. For CPU sessions
provided by core, the values will be used to select the set of CPUs
assigned to the CPU session. For other services, the session affinity
information can be utilized to optimize the locality of the server
thread with the client. For example, to enable the IRQ session to route
an IRQ to the CPU core on which the corresponding device driver (the IRQ
client) is running.
2013-08-13 17:08:25 +02:00
Alexander Boettcher
f1af8e371d nova: unify code for normal and server threads 2013-08-13 17:08:25 +02:00
Norman Feske
5fe29e8e4a Express affinities via Cartesian coordinates
This patch introduces new types for expressing CPU affinities. Instead
of dealing with physical CPU numbers, affinities are expressed as
rectangles in a grid of virtual CPU nodes. This clears the way to
conveniently assign sets of adjacent CPUs to subsystems, each of them
managing their respective viewport of the coordinate space.

By using 2D Cartesian coordinates, the locality of CPU nodes can be
modeled for different topologies such as SMP (simple Nx1 grid), grids of
NUMA nodes, or ring topologies.
2013-08-13 17:08:24 +02:00
Alexander Boettcher
fa7329a3e6 run: remove duplicated include in seoul-fancy
Fixes #820
2013-08-13 17:08:24 +02:00
Alexander Boettcher
70d0b00dde nova: update to kernel revision r3
r3 contains the recent Nova upstream kernel version plus the Genode specific
extensions and changes as known from r2.

Additionally, the r3 branch

* contains the assign_pci patch now directly,
* adds support for cross CPU IPC,
* fixes some issues with freeing up kernel memory part of r2 and
* update the documentation a bit.

Fixes #814
2013-08-13 17:08:24 +02:00
Alexander Boettcher
071ca39407 run: make bomb test ready for auto tests 2013-08-13 17:08:24 +02:00
Alexander Boettcher
2e58428b51 run: Rpc_entrypoint test running on multiple CPUs
Add run script to autopilot list

Issue #814
2013-08-13 17:08:24 +02:00
Alexander Boettcher
9e8255948d base: add affinity to rpc_entrypoint constructor
Issue #814
2013-08-13 17:08:24 +02:00
Alexander Boettcher
0e83b0b093 nova: create core threads on boot cpu
The boot CPU is not necessarily 0 as currently assumed for base-nova.
Replace all hard coded values by the actual boot cpu number.

Issue #814
2013-08-13 17:08:24 +02:00
Alexander Boettcher
0079179f05 base: store initial ax and di registers in crt0.s
The values are used by a follow up commit by nova to get the boot CPU number.

Issue #814
2013-08-13 17:08:24 +02:00
Alexander Boettcher
fdaeda47bb run: extend affinity test
* read out supported number of CPUs
* start per CPU a thread
* monitor by main thread liveness of remote CPU threads
* add a round variable
* terminate run script after a specific round or after 90s
* on qemu wait 5 rounds, on native runs 40

Add run script to autopilot list

Issue #814
2013-08-13 17:08:24 +02:00
Alexander Boettcher
683832f461 base: avoid deadlock if invalid object is called
This avoids a deadlock if during issuing a printf the low level IPC fails.
. Printf uses an address space local lock and if we are trying again
to make a printf we deadlock forever ...
2013-08-13 17:08:23 +02:00
Alexander Boettcher
4e47cd2568 nova: catch exception when leaving thread::entry()
Catch exceptions and try to make a printf. If this also fails, catch
it and die causing some noise output in core to detect the situation.
2013-08-13 17:08:23 +02:00
Alexander Boettcher
8655b58953 nova: show client name for unhandled page faults
This patch eases debugging.
2013-08-13 17:08:23 +02:00
Alexander Boettcher
4e2e79bf4f nova: create pager/server thread on specific cpus
issue #814
2013-08-13 17:08:23 +02:00
Alexander Boettcher
4ae1faf14d base: add affinity support to pager construction
Propagating the affinity information is needed to allow for assigning
a pager thread that is local to the CPU of the to-be-created thread.

issue #814
2013-08-13 17:08:23 +02:00
Alexander Boettcher
e171683b8c nova: support setting affinity via cpu session
issue #814
2013-08-13 17:08:23 +02:00
Alexander Boettcher
435b8dd252 foc: determine number of CPUs
Issue #814
Fixes #578
2013-08-13 17:08:23 +02:00
Alexander Boettcher
1a82b664ef nova: determine number of CPUs
Issue #813
2013-08-13 17:08:23 +02:00
Josef Söntgen
b5739fc520 ports: add grep and sed to noux_tool_chain
Fixes #821
2013-08-13 17:08:23 +02:00
Josef Söntgen
5cf4e323c5 Noux: add noux-pkg/grep 2013-08-13 17:08:22 +02:00
Josef Söntgen
2aafc9d4e6 Noux: add noux-pkg/sed 2013-08-13 17:08:22 +02:00
Sebastian Sumpf
8f3413f487 usb_drv: Fix USB storage for x86 on hardware
Also fix 'usb_storage.run' for x86

Fixes #822
2013-08-13 17:08:22 +02:00
Norman Feske
956cab5fdb noux: Keep track of how dataspaces are used
This patch eliminates the "no attachment at..." warnings, which
were caused by a use-after-free problem of dataspaces. When a
dataspace was destroyed, the users of the dataspace were not
informed and therefore could not revert possible attachments to
RM sessions. The fix introduces a callback mechanism that allows
dataspace users (i.e., RM regions) to register for the event that
a dataspace vanishes.

The following types of dataspaces are handled:
* RAM dataspaces
* ROM dataspaces
* The process binary
* The binary of the dynamic linker
* Args dataspace
* Sysio dataspace
* Env dataspace
* managed RM dataspaces

The handling of ROM dataspaces is still not complete. When forking,
the ROM dataspace of the parent process gets just reused without
creating proper meta data ('Dataspace_info') for the forked process.
Similar issues might arise from other special dataspaces (e.g.,
args, env, sysio).

This patch removes all "no attachment at..." warnings except for
one (an attachment at 0).

Issue #485
2013-08-06 17:40:10 +02:00
Sebastian Sumpf
959282403c l4linux: Update to L4Linux l4box 3.9.0-l4-svn37
This is the Genode side of the L4Linux update to r37. I also moved L4Linux
sources to GitHub.

Issue #819
2013-08-06 17:40:10 +02:00
Sebastian Sumpf
7a4f98f2ed foc: SVN revision r56
Genode side of the update.

Issue #819
2013-08-06 17:40:10 +02:00
Christian Prochaska
dc177e037d bash: don't call 'check_dev_tty()'
The 'check_dev_tty()' function calls 'ttyname()', which calls the pthread
stub function 'pthread_main_np()', which prints a 'not implemented'
message. Calling 'check_dev_tty()' doesn't seem to be necessary, so this
patch removes the call.

Issue #815.
2013-08-05 15:18:03 +02:00
Christian Prochaska
adf895acad Print pthread stub messages to Genode log console
With this patch, the 'not implemented' messages of the pthread function
stubs always get printed to the Genode log console instead of stdout.

Issue #815.
2013-08-05 15:17:42 +02:00
Alexander Boettcher
9b6d37649b run: restrict noux-auto to platforms known to work
* add to autopilot list

Issue #591
2013-08-05 15:16:11 +02:00
Alexander Boettcher
01d267e551 noux: calculate rm::attach parameters correctly
Previous commit denies the creation of regions larger then the dataspace.
Noux does it by setting the default size to the dataspace size without
subtracting the offset.

Fixes #591
2013-08-05 15:15:56 +02:00
Alexander Boettcher
717be91e16 base: deny region creation exceeding size of a ds
The rm_session implementation expects that offset + size must be
part of one dataspace. Unfortunately the parameters are not checked
properly during an rm::attach.

During an detach memory behind the actual region can be unmapped by such
bogus region entries.

Issues #591
2013-08-05 15:15:40 +02:00
Christian Prochaska
09049278a6 Round up RM session size to page granularity
Since RM sessions can be used as dataspaces and dataspace sizes are
supposed to have page granularity, RM session sizes should have page
granularity, too.

Fixes #799.
2013-07-18 11:56:44 +02:00
Alexander Boettcher
b1cb1ceaf9 seoul: fix disc boot
Additionally use the block session interface asynchronously to let the VM
continue execution.

Fixes #806
2013-07-18 11:55:18 +02:00
Alexander Boettcher
b9449a4279 seoul: fix console output in vga text mode
Issue #806
2013-07-18 11:55:18 +02:00
Alexander Boettcher
b4283c9121 seoul: use utcb guard
Forgetting to restore the old utcb content results in hard to debug bugs.
Save only the amount of word items which are actually on the UTCB.

Issue #806
2013-07-18 11:55:18 +02:00
Alexander Boettcher
b9e48e94ec seoul: catch exception during block session creation
Leads to invalid utcb state and later on to invalid vCPU state.

Issue #806
2013-07-18 11:55:18 +02:00
Alexander Boettcher
8afcbce01e seoul: implement heap_free
Avoids the message

cxx: operator delete (void *) called - not implemented. A working implementation is available in the 'stdcxx' library

during a " new ..." which causes exceptions. Happens for seoul in disk.cc

Issue #806
2013-07-18 11:55:17 +02:00
Alexander Boettcher
4e8d0618bb seoul: split vancouver run script into smaller ones
Issue #806
2013-07-18 11:55:17 +02:00
Alexander Boettcher
ff0eb93569 run: dump output of noux_net_netcat
Issue #742
2013-07-16 17:26:55 +02:00
Alexander Boettcher
61a3f8c2af pistachio: exclude io memory from ram allocator
Fixes #798
2013-07-16 16:23:49 +02:00
Alexander Boettcher
5094b79a31 pistachio: return kip structure from get_kip
to avoid lot of unnecessary casts afterwards

Issue #798
2013-07-16 16:23:49 +02:00
Josef Söntgen
505f4290ec base: activate Rpc_entrypoint explicitly in dtor
The Rpc_exit call is delivered via RPC which results in a deadlock
if the Rpc_entrypoint has not been started yet. To prevent this
situation we active the Rpc_entrypoint explicitly before we call
Rpc_exit.

Fixes #811.
2013-07-16 12:32:29 +02:00
Stefan Kalkowski
a341f744ce Cortex A15: temporarily remove -mcpu switch again
Make compiler stop complaining about every compilation unit.

Fixes #810.
2013-07-16 12:29:47 +02:00
Sebastian Sumpf
dae8ca2952 usb_drv: Remove wait events for Nic
'alloc_skb' might now fail, the Nic component will then send a 'packet
available' signal and return. Fix broken SKB list implementation as well as
completely bogus initialization of SKBs.

Related to #778.
2013-07-15 17:11:06 +02:00
Alexander Boettcher
99ae463e5c run: zero pad hello.py to succeed on OKL4
Fixes #804.
2013-07-15 17:06:27 +02:00
Stefan Kalkowski
5d75e6676d run-tool: be more failure tolerant in spawn_serial
Fixes #809
2013-07-15 13:06:08 +02:00
Stefan Kalkowski
09d81759ee run-tool: unify building of u-boot image (fix #807) 2013-07-15 11:13:28 +02:00
Martin Stein
6c7a25d08c base-hw: use generic signal_session/connection.h
base-hw extended the signal quota in a specific connection
implementation, which just conceals other issues if quota upgrade is
triggered.

Fixes #410.
2013-07-12 16:41:33 +02:00
Stefan Kalkowski
b3eecfcced base-foc: Improve documentation of capability enums
Fixes #568
2013-07-12 15:33:27 +02:00
Stefan Kalkowski
e717ad656f base-hw: preserve symbolic link bin/core
In this case "mv A B" works slightly different than "cp A B; rm A" as
symbolic links come into play. The statements should copy the contents
of A into the symboliv link at B (preserving it as is) and remove A. The
mv would replace the link B by the binary A.

Fixes #805.
2013-07-12 15:23:33 +02:00
Stefan Kalkowski
76d449ebe6 Start receiver thread in LwIP after initialization
Otherwise the receiver thread might access variables not initialized properly,
and thereby raising pagefaults.

Fixes #802
2013-07-11 17:35:24 +02:00
Stefan Kalkowski
03538a1c3b Disable run test for base-hw as long as it fails
Ref #801
2013-07-11 16:40:42 +02:00
Alexander Boettcher
4dd9172888 run: add success message to lx_hybrid_pthread_ipc 2013-07-11 12:44:24 +02:00
Stefan Kalkowski
ef4027a7a8 Disable noux run script for i.MX53 platform
This platform misses necessary UART driver support.
2013-07-11 12:44:24 +02:00
Alexander Boettcher
86d323d3cf run: disable network tests for imx53
We have no network driver on this platform by now.
2013-07-11 12:44:24 +02:00
Stefan Kalkowski
946bd297e6 Add -mcpu flag to ARM CPU spec files (Ref #797)
When using certain assembler instructions, e.g. 'smc' that are
only available on some CPUs of the same architecture like ARMv7a,
it's necessary to specify the target CPU for the assembler. Otherwise
it will complain about.
2013-07-11 12:44:24 +02:00
Sebastian Sumpf
2dce04618e atapi_drv: Implement LBA48 specific block count
Use NATIVE MAX ADDRESS EXT to retrieve last block for LBA48. Also check not only
for enabled LBA48 support but for the 'host protected area' bit before using the
LBA48 version. This is because the high order byte (HOB) data retrieval is
broken in Qemu.

Fixes #761.
2013-07-11 12:44:18 +02:00
Alexander Boettcher
861bbc81a3 run: check size of reported disc in part_blk
Triggers bug if LBA48 mode is used.

Issue #761
2013-07-11 12:40:19 +02:00
Stefan Kalkowski
ba273fb6fb base-hw: disable L2 cache on Pandaboard (fix #797)
* Fix bitfield typo in TTBR0 register for ARMv7
2013-07-11 12:40:19 +02:00
Alexander Boettcher
731493641b run: add netperf tests to autopilot list
* native Genode (using lwIP) netperf
as
* L4Linux netperf
2013-07-11 12:40:19 +02:00
Alexander Boettcher
1fa27bb16c run: prepare netperf l4lx output for post processing
Issue #794.
2013-07-11 12:40:10 +02:00
Alexander Boettcher
bdd145f62d run: split netperf l4linux script
Split the netperf run script into 3 ones so that it can be used more easily
in an automated run.

It is solely for foc_arndale by now.

l4linux_netperf.run        - use nic via usb2.0
l4linux_netperf-usb30.run  - use nic via usb3.0
l4linux_netperf-bridge.run - use nic via usb3.0 + bridge
2013-07-11 11:02:04 +02:00
Alexander Boettcher
a1a790664e run: check for netperf version in user environment
For L4linux version on foc_arndale.
2013-07-11 11:02:04 +02:00
Alexander Boettcher
05d807db75 run: split native Genode netperf script
Split the netperf run script into 3 ones so that it can be used more easily
in an automated run.

netperf.run        - use native nic driver (x86) or usb2.0 (arndale, panda)
netperf_usb30.run  - use native nic driver (x86) or usb3.0
netperf_bridge.run - use native nic driver (x86) or usb3.0 (arndale) and bridge

Issue #794
2013-07-11 11:01:37 +02:00
Alexander Boettcher
400037a5b0 run: check for netperf version in user environment
For native Genode netperf port.
2013-07-09 18:57:30 +02:00
Christian Helmuth
4807d469ca Revert "usb_drv: Wait for IRQ on SKB exhaustion"
The fix overly influences gigabit ethernet performance (~200 MBit), so,
we need to investigate further.

This reverts commit aacb91f22a.

Reopen #788.
2013-07-08 15:55:31 +02:00
Alexander Boettcher
241c0f38a4 run: remove tar file also after native runs
Fixes #679
2013-07-05 12:46:56 +02:00
Norman Feske
92cb97c05b Let Git ignore libports/include/x86emu
The headers are mere symlinks created via 'make prepare'.
2013-07-05 12:43:26 +02:00
Christian Prochaska
02c0fa85cf nic_bridge: increase entrypoint stack size
Issue #782
2013-07-05 12:37:43 +02:00
Christian Prochaska
c962240922 crt0 cleanup
- use the generic 'crt0.s' for Linux
- move the read-only '__dso_handle' definition into the '.text' section
- move the '__initial_sp' definition into the '.bss' section
- remove the '_main_utcb' definition

Part of #766.
2013-07-05 12:37:43 +02:00
Martin Stein
1b96e8a7e1 hw: use generic genode.ld
Ref #766
2013-07-05 12:37:43 +02:00
Martin Stein
ee4c98e093 base: provide BSS boundary marks in genode.ld
This enables us to use the generic linker script for
base-hw also.

Ref #766
2013-07-05 12:37:43 +02:00
Martin Stein
6b42fff30e hw: use generic crt0.s for progs other than core
Use '__initial_sp' instead of '_main_utcb' to receive a main threads
UTCB pointer outside core.

Ref #766
2013-07-05 12:37:42 +02:00
Martin Stein
e20b773bef hw & arm: use sp to hand out main UTCB pointer
Also don't hand out UTCB pointers to cores main thread and to threads
other than main threads.

Ref #766
2013-07-05 12:37:42 +02:00
Martin Stein
5a3e340699 hw: initialize Platform_thread::_main_thread right
Ref #766
2013-07-05 12:37:42 +02:00
Josef Söntgen
cb76c0c45f core: remove hardcoded 'init' from Log output
Until now the print procedure call in the Log_session_component
did contain a hardcoded 'init' string. Adding a method to filter
the session args to prefix the label and labelling the initial
Cpu_connection for the init-process enabled us to remove the
hardcoded string.

Fixes #789.
2013-07-05 12:37:42 +02:00
Josef Söntgen
136af3764d core: add session args filter to Core_child
Add the filter_session_args() method to Core_child to prefix the labels
of its children.

Fixes #789.
2013-07-05 12:37:42 +02:00
Josef Söntgen
4ba17f7ebd core: use label for init's Cpu_session
Fixes #789.
2013-07-05 12:37:42 +02:00
Josef Söntgen
dad3f32d0b linux: thread name wrongly truncated by one byte
The terminating NUL char was not considerd in the calculation of
the space needed for storing the string.

Fixes #790.
2013-07-05 12:37:42 +02:00
Josef Söntgen
29b8370f73 noux: add local cpu and ram service
Use a local CPU service to prevent a redirection to noux' parent (in
this case init which does not know noux' local capabilities).

Fixes #791.
2013-07-05 12:37:42 +02:00
Josef Söntgen
9ec791db9a base: add method to withdraw memory w/o allocating
The given number of bytes is consumed but not actually allocated. This
feature may be used for accounting and use memory within core which is
in fact provided by a session client.

Fixes #792.
2013-07-05 12:37:42 +02:00
Stefan Kalkowski
0ba40d01ca Don't use daemonized telnet in netcat run-script
Fix #782
2013-07-05 12:37:42 +02:00
Norman Feske
b7e553d4db nic_bridge: Documentation update 2013-07-05 12:37:41 +02:00
Norman Feske
129c77f02b doc: Update location of VESA driver 2013-07-05 12:37:41 +02:00
Stefan Kalkowski
1904a223e8 Check md5 sum of initramfs file in l4lx run-script
* Always download md5sum file and check downloaded binaries
* Extend sleep time in l4linux_netperf script, so that DHCP has enough time
* Fix regexp rule in l4linux_netperf run script to work with MAC addresses
  containing only numbers

Fix #787
2013-07-05 12:37:41 +02:00
Sebastian Sumpf
aacb91f22a usb_drv: Wait for IRQ on SKB exhaustion
Do not use 'wait_event' when SKB-backend allocation fails, explicitly wait for
an interrupt, which in turn frees SKBs, instead.

Fixes issue #788
2013-07-02 08:50:40 +02:00
Norman Feske
2045fffe2a ports-foc: assert use of 32-bit platforms
L4Linux does not support x86_64. Detect this case early in the run
script.
2013-06-30 13:48:10 +02:00
Norman Feske
9bff8c454a ports-foc: Mention prepare step of dde_ipxe
Thanks to Rudolf Weber for reporting.
2013-06-30 13:44:40 +02:00
Martin Stein
0613e52a49 ahci & exynos5: adjust ouput format in ahci_bench 2013-06-28 17:23:31 +02:00
Martin Stein
4fe093b01b ahci & exynos5: opt-in app and part in ahci_bench 2013-06-28 17:23:25 +02:00
Martin Stein
118ca20a2f ahci & exynos5: do test repetitions in ahci_bench 2013-06-28 17:23:17 +02:00
Alexander Boettcher
e3c3f9f44f run: restrict ports solely for qemu case
Sometimes the ports are not freed up quick enough by the host system after the
first test finished. The port restriction is mainly required for qemu, so don't
use it for bare metal hardware tests.
2013-06-28 16:21:08 +02:00
Stefan Kalkowski
089f8dcfc8 Extend l4linux_dynamic run-script with SATA driver
* Add platform_drv for usb_drv, sd_card_drv and ahci
* Add ahci driver and part_blk on top of it
* add linux instance using SATA partition
* add VIM using SATA partition
2013-06-28 16:18:15 +02:00
Stefan Kalkowski
9263079f70 USB 3.0 & exynos5: don't close regulator session
When leaving constructor of EHCI & XHCI driver don't close the regulator session,
otherwise it'll power down the device.
2013-06-28 14:27:27 +02:00
Stefan Kalkowski
acc24b5905 Switch off regulators when closing session 2013-06-28 14:24:34 +02:00
Stefan Kalkowski
717e4dd362 Let genode_org run script work on various platforms 2013-06-28 14:22:45 +02:00
Alexander Boettcher
fd7683f6ea lwip: use memcpy of Genode 2013-06-27 20:12:43 +02:00
Alexander Boettcher
4c9cee24de run: add nic_bridge to netperf native test 2013-06-27 20:12:36 +02:00
Alexander Boettcher
776a8d3f8c lwip: set to max snd window which is known to work
The window scale option (http://tools.ietf.org/html/rfc1323) patch of lwIP
definitely works solely for the receive window, not for the send window.
Setting the send window size to the maximum of an 16bit value, 65535,
or multiple of it (x * 65536 - 1) results in the same performance.

Everything else decrease performance.

We will have to check this window scale patch before using higher values.
2013-06-27 20:12:29 +02:00
Alexander Boettcher
4925f77dac run: skip libc_ffat test for non qemu test runs
Print a warning that the sd respectively hard disc must be prepared manually.

Fixes #783
2013-06-27 20:12:23 +02:00
Stefan Kalkowski
68ba7a0b57 L4Linux ARM: enable ext4 by default 2013-06-27 20:03:36 +02:00
Alexander Boettcher
d822b82f5b lwip: align the pbuf on 32 resp. 64 bit addresses
Minor speed improvements of ~6Mbit. Additionally a ethernet frame fits now
into one memory allocation per pbuf. Beforehand two were allocated - one being
1514 bytes and another one being 2 bytes (monitored by instrumenting copy loop
in libports/src/lib/lwip/platform/nic.cc).
2013-06-26 17:42:11 +02:00
Alexander Boettcher
8d9e7d0da2 lwip: set some reasonable default rcv buf size
lwip reports via getsockopt the size of the default size of the receive buffer
to the netperf server. lwip returns 2GB and netperf server uses this value to
allocate some buffers - which of course fails with out of memory.

Reduces the "default size" to some smaller value.

With the commit we are not forced anymore to (but still can) use specific
netperf client options regarding memory allocations of the receive buffer.
2013-06-26 17:42:02 +02:00
Alexander Boettcher
e35dbd3353 run: add TCP_MAERTS to netperf test
MAERTS is STREAM backwards and effectively lets the netserver sends the packets
to the netperf client. So, TCP_STREAM measure the receive performance of the
lwIP stack on Genode and TCP_MAERTS the send performance of the lwIP stack
on Genode.
2013-06-26 17:41:54 +02:00
Martin Stein
198f8b65a4 ahci & exynos5: compliant exceptions on creation
Use Root::Unavailable exceptions instead of driver specific ones
on session construction.
2013-06-26 16:02:30 +02:00
Stefan Kalkowski
cfa3d38417 Use Genode's memcpy in L4Linux block driver 2013-06-26 16:02:20 +02:00
Martin Stein
276dbdab60 l4lx: raise block TX buffer size to 5 MiB
Buffer sizes lower than 5 MiB slow down the Arndale AHCI benchmark
with fast 6 Gbps SSDs and 1MiB blocks.
2013-06-26 16:02:13 +02:00
Martin Stein
9d23cdc27f part_blk: raise max packet size to 1 MiB
This is because the old packet size of 128 KiB slowed
down l4linux AHCI benchmark on arndale with large block sizes.
2013-06-26 15:05:20 +02:00
Martin Stein
3fb7e74287 ahci & exynos5: avoid large DMA buf in AHCI bench
Normally this bench has read all data to one large buffer and
than written it back to the drive but for SATA 3 (6 Gbps) benchmarks
we would need a buffer of approximately 1.2 GB to do it this way
and reach 2 seconds bench time. Thus we use a buffer of SATA request size
and override it with every request.
2013-06-26 15:05:20 +02:00
Martin Stein
0ad284febe ahci & exynos5: AHCI (+ part_blk) bench in l4linux 2013-06-26 15:05:19 +02:00
Martin Stein
ad3427e857 ahci & exynos5: allow 6 Gbps port speed 2013-06-26 15:05:15 +02:00
Martin Stein
da930d146f ahci & exynos5: enable SSDs like OCZ Agility 3
Declare ATA device-register structure and check it with more detail.

Fasten error recovery about 9 ms.
2013-06-26 15:05:11 +02:00
Stefan Kalkowski
770157fea0 Enable re-use of singleton, but closed IRQ session
Fix #784
2013-06-26 14:27:19 +02:00
Stefan Kalkowski
664d0036c8 Use cpu regulator in cli_monitor only on Arndale
This commit splits the Fiasco.OC-specific extension for the cli_monitor
into one for the Arndale platform, and one for all others. On Arndale
we add the cpu_frequency command beside the ones defined on all platforms.
2013-06-26 11:29:26 +02:00
Alexander Boettcher
9f2097669a netperf: add support to timeout if host went away 2013-06-25 17:42:42 +02:00
Alexander Boettcher
5d79c6be1a lwip: increase send performance for arndale USB2.0
Getting up to 91 Mbit out of a 100 Mbit card.
2013-06-25 17:42:42 +02:00
Alexander Boettcher
8a623c6317 lwip: support send, recv timeouts 2013-06-25 17:42:42 +02:00
Alexander Boettcher
494bb8ff0d run: print packets/s at end of netperf script 2013-06-25 17:42:42 +02:00
Alexander Boettcher
4bffa249fd lwip: tweak foc_panda to netperf tcp >90MBit/s 2013-06-25 17:42:42 +02:00
Alexander Boettcher
f1c99b190f run: add platform_drv to netperf run script 2013-06-25 17:42:42 +02:00
Alexander Boettcher
ef6450d5d3 run: fix noux_net_netcat for most x86_32 platforms
native pistachio x86 is broken in general

arm fix still pending

Issue #782
2013-06-25 17:36:34 +02:00
Martin Stein
ada408d2f7 ahci & exynos5: enable HDDs like Seagate Barracuda
Initialize and limit port speed to 3 Gbps in general because the Seagate
Barracuda 1TB throws much errors with 6 Gbps by now.

Try all port speeds from the highest to the lowest as long as debouncing fails
and try them all again in this order when falling back to slower debouncing.

Try to recover from all types of interface error.

When a port was recovered from an error during a NCQ command
get the last LBA that was accessed successfully and continue command from
this point.

Use a platform driver through the 'Regulator' service to do CMU and PMU config.

Switch off verbosity by default.
2013-06-25 16:35:22 +02:00
Martin Stein
686c551b66 ahci & exynos5: driver internal benchmark
To raise expressiveness of the benchmark it dynamically adjusts the
transfer amount at any test to get a result that was measured
over a transfer time of 2000 ms at least and 2300 ms at a max.
2013-06-25 15:08:33 +02:00
Martin Stein
6ae5d3a04b ahci & exynos5: basic recovery from NCQ errors
Fix little bugs in scatter/gather-list setup, FIS creation, and
command-slot creation of Exynos5 AHCI driver.
2013-06-25 15:00:52 +02:00
Martin Stein
53b186fe01 ahci & exynos5: enable SSDs like Samsung 840 Pro
* Retry debouncing first with a higher trial time and if this also doesn't
  work with lower link speed additionaly.
* Ignore DevSlp feature because it isn't needed anyway as far as i can see.
* Relax some restrictions according the feedback of the drive as far as it
  seem to have no effect in Linux too

Fix #753
2013-06-25 15:00:42 +02:00
Martin Stein
c93e770316 ahci & exynos5: use platform driver in AHCI test 2013-06-25 15:00:35 +02:00
Martin Stein
0c7c285079 mmio: provide basic verbosity
The verbosity must be enabled at two levels: at compile time
via an enum that switches the availability of verbosity code
and via two members of 'Mmio' named '_read_verbose' and
'_write_verbose'. The latter are initialized to 0 (change this to
enable verbosity globally) and can be used to locally enable
(or disable) verbosity in deriving classes.

Ref #753
2013-06-25 14:52:53 +02:00
Stefan Kalkowski
e23f24505b Add platform_drv to relevant run-scripts (fix #778) 2013-06-25 14:37:03 +02:00
Stefan Kalkowski
ae49f6216d Add regulators for EHCI controller on Arndale
Fix #780
2013-06-25 14:36:57 +02:00
Alexander Boettcher
059bf1c576 nova: fix page fault during core bootup
Fixes #781
2013-06-25 11:16:22 +02:00
Stefan Kalkowski
a73dc1b581 Fix coding style in regulator interface (fix #777) 2013-06-25 11:10:59 +02:00
Stefan Kalkowski
5a3c2c33b7 Add 'cpu_frequency' command to cli_monitor (fix #776)
This commit extends the Fiasco.OC specific extensions of the cli_monitor
to enable the user to interactively change or show current CPU frequency
2013-06-25 11:10:58 +02:00
Christian Prochaska
cb01f75a9d foc-arndale: use same context area location
Currently, on the Arndale platform, core uses a different thread context
area base address than the other tasks (0x20000000 vs. 0x40000000). This
is problematic, because core calculates the location of the UTCB area of a
new thread relatively to core's own thread context area base. So, the UTCB
area of non-core threads ends up in a virtual address range which is
outside of the task's thread context area and not marked as used in the
task's RM session.

With this patch, the same thread context area base address gets used in
core and in the other tasks.

Fixes #779.
2013-06-25 11:10:58 +02:00
Stefan Kalkowski
a4eb4bfa07 Arndale: save power by default (Fix #774)
* Use regulator interface in eMMC driver to enable its clock
2013-06-24 11:50:53 +02:00
Sebastian Sumpf
cc0f4bc9d2 usb_drv: Fix performance of ASIX AX88772
Caused by #773
2013-06-24 11:48:37 +02:00
Sebastian Sumpf
98ee7612f1 base: ARM-FPU 'memcpy_cpu' implementation
Added spec file for ARM-VFPv3 floating-point unit. This shadows
'base/include/arm/' with 'base/include/arm/vfp' and enables a 'memcpy_cpu'
version that mainly uses the FPU. Enabled VFP support for 'foc_arndale'.

Ref #773
2013-06-24 11:48:37 +02:00
Sebastian Sumpf
71490e131b usb_drv: Dimension queues for usbnet
+ Some code cleanup

Ref #773
2013-06-24 11:48:37 +02:00
Sebastian Sumpf
c3537d175c usb_drv: Use platform drivers and regulator
Ref #773
2013-06-24 11:48:37 +02:00
Stefan Kalkowski
f7034369b2 Extend clock and power units in platform driver
* Add clock and power management for SATA and USB3.0 for Arndale

Fix #771
2013-06-24 11:48:37 +02:00
Stefan Kalkowski
1d34589f84 Implement cpu frequency scaling for Arndale
* Implements platform driver for Arndale providing Regulator for CPU clock
* Implements a cpu frequency scaling test using the affinity test
* Fixes #770
2013-06-24 11:48:36 +02:00
Stefan Kalkowski
8fb8cf1c8b Implement abstract regulator session interface
Ref #770
2013-06-24 11:48:36 +02:00
Sebastian Sumpf
231d92f88a usb: Fix AX88179 receive CRC errors
Call 'set_multicast' and 'link_reset' during card startup. Increase TX skb
buffer allocator.

Ref #773
2013-06-24 11:48:36 +02:00
Sebastian Sumpf
8cf893e8c6 ports-foc: Add l4linux netperf run script
Ref #773
2013-06-24 11:48:36 +02:00
Alexander Boettcher
52cf25982a run: clean pulsar config file during a clean_run
tool/autopilot complains about this left over file
2013-06-17 12:14:10 +02:00
Alexander Boettcher
e5eeda2ec9 run: support TFTP servers using absolute paths
TFTP server requiring absolute directory names are supported (better) -
specify in RUN_OPT "--tftp-absolute" to create Pulsar config with absolute
path names for PXE boot.

Additional a symbolic link is created from the build directory to
"$PXE_TFTP_DIR_BASE$PXE_TFTP_DIR_OFFSET" automatically. This eases the use
together with autopilot for x86.
2013-06-14 14:27:14 +02:00
Alexander Boettcher
1b60fd6147 run: power off only the port which was switched on 2013-06-12 15:32:26 +02:00
Alexander Boettcher
27b6839ee0 fiasco: use bender, read out comport from BDA
Fix #768
2013-06-12 11:36:14 +02:00
Alexander Boettcher
bdd2935d4a pistachio: use bender, read out comport from BDA
Issue #768
2013-06-12 11:36:14 +02:00
Alexander Boettcher
1887222b53 okl4: use bender, read out comport from BDA
Issue #768
2013-06-12 11:36:14 +02:00
Alexander Boettcher
32fb7bbddd foc: add 'bender' to pulsar run script
Depends on - https://github.com/ssumpf/foc/pull/4 - which adds BDA read out
of I/O ports to FOC kernel.

Issue #768
2013-06-12 11:36:14 +02:00
Stefan Kalkowski
c61d832ae3 Fix nic_loopback, after recent NIC session changes
Commit c464ee2e6673fe328a8717342dca30f3b0204cb8 removed the RX_BUF_SIZE from
the NIC session interface. Mistakenly, the nic_loopback server was missed
when doing this change.
2013-06-12 11:35:13 +02:00
Stefan Kalkowski
e06a154294 Add __initial_sp variable to base-hw specific crt0
Fixes #756
2013-06-12 11:35:13 +02:00
Norman Feske
d0d5ec92b6 ports/libports: Use repository-local PWD
The PWD variable contains the current working directory of the original
location where 'make -C' is executed, not the directory specified as
argument of '-C'. The tools referenced by ports/libports, however,
expect PWD to point to the root of the respective repository.
2013-06-12 11:35:13 +02:00
Norman Feske
d2e883e235 libports: Fix qoost download 2013-06-12 11:35:13 +02:00
Norman Feske
9d778a658d ports/libports: Avoid multi-target rules
This patch splits the download of signatures from the download of the
archive to improve robustness. This way, signature files will be
downloaded even if the corresponding archive is already in place.

Issue #748
2013-06-12 11:35:13 +02:00
Stefan Kalkowski
853d541340 Let the nic_bridge work event driven (fix #749) 2013-06-12 11:35:13 +02:00
Stefan Kalkowski
153429268e Simplify use of custom data-flow signal handlers
This is analogue to the changes done in packet_stream_tx in commit:
cb9b2724de
2013-06-12 11:35:13 +02:00
Stefan Kalkowski
8fae7131c8 Unify buffer sizes of RX and TX in nic_session
In fact, the sizes were the same the whole time, but by using
the same enum in both cases to instantiate the Packet_stream_tx
and Packet_stream_rx members of the e.g. RPC object, it allows
for more flexible generalization between e.g. source or, sink
objects, when programming event-driven, and implementing generic
handlers for their signals.
2013-06-12 11:35:13 +02:00
Stefan Kalkowski
973efe945b Add sd_card drivers to some run scripts (fix #757)
Moreover, extend l4android script to run on OMAP4 and Exynos5.
2013-06-12 11:35:12 +02:00
Stefan Kalkowski
125d55ce71 Don't abort when reading config in OMAP4 fb driver
Just use configuration values when existent, otherwise when no configuration
is given use the default values. When an incomplete configuration is given,
take the supplied ones, and for the rest the default ones. Fix #762
2013-06-12 11:35:12 +02:00
Stefan Kalkowski
37856a0ad0 Add print-only dummy UART driver for Exynos5 SoC
Fix #759
2013-06-12 11:35:12 +02:00
Stefan Kalkowski
7584bdb22e Fix usb driver configuartion in l4linux run script
Don't use the xhci USB host controller for HID and NIC in the l4linux
run script. It doesn't work on the Pandaboard, and isn't needed for the
Arndale board. Moreover, provide a MAC address, and add a providing
rule in the KDB UART driver to supress ugly warnings. Fix #763
2013-06-12 11:35:12 +02:00
Christian Helmuth
b355897f53 update x86emu to 1.20
+ document x86emu move from os -> libports

Fixes #456
2013-06-12 11:35:12 +02:00
Christian Prochaska
be8a3c6f08 liquid_framebuffer: fix initial window size
Fixes #764.
2013-06-10 10:45:31 +02:00
Norman Feske
179f742924 ports/libports: Handle failed integrity checks
This patch makes the handling of failed integrity checks of 3rd-party
packages more robust. Previously, a once failed 'make prepare PKG=curl'
would not leave any trace of the verification state. Hence, a successive
attempt to perform the 'make prepare' step again succeeded even if the
signature check failed.

To solve this problem, the outcome of a successful signature check is
represented by a tag file called 'download/<archive-name>.verified'.
Because the rule for extracting the archive depends on the .verify tag
file, the extraction step is not performed until the signature check
succeeds.

Issue #748
2013-06-10 10:44:10 +02:00
Stephan Mueller
96e9fcd326 ports: Verify signatures of 3rd-party code
This patch adds integrity checks for the packages of the ports
repository.

Issue #748
2013-06-10 10:44:09 +02:00
Stephan Mueller
64a2447d03 ports: Global variables for integrity check
Add global variables to the signature and hash verification tool to
ports/Makefile for use in the individual make templates.

Issue #748
2013-06-10 10:44:09 +02:00
Stephan Mueller
056e0792e5 libports: Verify signatures of 3rd-party code
This patch adds integrity checks for the packages of the libports
repository.

Issue #748
2013-06-10 10:44:09 +02:00
Stephan Mueller
a140f134c7 libports: Global variables for integrity check
Add global variables to the signature and hash verification tool for use
in the individual make templates.

Issue #748
2013-06-10 10:44:09 +02:00
Stephan Mueller
4f52e793a0 GPG signature verification of tool chain
The downloaded archives for building the tool chain are checked for its
signature before using them. In case of a signature failure, the build
is interrupted.

Issue #748
2013-06-10 10:44:09 +02:00
Stephan Mueller
4c89f4f00f Hash verification tool
This tool verifies the integrity of a given file with a hash. It uses
md5sum, sha1sum and sha256sum as needed.

Issue #748
2013-06-10 10:44:09 +02:00
Stephan Mueller
9b22983e58 GPG signature verification tool
The signature verification tool uses gpg to verify the detached
signature of the given file.

It also tries to obtain the signing key if it is not part of the local
key ring.

Signature verification implies the verification of the integrity and
authenticity of a given file.

Issue #748
2013-06-10 10:44:09 +02:00
Norman Feske
f07973126d News item for Genode 13.05 2013-05-30 10:28:15 +02:00
Norman Feske
87ac608e61 Release notes for Genode 13.05 2013-05-29 20:57:15 +02:00
Stefan Kalkowski
8ac5ae2248 Increase flexibility for serial devices in run-tool
Instead of using a fixed command like picocom in the run tool,
it's better to have the flexibility to set the whole command that
connects to the serial device. Therefore, it's possible for instance
to connect to a remote serial device exported via TCP/IP by using tools
like socat.
2013-05-28 11:40:56 +02:00
Stefan Kalkowski
5e321732df Make NETIO-230B power plug configureable 2013-05-28 11:33:14 +02:00
Stefan Kalkowski
6826a07133 Fix typo in run tool 2013-05-28 11:24:02 +02:00
Christian Prochaska
4a9b1c6aab base-linux: add ARM support
This patch introduces a new platform 'linux_arm' for building and running
Genode/Linux on an ARM device.

Known limitations:

- libc 'setjmp()'/'longjmp()' doesn't currently save/restore floating
  point registers

Fixes #746.
2013-05-24 14:55:37 +02:00
Christian Prochaska
314d5c0975 liquid_fb: dynamic reconfiguration support
With this patch, 'liquid_framebuffer' can be reconfigured at runtime.
The configuration arguments are now provided as XML attributes, matching
those for 'nit_fb'. Furthermore, two new configuration options are added:

<config ...
  resize_handle="off" - show/hide a resize handle widget in the lower
                        right window corner
  decoration="on"     - show/hide window decoration
                        (title bar and borders)
/>

Fixes #740
Fixes #14
2013-05-22 21:30:17 +02:00
Norman Feske
cf9eedca47 Window-resize support for liquid_fb
Related to #740.
2013-05-22 21:29:23 +02:00
Sebastian Sumpf
fbbd2018bb usb: Storage support for ARM 2013-05-22 21:01:14 +02:00
Alexander Tarasikov
3cb6de2e69 Implement LCD output and config parsing for omap4
Fixes #743
2013-05-22 18:58:51 +02:00
Martin Stein
ee28a69c98 hw: fully functional Thread_base::cancel_blocking
Thread_base::cancel_blocking brings a thread back to execution
from every state, except the thread is created but not started yet.

Fix #745
2013-05-22 18:53:18 +02:00
Stefan Kalkowski
89a8c2c211 Update run scripts using usb_drv (fix #744)
Updates all run scripts, which use the usb_drv to enable the appropriated
USB host controllers.
2013-05-22 18:52:54 +02:00
Martin Stein
e164671cd1 ahci_drv: basic support for exynos 5
This is a first version of the AHCI driver. It supports SATA HDDs
with UDMA-133 only, up to 6 Gbps and native command queueing.
The more blocks one transfers with one command, the higher is the
chance that the driver produces a fatal handshake error. Nevertheless
the driver is stable with one block per ATA command. Although NCQ is
used the driver doesn't queue multiple commands simultanously.

The driver was tested with a western digital HDD "WDC WD2500BEVS-08VAT1
13.01A13" (250 GB) with hw_arndale (run/ahci) and foc_arndale
(run/ahci, run/l4linux: dd). SSDs were not tested.

Fix #706
2013-05-22 18:36:55 +02:00
Martin Stein
1c38667a96 base: Mmio::wait_for(...) for whole registers
Ref #706
2013-05-22 18:32:05 +02:00
Martin Stein
1a7efc0df1 os: helper Attached_mmio
Genode::Attached_mmio is the fusion of Genode::Attached_io_mem_dataspace
and Genode::Mmio.

Ref #706
2013-05-22 18:32:05 +02:00
Martin Stein
37c2f101b1 ahci_drv: separate PCI specifics from the rest
Ref #706
2013-05-22 18:32:05 +02:00
Martin Stein
2e7802b799 base-hw: flush cached zeroes in 'clear_ds(...)'
Ref #706
2013-05-22 18:32:05 +02:00
Martin Stein
a0d182e25a hw_arndale: userland timer driver
Ref #706
2013-05-22 18:32:05 +02:00
Martin Stein
65136c2289 hw_arndale: use core local timer in kernel
Ref #706
2013-05-22 18:32:05 +02:00
Stefan Kalkowski
1dc9ab9a95 Adapt i.MX53 fb driver to GPIO session changes 2013-05-21 10:10:43 +02:00
Christian Helmuth
df1209aa89 dde_ipxe: use recent iPXE upstream version 2013-05-21 10:08:34 +02:00
Norman Feske
33c5469b92 vancouver: Improved PS/2 mouse backend
The previous version of the PS/2 mouse backend manged mouse motion
events in a strange way, effectively throwing away most information
about the motion vector. Furthermore, the tracking of the mouse-button
states were missing. So drag-and-drop in a guest OS won't work. The new
version fixes those issues. For the transformation of input events to
PS/2 packets, a the Genode::Register facility is used. This greatly
simplifies the code.
2013-05-20 10:54:59 +02:00
Sebastian Sumpf
8708732e9c usb: Upgrade to Linux-3.9.0 stack 2013-05-18 11:23:02 +02:00
Sebastian Sumpf
cda25a481b usb: Make host controller types configurable
The host controller type (u/e/xhci) usded by the drivers can be configured
through attributes of the config node. See: README
2013-05-18 11:23:02 +02:00
Sebastian Sumpf
6d07fff07c usb: ASIX AX88179 Gigabit-Ethernet Adapter support 2013-05-18 11:23:02 +02:00
Sebastian Sumpf
6928821f52 usb: DWC3 and XHCI support
Arndale platform only.
2013-05-18 11:23:02 +02:00
Sebastian Sumpf
5c78ef20a2 usb: Upgrade to Linux-3.9.0-rc8 stack 2013-05-18 11:23:02 +02:00
Sebastian Sumpf
529e791d66 usb: Upgrade to Linux-3.8.6 stack 2013-05-18 11:23:02 +02:00
Sebastian Sumpf
2faca15b2b base-foc: Set executable bit when mapping pages
If these are not set, this leads to page faults, during code execution on
x86_64, ARM, and x86_32 with PAE enabled.
2013-05-18 11:23:02 +02:00
Alexander Boettcher
99421a2a82 run: switch off IP power_plug adapter after test
Avoid running the native machines if not used after test.
2013-05-17 15:24:50 +02:00
Norman Feske
89d0e68983 vancouver: Improve locking scheme
This patch replaces the error-prone manual locking with the use of the
'Synced_interface' for the motherboard and the VCPU dispatcher. It also
removes all globally visible locks. Locks are now explicitly passed to
subsystems when needed.
2013-05-17 12:05:07 +02:00
Norman Feske
c48a7aa27f vancouver: Avoid busy startup synchronizations 2013-05-17 12:05:00 +02:00
Norman Feske
78204b8f49 Utility for synchronizing interface calls 2013-05-17 12:04:45 +02:00
Norman Feske
ba5906e425 vancouver: handle CPUID 0x40000000
This instruction is issued by Linux when the KVM guest support is
compiled in. We have to return deterministic values to let the Linux
kernel survive.
2013-05-17 12:04:40 +02:00
Alexander Boettcher
688375619a run: extend lwip test for arndale board 2013-05-17 12:04:12 +02:00
Alexander Boettcher
b2fee4c7b1 autopilot: option to keep existing test directory 2013-05-17 12:03:57 +02:00
Alexander Boettcher
da310bd726 tool: create appropriate build.conf for hw_arndale 2013-05-17 12:03:33 +02:00
Alexander Boettcher
6e1b9a823d autopilot: redirect stderr to log file 2013-05-17 11:54:01 +02:00
Alexander Boettcher
7566aaebb9 run: add succeeded message to network_test 2013-05-17 11:52:34 +02:00
Alexander Boettcher
6786e6d04c run: support native l4linux test on panda/arndale 2013-05-17 11:52:19 +02:00
Alexander Boettcher
37cde31eb3 run: add support to run noux_net_netcat natively 2013-05-17 11:51:56 +02:00
Norman Feske
8ac6d8c96c base-hw: Support for Raspberry Pi 2013-05-15 20:48:07 +02:00
Norman Feske
65f20262cb base-hw: Enable caches on ARM v6 2013-05-15 20:48:00 +02:00
Norman Feske
d43d9900ab base-hw: Make memory_region_attr CPU-specific
This patch moves the implementation of the 'Arm::memory_region_attr'
function from the generic ARM code to the ARM v6/v7 specific code
to enable the customization of page-table bits depending on the
specific CPU core type. I.e., the ARM1176 apparently does not cope
well with setting the 'Tex::bits(2)' for MMIO mappings.
2013-05-15 20:47:52 +02:00
Norman Feske
71cd7b9d2e base-hw: Avoid early calls of cmpxchg
This patch eliminates calls of 'cmpxchg' prior enabling the MMU. This is
needed because the 'ldrex' and 'strex' instructions do not always work
with MMU and L1 cache disabled, i.e., on Raspberry Pi.
2013-05-15 20:47:46 +02:00
Norman Feske
ddffc8765e core: Be more precise in IO_MEM error message 2013-05-15 20:47:38 +02:00
Norman Feske
ee572e2f8e Add missing session route to printf.run 2013-05-15 20:47:31 +02:00
Norman Feske
0561538919 Spelling fix 2013-05-15 20:47:24 +02:00
Christian Prochaska
ff28ce77b2 libports: update zlib to version 1.2.8
Fixes #741.
2013-05-15 19:58:46 +02:00
Norman Feske
98cb023f1c seoul: Patch executor/build_instructions.py
We need to specify the actual python version in the build_instructios.py
script too.
2013-05-13 14:36:49 +02:00
Stefan Kalkowski
ae291b557d Extend base-hw specific vm-session (fix #738)
Introduce pause syscall for VM objects, and extend the vm-session interface
to support it.
2013-05-10 11:16:13 +02:00
Alexander Tarasikov
d8f0392c9f Add a service to log into a file
Original version by Alexander Tarasikov, refined by Norman Feske.

Fixes #736
2013-05-10 11:16:13 +02:00
Christian Prochaska
33bb8662a0 tool/run: fix 'interact' command invocation
Use the '-i' option to pass the spawn id to the 'interact' command.

Fixes #737.
2013-05-10 11:16:13 +02:00
Stefan Kalkowski
ef4a4ea654 Implement input driver for i.MX53 tablet (fix #724)
The input driver implements support for the Egalaxy touchscreen and
for Freescale's MPR121 capacitative touch buttons.
2013-05-10 11:16:13 +02:00
Stefan Kalkowski
ca92984bcc Simplify GPIO session interface (fix #707)
Changes GPIO session interface to a one-GPIO-pin-per-session style. Moreover,
this commit introduces a generic driver interface for GPIO drivers. Thereby
generalizes root- and session component for GPIO.
2013-05-10 11:16:12 +02:00
Christian Prochaska
562ac7d059 64-bit fixes
Fixes #734.
2013-05-10 11:16:12 +02:00
Alexander Boettcher
138a37765f run: add support for IP power switch NETIO-230B 2013-05-10 11:16:12 +02:00
Alexander Boettcher
ed825c1d46 nova: fix bootstrap bug
commandline_to_basename may adjust the pointer of the string, recalculate the
length accordingly.
2013-05-10 11:16:12 +02:00
Alexander Boettcher
d1f40b86d9 fix use-after-free bug in loader 2013-05-10 11:16:12 +02:00
Alexander Boettcher
3a884bd873 lwip: add "window scaling" support, RFC 1323
Apply patch from lwip webpage to recent lwip git master branch.
2013-05-10 11:16:12 +02:00
Alexander Boettcher
5e91acbaa9 lwip: use git and master branch 2013-05-10 11:16:12 +02:00
Alexander Boettcher
5bbf1f7eea netperf: use omni and rely on SO_RCVBUF available 2013-05-10 11:16:11 +02:00
Alexander Boettcher
2349cd2dc3 lwip: enable SO_RCVBUF socket option
In issue #313 the SO_RCVBUF was intended to be enabled, however the current
lwip port looks for another define LWIP_SO_RCVBUF instead of LWIP_RCVBUF.

Fixes #716
2013-05-10 11:16:11 +02:00
Alexander Boettcher
86e428cd64 port of netperf server to native Genode 2013-05-10 11:16:11 +02:00
Alexander Boettcher
2beb851c5a run: add acpi spec as default to foc/nova 64bit 2013-05-10 11:16:11 +02:00
Alexander Boettcher
aa98450f71 run: use kdb_uart and acpi_drv with l4linux
Test now succeeds also on native x86 32bit hardware.
2013-05-10 11:16:11 +02:00
Alexander Boettcher
1b8e7820d8 run: update tcp_terminal to run in 64bit setups 2013-05-10 11:16:11 +02:00
Alexander Boettcher
94629ad493 run: adjust lwip pingpong test for x86 2013-05-10 11:16:11 +02:00
Christian Prochaska
cab27dd713 run: adjust lwip pingpong test for foc_arndale 2013-05-10 11:16:10 +02:00
Josef Söntgen
0b906207bb run: add lwip pingpong test using tcp 2013-05-10 11:16:10 +02:00
Alexander Boettcher
85c6640795 run: add support to specify 'serial' via RUN_OPT
If the target machine is connected locally one may specify
"serial" as target in the RUN_OPT variable to get the test output.

Used for panda and arndale on foc and hw.
2013-05-10 11:16:10 +02:00
Alexander Boettcher
df985bda84 run: support RUN_OPT for all platforms
Use RUN_OPT="--target ..." to select the backend test method.

Supported values so far:

qemu     - qemu + grub bootloader (default)
qemu+pxe - qemu + pulsar bootloader (PXE)
amt      - Intel AMT (reset+serial output) + pulsar bootloader

Related to issue #598
2013-05-10 11:16:10 +02:00
Alexander Boettcher
5c6f13b0d3 run: lwip use is_qemu 2013-05-10 11:16:10 +02:00
Alexander Boettcher
b5d3be9c85 run: add nic driver performance test
A run script which sends raw ethernet packets from the host machine to the
target machine. Three tests are implemented:
- The network_stat instrumented driver of usb_drv and net_drv
  are used to get the raw receive performance of the network driver.
- A simple nic_session client is receiving from the un-instrumented network
  driver raw ethernet packets.
- A bridge is added between driver and simple nic_session client.
2013-05-10 11:16:10 +02:00
Alexander Boettcher
0920e322c2 net: nic session client using net_stat lib
A simple nic session client using the performance measurement library.
2013-05-10 11:16:10 +02:00
Alexander Boettcher
901439211c net: net_stat instrumented version of usb_drv 2013-05-10 11:16:10 +02:00
Alexander Boettcher
3ace475f2d net: net_stat instrumented version of iPXE driver 2013-05-10 11:16:09 +02:00
Alexander Boettcher
a36813cf6f net: add library for performance measurements 2013-05-10 11:16:09 +02:00
Alexander Boettcher
5249c0875c run: extend noux to run automatically natively 2013-05-10 11:16:09 +02:00
Alexander Boettcher
2a761c7fea run: extend genode_until_run by a spawn id
genode_until_run can be called now with a spawn id to able to reattach to a
spawned process (amt, serial output). Run scripts can now call genode_until_run
multiple times.
2013-05-08 09:42:44 +02:00
Alexander Boettcher
267239147a run: introduce explicit wait_for_output
To be used by base-* run/env scripts
2013-05-08 09:42:44 +02:00
Alexander Boettcher
5485fe6f18 run: add support to query qemu support
To be used by the base-* specific run/env scripts to choose the appropriate
test backend.
2013-05-08 09:42:44 +02:00
Norman Feske
0b660eb033 Blacklist failsafe.run test on L4/Fiasco 2013-05-08 09:38:32 +02:00
Norman Feske
4715ad18b0 Spelling fix 2013-05-07 21:59:15 +02:00
Norman Feske
2aa22a25ee Adapt chroot.run to changed timer 2013-05-07 21:56:07 +02:00
Norman Feske
1589820d05 Add missing route to chroot_loader test
Additionally, we do the cleanup of the remains of a previously failed
run prior creating the run directory. Otherwise, the directly creation
may fail because of a pending bindmount.
2013-05-07 21:56:07 +02:00
Norman Feske
c54fef9274 Add missing route to lx_uid.run 2013-05-07 21:56:07 +02:00
Martin Stein
ef572f7ef8 hw & core: provide env_context_area_rm_session()
Ref #734
2013-05-07 21:56:07 +02:00
Christian Prochaska
ea3adfef9a Create the context area RM session at startup
With this patch, the thread context area RM session gets created at
program startup to have the thread context area's virtual address range
reserved right from the beginning.

Fixes #734.

This patch implies that all Genode processes try to create an RM
session. So a route to the RM service must be present even for processes
that have only a single thread. Hence, the patch contains an update of
affected components.
2013-05-07 21:56:07 +02:00
Christian Prochaska
b8d690b9aa libc_lwip: accept 'AF_INET' sockets only
lwIP only supports the 'AF_INET' domain, but doesn't check the 'domain'
argument of the 'lwip_socket()' function.

This patch avoids an error message from lwIP when the Arora browser
tries to connect a socket of the 'AF_LOCAL' domain.

Fixes #732.
2013-05-07 21:56:07 +02:00
Norman Feske
cc5fddb0a2 Loader: Free entries of parent-service registry
The parent-service registry is populated on demand by the
'Loader::Child' whenever a prior unknown service is requested. Since the
number of parent services is limited, we expect the registry to settle
after a while. However, each loader session has a private instance of
a parent-service registry. So when creating and destroying loader
sessions, parent registries will be populated again and again. We
have to make sure to discard the entries along with the destruction
of a loader session to avoid the leakage of memory.

Issue #717
2013-05-07 21:56:06 +02:00
Norman Feske
0355591445 lx_hybrid: Safety check when freeing thread
Try to free the metadata of a thread only if created by Genode. The code
did not cause any actual problems. I just stumbled over the inconsistency
while reviewing the code.
2013-05-07 21:56:06 +02:00
Norman Feske
09e04d6378 Avoid leakage of signal-source reply capabilities
Issue #717
2013-05-07 21:56:06 +02:00
Norman Feske
5d969cffaf base-linux: Fix condition in ~Reply_channel
Issue #717
2013-05-07 21:56:06 +02:00
Norman Feske
e39ff055ba base-linux: Fix use-after-free problem of ds fds
Fixes #717
2013-05-07 21:56:06 +02:00
Stefan Kalkowski
511cab6192 Remove superfluous pl11x target.mk file (fix #722) 2013-05-07 21:56:06 +02:00
Stefan Kalkowski
cddd69a122 Double buffering for i.MX53 fb driver (fix #721)
Enable optinal support for double buffering in the i.MX53 framebuffer
driver. This prevents flickering in certain scenarios, where applications
directly render in the framebuffer dataspace given by the driver.
2013-05-07 21:56:06 +02:00
Stefan Kalkowski
0950b2f340 Rework i.MX53 framebuffer driver
* Simplify IPU register definitions using templates
* Distinguish between i.MX53 QSB and SMD board in driver
* Support IPU specific overlay mechanism by framebuffer session extension
2013-05-07 21:56:06 +02:00
Stefan Kalkowski
4fe158a320 Implement platform driver for i.MX53 platform
Move clock and reset controller functionality out of framebuffer driver
into platform driver.
2013-05-07 13:04:30 +02:00
Nikolay Golikov
d2f5deaf33 Implement i.MX53 framebuffer driver 2013-05-07 13:04:30 +02:00
Stefan Kalkowski
a5d236475a Unify GPIO driver binary names to 'gpio_drv'
Introduce 'gpio' SPEC variable to easily support a corresponding driver within
run scripts.
2013-05-07 13:04:30 +02:00
Nikolay Golikov
1d1081c910 Implement i.MX53 gpio driver 2013-05-07 13:04:30 +02:00
Stefan Kalkowski
8e9e866161 Unify framebuffer driver binary names (fix #720)
Introduce 'framebuffer' SPEC variable to distinguish hardware framebuffer
drivers furthermore from the SDL framebuffer driver used by Genode/Linux.
2013-05-07 13:04:30 +02:00
Stefan Kalkowski
8aad441ef0 Remove obsolete Fiasco UX framebuffer driver 2013-05-06 18:50:35 +02:00
Sebastian Sumpf
4873f35945 LWIP: Use LWIP_SO_RCVBUF instead of LWIP_RCVBUF
The name of this option has changed

Issue #382
2013-05-06 18:50:35 +02:00
Christian Prochaska
ac8633e0e9 Update Qt to version 4.8.4
Fixes #703.
2013-05-06 18:50:35 +02:00
Martin Stein
028ef7d776 mmio: fix bug in read/write array items
Fix #668
2013-05-06 11:11:04 +02:00
Christian Prochaska
89109cf377 core: preserve more memory
core needs to preserve more memory when built with -O0 for the 64-bit
'linux_x86' platform

Fixes #727.
2013-05-06 11:11:03 +02:00
Christian Prochaska
411d736d04 ldso: increase 'MEM_SIZE' in 'mmap()'
Fixes #728.
2013-05-06 11:11:03 +02:00
Christian Prochaska
e879cb1c32 libc_fs: don't throw exception in 'open()'
Fixes #729.
2013-05-06 11:11:03 +02:00
Christian Prochaska
339a0354ce libc_lwip_nic_dhcp: provide '/etc/resolv.conf'
With this patch, the 'libc_lwip_nic_dhcp' plugin provides the DNS server
address acquired by lwIP via DHCP in the file '/etc/resolv.conf'.

This feature can be disabled from the config file:

<libc resolv="no" />

The static network interface configuration attributes are now also a part
of the '<libc>' config node:

<libc ip_addr="..." netmask="..." gateway="..." />

Fixes #731.
2013-05-06 11:11:03 +02:00
Christian Prochaska
d184599a89 libc: print 'not implemented' in pthread stubs
Print a 'not implemented' debug message if one of the libc-internal
pthread dummy functions gets called.

Fixes #730.
2013-05-06 11:11:03 +02:00
Norman Feske
6f294eddc2 Fix warning about initializer of 'Local_addr'
Fixes #726
2013-05-06 11:11:03 +02:00
Alexander Boettcher
f6d31d7243 dde_ipxe: catch exception instead of dying silently
Fix #593
2013-04-26 16:49:20 +02:00
Alexander Boettcher
958cdffa7b dde_ipxe: fix null pointer de-referencing
Issue #593
2013-04-26 16:49:09 +02:00
Alexander Boettcher
30927f68a7 check wakeup situation in rx() after dequeuing
Issue #593
2013-04-26 16:48:54 +02:00
Stefan Kalkowski
814652d243 Add dependency rule for CXX_OBJECTS (fix #719) 2013-04-26 16:47:15 +02:00
Stefan Kalkowski
de2b5c0925 Fix alignment bug in memcpy_arm (fix #718) 2013-04-26 16:42:59 +02:00
Alexander Boettcher
fb0ca69fe4 libports: make include paths absolute
If contrib and/or download in libports are symlinks, then using ".." ends up
in the wrong directory. Use CURDIR variable set by make.
2013-04-15 13:14:04 +02:00
Alexander Boettcher
b85447c602 run scripts: add "Test succeeded" message
Issue #679
2013-04-12 10:56:27 +02:00
Alexander Boettcher
5d04f88816 lwip: adjust test to run with remote machine (AMT)
Issue #679
2013-04-12 10:56:27 +02:00
Alexander Boettcher
8a393183e9 run: PXE+AMT support for x86 kernels
Issue #679
2013-04-12 10:56:27 +02:00
Alexander Boettcher
455f606f31 run: add Pulsar PXE boot support for x86 kernels
Issue #679
2013-04-12 10:56:27 +02:00
Alexander Boettcher
fff1a374ed run: add Intel AMT support to x86 kernels
Issue #679
2013-04-12 10:56:27 +02:00
Alexander Boettcher
3593c7fb4d run: move general AMT support to tool/run
Issue #679
2013-04-12 10:56:27 +02:00
Martin Stein
e9f4e6b37d base: bug in util_mmio.run
Fix #659
2013-04-12 10:52:29 +02:00
Stefan Kalkowski
ba9e7185a8 Omap4 sd_card driver: fix recursive usleep loop
This commit removes an endless loop, that occurred when the sd_card driver
called usleep, or msleep on its Timer_delayer object. Fixes #705

Also fixes the same problem for the Omap4 GPIO driver.
2013-04-12 10:51:45 +02:00
Norman Feske
d339eb734f base-hw: Fix error message in run env 2013-04-10 14:33:47 +02:00
Martin Stein
4b224dd67e base-hw: store Platform_pd pointer in Kernel::Pd
This enables the kernel to print out the label of the program
a thread belongs to.

fix #662
2013-04-09 14:24:25 +02:00
Norman Feske
f3ef943bd8 Add missing libports includes to .gitignore 2013-04-09 12:03:49 +02:00
Christian Prochaska
1500d59d0d nic_bridge: drop 'gratuitous ARP' messages
'Gratuitous ARP' broadcast messages are used to announce newly created
IP<->MAC address mappings to other hosts. nic_bridge-internal hosts
would expect a nic_bridge-internal MAC address in this message, whereas
external hosts would expect the NIC's MAC address in this message.
The simplest solution to this problem is to just drop those messages,
since they are not really necessary.

Fixes #709.
2013-04-08 18:48:40 +02:00
Norman Feske
242d51033f terminal_mux.run: Don't use uart_drv on Fiasco.OC 2013-04-08 11:42:25 +02:00
Martin Stein
ea7ed5947a base: hand over Pd_connection label to Platform_pd
fix: #656
2013-04-08 11:42:24 +02:00
Alexander Boettcher
8bc14eb75a usb: enable 64bit support for x86
Fix #436
2013-04-05 12:55:59 +02:00
Martin Stein
dc814ff0f1 timer: bugfix and test trigger_periodic (run/timer)
Fix #699
2013-04-05 12:51:30 +02:00
Norman Feske
5da281c1d8 libports: Add GNU FriBidi 2013-04-05 12:49:55 +02:00
Norman Feske
7552d352b6 libports/SDL: Add ttf, image, mixer, loadso 2013-04-05 12:49:55 +02:00
Norman Feske
973fdae9d8 libc_fs: Fix seek report for ro (non-append) files 2013-03-29 22:48:44 +01:00
Norman Feske
e4c28a1739 terminal_mux: Free ncurses meta data 2013-03-27 19:27:25 +01:00
Norman Feske
0d01fd829f heap: Reduce maximum chunk size to 1 MiB on 32bit
With the previous maximum, the heap would allocate chunks of up to 4
MiB, which may lead to overly large slack memory.
2013-03-27 19:27:25 +01:00
Norman Feske
3968766170 lwip: Print IP address in release mode 2013-03-27 19:27:25 +01:00
Norman Feske
e5c57bddcc Add ports-foc to build.conf for foc_arndale 2013-03-27 19:27:25 +01:00
Norman Feske
2bbe840597 core: Handle disappearing managed dataspaces
This patch adds the consideration of suddenly disappearing managed
dataspaces in the 'Rm_session_component::reverse_lookup' function.
Previously, this case resulted in a seamingly valid translation.

Fixes #701
2013-03-27 19:27:24 +01:00
Stefan Kalkowski
ae1985bde2 l4lx: avoid creation of redundant thread for vcpus
This commit simplifies the creation of additional threads and VCPUs in L4linux.
By now, some Genode::Thread_base methods where overridden to use a Fiasco.OC
specific Cpu_session when creating threads.
Recent commit: 297538678e moved the actual creation
of the platform thread into the constructor of the generic Thread_base class.
Thereby the Vcpu class, which extended the Thread_base class, now unnecessarily
created two platform threads for each thread created via Vcpu. Nowadays, the
cpu_session capability is available via the Genode::env() environment. So we can
use the Thread_base parent class for the setup of the platform thread, and
afterwards create a Fiasco.OC specific cpu session client with the same cpu
session capability, Thread_base used for creation, to make use of the L4Linux
specific features of this interface (VCPU enabling, irq object creation etc.).
2013-03-26 17:59:59 +01:00
Stefan Kalkowski
074e522990 base-foc: introduce state in platform thread
When destroying a thread, which was not bound to a protection domain via kernel
primitives beforehand, it is critical to change the pager and exregs the thread
in the destruction process. Therefore, this commit introduces two thread states:
DEAD and RUNNING. On the basis of the thread state, we can decide whether to
reset the thread before destroying it, or not.
2013-03-26 17:59:44 +01:00
Christian Prochaska
9a4887dcad New 'l4linux_dynamic.run' script
This run script allows the user to dynamically start and stop L4Linux
instances using a command-line interface over a serial line.
2013-03-26 17:06:17 +01:00
Sebastian Sumpf
bdc15a4f28 sd_card: Support multiple DMA descriptors 2013-03-26 12:21:45 +01:00
Christian Prochaska
3f9bf7e5dd Add missing route to timer 2013-03-26 12:21:45 +01:00
Christian Prochaska
5600328d83 terminal_mux: Clear terminal when activating menu
This patch clears the terminal each time the menu appears and thereby
wipes away artifacts that might occur when combining terminal_mux with
kdb_uart_drv and the kernel prints messages directly.
2013-03-26 12:21:45 +01:00
Christian Prochaska
ff3b73825d terminal: Add escape handling for CUB
This VT102 command is triggered by busybox when pressing the 'pos1' key.
2013-03-26 12:21:44 +01:00
Christian Prochaska
cae79d30b8 cli_monitor: Support dynamically linked binaries 2013-03-26 12:21:44 +01:00
Christian Helmuth
da2076e52a usb: fix support for HID keyboard
This fixes issues with several HID keyboards by implementing
get_unaligned_le16(), which obviously may also fix other not-yet-known
issues. Hint: I had to look out for suspicious lines like follows in the
verbose log.

  [init -> usb_drv] get_unaligned_le16 called, not implemented

Also, quirks for cherry keyboards are now applied.
2013-03-26 12:21:44 +01:00
Alexander Boettcher
9a1d13c32d panda: add route to timer in run script
Fix #700
2013-03-25 11:21:32 +01:00
Norman Feske
b06cc3250a Coding style fixes 2013-03-23 13:37:57 +01:00
Norman Feske
c56525f264 cli_monitor: Add reboot command for Fiasco.OC
In addition to the new reboot command, this patch tries to reduce the
artifacts caused by the interplay of the kernel debugger and
terminal_mux.
2013-03-22 21:41:50 +01:00
Norman Feske
26710729a3 Suppress warnings in release mode
Fixes #698
2013-03-22 17:28:07 +01:00
Norman Feske
613d980ff4 Remove debug message 2013-03-22 17:23:52 +01:00
Sebastian Sumpf
c27364f2df sd_card: Enable 8-bit/52Mhz mode for eMMC 2013-03-22 16:35:31 +01:00
Norman Feske
3b71a9c986 Add missing licensing headers 2013-03-22 15:31:16 +01:00
Sebastian Sumpf
a3afb3dae4 sd_card: Exynos5/MMC support
Added MMC specific parts to Sd-card implemntation. Read/Write takes advantage of
DMA. Currently we leave card in one bit mode.
2013-03-22 15:28:52 +01:00
Sebastian Sumpf
95a16adb6f sd_card: Make OMAP4 'sd_card.h' default 2013-03-22 15:26:13 +01:00
Norman Feske
e1d0839e19 terminal: Check bounds of cursor position
Thanks @cproc for the fix.
2013-03-22 15:24:29 +01:00
Norman Feske
c36909e5dc acpi: Adjust device_pd quota for 64bit machines 2013-03-22 12:45:31 +01:00
Norman Feske
839c0263c9 Fix warning on 64bit
Because the template instantiation rules of C++ do not deal well with
null pointers specified as '0', the constructor of 'Local_addr' was
instantiated for [T = int], which does not make sense. To avoid the
warning "cast to pointer from integer of different size", we need to
explicitly state that '0' is a pointer. In C++11, there is the 'nullptr'
keyword, but until we switch to this version, we have to state (void *)0.
2013-03-22 12:41:21 +01:00
Alexander Boettcher
1730132ef1 usb: fix linux header include setup phase
In usb.inc all required Linux include files of the Linux code are looked up
by 'sed'ing through the files of SRC_C and SRC_CC. The Linux include files
are then added as dependency to the SRC_C and SRC_CC files and during dependency
resolution symbolic links to the lx_emul.h will be created.

In the platform specific usb.mk file there are the Linux driver files
added, but unfortunately after including usb.inc. So, for them no dependency
to any Linux include header file is generated and so no symbolic files are
generated.

If the driver code file is compiled as first, as for asix.c, the symbolic links
of the include files are missing and compilation fails.

Add the Linux driver code files to SRC_C before including usb.inc in the
platform specific usb.mk files.
2013-03-21 17:09:08 +01:00
Norman Feske
dfe4fd177d cli_monitor: Add foc-specific kdebug command 2013-03-21 15:50:32 +01:00
Norman Feske
022e762a40 timer: Remove debug message 2013-03-21 15:49:27 +01:00
Norman Feske
e38983a8fa Simple thread-affinity test 2013-03-21 12:54:02 +01:00
Norman Feske
297538678e foc: Create thread at core at construction time
Originally, a thread was created at core not before calling the 'start'
function. In order to configure the thread affinity before starting the
thread, we have to make the thread known at core right at construction
time. This patch moves the needed thread-creation sequence from the
'start' function to the '_init_platform_thread' function.
2013-03-21 12:47:42 +01:00
Norman Feske
d7f85ef81f Add cli_monitor to terminal_mux.run 2013-03-21 11:44:34 +01:00
Norman Feske
05027c7935 Simple CLI for managing Genode subsystems 2013-03-21 11:44:34 +01:00
Norman Feske
22f65d1afe Move gems/include/terminal to os/include/terminal
The terminal utilities provided under 'include/terminal' depend on the
base API and the 'os' repository only. So we can incorporate them into
'os'.
2013-03-21 11:44:34 +01:00
Norman Feske
4498a6b6a0 terminal: Add support for EL0 2013-03-21 11:44:34 +01:00
Norman Feske
764a3656a1 cxx: Decouple C++ runtime from 'env()->heap()' 2013-03-21 11:04:56 +01:00
Christian Prochaska
82aa092dac terminal_mux: increase RAM quota in run script
Fixes #694.
2013-03-20 14:22:43 +01:00
Christian Prochaska
570156b38c l4lx: allocate memory in chunks
When L4Linux tries to allocate a dataspace of the size of its physical
memory, this allocation can fail, because the 'l4re_ma_alloc()' function
in the 'l4lx' library always tries to allocate a contiguous dataspace of
the given size and there might be no contiguous free area left.

With this patch, memory gets allocated in chunks: if the size to be
allocated exceeds the configured chunk size, a managed dataspace gets
created and filled with multiple memory chunks of at most the chunk size.

The chunk size is 16M by default and can be configured in an l4linux
config node:

<config args="...">
	<ram chunk_size="16M"/>
</config>

Fixes #695.
2013-03-20 14:22:04 +01:00
Sebastian Sumpf
3ae2c1712e base-foc: Do not touch memory during map operation
Don't do anything in Mapping::prepare_map_operation.  At this point and in the
current implementation, the memory has been mapped and cleared already. Touching
the memory may only pollute the cache causing data corruption in DMA memory.

Fixes issue #452
2013-03-20 10:06:16 +01:00
Alexander Boettcher
c95a6c54ea usb: grab urb sizes from driver
Instead of hardcoding the values, ask the driver for the supported sizes and
allocate the skb allocators accordingly.
2013-03-20 10:06:16 +01:00
Alexander Boettcher
9abf88c195 usb: add network support for arndale board 2013-03-20 10:06:16 +01:00
Sebastian Sumpf
78c752b1c7 usb: Rewrote back-end allocators
Allocate back-end memory dynamically.
2013-03-20 10:06:16 +01:00
Torsten Hilbrich
87f83c1cff build.mk: Fix dependency on $(LIB_DEP_FILE)
The previous fix in 6b33757154 was
invalid.
2013-03-20 10:02:34 +01:00
Alexander Boettcher
ac9c8c769c remove obsolete port target 2013-03-20 10:00:54 +01:00
Christian Prochaska
452624e1a6 Fiasco(.OC) KDB UART driver
The KDB UART driver uses the Fiasco(.OC) kernel debugger console as backend
for input and output. This is useful in the case that only one UART is
available.

Fixes #665.
2013-03-18 15:28:16 +01:00
Markus Partheymüller
4bb0a8231e vancouver: calculate STACK_SIZE from addr_t size.
This is necessary on 64bit host.
2013-03-18 13:10:29 +01:00
Alexander Boettcher
8bc719ee1d nova: show badge as name during page fault message 2013-03-18 13:10:21 +01:00
Alexander Boettcher
e85e11bec1 vmm: try to reserve lower virtual address space
It's not guaranteed to be robust and will break in the future - I told you.

Related to issue #365, issue #519, issue #666
2013-03-18 13:10:03 +01:00
Markus Partheymüller
40e27b2379 vancouver: correct framebuffer size. 2013-03-18 13:09:53 +01:00
Markus Partheymüller
b8eb9b534d Switch to Seoul VMM repository instead of NUL
In this version of the transition the Hip structure from Genode is reused,
@nfeskes seoul_libc_support is used for the string functions and the
nul/config.h is replaced by just using a constant value in the one place where
the file was needed.

Related to #666.
2013-03-18 13:09:45 +01:00
Norman Feske
9d0a377efe Add 'seoul_libc_support' library
This library contains the subset of the libc that is needed for the
Seoul VMM.

Related to issue #666.
2013-03-18 13:09:16 +01:00
Alexander Boettcher
0c8b996fa4 base: calculate initial junk based on 32/64 host
Issue #666
2013-03-18 13:07:22 +01:00
Christian Prochaska
b38fee2867 L4Linux stability improvements
- search for alternative virtual address regions upwards, starting from
  the given start address, in the 'l4re_rm_attach()' and
  'Region_manager::reserve_range()' functions

- don't treat memory locations above 0x80000000 in l4linux's virtual
  address space as device memory

- align the start address of the vmalloc area according to the assumption
  in 'devicemaps_init()'

Fixes #414.
2013-03-18 13:06:06 +01:00
Christian Prochaska
a59b2e3f16 terminal: 'ED' command fix
Fixes #691.
2013-03-18 13:02:21 +01:00
Christian Prochaska
0530ff3241 terminal: weaken color argument order requirement
With this patch, the escape sequence decoder can handle a two-argument
'SGR' command with the attribute/color arguments in any order.

Fixes #690.
2013-03-18 13:02:02 +01:00
Norman Feske
171aa332b7 foc: Extend irq mode heuristics
Explicitly set default mode for legacy interrupts to not rely on kernel
default settings. This patch fixes the constantly busy IRQ threads for
IRQ 1 and 12 as soon as the PS/2 driver was loaded until the point when
the first IRQ occurred.
2013-03-14 19:24:52 +01:00
Norman Feske
91b0578446 foc: Select "thread-ready" bit in pause function 2013-03-14 16:37:29 +01:00
Stefan Kalkowski
ce58a63fb6 Remove 'epit' from generic i.MX platform spec
Remove the 'epit' variable from the generic imx31 and imx53 specification,
and only add it to base-hw specific i.MX specs. Thereby the EPIT timer
library gets build for base-hw only.
Moreover, fix some const-ness issues in the platform_timer implementation
for the EPIT timer.
Fixes #688.
2013-03-14 11:27:51 +01:00
Stefan Kalkowski
0f38335188 base-foc: remove links to obsolete initrd archives
Fix #686
2013-03-14 10:50:33 +01:00
Stefan Kalkowski
0bc02b439a L4Linux: fix usage of l4_touch_xx (fix #682)
Use size in bytes, when touching memory via l4_touch_ro or l4_touch_rw, instead
of log2 size.
2013-03-14 10:50:14 +01:00
Norman Feske
21de42c45d core: Introduce 'Address_space' interface
The new core-internal 'Address_space' interface enables cores RM service
to flush mappings of a PD in which a given 'Rm_client' thread resides.
Prior this patch, each platform invented their own way to flush mappings
in the respective 'rm_session_support.cc' implementation. However, those
implementations used to deal poorly with some corner cases. In
particular, if a PD session was destroyed prior a RM session, the RM
session would try to use no longer existing PD session. The new
'Address_space' uses the just added weak-pointer mechanism to deal with
this issue.

Furthermore, the generic 'Rm_session_component::detach' function has
been improved to avoid duplicated unmap operations for platforms that
implement the 'Address_space' interface. Therefore, it is related to
issue #595. Right now, this is OKL4 only, but other platforms will follow.
2013-03-12 21:53:08 +01:00
Norman Feske
352f58b94b core: New utilities for object lifetime management 2013-03-12 21:53:08 +01:00
Norman Feske
989f662f46 base-host: Adaptation to changed lock-internal API 2013-03-12 21:53:08 +01:00
Norman Feske
a81ad12372 l4linux.run: Increase quota of PCI driver 2013-03-12 21:50:29 +01:00
Christian Prochaska
90e6cef49b gdb_monitor: increase RAM quotas in run scripts
Fixes #685.
2013-03-11 16:39:51 +01:00
Alexander Boettcher
8f204ffd26 nova: improve page fault debugging messages
Ease debugging.

Fixes #674
2013-03-08 12:15:02 +01:00
Ivan Loskutov
33b59a6276 atapi_drv: Add LBA48 support
Fixes #678
2013-03-08 12:14:38 +01:00
Ivan Loskutov
5725c4c122 Fix l4linux block driver for large partitions
Fixes #678
2013-03-08 12:09:53 +01:00
Alexander Boettcher
38b2a3dbb4 nova: support to run script automatically with AMT
This enables us to use the run scripts applied to a native machine equipped
with Intel's AMT. If the environment variables are correctly set up, the remote
test machine is reseted via 'amttool', then via 'amtterm' the serial output
is collected and the normal run script matching pattern for success/failure of
the run script are applied.

'amttool' and 'amtterm' are part of the package called 'amtterm' shipped with
the Linux distributions like Ubuntu, Debian and lot more.

Following environment variables are required, to run the run scripts with a
native AMT test machine:

PXE_TFTP_DIR_BASE   - absolute path of TFTP directory
PXE_TFTP_DIR_OFFSET - relative path to PXE_TFTP_DIR_BASE where the config file
                      will be generated - named 'config-00-00-00-00-00-00'

AMT_TEST_MACHINE_IP  - TCP/IP address of target AMT test machine
AMT_TEST_MACHINE_PWD - password of target AMT test machine

Issue #679
2013-03-08 12:09:10 +01:00
Josef Söntgen
a875b3ea11 libports: enable SSL in curl
Fixes #681
2013-03-08 12:07:58 +01:00
Josef Söntgen
abf0563815 libports: workaround for downloading libssh
Since checking if the certificate is valid is not that important
(we currently do not check the signature of the archive which is the
bigger issue) we disable the checking to prevent certain wget version
from refusing to download the archive.

Fixes #681
2013-03-08 12:07:31 +01:00
Josef Söntgen
613784f560 libports: fix missing clean-libiconv target
Fixes #681
2013-03-08 12:07:18 +01:00
Christian Helmuth
6f2e36279a Use mkisofs to create ISO images
mkisofs is the original ISO creation tool from cdrtools available on
many UNIX systems. genisoimage on the other hand is part of a mostly
unmaintained fork of cdrtools very specific to Debian Linux and its
derivates (e.g., Ubuntu). Fortunately, genisoimage (as we used it) is
completely invocation-compatible to mkisofs.

Fixes #627.
2013-03-07 13:41:30 +01:00
Christian Helmuth
05b7c3ae3d base-foc: Improve documentation of signal_session
Fixes #566.
2013-03-06 11:23:52 +01:00
Norman Feske
bcd6ef8fab Spelling fix (thanks @udosteinberg) 2013-03-01 12:35:42 +01:00
Norman Feske
a41f77a78a Minor style fix 2013-02-28 12:40:07 +01:00
Norman Feske
94067cf799 News item for Genode 13.02 2013-02-28 10:33:33 +01:00
Norman Feske
803ed988d4 Release notes for Genode 13.02 2013-02-28 09:59:52 +01:00
Norman Feske
371c11829f doc: Update components.txt 2013-02-28 09:59:44 +01:00
Alexander Boettcher
398fa76cdb vancouver: adjust run script to use acpi+iommu 2013-02-27 17:48:58 +01:00
Alexander Boettcher
48ea3c35b5 nova: zero out space behind rom modules
Fixes #675
2013-02-27 16:50:40 +01:00
Alexander Boettcher
b2d92f3d94 nova: optimize unmap path
Directly unmap memory range instead of looking first it up and then unmap it.

Prerequisite for #675
2013-02-27 16:50:27 +01:00
Alexander Boettcher
974c5442c6 nova: don't try to prepare UTCB in case of vCPU
vCPU has no UTCB.

Fixes #673
2013-02-27 16:47:21 +01:00
Alexander Boettcher
751af95b46 lwip: adjust run script to run with new pci_drv 2013-02-27 16:47:21 +01:00
Alexander Boettcher
269efd1d6d dde_ipxe: alloc DMA memory via dde_kit 2013-02-26 18:24:21 +01:00
Alexander Boettcher
415b50032e dde_kit: support to allocate DMA buffer per device 2013-02-26 18:24:12 +01:00
Alexander Boettcher
be0fa1f63a dde_kit: enable pci lookup by device_class
Instead of trying all PCI devices by a specific PCI driver, now the device or
the device class can be limited to the one actually supported by the specific
driver.
2013-02-26 18:24:03 +01:00
Christian Prochaska
ce075c05b9 Skip Qemu execution for the Arndale platform
Fixes #672.
2013-02-26 15:17:00 +01:00
Christian Prochaska
621b579023 base-foc: fix 'core' build for Arndale
Fixes #671.
2013-02-26 12:56:44 +01:00
Martin Stein
571f8fb2f3 omap_fb_drv: use usleep in 'Timer_delayer'
fix #670
2013-02-25 22:14:22 +01:00
Alexander Boettcher
430d4064b8 acpi: free mapping of rsdp before using rsdt/xsdt
Fix #635
2013-02-25 22:14:22 +01:00
Norman Feske
57b0c4dd52 demo: Avoid debug message in demo/src/lib/mini_c
The "strncpy - not implemented" message appeared on the use of libpng.
Even though it did not cause trouble, spilling the log with such
easy-to-fix issues should better be avoided.
2013-02-25 22:14:22 +01:00
Norman Feske
134f54a602 noux_tool_chain_nova: Don't restrict to Fiasco.OC
Thanks to @alexab's recent work on base-nova and the NOVA kernel, the
test is expected to run successfully on NOVA too.
2013-02-25 22:14:22 +01:00
Norman Feske
4fbd74f3aa nova: Support upgrading kernel via 'make prepare' 2013-02-25 22:14:22 +01:00
Norman Feske
fb3933faf3 nova: use bender by default
Bender fixes the serial output on modern PC hardware. Prior this patch,
it was used only when combined with pulsar. Now, we also use it when
booting via GRUB.
2013-02-25 22:14:22 +01:00
Alexander Boettcher
0ac6be3c70 nova: fix boot modules and command line bootstrap
Allocate ever an extra page behind the commandline pointer. If it turns out
that this page is unused, because commandline was short enough, unmap the
memory and put the virtual and physical regions back to the allocator.

Fix #664
2013-02-25 22:14:21 +01:00
Josef Söntgen
323ab39582 libports: add iconv-1.14
Fixes #669
2013-02-25 22:14:21 +01:00
Josef Söntgen
f3864f673b libports: add curl-7.29.0
For now the port is x86_* only because it depends on libcrypto which
is currently not available (as in tested) on arm.

Fixes #669
2013-02-25 22:14:21 +01:00
Josef Söntgen
814c6fc9d5 libports: add libssh-0.5.4
Fixes #669
2013-02-25 22:14:21 +01:00
Josef Söntgen
15dc2f3642 libports: add missing import-libcrypto.mk
Fixes #669
2013-02-25 22:14:21 +01:00
Christian Prochaska
a99193ad90 Rework the internal lock interface
With this patch, the 'futex' syscall gets used for blocking and unblocking
of threads in the Linux-specific lock implementation.

The 'Native_thread_id' type, which was previously used in the
lock-internal 'Applicant' class to identify a thread to be woken up,
was not suitable anymore for implementing this change. With this patch,
the 'Thread_base*' type gets used instead, which also has the positive
effect of making the public 'cancelable_lock.h' header file
platform-independent.

Fixes #646.
2013-02-25 22:14:21 +01:00
Norman Feske
7fef0ba931 base: Increase stack size of signal thread
On foc_pbxa9, the stack size did not suffice within core.
2013-02-25 16:45:50 +01:00
Norman Feske
4828a2daf2 ports-foc: Adaptation to Fiasco.OC rev 47 2013-02-25 16:45:50 +01:00
Alexander Boettcher
b4805af5bc nova: update kernel revision to r2
Fix #667
2013-02-25 16:45:50 +01:00
Alexander Boettcher
801d09f166 nova: revoke set portal id right
Revoke the right to set the portal id (aka label) when it is not needed
anymore. Otherwise everybody in the system having a mapping of the portal can
reset the label to something we don't expect.

Issue #667
2013-02-25 16:45:50 +01:00
Alexander Boettcher
46447d531e nova: add syscall pt_ctrl bindings
Issue #667
2013-02-25 16:45:49 +01:00
Christian Prochaska
2664afbd7d Remove context area from physical RAM allocator
In base-fiasco, base-foc and base-pistachio, physical memory gets mapped
1:1 to core virtual memory. When the 'Ram_session_component' allocates
physical memory for a client, it zeroes out the corresponding area in
core's virtual address space and then maps the area to the client. If this
area overlaps with core's virtual thread context area (usually at
0x40000000-0x4fffffff), the stack of one or more core threads can get
overwritten.

To avoid this problem, with this patch, the thread context area gets
removed from the physical RAM allocator on these platforms.

Fixes #660.
2013-02-25 16:45:49 +01:00
Alexander Boettcher
439315d918 timer: Don't set default cap as custom cap
Without the patch the signal cap was ever transferred to the timer session
when a usleep/msleep was called, even when unneeded. On base-nova this
causes the allocation of new capability indexes which are not freed up.
So the timer service run quickly out of indexes and get out of order...

Related to issue #1
2013-02-25 16:45:49 +01:00
Norman Feske
26e8e0ebdd Add the 'cxx' lib in base.mk for 64-bit Linux
This is a follow-up fix for fae63f4fa9.
Thanks to Christian Prochaska for the patch.
2013-02-25 16:45:49 +01:00
Torsten Hilbrich
ab89304ffd base-linux: Don't busywait if lx_pollpid returns 0
This happened when I killed one of the genode clients which was
tracked via an expception_handler. In this case the wait4 syscall
returned 0 and the for(;;) was looped eternally. This caused an
100% CPU utilization for the core binary.
2013-02-25 16:45:49 +01:00
Torsten Hilbrich
257cf4800d Fixed some unused parameters warnings
They cause problems when using -Werror in your compilation.
2013-02-25 16:45:49 +01:00
Sebastian Sumpf
6ef3f0f153 usb: Move driver into library
This raised the opportunity to structure the library more cleanly for each
supported platform.
2013-02-25 16:45:49 +01:00
Sebastian Sumpf
ebc76fc13b foc: SVN revision r47 2013-02-25 16:45:49 +01:00
Sebastian Sumpf
e901bca416 usb: Arndale EHCI controller support 2013-02-25 16:45:48 +01:00
Sebastian Sumpf
79949bb338 foc: Add 'uboot' spec to Arndale 2013-02-25 16:45:48 +01:00
Sebastian Sumpf
f9ba60e501 foc: Make context area configurable in core
Make 'context_area_virtual_base' platform configurable. On Arndale, we
need to move the context area to a location that does not interfere with
the address range of physical memory.
2013-02-25 16:45:48 +01:00
Sebastian Sumpf
6e034efca4 foc: Use L2-cache synchronization calls
Replace L1 cache clean operations with L2 versions.
2013-02-25 16:45:48 +01:00
Sebastian Sumpf
f3ba58059a foc: Arndale kernel configuration 2013-02-25 16:45:48 +01:00
Sebastian Sumpf
b10d6deb37 foc: Change core's base address 2013-02-25 16:45:48 +01:00
Sebastian Sumpf
7389e364fa Arndale: Build uImage, kernel, bootstrap 2013-02-25 16:45:48 +01:00
Sebastian Sumpf
805d5050f7 base-foc: Generate u-boot image if 'uboot' SPEC is set 2013-02-25 16:45:48 +01:00
Sebastian Sumpf
554876ceee foc_arndale: Added 'create_buildir' support 2013-02-25 16:45:47 +01:00
Sebastian Sumpf
fe13cd2938 foc: SVN revision r42 2013-02-25 16:45:47 +01:00
Sebastian Sumpf
0ef936a1a0 foc: Use git for contrib preparation
Download Fiasco.OC/L4RE from our 'GitHub' fork. Deleted all patches.
2013-02-25 16:45:47 +01:00
Norman Feske
a61bd71a4f Terminal multiplexer
The new terminal_mux server is able to provide multiple terminal
sessions over one terminal-client session. The user can switch
between the different sessions using the keyboard shortcut C-y,
which brings up an ncurses-based menu.
2013-02-25 16:45:47 +01:00
Norman Feske
97b27ee62f ncurses: Add vt102 to builtin termcaps 2013-02-22 20:28:28 +01:00
Norman Feske
1009d00168 libc: Handle dup2 with two equal arguments 2013-02-22 20:28:28 +01:00
Norman Feske
fbd4b5f6df libc_terminal: Support for dup2 and TIOCGWINSZ 2013-02-22 20:28:28 +01:00
Norman Feske
d1c2a7126a terminal: Generalize character-screen code
This patch moves the further reusable parts of the terminal into public
header files. It also slightly tweaks the color table to give all colors
a similar brightness level.
2013-02-22 20:28:28 +01:00
Martin Stein
438b8be2fa base-hw: destroy signal contexts, generic signal.h
fix #641
2013-02-22 20:28:28 +01:00
Martin Stein
0f8803245a base: make signal framework usable for base-hw
ref #641
2013-02-22 20:28:28 +01:00
Alexander Boettcher
b35484b8b0 nova: enable iommu in kernel by default 2013-02-22 20:28:27 +01:00
Alexander Boettcher
5f90b93f80 ahci: adjust run script to run with new pci_drv 2013-02-22 20:28:27 +01:00
Alexander Boettcher
554ab8372f usb_hid: adjust run script to run with new pci_drv 2013-02-22 20:28:27 +01:00
Alexander Boettcher
ffeb4f5816 oss: adjust run script to run with new pci drv 2013-02-22 20:28:27 +01:00
Alexander Boettcher
7e7fa81c8f acpi: reserve 2MB for ACPI and rest is for PCI_DRV 2013-02-22 20:28:27 +01:00
Alexander Boettcher
6d25c735d2 usb: use pci_drv on x86 to allocate dma memory 2013-02-22 20:28:27 +01:00
Alexander Boettcher
5a067a101a dde_linux: use pci_drv with class code/mask 2013-02-22 20:28:27 +01:00
Alexander Boettcher
934983465c oss: use pci_drv with class code/mask 2013-02-22 20:28:26 +01:00
Alexander Boettcher
d447910520 ahci: use pci_drv with class code/mask 2013-02-22 20:28:26 +01:00
Alexander Boettcher
3a85d16597 pci: support to lookup dev via class code/mask 2013-02-22 20:28:26 +01:00
Alexander Boettcher
e05adecfab pci: add device_pd functionality 2013-02-22 20:28:26 +01:00
Alexander Boettcher
2123f3f7e8 ahci: allocate dma-able memory via pci_drv 2013-02-22 20:28:26 +01:00
Alexander Boettcher
d58439ca56 pci: provide dma-able memory via pci_drv 2013-02-22 20:28:26 +01:00
Alexander Boettcher
c36f6a04a7 nova: extend pd_session by assign_pci function 2013-02-21 11:52:02 +01:00
Alexander Boettcher
c114014c1c nova: kernel patch for assign_pci
Apply lookup of pci config memory address to target pd.
2013-02-21 11:52:02 +01:00
Alexander Boettcher
467eec731f nova: set default receive and translate windows 2013-02-21 11:52:02 +01:00
Alexander Boettcher
250f7b1570 nova: update syscall assign_gsi/_pci for 32/64 bit 2013-02-21 11:52:02 +01:00
Alexander Boettcher
ff062f24ff nova: map write_combined ds as dma able 2013-02-21 11:52:02 +01:00
Alexander Boettcher
1c2f76cd2a nova: add support to specify dma mapping flag 2013-02-21 11:52:02 +01:00
Alexander Boettcher
5380c09c6f nova: construct pager name out of client name
Ease debugging to find out which client is dying actually.
2013-02-21 11:52:02 +01:00
Alexander Boettcher
c374f294c8 pci: add support to provide PCI ECMA config 2013-02-21 11:52:02 +01:00
Alexander Boettcher
822b4f2d96 acpi: provide pci express style configs to pci_drv
Parse the mcfg table and  provide the extended PCI config space data via
the config file to the pci_drv.
2013-02-21 11:52:02 +01:00
Alexander Boettcher
ba566a1530 acpi: add MCFG table parsing 2013-02-21 11:52:02 +01:00
Norman Feske
002ea7cfc4 uart_drv: Mechanism for detecting terminal size 2013-02-20 22:10:32 +01:00
Martin Stein
79d5f9c565 base-hw: Adaptation to new base library layout
This is a follow-up fix of fae63f4fa9

Fix #18
2013-02-20 19:41:49 +01:00
Martin Stein
251d08d511 base-hw: useless default assignment in syscalls.h
fix #588
2013-02-20 19:41:21 +01:00
Martin Stein
96fbd9e832 base-hw: provide SIGNAL service in nested_init.run
ref #601
2013-02-20 19:40:58 +01:00
Martin Stein
5d8a43dd08 base-hw: rework 'run/env', enable '--target uboot'
ref #601
ref #598
2013-02-20 19:40:46 +01:00
Martin Stein
60fbbc1fd1 hw_arndale: enable nested init test
fix #601
2013-02-20 19:39:16 +01:00
Martin Stein
f6ede8cf0d arndale: base/mk platform spec
ref #601
2013-02-20 19:38:57 +01:00
Martin Stein
07b856bc8a cortex_a15: base/mk spec
ref #601
2013-02-20 19:38:42 +01:00
Martin Stein
86ddcffaf2 arndale: board driver base
ref #601
2013-02-20 19:38:32 +01:00
Martin Stein
638dcf3d40 arndale: UART driver base
ref #601
2013-02-20 19:37:58 +01:00
Martin Stein
1f95a9be03 hw_arndale: create builddir support
ref #601
2013-02-20 19:37:45 +01:00
Martin Stein
86785e70e6 base-hw & arm_v7: fix CPU initialization bug
ref #601
2013-02-20 19:37:36 +01:00
Martin Stein
02fccf5cb2 base-hw: fix bug in 'Platform_thread::pager()' 2013-02-20 19:37:25 +01:00
Christian Prochaska
0a2e8909ee base-codezero: initialize 'exregs_data' objects
Fixes #651.
2013-02-20 19:30:07 +01:00
Martin Stein
2a9a653b2b timer & hw & omap4: compile bug in Platform_timer
fix #652
2013-02-20 19:29:24 +01:00
Martin Stein
3047e32dfd base-hw & arm: bugs when zero-filling BSS
fix #654
2013-02-20 19:29:00 +01:00
Norman Feske
34ec65f2a8 timer & foc: use KIP->clock as curr_time 2013-02-20 15:20:38 +01:00
Christian Prochaska
dc0ac78b34 usb_drv: prevent recursive signal dispatch
Fixes #649.
2013-02-20 14:54:13 +01:00
Christian Prochaska
519bed419d core: preserve more memory
core needs to preserve more memory when built with -O0 for the 64-bit
'linux_x86' platform

Fixes #653.
2013-02-20 14:53:42 +01:00
Norman Feske
b618c9343e Remove os/config
This patch moves the os/config examples to their respective run scripts,
removes some of them, and moves the priority example to the src/init
directory (where other examples are located).

Additionally, this patch adapts the OKL4-specific priority.run test to
the recent changes of the timer interface.
2013-02-20 14:49:16 +01:00
Norman Feske
ebc73f66df Remove base-mb platform
This base platform is no longer maintained.

For supporting the Microblaze CPU in the future, we might consider
integrating support for this architecture into base-hw. Currently
though, there does not seem to be any demand for it.
2013-02-20 13:17:39 +01:00
Norman Feske
ce67b73dca Update example configurations
With the change of the Timer::Session interface, all scenarios that use
the timer use core's SIGNAL service. So we need to route sessions
accordingly.

In addition to the adaptation to the changed timer, this patch removes
some stale examples that predate the run tool and are no longer used.
2013-02-19 14:45:55 +01:00
Norman Feske
fae63f4fa9 Merge base libraries into a single library
This patch simplifies the way of how Genode's base libraries are
organized. Originally, the base API was implemented in the form of many
small libraries such as 'thread', 'env', 'server', etc. Most of them
used to consist of only a small number of files. Because those libraries
are incorporated in any build, the checking of their inter-dependencies
made the build process more verbose than desired. Also, the number of
libraries and their roles (core only, non-core only, shared by both core
and non-core) were not easy to capture.

Hereby, the base libraries have been reduced to the following few
libraries:

- startup.mk contains the startup code for normal Genode processes.
  On some platform, core is able to use the library as well.
- base-common.mk contains the parts of the base library that are
  identical by core and non-core processes.
- base.mk contains the complete base API implementation for non-core
  processes

Consequently, the 'LIBS' declaration in 'target.mk' files becomes
simpler as well. In the most simple case, only the 'base' library must
be mentioned.

Fixes #18
2013-02-19 14:45:55 +01:00
Norman Feske
4c3d49459b moon.run: Increase quota of 'test-moon'
With the use of the new timer interface, each timer client uses signals.
Hence, programs that have not used signals before will consume slightly
more quota. This is the case for the moon test (triggered on foc_x64_64
only).
2013-02-14 17:23:47 +01:00
Norman Feske
165bb96cd3 Increase timeout of signal.run test 2013-02-14 13:26:43 +01:00
Norman Feske
2f2410fdff base-host: Build fixes 2013-02-14 13:23:37 +01:00
Norman Feske
14b9589780 xvfb: Adaptation to timer and framebuffer changes 2013-02-14 13:23:37 +01:00
Norman Feske
1ab0ae908b base-hw: Adaptation to signal API change
This patch is an interim fix for building base-hw until the signal
implementation is revisited on this platform.
2013-02-14 13:23:37 +01:00
Norman Feske
a8202c98dc pistachio: Remove dead code 2013-02-14 13:23:37 +01:00
Norman Feske
bcdc706f42 Unify 'ipc.h' and 'ipc_generic.h' across platforms
The distinction between 'ipc.h' and 'ipc_generic.h' is no more. The only
use case for platform-specific extensions of the IPC support was the
marshalling of capabilities. However, this case is accommodated by a
function interface ('_marshal_capability', '_unmarshal_capability'). By
moving the implementation of these functions from the headers into the
respective ipc libraries, we can abandon the platform-specific 'ipc.h'
headers.
2013-02-14 13:23:37 +01:00
Norman Feske
bbca9912e2 Remove 'Native_lock' type from 'native_types.h' 2013-02-14 13:23:36 +01:00
Norman Feske
b1f63e3356 Turn 'platform_env.h' into a private header
This patch removes 'platform_env.h' from the public API headers because
this header was not part of the API anyway.
2013-02-14 13:23:36 +01:00
Norman Feske
cb225a1216 Adaptation to Timer::Session change 2013-02-14 13:23:33 +01:00
Norman Feske
20a5c86a22 timer: Build platform-specific parts as lib
By using the build system's library-selection mechanism instead of many
timer targets with different 'REQUIRES' declarations, this patch reduces
the noise of the build system. For all platforms, the target at
'os/src/drivers/timer' is built. The target, in turn, depends on a
'timer' library, which is platform-specific. The various library
description files are located under 'os/lib/mk/<platform>'. The common
bits are contained in 'os/lib/mk/timer.inc'.
2013-02-14 10:36:06 +01:00
Norman Feske
3049c1004c Turn 'Timer::Session' into asynchronous interface
The 'Timer::Session::msleep' function is one of the last occurrences of
long-blocking RPC calls. Synchronous blocking RPC interfaces turned out
to be constant source of trouble and code complexity. I.e., a timer
client that also wants to respond to non-timer events was forced to be a
multi-threaded process. This patch replaces the blocking 'msleep' call
by a mechanism for programming timeouts and receiving wakeup signals in
an asynchronous fashion. Thereby signals originating from the timer can
be handled along with signals from other signal sources by a single
thread.

The changed interface has been tested on Linux, L4/Fiasco, OKL4, NOVA,
L4ka::Pistachio, Codezero, Fiasco.OC, and hw_pbxa9. Furthermore, this
patch adds the timer test to autopilot.

Fixes #1
2013-02-14 10:36:06 +01:00
Norman Feske
0ed8797df2 Add sanity check to AVL tree, fix #597 2013-02-13 16:01:25 +01:00
Norman Feske
80ab1bf3ef l4linux.run: increase timeout for test 2013-02-13 15:09:23 +01:00
Norman Feske
4b8f991f52 vancouver: coding style 2013-02-13 15:09:23 +01:00
Alexander Boettcher
b0d23abaa7 vancouver: keep one cap_session
Cap_sessions and portals created via the sessions are nowadays freed up during
c++ object destruction. Because of that the exception portals for a vCPU thread
get be revoked as soon as the cap_session object leaves its scope.

Keep one cap_session for the whole lifetime of the vmm to avoid disappearing
exception portals.

Related to #582.
2013-02-13 15:09:23 +01:00
Markus Partheymueller
47cc2f8590 vancouver: run script for booting Linux VMs
The setup now uses nitpicker and nit_fb to display several instances of
vancouver. The guest OS binaries must be supplied in the
'<build-dir>/bin' directory manually.

Furthermore, the patch lets launchpad pass Block, Nic, and Rtc to the
parent.
2013-02-13 15:09:23 +01:00
Markus Partheymueller
3a533779e4 vancouver: RTC support 2013-02-13 15:09:23 +01:00
Markus Partheymueller
5b1156a3e2 rtc_drv: new service interface 2013-02-13 15:09:23 +01:00
Markus Partheymueller
cbf4a7b0c3 vancouver: Disk support
Vancouver can now assign block devices to guests using the Block
interface. The machine has to be configured to use a specified drive,
which could be theoretically routed to different partitions or services
via policy definitions. Currently the USB driver only supports one
device. Genode's AHCI driver is untested.

If the session quota is too low, random pagefaults can occur on the
stack.

According to @Nils-TUD, it is necessary to protect the DiskCommit
messages with a lock against deadlocking with the timer. Observations
showed that this mitigates some problems with Gentoo on real hardware.
2013-02-13 15:09:23 +01:00
Markus Partheymueller
1c447d98e9 vancouver: Network support
Vancouver is now able to use the Intel 82576 device model from NUL to
give VMs access to the network via the nic_bridge service. In order to
integrate the device model, it had to be renamed to i82576 due to XML
limitations. This is done by a patch applied via the 'make prepare'
mechanism.

Although current network card models in Vancouver panic if they can't
get a MAC address, the OP_GET_MAC hostop now fails gracefully in the
case where no nic_drv or nic_bridge is available.
2013-02-13 15:09:22 +01:00
Markus Partheymueller
1ca0a66ea9 vancouver: Console support
The guest VM can now be provided with a framebuffer and keyboard input.

Mouse positioning of the guest is a problem. Because the PS2 model applies
some calculations to the movement values, it can happen that overflows mess
with the cursor.  Therefore the handling was changed and only movements of 1
and -1 are sent.  Since absolute positioning is not possible with PS2, we
have to live with this limitation until USB HID is implemented.

For the framebuffer size in Vancouver the configuration value in the machine
XML node is used.  It is possible to map the corresponding memory area
directly to the guest, regardless if it is from nitpicker,
liquid_framebuffer or vesa_drv.  The guest is provided with two modes (text
mode 3 and graphics mode 0x114 (0x314 in Linux).

Pressing LWIN+END while a VM has focus resets the virtual machine. Also,
RESET and DEBUG key presses will not be forwarded to the VM anymore.
It is possible to dump a VM's state by pressing LWIN+INS keys.

The text console is able to detect idle mode, unmaps the buffer from the
guest and stops interpreting.  Upon the next pagefault in this area, it
resumes operation again.  The code uses a simple checksum mechanism instead
of a large buffer and memcmp to detect an idle text console.  False
positives don't matter very much.
2013-02-13 15:09:22 +01:00
Markus Partheymueller
2d2373a03b vancouver: Timer support
This required usleep to be added to the timer interface.
2013-02-13 15:09:22 +01:00
Markus Partheymueller
aea0a7284f vancouver: Inline module support 2013-02-12 21:51:18 +01:00
Markus Partheymueller
5c886b4962 vancouver: Nested events during EPT violation
When an EPT/NPT fault occurs during IDT vectoring, the original event must
be reinjected.  Additionally we may have to inject an IRQ window if another
event is already pending.
2013-02-12 21:51:10 +01:00
Markus Partheymueller
1434d0948a vancouver: VMX support, improved SVM portals 2013-02-12 21:50:48 +01:00
Markus Partheymueller
14307c778a Add -std=gnu++11 flag to Vancouver Makefile
Most recent upstream version need this to be build successfully.
2013-02-12 21:31:44 +01:00
Christian Prochaska
8f12e555af lx_hybrid: reserve thread context area for core
core does not use POSIX threads when built for the 'lx_hybrid_x86'
platform, so we need to reserve the thread-context area via a segment in
the program to prevent clashes with vdso and shared libraries.

Fixes #639.
2013-02-12 14:13:16 +01:00
Alexander Boettcher
5fff9eb860 acpi: use xsdt on 64bit if available
Fix #155
2013-02-12 14:12:30 +01:00
Alexander Boettcher
44e7aa7d61 acpi: fix uninitialized members of element object
The default constructor didn't initialize all members, some of them holding
pointers. In the de-constructor the _name pointer was tried to free up, even
when it was not initialized.

Avoid any hassle for uninitialized members and just initialize it. Fixes
sporadic page fault on x86_64 base-nova.

Issue #155
2013-02-12 14:12:12 +01:00
Christian Prochaska
1947d08e78 Use the host c++ for linking hybrid applications
Some shared libraries of the host system contain search paths for finding
other needed shared libraries. These paths get evaluated only by a native
linker. To find all needed shared libraries, with this patch, the host
linker is used to link hybrid applications.

Fixes #645.
2013-02-12 12:53:35 +01:00
Alexander Boettcher
764f8335d0 base: reset _last_applicant variable
Fixes #647
2013-02-11 12:54:04 +01:00
Alexander Boettcher
ee8eea9330 nova: fix lock guard usage in cap selector
Issue #549
2013-02-11 12:11:48 +01:00
Alexander Boettcher
64dbe08359 nova: kill thread with no pager where recall fails
Issue #549
2013-02-11 12:01:27 +01:00
Alexander Boettcher
6c7661ed62 base: fix sporadic context thread area faults
reverts 68156918ee
"base: apply thread.cc fix of foc to base"

Depending on the context area a fixed location is calculated where the
memory for the stack is attached to. If the context area is released before the
detach call, the very same context area can be reused and memory for the new
stack is attached for a new thread. The detach of the old thread would then
revoke the mapping for the new thread which will cause a un-handled page fault.

Issue #549
2013-02-11 12:01:27 +01:00
Norman Feske
9acad80f37 core: support upgrades of init's Env:: sessions 2013-02-11 12:01:27 +01:00
Norman Feske
62bb85255a libc_lwip: use libc's 'get-/freeaddrinfo()'
This patch reduces problems when connecting Arora to lighttpd via
nic_bridge. Patch by Christian Prochaska
2013-02-11 12:01:27 +01:00
Norman Feske
622959ede4 core: always release Irq_proxy startup lock
Prior this patch the startup lock was not released if the call of
'_associate()' failed. In this condition, the caller of the constructor
was infinitely blocked.
2013-02-11 12:01:27 +01:00
Alexander Boettcher
7868156b19 base: fix deadlock in core_env on base-nova
During a ram_session->free call in 'core' the lock in core_env.h is taken.
Then in the ram_session::_free_ds implementation the dissolve function for the
dataspace is called. base-nova tries to make sure that the ds is not
accessible anymore by any kind of parallel incoming IPC by performing a
cleanup IPC. Unfortunately the dataspace_session implementation uses the very
same allocator in 'core' and may require to obtain the same lock as taken in
ram_session->free. This leads to a spurious deadlock on base-nova.

The actual free_ds implementation is mostly thread safe, since all used objects
inside there are already locked. The only missing piece is the _payload
variable. By changing the _payload variable in a atomic fashion there is no
need to lock the whole ram_session->free call which avoids deadlocks on
base-nova.

Fixes #549
2013-02-11 12:01:26 +01:00
Alexander Boettcher
edd30b56a2 nova: fix pager cleanup handling
The cleanup call must be performed already during the _dissolve function
shortly after the object at the cap_session is freed up. Otherwise there
is the chance that an in-flight IPC will find the to be dissolved function
again.

Bomb test triggered the case, that a already dissolved rpc_object was found
by a in-flight IPC. If the rpc_object was already freed up by alloc->destroy
the thread using this stale rpc_object pointer cause page-faults in core.

Fixes partly #549
2013-02-11 12:01:26 +01:00
Alexander Boettcher
28f7cf5dc2 nova: fix cleanup handling in server object
As first step the rpc object must be freed up so that the kernel object
(portal) vanishes. Then the object must be removed from the internal object
pool list so that the object can't be obtained anymore. And then the cleanup
call can be performed (_leave_server_object) since now all names to the
rpc_object are gone.

Doing it in different order (as before the commit) there is a very very little
chance (but the bomb test triggers it occasionally) that the rpc_object can be
obtained again by an incoming IPC - even it is already scheduled for removal.

Fixes partly #549
2013-02-11 12:01:26 +01:00
Alexander Boettcher
f50d816555 base: fix dangling session pointers in rm_session
If page faults are handled concurrently (as for base-nova) the traverse lookup
call in rm_session_component must be thread safe, which it isn't.
If the faulting area is backed by nested dataspaces which are managed by
various rm_sessions then a race happens under following circumstances
(triggered occasionally by the bomb test).

The traverse lookup may return a pointer to a rm_session of a nested dataspace.
If the rm_session is in parallel subject to destruction it happened that faults
got enqueued to the faulters list of the deleted rm_session and internally to
a list of the current rm_session of the Rm_client.

During destruction of the faulting Rm_client the associated rm_session will
be dissolved from the Rm_client, which leads to dereferencing the
dangling pointer of the already destructed rm_session.

On base-nova the memory of the rm_session object get unmapped eventually, so
that the de-referencing of the dangling pointer caused page faults in core.

The memory on other kernels inside core never get unmapped so that the
bug doesn't trigger visible faults.

The patch replace the keeping of a rm_session pointer by keeping a
capability instead. The rm_session object must be looked up now explicitly in
the Object_pool implementation, which implements proper reference counting on
the rm_session object.

Issue #549
2013-02-11 12:01:26 +01:00
Alexander Boettcher
08d87adb4b nova: use kernel branch adjusted to Genode
Since we have now more than a handful patches to the vanilla kernel, we
better switch to a separate git repository in order to review and to maintain
the patches more effectively.

Remove the patches, they are already in the kernel branch.

Fixes #394
2013-02-11 12:01:26 +01:00
Alexander Boettcher
f762e8e4fd nova: increase number of available cap indexes
Noux test requires some more indexes. We don't free all up because of a missing
reference counting implementation of indexes in base-nova.

Issue #394
2013-02-11 12:01:25 +01:00
Alexander Boettcher
f7c0a480da codezero: fix compiler warnings int/unsigned
Warnings like the following:

warning: narrowing conversion of ‘((Genode::Platform_pd*)this)->Genode::Platform_pd::_space_id’ from ‘int’ to ‘Codezero::l4id_t {aka unsigned int}’ inside { } is ill-formed in C++11 [-Wnarrowing]
2013-02-11 12:01:25 +01:00
Alexander Boettcher
9453d319cb base: add remove_client to rm_session
Fixes #13
2013-02-11 12:01:25 +01:00
Alexander Boettcher
f02958b25f base: fix faults in rm_session de-constructor path
First make the clients inaccessible and dissolve them from the entrypoint. If
this isn't the first step the clients may be obtained again between
the unlock and lock steps in the destructor.

Additionally the clients may be removed in between the unlock and call
sequence, which renders such client pointers dangling and causes spurious page
faults. Keep instead a lock as long as possible and when it is required to
release a lock, then the pointer to the objects must be revalidated.

Replace the dissolve function with a remove_client implementation as suggested
by #13, which avoids that the cpu_session may call dissolve with a dangling
pointer of a already removed rm_client object. Instead the pager must be
released explicitly.

Related to issue #549
Related to issue #394
Related to issue #13
2013-02-11 12:01:25 +01:00
Christian Prochaska
cecfbf2eb4 lx_hybrid_ctors: remove 'soname' link option
This patch removes the 'soname' link option for building the host
library for the 'lx_hybrid_ctors' test. Without this option, the
library's absolute path at build time gets hardcoded into the
application, which should be okay for this simple test case.

Fixes #638.
2013-01-28 11:34:14 +01:00
Norman Feske
b530fddf86 noux_bash.run: Don't require usb_drv on x86 2013-01-27 18:34:45 +01:00
Norman Feske
5d65308e63 File system: Let session quota depend on word size
By basing the session quota on sizeof(long), we satisfy server-side
quota demands on 64 bit.

Fixes #619
2013-01-27 18:31:35 +01:00
Stefan Kalkowski
d76babf260 L4Android: re-enable x86 version (fix #632)
Adapt x86 L4Android configuration to fit recently updated version.
2013-01-25 11:29:02 +01:00
Alexander Tarasikov
e2d03a3777 Update l4android to kernel 3.5, sync with l4linux 2013-01-25 11:29:02 +01:00
Ivan Loskutov
291064b5c1 nic_bridge: Add tests for static IP address configuration 2013-01-24 11:35:56 +01:00
Ivan Loskutov
bc18e2991b nic_bridge: Add static IP address configuration 2013-01-24 11:35:56 +01:00
Ivan Loskutov
2271f3e7b3 libc_lwip_nic_dhcp: Add static IP configuration 2013-01-24 11:35:56 +01:00
Norman Feske
c2a8c48574 Coding style fixes 2013-01-24 11:35:56 +01:00
Norman Feske
e5b30847db tar_rom: let unkown file throw Root::Invalid_args 2013-01-24 11:12:10 +01:00
Norman Feske
61dd83a329 Adapt qt4 to Input::Event changes
We need to make the event checks more explicit because 'code' is not
exclusively used for key event anymore.
2013-01-24 11:11:02 +01:00
Alexander Boettcher
486b27a1b8 nova: ease debugging if no cap indexes are left
If we ran out of capabilities indexes, the bit allocator throws an exception.
If this happens the code seems to hang and nothing happens.

Instead one could catch the exception and print some diagnostic message.
This would be nice, but don't work. Printing some diagnostic message itself
tries to do potentially IPC and will allocate new capability indexes at
least for the receive window.

So, catch the exception and let the thread die, so at least the instruction
pointer is left as trace to identify the reason of the trouble.

Fixes #625
2013-01-24 11:09:15 +01:00
Alexander Boettcher
e817163f1a nova: use lock guard instead of explicit calls
If an exception is thrown the lock is released automatically, so that
other callers may get a capability index if in between some are freed. Fixes
some deadlocks if Genode is short on capability indexes.

Related to #625
2013-01-24 11:05:41 +01:00
Alexander Boettcher
17ca0290a1 base: fix wrap around bug in avl allocator
Fix #631
2013-01-24 11:05:02 +01:00
Ivan Loskutov
8eba4440eb Fix OMAP4 uart driver compilation
Fixes #630
2013-01-24 11:04:12 +01:00
Stefan Kalkowski
4f69bd9fb8 Remove timer from hello run script (fix #629)
Currently, the hello run script of the hello_tutorial misses some services the
timer driver needs on various platforms. The hello_tutorial is meant for
educational purposes only. So it's desireable to keep it simple. Instead of
complexifying the configuration, this commit just removes the timer from the
example.
2013-01-24 11:03:27 +01:00
Stefan Kalkowski
04b8418b54 Let memcmp correspond to the C standard (fix #628)
By now, the memcmp implementation of Genode's basic string utilities just
returned whether two memory blocks are equal or differ. It gave no hint which
block is greater, or lesser than the other one. This isn't the behaviour
anticipated by implementations that rely on the C standard memcmp, e.g. GCC's
libsupc++, or the nic_bridge's AVL tree implementation.
2013-01-24 11:02:49 +01:00
Christian Prochaska
b4980e8b9f Linux: use 'SYS_wait4' instead of 'SYS_waitpid'
'SYS_waitpid' does not exist on x86_64 Linux, but 'SYS_wait4' does.

Fixes #615.
2013-01-24 11:00:07 +01:00
Christian Prochaska
49206d7cf6 Arora: disable 'not implemented' messages
This patch disables the '_sigprocmask called, not implemented' messages.

Fixes #623.
2013-01-21 11:40:38 +01:00
Christian Prochaska
1fdee7a2cc libc_lock_pipe: implement F_GETFL 'fcntl()' command
Fixes #622.
2013-01-21 11:40:38 +01:00
Norman Feske
3cb7476cb7 Increase quota of d3m 2013-01-21 11:40:38 +01:00
Alexander Boettcher
6cc0d69aa7 nova: recall thread if exception can't be resolved
Recall faulting thread and block pager thread. The pager get resumed as soon
as the fault gets resolved by the rm_session (or never ever).

Fixes #621
2013-01-21 11:40:38 +01:00
Alexander Boettcher
ac5b814387 base: enable rm_fault test case for nova
Related to #621
2013-01-16 16:06:36 +01:00
Christian Prochaska
36a37b9866 Arora demo: make Nitpicker plugin work
Fixes #620.
2013-01-16 16:06:02 +01:00
Christian Prochaska
e2889f3f11 Increase signal handler stack size
Fixes #616.
2013-01-15 19:26:18 +01:00
Christian Prochaska
5c6d5081b0 Qt4: add route to 'SIGNAL' service
Fixes #617.
2013-01-15 19:25:52 +01:00
Christian Prochaska
a6acab6d0d Synchronize signal context destruction
With this patch, the 'Signal_receiver::dissolve()' function does not return
as long as the signal context to be dissolved is still referenced by one
or more 'Signal' objects. This is supposed to delay the destruction of the
signal context while it is still in use.

Fixes #594.
2013-01-15 15:03:21 +01:00
Christian Prochaska
f109f4b02d Noux: initialize the 'termios' structure
Fixes #614.
2013-01-15 12:09:00 +01:00
Norman Feske
59e0dc3538 News item about road map 2013 2013-01-15 11:26:02 +01:00
Norman Feske
2d7342a074 Road map for 2013 2013-01-15 10:53:22 +01:00
Norman Feske
bf6636a987 doc: Clarify tool chain location 2013-01-15 10:18:12 +01:00
Norman Feske
2dba94eba9 Nitpicker: avoid potential dangling pointer 2013-01-15 10:18:12 +01:00
Norman Feske
7b11075264 Nitpicker: move 'asci_to<Color>' to public header
This function is worth reusing outside of nitpicker.
2013-01-15 10:18:12 +01:00
Norman Feske
4d8cd2b5c5 Nitpicker: add const qualifiers 2013-01-15 10:18:12 +01:00
Norman Feske
d04acd651e Qt4: get source code from mirror server
Related to issue #613
2013-01-15 10:18:12 +01:00
Norman Feske
fcca4f3466 Init: handle reconfiguration
With this change, init becomes able to respond to config changes by
restarting the scenario with the new config. To make this feature useful
in practice, init must not fail under any circumstances. Even on
conditions that were considered as fatal previously and led to the abort
of init (such as ambiguous names of the children or misconfiguration in
general), init must stay alive and responsive to config changes.
2013-01-15 10:18:12 +01:00
Norman Feske
fe734272bc Make 'config()' convenience utility more robust
This patch improves the config handling by falling back to a static
string (empty "<config />") if no valid config ROM module could be
found. This can happen initially, but also at runtime when the ROM
module dissapears, e.g., a ROM module accessed via fs_rom where the
corresponding file gets unlinked.
2013-01-15 10:18:11 +01:00
Norman Feske
1aa9f9910c Add 'Service_registry::remove_all' function
This function is needed when reconfiguring init.
2013-01-15 10:18:11 +01:00
Norman Feske
af66043b79 New Input::Event::FOCUS, rename keycode to code
This patch introduces keyboard-focus events to the 'Input::Event' class
and changes the name 'Input::Event::keycode' to 'code'. The 'code'
represents the key code for PRESS/RELEASE events, and the focus state
for FOCUS events (0 - unfocused, 1 - focused).

Furthermore, nitpicker has been adapted to deliver FOCUS events to its
clients.

Fixes #609
2013-01-15 10:18:11 +01:00
Norman Feske
267817c2c5 Add new 'fs_rom' service
The 'fs_rom' service provides files stored on a file system as ROM
modules via the ROM-session interface.

Fixes #606
2013-01-15 10:18:11 +01:00
Norman Feske
7217ea14d8 nit_fb: Respond to config changes at runtime
This patch enables 'nit_fb' to respond to dynamic changes of its
configuration, in particular the view position and refresh rate.
2013-01-15 10:18:11 +01:00
Norman Feske
fca8994584 Introduce notifications to file-system interface
This patch extends the file-system interface with the ability to monitor
changes of files or directories. The new 'File_system::sigh' function
can be used to install a signal handler for an open node.

The 'ram_fs' server has been enhanced to support the new interface. So
any file or directory changes can now be observed by 'ram_fs' clients.

Fixes #607
2013-01-15 10:18:07 +01:00
Norman Feske
7318c5d7d4 Add const version of 'Path::base' accessor 2013-01-12 21:32:07 +01:00
Robert Campbell
f7b1bf8745 Update url of freetype-2.3.9
Fixes #611
2013-01-12 15:20:13 +01:00
Robert Campbell
17966b707b Fix download of jbig2dec
Fixes #613
2013-01-12 15:20:09 +01:00
Norman Feske
8fe0c6c91c base-nova: Coding style 2013-01-11 23:11:07 +01:00
Norman Feske
bef78dd9f8 Core: Fix registration of CPU exception handler 2013-01-11 22:16:25 +01:00
Norman Feske
16e6f4b784 Remove debug message 2013-01-11 21:21:35 +01:00
Norman Feske
4fd932f7c1 Reduce debug messages of UART driver 2013-01-11 21:07:22 +01:00
Norman Feske
0ca774592f Fix default base-nova/etc/specs.conf 2013-01-11 20:54:46 +01:00
Christian Helmuth
9dae5ee490 USB: Use real HID driver in dde_linux
Before, usb_drv included both the real HID driver and also Linux's early
boot USB driver (BP). The BP drivers have been removed now.

Fixes #440.
2013-01-11 15:38:16 +01:00
Norman Feske
35f767ec38 Add acpi spec value for nova_x86_32 and foc_x86_32 2013-01-10 23:05:43 +01:00
Sebastian Sumpf
a5d8bb3a22 OKLinux: Remove Genode audio support
Issue #602
2013-01-10 23:05:43 +01:00
Sebastian Sumpf
5aea55e417 Audio: Replace old with new audio interface
Issue #602
2013-01-10 23:05:43 +01:00
Sebastian Sumpf
47bb48bdd6 Audio: Adjust components to new audio interface
OSS driver, ALSA driver, audio-out test, avplay, and mixer

Issue #602
2013-01-10 23:05:37 +01:00
Sebastian Sumpf
238d6a29c5 Audio: New session interface
Issue #602
2013-01-10 21:57:38 +01:00
Norman Feske
73ab30c22c Update copyright headers to 2013 2013-01-10 21:44:47 +01:00
Sebastian Sumpf
1a30bac3ea base: fix memmove implementation
Also make 'memcpy' to behave like memmove on region overlap.

Issue #604
2013-01-10 21:19:22 +01:00
Alexander Boettcher
e8c063a8b4 base: release signal context from signal list
Remove signal context object from signal source component list (_signal_queue)
before destruction, otherwise we get a dangling pointer.

On native hardware for base-nova, the signal source thread triggered page
faults in the Signal_source_component::wait_for_signal() method when the signal
context got freed up in Signal_session_component::free_context but was still
enqueued in Signal_source_component::_signal_queue.

Fixes #600
2013-01-10 21:17:42 +01:00
Christian Prochaska
6fa57141ae Noux: delayed 'Child' object destruction
With this patch the destruction of Noux 'Child' objects gets delayed
further until the exit signal has been dispatched. This prevents the
self-destruction of the signal dispatcher, which is a member of the
'Child' object.

Fixes #603.
2013-01-10 21:16:37 +01:00
Norman Feske
13d4108fea Unify 'Signal_dispatcher' interfaces
Several users of the signal API used custom convenience classes to
invoke signal-handling functions on the reception of incoming signals.
The 'Signal_dispatcher' pattern turned out to be particularly useful. To
avoid the duplication of this code across the code base, this patch
adds the interface to 'base/signal.h'.

Furthermore, the patch changes the 'Signal::num()' return type from int
to unsigned because negative numbers are meaningless here.

Fixes #511
2013-01-10 21:09:14 +01:00
Norman Feske
277af91376 Omit child-name prefix in <if-args> check
When matching the 'label' session argument using '<if-args>' in a
routing table, we can omit the child name prefix because it is always
the same for all sessions originating from the child anyway. Therefore,
this patch adds a special case for matching session labels. It makes the
expression of label-specific routing more intuitive.
2013-01-10 21:09:07 +01:00
Norman Feske
507d467e37 Whitespace fixes 2013-01-10 21:08:59 +01:00
Alexander Boettcher
c2d3543e62 base: replace obj_by_* by lookup_and_lock
Add functionality to lookup an object and lock it. Additional the case is
handled that a object may be already in-destruction and the lookup will deny
returning the object.

The object_pool generalize the lookup and lock functionality of the rpc_server
and serve as base for following up patches to fix dangling pointer issues.
2013-01-10 11:13:13 +01:00
Alexander Boettcher
ca37f26a01 base: add memory barrier before releasing lock
When releasing a lock we must take care that all state is written back to
memory and is not cached in registers. The volatile flag of the lock variable
only means to the compiler that this value must be written immediately.
Other values changed before may be kept by the compiler in registers, which we
don't want here.

Additionally the compiler is free to reorder the code in order to optimize.
That means the code we intend to be executed inside the critical section can
get be reordered and can be executed after we reset the lock variable in the
unlock implementation. The volatile statement of the lock variable doesn't
prevent reordering of instructions which are independent.

By adding a explicit memory barrier, we force the compiler to generate code
that writes back all the register content to memory/cache (and avoid a
bunch of hard to find bugs ...)
2013-01-09 15:34:29 +01:00
Martin Stein
0d7c6efa84 base-hw: Platform_thread::cancel_blocking
Ref #589
2013-01-08 11:36:52 +01:00
Martin Stein
1f340cbdd4 base-hw: use Genode::memcpy in kernel.cc
Fix #583
2013-01-08 11:36:52 +01:00
Martin Stein
19398159e1 base-hw: use Genode::memcpy in base/ipc.cc
Ref #583
2013-01-08 11:36:52 +01:00
Martin Stein
e6ca122fe3 base-hw & arm: write-through cache on uncached RAM
Fix #473
2013-01-08 11:36:52 +01:00
Martin Stein
4fb5c23a3c base-hw: don't use 'long' unnecessarily
Fix #581
2013-01-08 11:36:52 +01:00
Martin Stein
28f81c4a9c base: avoid shift warning in register array
Fix #422
2013-01-08 11:36:52 +01:00
Martin Stein
f2e462266e base-hw & cortex_a9: use caches in pagetable walks
Fix #472
2013-01-08 11:36:52 +01:00
Martin Stein
ac92283db0 base-hw & imx31: userland timer driver
Fix #577
2013-01-08 11:36:52 +01:00
Martin Stein
5f7ffe619b base-hw & imx31: use generic EPIT timer in core
Ref #577
2013-01-08 11:36:52 +01:00
Stefan Kalkowski
5bbcbc74bb os & base-hw: freescale EPIT timer driver
Fix #576
2013-01-08 11:36:52 +01:00
Stefan Kalkowski
edb48873c1 base-hw & imx53: enable nested init
Fix #575
2013-01-08 11:36:52 +01:00
Martin Stein
7f2f2d9120 base-hw: ease core build
Merge core only libs into the target make-files.

Use base-hw specific Board drivers that inherit
from generic Board_base.

Use Page_flags::access_t instead of additional
page_flags_t.

Fix #570
2013-01-08 11:36:52 +01:00
Martin Stein
ee6f25a028 base-hw: reorganize core-driver headers
Ref #570
2013-01-08 11:36:51 +01:00
Martin Stein
f1d599ae8a base: rename generic Board drivers Board_base
To enable a repo to name its specific board driver 'Board'.

Fix #569
2013-01-08 11:36:51 +01:00
Martin Stein
8b568a6029 base-hw: env bug that caused missing boot modules
Fixes #420
2013-01-08 11:36:51 +01:00
Martin Stein
9946f2b42f base-hw: fix clean- and alignment-bugs in env
Ref #420
2013-01-08 11:36:51 +01:00
Martin Stein
37864972b3 base-hw: build vea9x4 libs only with vea9x4 spec
Fix #561
2013-01-08 11:36:51 +01:00
Christian Helmuth
f9cb8a9ac3 dde_ipxe: Properly wrap iPXE interfaces to C++
As iPXE header files are not C++ compatible, the implementation missed
proper include directives. For example, alloc_memblock() had a wrong
signature, which was not detected. Now, C wrapper functions are
implemented using a local API to the C++ backend.

Related to #593.
2013-01-07 18:59:21 +01:00
Norman Feske
d90b0464b8 Change order of thread-context members
Because 'stack' and 'stack_base' are related to each other, it makes
sense to locate both members close to each other.
2013-01-07 17:58:33 +01:00
Norman Feske
0a084ebe52 Add failsafe test to autopilot 2013-01-07 16:31:31 +01:00
Norman Feske
ecdbdef8ee Loader: reflect faults to client
With this patch, the loader installs an optional client-provided fault
handler as default CPU exception handler and RM fault handler for all
CPU and RM sessions of the loaded subsystem. This way, loader clients
become able to respond to failures occuring within the subsystem.

The new feature is provided via the added 'Loader::fault_handler' RPC
function.

The 'run/failsafe' test covers two cases related to the loader, which
are faults produced by the immediate child of the loader and faults
produced by indirect children.
2013-01-07 16:31:27 +01:00
Norman Feske
b0c18d0362 Test case for failure detection detection 2013-01-04 15:26:16 +01:00
Norman Feske
9f82764316 core: Introduce default CPU exception handler
The CPU session interfaces comes with the ability to install an
exception handler per thread. This patch enhances the feature with the
provision of a default signal handler that is used if no thread-specific
handler is installed. The default signal handler can be set by
specifying an invalid thread capability and a valid signal context
capability.

Furthermore, this patch relaxes the requirement of the order of the
calls of 'exception_handler' and 'set_pager'. Originally, the exception
handler could be installed not before setting a pager. Now, we remember
the installed exception handler in the 'Cpu_thread' and propagate to to
the platform thread at a later time.
2013-01-04 15:26:16 +01:00
Norman Feske
9b24115c08 base-linux: fix delegation of invalid capabilities
This patch uses a local_name of -1 to encode an invalid capability.
2013-01-04 15:26:16 +01:00
Norman Feske
693d657e6a base-linux: reflect SIGCHLD as Cpu_session signal
With this patch, core responds to SIGCHLD signals of terminating Genode
processes by reflecting these events as exceptions to the CPU session
interface. This way, Genode processes become able to respond to
terminating Genode child processes.
2013-01-04 15:26:16 +01:00
Norman Feske
38272b9172 base-linux: let core catch SIGCHLD signals 2013-01-04 15:26:16 +01:00
Stefan Kalkowski
62e0dd579e L4lx: eliminate needless Dataspace_client declaration. 2013-01-03 20:51:52 +01:00
Stefan Kalkowski
84512869ed L4lx: fix initramfs part of 'L4Re to Genode' backend
Implement the same semantic like L4Re for the initialization of the initramfs
dataspace. Although, it didn't lead to problems right now, this commit might
prevent future problems.
2013-01-03 20:51:49 +01:00
Norman Feske
dfaecfb5ab Make quota-upgrading message more clear
Fixes #592
2012-12-22 13:04:04 +01:00
Martin Stein
e7bdae62ea base-hw: remove unused library startup_core
Fix #560
2012-12-21 14:54:22 +01:00
Martin Stein
5459291f9d test-fb_block_adapter & base_hw: missing include
Fix #562
2012-12-21 14:54:22 +01:00
Martin Stein
28abd7993c framebuffer: add missing timer
Fix #563
2012-12-21 14:54:21 +01:00
Christian Prochaska
871819336a core: preserve more memory
core needs to preserve more memory when built with '-O0' for the linux_x86
platform.

Fixes #572.
2012-12-21 14:54:21 +01:00
Christian Helmuth
37a6f2a6b8 Linux: Release Rm_session_mmap::_lock during RPCs
Related to #579.
2012-12-21 14:54:21 +01:00
Christian Helmuth
d50996863b Linux: trigger deadlock in rm_session_mmap.cc in core
Related to #579.
2012-12-21 14:54:21 +01:00
Christian Prochaska
522a86e54a base-linux: use the Genode GCC's crt files
With this patch hybrid applications get linked with the Genode GCC's
'crtbegin.o' and 'crtend.o' files instead of the host GCC's versions
to avoid compatibility problems. This only affects the 'linux_x86'
platform, since on the 'lx_hybrid_x86' platform the Genode GCC is the
host GCC.

Fixes #550.
2012-12-21 14:54:21 +01:00
Christian Helmuth
97e4470da6 Build pci_drv for framebuffer test / fix warning 2012-12-21 14:54:21 +01:00
Alexander Boettcher
2283536b27 base: avoid deadlock in sliced_heap
It happens that ram_session and rm_session itself are invoking alloc
respectively free on the very same sliced heap inside core.

Lock only the sliced_heap list implementation and let the session locking to
the session implementation of rm_session and ram_session.

The ram_session and rm_session must take care to proper lock since inside
both implementations already the session handling thread and the service thread
are running parallel.
2012-12-21 14:54:21 +01:00
Alexander Boettcher
68156918ee base: apply thread.cc fix of foc to base*
With commit 1389b63050 in thread.cc for base-foc
a bug was fixed, where the memory of the context got freed up before running
the de-constructor.

Apply the fix also to base and base-mb.
2012-12-21 14:54:21 +01:00
Alexander Boettcher
1211516c08 nova: decode type of page fault in core
Ease reading debugging messages if a core thread fails.
2012-12-21 14:54:20 +01:00
Alexander Boettcher
96ef2b24c7 core: don't dereference null pointer 2012-12-21 14:54:20 +01:00
Alexander Boettcher
9cdf062ee6 base: catch exceptions in rm_session
For base-nova thread creation related exception can be thrown, since the
Pager_objects are threads. Catch the exception and re-throw the
expected/documented exception in rm_session.

This commit avoids that core dies with an unhandled exception if a thread
couldn't be created (e.g. because the limit has been reached).
2012-12-21 14:54:20 +01:00
Alexander Boettcher
df3c0d4786 base: throw exception if thread creation failed
Sanity check that the context area has been attached. Otherwise the code
later tries to access the context area and core dies with a unhandled page
fault.
2012-12-21 14:54:20 +01:00
Alexander Boettcher
cef9af1978 nova: set page fault handler for core threads
Ease debugging if a core thread fail.
2012-12-21 14:54:20 +01:00
Alexander Boettcher
2426030c5b nova: extend cap_session to free up portals 2012-12-21 14:54:20 +01:00
Alexander Boettcher
8c4e1b7eb0 base: extend cap_session with memory allocator
Required to allocate memory to remember per session created capabilities.
During session destruction all capabilities have to be freed up.
2012-12-21 14:54:20 +01:00
Ivan Loskutov
f9b82a7b8e Add setting baudrate to i8250 and OMAP4 UART drivers
Fixes #445
2012-12-21 14:54:15 +01:00
Ivan Loskutov
5b8a0e5423 Add OMAP4 UART driver
Fixes #444
2012-12-20 14:40:18 +01:00
Stefan Kalkowski
f4e0230dde L4lx: mask all VCPU IRQs when doing ipc (fix #553)
Open VCPU interrupts while the VCPU is in an IPC operation can badly influence
its state. That's why this commit fixes a whole bunch of places, where IRQs
weren't masked by now.
2012-12-18 09:31:46 +01:00
Stefan Kalkowski
f61ecb1053 L4lx: make block stub driver SMP safe (fix #514)
We have to take the block queue's spin lock before invoking the interrupt
routine, otherwise the AVL tree og Genode's block packet stream gets
corrupted.
2012-12-18 09:31:13 +01:00
Martin Stein
240f1e334f base: Don't complete line breaks in UART drivers. 2012-12-07 08:55:16 +01:00
Christian Helmuth
f51ce6f5a5 prepare: Serialize preparation in Makefile
Any recursively invoked `make' command will still be run in parallel
(unless its makefile contains .NOTPARALLEL).

Related to #535.
2012-12-05 14:02:18 +01:00
Stefan Kalkowski
bc38a13353 Fiasco.OC: only access valid UTCB (fix #547)
If no platform thread was created before somebody destroys a thread object,
there is no valid UTCB available. Thereby, we've to check this before accessing
the UTCB when destroying a thread object.
2012-12-05 14:01:23 +01:00
Martin Stein
bec35bb4b1 base-hw & imx31: compile error in kernel_support.h
Fix #548
2012-12-05 14:00:06 +01:00
Torsten Hilbrich
6b33757154 build.mk: Add dependency for init_libdep_file on directory
This should ensure that the directory is created before trying to
create a file within it.

This hopefully fixes errors like the following when using parallel
builds:

checking library dependencies...
/bin/bash: line 19: var/libdeps: No such file or directory
make[5]: *** [init_libdep_file] Error 1
2012-12-05 13:55:28 +01:00
Norman Feske
f081733f4b Linux: remove 'some_mem' array in core
The Linux version of core used a part of the BSS to simulate access to
physical memory. All dataspaces would refer to a portion of 'some_mem'.
So every time when core would access the dataspace content, it would
access its local BSS. For all processes outside of core, dataspaces were
represented as files. This patch removes the distinction between core
and non-core processes. Now, core uses the same 'Rm_session_mmap'
implementation as regular processes. This way, the 'some_mem' could be
abandoned. We still use BSS variable for allocating core-local meta
data through.
2012-12-04 20:51:29 +01:00
Norman Feske
8930ce765d Resolve 'size_t' ambiguity
When building core as hybrid Linux/Genode program, 'size_t' becomes
ambiguous.
2012-12-04 20:51:24 +01:00
Christian Prochaska
42cef716e1 CPU session meta data RAM quota upgrade support
Fixes #541.
2012-11-30 16:27:29 +01:00
Martin Stein
8c3d044928 rom_loopdev: missing 'semaphore.h' include
Fix #545
2012-11-30 16:23:16 +01:00
Martin Stein
bc24a21658 base-hw: embed kernel space into platform thread
Instead of allocating and freeing the space that is needed for the
kernel thread objects from core, wich is not convenient with the
quota system, platform thread now holds the space as array by
itself.

Unfortunately we cannot measure the space size by a static function
anymore, so kernel thread had to be moved from kernel.cc into its
own header. This way platform thread can use sizeof().

Fix #543
2012-11-30 16:23:16 +01:00
Martin Stein
8037277447 base-hw: reply to IPC without awaiting the next
Fix #544
2012-11-30 16:23:16 +01:00
Martin Stein
46a6cb680a base & arm: Fix unecessary assertion in memcpy_cpu
Fix #529
2012-11-30 16:17:06 +01:00
Alexander Boettcher
fa2cbdc7cb Fix: don't deference stale pager pointer in core
Reset pager pointer in platform_thread if pager object is removed.

Fixes #532
2012-11-29 13:44:07 +01:00
Norman Feske
1720e04fdc News item for Genode 12.11 2012-11-29 13:27:10 +01:00
Norman Feske
f8fd8a9ba1 Release notes for Genode 12.11 2012-11-29 13:27:07 +01:00
Christian Prochaska
eac4b61560 Noux: increase ARGS_MAX_LEN
Fixes #533.
2012-11-29 11:56:31 +01:00
Christian Prochaska
b21c1d468d Noux tool chain run script improvements
- print status messages
- limit run script execution to the 'foc_x86_32' platform

Fixes #539.
2012-11-29 11:56:31 +01:00
Norman Feske
8c98b81350 tool_chain.txt: Update for Genode 12.11
The Gentoo-specific section should be taken offline until the overlay
got updated.

Version 12.11 adds a binary package for x86_64 in addition to x86_32.
2012-11-29 11:55:19 +01:00
Christian Prochaska
46a81ab890 foc: don't call 'sleep_forever()' on thread exit
The generic 'sleep_forever()' function creates an Ipc_server object which
might not get cleaned up correctly when the thread gets destroyed and
unneeded capability references could remain and drain the capability index
allocator. With this patch a lock gets used on thread exit instead of
calling 'sleep_forever()'.

Fixes #538.
2012-11-29 09:55:09 +01:00
Martin Stein
b3815c95a7 base: don't mention 'CONTEXT_VIRTUAL_SIZE' in docs
Fix #530
2012-11-29 09:55:09 +01:00
Norman Feske
1af9187df9 Updated components.txt 2012-11-29 09:55:09 +01:00
Norman Feske
d6ee72d241 Fix file name 2012-11-29 09:55:09 +01:00
Martin Stein
f464b61829 base-hw & imx31: support by 'create_builddir'
Fix #537
2012-11-29 09:55:09 +01:00
Martin Stein
1ac1d802ee moon: provide IO_MEM for base-hw timers
Fix #536
2012-11-29 09:55:09 +01:00
Martin Stein
ab0296bd20 base-mb: Fix compile and link errors
Fix #531
2012-11-29 09:55:04 +01:00
Martin Stein
1258126986 base_hw: Enable ldso test
Fix #527, fix #350
2012-11-28 22:51:13 +01:00
Norman Feske
0dbb5e1696 Propagate 'Range_allocator::alloc_aligned' errors
This patch reflects eventual allocation errors in a more specific way to
the caller of 'alloc_aligned', in particular out-of-metadata and
out-of-memory are considered as different conditions.

Related to issue #526.
2012-11-28 22:51:09 +01:00
Norman Feske
bd6d78b18e Add dde_oss contrib and download to .gitignore 2012-11-27 20:45:33 +01:00
Norman Feske
4c01f261d3 base-hw: add 'Thread_base::join' to core
In the recent change of the RPC-entrypoint destruction, the
'~Rpc_entrypoint' calls 'Thread_base::join'. Hence, we need to provide
an implementation wherever RPC entrypoints are used.
2012-11-27 20:32:06 +01:00
Christian Prochaska
6c25ced5f2 base-nova: fix core virtual memory region leak
Revert the core-local mapping created in 'Ram_session_component::_clear_ds()'
and free the virtual memory region allocated for this mapping when a
RAM dataspace gets freed.

Fixes #416.
2012-11-27 20:21:36 +01:00
Alexander Boettcher
7ee4b75156 Fix vesa_drv on native hardware
When vesa_drv tries to access values lying across region boundaries, the
second region may be not mapped.

Fixes #524
2012-11-27 20:08:54 +01:00
Alexander Boettcher
51f99106bd NOVA: don't exclude 2. page of virt. address space
Fixes #519
2012-11-27 15:33:03 +01:00
Sebastian Sumpf
7d8f446475 OSS: Open Sound System server
Currently supports Intel HDA, AC97, and ES1370 audio cards. See README
for further details.
2012-11-27 15:32:39 +01:00
Sebastian Sumpf
8ac3209aa8 DDE_KIT: Startup synchronization for IRQ thread
Wait until 'entry' function of IRQ threads is called.
2012-11-27 12:00:03 +01:00
Alexander Boettcher
727f29f2e9 Remove obsolete cap selector lock
We can use the Genode::Lock abstraction instead of a separate native SM cap.
2012-11-27 10:56:05 +01:00
Alexander Boettcher
7ba23432ac Add pointers to sources of used boot loaders 2012-11-27 10:40:53 +01:00
Norman Feske
ae4fdf6418 Run script for fork bomb test 2012-11-27 10:40:13 +01:00
Christian Prochaska
7c71a62bd8 Noux: run scripts for building Genode
This patch adds two run scripts which create a Noux environment for building
the Genode demo scenario for Fiasco.OC and NOVA.

Fixes #520.
2012-11-26 21:07:56 +01:00
Christian Prochaska
3b4115bc0c ldso: increase 'MEM_SIZE' in 'mmap()'
Fixes #521.
2012-11-26 20:58:10 +01:00
Martin Stein
88b370bda2 base-hw: Full quota upgrading in signal receiver.
Fix #518
2012-11-26 20:58:10 +01:00
Martin Stein
027916d961 vea9x4: Fix bug in board declarations.
Fix #516
2012-11-26 20:58:10 +01:00
Christian Prochaska
d67cb43605 Noux: increase ENV_MAX_LEN
Fixes #515.
2012-11-26 20:58:10 +01:00
Christian Prochaska
ec0b6f82a5 Noux: add tar hardlink support in 'stat()'
Fixes #481.
2012-11-26 20:58:10 +01:00
Stefan Kalkowski
d233186900 L4Linux: hold queue lock in block driver (fix #395)
When finishing a block request in the L4Linux block stub driver,
we#ve to hold the queue lock before using __blk_end_request_all, or
simply use blk_end_request_all instead. Moreover, this commit simplifies
the lock/unlock behaviour when the block queue has to be stopped, or resumed.
Thanks to I. Ismagilov for these suggestions.
2012-11-26 20:58:10 +01:00
Josef Söntgen
2e6de3759c Noux: add getrlimit() dummy to libc_noux
As long as there is no proper getrlimit() support prevent programs
from using it by providing a dummy implementation.
2012-11-26 20:58:10 +01:00
Josef Söntgen
14c1f64733 libports: set getrlimit() to weak in libc
This functions needs to be overriden by libc_noux.
2012-11-26 20:58:10 +01:00
Josef Söntgen
569e0a2e6c Remove unneeded PDBG() messages 2012-11-26 20:58:10 +01:00
Josef Söntgen
e82f61f938 Noux: add noux-pkg/openssh interactive run-script
Currently only ssh(1) is tested but scp(1) should also work. Noux
still misses some functionality which is needed for sshd(1).
2012-11-26 20:58:10 +01:00
Josef Söntgen
46597d3b17 Noux: add noux-pkg/openssh 2012-11-26 20:58:10 +01:00
Josef Söntgen
5c413929ef Noux: add ioctl() to Vfs
File_io_channel now includes ioctl() because pseudo devices which are
implemented as a file-system, e.g. /dev/tty, are controlled via ioctl()
requests. The method is exported to the Vfs through the Vfs_io_channel
class.
2012-11-26 20:58:09 +01:00
Josef Söntgen
c24a95b819 Noux: add random_file_system
The random file-system provides an arc4 based urandom implementation
which is needed for OpenSSL.

NOTE: the Arc4random class currently _does not collect enough_ random
bytes!
2012-11-26 20:58:09 +01:00
Josef Söntgen
7f359a5978 Noux: add stdio_file_system
This file-system provides a connection to the terminal through a device
node, e.g. /dev/tty.
2012-11-26 20:58:09 +01:00
Josef Söntgen
ebfe49ca84 Noux: use Terminal::Connection as singleton
We will reuse the terminal connection in the stdio filesystem
to implement /dev/tty. Therefor we need to access the terminal
from different locations which is simplified if it is provided
by a singleton.
2012-11-26 20:58:09 +01:00
Josef Söntgen
82eb0e9f9a Noux: add TIOCSETAF/W dummy to Terminal_io_channel 2012-11-26 20:58:09 +01:00
Josef Söntgen
59c369a608 Noux: add TIOCSETAF/W support
These ioctl() request are used to set attributes of the underlying
terminal device.
2012-11-26 20:58:09 +01:00
Josef Söntgen
9ce32d6414 Terminal: fix color variable initialization 2012-11-26 20:58:09 +01:00
Josef Söntgen
42df6e3d01 libports: add test/libc_resolv target
libc_resolv is used by noux-pkgs and is only a runtime dependency but
therefore needs to be build.
2012-11-26 20:58:09 +01:00
Norman Feske
91e6ab2baf Linux: Robustness of socket life-time management
This patch improves the life-time management of socket descriptors and
addresses several corner cases exposed by the 'bomb' test.

The lookup and association of file descriptors with global IDs have been
turned into an atomic operation. Otherwise, multiple threads interacting
with the singleton 'ep_sd_registry' may override each other's
associations.

Closing the socket pair used for the reply channel has been implemented
via the RAII pattern to capture all corner cases, in particular
exceptions.

If blocking operations are interrupted by signals, we throw a
'Blocking_canceled' exception.

We preserve core's socket descriptor at 'PARENT_SOCKET_HANDLE' to avoid
a corner case where the parent capability is going to dup2'ed to the
same handle.

Support for 'Thread_base::join' within core to enable leaving Genode via
Control-C.
2012-11-26 20:58:09 +01:00
Norman Feske
5c8373bec3 Cleanup destruction of RPC entrypoints
This patch introduces clean synchronization between the entrypoint
thread and the caller of the 'Rpc_entrypoint' destructor. The most
important change is the handling of the 'Ipc_server' destruction. This
object is in the local scope of the server's entry function. However,
since the server loop used to be an infinite loop, there was hardly any
chance to destruct the object in a clean way. Hence, the
'Rpc_entrypoint' destructor used to explicitly call '~Ipc_server'.
Unfortunately, this approach led to problems because there are indeed
rare cases where the server thread leaves the scope of the entry
function, namely uncaught exceptions. In such a case, the destructor
would have been called twice.

With the new protocol, we make sure to leave the scope of the entry
function and thereby destroy the 'Ipc_server' object as expected. This
is achieved by propagating the exit condition through a local RPC call
to the entrypoint. This way, the blocking state of the entrypoint
becomes unblocked. Furthermore, '~Rpc_entrypoint' makes use of the new
'join' function to wait for the completion of the server thread.
2012-11-26 20:58:09 +01:00
Christian Helmuth
3a6b739384 Add more known segment types for dynamic ELFs
These segments are not critical and the commit reduces noise in the log.
2012-11-26 11:34:00 +01:00
Norman Feske
0bcf55800f Eagerly map DMA buffers
This patch is a work-around for issue #452.
2012-11-26 09:45:20 +01:00
Norman Feske
f2e47ef9f4 Whitespace 2012-11-26 09:45:13 +01:00
Norman Feske
1cc1308a80 Include 'EXT_OBJECTS' in ld group
Fixes #509.
2012-11-23 18:16:52 +01:00
Norman Feske
2ac7c5258b News item about how Genode came to the Pandaboard 2012-11-23 17:22:09 +01:00
Sebastian Sumpf
b902d5ed72 FOC: Change interrupt mode heuristic
Don't touch interrupts modes for IRQs below 16 if not explicitly requested.

Fixes issue #512
2012-11-23 12:20:28 +01:00
Stefan Kalkowski
5f81705488 Atapi: limit block count in DMA request (fix #514)
The block count in DMA requests is limited to 8 bit. Therefore,
if a client requests more than 255 blocks in a single packet request,
split the request in a loop.
2012-11-23 12:20:28 +01:00
Alexander Boettcher
c63a6d94f6 NOVA: add chain_loader 'bender'
'Bender' can detect serial ports accessible via PCI and writes the I/O ports
to the Bios Data area (BDA).

Usage together with the PXE bootloader ease life running Genode/NOVA on native
hardware, where a standard serial device isn't available anymore anywhere.
2012-11-23 12:20:28 +01:00
Alexander Boettcher
94c6b7bd10 NOVA: map boot modules rx only 2012-11-23 12:20:28 +01:00
Alexander Boettcher
d5ef49acf9 NOVA: fix bootstrap if modules are loaded above 3G
We don't can use map_local_one_to_one for boot modules because it happens
that boot modules can be at addresses above physical 3G boundary for x86_32.

Defer the mapping of modules until the point where the core allocators
are set up properly and then remap the physical pages to virtual addresses
below 3G.
2012-11-23 12:20:27 +01:00
Alexander Boettcher
b8ab3673cd NOVA: support to restrict memory rwx bits in core 2012-11-23 12:20:27 +01:00
Alexander Boettcher
4d12464cee Read BIOS data area (BDA) to get serial I/O ports
If the I/O ports are non default (3f8), we had to specify manually the correct
I/O ports. With this commit the BDA is read and the I/O port of the first
serial interface (COM) is taken. If no serial interface is available no device
configuration will be undertaken.
2012-11-23 12:20:27 +01:00
Ivan Loskutov
5e66b6d5ed Add OMAP4 GPIO driver
Add Gpio session interface. Add test for Pandaboard.

Fixes #427
2012-11-23 12:20:27 +01:00
Norman Feske
deb465e442 Improve robustness of chroot-related tests 2012-11-23 12:20:27 +01:00
Stefan Kalkowski
53529e0eeb Fiasco.OC: enable i.MX53 platform 2012-11-23 12:20:27 +01:00
Stefan Kalkowski
88316abca1 Merge panda_a2 and panda SPEC (fix #505, fix #506)
There is no obvious reason for having two different SPEC variables, definitions,
and pathes for the Pandaboard platform. It even lead to problems regarding the
omap4 framebuffer driver (look at issue #505 and #506).
2012-11-23 12:20:27 +01:00
Martin Stein
1b73f80350 base-hw: Fix bug in 'thread_resume' syscall. 2012-11-23 12:20:26 +01:00
Martin Stein
b7c1404fbf base & core: Use FIFO to queue RM faulters.
By now RM faulters are hold in a LIFO. Thus a starvation problem
occurs on managed dataspaces when multiple threads throw pagefaults
continuously.
2012-11-23 12:20:26 +01:00
Martin Stein
05f5999e71 cpu_session: Access thread state by value 2012-11-23 12:20:22 +01:00
Martin Stein
4dadd6a437 base-hw: Read and write whole thread states.
By now there is no use case for read/write a single register
of a thread state. Thus the new syscalls 'read_thread_state' and
'write_thread_state' replace the old ones 'read_register' and
'write_register'.
2012-11-22 09:21:53 +01:00
Martin Stein
6cb89f79e3 base_hw & arm_v7: Use write-back caching.
Add 'resume_faulter' syscall that is similar to 'resume_thread', but
is called only when resuming a thread after resolving its pagefault.
This way the kernel can flush caches after resolving a pagefault. This is
because by now the MMU doesn't use caches when doing a pagetable walk.
2012-11-22 09:21:53 +01:00
Martin Stein
4723b08322 base_hw: Use TLB-specific 'struct Page_flags'.
'Page_flags' maps application-specific memory attributes
to the TLB-specific memory attributes. Thereby it avoids
functions with lots of parameters, by declaring appropriate
bitfields on a single POD value.
2012-11-22 09:21:53 +01:00
Christian Prochaska
47690b8802 Noux: make install target configurable
With this patch the make install target for Noux applications gets defined
in the 'NOUX_INSTALL_TARGET' make variable with 'install-strip' as default.

Fixes #503.
2012-11-22 09:21:53 +01:00
Norman Feske
8e831d2224 base-linux: Support customization of UIDs and GIDs
With this patch, custom UIDs and GIDs can be assigned to individual
Genode processes or whole Genode subsystems.

The new 'base-linux/run/lx_uid.run' script contains an example of how to
use the feature.

Fixes #510
2012-11-22 09:21:48 +01:00
Norman Feske
959df5d46b Generalize handling of PD-session arguments
On Linux, we want to attach additional attributes to processes, i.e.,
the chroot location, the designated UID, and GID. Instead of polluting
the generic code with such Linux-specific platform details, I introduced
the new 'Native_pd_args' type, which can be customized for each
platform. The platform-dependent policy of init is factored out in the
new 'pd_args' library.

The new 'base-linux/run/lx_pd_args.run' script can be used to validate
the propagation of those attributes into core.

Note that this patch does not add the interpretation of the new UID and
PID attributes by core. This will be subject of a follow-up patch.

Related to #510.
2012-11-21 20:04:07 +01:00
Torsten Hilbrich
59eb8bf3a8 base-linux: Add chdir after performing chroot
This ensures that the cwd of the process is within the chroot
environment, improving security for root processes.

The cwd after the chroot is the same as before, this is needed to
start binaries given as relative path name.
2012-11-21 20:03:52 +01:00
Norman Feske
bcabbe2c92 Add 'Thread_base::join()'
Using the new 'join()' function, the caller can explicitly block for the
completion of the thread's 'entry()' function. The test case for this
feature can be found at 'os/src/test/thread_join'. For hybrid
Linux/Genode programs, the 'Thread_base::join()' does not map directly
to 'pthread_join'. The latter function gets already called by the
destructor of 'Thread_base'. According to the documentation, subsequent
calls of 'pthread_join' for one thread may result in undefined behaviour.
So we use a 'Genode::Lock' on this platform, which is in line with the
other platforms.

Related to #194, #501
2012-11-19 12:43:34 +01:00
Christian Helmuth
2995011b34 base-linux: implement IPC server destruction
When an IPC server is finalized two important things should happen:
First, the association of the server socket with a capability must be
invalidated. And finally, the server socket pair (server side and client
side) must be closed.

Related to #38.
2012-11-16 13:55:08 +01:00
Christian Helmuth
d23ee02e9a Destruct IPC-server object on entrypoint destruction
The IPC-server object exists solely on the stack of the entrypoint
thread and, therefore, would never be destructed as the thread is just
killed. Now, the object is explicitly destructed in the entrypoint
destructor. An alternative solution could instruct the entrypoint thread
the terminate, which would automatically cleanup its stack.

The object pool is assumed to be empty on destruction of the entrypoint.
If not, we warn and at least dissolve all RPC objects.
2012-11-16 13:55:00 +01:00
Christian Helmuth
2cdac0eb32 bomb test: stack size on 64-bit / dense logging 2012-11-15 12:58:47 +01:00
Christian Helmuth
d7c511ad87 base: entrypoint stack size 2048 machine words
This makes the stack fit for 32-bit as well as 64-bit platforms.
2012-11-15 12:58:46 +01:00
Christian Helmuth
3d35c3e23b base-fiasco: support 64bit build hosts 2012-11-15 10:32:05 +01:00
Christian Helmuth
67e558d975 base-fiasco: document dependency to byacc
Fixes #486.
2012-11-15 10:31:48 +01:00
Josef Söntgen
b7d1c40460 Terminal: add bg color handling + PDBG
Set the right bg color instead of using a dimmed version of the fg
color. The colors are stored in the first 6 bits of the color index.
Thereby the first 3 bits contain the fg and the second 3 bits the
bg color.

The debug message in _handle_esc_seq5() now shows the sequence in
question.

Fixes #495.
2012-11-14 16:57:43 +01:00
Josef Söntgen
3c562d042d Noux: fix resetting wrong number of fds
Since the number of the fds in the select call is not necassarily equal
to the number of fds SYSCALL_SELECT returns we have to reset the number
of fds given as argument to select().

This keeps OpenSSH from reading from a non-ready socket.

Fixes #494.
2012-11-14 16:57:13 +01:00
Josef Söntgen
a3c45412aa Noux: fix num_* return value in SYSCALL_SELECT
select_out.num_* was unecessarily set multiple times and not at all
if unblock_* was 0.

Fixes #494.
2012-11-14 16:56:58 +01:00
Christian Prochaska
c39e5557c5 libports: stdcxx 4.7.2 update
Fixes #469.
2012-11-14 16:55:33 +01:00
Christian Prochaska
d31a14fb55 ports: GCC 4.7 build fixes
Fixes #476.
2012-11-14 16:55:13 +01:00
Martin Stein
4794e97d80 base-pistachio: Avoid warnings.
Avoid warnings in 'base-pistachio/src/core/platform_pd.cc'
and 'base-pistachio/src/core/platform_thread.cc'.

Fixes #479.
2012-11-14 16:54:44 +01:00
Christian Prochaska
fb216f370b Noux: speed up tar record lookup
Currently the lookup of a specific record in a tar archive may take a long
time, because the records get searched in sequence. With this patch a tree
structure representing the directory layout gets created when loading the
tar file for speeding up record lookups.

Fixes #491.
2012-11-14 16:53:36 +01:00
Josef Söntgen
bb33c9f3cf libports: add dup() to libc
Fixes #492.
2012-11-14 16:52:33 +01:00
Josef Söntgen
8f372b469a Noux: fix dup() in libc_noux
The previous implementation disregards the fact that we actually have
to use libc's plugin mechanism if we play with fds. So in the end the
libc did not know to which plugin the fd belonged.

Fixes #493.
2012-11-14 16:51:15 +01:00
Torsten Hilbrich
d5a758ea10 Root_component::session: Fix ram_quota handling
You cannot check an unsigned size_t variable for underflow, so I
changed the code to first check if an underflow would occur before
performing the subtraction.

Fixes #489.
2012-11-14 16:39:18 +01:00
Torsten Hilbrich
7d30ffc907 base: Fix a number of warnings about unused parameters
The warnings are shown if components using the genode base are
compiled with -Wextra -Wall enabled.

Fixes #489.
2012-11-14 16:38:38 +01:00
Christian Prochaska
e3cba5dc6f GDB monitor: preserve more RAM quota
Fixes #484.
2012-11-14 16:36:52 +01:00
Christian Prochaska
7517b23d5d ports: remove binutils patch
Fixes #475.
2012-11-14 16:36:51 +01:00
Martin Stein
8d03312528 base_hw: Use board-specific 'Core_tlb'.
'Core_tlb' ensures that core never throws pagefaults,
in contrast to its base 'Tlb' that is planned to use displacement
in the future.

'Core_tlb' enables the application of differenet memory attributes
in core, according to the board specific partitioning of the physical
address space. This way it enables caching in core.
2012-11-14 16:36:51 +01:00
Martin Stein
4d2a3de0ee base_hw: Rename 'Software_tlb' 'Tlb'. 2012-11-14 16:36:51 +01:00
Martin Stein
dfcf55ff6e base_hw: Implement TLB as member of a kernel PD. 2012-11-14 16:36:51 +01:00
Martin Stein
53156de9f4 base_hw & arm: Memory attributes and light caching.
Enable caches. Core is not cached by now. This is because kernel
creates core space and doesn't know any memory attributes by now.
Cacheable pages are cached write-through without write-allocate.

Caching and write-combining is not supported for IOMEM by now.
2012-11-14 16:36:51 +01:00
Martin Stein
91c27f3f72 base: Tell a mapping wether it maps IO memory. 2012-11-14 16:36:51 +01:00
Martin Stein
cfa0a40d5e base_hw & omap4: USB HID and framebuffer driver.
Implement 'Signal_receiver::pending()'.

Provide display-subsystem MMIO.

Avoid method ambiguousness in 'Irq_context' in
'dde_linux/src/drivers/usb/signal/irq.cc'
(it derives from two list element classes when using 'base_hw').

Enables demo scenario with 'hw_panda_a2'.
2012-11-14 16:36:50 +01:00
Martin Stein
612735732a base_hw & omap4: Timer driver.
Fix bug regarding idle thread in thread scheduling in
'base-hw/src/core/kernel.cc'.

Fix regarding signal submit in signal framework in
'base-hw/src/core/kernel.cc'.
2012-11-14 16:36:50 +01:00
Martin Stein
31d57a6257 Nested init on i.MX31 via base_hw. Rework base_hw.
Implies support for the ARMv6 architecture through 'base-hw'.

Get rid of 'base/include/drivers' expect of 'base/include/drivers/uart'.

Merge with the support for trustzone on VEA9X4 that came from
Stefan Kalkowski.

Leave board drivers in 'base/include/platform'.

Rework structure of the other drivers that were moved to
'base_hw/src/core' and those that came with the trustzone support.

Beautify further stuff in 'base_hw'.

Test 'nested_init' with 'hw_imx31' (hardware) and 'hw_panda_a2' (hardware),
'demo' and 'signal' with 'hw_pbxa9' (qemu) and 'hw_vea9x4'
(hardware, no trustzone), and 'vmm' with 'hw_vea9x4'
(hardware, with trustzone).
2012-11-14 16:36:41 +01:00
Norman Feske
5b4edeb031 Introduce 'Uart::Session' interface
The new 'Uart::Session' interface is an extension of the
'Terminal::Session' interface that allows for configuring UART-specific
parameters, i.e., the baud rate.
2012-11-07 13:43:09 +01:00
Norman Feske
0c76bc9cfd Add support for specialized session interfaces
This patch introduces principal support for extending session interfaces
with specialized functionality in a clean way. For example, an 'Uart'
interface may implement the 'Terminal' interface but also offers
additional functions for setting the baud rate. A service that
implements the 'Uart' service will then automatically announce both the
'Uart' and 'Terminal' services.
2012-11-07 13:43:04 +01:00
Christian Prochaska
cb8910b40c Update lwip to version STABLE-1_4_1
Fixes #366.
2012-11-07 13:35:36 +01:00
Josef Söntgen
ac3a362fdf Noux: add dup() to libc_noux
This library function is implemented upon SYSCALL_DUP2. Therfor the
syscall was slightly changed. It now returns the new allocated fd in
dup2_out.fd.
2012-11-07 13:34:54 +01:00
Alexander Boettcher
7a619b9ede base-nova: solely revoke unused capabilities
Extend tracking of delegated and of translated items. The additional
information is used to solely free up unused/unwanted mapped capabilities and
to avoid unnecessary revokes on capability indexes where nothing have been
received.

Fixes #430
2012-11-07 13:32:40 +01:00
Josef Söntgen
db9dc3388d Noux: fix resetting fds in unmarshal_fds
Since FD_ZERO() resets a whole fd_set (which is 128 bytes) using it to
reset dst_fds will override otherwise used memory if the memory was
allocated dynamically and is less than sizeof (fd_set). So instead of
using this macro we reset the fd_set manually.
2012-11-07 11:32:26 +01:00
Josef Söntgen
0539c7180b Noux: add Io_receptor to SYSCALL_SELECT + bugfix
The Io_receptor is now used to unblock certain I/O channels from lwip's
callback-function.

There was also a bug in which all ready-to-ready fds were overriden by
the ready-to-write ones.
2012-11-07 11:32:16 +01:00
Josef Söntgen
c74bdbf8d8 Noux: add Io_receptor_registry 2012-11-07 11:32:11 +01:00
Josef Söntgen
082d8d6623 Noux/net: refactoring of Socket_io_channel
The Socket_io_channel class now uses the Io_channel_backend to provide
the network related methods. In addition the Socket_io_channel_registry
was replaced with a simpler implementation which uses Io_receptors to
unblock I/O channels from the callback-function of lwip.
2012-11-07 11:32:06 +01:00
Josef Söntgen
08bd41b1ec Noux: add backend pointer to Io_channel
The backend pointer may be used to provide additional methods in a
Io_channel derived class.
2012-11-07 11:32:01 +01:00
Norman Feske
4b140a5202 Define SIGUSR1 for hybrid Linux/Genode programs
This patch fixes the 'lx_hybrid_pthread_ipc.run' test. In order to use
the 'Genode::Lock' we need to set the SIGUSR1 handler to an empty handler.
Normally, this happens when creating a thread via the Genode API. But as
this test creates a thread via the pthread library and thereby bypasses
the Genode API, the signal handler remained unset.
2012-11-06 17:32:30 +01:00
Norman Feske
21c22b8b5b Black-list 'tar_rom.run' on Linux 2012-11-06 17:16:06 +01:00
Norman Feske
bb8d090922 Resolve possible ambiguity of 'strcmp' 2012-11-06 09:35:47 +01:00
Norman Feske
90395e9428 Linux: Add 'Platform_thread' destructor 2012-11-05 17:31:05 +01:00
Christian Helmuth
d64dea51c0 Linux: Use 'umount2' as it seems more portable
In contrast to the 'umount' syscall, 'umount2' works on 32 bit and 64
bit.
2012-11-05 17:31:05 +01:00
Christian Helmuth
8020462748 Linux: Build hybrid library with Genode tool chain
Using the host compiler in this case seems to be an artifact from an
older change. On x86_64, this approach ended in unsable hybrid binaries
due to incompatible handling of non-trivial return values, i.e.
structures. See '-freg-struct-return' in GCC manual page:

  "[...] If there is no standard convention, GCC defaults to
  -fpcc-struct-return, except on targets where GCC is the principal
  compiler.  In those cases, we can choose the standard, and we chose
  the more efficient register return alternative."

In other words: All x86_64 Linux systems break the ABI standard :-(
2012-11-05 17:31:05 +01:00
Christian Helmuth
2cb604620e Add missing header for snprintf 2012-11-05 17:31:05 +01:00
Norman Feske
087582a964 Linux: Synchronize thread startup
The thread ID reported to core was not always initialized prior the RPC
call. The 'startup_lock' ensures that the thread is completely
initialized before this information gets propagated.
2012-11-05 17:31:05 +01:00
Norman Feske
940a5f1144 Fix narrowing issues reported by gcc-4.7 2012-11-05 17:31:05 +01:00
Norman Feske
b45242c50f Add chroot support to core
Since the recent move of the process creation into core, the original chroot trampoline
mechanism implemented in 'os/src/app/chroot' does not work anymore. A
process could simply escape the chroot environment by spawning a new
process via core's PD service. Therefore, this patch moves the chroot
support into core. So the chroot policy becomes mandatory part of the
process creation.  For each process created by core, core checks for
'root' argument of the PD session. If a path is present, core takes the
precautions needed to execute the new process in the specified chroot
environment.

This conceptual change implies minor changes with respect to the Genode
API and the configuration of the init process. The API changes are the
enhancement of the 'Genode::Child' and 'Genode::Process' constructors to
take the root path as argument. Init supports the specification of a
chroot per process by specifying the new 'root' attribute to the
'<start>' node of the process. In line with these changes, the
'Loader::Session::start' function has been enhanced with the additional
(optional) root argument.
2012-11-05 17:31:05 +01:00
Norman Feske
e1e7ab178f Resolve ambigiouties of size_t
When building in hybrid Linux/Genode mode, there exist two definitions
of 'size_t', one in the 'Genode' namespace and one imported from the
glibc headers.
2012-11-05 17:31:04 +01:00
Norman Feske
db2b1a37ae Propagate process labels to PD sessions
On Linux, we use the session label for naming the corresponding Linux
process. When looking up the processes via 'ps', the Genode process
hierarchy becomes immediately visible.
2012-11-05 17:31:04 +01:00
Norman Feske
97162332c9 Whitespace fix 2012-11-05 17:31:04 +01:00
Norman Feske
20d8655a7f Linux: move process creation into core
Genode used to create new processes by directly forking from the
respective Genode parent using the process library. The forking process
created a PD session at core merely for propagating the PID of the new
process into core (for later destruction). This traditional mechanisms
has the following disadvantages:

First, the PID reported by the creating process to core cannot easily be
validated by core. Therefore core has to trust the PD client to not
specify a PID of an existing process, which would happen to be killed
once the PD session gets destructed. This problem is documented by
issue #318. Second, there is no way for a Genode process to detect the
failure of its any grandchildren. The immediate parent of a faulting
process could use the SIGCHLD-and-waitpid mechanism to observe its
children but this mechanism does not work transitively.

By performing the process creation exclusively within core, all Genode
processes become immediate child processes of core. Hence, core can
respond to failures of any of those processes and reflect such
conditions via core's session interfaces. Furthermore, the PID
associated to a PD session is locally known within core and cannot be
forged anymore. In fact, there is actually no need at all to make
processes aware of any PIDs of other processes.

Please note that this patch breaks the 'chroot' mechanism that comes in
the form of the 'os/src/app/chroot' program. Because all processes are
forked from core, a chroot'ed process could sneak outside its chroot
environment by just creating a new Genode process. To address this
issue, the chroot mechanism must be added to core.
2012-11-05 17:31:04 +01:00
Norman Feske
7e23b2d569 Complement linux syscalls for 64 bit 2012-11-05 17:31:04 +01:00
Norman Feske
2612dc14c2 Removed linux-specific 'local_interface.h'
The Linux-specific mechanism has been superseded by the generic support
for local capabilities in 'base/include/capability.h'.
2012-11-05 17:31:04 +01:00
Norman Feske
de69ee2e66 Linux: cleanup system-call bindings
This patch simplifies the system call bindings. The common syscall
bindings in 'src/platform/' have been reduced to the syscalls needed by
non-core programs. The additional syscalls that are needed solely by
core have been moved to 'src/core/include/core_linux_syscalls.h'.
Furthermore, the resource path is not used outside of core anymore.
Hence, we could get rid of the rpath library. The resource-path code has
been moved to 'src/core/include/resource_path.h'. The IPC-related parts
of 'src/platform' have been moved to the IPC library. So there is now a
clean separation between low-level syscall bindings (in 'src/platform')
and higher-level code.

The code for the socket-descriptor registry is now located in the
'src/base/ipc/socket_descriptor_registry.h' header. The interface is
separated from 'ipc.cc' because core needs to access the registry from
outside the ipc library.
2012-11-05 17:31:04 +01:00
Norman Feske
371b8fd12d Remove mirroring of 'lx_rpath' in 'app/chroot'
Thanks to the exclusive use of SCM rights for delegating access rights
to memory objects and RPC entrypoints, Genode processes outside of core
won't need to access any files.
2012-11-05 17:31:04 +01:00
Norman Feske
7cb45e9648 Linux: Don't access file system outside of core
This patch changes the way of how dataspace content is accessed by
processes outside of core. Dataspaces are opened by core only and the
corresponding file descriptors are handed out the other processes via
the 'Linux_dataspace::fd()' RPC function. At the client side, the
returned file descriptor is then used to mmap the file.

Consequently, this patch eliminates all files from 'lx_rpath'. The
path is still needed by core to temporarily create dataspaces and
unix domain sockets. However, those files are unlinked immediately
after their creation.
2012-11-05 17:31:04 +01:00
Norman Feske
aee0a2061b Create entrypoint sockets in core only
This patch alleviates the need for any non-core process to create Unix
domain sockets locally. All sockets used for RPC communication are
created by core and subsequently passed to the other processes via RPC
or the parent interface. The immediate benefit is that no process other
than core needs to access the 'rpath' directory in order to communicate.
However, access to 'rpath' is still needed for accessing dataspaces.

Core creates one socket pair per thread on demand on the first call of
the 'Linux_cpu_session::server_sd()' or 'Linux_cpu_session::client_sd()'
functions. 'Linux_cpu_session' is a Linux-specific extension to the CPU
session interface. In addition to the socket accessors, the extension
provides a mechanism to register the PID/TID of a thread. Those
information were formerly propagated into core along with the thread
name as argument to 'create_thread()'.

Because core creates socket pairs for entrypoints, it needs to know all
threads that are potential entrypoints. For lx_hybrid programs, we
hadn't had propagated any thread information into core, yet. Hence, this
patch also contains the code for registering threads of hybrid
applications at core.
2012-11-05 17:31:04 +01:00
Norman Feske
f33c7c73bd Delegate access to entrypoints via SCM rights
This patch eliminates the thread ID portion of the 'Native_capability'
type. The access to entrypoints is now exclusively handled by passing
socket descripts over Unix domain sockets and by inheriting the socket
descriptor of the parent entrypoint at process-creation time.

Each entrypoint creates a socket pair. The server-side socket is bound
to a unique name defined by the server. The client-side socket is then
connected to the same name. Whereas the server-side socket is meant to
be exclusively used by the server to wait for incoming requests, the
client-side socket can be delegated to other processes as payload of RPC
messages (via SCM rights). Anyone who receives a capability over RPC
receives the client-side socket of the entrypoint to which the
capability refers. Given this socket descriptor, the unique name (as
defined by the server) can be requested using 'getpeername'. Using this
name, it is possible to compare socket descriptors, which is important
to avoid duplicates from polluting the limited socket-descriptor name
space.

Wheras this patch introduces capability-based delegation of access
rights to entrypoints, it does not cover the protection of the integrity
of RPC objects. RPC objects are still referenced by a global ID passed
as normal message payload.
2012-11-05 17:31:04 +01:00
Norman Feske
64efaf249a Test naming of bound unix domain sockets 2012-11-05 17:31:04 +01:00
Norman Feske
ca4f574f4c Support for socket-descriptor marshalling
This patch adds prinicipal support for transmitting socket descriptors
as RPC payload. Socket descriptors are handled by the linux-specific
implementation of the capability marshalling and unmarshalling functions
in 'ipc.h'. The 'Message' type in 'src/platform/linux_socket.h' has been
extended to carry multiple descriptors in a single message.

Unfortuately, we hit a problem (and potential show stopper) here:

  lx_sendmsg failed with -109 in lx_call()

The error code corresponds to ETOOMANYREFS. There is only one place in
the Linux kernel where this error code is used (net/unix/af_unix.c).
The code for 'unix_attach_fds()' suggests that there is a limit with
regard to the maximum number of references for a given Unix domain
socket. When the error occurs, core and init are running. The socket
of core's server entrypoint is present in the '/proc/pid/fd' of those
processes 8 times. The error occurs when core tries to perform an
RPC to the entrypoint to perform 'Ram_session::transfer_quota()'
(base/include/base/child.h at line 248).
2012-11-05 17:31:04 +01:00
Norman Feske
8b343d7e1a linux: Remove socket member from 'Native_thread'
The only information needed per thread is whether the thread plays the
role of an 'Ipc_server' or not. We encode this information using a bool
value.
2012-11-05 17:31:03 +01:00
Norman Feske
b01a1a92cc Do not pass client tid to server on IPC call
Thanks to the SCM-rights-based reply capability, the server does not
need to know about the client's TID anymore.
2012-11-05 17:31:03 +01:00
Norman Feske
508d2050a6 linux: Fix 'explicit_reply' semantics
By storing the reply socket descriptor inside the 'Ipc_ostream::_dst'
capability instead as part of the connection state object, we can
use the 'explicit_reply' mechanism as usual. Right now, we store
both the tid and socket handle in 'Native_capability::Dst'. In the
final version, the 'tid' member will be gone.
2012-11-05 17:31:03 +01:00
Norman Feske
1c3b9a6f68 Add 'socket' member to 'Native_capability::Dst'
In the final version, the 'socket' will be the only member to remain in
the 'Dst' time. In the transition phase, we store both the old 'tid' and
the 'socket'.
2012-11-05 17:31:03 +01:00
Norman Feske
c09cd2d1a7 Merge of initial SCM rights code
This patch, which was originally created by Christian Helmuth,
represents the first step towards using SCM rights as capability
mechanism on Linux. It employs the SCM rights mechanism for transmitting
a reply capability to the server as argument of each IPC call. The
server will then send its respond to this reply file descriptor. This
way, the reply channel does not need to be globally visible anymore.
2012-11-05 17:31:03 +01:00
Norman Feske
76b60566b7 Whitespace fix 2012-11-05 17:28:51 +01:00
Alexander Boettcher
c1d59e81c2 NOVA: use latest kernel from github
Related to issue #431. Requires toolchain rebuild to bump version to 2.22 !!!

Fixes #429
2012-11-05 17:28:51 +01:00
Christian Helmuth
7c77d0ee5f Prevent compiler warnings
Fixes #464.
2012-11-05 10:57:29 +01:00
Christian Prochaska
c99dd8fdf8 Use 'CURDIR' make variable in Genode make files
The bash-builtin 'pwd' command uses the 'st_dev' and 'st_ino' members of
the 'stat' struct to compare the path from the 'PWD' environment variable
with the path returned by 'getcwd()'. These members don't get set
correctly in Noux and therefore the 'pwd' command sometimes returns wrong
results when building Genode in Noux. With this patch the 'CURDIR' make
variable gets used instead of calling 'pwd'.

Fixes #454.
2012-11-03 09:54:14 +01:00
Christian Prochaska
22cc867234 'Allocator_avl_base::free()': print error message
With this patch an error message gets printed in
'Allocator_avl_base::free()' if the given address is not the start address
of the allocated block.

Fixes #459.
2012-11-03 09:53:34 +01:00
Christian Prochaska
a48942bffc Fix warning in QPluginWidget test
Create the signal context object before the signal receiver object to get the
signal receiver destroyed before the signal context. This avoids a 'specified
signal-context capability has wrong type' warning when the signal receiver
tries to free its managed context on destruction.

Part of #448.
2012-11-03 09:52:19 +01:00
Christian Prochaska
d46c79b428 libc_lock_pipe: match alloc. and dealloc. funcs
Fixes #460.
2012-11-03 09:51:56 +01:00
Christian Prochaska
abf3867d39 Arora: add 'stdcxx.lib.so' to boot modules
Fixes #461.
2012-11-03 09:51:14 +01:00
Stefan Kalkowski
70dfe4fcd7 Fiasco.OC: forward CC, and CXX variables (fix #462)
When building the Fiasco.OC kernel, and L4Linux within the Genode build system,
forward the CC, and CXX variables. It might contain useful tools like ccache,
or distcc to speed up compilation. Moreover, don't delete the MAKEFLAGS when
building Fiasco.OC. It hinders parallel builds.
2012-11-03 09:50:37 +01:00
Stefan Kalkowski
518cbc5a5f L4Linux: no linux-kernel memcpy in cxx (fix #446)
Certain symbols from the libgcc_eh library in cxx that is linked with the
L4Linux kernel were resolved by using kernel internal implementations.
This lead to errors because the complete Linux kernel is built regparm=3.
This patch prefixes the appropriate symbols in the Linux Kernel and its
modules. Moreover, it fixes some warnings introduced by the latest update
to gcc 4.7.
2012-11-03 09:49:04 +01:00
Christian Helmuth
20ddd1bcdc lwip: setup static IP if provided
Fixes #349.
2012-11-02 14:57:47 +01:00
Christian Helmuth
4d36c12d19 Reduce LOG noise to due disappeared clients
The message is disarmed in release mode (SPECS += release).

Fixes #310.
2012-11-02 13:35:45 +01:00
Norman Feske
d28b34b1fe Return value of correct type, reported by gcc-4.7 2012-11-01 17:06:05 +01:00
Norman Feske
19a996bcb9 Follow gcc's suggestions about using braces 2012-11-01 17:04:06 +01:00
Norman Feske
3772a526f6 Remove superfluous include 2012-11-01 17:04:06 +01:00
Norman Feske
d1de48e4a4 Fix narrowing issue reported by gcc-4.7 2012-11-01 17:04:03 +01:00
Norman Feske
ee2d45164e Fix possible int overflow reported by gcc-4.7 2012-11-01 17:03:13 +01:00
Norman Feske
009e93298a Add testnit to 'terminal_log.run'
Fixes #457.
2012-11-01 16:01:51 +01:00
Torsten Hilbrich
06ce0a8ef1 loader: Fix warnings about uninitialized variable
g++ 4.4.5 outputs the following warnings in our code using the loader
session:

.../base/include/base/capability.h: In member function 'typename Genode::Trait::Call_return<typename IF::Ret_type>::Type Genode::Capability<RPC_INTERFACE>::call() const [with IF = Loader::Session::Rpc_view_geometry, RPC_INTERFACE = Loader::Session]':
.../base/include/base/capability.h:207: warning: 'ret.Genode::Capability<Loader::Session>::Return<Loader::Session::Rpc_view_geometry>::_value.Loader::Session::View_geometry::width' may be used uninitialized in this function
.../base/include/base/capability.h:207: warning: 'ret.Genode::Capability<Loader::Session>::Return<Loader::Session::Rpc_view_geometry>::_value.Loader::Session::View_geometry::height' may be used uninitialized in this function
.../base/include/base/capability.h:207: warning: 'ret.Genode::Capability<Loader::Session>::Return<Loader::Session::Rpc_view_geometry>::_value.Loader::Session::View_geometry::buf_x' may be used uninitialized in this function
.../base/include/base/capability.h:207: warning: 'ret.Genode::Capability<Loader::Session>::Return<Loader::Session::Rpc_view_geometry>::_value.Loader::Session::View_geometry::buf_y' may be used uninitialized in this function

This is easily fixed with providing a default constructor.

Because of the C++ rules regarding initialer lists code that used
them for View_geometry had to be modified to use a normal construction
call.  In my tests only Nitpicker had to be changed.
2012-11-01 14:48:18 +01:00
Christian Helmuth
45f007fa9f Shell brace expansion is non-POSIX
Preparation of base-pistachio fails on Ubuntu with dash as /bin/sh as it
does not support non-POSIX features like brace expansion. In this case
expanding in the Makefile via $(addprefix ...) fixes this shortcoming.
2012-10-31 23:07:58 +01:00
Norman Feske
2a03c78dfb Update L4ka::Pistachio, fix gcc-4.7 problem
With the update to L4ka::Pistachio, we no longer need to patch the
contrib sources. Our patch went upstream in the meanwhile.

Apparently, gcc-4.7 is picky about specifying the '-melf_i386' argument
at the command line of the GCC frontend. We need to make sure to use the
'-Wl,' prefix.
2012-10-31 18:47:43 +01:00
Norman Feske
05e60691cb Add missing libs
The eglgears application depends on 'sqrt'. With the old tool chain,
this symbol was resolved through the dependencies of the 'gallium'
library. This does not work anymore for the new tool chain.

A similar issue arised for avplay, where we need to explicitly
state the av components in the LIBS declaration of the target.
2012-10-31 18:24:08 +01:00
Norman Feske
1fc7d4c573 Adapt binutils patch to version 2.22
Related to issue #346
2012-10-31 10:57:47 +01:00
Christian Prochaska
85b86a11b5 ports: binutils 2.22 and GCC 4.7.2 update 2012-10-30 18:16:25 +01:00
Christian Prochaska
dedfd3526d tool chain: binutils 2.22 and GCC 4.7.2 update 2012-10-30 18:16:19 +01:00
Christian Prochaska
e3b1063a36 tool chain: gcc-4.7.1 fixes 2012-10-30 18:16:05 +01:00
Taru Karttunen
443d611dd2 tool chain: switch to gcc-4.7.1 2012-10-30 18:15:27 +01:00
Christian Prochaska
0910e14de5 Fix OKLinux compile errors with GCC 4.7
Fixes #451.
2012-10-30 17:58:23 +01:00
Christian Prochaska
dc205e6937 base-hw: fix compile error with GCC 4.7
Fixes #438.
2012-10-30 17:47:52 +01:00
Norman Feske
18d881cf0f Split terminal implementation into multiple files
The terminal has a lot of bits that may be worth reusing outside the
single implementation. Those bits are now located at 'include/terminal'
in the gems repository.
2012-10-30 12:25:19 +01:00
Norman Feske
6fba73ee1d Add built-in font sizes (8, 12, 16) to terminal 2012-10-30 12:25:19 +01:00
Norman Feske
fb452ce6ba Add const qualifiers 2012-10-30 12:25:19 +01:00
Christian Prochaska
1389b63050 base-foc: fix capability index leak
Call the destructor of the thread context object on thread destruction to
remove any contained capability references.

Fixes #393.
2012-10-30 12:18:31 +01:00
Christian Prochaska
ecb6947f9c Noux: fix 'Rm_session_component' destructor
Fixes #434.
2012-10-30 12:17:43 +01:00
Christian Prochaska
8b09418e56 base-foc: fix 'Genode::parent_cap()'
Replacing the local name of a capability index object which exists in the
capability map can destroy the AVL tree order of the capability map. With
this patch the outdated object gets removed from the map and a new object
gets inserted afterwards.

Fixes #435.
2012-10-30 12:17:20 +01:00
Christian Prochaska
5a88e106df Define '__dso_handle' in shared libraries.
The '__dso_handle' symbol is needed when building with GCC 4.7.

Fixes #437.
2012-10-30 12:17:00 +01:00
Christian Prochaska
9d08c2b675 libports: update Qoost to version ce3d328928
Update Qoost to version ce3d328928 for GCC 4.7 support.

Fixes #408.
2012-10-30 12:16:45 +01:00
Christian Prochaska
9b68c1a3a8 lynx: add libcrypto to 'LIBS'
Fixes #447.
2012-10-30 12:13:39 +01:00
Christian Helmuth
2f357a7224 Firewall-friendly download methods for contrib src
After this commit "make prepare" uses HTTP, HTTPS, or FTP where possible
fvor downloading third-party source codes. This prevents problems with
strict firewall rules where only selected ports are usable.

Unfortunately, git.l4android.org does not support Git via HTTP and,
therefore, the sources need a working Git port (9418).

Fixes #443.
2012-10-30 12:12:42 +01:00
Norman Feske
746f3d4603 Add missing variable initialization 2012-10-30 12:06:55 +01:00
Christian Helmuth
fef2551af4 lx_hybrid: revive missing errno test 2012-10-29 10:08:30 +01:00
Stefan Kalkowski
4a92eb5660 Implement VMM for Linux in VEA9x4 normal-world 2012-10-29 10:08:30 +01:00
Stefan Kalkowski
8393ac6895 base-hw: implement vm_session for TrustZone
* Introduces Schedule_context
* Use fast-interrupts or normal interrupts
* Add mode-transition between secure/non-secure world
* Limit system resources for Genode apps due to non-secure world

This commit implements the newly introduced Vm session interface to be used
on top of TrustZone capable Armv7 CPUs. Therefore a new Schedule_context is
introduced in the kernel. Threads and Vms are both Schedule_contexts used
by the scheduler. In contrast to a thread a vm uses a different assembler
mode switch to the non-secure, virtual world, as well as another exception
is used, when the non-secure world is left. For both worlds to co-exist
the interrupt-controller needs to be configured, so that the secure (Genode)
world uses fast-interrupts only, and the non-secure world only legacy
interrupts.
The only TrustZone capable platform the base-hw kernel works on top of
is the CoreTile Express 9x4 for the Versatile Express motherboard. For a
virtual machine working properly on top some platform resources must be
reserved. Therefore there exist two flavours of this platform now, one with
the 'trustzone' spec-variable enabled, and one without. If 'trustzone' is
specified most platform resources (DDR-RAM, and most IRQs) are reserved
for the Vm and not available to the secure Genode world.
2012-10-29 10:08:30 +01:00
Stefan Kalkowski
965ffc1df2 base-hw: increase signal session initial quota 2012-10-29 10:08:29 +01:00
Stefan Kalkowski
94ea3a0acb Move away drivers from generic base-repository
Driver definitions which are used by kernel/core in base-hw, and also by other
drivers (e.g. from the os repository) have to reside in the generic
base-repository, for instance some uart drivers. All drivers which are
interesting for one of the sites only (sp804 for timer driver, or
cortex_a9 cpu driver for base-hw) should reside in the respective repos.

Factorize cpu context out of Cortex A9 specific definitions. Moreover, there
is already a Cpu_state object containing all common ARM registers. We use
this as a base for the cpu context switching done by the base-hw kernel.
The Cpu_state class get extended by a cpu-exception field, that stores the kind
of exception raised when the corresponding context got interrupted. This
information is used not only by the base-hw kernel, but also by the TrustZone
VMM that is build currently.
2012-10-29 10:08:29 +01:00
Stefan Kalkowski
f2d81a8d62 Remove superfluous, generic Thread_state definition
The 'Cpu_state' in 'base/include/base/cpu_state.h' is not needed anymore.
Moreover, it's inconsistent with the architecture-specific definitions
of 'Cpu_state' that all reside in <cpu/cpu_state.h>.
2012-10-29 10:08:29 +01:00
Stefan Kalkowski
6cd0c02dcd base-hw: introduce VM session interface
The VM session interface is meant to be generic, but first will be used in the context
of TrustZone only.
2012-10-29 10:08:29 +01:00
Stefan Kalkowski
dc3d784e6d Introduce platform-specific services for core
By now all services in core where created, and registered in the generic
main routine. Although there exists already a x86-specific service (I/O ports)
there was no possibility to announce core-services for certain platforms only.
This commit introduces a hook function in the 'Platform' class, that enables
registration of platform-specific services. Moreover, the io-port service
is offered on x86 platforms only now.
2012-10-29 10:08:29 +01:00
Stefan Kalkowski
96d45c1159 Define board declarations in a more generic fashion
By naming all board declaration (previously in base/include/drivers/board) the
same way, and putting them in platform-specific include-pathes, we save additional
declaration redirection in the base-hw kernel, and in driver definitions.
2012-10-24 16:41:13 +02:00
Stefan Kalkowski
d3902e8538 Make nic_bridge's MAC address range configurable
By adding a "mac=XX:XX:XX:XX:XX:XX" attribute/value pair to the nic_bridge's
configuration one can define the first MAC address from which the nic_brigde
will allocate MACs for it's clients. Note: that the least relevant byte will
be ignored, and ranges from 0-255. Fixes #424.
2012-10-24 16:39:02 +02:00
Christian Prochaska
1c064d9e70 core: implement missing context area functions
This patch implements the following functions:

base:
- Context_area_rm_session::detach()
- Context_area_ram_session::free()

base-nova:
- unmap_local()

base-fiasco, base-pistachio:
- unmap_local() stub

This patch partially resolves issue #394.
2012-10-24 11:34:39 +02:00
Christian Prochaska
330980378c base-nova: 'Rm_client::unmap()' fix
Areas of an attached dataspace which have never been accessed cannot get
unmapped. With this patch this case is not treated as error anymore.

Fixes #398.
2012-10-24 11:34:39 +02:00
Josef Söntgen
837f913094 Noux: more useful gettimeofday() implementation
There are certain programs that need gettimeofday(), e.g.
network-related tools like ping(1) etc. but also filesystem-related
programs like find(1) etc. and of course time-related programs like
date(1).

As there is currently no interface in Genode for actually using clock
devices like RTC on x86 (though there is a driver for it) we "abuse"
the timeout_scheduler thread to at least provide flow-of-time.

Noux: add clock_gettime() implementation

For now, only CLOCK_SECOND is supported.

Noux: add utimes() dummy

Fixes #401
2012-10-24 11:34:39 +02:00
Stefan Kalkowski
81e0bfefb6 L4Linux: fix conversion bug (fix #409) 2012-10-24 11:34:39 +02:00
Christian Prochaska
17dc60eb66 cxx: make 'operator delete(void *)' a weak symbol
The 'delete (void *)' operator gets referenced by compiler generated code,
so it must be publicly defined in the 'cxx' library. These compiler
generated calls seem to get executed only subsequently to explicit
'delete (void *)' calls in application code, which are not supported by
the 'cxx' library, so the 'delete (void *)' implementation in the 'cxx'
library does not have to do anything. Applications should use the
'delete (void *)' implementation of the 'stdcxx' library instead. To make
this possible, the 'delete (void *)' implementation in the 'cxx' library
must be 'weak'.

Fixes #419.
2012-10-24 11:34:39 +02:00
Christian Prochaska
ae8c464495 GDB monitor: move thread iterator declarations
This patch moves the thread iterator function declarations in GDB
monitor's 'Cpu_session_component' above the 'CPU session interface'
comment, because these functions are not part of the CPU session
interface anymore.

Fixes #10.
2012-10-24 11:34:38 +02:00
Alexander Boettcher
83039267fa Cleanup: remove 'first' and 'next' of cpu_session
Fixes #10
2012-10-24 11:34:38 +02:00
Alexander Boettcher
105ff5dfed Provide main thread cap via parent interface
Preparation to solve issue #10
2012-10-24 11:34:38 +02:00
Alexander Boettcher
664e0dc7cd Provide cpu_session_cap via environment object
Preparation to solve issue #10
2012-10-24 11:34:33 +02:00
Stefan Kalkowski
a287831537 L4Linux: dimension block cache correctly (fix #426)
In Genode's paravirtualized block driver a request cache is used to find again
Linux request structures via corresponding block-session packets. To work
correctly the cache needs to have at least the same size like the
block-session's queue-size.
2012-10-23 11:10:55 +02:00
Christian Helmuth
b91c06feb7 dde_ipxe: explicitly support x86_64
Fixes some obvious warnings and (maybe) hidden bugs.
2012-10-22 17:01:01 +02:00
Christian Helmuth
d0a68f055f dde_ipxe: use recent iPXE upstream version
Currently, we support the following NIC families:

- Intel gigabit ethernet (e1000, e1000e, igb)
- Intel eepro100
- Realtek 8139/8169

Fixes #423.
2012-10-22 17:01:01 +02:00
Stefan Kalkowski
d54304ddfc L4Linux: debug messages into file instead of pipe
Print Fiasco.OC kernel debugger messages into a file instead of a pipe
in the default l4linux run-script. Thereby rarely triggered issues by the
nightly running buildbot can be analyzed after the test failed.
2012-10-22 11:19:41 +02:00
Christian Helmuth
502976dec1 PCI: log PCI device as bus:device.function tuple
Refers to comment in #417.
2012-10-18 21:51:54 +02:00
Sebastian Sumpf
7822c4e9a4 L4Linux: Make block driver MP safe
Release block-request-queue-spin lock when blocking during packet allocations, this
is necessary to re-enable VCPU IRQs.

Fixes issue #395
2012-10-12 16:31:01 +02:00
Sebastian Sumpf
c06dc73738 L4Linux: Block driver add IRQ guards
Use IRQ guards in C++ interface when calling Genode intefaces.

Supplements issue #406
2012-10-12 16:30:47 +02:00
Stefan Kalkowski
0114391e0a L4Linux: fix IRQ save functions (fix #406) 2012-10-12 13:10:49 +02:00
Christian Prochaska
42a263b74f Noux: touch TARGET after successful installation
Make sure that the $(TARGET) file has a more recent timestamp than its
dependency after a successful installation.

Fixes #405.
2012-10-12 13:10:48 +02:00
Norman Feske
8b0ad007ca Fix warning 2012-10-12 13:10:48 +02:00
Norman Feske
5a1c47e943 Noux: simplify 'User_info' constructor
This patch removes the '_dup_str' function, which was unsafe due to a
missing check of the dst boundary.
2012-10-12 13:10:48 +02:00
Christian Prochaska
95f4b24f30 dde_ipxe_nic: add 'core/string.c' to 'SRC_C'
The 'string.c' file contains a 'memcmp()' implementation which is needed
by the driver.

Fixes #387.
2012-10-12 13:10:48 +02:00
Norman Feske
5d68b7d84f Fix typo in 'dde_linux'
Thanks Alexander Tarasikov for reporting!
2012-10-12 13:10:48 +02:00
Martin Stein
9dba710989 Enable 'signal' test on 'base_hw'. 2012-10-12 13:10:45 +02:00
Sebastian Sumpf
97dd1d57cf EGL: Aligned memory allocation
Free memory allocated with 'align_malloc' using 'align_free'.

Fixes issue #391
2012-10-11 17:10:21 +02:00
Christian Prochaska
be171d86bb libc: handle 'O_APPEND' flag for 'open()'
Fixes #319.
2012-10-11 17:10:21 +02:00
Sebastian Sumpf
4a3d852b65 Core: Shared IRQ support for Nova/FOC/OKL4
Implement shared IRQs using 'Irq_proxy' class.

Nova: Added global worker 'Irq_thread' support in core and adapted Irq_session.

FOC: Adapted IRQ session code, x86 has shared IRQ support, ARM uses the old
model. Read and set 'mode' argument (from MADT) in 'Irq_session'.

OKL4: Use generic 'Irq_proxy'

Fixes issue #390
2012-10-11 17:10:16 +02:00
Sebastian Sumpf
5549f6413b IRQ: Add base class for shared IRQs
Added generic 'Irq_proxy' class to core includes (ported from base-okl4). It can
be used to implement shared IRQ support for various base platforms. It will
generate one thread per IRQ and unblocks waiting clients (IRQ sessions) upon
interrupt receipt.

Issue #390
2012-10-09 13:47:47 +02:00
Sebastian Sumpf
ff0c7825e4 ACPI/IRQ: Add interrupt mode to IRQ connection
Read flags (polarity/trigger) from MADT and add information to 'Irq_connection'
arguments.

Issue #390
2012-10-09 13:47:47 +02:00
Norman Feske
4a1b545770 Move 'Child' API implementation to library 2012-10-09 13:45:33 +02:00
Christian Prochaska
f635cc4a19 Python: use 'libc-rom' plugin
This patch removes the libc plugin of the Python port. The Python test
uses the 'libc_rom' plugin instead.

Fixes #392.
2012-10-08 15:10:22 +02:00
Norman Feske
b62492837d Move 'Static_root' to public place
The 'Static_root' class template has proven to be useful for more than
one program. So we expose it as part of the API in the os repository.
2012-10-08 15:08:26 +02:00
Norman Feske
64245dde3a Avoid superfluous compiler warnings
GCC warns about uninitialized local variables in cases where no
initialization is needed, in particular in the overloads of the
'Capability::call()' function. Prior this patch, we dealt with those
warnings by using an (unreliable) GCC pragma or by disabling the
particular warning altogether (which is a bad idea). This patch removes
the superfluous warnings by telling the compiler that the variable in
question is volatile.
2012-10-08 15:08:21 +02:00
Norman Feske
f4bc08c16f Whitespace fixes in Noux 2012-10-08 15:08:17 +02:00
Alexander Boettcher
ec66788f11 NOVA: cleanup - remove _first_sel special handling
Replace dislocation of extern variables with simplistic convention
2012-10-08 15:08:12 +02:00
Alexander Boettcher
f1202139f9 NOVA: fix compiler warning 2012-10-08 15:08:06 +02:00
Alexander Boettcher
2f460b4638 Vancouver: use github version
Fixes #361
2012-10-08 15:08:02 +02:00
Christian Prochaska
56243820ee ram_fs: always set '_length' in 'File::truncate()'
Fixes #381.
2012-10-08 15:07:58 +02:00
Christian Prochaska
cbf401f232 Noux: 'which'
This patch adds the GNU 'which' program to the 'ports' repository.

Fixes #380.
2012-10-08 15:07:53 +02:00
Christian Prochaska
e9ac4b653b Add support for symbolic links
This patch adds support for symbolic links in libc, libc plugins, file
system servers and Noux.

Fixes #322.
2012-10-08 15:05:02 +02:00
Christian Helmuth
4017e592f0 Compile PDBG() in release mode too
Formerly, GENODE_RELEASE just undef'd PDBG() which concealed bugs in
places PDBG was used, e.g., do to API changes. Unfortunately,
desparately disabling GENODE_RELEASE during bug hunt sometimes
introduced new errors. Now, PDBG is just a branch not taken but seen by
the compiler, which is able to produce warnings/errors when the API is
changed.

Fixes #378.
2012-10-04 14:37:18 +02:00
Alexander Boettcher
6862ab481a NOVA: drop special utcb handling of main thread
Unify handling of UTCBs. The utcb of the main thread is with commit
ea38aad30e at a fixed location - per convention.
So we can remove all the ugly code to transfer the utcb address during process
creation.

To do so also the UTCB of the main thread of Core must be inside Genode's
thread context area to handle it the same way. Unfortunately the UTCB of the
main thread of Core can't be chosen, it is defined by the kernel.

Possible solutions:
- make virtual address of first thread UTCB configurable in hypervisor
- map the utcb of the first thread inside Core to the desired location

This commit implements the second option.

Kernel patch: make utcb map-able
With the patch the Utcb of the main thread of Core is map-able.

Fixes #374

Noux actually uses the sp variable during thread creation and expects to be
set accordingly. This wasn't the case for the main thread, it was ever set
to the address of the main thread UTCB.
2012-10-04 14:35:38 +02:00
Norman Feske
0775730155 Add missing initialization of 'write_combined' 2012-10-04 14:03:07 +02:00
Martin Stein
f2cfda6be6 Avoid use of address 0x0 in protection domains. 2012-10-01 11:45:47 +02:00
Christian Prochaska
963b77bc27 Noux: release binary dataspace in SYSCALL_EXECVE
Fixes #375.
2012-09-30 13:37:49 +02:00
Christian Prochaska
a42f6d8cf7 Noux: get 'libgcc_eh.a' built with GCC
Fixes #373.
2012-09-30 13:37:20 +02:00
Christian Prochaska
20fcede93a Noux: fix error handling in 'Dir_file_system'
If during the file system iterations in the 'stat()', 'rename()' or
'mkdir()' funtions of the 'Dir_file_system' class any file system
returns an error code other than 'ERR_NO_ENTRY', return immediately.

Fixes #376.
2012-09-28 17:08:20 +02:00
Christian Prochaska
2c9c7c817b libc: return 0 in 'fchmod' and 'utimes' dummies
Fixes #371.
2012-09-28 17:07:21 +02:00
Sebastian Sumpf
ad70160847 LWIP: Fix dead lock in semaphore back-end
Make sure unlock is called when 'global_mutex' reaches zero count. Add verbose
variable in order to disable some output. Disable irritating 'Overflow' messages
in 'sys_mbox_post' and 'sys_mbox_try_post' per default. This may happen and is
not an error, since the ring buffer is full and will be emptied eventually.
Remove priority from genode_org run script.

Should fix #347
2012-09-28 17:06:35 +02:00
Christian Prochaska
1497d5e48f libc_noux: fix 'lseek()' error message
Print 'lseek: ERR_FD_INVALID' instead of 'dirent: ERR_FD_INVALID'.

Fixes #370.
2012-09-28 17:05:36 +02:00
Christian Prochaska
d4499cba41 libc_noux: return the new file descriptor in 'dup2()'
Fixes #369.
2012-09-28 17:05:22 +02:00
Christian Prochaska
0a12e262ce Noux: fix interpreter argument processing
Don't write a '\0' into the argument buffer if no interpreter argument is
given.

Fixes #368.
2012-09-28 17:05:04 +02:00
Christian Prochaska
9dc213b296 'Genode::Path': Remove superfluous slashes first
Fixes #367.
2012-09-25 13:18:36 +02:00
Stefan Kalkowski
c12d2f80f2 L4lx: re-apply network performance hook
Re-enable tcp-patch introduced by Sebastian Sumpf that tweaks TCP rmem,
and wmem buffer sizes to show better performance results.
2012-09-24 09:18:00 +02:00
Christian Prochaska
1483f1032d Remove broken compiler check
The 'build.mk' file checks if the tool chain to be used supports the
'-static' and '-fno-stack-protector' flags, but this check always fails
for the current Genode tool chain because it cannot create executable
files without explicitly specifying the 'crt0' and library files to be
linked, which the check doesn't.

This patch removes the compiler check.

Fixes #358.
2012-09-24 09:18:00 +02:00
Alexander Boettcher
9eeec09ebe Fix log2 and alignment calculation - 64bit issue 2012-09-24 09:18:00 +02:00
Christian Prochaska
55a8bae2f8 Noux: close all file descriptors on child exit
With this patch, when a child exits, all of its open file descriptors get
closed immediately. This is necessary to unblock the parent if it is
trying to read from a pipe (connected to the child) before calling
'wait4()'.

Fixes #357.
2012-09-24 09:18:00 +02:00
Josef Söntgen
af58d39854 Noux: fix previous attempt of fixing SYSCALL_READ 2012-09-24 09:18:00 +02:00
Sebastian Sumpf
8ed489c4bc libc: Decrease noise level of debugging output
Changed 'libc_fs', 'libc_lwip' and 'libc/clock_gettime'
2012-09-24 09:18:00 +02:00
Sebastian Sumpf
825dc783e6 libc: Change malloc's allocator
Use slab allocators for small object sizes, do it the usual way otherwise.

This patch is related to #363. Using this optimization may be a viable
alternative to switching to the FreeBSD's malloc implementation.
2012-09-24 09:17:59 +02:00
Sebastian Sumpf
7ca7b4417d lwIP: Rewrite NIC packet allocation
Use 'Nic::Packet_allocator', wait for acknowledgements if packet allocation
fails. Updated 'lwip.run' and 'genode_org.run' to support OMAP4 correctly. Use
memcpy to copy PBUFs

May resolve issue #347
2012-09-24 09:17:59 +02:00
Stefan Kalkowski
5c36639031 Fix UDP checksum calculation (fixes #360)
Missing parantheses around the calculation of last byte address in a UDP
Packet led to dereferencing the wrong value, thereby the UDP checksum
calculation failed, whenever an odd byte-count UPD packet was calculated.
Many thanks to Markus Partheymueller who discovered this issue and its
resolution.
2012-09-24 09:17:59 +02:00
Christian Prochaska
97c3f6599d Noux, libc_terminal: initialize 'stat' buffer
Initialize the 'stat' buffer in the 'stat()' function to avoid potential
non-deterministic program behavior.

Fixes #362.
2012-09-24 09:17:59 +02:00
Alexander Boettcher
8af582fac2 Vancouver: catch exception during module loading
Catch any kind of exception we get from the rm_session during module
loading. Panic if modules can't be processed (too big images and so on)
2012-09-24 09:17:59 +02:00
Alexander Boettcher
7bd0ed7c44 NOVA: fix overflow in address check 2012-09-24 09:17:59 +02:00
Alexander Boettcher
f5efbff19c Vancouver: map solely requested memory region
Don't map all memory of the VM at once, instead only the one permitted
by the memory model. Otherwise memory regions get mapped which must not,
where each instruction and memory access have to cause an exception in
order to emulate it step by step.
2012-09-24 09:17:59 +02:00
Alexander Boettcher
315a8437e3 Vancouver: make debug output configurable 2012-09-24 09:17:59 +02:00
Alexander Boettcher
2fd68105a3 Vancouver: Make sure context area gets reserved 2012-09-24 09:17:58 +02:00
Alexander Boettcher
5566446211 Vancouver: dimension VM size dynamically 2012-09-24 09:17:58 +02:00
Alexander Boettcher
79b0a7a2c9 Vancouver: zero initialize memory of the heap
Classes in Vancouver expect to get zero initialised memory when using memory
from the heap. Some classes don't initialize member variables as they should
do.
2012-09-24 09:17:58 +02:00
Alexander Boettcher
11a262c1af Allocate first heap requests from bss
The exception initialization and handling in gcc_eh allocates early (_main)
memory before executing main. In Vancouver the virtual
region from [0,VM size) must be reserved. Vancouver fails if the memory
allocated by the exception handling and the static objects was allocated
inside the [0, VM size) area.

To circumvent the situation allocate the first memory pieces for the heap
from the bss.
2012-09-24 09:17:58 +02:00
Alexander Boettcher
0d9e5f2daf Vancouver: Reserve VM memory region early
Reserve memory region for VM as early as possible before any other
memory allocation happens. Otherwise it could happen that heap
allocations will use part of the virtual region we require for the VM.
2012-09-24 09:17:58 +02:00
Alexander Boettcher
dbbfab5e7b 64bit fix for region dump 2012-09-24 09:17:58 +02:00
Alexander Boettcher
110a69413d NOVA: move context area
Move the context area close to the end of the virtual user available address,
so that Vancouver can obtain as much as possible of the lower virtual address
range for VMs.
2012-09-24 09:17:58 +02:00
Alexander Boettcher
ed2e610178 NOVA: maximize contiguous virtual space for 32/64
Use virtual regions for memory used during core initialization behind context
area. Enables us to start Vancouver VMs up to 1280 MiB, which requires
large virtual regions of contiguous aligned memory.

Exclude used virtual regions of echo and of pager thread in core.
2012-09-24 09:17:57 +02:00
Alexander Boettcher
ea38aad30e Move context area definition to native_type 2012-09-24 09:17:54 +02:00
Stefan Kalkowski
62d81ae487 Timer: make ram_quota and stack platform-dependent 2012-09-19 14:28:36 +02:00
Stefan Kalkowski
2e1bfe5d9b Fiasco.OC: always use fixed priority scheduler
The alternative weighted scheduler might lead to some threads don't make
any progress anymore (take for example the signal test). So we have to use
the fixed priority scheduler also in the kernel configuration for 64 Bit.
2012-09-19 14:27:42 +02:00
Norman Feske
b57c629449 Adapt timer quota to change in 'Allocator_avl' 2012-09-18 17:14:28 +02:00
Stefan Kalkowski
689c08e411 Make first block of allocator_avl 64bit fit
The first metadata-block, which is inherent part of the allocator object
itself has a fixed size which isn't suitable enough for some 64bit platforms
(e.g. core's RAM-allocator on a 64bit platform with lots of different regions).
This commit let the block size be address-width aware.
2012-09-18 16:47:59 +02:00
Stefan Kalkowski
361a67d749 Fiasco.OC: fix io-port fault answer in sigma0
In sigma0 normally no answer tag to a request/fault is created. It simply uses
the message tag received with the request. This doesn't work out when I/O ports
are requested. This patch constructs an appropriate answer tag. Moreover,
we have to enable I/O port protection in the kernel configuration.
2012-09-18 16:47:59 +02:00
Norman Feske
3e406a1077 Increase quota of USB driver
The memory allocation heuristics in the usb driver provided by dde_linux
changed with the recent commit 71b2b42936.
Apparently, the new variant requires a larger memory pool. Increasing
the quota is a temporary fix until the memory allocator gets revisited.
2012-09-18 10:53:17 +02:00
Stefan Kalkowski
efe3b8af74 L4Linux: update to recent version (svn rev. 25) 2012-09-18 10:53:16 +02:00
Stefan Kalkowski
1e87ef627b Fiasco.OC: update to recent version (svn rev. 40) 2012-09-18 10:53:16 +02:00
Josef Söntgen
6259fcf736 libports: add lwIP tests for Pandaboard on foc 2012-09-18 10:52:57 +02:00
Norman Feske
b22920c3a7 Enable noux_bash and noux_gdb on Pandaboard 2012-09-17 15:18:34 +02:00
Stefan Kalkowski
760f37fc86 Fiasco.OC: enable SMP for L4Linux
This commit comprises the following changes to enable L4Linux to use several
CPUs:
* change default configuration for x86 and ARM
* add atomic cmpxchg operation to l4re library
* implement l4_sleep (per thread)
* enable setting affinity for VCPUs and IRQs
* move "per CPU" section within linker-script (x86 only)
* introduce SMP run-script for pandaboard
* deactivate direct scheduler (Fiasco.OC syscall) access by L4Linux
2012-09-14 12:30:29 +02:00
Stefan Kalkowski
c63f3c07de Fiasco.OC: implement thread-affinity function 2012-09-14 12:29:58 +02:00
Josef Söntgen
83dd1640fc Noux: fix SYSCALL_READ return value
There is an error if reading from a Io_channel returns -1. In this
case the syscall should fail.

Fixes #356.
2012-09-14 12:24:13 +02:00
Christian Prochaska
97308f963a ffat_fs: work with absolute paths
The recently added 'Genode::Path' class makes it easy to create absolute
paths. With this patch the 'ffat_fs' server uses the 'Genode::Path' class
where possible instead of working with 'f_chdir()' and relative paths.
This also solves the problem reported in issue #355, which was caused by
storing a relative file name in the 'File' node.

Fixes #355.
2012-09-14 12:23:26 +02:00
Christian Prochaska
d6402041bc Noux: return dummy time in 'gettimeofday()'
The 'find' program can abort if the 'gettimeofday()' function returns -1,
which it currently does. With this patch the 'gettimeofday()' returns a
dummy time instead to prevent such a termination.

Fixes #353.
2012-09-14 12:21:54 +02:00
Christian Prochaska
4b81cf3e63 Noux: fix 'Vfs_io_channel::lseek()' calculations
With this patch the 'Vfs_io_channel::lseek()' function takes the offset
argument into account when calculating the new seek offset in the SEEK_CUR
and SEEK_END cases.

Fixes #352.
2012-09-14 12:21:16 +02:00
Christian Prochaska
4ab9782b8b Noux: use correct member in Vfs_io_channel::size()
Fixes #351.
2012-09-14 12:20:33 +02:00
Christian Prochaska
3cfc691c77 libc_fs: handle 'Packet_alloc_failed' exception
With this patch, when a 'Packet_alloc_failed' exception occurs in the
'write()' function, the function waits for a packet acknowledgement and
the release of the packet and then tries the packet allocation again.

Fixes #348.
2012-09-14 12:13:05 +02:00
Alexander Boettcher
6994f6a8c5 Fix binary size for 64bit
Every 64-bit binary is effectively 4M too big currently [0]. The GNU linker ld
aligns the text section of the binary to the maximum page size. On i386
the default section alignment is fixed typically to 4K.

Avoid wasting mainly 4M on x86_64 by telling the linker the max page size to
be 4K.

[0] http://sourceware.org/ml/binutils/2009-04/msg00099.html
2012-09-05 15:06:52 +02:00
Norman Feske
83bdfea9b0 Extend Cpu_session with thread-affinity API
This patch introduces the functions 'affinity' and 'num_cpus' to the CPU
session interface. The interface extension will allow the assignment of
individual threads to CPUs. At this point, it is just a stub with no
actual platform support.
2012-09-05 10:25:04 +02:00
Norman Feske
43db231e77 Adapt Qt4 to change of stdcxx, issue #339
The new C++ standard library provided by libports is a shared library.
We need to include it in each run script that uses Qt4.
2012-09-04 12:38:06 +02:00
Norman Feske
9651974448 Add stdcxx-4.6.1 to libports, fix #339
This patch adds libstdc++ to libports. With the previous version of the
stdcxx library, the build system used the C++ standard library that
comes with the compiler. This mechanism was prone to inconsistencies of
types defined in the header files used at compile time of the tool chain
and the types provided by our libc. By building the C++ standard library
as part of the Genode build process, such inconsistencies cannot happen
anymore.

Note that the patch changes the meaning of the 'stdcxx' library for
users that happened to rely on 'stdcxx' for hybrid Linux/Genode
applications. For such uses, the original mechanism is still available,
in the renamed form of 'toolchain_stdcxx'.
2012-09-04 12:37:56 +02:00
Josef Söntgen
f7dd8aa688 libports: adjust lwip's TCP_SND_BUF size
The old values were much too small and the current ones are probably to
large but the TCP send throuhgput has increased noticeable (a few MiB/s
on the Pandaboard).

Fixes #343.
2012-09-03 11:10:39 +02:00
Taru Karttunen
bff86ab74d libc_terminal: TIOCGETA return always echo on 2012-09-03 11:05:23 +02:00
Taru Karttunen
27bbaf75ba libc_terminal: add fstat and fake some ioctls, fix #344 2012-09-03 11:05:00 +02:00
Stefan Kalkowski
28614ce518 Fiasco.OC: fix capability ref-counter issue in core
The Cap_mapping abstraction in core shouldn't use a Cap_index directly, but
use Native_capability instead, as it can break reference-counting, as long as
the same Cap_index gets used in a Cap_mapping and a Native_capability. This
commit finally fixes #208.
2012-09-03 11:00:09 +02:00
Stefan Kalkowski
a5ea6765d1 Fiasco.OC: several capability ref-counter fixes.
This commit fixes several issues that were triggered e.g. by the
'noux_tool_chain' run-script (fix #208 in part). The following problems
are tackled:
* Don't reference count capability selectors within a task that are actually
  controlled by core (all beneath 0x200000), because it's undecideable which
  "version" of a capability selector we currently use, e.g. a thread gets
  destroyed and a new one gets created immediately some other thread might
  have a Native_capability pointing to the already destroyed thread's gate
  capability-slot, that is now a new valid one (the one of the new thread)
* In core we cannot invalidate and remove a capability from the so called
  Cap_map before each reference to it is destroyed, so don't do this in
  Cap_session_component::free, but only reference-decrement within there,
  the actual removal can only be done in Cap_map::remove. Because core also
  has to invalidate a capability to be removed in all protection-domains
  we have to implement a core specific Cap_map::remove method
* When a capability gets inserted into the Cap_map, and we detect an old
  invalid entry with the dame id in the tree, don't just overmap that
  invalid entry (as there exist remaining references to it), but just remove
  it from the tree and allocate an new entry.
* Use the Cap_session_component interface to free a Pager_object when it
  gets dissolved, as its also used for allocation
2012-09-03 10:59:54 +02:00
Stefan Kalkowski
b71c1649d6 Fiasco.OC: check invoked capability (fix #341)
Let the Fiasco.OC base platform succeed the cap_integrity run-script meaning
that it is not feasible anymore to fake a capability by using a valid one
together with a guessed local_name.
2012-08-30 11:15:27 +02:00
Sebastian Sumpf
c98a80251c USB: Sync interrupts
On systems that use multiple UHCI/EHCI controllers, synchronize access to low
level interrupt handler. Let 'device_may_wakeup' return 1, so suspended
controllers will send interrupts upon device connection. Make sure URBs are
shutdown upon disconnect.

Fixes #332
2012-08-30 11:12:49 +02:00
Sebastian Sumpf
71b2b42936 USB: Dimension back-end allocators dynamically
Use avaible ram session quota to determine the size of the memory allocators.

Fixes #331
2012-08-30 11:12:32 +02:00
Christian Prochaska
78b0bd57f7 Noux: store environment variables zero-separated
With this patch environment variables always get stored as zero-separated
strings in buffers of type 'Sysio::Env'. This fixes the problem that
environment variables with non-alphanumeric characters did not get set
correctly in child processes.

Fixes #340.
2012-08-30 10:44:53 +02:00
Josef Söntgen
1b9c356aa3 Noux: override uid/gid in SYSCALL_STAT
Change the uid/gid entries in the stat syscall to have the same values
on all filesystems that are used in the current noux-instance according
to the specified values in noux' config.

Fixes #338.
2012-08-30 10:44:22 +02:00
Josef Söntgen
9cff243f42 Noux: add proper errno handling to network funcs
Programs use the errno value to check which error exactly occured.
It is mandatory for non-blocking I/O, e.g. connect() gets the current
state of the connection by looking at the returned errno values.

Fixes #337.
2012-08-30 10:44:06 +02:00
Alexander Boettcher
aae3ce348e NOVA: add single-step support used by gdb
Fixes #336
2012-08-30 10:42:38 +02:00
Alexander Boettcher
3b0e4372fe NOVA: setup all exception handlers of a thread 2012-08-30 10:42:38 +02:00
Alexander Boettcher
fcd62729d4 NOVA: tunnel thread start parameters via state()
The cpu_session interface fails to be virtualized by gdb_monitor because
platform-nova uses an extended nova_cpu_session interface.

The problem was that threads have been created directly at core without
knowledge of gdb_monitor. This lead to the situation that gdb_monitor didn't
know of all threads to be debugged.

Tunnel the additional parameters required on base-nova through the state()
call of the cpu_session interface before the thread actual is started.
2012-08-30 10:42:26 +02:00
Alexander Boettcher
197a48a26c NOVA: implement pause using recall kernel feature 2012-08-30 10:40:00 +02:00
Alexander Boettcher
841a1fd579 NOVA: extend cpu_session with synchronous pause
The kernel provides a "recall" feature issued on threads to force a thread into
an exception. In the exception the current state of the thread can be obtained
and its execution can be halted/paused.

However, the recall exception is only delivered when the next time the thread
would leave the kernel. That means the delivery is asynchronous and Genode has
to wait until the exception triggered.

Waiting for the exception can either be done in the cpu_session service or
outside the service in the protection domain of the caller.

It turned out that waiting inside the cpu_service is prone to deadlock the
system. The cpu_session interface is one of many session interfaces handled by
the same thread inside Core.

Deadlock situation:
* The caller (thread_c) to pause some thread_p manages to establish the call
  to the cpu_session thread_s of Core but get be interrupted before issuing
  the actual pause (recall) command.
* Now the - to be recalled thread_p - is scheduled and tries to invoke another
  service of Core, like making log output.
* Since the Core thread_s is handling the session request of thread_c, the
  kernel uses the timeslice of thread_p to help to finish the request handled
  by thread_s.
* Thread_s issues the actual pause/recall on thread_p and blocks inside Core
  to wait for the recall exception to be issued.
* thread_p will leave not the kernel before finishing it actual IPC with
  thread_s which is blocked waiting for thread_p.

That is the reason why the waiting/blocking for the recall exception taking
place must be done on NOVA in the context of the caller (thread_1).

Introduce a pause_sync call to the cpu_session which returns a semaphore
capability to the caller. The caller blocks on the semaphore and is woken up
when the pager of thread_p receives the recall exception with the state of
thread_p.
2012-08-30 10:40:00 +02:00
Alexander Boettcher
7595823146 Propagate result of cpu_session::state call
State may fail, don't just return just true.
2012-08-30 10:40:00 +02:00
Alexander Boettcher
0d03a91b80 NOVA: Use thread_state with all registers 2012-08-30 10:40:00 +02:00
Alexander Boettcher
39957d17b2 Enable gdb_monitor for NOVA 2012-08-30 10:40:00 +02:00
Norman Feske
28402eb085 Add 'libports/include/pcre' to '.gitignore' 2012-08-28 20:53:36 +02:00
Norman Feske
b7d3601624 Enable 'genode_org.run' examle for Pandaboard 2012-08-23 11:26:19 +02:00
Norman Feske
969cffd53a Release notes for Genode 12.08 2012-08-23 08:42:06 +02:00
Norman Feske
7483245dad News item for Genode 12.08 2012-08-23 08:41:59 +02:00
Norman Feske
3b3e78b52d Updated links in top-level README 2012-08-22 20:42:30 +02:00
Norman Feske
42b09924e1 Update of 'doc/components.txt' 2012-08-22 20:13:36 +02:00
Christian Prochaska
9c278d6b8f libc_fs: release libc file descriptor in 'close()'
Fixes #334.
2012-08-22 16:50:03 +02:00
Christian Prochaska
7f092be94c libc: allocate file descriptor sets on the stack
The 'fd_set' size calculation in the current version of the 'poll()'
function results in an  amount which is smaller than the size of the
'fd_set' data type. With this patch the file descriptor sets get
allocated as plain stack variables.

Fixes #335.
2012-08-22 16:48:35 +02:00
Norman Feske
59a9d1f2b0 Run script for hosting genode.org on Genode
This run script combines the lighttpd web server with the tar_fs file
system to host the genode.org website.
2012-08-22 10:32:03 +02:00
Christian Prochaska
3084c6f500 TAR file system service
This patch implements a service which provides the contents of a tar
archive via the 'File_system::Session' interface.

Configuration:

<config>
	<archive name="tar_archive.tar" />
	<policy label="label_of_client" root="/rootdir/for/client" />
</config>

Fixes #333.
2012-08-22 09:51:31 +02:00
Norman Feske
99ad554bef Minor style fix 2012-08-22 09:51:31 +02:00
Norman Feske
f4881a37c8 libc_noux: fix compile warnings 2012-08-22 09:51:31 +02:00
Josef Söntgen
95f71a5f71 Noux: add is_nonblocking() method
Certain programs tend to set their sockets non-blocking. As previously
descriptors in Noux were only blocking we now introduce a method to mark
the used Io_channel as non-blocking.
2012-08-22 09:51:30 +02:00
Josef Söntgen
343266b06e Noux: add F_GETFL handling to terminal_io_channel
There are certain programms which check if an fd is open by calling
fcntl(fd, F_GETFL, ...). So to keep them happy we return true if
such an request was done to our terminal fd's.
2012-08-22 09:51:30 +02:00
Josef Söntgen
7dfbd9e191 Noux/net: fix write() in socket_io_channel 2012-08-22 09:51:30 +02:00
Josef Söntgen
1c495b79f4 Noux/net: add proper fcntl() to socket_io_channel 2012-08-22 09:51:30 +02:00
Josef Söntgen
a6904b4deb Noux: add F_SETFL to libc_noux's fcntl()
Among other things it is used to set non-blocking mode, so we should
support it (e.g. fcntl(d, F_SETFL, fl | O_NONBLOCK)).
2012-08-22 09:51:30 +02:00
Josef Söntgen
4aac3933b3 Noux: add FIONBIO handling support to libc_noux 2012-08-22 09:51:30 +02:00
Josef Söntgen
8dfb3d5d81 Noux: add cleanup_socket_descriptors() function
When a child exists it makes sure that all remaining socket descriptors
are closed.
2012-08-22 09:51:30 +02:00
Josef Söntgen
2010a74fba Noux/net: add reset_all() method to sd registry
This method is called when a child is exiting to remove all remaining
sockets from the socket descriptor registry to close all sockets.
2012-08-22 09:51:30 +02:00
Josef Söntgen
57b0490fc6 Noux: remove {get,free}addrinfo
This dead-code will not be needed in the future because we now use
libc_resolv.
2012-08-22 09:51:29 +02:00
Josef Söntgen
6aa05e8d46 Noux: add noux-pkg/lynx
Explanation why --disable-rpath-hack is needed:

When building on pistachio_x86 $(LDFLAGS) contains '-L[...]/l4/lib'
which will be transformed by autoconf to '-rpath [...]/l4/lib'.
Now the problem at hand is that we pretend to be FreeBSD when we are
actually not. So autoconf assumes it is valid to use '-path'  when it
is actually not.

Also we use zlib for (de)compressing gzipped streams/files instead of
calling gzip as this currently somewhat buggy.
2012-08-22 09:51:29 +02:00
Josef Söntgen
42c259d9f0 Noux: add noux-pkg/etc
This package provides files in /etc which are needed for domain
resolving etc. pp.
2012-08-22 09:51:29 +02:00
Sebastian Sumpf
3e952f4e49 Demo: Increase quota for 'test_nit'
The quota was insufficient for foc64
2012-08-22 09:51:29 +02:00
Josef Söntgen
fd3b54a4fb Noux: add libc_resolv to noux-pkg/netcat 2012-08-22 09:51:29 +02:00
Josef Söntgen
b7dc9af447 Noux: rename noux-pkg/gnu-netcat
The other GNU based packages do not have a gnu- prefix either.
2012-08-22 09:51:29 +02:00
Norman Feske
2b5cf1342d libc: Dummy fallbacks for user and net support 2012-08-22 09:51:29 +02:00
Norman Feske
4fae082b34 Increase quota of OMAP4 USB driver in demo.run 2012-08-22 09:51:29 +02:00
Alexander Boettcher
5fcdd61a13 NOVA: fix placement of EC cap for recall
Put EC cap next to SM cap of Vcpu_dispatcher and not of the Vcpu.

Thanks @parthy for pointing out the issue.
2012-08-22 09:51:29 +02:00
Alexander Boettcher
125d274bc7 NOVA: fix locking in vancouver
Reported by @parthy.
2012-08-22 09:51:28 +02:00
Josef Söntgen
a4f4a5fb5a Noux: add /dev/null and /dev/zero filesystems
These device are mandatory for most programs (well, at least null
is required to be present for a POSIX compliant OS, which Noux is
actually not). But for proper shell-script support we will need
them anyway.
2012-08-22 09:51:28 +02:00
Josef Söntgen
a77c3dffd0 Noux: add user information support (struct passwd)
There are certain programs which need the information that is stored in
'struct passwd'. This commit introduces configurable user information
support to NOUX.

One can set the user information via <user> in NOUX config:

! <config>
!   <user name="baron" uid="1" gid="1">
!     <shell name="/bin/bash" />
!     <home name="/home" />
!   </user>
! [...]
! </config>

When <user> is not specified default values are used. Currently these
are 'root', 0, 0, '/bin/bash', '/'.

Note: this is just a single user implementation because each Noux instance
has only one user or rather one identity and there will be no complete
multi-user support in Noux. If you need different users, just start new
Noux instances for each of them.
2012-08-22 09:51:28 +02:00
Josef Söntgen
f2299abab5 libports: remove passwd functions from libc
Removes getpwent.c from build because the passwd facilities provided by
the FreeBSD libc will not be used anyway and add stub functions instead.
Now services which need these functions have to implement their own
(e.g. libc_noux).
2012-08-22 09:51:28 +02:00
Norman Feske
a8609213a0 libc: Resolve subtle ambiguity in symlink creation
Apparently, GNU make 3.81 picks the generic '%.h' rule instead of the
more specific 'rpc/%.h' rule during the preparation of the libc.
Changing the order of the rules solves the problem.
2012-08-22 09:51:28 +02:00
Josef Söntgen
ed6fa86a87 libports: add gethostbyname, getservbyname dummies 2012-08-22 09:51:28 +02:00
Josef Söntgen
6fcbea000c libports: add libc_resolv
libc_resolv is a {free,get}addrinfo() plugin, mainly for use with NOUX.

We prefix the original libc functions to with 'libc_' so there is no
symbol conflict with file_operations.cc.
2012-08-22 09:51:28 +02:00
Josef Söntgen
34bfb70946 libports: add needed files to libc-net 2012-08-22 09:51:28 +02:00
Josef Söntgen
fba80f3fee libports: add libc's libc-rpc 2012-08-22 09:51:27 +02:00
Josef Söntgen
789ab39670 libports: remove certain static libs from libc.mk
Most of the libs are needed for DNS related stuff. Since we now
have libc_resolv they are not longer needed. Infact they will
lead to undefined symbols so we remove them alltogther as build
dependency for the libc.
2012-08-22 09:51:27 +02:00
Josef Söntgen
ae524e4beb Noux: add timeout handling to select()
Previously there was not actual timeout handling. If a select() call
set an timeout it would be set to zero instead and was always handled
as blocking i/o. While this works fine for file descriptors which
will be triggerd externally (for example vim through terminal i/o) it
does not work at all for socket descriptors and network operations in
general.

So this commit introduces proper timeout handling and changes the
behaviour of SYSCALL_SELECT so that it now returns more than just
one descriptor at a time.

noux/minimal and noux/net now depend on thread and alarm libraries.
2012-08-22 09:51:27 +02:00
Norman Feske
d4d229bdc7 libc: Unregister region on nunmap 2012-08-22 09:51:27 +02:00
Norman Feske
0296e6f66b lwip: Convert fcntl argument, add missing defs 2012-08-22 09:51:27 +02:00
Norman Feske
94caac575b Compile warning fix 2012-08-22 09:51:27 +02:00
Norman Feske
606ff66407 Noux: Toggle syscall tracing via config
Noux used to trace syscalls by default, which significantly slows down
its execution. This patch disables the tracing by default. It can be
enabled by specifying 'trace_syscalls="yes"' attribute to the Noux
configuration.
2012-08-22 09:51:27 +02:00
Norman Feske
e60eb0f57f noux: pass correct mode to Fs_vfs_handle
This patch resolves a problem with running 'noux_gdb.run'. Right at the
start, GDB would output a message like:

  ...cli-script.c:1614: internal-error: called with NULL file pointer!
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.
  Quit this debugging session? (y or n)

The LOG output hints at the cause of the problem:

  [init -> noux -> /bin/genode-x86-gdb] fcntl: F_GETFL for libc_fd=3

Thanks to cproc for the fix!
2012-08-22 09:51:27 +02:00
Sebastian Sumpf
de5d5c2a1e ACPI: Fix offsets when mapping I/O mem
Fixes #309
2012-08-22 09:51:26 +02:00
Sebastian Sumpf
9486022164 ACPI: Allow PCI slave to use CPU sessions 2012-08-22 09:51:26 +02:00
Josef Söntgen
4444d60a2b libports: enable SO_REUSEADDR in lwip 2012-08-22 09:51:26 +02:00
Josef Söntgen
610a122f74 Noux: change default --prefix in noux.mk
The directory specified by --prefix is not only used to determine
the install location but is also used by -rpath. Therefor it is
better to use $(DESTDIR) to install the binaries to the right
directory and to use --prefix to express the actual location within
NOUX.
2012-08-22 09:51:26 +02:00
Josef Söntgen
66198660aa Noux: add noux_net_lighttpd.run
This patch adds lighttpd as noux package. However, we do not use the
original build system but rather compile lighttpd directly from the
Genode build system. This is needed because we want to statically link
lighttpd modules into the binary. This mode is (somehow) supported by
the SConscript that comes with lighttpd. However, the GNU build scripts
do not expose this feature.
2012-08-22 09:51:26 +02:00
Norman Feske
228e70bb5f Native version of lighttpd
The port of lighttpd at 'ports/src/app/lighttpd' executes the web server
directly (w/o using Noux). It is accompanied by the lighttpd.run script.

At the current stage, lighttpd is starting up but fails because of an
unsupport fcntl call.
2012-08-22 09:51:22 +02:00
Norman Feske
7a7adfbb63 Add mmap and nunmap to libc_noux, libc_fs
In the current form, only PROT_READ is supported. This case is emulated
by copying the file content into new allocated backing store. Even
though the performance benefits of mmap-using code will not be
preserved, code that relies on mmap can be executed via the libc_noux
or libc_fs plugins, i.e. lightttpd.
2012-08-17 11:52:02 +02:00
Norman Feske
d7300e882b tar_rom: Ignore leading './' in tar archives 2012-08-17 11:52:02 +02:00
Norman Feske
4914032800 libc: Add munmap support to plugin interface
With this patch, libc plugins become able to handle munmap for regions
attached by the plugin.
2012-08-17 11:52:02 +02:00
Norman Feske
3546b17827 Let git ignore libports/include/ncurses/ncurses.h 2012-08-17 11:52:02 +02:00
Josef Söntgen
971f25976b Noux: add noux-pkg/lighttpd 2012-08-17 11:52:01 +02:00
Josef Söntgen
a6917d982a libports: add poll() to libc
Implements poll() via select() for certain programs like OpenSSH
which need it.

(This implementation is actually based OpenSSHp's compat function.)
2012-08-17 11:52:01 +02:00
Josef Söntgen
ced77c5403 libports: add pcre-8.3 (8bit only)
For it is enough to just provide the 8bit version of pcre.
2012-08-17 11:51:57 +02:00
Alexander Boettcher
869abe4ec6 NOVA: make noux_tool_chain happy
Multiple calls to get the dataspace capability on NOVA lead to the situation
that the caller gets each time a new mapping of the same capability at
different indexes.

The client/caller assumes to get every time the very same index, e.g. in
Noux the index is used to look up structures.

Cache the dataspace capability returned via a rm_session for base-nova.
2012-08-17 11:43:04 +02:00
Norman Feske
24107d7a48 lwip: purge PCBs in time-wait state more quickly
Fixes #33.
2012-08-16 13:33:00 +02:00
Norman Feske
302e30662a Enable libSDL on ARM, add 'libports/run/sdl.run'
Fixes #45.
2012-08-16 13:33:00 +02:00
Norman Feske
7f1dd23051 Relax requirements of 'eglgears.run'
The run script works on foc_pbxa9 and foc_x86_64. So there is no reason
to restrict it to x86 only.
2012-08-16 13:33:00 +02:00
Norman Feske
d3e8328089 Unify uint64_t among 32-bit and 64-bit platforms
On both 32-bit and 64-bit platforms, 'uint64_t' can be defined as
'unsigned long long', which is the type expected by the %llx
format-string specifier. By unifying the type definitions, we resolve
warnings about unmatching type specifiers. This patch also removes
redundant words from the typedefs.
2012-08-16 13:32:56 +02:00
Alexander Boettcher
6899dd3d0a NOVA: fix compiler warning 2012-08-16 10:03:07 +02:00
Norman Feske
f4b3c6da36 Increase Qemu RAM for tool-chain test on 64bit
The tool-chain test requires a lot of memory because the TAR archives
for gcc, binutils etc. are loaded as GRUB modules.
2012-08-16 10:03:07 +02:00
Norman Feske
fab7b514e3 Move path utility from noux to 'os/include/os'
It turns out that the path-handling utility is valuable not only for
Noux. By moving it to a public header, we can use it for the libc.
2012-08-16 10:03:06 +02:00
Norman Feske
47e95d4e18 Support upgrading of child-environment resources
Fixes #5
2012-08-16 10:03:06 +02:00
Josef Söntgen
27a5edaf78 libports: disable call of lwip_loopback_init()
As of lwip-1.4.x this is not needed anymore because lwip
now always creates a loopback device. This plug-in will
be removed in the future but for now keep it around so
we currently do not need to update the other targets that
depend on it.

Fixes #329.
2012-08-16 10:03:06 +02:00
Josef Söntgen
ba5ec3a29e Noux: recv* functions override the buffer
Instead of appending to the buffer it is overriden on
continous calls.

Fixes #325.
2012-08-16 10:03:06 +02:00
Josef Söntgen
ae89f88cfb Noux/net: adjust noux/net to lwip-1.4.1-rc1
Fixes #328.
2012-08-16 10:03:01 +02:00
Josef Söntgen
bee2c10ce1 libports: add fcntl() to libc_lwip
Fixes #326.
2012-08-15 14:31:45 +02:00
Christian Prochaska
74b7b768f8 Noux: have bash use libc's 'getcwd()' function
The bash configure script cannot detect if the 'getcwd()' function in
Genode's libc works correctly, so it assumes that it is broken and makes
bash use its own version of this function. With this patch bash uses the
libc version, which has a Noux-specific implementation in the 'libc_noux'
plugin.

Fixes #324.
2012-08-15 14:31:33 +02:00
Josef Söntgen
69fd7e1c32 libports: update lwip to STABLE-1.4.1-RC1
The new version works fine but there is an issue with connect()
that needs the included patch:

There is no actual handling of EALREADY in lwip. It sets errno
to EALREADY when the connection was established. Unfortunatly this
is really bad because most programs expect to receive errno EISCONN
if the connection was successfully established. So this behaviour
breaks Qt4 and several noux/net packages (like lynx) because those
programs end up in an endless loop trying to connect via an already
connected socket. The longterm solution would be fixing the wrong
behaviour in lwip (there are already bug-reports on lwip's mailinglist)
but for now, it works well enough to simple change lwip's err_to_errno
table to set errno to EISCONN when the connection was established.
2012-08-15 14:31:18 +02:00
Norman Feske
aa90efbf77 Disable libc_ffat test on 64bit
The test cannot be expected to work on 64-bit machines because the ATAPI
driver is currently supported on 32-bit only.
2012-08-15 14:28:42 +02:00
Norman Feske
a174992e4d Let run tool detect qemu failures 2012-08-15 14:27:02 +02:00
Alexander Boettcher
775b5a174b Reserve up to 8x4 bytes for the parent capability 2012-08-14 19:14:25 +02:00
Alexander Boettcher
d38257b8d5 tar_rom: increase memory for 64bit Nova 2012-08-14 10:20:09 +02:00
Alexander Boettcher
47ef3bb1cb NOVA: Fix ldso test for 64bit
The generic parent_cap.cc overwrote the beginning of the data segment with
to much. Reserved are solely 16 byte, for 64bit we use however 32byte.

Actually, the parent_cap copying is not required at all. The parent cap
selector is at a fixed define place, so that no exported symbols are required
for determination of the parent_cap.

Remove it.
2012-08-14 10:19:54 +02:00
Alexander Boettcher
49786a7ca3 CPU service required
Required to start thread on Genode/NOVA. Without the service it fails with:

int main(): --- init created, waiting for exit condition ---
[init] timer: no route to service "CPU"
[init -> test-moon] Starting ldso ...
[init -> timer] C++ runtime: Genode::Parent::Service_denied
[init -> timer] void* abort(): abort called
2012-08-10 16:52:28 +02:00
Alexander Boettcher
5cee75e2a3 Increase rom quota about 36k
Required to run successful @ Genode/NOVA 64bit
2012-08-10 16:52:28 +02:00
Alexander Boettcher
cd373f20c1 Enable lwip.run for 64bit
We have a driver in dde_ipxe repository which is working fine. Increase
slightly the ram quota for the timer to run in qemu.
2012-08-10 16:52:23 +02:00
Alexander Boettcher
dddd602b48 NOVA: fix invalid cap detection 2012-08-10 10:58:14 +02:00
Alexander Boettcher
8526dc4f19 Set ERR_INVALID_OBEJCT if call failed to server
Tell the client that the last operation failed, instead of continuing doing
useless things.
2012-08-10 10:57:54 +02:00
Alexander Boettcher
c06c2887f2 NOVA: don't use externals in sleep forever
Not required.
2012-08-09 14:14:28 +02:00
Christian Prochaska
94fad13adb libc: add support for 'O_TRUNC' flag in 'open()'
Fixes #320.
2012-08-09 11:09:43 +02:00
Christian Prochaska
266d5e0be3 libc_noux test
With this patch the libc plugin / file operations test can be built for
libc_noux.

Fixes #317.
2012-08-09 11:09:43 +02:00
Christian Prochaska
dcfcbce856 libc: add support for 'ftruncate()'
Fixes #307.
2012-08-09 11:09:43 +02:00
Christian Prochaska
280fc59edf Fix 'O_CREAT' flag handling in 'open()'
Fixes #313.
2012-08-09 11:09:43 +02:00
Josef Söntgen
8c306bde67 libports: add libc's rpc framework headers
Certain rpc headers are needed for compiling getaddrinfo.c. Unfortunatly
that means we have to generate _a few_ header files which we do when we
prepare the libc.

These header files need to be created before the symlinks. Also, some of
these header files depend on a patch. Therefore we apply the patches
first, generate the header files and in the end we create the symlinks.

Fixes #296.
2012-08-09 11:09:42 +02:00
Alexander Boettcher
a7235d2411 NOVA: Use Genode interfaces to bootstrap Vancouver
Since no kernel objects can be created anymore outside Genode::core,
the Vancouver port must be adjusted to use solely the Genode interfaces.

The Vcpu_dispatcher creates all portals via the cpu_session interface and
uses the feature to setup a specific receive window during a IPC (the
cap_session::alloc IPC) to place to be received/to be mapped capability
(virtualization exception portal) at the designed indexes.

The actual vCPU thread extends from a normal Genode::Thread and extends it
by specific vCPU requirements, which are a larger exception base window and
the need by Vancouver to place the SM and EC cap at indexes next to each other.

Fixes #316
2012-08-09 11:09:42 +02:00
Alexander Boettcher
135a5a6bfb Adjust cap_integrity test to NOVA changes 2012-08-09 11:09:42 +02:00
Alexander Boettcher
2726740d6b NOVA: enable specifying a receive index for IPC
Extend Native_capability type to hold a specific selector index where the to
be received cap during a IPC should be mapped to. This feature is required to
place created caps by the cap_session at specific indexes. This feature is
used by Vancouver to setup the virtualization exception portals (created by
the cap_session) at the intended indexes.
2012-08-09 11:09:42 +02:00
Alexander Boettcher
f68482f87a NOVA: add support to cpu_session to create vCPUs
Extend base-nova specific cpu_session to create also vCPUs.
2012-08-09 11:09:42 +02:00
Alexander Boettcher
4342d0d234 NOVA: let thread die if SM cap is invalid
Patch prevents following bugs:

* In sleep_forever the thread return from semaphore down if cap is revoked
  during destruction of a thread. This causes an endless loop consuming time
  not available for other threads.
* In lock_helper and cap_sel_alloc the thread return from the lock() method
  even if the semaphore down call failed because of an revoked semaphore.

  This lead to the situation that a thread subject to de-construction returns
  from the lock method, but not holding the lock, entering the critical section
  and modifying state inside the critical section. Another thread in parallel
  already in the critical section or entering the critical section also
  modifies the state. This lead to curious bugs ...
* thread_nova, thread_start, irq_session
  Detect early bugs if the SM is gone unexpectedly where it should never
  happen.
2012-08-09 11:09:42 +02:00
Alexander Boettcher
650a1d47f0 NOVA: Throughly cleanup caps in case of errors 2012-08-09 11:09:42 +02:00
Alexander Boettcher
e3a7d2220d NOVA: Use everywhere same value for a invalid cap 2012-08-09 11:09:42 +02:00
Alexander Boettcher
e44648e1ab NOVA: remove pd selector from non Core code
Pd selector isn't used beside core anymore - remove all occurrences inside base
code.
2012-08-09 11:09:41 +02:00
Alexander Boettcher
b6ea5714d7 NOVA: create sm solely in core
Any kernel objects are now created solely by core - namely pt, ec, sm and sc.
2012-08-09 11:09:41 +02:00
Alexander Boettcher
2f84fd0434 NOVA: allocate stack size depending on word size 2012-08-09 11:09:41 +02:00
Alexander Boettcher
f1fa55e804 NOVA: Suppress warnings in rpc_entrypoint 2012-08-09 11:09:41 +02:00
Alexander Boettcher
5620eca7b9 NOVA: force to map cap in pd_session::assing_pd 2012-08-09 11:09:41 +02:00
Alexander Boettcher
9c57fd7229 NOVA: delegate EC cap solely with recall right
Vancouver recalls the vCPU in the vCPU dispatcher code. Enable the right bit
in the mapped native cap so that Vancouver actually is able to perform this
operation.
2012-08-09 11:09:41 +02:00
Alexander Boettcher
4155585267 NOVA: Adjust native_capability type
It now can hold a right bit used during IPC to demote rights of the to be
transfered capability.

The local_name field in the native_capability type is not needed anymore
in NOVA. Simplify the class, remove it from constructors and adapt all
invocations in base-nova.

Unfortunately local_name in struct Raw is still used in generic base code
(process.cc, reload_parent_cap.cc), however has no effect in base-nova.
2012-08-09 11:09:41 +02:00
Alexander Boettcher
7550f243ad NOVA: use cap_session to allocate portals 2012-08-09 11:09:41 +02:00
Alexander Boettcher
0a89d8dbb4 NOVA: extend cpu_session for base-nova 2012-08-09 11:09:40 +02:00
Alexander Boettcher
cb859a4785 NOVA: extend cap session for base-nova 2012-08-09 11:09:40 +02:00
Alexander Boettcher
7aa75477e2 Propagate status code of Thread state and start 2012-08-09 11:09:40 +02:00
Alexander Boettcher
ddd4b9633d NOVA: add rights mask and enums for kernel errors 2012-08-09 11:09:40 +02:00
Alexander Boettcher
755ed3dc90 NOVA: Use solely unsigned types for selectors 2012-08-09 11:09:40 +02:00
Alexander Boettcher
a6d2042d5b NOVA: kernel patch - remove utcb if ec creation fails 2012-08-09 10:24:01 +02:00
Alexander Boettcher
49ab1bbc44 NOVA: kernel patch - deliver only local portal id 2012-08-09 10:24:01 +02:00
Alexander Boettcher
998ebfc01b NOVA: Fix cleanup of received capabilities, #268
MsgBuf has to keep the number of received capabilities in order
to free/know correctly unused and unwanted capabilities. Explicitly
call rcv_msg->post_ipc to store this information in a MsgBuf.

Don't reset rcv_msg in ipc.cc, since this is used during
un-marshalling of caps in ipc.h afterwards. The MsgBuf is reseted when its
de-constructor is called.
2012-08-09 10:24:01 +02:00
Alexander Boettcher
e829288069 NOVA: remove global unique ids for user objects
With this patch solely the local ids are used, no global unique ids
are transfered anymore during IPC.

demo.run, signal.run, noux_tool_chain.run works up to the same
point as before the patches for issue #268.

Fixes #268
2012-08-09 10:24:01 +02:00
Alexander Boettcher
54ed373468 NOVA: translate item patch, issue #268
Unfortunately, another kernel patch is required for Genode/NOVA to get rid
of global unique ids for objects (issue #268).

Kernel patch:

If a translate of a object capability item inside the same PD
(receiver/sender in same PD) is not successful then he very same item is
returned instead of the null item.

Genode:

Some code in Genode try to map/translate the "root" (the first instance of a)
object capability within the same PD. The translate fails since it is the
first cap and was not delegated beforehand. Instead the cap gets mapped to a
new capability index due to xlt_rcv kernel item patch.

The new local object capability index is used to lookup manged objects
in lists, which however fails because the object is only known by the original
object capability index.

Unfortunately, this happens not only once. Below one example trace and
description is attached.

There are several possible solutions possible:
* Find all places in Genode and replace normal function calls between objects
  with IPC calls, such that all capabilities can be translated during IPC.
** Time consuming to find all spots
** Rather platform specific issue requires re-adjustments in generic Genode
   code
** Not trivial to ever remember this fact during development of new components
   [other platforms have not such a issue, however have global object ids]
** Neither good in terms of performance.

* Use some special system call to the kernel to be able to translate a given
  capability index as long until you find the requested original index.
  (Obviously ...  no comment).

* Kernel patch as this one.

* <your proposal>

Example trace + code description showing the behavior above:

int main(): --- create local services ---
int main(): --- start init ---
[0] DEL OBJ PD:0xc000aa80->0xc000aa80 SB:0x000000aa RB:0x000000ac O:0x00 A:0x1f
int main(): transferred 42 MB to init
[0] DEL OBJ PD:0xc000aa80->0xc000aa80 SB:0x00000120 RB:0x0000013c O:0x00 A:0x1f
[0] DEL OBJ PD:0xc000aa80->0xc000aa80 SB:0x0000016c RB:0x00000168 O:0x00 A:0x1f
Setup ELF failed
[0] XLT OBJ PD:0xc000aa80->0xc000aa80 SB:0x00000168 RB:0x0000016c O:0x00
unknown exception?
int main(): --- init created, waiting for exit condition ---

thread   - file - line - text
-------------------------------------------------------------------------------
thread A - [ 0] -  228 - new Core_child(... rom_session.dataspace() ...)
thread A - [ 1] -   27 - IPC call    - ask for dataspace cap
thread B - [ 2] -   49 - function    - return dataspace cap index 0x120
thread A - [ 1] -   27 - IPC returned - map 0x120 -> 0x13c, translate failed
thread A - ...
thread A - [ 3] -  231 - call _setup_elf()
thread A - [ 3] -   60 - call env->rm_session()->attach()
thread A - [ 4] -   35 - do dataspace object lookup (0x13c)
thread A - [ 4] -   36 - lookup failed (object known as 0x120), throw Exception
thread A - [ 3] -   61 - catch Exception -> return error code "0"
thread A - [ 3] -  233 - "Setup ELF failed" - because error code "0"

File legend:

[0] base/src/core/main.cc
[1] base/include/rom_session/client.h
[2] base-nova/src/core/include/core_rm_session.h
[3] base/src/base/process/process.cc
[4] base-nova/src/core/core_rm_session.cc
2012-08-09 10:24:00 +02:00
Alexander Boettcher
40b40b33c6 NOVA: apply #4 patch to use only local ids, #268 2012-08-09 10:24:00 +02:00
Alexander Boettcher
b748d1f17f NOVA: use only local ids in pager code, issue #268 2012-08-09 10:24:00 +02:00
Alexander Boettcher
529a25e190 NOVA: enable map-translate transfer item use, #268 2012-08-09 10:24:00 +02:00
Alexander Boettcher
2b161b7aff NOVA: use translate feature of kernel, issue #268
Kernel patch:
Introduce a transfer item type to express that a cap should be translated
and if this fails to map it instead.

It would be possible without this combined transfer item type however
with additional overhead. In this case Genode/NOVA would
have to map and translate all caps used as parameter in IPC. It would look
like this:
* If the map and translation succeed, the cap at the new cap index
  would have to be revoked. Then the translated cap index can be used.
* If the map succeeds and the translation fails then the mapped cap index
  can be used.
* It would become complicated when multiple caps are mapped and translated
  and only some of the translation succeed. In such cases Genode would have
  to figure out the right relation of translated/mapped and not
  translated/mapped caps. It would require to make some assumption about the
  order how translated/mapped caps are reported at the UTCB by the kernel.
All the points above lead to the decision to create a separate transfer item
type for that.

Genode:
Most the times the translation succeeds, mapping of caps happens either
seldom. This takes now a bit the pressure of not enough aligned receive
cap windows as described in issue #247.

The patch mainly adds adjustments to handle the
translated and mapped caps correctly especially during freeing of the
receive window (don't free translated cap indexes).

Fixes #268
2012-08-09 10:24:00 +02:00
Alexander Boettcher
44ef8912d6 Add a bit array and bit allocator, issue #247
Add a allocator using bit maps to maintain used/unused caps.
It supports the allocation of 2^n aligned caps solely and
freeing of caps.

Fixes #247
2012-08-09 10:23:55 +02:00
Norman Feske
67fdc1b44b Increase quota of USB driver
The additional quota is needed because of the recent performance
optimizations of the USB/networking code, e.g., to support the
increased NIC packet-stream buffer size.
2012-08-08 12:32:13 +02:00
Christian Prochaska
a55b883146 Noux: fix setup of child environment
Fixes #315.
2012-08-07 22:27:53 +02:00
Norman Feske
a5e95167d9 L4Lx: downsize priority of multi-linux instances 2012-08-07 22:26:34 +02:00
Stefan Kalkowski
4753aee540 Fiasco.OC: hold irq-objects in core for resignment 2012-08-07 22:24:46 +02:00
Stefan Kalkowski
5118b5e1e6 L4Linux: make the l4lx library less verbose. 2012-08-07 22:24:23 +02:00
Sebastian Sumpf
3736b8b2f2 Nic_bridge: Use Nic::Packet_allocator
Calculate TX and RX dataspace sizes correctly.
2012-08-07 22:23:00 +02:00
Sebastian Sumpf
3207b4eed0 USB: Performance improvements
Added SKB bitmap allocator, use Nic::Packet_allocator in packet stream, use slab
allocators on top of back-end AVL allocator, split allocators in cached/uncached
for general purpose/DMA allocation, added patch to original code to distinguish
cached or uncached memory requests, take advantage of and implement TX bursts
(or SKB batching), call interrupt handlers until they return unhandled.
2012-08-07 22:22:45 +02:00
Sebastian Sumpf
8734eab6ac L4LX: Network interface fixes
Make calls using IPCs IRQ safe, handle packet exhaustion, removed
'Packet_pool', tweak TCP rmem and wmem buffer sizes to show better performance
results, use 'Net::Packet_allocator, fix 'update-patch' Makefile command
2012-08-07 22:22:28 +02:00
Sebastian Sumpf
18d005264e Nic: Added 'Nic::Packet_allocator'
This is a bitmap-range allocator that can be used in packet streams.
2012-08-07 22:22:06 +02:00
Sebastian Sumpf
88ac32e3bb Base: New 'memcpy' implementation
Added CPU specific memcpy function ('memcpy_cpu'), which is tried first in
default 'memcpy'. Improved default 'memcpy' to copy eight byte chunks.
2012-08-07 22:21:54 +02:00
Sebastian Sumpf
ae88dc233c ACPI: Increase quota of PCI service
Some tests trigger memory exhaustions of the PCI-slave service used by the
ACPI-driver.
2012-08-07 22:21:37 +02:00
Martin Stein
ff65f6f021 Run Genode directly on hardware with 'base-hw'. 2012-08-03 12:06:37 +02:00
Martin Stein
8220ea272c Timer session and timer test for 'base-hw'. 2012-08-03 12:06:36 +02:00
Martin Stein
4c710e853b Extend create_builddir for the base-hw platforms. 2012-08-03 12:06:36 +02:00
Norman Feske
d079ef51ae Adapt GDB monitor and Noux to CPU session changes 2012-08-03 12:06:31 +02:00
Martin Stein
9369057f90 Extend RAM/CPU session for base-hw context-areas. 2012-08-02 16:41:21 +02:00
Martin Stein
2e918da325 Enhance specs that concern 'base-hw'.
Add specs for the PandaboardBoard A2 and according devices.

Refine axisting specs for Cortex A9 systems.
2012-08-02 16:41:21 +02:00
Martin Stein
9b0a54e980 Fix several bugs in the Cortex A9 drivers.
Avoid the use of deprecated 'MASK' enum in CPU register 'Asid'.

Enable the use of the 'K' bit in MMU translations.

Treat any try to modify existing valid entries in section- and
pagetables when doing 'insert_translation' as error.

Beautify concerned files.
2012-08-02 16:41:21 +02:00
Christian Prochaska
23772b620f libc_fs: return resulting offset in 'lseek()'
Fixes #314.
2012-08-02 15:06:35 +02:00
Norman Feske
914897cf71 Adapt noux.run to recent changes of exit handling 2012-08-01 14:45:21 +02:00
Christian Prochaska
6c68850524 Noux: add virtual '~Vfs_handle()' destructor
This patch adds a virtual destructor to the 'Vfs_handle' class to have
subclass destructors called on 'destroy()' on a base class pointer.

Fixes #305.
2012-08-01 12:48:26 +02:00
Christian Prochaska
c708a28eff ffat_fs: don't throw exception in 'close()'
The 'close()' function is not supposed to throw any exceptions.

Fixes #304.
2012-08-01 12:47:50 +02:00
Christian Prochaska
fa541b4545 libc_noux: fix 'read()' function
This patch fixes the problem that data in the read buffer would get
overwritten in cases where multiple 'read()' syscalls are necessary.

Fixes #303.
2012-08-01 12:47:15 +02:00
Christian Prochaska
d6d45f870e ram_fs: fix recursive 'lookup_and_lock()' calls
With this patch the 'Directory::lookup_and_lock()' function passes its
'return_parent' argument to recursive calls of itself.

Fixes #306.
2012-08-01 12:45:10 +02:00
Christian Prochaska
4caaba64c3 libc: call 'genode_exit()' in '_exit()'
With this patch the libc '_exit()' function calls the 'genode_exit()'
function to get the registered exit handlers called.

Fixes #308.
2012-07-31 12:08:58 +02:00
Stefan Kalkowski
23f11a4dca Add run-script to start multiple Linux' 2012-07-31 12:08:15 +02:00
Martin Stein
66bec10276 Fix bug in MMIO framework and test it
Avoid that members of a inheritor overlay those of the
register- and MMIO-framework.

Beautify register- and MMIO-framework.
2012-07-31 12:08:03 +02:00
Norman Feske
e6b72030d3 Simplify run scripts 2012-07-27 17:00:44 +02:00
Norman Feske
eb70f28fff News about NOVA on x86_64 2012-07-27 13:23:06 +02:00
Norman Feske
daf4300dcb Defer 'wait_for_irq' until device irq is cleared 2012-07-26 19:15:35 +02:00
Norman Feske
f279a1df00 Add write operation to OMAP4 SD-card benchmark 2012-07-26 19:11:40 +02:00
Christian Prochaska
5f1a66b90c Noux: handle 'not a directory' error in fchdir()
Fixes #298.
2012-07-26 11:29:08 +02:00
Christian Prochaska
55815e4a3a Noux: add support for executing shell scripts
With this patch Noux recognizes the '#!' character sequence in executable
files and executes the specified interpreter.

Fixes #255.
2012-07-26 11:22:04 +02:00
Christian Prochaska
f99648f355 Noux: implement 'Fs_file_system::dataspace()'
Fixes #261.
2012-07-26 11:21:14 +02:00
Norman Feske
7e0a1cc0eb Allocate DMA buffer for block packet stream
By allocating the packet-stream dataspace for block sessions as
uncached, we can use DMA to directly read and write into the client
buffer. Currently, the OMAP4 SD-card driver is using this feature.
2012-07-25 19:14:06 +02:00
Norman Feske
0f6110ea97 Let OMAP4 SD-card driver use DMA and interrupts
With this patch, the driver code gets complemented with DMA support.
The support for master DMA, in turn, cleared the way for using
interrupts to wait for the completion of transfers, which largely
relieves the CPU compared to the polling PIO mode. Consequently, the new
version has a much lower CPU footprint.

In the current version, both modes of operation PIO and DMA are
functional. However, PIO mode is retained for benchmarking purposes only
and will possibly be removed to keep the driver simple. It is disabled
in the driver's 'main.cc'.
2012-07-25 19:14:06 +02:00
Norman Feske
e9497a183f Improve measurement accuracy
This patch replaces the jiffies thread in 'sd_card/omap4/bench' calls to
'Timer::Session::elapsed_ms()'. This way, we use wall-clock time for the
measurements. Depending on the load of the rest of the system, the
previous version used to accumulate the inaccuracy for each 'msleep'
call.
2012-07-25 19:14:06 +02:00
Norman Feske
693922d789 Support for 64-bit registers in 'util/register.h'
For 64-bit registers we cannot compute MASK and SHIFT values via enums
because enum values are always of type int. But we can use static member
functions instead. Furthermore, the patch fixes the type trait for
64-bit registers. (apparently, this access width was never used so far)
2012-07-25 19:14:06 +02:00
Norman Feske
0ca47e8963 Support uncached 'Attached_ram_dataspace'
The enable the use of 'Attached_ram_dataspace' objects as DMA buffers,
we need to pass the 'cached' flag to the constructor. By default, the
dataspace is cached, which corresponds to the original behaviour.
2012-07-25 19:14:06 +02:00
Norman Feske
847c8cccd9 Add 'Timer::Session::elapsed_ms' function
This function allows a timer-session client to request a wall-clock
time value from the timer.
2012-07-25 19:14:06 +02:00
Norman Feske
eac9055c92 Operate SD card in 4-bit data mode 2012-07-25 19:14:06 +02:00
Norman Feske
b37a28578c Synchronize startup of signal receiver thread 2012-07-25 19:14:06 +02:00
Norman Feske
4454eb03eb Minimalistic L4Linux setup for pandaboard 2012-07-25 19:14:05 +02:00
Norman Feske
f3ac72f909 Simple SD card driver benchmarking program 2012-07-25 19:14:05 +02:00
Norman Feske
7c8ca5be64 Move 'Block::Omap4_driver' into header file
By placing this code into a distinct header, we can easily reuse it for
benchmarking purposes.
2012-07-25 19:14:05 +02:00
Alexander Boettcher
4960370602 NOVA: fix some enum *_MASK to fit for 32 as 64 bit
The BASE_MASK and QUANTUM_MASK fitted only for 32 bit, for 64 bit
they are bigger. Adjust them to fit for both architectures.
2012-07-23 14:05:58 +02:00
Alexander Boettcher
77729fab2a NOVA: warning fixes - check result of append_item 2012-07-23 14:05:58 +02:00
Alexander Boettcher
fc6bcd9f9f NOVA: update to latest kernel revision
The Demo of 64bit Genode/NOVA fails during the booting phase when
physical memory was tried to be mapped lying above 4G boundary.
(qemu -m 4096 triggered it on some systems). The memory never got
mapped and the attempt to access the virtual region resulted
in a unexpected page fault inside Genode core.

The latest revision removed the artificial boundary of 4G for 64bit.

Example trace showing the issue:
([-1] lines show debugging output that mapping failed)

...
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 4047 MB to init
int main(): --- init created, waiting for exit condition ---
start new pager object with EIP=0x1025814, ESP=0x6001000
[init] Could not open file "ld.lib.so"
start new pager object with EIP=0x10213e4, ESP=0x6001000
start new pager object with EIP=0x1037684, ESP=0x6001000
start new pager object with EIP=0x1021664, ESP=0x6001000
start new pager object with EIP=0x101e374, ESP=0x6001000
start new pager object with EIP=0x10295a4, ESP=0x6001000
start new pager object with EIP=0x1037db4, ESP=0x6001000
[init -> pci_drv] PCI driver started
[init -> launchpad] Could not open file "ld.lib.so"
[init -> launchpad] Could not open file "config"
[init -> launchpad] Could not obtain config file
[init -> ps2_drv] Detected ExPS/2 mouse - activating scroll-wheel and 5-button support.
[init -> ps2_drv] Using keyboard with scan code set 1 (xlate).
[init -> timer] Timer::Timeout_scheduler::Timeout_scheduler(Platform_timer*, Genode::Rpc_entrypoint*): starting timeout scheduler
[init -> vesa_drv] int Framebuffer_drv::map_io_mem(Genode::addr_t, Genode::size_t, bool, void**, Genode::addr_t, Genode::Dataspace_capability*): fb mapped to 1000
start new pager object with EIP=0x101eaf0, ESP=0x401fef80
[init -> timer] Timer::Session_component::Session_component(Timer::Timeout_scheduler*, Genode::Cap_session*): created new session component, _session_cap.valid=1
start new pager object with EIP=0x1021d10, ESP=0x400fef80
start new pager object with EIP=0x1021d10, ESP=0x401fef80
[init -> vesa_drv] Could not open file "config"
[init -> vesa_drv] Could not obtain config file
[init -> vesa_drv] Found: VESA BIOS version 2.0
[init -> vesa_drv] OEM: VGABIOS Cirrus extension
[init -> vesa_drv] Found: physical frame buffer at 0xfc000000 size: 0x00400000
[init -> vesa_drv] int Framebuffer_drv::map_io_mem(Genode::addr_t, Genode::size_t, bool, void**, Genode::addr_t, Genode::Dataspace_capability*): fb mapped to 400000
[init -> nitpicker] framebuffer is 1024x768@1
[init -> nitpicker] create session with args: fb_format=1, label="launchpad", ram_quota=1646592
[init -> nitpicker] Could not open file "config"
[init -> nitpicker] Could not obtain config file
[init -> nitpicker] create session with args: fb_width=400, fb_height=1504, fb_format=1, label="launchpad", ram_quota=1211392
[ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100000 RB:0x00002a00 O:0x08 A:0x7
[-1] Pd::delegate snd->S::tree_lookup(0x100000) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620
[ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100100 RB:0x00002b00 O:0x05 A:0x7
[-1] Pd::delegate snd->S::tree_lookup(0x100100) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620
[ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100120 RB:0x00002b20 O:0x02 A:0x7
[-1] Pd::delegate snd->S::tree_lookup(0x100120) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620
[ 0] DEL MEM PD:0xffffffff8100d620->0xffffffff8100d320 SB:0x00100124 RB:0x00002b24 O:0x01 A:0x7
[-1] Pd::delegate snd->S::tree_lookup(0x100124) == 0x0 -- base-nova/contrib/src/pd.cpp:54 - Pd::snd 0xffffffff8100d620 =? Pd::kern 0xffffffff8100d620
[ 0] Killed EC:0xffffffff823ca880 SC:0xffffffff823cb740 V:0xe CS:0x2b EIP:0x1215a0 CR2:0x2b25fff ERR:0x6 (PT not found)
2012-07-23 14:05:58 +02:00
Josef Söntgen
d99edf57d8 libports: add _accept, _bind and _listen...
...and socketpair() dummy to libc.

Socketpair() is needed by OpenSSH. The actual implementation
should be done in libc_noux.

Fixes #297.
2012-07-23 14:05:58 +02:00
Josef Söntgen
84717b7bd4 libports: add symlink from ncurses.h to curses.h
Serveral programms want to include ncurses.h rather than curses.h.
To keep them happy, we add simply add a symlink.

Fixes #286.
2012-07-23 14:05:58 +02:00
Josef Söntgen
838d867680 Terminal: add explicit handling of sgr0 + sgr seq
sgr0 is currently implemented as a wrapper of sgr(0) which
seems to work fine.

For now we accept but ignore certain sgr sequences like for
example [0;10;1m which is generated by lynx even when using
TERM=linux (I am not sure yet if that's actually valid at all).
2012-07-23 14:05:54 +02:00
Josef Söntgen
0d0ebd5a7f libports: lwip change SOL_SOCKET definition
Our FreeBSD libc based libc defines SOL_SOCKET as 0xffff. We change
lwip's definition from 0xfff to match ours. This prevents us from
converting the level when we call {g,s}etsockopt.

Fixes #292.
2012-07-20 14:43:51 +02:00
Josef Söntgen
ab951175c0 libports: fix openssl issues and update to 1.0.1c
libcrypto provides certain optimized assembler functions which
unfortunatly are non-pic. Therefore this asm code is removed
and libcrypto is build with -DOPENSSL_NO_ASM.
Because the asm code is not needed anymore, its generation is
also removed from openssl.mk.

import-libssl.mk was also added because it is essential for building
programs which depend on libssl.

Fixes #291.
Fixes #294.
2012-07-20 14:43:35 +02:00
Josef Söntgen
7e26c79455 Noux: add recvfrom()
Add SYSTEMCALL_RECVFROM to noux/net and the corresponding libc function.

Fixes #290.
2012-07-19 21:05:52 +02:00
Josef Söntgen
d28465cb3a Noux: fix missing mode propagation
When opening a new file, a new Fs_vfs_handle is created but with the
initial mode set to 0 which is not expected by functions like fdopen()
that check if the original flags given to the open() call match the
returned ones on the used fd.

Fixes #289.
2012-07-19 21:05:52 +02:00
Josef Söntgen
976e7b4288 Noux: fix send(), set fd before each syscall
The fd has to be set before each syscall.

Fixes #288.
2012-07-19 21:05:52 +02:00
Josef Söntgen
883453c65d Noux: fix sendto(), set args before each syscall
Set addrlen and dest_addr explicitly before each system call.

Fixes #287.
2012-07-19 21:05:51 +02:00
Josef Söntgen
3ffae58572 Terminal: cleanup terminal colors
Though the initial commit contains nicer looking color definitions
it is easier to spot wrong colors when using a program that uses
ncurses like for example lynx.

Fixes #284.
2012-07-19 21:05:51 +02:00
Sebastian Sumpf
b50970fb74 USB: Test and fix errors on x86 boxes
Added support for more than one UHCI controller. Make sure the 'PIRQ' bit in the
legacy support register (PCI config space) of the UHCI controller is enabled and
also that the 'Trap on IRQ' bit is disabled. Fix offset bug in PCI-config space
emulation for Linux.

Fixes #282
2012-07-19 21:05:51 +02:00
Alexander Boettcher
9e582c59a9 Don't loop forever if upgrade of a donation failed.
The code intended to stop after the first failed attempt,
however the bool variable to control this was reseted
inside the loop and so it endless loops.

Fixes #51
2012-07-19 21:05:51 +02:00
Alexander Boettcher
33a2f54413 NOVA: Vancouver - establish recall portal
Fixes #283
2012-07-19 21:05:51 +02:00
Alexander Boettcher
938c7fa130 NOVA: call kill_thread of cpu_session
If a thread has been deleted the thread object at the cpu_session was never
freed which caused the cpu_session quota to be exhausted as reported in
issue #150.

Fixes #150
2012-07-19 21:05:51 +02:00
Alexander Boettcher
a08d54ad26 NOVA: Memory descriptor parsing
Be bit more robust.
* Don't use addresses and sizes larger than
  32 bit address boundaries.
* Don't take modules of size 0, at address 0 and if aux is 0.
  (Already seen on machines in the University ...)

Fixes #269
2012-07-19 21:05:51 +02:00
Christian Prochaska
1b8fd4aa44 GDB for Noux
With this patch the 'GNU Project Debugger' (GDB) can be built for Noux.

The included run script connects GDB and GDB monitor via a cross-link
terminal and allows interactive source-level debugging of the GDB monitor
test application on Genode.

Fixes #280.
2012-07-19 15:42:25 +02:00
Christian Prochaska
dbd1c425bf libc: implement 'readv()'
This patch implements the 'readv()' function in the libc.

A lock guard prevents the parallel execution of either or both of the
'readv()' and 'writev()' functions.

Fixes #279.
2012-07-16 15:01:02 +02:00
Christian Prochaska
9124f303f7 libc: implement 'pread()' and 'pwrite()'
This patch implements the 'pread()' and 'pwrite()' functions in the libc.

A lock guard prevents the parallel execution of either or both functions.

Fixes #278.
2012-07-16 15:00:08 +02:00
Christian Prochaska
0f8f87c3fe libc_ffat: enhance 'lseek()' support
This patch adds support for the 'SEEK_CUR' and 'SEEK_END' values of the
'whence' argument of the 'lseek()' function..

Fixes #277.
2012-07-16 14:59:35 +02:00
Christian Prochaska
e5bf7828d9 Add missing unwind code to cxx lib
This patch adds support for the '_Unwind_Complete()' and
'_Unwind_DeleteException()' functions in the cxx lib.

Fixes #275.
2012-07-16 14:54:19 +02:00
Sebastian Sumpf
5f33704155 part_blk: Improve multiple client support
Increase size of block session backing store so it can handle maximum supported
packet size. Synchronize client threads during packet allocation.

Fixes #276
2012-07-16 14:49:55 +02:00
Christian Helmuth
abd09e419f Only write UART if transmitter-hold register empty
The line-status register has two relevant status bits - transmitter-hold
register empty and data-hold register empty - from which only the THR is
relevant as it signals new character can be written to the device.

Fixes #281
2012-07-16 10:35:24 +02:00
Christian Helmuth
b2478aec76 Increase RAM demanded by bomb children on 64bit systems 2012-07-11 12:12:41 +02:00
Christian Helmuth
f730a9c343 Linux: prevent zombie state for child processes
Setting the handler for SIGCHLD to SIG_IGN (ignore) informs the kernel
not to enter the zombie state: (man 2 wait)

  POSIX.1-2001 specifies that if the disposition of SIGCHLD is set to
  SIG_IGN or the SA_NOCLDWAIT flag is set for SIGCHLD (see
  sigaction(2)), then children that terminate do not become zombies
  [...]

Fixes #271.
2012-07-11 12:12:41 +02:00
Christian Prochaska
af51aa1c0f Adapt textedit.run to Pandaboard 2012-07-10 20:04:29 +02:00
Norman Feske
54c90c1592 Run script for demoing Genode on Pandaboard 2012-07-10 16:48:54 +02:00
Norman Feske
b15da23052 Reduce debug output of libc_ffat plugin 2012-07-10 16:48:54 +02:00
Christian Prochaska
d564003e1c Make fs test loopable 2012-07-10 16:48:54 +02:00
Norman Feske
00747ddd1f Use PLOG instead of PDBG in http_srv test
The messages are informative, not debug messages.
2012-07-10 16:48:53 +02:00
Sebastian Sumpf
a55f04a160 Two linux run script: Enable network 2012-07-10 16:30:29 +02:00
Sebastian Sumpf
e52a33783a ARM/L4Linux alignment
Change access of IP header in 'icmp_echo' to work with unaligned data
2012-07-10 16:30:29 +02:00
Ivan Loskutov
3cfbc53754 Extend nic_bridge to support internal traffic
Fixes #156
2012-07-10 16:30:29 +02:00
Christian Prochaska
30dc1d83da FAT file system service
This patch implements a service which provides access to files and
directories of a FAT file system via the 'File_system' interface.

Fixes #251.
2012-07-10 16:30:26 +02:00
Christian Prochaska
763f628831 Qt4: textedit improvements
This patch sets the default document type in the "File save" dialog to
HTML and makes both the "File open" and "File save" dialogs enter the "/"
directory by default.

Fixes #274.
2012-07-10 15:22:00 +02:00
Norman Feske
5c731c97cd Enable VFAT for L4Linux on ARM 2012-07-10 15:21:39 +02:00
Norman Feske
7ce16922ac Let part_blk export writeable partitions 2012-07-10 15:00:16 +02:00
Norman Feske
f4c4eadb21 Fix documentation error 2012-07-10 14:59:46 +02:00
Sebastian Sumpf
70b8fc2832 USB: Support usbnet and smsc95xx for omap4 2012-07-09 17:53:43 +02:00
Christian Prochaska
b2a62b4b2d ffat: Release packets in block session backend
This patch adds the necessary 'release_packet()' calls in the block
session backend of the 'ffat' lib.

Fixes #272.
2012-07-09 17:40:35 +02:00
Christian Prochaska
69ec6f5dd8 ffat: Enable support for long file names
Fixes #270.
2012-07-09 15:51:55 +02:00
Norman Feske
e1435a3f57 Replace old test/block with test/ahci
The block test at test/ahci is indeed not AHCI-specific. It is a generic
block read/write test for the block-session interface. But in contrast
to the original test/block, it restores the block device content (at
least when the test succeeds). Hence, we remove the original (dangerous)
block test and always use code of test/ahci.
2012-07-09 15:51:55 +02:00
Norman Feske
5cd099ed90 OMAP4 SD card driver
The new SD card driver at 'os/src/drivers/sd_card/omap4' allows the use
of an SD card with the Pandaboard as block service. Currently, the
driver is using PIO, no DMA, and no IRQs. The driver can be tested using
the 'os/run/sd_card.run' script.
2012-07-09 15:51:51 +02:00
Norman Feske
cfda8ac4ae Add bitfield polling support to MMIO framework 2012-07-09 15:07:32 +02:00
Christian Prochaska
e39200d8c6 Noux: update GCC to version 4.6.1
This patch updates GCC to version 4.6.1 and enables tool chain support for
x86_64 and ARM.

Fixes #266.
2012-07-04 14:56:58 +02:00
Christian Prochaska
7a25bf2d19 x86_64 and ARM support for libgmp
Fixes #265.
2012-07-04 14:56:48 +02:00
Alexander Boettcher
1a2cce22ac Kernel patch is obsolete.
With revision 37569cd43f82bb54f9e621163c4b0eb662bd1a51 of the NOVA
kernel the patch isn't required anymore.
2012-07-04 14:56:47 +02:00
Alexander Boettcher
80a15fde30 NOVA: update NOVA@github revision
Use latest NOVA github revision. Fixes sporadic in-kernel page faults.
2012-07-04 14:56:47 +02:00
Alexander Boettcher
4ece3b3c77 Deadlock fix in rm_session on NOVA platform
Rm_client is derived from Pager_object. If the Pager_object is also
derived from Thread_base (which is the case for NOVA) then the
Rm_client object must be destructed without holding the rm_session_object
lock. The native platform specific Thread_base implementation has to take
care that all in-flight page handling requests are finished before
destruction. On NOVA it is done by doing an IPC to the pager thread.
(performed in Pager_object::dissolve() in base-nova). The
called thread than executes its operation until end which also requires
in some cases to take the rm_session_object lock.

Since _client_slab insertion/deletion also must be performed
synchronized but can't be protected by the rm_session_object lock
because of the described dead_lock situation, we have
to use a synchronized allocator object to perform insertion and
deletion of Rm_clients.
2012-07-04 14:56:47 +02:00
Alexander Boettcher
8ee4442108 Feature: add synchronized allocator 2012-07-04 14:56:47 +02:00
Alexander Boettcher
f8c97e7189 NOVA: Deadlock fix in pager/rm_session interaction
Following deadlock happens when a Rm_client/Pager_object handles a page-fault
and concurrently the same object is dissolved (triggered by parent killing
the client).

The situation is as follows:

Page fault handling  :
base-nova/src/base/pager/pager.cc    : pf_handler() - lock pf_lock
base/.../core/rm_session_component.cc: pager()      - lock rm_session
  (in reverse_lookup())

Dissolve of Rm_client:
base/src/core/rm_session_component.cc: dissolve()   - lock rm_session
base-nova/src/base/pager/pager.cc    : dissolve()   - lock pf_lock

The pf_lock is not required here during normal page fault handling,
since this pager object @NOVA is executed only by one and the same
thread and all critical operations inside the rm_session_object itself
are locked anyway. The only critical point is the destruction of the
Pager_object which is already handled in the both dissolve functions
of the rm-session_component (locking) and the pager_object (finalize
in-flight page faults).
2012-07-04 14:56:46 +02:00
Alexander Boettcher
1d6a00f01a Cleanup: cap allocation
Allocate exc_pt_sel inside Thread_base object
instead of pager object, since it is a thread
specific characteristic.

Same for freeing of the thread capabilities:
- ec, sc, rs, exc_pt_sel is thread specific
and has nothing to do in server nor pager object.
2012-07-04 14:56:46 +02:00
Alexander Boettcher
4d5d91efef Fix: _session_list in child.h must be locked
The _session_list can be modified concurrently,
so the iteration over the list must be locked.
2012-07-04 14:56:46 +02:00
Alexander Boettcher
1a94c3b623 Fix: thread identifier comparator
The invalid thread is specified as 0,0,-1 (ec cap, sc cap, sem cap).
The main thread is specified as 0,0,0.

The comparator identified "tid_main == tid_invalid" as equal,
which is obviously wrong.

The patch compares at least ec and sem cap.
2012-07-04 14:56:46 +02:00
Alexander Boettcher
86921c2e12 Use down-to-zero semaphore feature to block thread
Use semaphore down feature of NOVA to set the counter to zero.
If the semaphore was up()ed more than one time by impatient callers
(e.g. guys calling cancel_blocking) we make sure that the thread
really stops.
2012-07-04 14:56:46 +02:00
Alexander Boettcher
cd886bff6a Move semaphore op codes to generic syscall 2012-07-04 14:56:45 +02:00
Alexander Boettcher
d033b450f5 Sanity resetting of Utcb words/items field.
Don't send words or mappings by accident. Reset the word/item
counter.
2012-07-04 14:56:45 +02:00
Alexander Boettcher
7f93dae3ff Pager/Thread_start cleanups
Don't allocate ec cap twice, in pager.cc and thread_start.cc.
Unmap of utcb has to be done in destructor of thread class, not
in pager class. Free capability selectors of ec and rs.
2012-07-04 14:56:45 +02:00
Alexander Boettcher
2a3b0d72b3 Don't deallocate invalid cap
SC slot is unused here.
2012-07-04 14:56:45 +02:00
Alexander Boettcher
33334b4f4b Fix: Avoid deadlock during cleanup of entrypoint
Invoke cancel_blocking before calling the
cleanup portal of the rpc_entrypoint. If a rpc_entrypoint
is blocked in a semaphore the cleanup call gets
stuck forever.
2012-07-04 14:56:45 +02:00
Alexander Boettcher
f328f3786b Bug fix: null ptr dereference in base/lock
Don't fail if nobody is holding the lock.
2012-07-04 14:56:44 +02:00
Alexander Boettcher
f612475c99 Bug fix: null ptr dereference in base/semaphore
If nobody is blocked in a semaphore, nothing can be dequeued. If
the semaphore is used for signalling, there can be somebody in the queue,
but not necessarily.
2012-07-04 14:56:44 +02:00
Alexander Boettcher
c873faa390 Fix: reset word counter in case of failed IPC.
If IPC fails for some reasons, reset received counter of items+words.
This operation is not performed by the kernel.
2012-07-04 14:56:44 +02:00
Norman Feske
12f2572155 Resolve ambiguity of size_t
This patch replaces the first attempt to resolve the ambiguity of using
the size_t type that occurred when 'loader_session.h' was included
alongside libc headers. Instead of explicitly qualifying each occurrence
of the type, the new solution defines 'size_t' within the 'Loader' namespace.

Fixes #253
2012-07-02 14:25:04 +02:00
Christian Prochaska
ed58040794 Define 'TZ_MAX_TIMES' as 1
This patch defines 'TZ_MAX_TIMES' as 1 when building 'localtime.c' to avoid
a big stack allocation in the 'tzload()' function.

Fixes #250.
2012-07-02 14:18:58 +02:00
Josef Söntgen
d9d22fbf75 Pistachio: fix usage of wrong python version
The CML2 configuration system calls 'evn python' and expects version
2.x. So we check if python2 is installed when preparing Pistachio and
use the found version instead.

Fixes #264.
2012-07-02 14:17:23 +02:00
Christian Prochaska
b8ee4bda81 libports: MPC
This patch adds the 'MPC' library to the 'libports' repository.

Fixes #263.
2012-07-02 14:15:42 +02:00
Christian Prochaska
cdb1c6f203 Disable 'time_t' type size tests in findutils
Some type size tests in the findutils source code expect the 'time_t' type
to be of the same size as the 'long' type, whereas the Genode libc defines
it as '__int64_t' for ARM. This patch disables these tests.

Fixes #262.
2012-07-02 14:15:01 +02:00
Christian Prochaska
92ce7ca909 Don't always rebuild VIM
Fixes #260.
2012-07-02 14:14:25 +02:00
Christian Prochaska
d6e418b5ed README file for 'terminal_crosslink'
Fixes #257.
2012-07-02 14:14:00 +02:00
Norman Feske
cab40513d4 Tidy up run script for terminal crosslink 2012-06-30 15:45:03 +02:00
Stefan Kalkowski
e8b1b6f6da Fiasco.OC: fix run-environment for ARM platforms
Eliminate prints to stderr for normal messages, because it leads to exceptional
returns in TCL-scripts e.g. when run-script is triggered by the autopilot even
if the script's return code itself will be zero.
2012-06-27 11:31:43 +02:00
Stefan Kalkowski
3e9d5c532c Enable drivers for foc_x86_64 while builddir creation
In the create_builddir script the foc_x86_64 platform was missing
when adding x86-drivers to the etc/build.conf file. This lead to
failed run-scripts initiated by the autopilot tool.
2012-06-27 10:53:35 +02:00
Norman Feske
27a43543b7 Link to english version of Espírito Livre interview 2012-06-22 19:49:48 +02:00
Sebastian Sumpf
791307385f USB: target.mk
Add 'clean' and 'cleanall' targets
Move include symlinks in separate directory
2012-06-22 15:19:33 +02:00
Norman Feske
c32dbfec53 USB: Explicitly allocate DMA buffers 2012-06-22 11:50:13 +02:00
Norman Feske
23704c770f base-foc: Print location of the boot image 2012-06-22 11:50:13 +02:00
Norman Feske
ff7f6334bc Add panda support to two_linux.run script 2012-06-22 11:50:13 +02:00
Norman Feske
53f55cdfa9 Turn OMAP4 framebufer driver into Genode service 2012-06-22 11:50:12 +02:00
Stefan Kalkowski
2c8dbb3b04 Add run-script starting two L4Linux instances 2012-06-22 11:50:12 +02:00
Norman Feske
329cb67e6c Add pandaboard support to default demo scenario 2012-06-22 11:50:09 +02:00
Norman Feske
7741de0175 Add usb spec value to panda platform 2012-06-22 11:38:36 +02:00
Sebastian Sumpf
e23c334b90 OMAP4 USB driver 2012-06-22 11:38:36 +02:00
Norman Feske
1030ac1c67 Add dde_linux to build.conf template for panda 2012-06-22 11:38:36 +02:00
Norman Feske
a60dac3b3d OMAP4 HDMI driver 2012-06-22 11:38:36 +02:00
Martin Stein
4c3df9caf1 Simple test for framebuffer driver 2012-06-22 11:38:36 +02:00
Norman Feske
b3dd9fcb45 Skip qemu invocation on panda platform 2012-06-22 11:38:35 +02:00
Norman Feske
b32a17e961 Set omap4 spec value for panda platform 2012-06-22 11:38:35 +02:00
Torsten Hilbrich
2da030d22e loader: Qualify size_t usages
The compiler complained about ambigous references when compiling a
lx_hybrid program using the loader session.  Here are some error
messages:

genode/os/include/loader_session/loader_session.h:72: error: reference to 'size_t' is ambiguous
/usr/lib/gcc/i486-linux-gnu/4.4.5/include/stddef.h:211: error: candidates are: typedef unsigned int size_t
genode/base/include/base/stdint.h:25: error:                 typedef unsigned int Genode::size_t
genode/os/include/loader_session/loader_session.h:72: error: reference to 'size_t' is ambiguous
/usr/lib/gcc/i486-linux-gnu/4.4.5/include/stddef.h:211: error: candidates are: typedef unsigned int size_t
genode/base/include/base/stdint.h:25: error:                 typedef unsigned int Genode::size_t
...

This commit qualifies size_t using the Genode namespace which fixes
the compilation.
2012-06-22 11:38:14 +02:00
Alexander Boettcher
c56c9f586d NOVA: use grub instead of pxe
Make pxe optional and use by default grub.
For that to work we use objcopy to repack the elf64
file into elf32.

With this commit more tests succeed. Most
tests use 64M and with that pulsar even does not start
the hypervisor. With 96M more test run however that would
mean to adjust most of the run scripts ...
2012-06-22 11:38:14 +02:00
Alexander Boettcher
a4cac757e2 NOVA: Use right syscall function for ec_ctrl 2012-06-22 11:38:14 +02:00
Josef Söntgen
cb8cbe8aad Fix US layout
The right bracket used the wrong character and the "pipe" was missing.

Fixes #241.
2012-06-21 00:54:00 +02:00
Torsten Hilbrich
ae41acec27 Hardening compilation support for 64bit Linux
Without this patch the compilation failed with:

/usr/bin/ld: main.o: relocation R_X86_64_32S against
`vtable for Genode::Dataspace' can not be used when making a shared object;
recompile with -fPIC
main.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[6]: *** [init] Error 1

For this patch the use of the hardening tool chain must be indicated
using the "hardening_tool_chain" SPECS entry within the file
<build>/etc/specs.conf

Fixes #79
2012-06-21 00:50:18 +02:00
Torsten Hilbrich
df6a2f1365 chroot_loader: Fix run script for 64bit environment
The /lib64 path is required here to allow execution of 64bit binaries.

Here is an example-ldd call:

$ ldd /bin/ls
	linux-vdso.so.1 =>  (0x00007fffdedff000)
	libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f4ae207d000)
	librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f4ae1e75000)
	libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f4ae1c6c000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4ae18af000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4ae16ab000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f4ae22bd000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4ae148d000)
	libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f4ae1288000)

Fixes #249
2012-06-20 19:44:08 +02:00
Alexander Boettcher
0bf642ff9a Establish mappings during reply, #248
Caller thread sends echo thread mapping information. Echo thread
establish during reply the mappings.

Fixes #248
2012-06-20 19:44:08 +02:00
Alexander Boettcher
9ebbf9c9f2 Check that typed item fits on UTCB, issue #248
Check that there is enough room for a typed item on the
UTCB. Otherwise deny to add the item and return false.
Enable explicitly a return unused warning to get the right
attention.
2012-06-20 19:44:08 +02:00
Alexander Boettcher
0c2adf7ddd Msg_words are 16 bit, adjust bit mask. 2012-06-20 19:44:08 +02:00
Alexander Boettcher
67864d35f1 Structures must be dense packed, issue #248
Take care that utcb, hip, crd structure are dense packed by compiler.
2012-06-20 19:44:07 +02:00
Alexander Boettcher
4534d656a8 NOVA: Improve stability of process destruction
The UTCB of the thread cleaning up thread objects has been unmapped.
However the UTCB of the destroyed thread must be unmapped.

Objects must explicitly be made unreachable before cleaning up. The
server and pager objects must be unreachable before they can be freed.
Both object types are threads. Revoking the thread(EC) cap on NOVA
doesn't mean that the thread stops executing. All portals pointing to a
thread are still reachable by clients even if the last EC cap is gone in
user land. So it must be taken care that no portals are pointing anymore
to a thread when the associated objects are getting destroyed. This
commit handles this.

Additionally, even if the last portal is gone - there can be still an
ongoing request handled by such server/pager object/threads. For each
such object an additional portal is created. This object is called
'cleanup portal' and is only local to the object. After all portals are
revoked the cleanup portal is called. When the call returns we know that
nobody is anymore handled by the object since all remotely available
portals are gone.

Fixes #20
2012-06-20 19:44:07 +02:00
Alexander Boettcher
ae6257dce1 Use NOVA microkernel from github, add 64bit
Use git to get recent kernels from github. Adjust NOVA patch to compile
with recent github version. Patch and use makefile of NOVA microkernel
to avoid duplicated (and outdated) makefile in Genode

Furthermore, this patch adds support for using NOVA on x86_64. The
generic part of the syscall bindings has been moved to
'base-nova/include/nova/syscall-generic.h'. The 32/64-bit specific
parts are located at 'base-nova/include/32bit/nova/syscalls.h' and
'base-nova/include/64bit/nova/syscalls.h' respectively.

On x86_64, the run environment boots qemu using the Pulsar boot loader
because GRUB legacy does not support booting 64bit ELF executables.

In addition to the NOVA-specific changes in base-nova, this patch
rectifies compile-time warnings or build errors in the 'ports' and
'libports' repositories that are related to NOVA x86_64 (i.e., Vancouver
builds for 32bit only and needed an adaptation to NOVAs changed
bindings)

Fixes #233, fixes #234
2012-06-20 19:44:07 +02:00
Alexander Boettcher
200deec403 Bunch of compiler warning fixes, issue #234 2012-06-20 19:44:07 +02:00
Christian Prochaska
9a8fb36b1c Catch 'File_system::Lookup_failed' exception
In 'Fs_file_system::open()' the call of '_fs.dir()' can throw a
'File_system::Lookup_failed' exception, which gets explicitly caught
with this patch.

Fixes #246.
2012-06-20 19:44:07 +02:00
Christian Prochaska
4fc9383c31 libports: Expat
This patch adds the "Expat" XML parser library to libports.

Fixes #245.
2012-06-20 19:44:02 +02:00
Christian Prochaska
7d419893f9 ARM stack alignment
Align the stack on a 16-byte boundary as on the x86_32 platform.

Fixes #236.
2012-06-20 10:20:56 +02:00
Christian Prochaska
1bf7967463 Noux terminal file system
This patch adds a new "terminal" file system type to Noux, which allows to
create a "character device" file that is connected to a Genode 'Terminal'
service.

The 'Terminal' session created by the file system has the label
"noux(terminal_fs)" to distinguish it from the 'Terminal' session
created by Noux itself.

Fixes #244.
2012-06-20 10:20:35 +02:00
Christian Prochaska
7d86edc355 Remove Qemu bug workaround in pl11x driver
Remove a workaround for Qemu <= 0.14.x which results in a wrong
pixel format on Qemu >= 1.0.

Fixes #243.
2012-06-20 10:19:53 +02:00
Christian Prochaska
ba0b20054e Cross-link terminal
This patch implements a service which allows two clients to communicate
with each other using the 'Terminal' interface.

Fixes #242.
2012-06-20 10:19:19 +02:00
Christian Prochaska
8a7fbe3973 Fix ring buffer interface description
The maximum number of elements in the ring buffer is QUEUE_SIZE - 1.

Fixes #240.
2012-06-20 10:17:50 +02:00
Christian Prochaska
54051a7bb2 Enable Noux for ARM
With this patch the existing Noux run scripts except the tool chain script
can be executed on the ARM platform.

Fixes #229.
2012-06-20 10:17:23 +02:00
Norman Feske
7e95c25b7b News about interview in Revista Espírito Livre 2012-06-20 10:06:48 +02:00
Norman Feske
288fd4e56e Add support for allocating DMA memory
This patch extends the RAM session interface with the ability to
allocate DMA buffers. The client specifies the type of RAM dataspace to
allocate via the new 'cached' argument of the 'Ram_session::alloc()'
function. By default, 'cached' is true, which correponds to the common
case and the original behavior. When setting 'cached' to 'false', core
takes the precautions needed to register the memory as uncached in the
page table of each process that has the dataspace attached.

Currently, the support for allocating DMA buffers is implemented for
Fiasco.OC only. On x86 platforms, it is generally not needed. But on
platforms with more relaxed cache coherence (such as ARM), user-level
device drivers should always use uncacheable memory for DMA transactions.
2012-06-20 09:17:48 +02:00
Josef Söntgen
896d12d0b8 Add writev() to libc
This function is needed by perror(3).

Closes #239.
2012-06-08 14:33:15 +02:00
Josef Söntgen
f325f314b5 Fix libc_noux's Plugin::getpeername() method
The argument's order was wrong in the memcpy() call. In addition
the wrong sysio struct was used for the addrlen argument.

Fixes #238.
2012-06-08 14:32:20 +02:00
Norman Feske
ed867817b6 Test for combining loader with chroot 2012-06-06 17:31:52 +02:00
Norman Feske
17b60f8d41 Propagate loader-session errors as exceptions 2012-06-06 17:30:06 +02:00
Norman Feske
7a965bd877 Print error message if 'execve' failed 2012-06-06 17:27:54 +02:00
Norman Feske
491a1f9c52 Let chroot test succeed on lx_hybrid platform 2012-06-06 17:27:21 +02:00
Norman Feske
e4f28625e3 Construct process member as late as possible
When creating a 'Child' object with an already active entrypoint,
session requests may arrive as soon as the '_process' is created. We
have to make sure that at least all parts of the 'Child' object needed
for serving 'session' requests are constructed. This is particularly
important for the '_policy' member.
2012-06-06 17:24:07 +02:00
Martin Stein
2eca297232 Run script for timer test 2012-06-06 16:15:25 +02:00
Josef Söntgen
7e3c303ad0 Fix bugs in libc_noux's sendto() method
The sysio's struct fields need to be properly set on each syscall. This
fixes a bug where the wrong fd is used after the first sendto syscall.

Also the minimal buffer size calculation uses the wrong size.

Fixes #235.
2012-06-06 13:57:55 +02:00
Stefan Kalkowski
c02f04da76 Fiasco.OC: raise sigma0's priority to maximum.
When sigma0 runs on a lower priority than the rest of the threads in the
system it might come to the point that while answering a page fault or
I/O memory area request the timeslice of the caller (core-pager) gets
fully consumed. As long as other threads are still executable and don't block
sigma0 won't do progress anymore, because it runs at the lowest priority.
This commit simply sets sigma0's priority to the highest in the system.
2012-06-04 17:10:16 +02:00
Stefan Kalkowski
21ffbc0080 Fiasco.OC/ARM: fix image creation in run-script
When invoking the bootstrap build in the L4RE build-system to create
a single elf-image containing all needed files to boot a scenario, don't
use the 'ENTRY' variable, but 'E' variable instead. Otherwise 'ENTRY'
might get overridden (dependent on the make-version). Moreover, using
'E' seems to be the way L4Re is expecting it has to be invoked.

Fixes #226
2012-06-04 12:05:27 +02:00
Christian Prochaska
28744cebf7 Increase dde_ipxe 'nic_ep' thread stack size
Fixes #228.
2012-06-01 15:36:20 +02:00
Josef Söntgen
b6394495d3 Replace yacc call with bison
We are using bison to generate certain files when preparing the libc.
However the yacc(1) wrapper script is used instead of calling bison
directly which does not work if bison is not installed but the original
yacc(1).

Fixes #225. Fixes #227.
2012-06-01 12:44:48 +02:00
Norman Feske
de162831cb Spelling fixes reported by m-stein and ssumpf 2012-05-30 13:00:56 +02:00
Stefan Kalkowski
04969dcf69 Fiasco.OC: Don't map page 0 in core (fix #223)
When core requests all RAM from sigma0 it normally unmaps page 0 so that
null-pointer dereferences are detected by a pagefault. The unmap syscall
in the Fiasco.OC base platform was used insufficiently in this particular
case.
2012-05-30 11:36:34 +02:00
Norman Feske
b54bdea2aa News item for release 12.05 2012-05-30 11:34:42 +02:00
Norman Feske
6ad8d3da0f Release notes for version 12.05 2012-05-30 11:34:42 +02:00
Norman Feske
87fe6e5c16 Road-map update
The media player has been traded for the persistent storage topic
because the latter one naturally builds upon the just recently added
file-system interface. Furthermore, we defer the live CD until July as
we realized that we first need to overhaul low-level components such as
USB before the new live system can be expected to work as intended.
2012-05-30 11:34:42 +02:00
Norman Feske
5206c19073 Update components.txt 2012-05-30 11:34:42 +02:00
Christian Helmuth
a497a22edf Moon: Route to IO_PORT/IRQ services
The timer needs IRQ and IO_PORT on platforms where it uses the PIT.
2012-05-30 08:51:28 +02:00
Christian Helmuth
7bffdacc9a Increase RAM quotas for 64-bit architectures 2012-05-29 16:08:50 +02:00
Josef Söntgen
7b8ebe34e9 libcrypto: Provide x86_64-specific implementations
modexp512 and rc4-md5 code were missing for x86_64. The files are now
generated on openssl-prepare and will be used when building for x86_64.

Fixes #224.
2012-05-29 14:58:01 +02:00
Stefan Kalkowski
337bb6d5f8 Build gmp and mpfr libary on x86_32 only (fix #135)
By now the gmp-library works builds on x86/32bit only. The mpfr library
depends on gmp, so make both library dependent on the corresponding platform
variables. Look at the discussion of issue #135.
2012-05-29 13:55:00 +02:00
Stefan Kalkowski
34efd709cc Rework l4android script for convenience reasons
Use terminals for LOG output of L4Android scenario, as well as a terminal
session for the Linux terminal. Now everything can be used interactively
on one screen: the Linux/Android framebuffer, the Linux console, and the
LOG-output of L4Linux.
2012-05-29 13:55:00 +02:00
Stefan Kalkowski
54e08cfed5 Fiasco.OC: make capability ref-counter thread-safe
Introduce process global spin-lock for Cap_index's reference-counter
to avoid non-atomic increment/decrement of the counter. Here, we don't
use a static Spinlock object, because it's constructor wouldn't be
initialized before used for the first time.
2012-05-29 13:55:00 +02:00
Stefan Kalkowski
94e14ec20b Fiasco.OC: basic support for pandaboard 2012-05-29 13:55:00 +02:00
Stefan Kalkowski
c3145c1a5d Fiasco.OC: fix l4_caps_equal kernel patch
A kernel capability that is invalid has no kobject pointer, so check whether
it's valid beforehand
2012-05-29 13:55:00 +02:00
Stefan Kalkowski
66fbea127b Fiasco.OC: fix bugs in cap_map insertion/removal
The following fixes partly solve the problems triggered by the noux stress
test introduced by nfeske in issue #208.
* The check whether a capability exists in the Cap_map, and its insertion,
  has to be done atomically
* While removing a capability it is looked up in the Cap_map via its id,
  check whether the found capability pointer is the same like the looked up,
  otherwise the wrong capability gets freed
* When a local capability is un- resp. marshalled, only the local pointer
  gets transfered, not the redundant capability id
* Introduce several assertions and warnings to facilitate debugging
2012-05-29 13:55:00 +02:00
Norman Feske
b86f0c8b32 Fix getdirentries in libc_ffat 2012-05-29 13:55:00 +02:00
Christian Helmuth
bf91ea8926 Enable building libav without optimization
Some source files do not build with -O0 due to conflicting register
allocation and inline assembler constrains. We enforce optimization (O2)
for these files.

Also, I reduced the noise from warning messages induced by lazy handling
of "assignment discards ‘const’ qualifier" and "passing argument from
incompatible pointer type" in third-party sources.
2012-05-29 13:55:00 +02:00
Christian Helmuth
36ae42b8ff Check for required tools on 'make prepare'
Fixes #221.
2012-05-29 13:55:00 +02:00
Christian Prochaska
06fdc7b897 Qt-based media player
This patch implements a simple Qt-based media player which is actually a
graphical user interface for the SDL-based 'avplay' media player from
'libav'. It starts 'avplay' as a child and shows its graphical output in a
'QNitpickerViewWidget'. The widgets for controlling the player state send
the according keyboard and mouse input events to 'avplay'.

The 'qt_avplay' player supports the following configuration options:

<mediafile name="..."/>
-> name of the media file to play

<framebuffer_filter name="..." ram_quota="..."/> (may appear multiple times)
-> name of a framebuffer filter service to filter the video output

Fixes #222.
2012-05-29 13:55:00 +02:00
Josef Söntgen
8f4b3dd4f1 Add gnu-netcat as Noux package
Please find run script at 'ports/run/noux_net_netcat.run'.
2012-05-29 13:54:59 +02:00
Josef Söntgen
d211007aba Add port of OpenSSL to libports
This commit contains the initial port of OpenSSL to Genode. It certainly
needs some more work to get things straight - it compiles fine but does
not work because of a NULL pointer exception.
2012-05-29 13:54:59 +02:00
Josef Söntgen
6d8a7c0cc4 Initial version of networking support for Noux
Noux/net adds network functionality to noux. Currently most basic
network related system calls including 'accept', 'bind', 'connect',
'listen', 'recv', 'send', 'shutdown', and 'socket' are implemented by
wrapping lwip's network functions.

At the moment noux/net is rarely usable, though it is possible to
use netcat to send a message to a netcat server which listen on a
given port in noux/net.
2012-05-29 13:54:59 +02:00
Norman Feske
db21cd6f0e Add shutdown to lwIP libc plugin 2012-05-29 13:54:59 +02:00
Josef Söntgen
30fe9d1912 Extend libc with libresolv functionality
This commit enables libc's own libresolv and its dependencies.
2012-05-29 13:54:59 +02:00
Christian Prochaska
ba6dae9946 'avplay' media player
With this patch the SDL-based 'avplay' media player, which is part of
'libav', can be built. The run script expects a media file named
'mediafile' in the 'bin' directory.

Fixes #216.
2012-05-29 13:54:59 +02:00
Christian Prochaska
25a82d6dd5 Add 'libav' to libports
Fixes #212.
2012-05-29 13:54:59 +02:00
Christian Prochaska
c2f23de2e7 Introduce server-role member to 'Child' class
This patch is needed to use children as services in a dynamic
way (closing and reopening sessions).
2012-05-29 13:54:59 +02:00
Josef Söntgen
4ba1669b39 Add dynamic_pointer_cast method to Shared_pointer
This methods is currently only used for casting an Io_channel
object to an Socket_io_channel object.
2012-05-29 13:54:59 +02:00
Norman Feske
cba25cc1d6 Minor coding-style fixes 2012-05-29 13:54:59 +02:00
Martin Stein
2b0c613336 Basic drivers for UART modules PL011 and TL16C750 2012-05-29 13:54:58 +02:00
Martin Stein
a936cba296 Simple driver for the SP804 timer 2012-05-29 13:54:58 +02:00
Martin Stein
45b4cb5bbf Simple driver for the PL390 Interrupt controller 2012-05-29 13:54:58 +02:00
Martin Stein
dce09679bc Simple drivers for the Cortex A9 components 2012-05-29 13:54:58 +02:00
Martin Stein
056f980d4e Atomic compare exchange for ARM platforms
Makes similar kernel-specific implementations unnecessary,
although i don't delete them with this commit.
2012-05-29 13:54:58 +02:00
Martin Stein
2eccfc5dc9 Defs for the boards, supported by 'base-hw' 2012-05-29 13:54:58 +02:00
Martin Stein
4b90cba132 Boolean fields and strict write on Registers/MMIO 2012-05-29 13:54:58 +02:00
Martin Stein
f01f42fdd7 Avoid ambiguousness of entry members in FIFO 2012-05-29 13:54:58 +02:00
Sebastian Sumpf
9f73476b37 New DDE-Linux-based USB driver
The new 'dde_linux' repository will host device drivers ported from the
Linux kernel. In contrast to the original 'linux_drivers' repository,
'dde_linux' does not contain any 3rd-party source code. To download the
Linux kernel source code and extract the drivers, execute the 'make
prepare' rule of the top-level Makefile. The initial version of the
'dde_linux' repository comes with an USB driver. The porting methodology
follows the path of the Intel GEM port. Instead of attempting to provide
a generic Linux environment that works across drivers, each driver comes
with a specially tailored DDE.

The DDE consists of Genode-specific implementations of Linux API
functions as declared in 'lx_emul.h'. Most of these functions are
dummies that must merely be provided to resolve dependencies at the
linking stage. They are called by unused code-paths.

As of now, the USB driver support UHCI, EHCI on the x86_32 platform. I
exposes USB HID devices and USB storage devices via Genode's input-session
and block-session respectively.

The USB driver is accompanied with two run scripts 'run/usb_hid.run' and
'run/usb_storage.run'.
2012-05-29 13:54:58 +02:00
Christian Helmuth
9471490d01 Lua: Put Genode integration into own Lua lib 2012-05-29 13:54:58 +02:00
Christian Helmuth
28d4bdba83 Lua: Use some Genode functions from example
The example provides Timer::msleep() and the process' quota() to Lua
code.
2012-05-29 13:54:58 +02:00
Christian Helmuth
0200c27e33 Lua: Port of Lua runtime and simple example
The Lua runtime library is built in two variants: ANSI C and C++. The
C++ provides all Lua API function with C++ linkage and uses C++
exceptions instead of setjmp/longjmp for protected execution of Lua
chunks.

The ported version of Lua is 5.1.5.
2012-05-29 13:54:52 +02:00
Stefan Kalkowski
bd3c53be31 Implement LOG to Terminal adapter (issue #169)
This commit adds a terminal_log component, and a run-script which demonstrates
its usage. The terminal_log component provides the LOG service, and prints
every log-output prefixed by the session-label via a terminal-session.
2012-05-23 20:05:05 +02:00
Sebastian Sumpf
3bffcc17de Separate setjmp/longjmp from libc into own library 2012-05-23 19:18:33 +02:00
Sebastian Sumpf
376983ae4c DDE kit: Timer add schedule function form timers
Added 'dde_kit_timer_schedule_absolute' to timer interface.
2012-05-23 19:17:23 +02:00
Christian Prochaska
b6896cf22f SDL timer support
This patch adds a Genode-specific SDL timer backend.

Fixes #211.
2012-05-21 17:17:06 +02:00
Christian Prochaska
ce6fa75f7e Increase Qemu memory for Noux bash test
This patch increases the amount of RAM Qemu gets for the Noux bash test on
x86_64.

Fixes #210.
2012-05-21 17:16:41 +02:00
Christian Prochaska
171f46c770 Fix Noux x86_64 compile error
Fixes #209.
2012-05-21 17:16:23 +02:00
Norman Feske
e756d49966 Quote env variables (i.e., to support ccache) 2012-05-21 17:15:13 +02:00
Christian Prochaska
be36dec89e Add a run script for Arora
Fixes #207.
2012-05-21 10:06:08 +02:00
Norman Feske
483d094ad1 Run script for using binutils + gcc in Noux 2012-05-19 15:45:38 +02:00
Norman Feske
97cd7ca022 Hook for passing env pointer to main function
The new 'genode_envp' variable declared in '_main.cc' allows libc
plugins to supplying custom environment pointers to the main function.
This is needed by 3rd-party software such as GNU make, which expects the
environment pointer as third argument of the main function.
2012-05-18 19:32:44 +02:00
Norman Feske
6f12659369 Improve path handling (stripping pairs of dots) 2012-05-18 18:47:10 +02:00
Norman Feske
e436d60ce7 Remove debugging output, emulate access syscall 2012-05-18 18:47:02 +02:00
Norman Feske
0f6b59097e Detect execve failure 2012-05-18 17:10:54 +02:00
Norman Feske
cdbd1630bb Allow defining ram_fs file content from config 2012-05-18 17:07:30 +02:00
Norman Feske
95766bd4a1 Let mmap return aligned anonymous memory 2012-05-18 17:04:52 +02:00
Norman Feske
66290ea46d Stacked file systems for Noux
This patch introduces support for stacked file systems alongside new
glue for accessing file-system implementations provided via Genode's
new file-system-session interface.

Using stacked file systems, an arbitrary number of file systems (such
as tar archives or file systems implemented as separate Genode
components) can be composed to form one merged virtual file system.

An example is given via the 'ports/run/noux_bash.run' script. This run
script creates a virtual file system out of multiple tar archives each
containing the content of a particular GNU package. In addition, one
'ram_fs' is mounted, which enables Noux to perform write operations.
This way, the shell output can be redirected to a file, or files can
be saved in VIM.

Fixes #103.
2012-05-17 20:34:00 +02:00
Norman Feske
ae1d0c04ae File-system interface, ram_fs, libc-fs
This patch introduces the file-system-session interface, provides an
implementation of this interface in the form of an in-memory file
system, and enables the libc to use the new file-system facility.

The new interface resides in 'os/include/file_system_session/'. It
uses synchronous RPC calls for functions referring to directory
and meta-data handling. For transferring payload from/to files, the
packet-stream interface is used. I envision that the asynchronous design
of the packet-stream interface fits well will the block-session
interface. Compared to Unix-like file-system APIs, Genode's file-system
session interface is much simpler. In particular, it does not support
per-file permissions. On Genode, we facilitate binding policy (such as
write-permission) is sessions rather than individual file objects.

As a reference implementation of the new interface, there is the
new 'ram_fs' service at 'os/src/server/ram_fs'. It stores sparse
files in memory. At the startup, 'ram_fs' is able to populate the
file-system content with directories and ROM modules as specified
in its configuration.

To enable libc-using programs to access the new file-system interface,
there is the new libc plugin at 'libports/src/lib/libc-fs'. Using this
plugin, files stored on a native Genode file system can be accessed
using the traditional POSIX file API.

To see how the three parts described above fit together, the test
case at 'libports/run/libc_fs' can be taken as reference. It reuses
the original 'libc_ffat' test to exercise several file operations
on a RAM file-system using the libc API.

:Known limitations:

The current state should be regarded as work in progress. In particular
the error handling is not complete yet. Not all of the session functions
return the proper exceptions in the event of an error. I plan to
successively refine the interface while advancing the file-system
implementations. Also the support for truncating files and symlink
handling are not yet implemented.

Furthermore, there is much room for optimization, in particular for the
handling of directory entries. Currently, we communicate only one dir
entry at a time, which is bad when traversing large trees. However, I
decided to focus on functionality first and defer optimizations (such as
batching dir entries) to a later stage.

The current implementation does not handle file modification times at
all, which may be a severe limitation for tools that depend on this
information such as GNU make. Support for time will be added after we
have revisited Genode's timer-session interface (issue #1).

Fixes #54
Fixes #171
2012-05-17 20:33:53 +02:00
Norman Feske
f0fcf084d7 Improve robustness of policy matching
The 'Session_policy' helper could not cope well with configurations that
contain nodes of a type other than '<policy>'. This patch improves the
policy matching by skipping non-policy nodes.
2012-05-17 20:12:51 +02:00
Norman Feske
293b3c80d2 Fix exception type name in comment 2012-05-17 12:47:20 +02:00
Christian Prochaska
b45571e9d0 Set argv[argc] to 0 in 'config_args' libc plugin
Fixes #201.
2012-05-10 19:09:40 +02:00
Christian Prochaska
ac628b106b SDL audio support
This patch implements a Genode-specific audio backend for SDL.

The audio volume (in percent) can be configured in the config file of the
SDL application:

<config>
	<sdl_audio_volume value="100"/>
</config>

Fixes #204.
2012-05-10 19:07:54 +02:00
Stefan Kalkowski
19bad919a6 Add std::terminate to ldso whitelist.
Due to recent changes on the Fiasco.OC platform, when building ldso
applications for this platform the std::terminate function is needed
by the ~Ipc_server destructor. So we've to add it to ldso's whitelist.
2012-05-10 19:06:43 +02:00
Stefan Kalkowski
0971b47b11 Use placement new for Heap::Dataspace (fix #203)
This commit introduces placement new/delete, and a constructor for
Heap::Dataspace objects. It fixes the usage of uninitialized Dataspace
objects when expanding the heap that lead to problems in conjunction
with Native_capability smart-pointer in base-foc. Please refer to
issue #203.
2012-05-10 19:04:35 +02:00
Christian Prochaska
f23d3cb66b Increase the JDB kernel object names buffer size
This patch increases the size of the JDB kernel object names buffer. The
original size was too small for some Genode scenarios and caused missing
thread names in the kernel debugger thread list.

Fixes #191.
2012-05-09 20:56:49 +02:00
Christian Prochaska
beed82bb56 Enable Noux for x86_64
Fixes #199.
2012-05-09 20:56:18 +02:00
Christian Prochaska
13bd859e31 Increase stack size of entry points
This patch increases the stack size of entrypoint threads in the PCI and
PS/2 drivers, in the Terminal server and in the Signal service for 64-bit
Genode/Fiasco.OC built with -O0.

Fixes #198.
2012-05-09 20:55:48 +02:00
Christian Prochaska
c0c65b00eb Fiasco.OC: increase core link address
This patch increases core's link address to 0x490000 to avoid region
overlaps with bootstrap on 64-bit Fiasco.OC.

Fixes #197.
2012-05-09 20:54:31 +02:00
Christian Prochaska
b448a67151 Qt4: fix Genode thread deletion
With this patch the Genode thread used by the QThread class gets deleted
when 'QThread::wait()' gets called and the timeout didn't trigger or when
'QThread::terminate()' gets called.

Fixes #193.
2012-05-09 20:52:45 +02:00
Stefan Kalkowski
c3fcd834b0 Fiasco.OC: check for leaks while thread creation
When unmarshalling capabilities it is checked, whether a capability with the
id was leaking, but this isn't done when creating a thread. Here the capability
is transfered indirectly via the thread state object. This patch checks for
old leakage capabilities while thread creation.
2012-05-09 20:50:57 +02:00
Stefan Kalkowski
ac1ff2f5f8 Fiasco.OC: keep reference to capabilities in use.
Due to recently introduces smart-pointers to Cap_index objects it's
necessary to always keep at least one reference as long as a corresponding
slot in the capability-space of a process is in use. This is especially
important for L4Linux that uses cap-slots directly without the given
abstractions of Genode.
2012-05-09 20:50:57 +02:00
Stefan Kalkowski
a4282e2033 Fiasco.OC: fix l4_task_cap_equal semantic.
The syscall l4_task_cap_equal almost returns false although the referenced
kernel-objects are equal. This patch changes the semantic of the syscall so
that whenever two capabilities refering the same kernel-object are compared
it will return true. Please refer to the discussion of the following mail
thread:
  http://www.mail-archive.com/l4-hackers@os.inf.tu-dresden.de/msg05162.html
2012-05-09 20:50:57 +02:00
Stefan Kalkowski
d1c7d64c2c Delete Sliced_heap::Block object when freeing.
When a portion of the sliced heap gets freed, the corresponding block
gets removed from the list of blocks, and it's dataspace containing the
block gets detached, but it's destructor never gets called. This leads
to leaking capabilities, when Native_capability is implemented as
smart-pointer, because the destructor of Ram_dataspace_capability that
is part of the Block object gets never called.
2012-05-09 20:50:57 +02:00
Stefan Kalkowski
ca004658d9 Fiasco.OC: smart-pointer for kernel capabilities.
Implements Native_capability as smart-pointer type referencing Cap_index
objects. Whenever capabilities are copied, assigned, constructed, or destructed
the reference-counter of the Cap_index is incremented/decremented. When it
reaches zero the Cap_index is removed from the process-global cap_map and
gets freed. Fix for issue #32.
2012-05-09 20:50:57 +02:00
Stefan Kalkowski
0d3df86674 Add compiler helper function to supress type deduction bug. 2012-05-09 20:50:56 +02:00
Stefan Kalkowski
685add4774 Use OO-means to copy capabilities (fix #182)
Whenever Native_capability or its derivation Capaility is memcpy'd no copy-
constructor/assignment-operator is used and thereby implementation of
reference-counting gets impossible for these objects. Use object-oriented
means like e.g. copy-constructor instead.
2012-05-09 20:50:56 +02:00
Norman Feske
eeb0896d06 Update zlib to version 1.2.7, fix #196 2012-05-03 23:32:56 +02:00
Christian Prochaska
be5e3f92a4 Adapt QPluginWidget to the new loader interface 2012-05-02 16:54:18 +02:00
Christian Prochaska
cf9610a958 Implement RAM accounting 2012-05-02 16:54:18 +02:00
Norman Feske
bcf6714eff Re-implementation of the loader service, ref #187
The original loader service was primarily motivated by the
browser-plugin scenario presented on our live CD. The new version
implements a more general session interface, which widens the
application scope of the service and, at the same time, reduces its
implementation complexity.

The complexity reduction is achieved by removing the original limitation
of supplying the new sub system as a single binary blob only. The server
used to implement heuristics and functionality for dealing with
different kinds of blobs such as ELF images or TAR archives. This has
been replaced by a session-local ROM service, which can be equipped with
an arbitrary number of ROM modules supplied by the loader client prior
starting the new sub system. Even though the TAR support has been
removed, a separate instance of the 'tar_rom' service can be used within
the subsystem to provide the formerly built-in functionality.
2012-05-02 16:54:18 +02:00
Norman Feske
e9814e0692 News item about GSoC participation 2012-04-25 11:33:59 +02:00
Norman Feske
5bedeef814 Simplify use of namespace Genode within Noux 2012-04-23 20:43:43 +02:00
Christian Prochaska
4c4d4e5c63 Fix printing of signed numbers
If any operand of the '?' operator is of an unsigned type, the result
is unsigned by default. Thanks to Julian Stecklina for finding
this out.

Fixes #189.
2012-04-23 15:35:01 +02:00
Christian Prochaska
2f2fd33d96 Explicitly use qemu-system-i386 rather than qemu 2012-04-23 15:32:59 +02:00
Christian Prochaska
93faa9a36f Config option for GDB monitor RAM preservation
This patch allows to configure the amount of RAM that GDB monitor should
preserve for itself. The configuration syntax looks as follows:

<start name="gdb_monitor">
    <resource name="RAM" quantum="1G"/>
    <config>
        <target name="noux">
        <preserve name="RAM" quantum="2M"/>
        ...
    </config>
</start>

Fixes #190.
2012-04-23 15:32:22 +02:00
Martin Stein
3236395e6a Check ownership when freeing RAM dataspaces 2012-04-20 18:39:48 +02:00
Martin Stein
d6f956e37e Test for enforcing dataspace ownership 2012-04-20 18:38:44 +02:00
Norman Feske
88aab61e09 Mechanism for using chroot on Linux
The new 'chroot' tool at 'os/src/app/chroot' allows for executing
subsystems within chroot jails on Linux. For using the tool, please
refer to the test case 'os/run/chroot.run'. Fixes #37
2012-04-20 11:21:24 +02:00
Christian Prochaska
48d547e2fd Enable SDL thread support
This patch enables the use of threads and locking mechanisms in SDL
applications. The 'pthread' libary is used as backend. Not all features
are currently supported.

Fixes #185.
2012-04-20 11:21:24 +02:00
Christian Prochaska
7a369bc74d Add an 'executable' flag to 'Rm_session::attach()'
With this patch clients of the RM service can state if they want a mapping
to be executable or not. This allows dataspaces to be mapped as
non-executable on Linux by default and as executable only if needed.

Partially fixes #176.
2012-04-20 11:21:19 +02:00
Christian Prochaska
de92956220 Read 'main()' function arguments from config file
This patch reads program arguments from the config file and makes them
available to the application via the 'argc' and 'argv' arguments of the
'main()' function. The configuration syntax looks like this:

<config>
	<arg value="...">
	<arg value="...">
        ...
</config>

The 'value' attribute of the first <arg> node becomes 'argv[0]' and so on.

Fixes #184.
2012-04-20 08:31:40 +02:00
Martin Stein
afe996df74 Handle the case that init has no children
Fixes #183
2012-04-19 19:04:33 +02:00
Norman Feske
cb9b2724de Simplify use of custom data-flow signal handlers 2012-04-17 11:08:52 +02:00
Norman Feske
8b96f44003 Add const qualifiers, minor style fixes 2012-04-17 11:08:40 +02:00
Christian Prochaska
b81bea845d GDB monitor target configuration test 2012-04-16 19:04:42 +02:00
Christian Prochaska
674e898af3 Pass config to child of GDB monitor
With this patch GDB monitor provides a 'config' file to the target. Its
content can be defined in the <config> sub node of the <target> XML node.

Fixes #179.
2012-04-16 19:01:56 +02:00
Christian Prochaska
ff3e08f9ea POSIX threads and semaphores
This patch implements a subset of the POSIX thread and semaphore functions
in the 'pthread' library.

Fixes #174.
2012-04-16 12:16:40 +02:00
Christian Prochaska
dd0ef3403f Limit core's ROM fs to current directory on Linux
This patch limits core's ROM file system to the current working directory
on Linux by rejecting file names which contain forward slashes.

Fixes #175.
2012-04-16 12:16:12 +02:00
Stefan Kalkowski
d1cc263427 Fix Fiasco.OC's build-system (fix #177)
Apply the patch posted by Christian Helmuth to the l4-hackers mailing list
when doing `make prepare` in base-foc.
2012-04-16 12:15:31 +02:00
Norman Feske
de2723c794 Heuristics for determining python2 for OKL4 2012-04-16 11:49:44 +02:00
Norman Feske
5bf5aa5e32 News item about dynamic re-configuration 2012-04-11 11:58:20 +02:00
Norman Feske
9a00ad7ae3 Support for dynamic ROM sessions, fix #170
This patch introduces support for ROM sessions that update their
provided data during the lifetime of the session. The 'Rom_session'
interface had been extended with the new 'release()' and 'sigh()'
functions, which are needed to support the new protocol. All ROM
services have been updated to the new interface.

Furthermore, the patch changes the child policy of init
with regard to the handling of configuration files. The 'Init::Child'
used to always provide the ROM dataspace with the child's config file
via a locally implemented ROM service. However, for dynamic ROM
sessions, we need to establish a session to the real supplier of the ROM
data. This is achieved by using a new 'Child_policy_redirect_rom_file'
policy to handle the 'configfile' rather than handling the 'configfile'
case entirely within 'Child_config'.

To see the new facility in action, the new 'os/run/dynamic_config.run'
script provides a simple scenario. The config file of the test program
is provided by a service, which generates and updates the config data
at regular intervals.

In addition, new support has been added to let slaves use dynamic
reconfiguration. By using the new 'Child_policy_dynamic_rom_file', the
configuration of a slave can be changed dynamically at runtime via the
new 'configure()' function.

The config is provided as plain null-terminated string (instead of a
dataspace capability) because we need to buffer the config data anyway.
So there is no benefit of using a dataspace. For buffering configuration
data, a 'Ram_session' must be supplied. If no 'Ram_session' is specified
at construction time of a 'Slave_policy', no config is supplied to the
slave (which is still a common case).

An example for dynamically reconfiguring a slave is provided by
'os/run/dynamic_config_slave.run'.
2012-04-05 11:25:26 +02:00
Norman Feske
ba248fe554 Add swap and realloc to 'Attached_ram_dataspace'
The new 'swap' and 'realloc' functions are needed in scenarios where
'Attached_ram_dataspace' is used to implement double buffering. The
particular use case is the implementation of dynamic ROM sessions.
2012-04-05 10:40:46 +02:00
Norman Feske
abb5a8a329 Skip building Arora if Qt4 repo is not present 2012-04-05 10:40:46 +02:00
Christian Prochaska
df95b8b2b4 Add 'Qoost' to libports
Fixes #173.
2012-04-05 10:40:46 +02:00
Norman Feske
63827dda00 Heuristics for determining python2 binary 2012-04-05 10:40:46 +02:00
Norman Feske
f150b00c0d Spelling fix 2012-04-04 17:03:34 +02:00
Norman Feske
92cd9e57b9 Fix compile warning 2012-04-04 11:07:15 +02:00
Norman Feske
5f9fdde337 Streamlined 'noux_bash.run' for faster build 2012-03-31 16:28:22 +02:00
Christian Prochaska
d6caa73c13 Fix a compile error reported by GCC 4.7.0 2012-03-30 19:55:56 +02:00
Ivan Loskutov
fa4935627a Fix error for 7th argument call_member 2012-03-30 19:55:55 +02:00
Stefan Kalkowski
fc8a24129b Fix broken links of genode.org 2012-03-30 19:55:55 +02:00
Ivan Loskutov
59221f9c17 Fix misprint 2012-03-30 19:47:35 +02:00
Stefan Kalkowski
ccebaa3802 Fiasco.OC: fix race while pager_object destruction
When the pager gets a pagefault, exception, pause, or wakeup request it's
always possible, that the corresponding thread gets destroyed between
receiving the message and looking up the thread's pager_object. This commit
unifies the check for a valid pager_object for each kind of requests to the
pager, thereby adds currently missing checks.
2012-03-28 20:15:15 +02:00
Norman Feske
75aba75ff8 Support proper shadowing of target.mk files
The build system overlays multiple source trees (repositories) such that
they can shadow libraries and include search paths. This patch extends
the shadowing concept to build targets. Furthermore, it streamlines the
build stage for generating library depenencies, reducing the processing
time of this stage by 10-20 percent. Fixes #165.
2012-03-28 20:14:54 +02:00
Norman Feske
37bf298b37 Move 'test/cap_integrity/foc' to 'base-foc' 2012-03-28 16:28:15 +02:00
Norman Feske
d6e30c19de Replace 'Native_capability::copy_to' by accessor
The 'copy_to' function turned out to be not flexible enough to
accommodate the Noux fork mechanism. This patch removes the function,
adds an accessor for the capability destination and a compound type
'Native_capability::Raw' to be used wherever plain capability
information must be communicated.
2012-03-28 09:58:51 +02:00
Norman Feske
22084dbfa5 Ignore suspicious wake-up messages on OKL4 2012-03-26 17:00:06 +02:00
Norman Feske
8bd02a5333 Let Noux deliver EOF when pressing control-d 2012-03-26 17:00:06 +02:00
Norman Feske
08d4e68db1 Add VIM to 'noux_bash.run' 2012-03-26 17:00:06 +02:00
Stefan Kalkowski
76c106dac0 Fiasco.OC: prevent first exception in ldso apps
In applications that use ldso the main_thread_bootstrap() function is called
twice which results in the main thread's gate-capability to be inserted twice
in the Capability_map which results in an exception. Unfortunately at least
on ARM this exception cannot be handled that early, so this commit prevents
the exception by checking, whether the capability is inserted already or not.
Fixes #164.
2012-03-26 16:59:23 +02:00
Stefan Kalkowski
9a9f49b65c Fiasco.OC: sanity-check cap insertion. (fix #166)
When constructing a thread object its capability is inserted into the
capability map. Normally this is done by the ipc-unmarshalling code, but
in this case the thread-capability isn't transfered via normal IPC, but in
a special form via the thread_state object. In contrast to the unmarshalling
code, the thread-startup code doesn't check, whether the capability-map
already contains a deprecated entry with the same capability id before
inserting the thread's capability. This commit add the necessary check.

Moreover, a check is added to the insertion methods of the capability-map
to verify that capability-allocation didn't failed.
2012-03-26 15:06:26 +02:00
Stefan Kalkowski
89db981280 Fix race when removing Cap_index (fix #163)
Removing a Cap_index from Capability_map in core can happen twice, via
Cap_session_component or destructor of a Cap_mapping. That it's checked
whether the index is part of the map before removing it. This patch puts
the check into the remove method, so both operations are within the same
lock context, to remove a race condition.

This is a follow up fix for commit d287b9d893
2012-03-23 18:26:33 +01:00
Stefan Kalkowski
c1e6657f49 Rewrite cap_integrity test for Fiasco.OC (fix #161)
By commit d287b9d893 the Native_capability
class changed fundamentally in the Fiasco.OC platform code of Genode. Thereby
the cap_integrity test got incompatible with it. This commit introduces a
separate test implementation for Fiasco.OC that does semantically the same
like the old test. Please refer to issue #161.
2012-03-23 14:34:58 +01:00
Stefan Kalkowski
bb90a2d41d Let cap_integrity test be more expressive
By using the `compare_output_to` method from the run tool instead of using
regexp in the cap_integrity run-script, the test outputs the undesired lines
instead of just signaling that the test failed.
2012-03-23 14:34:09 +01:00
Stefan Kalkowski
747c482188 Fiasco.OC: remove cap_alloc library (fix #160)
The cap_alloc library became redundant and doesn't compile any longer.
This commit simply removes it. Please, refer to issue #160.
2012-03-23 14:33:46 +01:00
Stefan Kalkowski
e88276bf0e Fix compare_output_to in run tool (fix #162)
In the compare_output_to function in the run tool a check was introduced,
whether the given arguments are empty, and if so if the output string is it
too. Without this patch compare_output_to succeeded when the given pattern
was empty but output wasn't. Please refer to issue #162.
2012-03-23 14:33:31 +01:00
Stefan Kalkowski
d287b9d893 Fiasco.OC: introduce Cap_index (fixes #149, #112)
This commit introduces a Cap_index class for Fiasco.OC's capabilities.
A Cap_index is a combination of the global capability id, that is used by Genode
to correctly identify a kernel-object, and a corresponding entry in a
protection-domain's (kernel-)capability-space. The cap-indices are non-copyable,
unique objects, that are held in a Cap_map. The Cap_map is used to re-find
capabilities already present in the protection-domain, when a capability is
received via IPC. The retrieval of capabilities effectively fixes issue #112,
meaning the waste of capability-space entries.
Because Cap_index objects are non-copyable (their address indicates the position
in the capability-space of the pd), they are inappropriate to use as
Native_capability. Therefore, Native_capability is implemented as a reference
to Cap_index objects. This design seems to be a good pre-condition to implement
smart-pointers for entries in the capability-space, and thereby closing existing
leaks (please refer to issue #32).

Cap_index, Cap_map, and the allocator for Cap_index objects are designed in a way,
that it should be relatively easy to apply the same concept to NOVA also. By now,
these classes are located in the `base-foc` repository, but they intentionally
contain no Fiasco.OC specific elements.

The previously explained changes had extensive impact on the whole Fiasco.OC
platform implementation, due to various dependencies. The following things had to
be changed:

* The Thread object's startup and destruction routine is re-arranged, to
  enable another thread (that calls the Thread destructor) gaining the
  capability id of the thread's gate to remove it from the Cap_map, the
  thread's UTCB had to be made available to the caller, because there
  is the current location of that id. After having the UTCB available
  in the Thread object for that reason, the whole thread bootstrapping
  could be simplified.
* In the course of changing the Native_capability's semantic, a new Cap_mapping
  class was introduced in core, that facilitates the establishment and
  destruction of capability mappings between core and it's client's, especially
  mappings related to Platform_thread and Platform_task, that are relevant to
  task and thread creation and destruction. Thereby, the destruction of
  threads had to be reworked, which effectively removed a bug (issue #149)
  where some threads weren't destroyed properly.
* In the quick fix for issue #112, something similar to the Cap_map was
  introduced available in all processes. Moreover, some kind of a capability
  map already existed in core, to handle cap-session request properly. The
  introduction of the Cap_map unified both structures, so that the
  cap-session component code in core had to be reworked too.
* The platform initialization code had to be changed sligthly due to the
  changes in Native_capability
* The vcpu initialization in the L4Linux support library had to be adapted
  according to the already mentioned changes in the Thread object's bootstrap
  code.
2012-03-22 14:10:44 +01:00
Christian Prochaska
12e1ae9d72 Implement '_nanosleep()'
This patch provides an implementation of the '_nanosleep()' libc function,
which blocks on a timed semaphore for the given time, but at least 10ms.
This should result in better performance than creating a timer connection
on every call (for thread-safety), but could still be improved.

Fixes #158.
2012-03-21 22:05:55 +01:00
Christian Prochaska
983ee6321a Add 'include/SDL' to include search path
Fixes #159.
2012-03-21 22:05:31 +01:00
Stefan Kalkowski
1520d9c1d9 Fiasco.OC: Map ROM-modules in advance (fix #157).
There seems to be a bug in Fiasco.OC, that is hard to reproduce. The scenario
discussed in issue #157 triggers it relatively often. When sigma0 handles
pagefaults of core on demand at runtime, at some point its reply ipc-message
gets stucked in the kernel. This commit touches all ROM-modules when the
platform is initialized in advance (like it was done for RAM etc. already
before).
2012-03-21 22:05:08 +01:00
Stefan Kalkowski
890a3ee868 Specialize blit library for ARM (fix #147).
Use multiple load store instructions for 32 byte chunks in ARM-specific
blit-function, analog to x86 variant. Make the blit-function of x86 a
generic one, and provide needed utility functions for ARM and generic code.
Please refer issue #147 for discussion.
2012-03-21 22:04:25 +01:00
Norman Feske
724a6e8120 Support escape sequences used by 'ls --color=auto' 2012-03-21 21:38:04 +01:00
Norman Feske
afeb54ebed Add pipe and dup2 syscalls to Noux
Fixes #133.
2012-03-21 21:37:17 +01:00
Norman Feske
48739422ac Validate liveliness of signal contexts
We cannot trust signal imprints received with signals to represent valid
pointers to signal contexts. After a signal context has been dissolved
from its receiver, a signal corresponding to the context might still be
in flight. Hence, we need a facility to check received signal imprints
against the list of valid contexts at reception time. The new
'Signal_context_registry' is a very simple attempt to create such a
facility.
2012-03-21 21:37:15 +01:00
Norman Feske
1896c09a2d Fixed initial reference counter value 2012-03-21 21:37:15 +01:00
Norman Feske
d0285edcb7 Fixed inconsistent include guard 2012-03-21 21:37:15 +01:00
Norman Feske
a215d05db8 Support for tab characters in terminal 2012-03-21 21:37:15 +01:00
Norman Feske
5b6de825e6 Noux: propagate environment to execve
Fixes #131.
2012-03-21 21:36:49 +01:00
Norman Feske
a79f5db2c4 News about GSoC 2012 rejection 2012-03-17 13:33:38 +01:00
Stefan Kalkowski
e34adf883c Introduce design pattern for uncopyable objects.
Introduce a new Noncopyable class, one can derive from to mark a class of
objects to be uncopyable. This way the compiler can check for any violations
for you.
2012-03-16 18:24:52 +01:00
Sebastian Sumpf
38e953d913 Fiasco.OC: Set interrupt mode in IRQ session
Set IRQ 0-15 to edget/high and 16-23 level low (x86 only). Fixes #153
2012-03-16 18:24:00 +01:00
Norman Feske
207abe647b Handle current working directory in Noux 2012-03-16 18:23:00 +01:00
Sebastian Sumpf
d460820cf6 ACPI: Remove quota checking
Remove RAM quota checking on IRQ session creation. Spelling fixes.
(Fix #151)
2012-03-16 18:22:52 +01:00
Sebastian Sumpf
ed8eb91107 ACPI: Parse MADT
Implemented IRQ service and MATD parsing. Please have a look at the 'README'
file. Fixes issue #151
2012-03-16 14:57:12 +01:00
Norman Feske
db8058c16f Add x86_32 requirement to AHCI and ACPI drivers 2012-03-16 14:53:56 +01:00
Norman Feske
cca4b7b43c Change include order to remedy conflicting defines
Both the libc and the NOVA syscall bindings provide the definition of
PAGE_SIZE. In contrast to the libc, which uses a #define, the NOVA
syscalls uses a proper enum value. Thus, we can work around the conflict
by including the NOVA syscalls header prior the libc header. Fixes #152.
2012-03-16 14:45:54 +01:00
Sebastian Sumpf
bbce38cb36 Do not marshal invalid capabilities on NOVA/x86
We send a local name of ~0L instead, if this is encountered during the
unmarshalling we generate an invalid 'Native_capability' (Fixes #148).
2012-03-13 16:32:23 +01:00
Sebastian Sumpf
c5e2fa06cb ACPI: Cleanup
Remove unnecessary debugging output. Filter output correctly in run script.
2012-03-10 16:01:17 +01:00
Stefan Kalkowski
ae8cf5f44d Rename tid() to dst() in Native_capability.
As suggested by Norman in the discussion of issue #145, this commit
renames the tid() accessor in Native_capability to dst().
2012-03-10 15:52:19 +01:00
Stefan Kalkowski
84ca4b25db L4Linux: fix changed name scope of enums.
This bug was introduced by commit c9c21ad39c, where Fiasco_capability
was removed, and enums defined in that class scope went to the namespace
Fiasco. In L4Linux some references to Fiasco_capability remained.
2012-03-10 15:52:18 +01:00
Stefan Kalkowski
42b7c01685 Unify policy name for Native_capability_tpl.
This commit unifies the policy name for the template argument for
Native_capability_tpl to Cap_dst_policy, like suggested by Norman in the
discussion resulting from issue #145. Moreover, it takes the memcpy
operation for copying a Native_capability out of the template, which is
included by a significant bunch of files, and separates it in a library,
analog to the suggestion in issue #145.
2012-03-10 15:52:13 +01:00
Norman Feske
35384faa7a Follow-up tweaks for issue #145
Because we use to pass a policy class to 'Native_capability_tpl'
we can pass the dst type as part of the policy instead of as
a separate template argument. This patch also adds documentation
of the POLICY interface as expected by 'Native_capability_tpl'.
2012-03-08 19:28:32 +01:00
Stefan Kalkowski
c9c21ad39c Merge Native_capability implementations (fix #145).
This patch unifies the Native_capability classes for the different kernel
platforms by introducing an appropriate template, and eliminating naming
differences. Please refer issue #145.
2012-03-08 18:42:39 +01:00
Stefan Kalkowski
9992efed03 Don't memcpy the parent capability. Fix #144.
To give the platform developer more freedom in how the Native_capability
class is internally implemented (e.g. turning it into a smart-pointer),
this patch removes the memcpy operation, when transfering the parent-capability
to a new process from the generic code, and let the implementation of the
platform-specific Native_capability decide how the transfer has to be done.
Please refer to issue #144.
2012-03-08 18:41:38 +01:00
Stefan Kalkowski
fa377f0df5 Make local capability interface explicit. Fix #139.
Introduce a factory-, and dereference method for local capabilities. These are
capabilities that reference objects of services, which are known to be used
protection-domain internally only. To support the new Capability class methods
a protected constructor and accessor to the local object's pointer is needed
in the platform's capability base-classes. For further discussion details please
refer issue #139.
2012-03-08 18:40:48 +01:00
Norman Feske
56586ae7b0 Add 'base/src/test/ada', fix #146 2012-03-08 12:32:08 +01:00
Norman Feske
5491ca590d GSoC 2012 document and news item 2012-03-08 11:32:25 +01:00
Althaf K Backer
e607ba9271 Fixed a typo from 32bit to 64bit (fixed #137) 2012-03-08 10:42:26 +01:00
Christian Prochaska
2d290c0898 Preliminary 'log2()' and 'log2f()' implementation
The 'log2()' and 'log2f()' functions have been added in FreeBSD's libc
version 9.0.0, but they are missing in version 8.2.0, which is used in
Genode. This patch provides preliminary implementations of these
functions until the Genode libc gets updated to version 9.0.0 or above.

Fixes #143.
2012-03-08 10:42:21 +01:00
Christian Prochaska
0bf6a24d61 Add 'select_from_repositories' in 'dep_lib.mk'
Fixes #142.
2012-03-06 17:09:54 +01:00
Stefan Kalkowski
0973215cf0 Adapt memory quota to recent Fiasco.OC changes
When introducing an avl-tree to re-find known capabilities in Fiasco.OC
(issue #112), the memory demand of apllications was slightly increased.
So we've to give the pl11x driver more memory by default. Fixes #140.
2012-03-06 17:02:48 +01:00
Sebastian Sumpf
10d7022395 ACPI: Handle indirect packages
Scan for packages outside of _PRT-methods (fix #141)
2012-03-06 16:59:02 +01:00
Norman Feske
e4cb3ed929 Follow-up for spin-lock unification, ref #123 2012-03-01 10:57:05 +01:00
Stefan Kalkowski
319813a59b Merge spin-lock implementations
Separate spin-lock implementation from lock-implementation and put it into a
non-public header, so it can be re-used by the DDE kit's and Fiasco.OC's
capability-allocator spin lock. Fixes issue #123.
2012-02-29 15:41:17 +01:00
Norman Feske
72183f1536 Fix link in release notes
Thanks to ukn for reporting!
2012-02-28 18:19:41 +01:00
Norman Feske
0b385ea833 Fixed link in news item 2012-02-28 12:16:14 +01:00
3966 changed files with 251667 additions and 104278 deletions

77
.gitignore vendored
View File

@@ -13,28 +13,43 @@
/base-okl4/download
/base-pistachio/contrib
/dde_ipxe/contrib
/dde_linux/contrib
/dde_linux/download
/dde_oss/contrib
/dde_oss/download
/dde_rump/contrib
/dde_rump/include/rump
/libports/contrib
/libports/download
/libports/include/curl/
/libports/include/EGL/egl.h
/libports/include/EGL/eglext.h
/libports/include/GL
/libports/include/KHR
/libports/include/SDL
/libports/include/exfat
/libports/include/ffat
/libports/include/fribidi
/libports/include/freetype
/libports/include/ft2build.h
/libports/include/fuse-ext2
/libports/include/iconv/
/libports/include/icu/
/libports/include/jbig2dec
/libports/include/libc-amd64/
/libports/include/libc-arm/
/libports/include/libc-i386/
/libports/include/libc/
/libports/include/libpng
/libports/include/libssh/
/libports/include/lua
/libports/include/lwip/lwip
/libports/include/lwip/netif
/libports/include/mupdf
/libports/include/ncurses/MKterm.h.awk
/libports/include/ncurses/capdefaults.c
/libports/include/ncurses/curses.h
/libports/include/ncurses/ncurses.h
/libports/include/ncurses/hashed_db.h
/libports/include/ncurses/hashsize.h
/libports/include/ncurses/init_keytry.h
@@ -51,16 +66,66 @@
/libports/include/ncurses/tic.h
/libports/include/ncurses/unctrl.h
/libports/include/openjpeg
/libports/include/openssl
/libports/src/lib/openssl/x86_32/aes_enc.s
/libports/src/lib/openssl/x86_32/cpuid.s
/libports/src/lib/openssl/x86_64/aes_enc.s
/libports/src/lib/openssl/x86_64/cpuid.s
/libports/src/lib/openssl/x86_64/modexp512.s
/libports/src/lib/openssl/x86_64/rc4_md5.s
/libports/include/pcre
/libports/include/python2.6
/libports/include/qoost
/libports/include/readline/keymaps.h
/libports/include/readline/rlstdc.h
/libports/include/readline/rltypedefs.h
/libports/include/readline/tilde.h
/libports/include/stdcxx
/libports/include/zlib
/libports/include/gmp/gmp-impl.h
/libports/include/gmp/arm/gmp-mparam.h
/libports/include/gmp/x86_32/gmp-mparam.h
/libports/include/gmp/x86_64/gmp-mparam.h
/libports/include/mpc/
/libports/include/mpfr/
/libports/include/stdcxx-genode/bits/atomic_lockfree_defines.h
/libports/include/stdcxx-genode/bits/atomic_word.h
/libports/include/stdcxx-genode/bits/basic_file.h
/libports/include/stdcxx-genode/bits/c++allocator.h
/libports/include/stdcxx-genode/bits/c++io.h
/libports/include/stdcxx-genode/bits/c++locale.h
/libports/include/stdcxx-genode/bits/cpu_defines.h
/libports/include/stdcxx-genode/bits/cxxabi_tweaks.h
/libports/include/stdcxx-genode/bits/ctype_base.h
/libports/include/stdcxx-genode/bits/ctype_inline.h
/libports/include/stdcxx-genode/bits/cxxabi_forced.h
/libports/include/stdcxx-genode/bits/error_constants.h
/libports/include/stdcxx-genode/bits/exception_defines.h
/libports/include/stdcxx-genode/bits/hash_bytes.h
/libports/include/stdcxx-genode/bits/messages_members.h
/libports/include/stdcxx-genode/bits/os_defines.h
/libports/include/stdcxx-genode/bits/time_members.h
/libports/include/stdcxx-genode/bits/exception_ptr.h
/libports/include/stdcxx-genode/bits/nested_exception.h
/libports/include/stdcxx-genode/exception
/libports/include/stdcxx-genode/new
/libports/include/stdcxx-genode/typeinfo
/libports/include/stdcxx-genode/initializer_list
/libports/include/x86emu/stdint.h
/libports/include/x86emu/stdio.h
/libports/include/x86emu/stdlib.h
/libports/include/x86emu/string.h
/libports/include/x86emu/x86emu.h
/libports/include/x86emu/x86emu/
/libports/src/lib/gmp/mpn/asm-defs.m4
/libports/src/lib/gmp/mpn/arm/hamdist.c
/libports/src/lib/gmp/mpn/arm/popcount.c
/libports/src/lib/gmp/mpn/x86_32/add_n.asm
/libports/src/lib/gmp/mpn/x86_32/sub_n.asm
/libports/src/lib/gmp/mpn/x86_64/add_n.asm
/libports/src/lib/gmp/mpn/x86_64/hamdist.asm
/libports/src/lib/gmp/mpn/x86_64/popcount.asm
/libports/src/lib/gmp/mpn/x86_64/sub_n.asm
/libports/src/lib/ncurses/codes.c
/libports/src/lib/ncurses/comp_captab.c
/libports/src/lib/ncurses/fallback.c
@@ -68,8 +133,19 @@
/libports/src/lib/ncurses/make_keys
/libports/src/lib/ncurses/names.c
/libports/src/lib/ncurses/unctrl.c
/libports/src/lib/qt5/qtjsbackend
/libports/src/lib/qt5/qtwebkit/Source/JavaScriptCore
/libports/src/lib/qt5/qtwebkit/Source/WebCore/generated
/libports/tool/mesa/glsl
/libports/tool/mupdf
/libports/tool/qt5/bootstrap
/libports/tool/qt5/misc/var
/libports/tool/qt5/moc
/libports/tool/qt5/qmake/*.d
/libports/tool/qt5/qmake/*.o
/libports/tool/qt5/qmake/qmake
/libports/tool/qt5/rcc
/libports/tool/qt5/uic
/ports-foc/contrib
/ports-okl4/contrib
/ports-okl4/download
@@ -88,3 +164,4 @@
/qt4/tool/rcc
/qt4/tool/uic
/linux_drivers

84
README
View File

@@ -14,13 +14,13 @@ the project's official website:
The current implementation can be compiled for 8 different kernels: Linux,
L4ka::Pistachio, L4/Fiasco, OKL4, NOVA, Fiasco.OC, Codezero, and a custom
kernel for the MicroBlaze architecture. Whereas the Linux version serves us as
development vehicle and enables us to rapidly develop the generic parts of the
system, the actual target platforms of the framework are microkernels. There
is no "perfect" microkernel - and neither should there be one. If a microkernel
pretended to be fit for all use cases, it wouldn't be "micro". Hence, all
microkernels differ in terms of their respective features, complexity, and
supported hardware architectures.
kernel for running Genode directly on ARM-based hardware. Whereas the Linux
version serves us as development vehicle and enables us to rapidly develop the
generic parts of the system, the actual target platforms of the framework are
microkernels. There is no "perfect" microkernel - and neither should there be
one. If a microkernel pretended to be fit for all use cases, it wouldn't be
"micro". Hence, all microkernels differ in terms of their respective features,
complexity, and supported hardware architectures.
Genode allows the use of each of the kernels listed above with a rich set of
device drivers, protocol stacks, libraries, and applications in a uniform way.
@@ -74,35 +74,37 @@ The Genode source tree is composed of the following subdirectories:
:'linux':
Linux kernel (both x86_32 and x86_64)
:'pistachio':
L4ka::Pistachio kernel developed at University of Karlsruhe.
See [http://genode.org/community/wiki/GenodeOnL4kaPistachio]
:'fiasco':
L4/Fiasco kernel developed at University of Technology Dresden.
See [http://genode.org/community/wiki/GenodeOnL4Fiasco]
:'nova':
NOVA hypervisor developed at University of Technology Dresden
See [http://genode.org/documentation/platforms/nova]
:'foc':
Fiasco.OC is a modernized version of the Fiasco microkernel with a
completely revised kernel interface fostering capability-based
security. It is not compatible with L4/Fiasco.
See [http://genode.org/community/wiki/GenodeOnFiascoOC]
See [http://genode.org/documentation/platforms/foc]
:'hw':
The hw platform allows the execution of Genode on bare ARM hardware
without the need for a separate kernel. The kernel functionality is
included in core.
See [http://genode.org/documentation/platforms/hw]
:'okl4':
OKL4 kernel (x86_32 and ARM) developed at Open-Kernel-Labs.
See [http://genode.org/community/wiki/GenodeOnOKL4]
See [http://genode.org/documentation/platforms/okl4]
:'nova':
NOVA hypervisor developed at University of Technology Dresden
See [http://genode.org/community/wiki/GenodeOnNOVA]
:'pistachio':
L4ka::Pistachio kernel developed at University of Karlsruhe.
See [http://genode.org/documentation/platforms/pistachio]
:'fiasco':
L4/Fiasco kernel developed at University of Technology Dresden.
See [http://genode.org/documentation/platforms/fiasco]
:'codezero':
Codezero microkernel developed by B-Labs
See [http://genode.org/community/wiki/GenodeOnCodezero]
:'mb':
Support for running Genode natively on the MicroBlaze softcore CPU.
See [http://genode.org/community/wiki/GenodeOnMicroBlaze]
See [http://genode.org/documentation/platforms/codezero]
:'host':
Pseudo platform documenting the interface between the generic and
@@ -125,23 +127,44 @@ The Genode source tree is composed of the following subdirectories:
to Genode, most importantly the C library. The repository contains no
upstream source code but means to download the code and adapt it to Genode.
For instructions about how to use this mechanism, please consult the README
file at the top level of the repository.
file at the top level of the repository. Among the 3rd-party libraries
are Qt5, libSDL, freetype, Python, ncurses, Mesa, and libav.
:'dde_linux':
This source-code repository contains the device driver environment for
executing Linux device drivers natively on Genode. Currently, this
repository hosts the USB stack.
:'linux_drivers':
This source-code repository contains the device driver environment for
executing Linux device drivers natively on Genode.
Deprecated version of the Linux device driver environment featuring audio
drivers and the Intel GEM driver. This repository is in a transitionary
phase. Its functionality will be incorporated into 'dde_linux'.
:'dde_ipxe':
This source-code repository contains the device driver environment for
This source-code repository contains the device-driver environment for
executing drivers of the iPXE project.
:'dde_oss':
This source-code repository contains the device-driver environment for the
audio drivers of the Open Sound System (OSS).
:'dde_rump':
This source-code repository contains the port of rump kernels, which are
used to execute subsystems of the NetBSD kernel as user level processes.
The repository contains a server that uses a rump kernel to provide
various NetBSD file systems to Genode.
:'qt4':
This source-code repository contains the Genode version of Qt4 framework.
Please find more information about using Qt4 with Genode in the repository's
'README' file.
'README' file. Please note that the Qt4 support is deprecated. Use Qt5
as contained in 'libports' instead.
:'ports':
@@ -155,8 +178,7 @@ The Genode source tree is composed of the following subdirectories:
:'ports-<platform>':
These platform-specific source-code repositories contain software that
capitalizes special features of the respective kernel platform. I.e.,
for the OKL4 base platform, a port of OKLinux is provided in 'ports-okl4'.
capitalizes special features of the respective kernel platform.
For the Fiasco.OC platform, 'ports-foc' hosts a port of the L4Linux
kernel. For further information, please refer to the README file at the
top level of the respective repository.

View File

@@ -6,11 +6,21 @@
VERBOSE ?= @
ECHO = @echo
GIT_URL = git://git.l4dev.org/codezero.git
GIT_URL = https://github.com/nfeske/codezero.git
GIT_REV = 6fa4884a5a1cf6207372f69ae01e5faa6d5a39c8
CONTRIB_DIR = contrib
PATCHES = $(shell find patches -name *.patch)
#
# Utility to check if a tool is installed
#
check_tool = $(if $(shell which $(1)),,$(error Need to have '$(1)' installed.))
$(call check_tool,git)
$(call check_tool,patch)
$(call check_tool,python2.6)
$(call check_tool,scons)
#
# Print help information by default
#

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -37,7 +37,8 @@ namespace Genode {
* Constructor
*/
Mapping(addr_t dst_addr, addr_t src_addr,
bool write_combined, unsigned l2size = PAGE_SIZE_LOG2,
bool write_combined, bool io_mem,
unsigned l2size = PAGE_SIZE_LOG2,
bool rw = true)
:
_from_phys_addr(src_addr),
@@ -146,7 +147,7 @@ namespace Genode {
/**
* Return badge for faulting thread
*/
unsigned long badge() const { return _last.tid; }
unsigned long badge() const { return _last; }
/**
* Return true if page fault was a write fault

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -14,6 +14,9 @@
#ifndef _INCLUDE__BASE__NATIVE_TYPES_H_
#define _INCLUDE__BASE__NATIVE_TYPES_H_
#include <base/native_capability.h>
#include <base/stdint.h>
namespace Codezero {
struct l4_mutex;
@@ -25,30 +28,17 @@ namespace Genode {
class Platform_thread;
struct Native_thread_id
struct Cap_dst_policy
{
int tid;
typedef int Dst;
/**
* Pointer to thread's running lock
*
* Once initialized (see 'lock_helper.h'), it will point to the
* '_running_lock' field of the thread's 'Native_thread' structure,
* which is part of the thread context. This member variable is
* used by the lock implementation only.
*/
struct Codezero::l4_mutex *running_lock;
Native_thread_id() { }
/**
* Constructor (used as implicit constructor)
*/
Native_thread_id(int l4id) : tid(l4id), running_lock(0) { }
Native_thread_id(int l4id, Codezero::l4_mutex *rl) : tid(l4id), running_lock(rl) { }
static bool valid(Dst tid) { return tid != Codezero::NILTHREAD; }
static Dst invalid() { return Codezero::NILTHREAD; }
static void copy(void* dst, Native_capability_tpl<Cap_dst_policy>* src);
};
typedef Cap_dst_policy::Dst Native_thread_id;
struct Native_thread
{
Native_thread_id l4id;
@@ -97,46 +87,26 @@ namespace Genode {
return (Codezero::l4_mutex *)&_running_lock; }
};
inline bool operator == (Native_thread_id t1, Native_thread_id t2) { return t1.tid == t2.tid; }
inline bool operator != (Native_thread_id t1, Native_thread_id t2) { return t1.tid != t2.tid; }
typedef Native_capability_tpl<Cap_dst_policy> Native_capability;
typedef int Native_connection_state;
/*
* Because Codezero does not support local names for capabilities, a Genode
* capability consists of the global thread ID and a global object ID, not
* protected by the kernel when transmitted as IPC payloads.
*/
class Native_capability
struct Native_config
{
private:
/**
* Thread-context area configuration.
*/
static constexpr addr_t context_area_virtual_base() {
return 0x40000000UL; }
static constexpr addr_t context_area_virtual_size() {
return 0x10000000UL; }
Native_thread_id _tid; /* global thread ID */
int _local_name; /* global unique object ID */
public:
/**
* Default constructor creates invalid capability
*/
Native_capability()
: _local_name(0) { _tid.tid = Codezero::NILTHREAD; }
/**
* Constructor for hand-crafting capabilities
*
* This constructor is only used internally be the framework.
*/
Native_capability(Native_thread_id tid, int local_name)
: _tid(tid), _local_name(local_name) { }
bool valid() const { return _tid.tid != Codezero::NILTHREAD; }
int local_name() const { return _local_name; }
int dst() const { return _tid.tid; }
Native_thread_id tid() const { return _tid; }
/**
* Size of virtual address region holding the context of one thread
*/
static constexpr addr_t context_virtual_size() { return 0x00100000UL; }
};
typedef int Native_connection_state;
struct Native_pd_args { };
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2010-2012 Genode Labs GmbH
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -0,0 +1 @@
REP_INC_DIR += include/codezero/dummies

View File

@@ -1,9 +0,0 @@
LIBS = cxx lock l4
SRC_S = crt0.s
SRC_CC = _main.cc
INC_DIR += $(REP_DIR)/src/platform
INC_DIR += $(BASE_DIR)/src/platform
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath crt0.s $(BASE_DIR)/src/platform/arm
vpath _main.cc $(dir $(call select_from_repositories,src/platform/_main.cc))

View File

@@ -0,0 +1,33 @@
#
# \brief Portions of base library shared by core and non-core processes
# \author Norman Feske
# \date 2013-02-14
#
LIBS += cxx syscall startup
SRC_CC += cap_copy.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc
SRC_CC += pager/pager.cc pager/common.cc
SRC_CC += avl_tree/avl_tree.cc
SRC_CC += allocator/slab.cc
SRC_CC += allocator/allocator_avl.cc
SRC_CC += heap/heap.cc heap/sliced_heap.cc
SRC_CC += console/console.cc
SRC_CC += child/child.cc
SRC_CC += process/process.cc
SRC_CC += elf/elf_binary.cc
SRC_CC += lock/lock.cc
SRC_CC += signal/signal.cc signal/common.cc
SRC_CC += server/server.cc server/common.cc
SRC_CC += thread/thread.cc thread/thread_bootstrap.cc thread/trace.cc
SRC_CC += thread/context_allocator.cc env/utcb.cc
SRC_CC += lock/cmpxchg.cc
INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath cap_copy.cc $(BASE_DIR)/src/platform
vpath %.cc $(REP_DIR)/src/base
vpath %.cc $(BASE_DIR)/src/base

View File

@@ -0,0 +1,12 @@
SRC_CC += console/log_console.cc
SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc
SRC_CC += thread/thread_start.cc
INC_DIR += $(BASE_DIR)/src/base/env
INC_DIR += $(REP_DIR)/include/codezero/dummies
LIBS += base-common
vpath %.cc $(REP_DIR)/src/base
vpath %.cc $(BASE_DIR)/src/base

View File

@@ -1,13 +0,0 @@
#
# Additional symbols we need to keep when using the arm-none-linux-gnueabi
# tool chain
#
KEEP_SYMBOLS += __aeabi_ldivmod __aeabi_uldivmod __dynamic_cast
KEEP_SYMBOLS += _ZN10__cxxabiv121__vmi_class_type_infoD0Ev
#
# Override sources of the base repository with our changed version
#
vpath exception.cc $(REP_DIR)/src/base/cxx
include $(BASE_DIR)/lib/mk/cxx.mk

View File

@@ -1,4 +0,0 @@
SRC_CC = ipc.cc pager.cc
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath %.cc $(REP_DIR)/src/base/ipc

View File

@@ -1,7 +0,0 @@
SRC_CC = lock.cc cmpxchg.cc
INC_DIR += $(REP_DIR)/include/codezero/dummies
INC_DIR += $(REP_DIR)/src/base/lock
vpath lock.cc $(BASE_DIR)/src/base/lock
vpath cmpxchg.cc $(REP_DIR)/src/base/lock

View File

@@ -1,4 +0,0 @@
SRC_CC = pager.cc
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath pager.cc $(REP_DIR)/src/base/pager

View File

@@ -1,5 +1,4 @@
SRC_CC = core_printf.cc
LIBS = cxx console
INC_DIR += $(REP_DIR)/src/base/console/pl011
INC_DIR += $(REP_DIR)/include/codezero/dummies

View File

@@ -0,0 +1,5 @@
include $(BASE_DIR)/lib/mk/startup.inc
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath crt0.s $(BASE_DIR)/src/platform/arm

View File

@@ -1,5 +0,0 @@
SRC_CC = thread.cc thread_start.cc thread_bootstrap.cc
INC_DIR += $(REP_DIR)/include/codezero/dummies
vpath thread_start.cc $(REP_DIR)/src/base/thread
vpath %.cc $(BASE_DIR)/src/base/thread

View File

@@ -34,11 +34,6 @@ INC_DIR += $(CODEZERO_ABS_DIR)/include
INC_DIR += $(CODEZERO_ABS_DIR)/conts/userlibs/libl4/include
INC_DIR += $(CODEZERO_ABS_DIR)/conts/userlibs/libdev/uart/include
#
# Codezero-specific startup code
#
PRG_LIBS += startup
#
# Allow programs to test for the Codezero kernel
#

View File

@@ -7,7 +7,7 @@ index 7b315b8..ace38d8 100644
struct container;
-#define tcb_pagerid(tcb) ((tcb)->pager->tid)
+#define tcb_pagerid(tcb) 3
+#define tcb_pagerid(tcb) 4
#define space_is_pager(tcb) \
((tcb)->space->spid == (tcb)->pager->space->spid)

View File

@@ -83,6 +83,24 @@ proc build_boot_image {binaries} {
}
proc run_genode_until {{wait_for_re forever} {timeout_value 0}} {
spawn_qemu $wait_for_re $timeout_value }
proc run_genode_until {{wait_for_re forever} {timeout_value 0} {running_spawn_id -1}} {
#
# If a running_spawn_id is specified, wait for the expected output
#
if {$running_spawn_id != -1} {
wait_for_output $wait_for_re $timeout_value $running_spawn_id
return
}
#
# Try to use one of the supported backends for running the scripts
#
if {[is_qemu_available]} {
spawn_qemu $wait_for_re $timeout_value
return
}
global run_target
puts stderr "Error: Can't execute automatically on target '$run_target'"
exit -1
}

View File

@@ -11,7 +11,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -6,7 +6,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

40
base-codezero/src/base/env/utcb.cc vendored Normal file
View File

@@ -0,0 +1,40 @@
/*
* \brief Helper functions UTCB access on Codezero
* \author Norman Feske
* \date 2012-03-01
*/
/*
* Copyright (C) 2012-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/thread.h>
/**
* Resolve 'Thread_base::myself' when not linking the thread library
*
* This weak symbol is primarily used by test cases. Most other Genode programs
* use the thread library. If the thread library is not used, 'myself' can only
* be called by the main thread, for which 'myself' is defined as zero.
*/
Genode::Thread_base * __attribute__((weak)) Genode::Thread_base::myself() { return 0; }
Genode::Native_utcb *Genode::Thread_base::utcb()
{
/*
* If 'utcb' is called on the object returned by 'myself',
* the 'this' pointer may be NULL (if the calling thread is
* the main thread). Therefore we handle this special case
* here.
*/
if (this == 0) return 0;
return &_context->utcb;
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -34,17 +34,17 @@ void Ipc_ostream::_send()
{
if (verbose_ipc)
PDBG("thread %d sends IPC to %d, write_offset=%d",
thread_myself(), _dst.tid().tid, _write_offset);
thread_myself(), _dst.dst(), _write_offset);
umword_t snd_size = min(_write_offset, (unsigned)L4_IPC_EXTENDED_MAX_SIZE);
*(umword_t *)_snd_msg->addr() = _dst.local_name();
int ret = l4_send_extended(_dst.tid().tid, L4_IPC_TAG_SYNC_EXTENDED,
int ret = l4_send_extended(_dst.dst(), L4_IPC_TAG_SYNC_EXTENDED,
snd_size, _snd_msg->addr());
if (ret < 0)
PERR("l4_send_extended (to thread %d) returned ret=%d",
_dst.tid().tid, ret);
_dst.dst(), ret);
_write_offset = sizeof(umword_t);
}
@@ -71,7 +71,7 @@ void Ipc_istream::_wait()
if (verbose_ipc)
PDBG("thread %d waits for IPC from %d, rcv_buf at %p, rcv_size=%d",
tid().tid, _rcv_cs, rcv_buf, (int)rcv_size);
dst(), _rcv_cs, rcv_buf, (int)rcv_size);
int ret = l4_receive_extended(_rcv_cs, rcv_size, rcv_buf);
if (ret < 0)
@@ -79,7 +79,7 @@ void Ipc_istream::_wait()
if (verbose_ipc)
PDBG("thread %d received IPC from %d",
tid().tid, l4_get_sender());
dst(), l4_get_sender());
_read_offset = sizeof(umword_t);
}
@@ -107,7 +107,7 @@ void Ipc_client::_call()
{
#warning l4_sendrecv_extended is not yet implemented in l4lib/arch/syslib.h
_send();
_rcv_cs = _dst.tid().tid;
_rcv_cs = Ipc_ostream::_dst.dst();
_wait();
_rcv_cs = L4_ANYTHREAD;
@@ -115,8 +115,8 @@ void Ipc_client::_call()
}
Ipc_client::Ipc_client(Native_capability const &srv,
Msgbuf_base *snd_msg, Msgbuf_base *rcv_msg)
Ipc_client::Ipc_client(Native_capability const &srv, Msgbuf_base *snd_msg,
Msgbuf_base *rcv_msg, unsigned short)
: Ipc_istream(rcv_msg), Ipc_ostream(srv, snd_msg), _result(0)
{ }
@@ -144,7 +144,7 @@ void Ipc_server::_wait()
try { Ipc_istream::_wait(); } catch (Blocking_canceled) { }
/* define destination of next reply */
_dst = Native_capability(l4_get_sender(), badge());
Ipc_ostream::_dst = Native_capability(l4_get_sender(), badge());
_prepare_next_reply_wait();
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2010-2012 Genode Labs GmbH
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -150,11 +150,11 @@ void Ipc_pager::reply_and_wait_for_fault()
int ret = l4_map((void *)_reply_mapping.from_phys(),
(void *)_reply_mapping.to_virt(),
_reply_mapping.num_pages(), flags, _last.tid);
_reply_mapping.num_pages(), flags, _last);
/* wake up faulter if mapping succeeded */
if (ret < 0)
PERR("l4_map returned %d, putting thread %d to sleep", ret, _last.tid);
PERR("l4_map returned %d, putting thread %d to sleep", ret, _last);
else
acknowledge_wakeup();
@@ -166,7 +166,7 @@ void Ipc_pager::reply_and_wait_for_fault()
void Ipc_pager::acknowledge_wakeup()
{
enum { SUCCESS = 0 };
l4_set_sender(_last.tid);
l4_set_sender(_last);
l4_ipc_return(SUCCESS);
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -1,63 +0,0 @@
/*
* \brief Lock implementation
* \author Norman Feske
* \date 2007-10-15
*/
/*
* Copyright (C) 2007-2012 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/cancelable_lock.h>
#include <base/printf.h>
#include <cpu/atomic.h>
/* Codezero includes */
#include <codezero/syscalls.h>
using namespace Genode;
Cancelable_lock::Cancelable_lock(Cancelable_lock::State initial)
:
_native_lock(UNLOCKED)
{
if (initial == LOCKED)
lock();
}
void Cancelable_lock::lock()
{
while (!cmpxchg(&_native_lock, UNLOCKED, LOCKED))
Codezero::l4_thread_switch(-1);
}
void Cancelable_lock::unlock()
{
_native_lock = UNLOCKED;
}
/*
* Printf implementation to make Codezero's syscall bindings happy.
*
* We need a better place for this function - actually, the best would be not
* to need this function at all. As of now, 'printf' is referenced by
* Codezero's libl4, in particular by the mutex implementation.
*/
extern "C" void printf(const char *format, ...) __attribute__((weak));
extern "C" void printf(const char *format, ...)
{
va_list list;
va_start(list, format);
vprintf(format, list);
va_end(list);
}

View File

@@ -8,7 +8,7 @@
*/
/*
* Copyright (C) 2010-2012 Genode Labs GmbH
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -22,31 +22,8 @@
#include <codezero/syscalls.h>
/**
* Resolve 'Thread_base::myself' when not linking the thread library
*
* This weak symbol is primarily used by test cases. Most other Genode programs
* use the thread library. If the thread library is not used, 'myself' can only
* be called by the main thread, for which 'myself' is defined as zero.
*/
Genode::Thread_base * __attribute__((weak)) Genode::Thread_base::myself() { return 0; }
Genode::Native_utcb *Genode::Thread_base::utcb()
{
/*
* If 'utcb' is called on the object returned by 'myself',
* the 'this' pointer may be NULL (if the calling thread is
* the main thread). Therefore we handle this special case
* here.
*/
if (this == 0) return 0;
return &_context->utcb;
}
static Codezero::l4_mutex main_running_lock = { -1 };
extern Genode::Native_thread_id main_thread_tid;
extern Codezero::l4_mutex main_thread_running_lock;
static inline void thread_yield()
@@ -55,58 +32,30 @@ static inline void thread_yield()
}
static inline bool thread_id_valid(Genode::Native_thread_id tid)
static inline bool thread_check_stopped_and_restart(Genode::Thread_base *thread_base)
{
return tid.tid != Codezero::NILTHREAD;
}
static bool thread_check_stopped_and_restart(Genode::Native_thread_id tid)
{
if (!thread_id_valid(tid))
return false;
Codezero::l4_mutex_unlock(tid.running_lock);
Codezero::l4_mutex *running_lock = thread_base ?
thread_base->utcb()->running_lock() :
&main_thread_running_lock;
Codezero::l4_mutex_unlock(running_lock);
return true;
}
static inline Genode::Native_thread_id thread_get_my_native_id()
static inline void thread_switch_to(Genode::Thread_base *thread_base)
{
using namespace Genode;
Codezero::l4_mutex *running_lock = 0;
/* obtain pointer to running lock of calling thread */
if (Thread_base::myself())
running_lock = Thread_base::myself()->utcb()->running_lock();
else {
running_lock = &main_running_lock;
if (running_lock->lock == -1) {
Codezero::l4_mutex_init(running_lock);
Codezero::l4_mutex_lock(running_lock); /* block on first mutex lock */
}
}
return Genode::Native_thread_id(Codezero::thread_myself(), running_lock);
}
static inline Genode::Native_thread_id thread_invalid_id()
{
return Genode::Native_thread_id(Codezero::NILTHREAD, 0);
}
static inline void thread_switch_to(Genode::Native_thread_id tid)
{
if (thread_id_valid(tid))
Codezero::l4_thread_switch(tid.tid);
Genode::Native_thread_id tid = thread_base ?
thread_base->tid().l4id :
main_thread_tid;
Codezero::l4_thread_switch(tid);
}
static inline void thread_stop_myself()
{
Genode::Native_thread_id myself = thread_get_my_native_id();
Codezero::l4_mutex_lock(myself.running_lock);
Genode::Thread_base *myself = Genode::Thread_base::myself();
Codezero::l4_mutex *running_lock = myself ?
myself->utcb()->running_lock() :
&main_thread_running_lock;
Codezero::l4_mutex_lock(running_lock);
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -27,43 +27,47 @@ void Pager_activation_base::entry()
_cap = pager;
_cap_valid.unlock();
pager.wait_for_fault();
bool reply = false;
while (1) {
if (reply)
pager.reply_and_wait_for_fault();
else
pager.wait_for_fault();
/* lookup referenced object */
Pager_object *obj = _ep ? _ep->obj_by_id(pager.badge()) : 0;
Object_pool<Pager_object>::Guard _obj(_ep ? _ep->lookup_and_lock(pager.badge()) : 0);
Pager_object * obj = _obj;
reply = false;
/* handle request */
if (obj) {
if (obj->pager(pager))
/* something strange occured - leave thread in pagefault */
pager.wait_for_fault();
else
pager.reply_and_wait_for_fault();
} else {
/*
* We got a request from one of cores region-manager sessions
* to answer the pending page fault of a resolved region-manager
* client. Hence, we have to send the page-fault reply to the
* specified thread and answer the call of the region-manager
* session.
*
* When called from a region-manager session, we receive the
* core-local address of the targeted pager object via the
* first message word, which corresponds to the 'fault_ip'
* argument of normal page-fault messages.
*/
obj = reinterpret_cast<Pager_object *>(pager.fault_ip());
/* send reply to the calling region-manager session */
pager.acknowledge_wakeup();
/* answer page fault of resolved pager object */
pager.set_reply_dst(obj->cap());
pager.acknowledge_wakeup();
pager.wait_for_fault();
reply = !obj->pager(pager);
/* something strange occurred - leave thread in pagefault */
continue;
}
/*
* We got a request from one of cores region-manager sessions
* to answer the pending page fault of a resolved region-manager
* client. Hence, we have to send the page-fault reply to the
* specified thread and answer the call of the region-manager
* session.
*
* When called from a region-manager session, we receive the
* core-local address of the targeted pager object via the
* first message word, which corresponds to the 'fault_ip'
* argument of normal page-fault messages.
*/
obj = reinterpret_cast<Pager_object *>(pager.fault_ip());
/* send reply to the calling region-manager session */
pager.acknowledge_wakeup();
/* answer page fault of resolved pager object */
pager.set_reply_dst(obj->cap());
pager.acknowledge_wakeup();
}
}
@@ -79,7 +83,7 @@ Pager_entrypoint::Pager_entrypoint(Cap_session *, Pager_activation_base *a)
void Pager_entrypoint::dissolve(Pager_object *obj)
{
remove(obj);
remove_locked(obj);
}
@@ -90,7 +94,7 @@ Pager_capability Pager_entrypoint::manage(Pager_object *obj)
_activation->cap();
Untyped_capability cap = Native_capability(_activation->cap().tid(), obj->badge());
Untyped_capability cap = Native_capability(_activation->cap().dst(), obj->badge());
/* add server object to object pool */
obj->cap(cap);

View File

@@ -0,0 +1,96 @@
/*
* \brief Thread bootstrap code
* \author Christian Prochaska
* \author Martin Stein
* \date 2013-02-15
*/
/*
* Copyright (C) 2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/thread.h>
#include <base/env.h>
#include <util/string.h>
/* Codezero includes */
#include <codezero/syscalls.h>
Genode::Native_thread_id main_thread_tid;
Codezero::l4_mutex main_thread_running_lock;
/*****************************
** Startup library support **
*****************************/
void prepare_init_main_thread()
{
/* initialize codezero environment */
Codezero::__l4_init();
/* provide kernel identification of thread through temporary environment */
main_thread_tid = Codezero::thread_myself();
}
void prepare_reinit_main_thread() { prepare_init_main_thread(); }
/****************************
** Codezero libl4 support **
****************************/
/*
* Unfortunately, the function 'exregs_print_registers' in 'exregs.c' refers to
* 'memset'. Because we do not want to link core against a C library, we have to
* resolve this function here.
*/
extern "C" void *memset(void *s, int c, Genode::size_t n) __attribute__((weak));
extern "C" void *memset(void *s, int c, Genode::size_t n)
{
return Genode::memset(s, c, n);
}
/*
* Same problem as for 'memset'. The 'printf' symbol is referenced from
* 'mutex.c' and 'exregs.c' of Codezero's libl4.
*/
extern "C" int printf(const char *format, ...) __attribute__((weak));
extern "C" int printf(const char *format, ...)
{
va_list list;
va_start(list, format);
Genode::vprintf(format, list);
va_end(list);
return 0;
}
/*****************
** Thread_base **
*****************/
void Genode::Thread_base::_thread_bootstrap()
{
Codezero::l4_mutex_init(utcb()->running_lock());
Codezero::l4_mutex_lock(utcb()->running_lock()); /* block on first mutex lock */
}
void Genode::Thread_base::_init_platform_thread(Type type)
{
if (type == NORMAL) { return; }
/* adjust values whose computation differs for a main thread */
_tid.l4id = main_thread_tid;
_thread_cap = Genode::env()->parent()->main_thread_cap();
/* get first mutex lock (normally done by _thread_bootstrap) */
Codezero::l4_mutex_init(utcb()->running_lock());
Codezero::l4_mutex_lock(utcb()->running_lock());
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2010-2012 Genode Labs GmbH
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -30,6 +30,7 @@ void Thread_base::_thread_start()
{
Thread_base::myself()->_thread_bootstrap();
Thread_base::myself()->entry();
Thread_base::myself()->_join_lock.unlock();
Genode::sleep_forever();
}
@@ -38,16 +39,10 @@ void Thread_base::_thread_start()
** Thread base **
*****************/
void Thread_base::_init_platform_thread()
{
Codezero::l4_mutex_init(utcb()->running_lock());
Codezero::l4_mutex_lock(utcb()->running_lock()); /* block on first mutex lock */
}
void Thread_base::_deinit_platform_thread()
{
env()->cpu_session()->kill_thread(_thread_cap);
env()->rm_session()->remove_client(_pager_cap);
}
@@ -62,13 +57,11 @@ void Thread_base::start()
env()->pd_session()->bind_thread(_thread_cap);
/* create new pager object and assign it to the new thread */
Pager_capability pager_cap = env()->rm_session()->add_client(_thread_cap);
env()->cpu_session()->set_pager(_thread_cap, pager_cap);
_pager_cap = env()->rm_session()->add_client(_thread_cap);
env()->cpu_session()->set_pager(_thread_cap, _pager_cap);
/* register initial IP and SP at core */
addr_t thread_sp = (addr_t)&_context->stack[-4];
thread_sp &= ~0xf; /* align initial stack to 16 byte boundary */
env()->cpu_session()->start(_thread_cap, (addr_t)_thread_start, thread_sp);
env()->cpu_session()->start(_thread_cap, (addr_t)_thread_start, _context->stack_top());
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -25,11 +25,12 @@ using namespace Genode;
Rm_session::Local_addr
Core_rm_session::attach(Dataspace_capability ds_cap, size_t size,
off_t offset, bool use_local_addr,
Rm_session::Local_addr local_addr)
Rm_session::Local_addr local_addr,
bool executable)
{
using namespace Codezero;
Dataspace_component *ds = static_cast<Dataspace_component *>(_ds_ep->obj_by_cap(ds_cap));
Object_pool<Dataspace_component>::Guard ds(_ds_ep->lookup_and_lock(ds_cap));
if (!ds)
throw Invalid_dataspace();

View File

@@ -0,0 +1,28 @@
/*
* \brief Platform-specific parts of cores CPU-service
* \author Martin Stein
* \date 2012-04-17
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/printf.h>
/* Core includes */
#include <cpu_session_component.h>
using namespace Genode;
Ram_dataspace_capability Cpu_session_component::utcb(Thread_capability thread_cap)
{
PERR("%s: Not implemented", __PRETTY_FUNCTION__);
return Ram_dataspace_capability();
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -34,13 +34,16 @@ namespace Genode {
Local_addr attach(Dataspace_capability ds_cap, size_t size = 0,
off_t offset = 0, bool use_local_addr = false,
Local_addr local_addr = 0);
Local_addr local_addr = 0,
bool executable = false);
void detach(Local_addr) { }
Pager_capability add_client(Thread_capability) {
return Pager_capability(); }
void remove_client(Pager_capability) { }
void fault_handler(Signal_context_capability) { }
State state() { return State(); }

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2010-2012 Genode Labs GmbH
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2010-2012 Genode Labs GmbH
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -16,6 +16,7 @@
/* core includes */
#include <platform_thread.h>
#include <address_space.h>
/* Codezero includes */
#include <codezero/syscalls.h>
@@ -23,7 +24,7 @@
namespace Genode {
class Platform_thread;
class Platform_pd
class Platform_pd : public Address_space
{
private:
@@ -31,18 +32,17 @@ namespace Genode {
enum { UTCB_VIRT_BASE = 0x30000000 };
enum { UTCB_AREA_SIZE = MAX_THREADS_PER_PD*sizeof(struct Codezero::utcb) };
int _space_id;
unsigned _space_id;
bool utcb_in_use[MAX_THREADS_PER_PD];
public:
/**
* Constructors
*/
Platform_pd(bool core);
Platform_pd(signed pd_id = -1, bool create = true);
Platform_pd(char const *, signed pd_id = -1, bool create = true);
/**
* Destructor
@@ -68,6 +68,13 @@ namespace Genode {
* Assign parent interface to protection domain
*/
int assign_parent(Native_capability parent) { return 0; }
/*****************************
** Address-space interface **
*****************************/
void flush(addr_t, size_t) { PDBG("not implemented"); }
};
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -19,6 +19,9 @@
#include <base/thread_state.h>
#include <base/native_types.h>
/* core includes */
#include <address_space.h>
namespace Genode {
class Platform_pd;
@@ -30,19 +33,25 @@ namespace Genode {
enum { PD_NAME_MAX_LEN = 64 };
int _tid; /* global codezero thread ID */
int _space_id;
addr_t _utcb;
char _name[PD_NAME_MAX_LEN];
Pager_object *_pager;
unsigned _tid; /* global codezero thread ID */
unsigned _space_id;
Weak_ptr<Address_space> _address_space;
addr_t _utcb;
char _name[PD_NAME_MAX_LEN];
Pager_object *_pager;
/**
* Assign physical thread ID and UTCB address to thread
*
* This function is called from 'Platform_pd::bind_thread'.
*/
void _assign_physical_thread(int tid, int space_id, addr_t utcb) {
_tid = tid; _space_id = space_id; _utcb = utcb; }
void _assign_physical_thread(unsigned tid, unsigned space_id,
addr_t utcb,
Weak_ptr<Address_space> address_space)
{
_tid = tid; _space_id = space_id; _utcb = utcb;
_address_space = address_space;
}
public:
@@ -52,7 +61,7 @@ namespace Genode {
* Constructor
*/
Platform_thread(const char *name = 0, unsigned priority = 0,
int thread_id = THREAD_INVALID);
addr_t utcb = 0, int thread_id = THREAD_INVALID);
/**
* Destructor
@@ -87,14 +96,23 @@ namespace Genode {
void cancel_blocking();
/**
* Request thread state
* Override thread state with 's'
*
* \param state_dst destination state buffer
*
* \retval 0 successful
* \retval -1 thread state not accessible
* \throw Cpu_session::State_access_failed
*/
int state(Genode::Thread_state *state_dst);
void state(Thread_state s);
/**
* Read thread state
*
* \throw Cpu_session::State_access_failed
*/
Thread_state state();
/**
* Return the address space to which the thread is bound
*/
Weak_ptr<Address_space> address_space();
/************************
@@ -114,9 +132,14 @@ namespace Genode {
unsigned long pager_object_badge() const { return _tid; }
/**
* Set the executing CPU for this thread.
* Set the executing CPU for this thread
*/
void set_cpu(unsigned int cpu_no);
void affinity(Affinity::Location) { }
/**
* Get the executing CPU for this thread
*/
Affinity::Location affinity() { return Affinity::Location(); }
/**
* Get thread name

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -6,7 +6,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -1,58 +0,0 @@
/*
* \brief Implementation of the IO_PORT session interface
* \author Norman Feske
* \date 2009-10-02
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#include "io_port_session_component.h"
using namespace Genode;
/**************
** Port API **
**************/
unsigned char Io_port_session_component::inb(unsigned short address) {
return 0; }
unsigned short Io_port_session_component::inw(unsigned short address) {
return 0; }
unsigned Io_port_session_component::inl(unsigned short address) {
return 0; }
void Io_port_session_component::outb(unsigned short address, unsigned char value)
{ }
void Io_port_session_component::outw(unsigned short address, unsigned short value)
{ }
void Io_port_session_component::outl(unsigned short address, unsigned value)
{ }
/******************************
** Constructor / destructor **
******************************/
Io_port_session_component::Io_port_session_component(Range_allocator *io_port_alloc,
const char *args)
: _io_port_alloc(io_port_alloc)
{ }
Io_port_session_component::~Io_port_session_component()
{ }

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -56,7 +56,7 @@ Irq_session_component::Irq_session_component(Cap_session *cap_session,
{
long irq_number = Arg_string::find_arg(args, "irq_number").long_value(-1);
if (!irq_alloc || (irq_number == -1)||
irq_alloc->alloc_addr(1, irq_number) != Range_allocator::ALLOC_OK) {
irq_alloc->alloc_addr(1, irq_number).is_error()) {
PERR("unavailable IRQ %lx requested", irq_number);
return;
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -250,8 +250,8 @@ Platform::Platform() :
_core_mem_alloc.virt_alloc()->remove_range(core_virt_beg, core_size);
/* preserve context area in core's virtual address space */
_core_mem_alloc.virt_alloc()->raw()->remove_range(Thread_base::CONTEXT_AREA_VIRTUAL_BASE,
Thread_base::CONTEXT_AREA_VIRTUAL_SIZE);
_core_mem_alloc.virt_alloc()->raw()->remove_range(Native_config::context_area_virtual_base(),
Native_config::context_area_virtual_size());
/* remove used core memory from physical memory allocator */
_core_mem_alloc.phys_alloc()->remove_range(_lma_start, core_size);

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -67,7 +67,8 @@ int Platform_pd::bind_thread(Platform_thread *thread)
}
addr_t utcb_addr = UTCB_VIRT_BASE + utcb_idx*sizeof(struct utcb);
thread->_assign_physical_thread(ids.tid, _space_id, utcb_addr);
thread->_assign_physical_thread(ids.tid, _space_id, utcb_addr,
this->Address_space::weak_ptr());
return 0;
}
@@ -97,15 +98,16 @@ Platform_pd::Platform_pd(bool core)
}
Platform_pd::Platform_pd(signed pd_id, bool create) : _space_id(-1)
Platform_pd::Platform_pd(char const *, signed pd_id, bool create)
: _space_id(TASK_ID_INVALID)
{
_space_id = -1;
_space_id = TASK_ID_INVALID;
/* mark all UTCBs of the new PD as free */
for (int i = 0; i < MAX_THREADS_PER_PD; i++)
utcb_in_use[i] = false;
struct task_ids ids = { -1, -1, -1 };
struct task_ids ids = { TASK_ID_INVALID, TASK_ID_INVALID, TASK_ID_INVALID };
int ret = l4_thread_control(THREAD_CREATE | TC_NEW_SPACE, &ids);
if (ret < 0) {

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -27,22 +27,16 @@ using namespace Genode;
using namespace Codezero;
void Platform_thread::set_cpu(unsigned int cpu_no)
{
PDBG("not yet implemented");
}
int Platform_thread::start(void *ip, void *sp, unsigned int cpu_no)
{
Native_thread_id pager = _pager ? _pager->cap().tid() : -1;
Native_thread_id pager = _pager ? _pager->cap().dst() : THREAD_INVALID;
/* setup thread context */
struct exregs_data exregs;
exregs.flags = 0;
memset(&exregs, 0, sizeof(exregs));
exregs_set_stack(&exregs, (unsigned long)sp);
exregs_set_pc (&exregs, (unsigned long)ip);
exregs_set_pager(&exregs, pager.tid);
exregs_set_pager(&exregs, pager);
exregs_set_utcb (&exregs, _utcb);
int ret = l4_exchange_registers(&exregs, _tid);
@@ -78,10 +72,17 @@ void Platform_thread::resume()
}
int Platform_thread::state(Thread_state *state_dst)
void Platform_thread::state(Thread_state s)
{
PDBG("not implemented");
return -1;
PDBG("Not implemented");
throw Cpu_session::State_access_failed();
}
Thread_state Platform_thread::state()
{
PDBG("Not implemented");
throw Cpu_session::State_access_failed();
}
@@ -91,8 +92,15 @@ void Platform_thread::cancel_blocking()
}
Platform_thread::Platform_thread(const char *name, unsigned, int thread_id)
: _tid(-1)
Weak_ptr<Address_space> Platform_thread::address_space()
{
return _address_space;
}
Platform_thread::Platform_thread(const char *name, unsigned, addr_t,
int thread_id)
: _tid(THREAD_INVALID)
{
strncpy(_name, name, sizeof(_name));
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -1,39 +1,40 @@
TARGET = core
LIBS = cxx ipc heap core_printf process pager lock \
raw_signal raw_server
GEN_CORE_DIR = $(BASE_DIR)/src/core
SRC_CC = \
SRC_CC += \
main.cc \
ram_session_component.cc \
ram_session_support.cc \
rom_session_component.cc \
cpu_session_component.cc \
cpu_session_support.cc \
pd_session_component.cc \
io_mem_session_component.cc \
io_mem_session_support.cc \
thread.cc \
thread_start.cc \
thread_bootstrap.cc \
platform_thread.cc \
platform_pd.cc \
platform_services.cc \
platform.cc \
dataspace_component.cc \
rm_session_component.cc \
rm_session_support.cc \
io_port_session_component.cc \
irq_session_component.cc \
signal_session_component.cc \
signal_source_component.cc \
trace_session_component.cc \
core_rm_session.cc \
core_mem_alloc.cc \
dump_alloc.cc \
context_area.cc
INC_DIR = $(REP_DIR)/src/core/include \
LIBS += core_printf base-common
INC_DIR += $(REP_DIR)/src/core/include \
$(GEN_CORE_DIR)/include \
$(REP_DIR)/include/codezero/dummies
$(REP_DIR)/include/codezero/dummies \
$(BASE_DIR)/src/base/thread
vpath main.cc $(GEN_CORE_DIR)
vpath ram_session_component.cc $(GEN_CORE_DIR)
@@ -43,13 +44,12 @@ vpath pd_session_component.cc $(GEN_CORE_DIR)
vpath rm_session_component.cc $(GEN_CORE_DIR)
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
vpath io_mem_session_support.cc $(GEN_CORE_DIR)
vpath platform_services.cc $(GEN_CORE_DIR)
vpath signal_session_component.cc $(GEN_CORE_DIR)
vpath signal_source_component.cc $(GEN_CORE_DIR)
vpath trace_session_component.cc $(GEN_CORE_DIR)
vpath dataspace_component.cc $(GEN_CORE_DIR)
vpath core_mem_alloc.cc $(GEN_CORE_DIR)
vpath dump_alloc.cc $(GEN_CORE_DIR)
vpath context_area.cc $(GEN_CORE_DIR)
vpath %.cc $(REP_DIR)/src/core
vpath thread_bootstrap.cc $(BASE_DIR)/src/base/thread
vpath thread.cc $(BASE_DIR)/src/base/thread

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -27,10 +27,6 @@ enum { verbose_thread_start = true };
using namespace Genode;
void Thread_base::_init_platform_thread() { }
void Thread_base::_deinit_platform_thread() { }
@@ -43,13 +39,13 @@ void Thread_base::_deinit_platform_thread() { }
* \return new thread ID, or
* negative error code
*/
inline int create_thread(int space_no,
inline int create_thread(unsigned space_no,
void *sp, void *ip,
int pager_tid = 1)
{
using namespace Codezero;
struct task_ids ids = { 1, space_no, TASK_ID_INVALID };
struct task_ids ids = { 1U, space_no, TASK_ID_INVALID };
/* allocate new thread at the kernel */
unsigned long flags = THREAD_CREATE | TC_SHARE_SPACE | TC_SHARE_GROUP;
@@ -67,6 +63,7 @@ inline int create_thread(int space_no,
/* setup thread context */
struct exregs_data exregs;
memset(&exregs, 0, sizeof(exregs));
exregs_set_stack(&exregs, (unsigned long)sp);
exregs_set_pc (&exregs, (unsigned long)ip);
exregs_set_pager(&exregs, pager_tid);
@@ -103,13 +100,15 @@ void Thread_base::start()
/* create and start platform thread */
_tid.pt = new(platform()->core_mem_alloc()) Platform_thread(_context->name);
_tid.l4id = create_thread(1, &_context->stack[-4], (void *)&_thread_start);
if (_tid.l4id.tid < 0)
PERR("create_thread returned %d", _tid.l4id.tid);
_tid.l4id = create_thread(1, stack_top(), (void *)&_thread_start);
if (_tid.l4id < 0)
PERR("create_thread returned %d", _tid.l4id);
if (verbose_thread_start)
printf("core started local thread \"%s\" with ID %d\n",
_context->name, _tid.l4id.tid);
_context->name, _tid.l4id);
}

View File

@@ -1,67 +0,0 @@
/*
* \brief Platform-specific helper functions for the _main() function
* \author Norman Feske
* \date 2009-10-02
*/
/*
* Copyright (C) 2009-2012 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _PLATFORM___MAIN_HELPER_H_
#define _PLATFORM___MAIN_HELPER_H_
#include <base/printf.h>
/* make Codezero includes happy */
extern "C" char *strncpy(char *dest, const char *src, Genode::size_t n);
extern "C" void *memcpy(void *dest, const void *src, Genode::size_t n);
/* Codezero includes */
#include <codezero/syscalls.h>
/****************************
** Codezero libl4 support **
****************************/
/*
* Unfortunately, the function 'exregs_print_registers' in 'exregs.c' refers to
* 'memset'. Because we do not want to link core against a C library, we have to
* resolve this function here.
*/
extern "C" void *memset(void *s, int c, Genode::size_t n) __attribute__((weak));
extern "C" void *memset(void *s, int c, Genode::size_t n)
{
return Genode::memset(s, c, n);
}
/*
* Same problem as for 'memset'. The 'printf' symbol is referenced from
* 'mutex.c' and 'exregs.c' of Codezero's libl4.
*/
extern "C" int printf(const char *format, ...) __attribute__((weak));
extern "C" int printf(const char *format, ...)
{
va_list list;
va_start(list, format);
Genode::vprintf(format, list);
va_end(list);
return 0;
}
/**************************
** Startup-code helpers **
**************************/
static void main_thread_bootstrap()
{
Codezero::__l4_init();
}
#endif /* _PLATFORM___MAIN_HELPER_H_ */

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -10,6 +10,17 @@ DOWNLOAD_DIR = download
CONTRIB_DIR = contrib
FIASCO_ARCHIVE = 3rd_fiasco.tar.bz2
FIASCO_URI = http://downloads.sourceforge.net/project/genode/3rd/$(FIASCO_ARCHIVE)
PATCHES = $(shell find patches -name *.patch)
#
# Utility to check if a tool is installed
#
check_tool = $(if $(shell which $(1)),,$(error Need to have '$(1)' installed.))
$(call check_tool,wget)
$(call check_tool,patch)
$(call check_tool,tar)
$(call check_tool,byacc)
#
# Print help information by default
@@ -33,6 +44,8 @@ $(CONTRIB_DIR): $(DOWNLOAD_DIR)/$(FIASCO_ARCHIVE)
$(ECHO) "unpacking source code to '$(CONTRIB_DIR)/'"
$(VERBOSE)tar xjf $<
$(VERBOSE)mv 3rd $@
$(ECHO) "applying patches to '$@/'"
$(VERBOSE)for i in $(PATCHES); do patch -d $@ -p0 < $$i; done
$(VERBOSE)touch $@
prepare: $(CONTRIB_DIR)

View File

@@ -32,10 +32,10 @@ BID_COLORED_PHASES=y
# Compilers and Tools
#
BIDc_USE_SPECIAL_CC=y
HOST_CC="gcc -m32"
HOST_CXX="g++ -m32"
CC="$(SYSTEM_TARGET)gcc -m32"
CXX="$(SYSTEM_TARGET)g++ -m32"
HOST_CC="gcc"
HOST_CXX="g++"
CC="${SYSTEM_TARGET}gcc -m32"
CXX="${SYSTEM_TARGET}g++ -m32"
#
# Tools

View File

@@ -28,6 +28,7 @@ Tools
* Gawk
* Bison
* Byacc
* Python
@@ -43,6 +44,12 @@ command from within the 'base-fiasco' directory:
! make prepare
For the vesa driver on x86 the x86emu library is required and can be downloaded
and prepared by invoking the following command from within the 'libports'
directory:
! make prepare PKG=x86emu
This command will download a prepackaged version of the kernel tested
with Genode. The build process of the kernel is integrated with Genode's
build system. After creating a build directory using 'create_builddir'

View File

@@ -1,39 +0,0 @@
/*
* \brief Atomic operations for ARM
* \author Norman Feske
* \date 2007-04-28
*/
/*
* Copyright (C) 2007-2012 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#ifndef _INCLUDE__ARM__CPU__ATOMIC_H_
#define _INCLUDE__ARM__CPU__ATOMIC_H_
namespace Genode {
extern "C" long int
l4_atomic_cmpxchg(volatile long int*, long int, long int);
/**
* Atomic compare and exchange
*
* This function compares the value at dest with cmp_val.
* If both values are equal, dest is set to new_val. If
* both values are different, the value at dest remains
* unchanged.
*
* \return 1 if the value was successfully changed to new_val,
* 0 if cmp_val and the value at dest differ.
*/
inline int cmpxchg(volatile int *dest, int cmp_val, int new_val)
{
return l4_atomic_cmpxchg((volatile long int *)dest, cmp_val, new_val);
}
}
#endif /* _INCLUDE__ARM__CPU__ATOMIC_H_ */

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -24,7 +24,7 @@ namespace Genode {
{
private:
Native_lock _native_lock;
int volatile _lock;
public:

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -41,7 +41,8 @@ namespace Genode {
* Constructor
*/
Mapping(addr_t dst_addr, addr_t src_addr,
bool write_combined, unsigned l2size = L4_LOG2_PAGESIZE,
bool write_combined, bool io_mem,
unsigned l2size = L4_LOG2_PAGESIZE,
bool rw = true, bool grant = false)
:
_dst_addr(dst_addr),

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2008-2012 Genode Labs GmbH
* Copyright (C) 2008-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -14,23 +14,31 @@
#ifndef _INCLUDE__BASE__NATIVE_TYPES_H_
#define _INCLUDE__BASE__NATIVE_TYPES_H_
#include <base/native_capability.h>
#include <base/stdint.h>
namespace Fiasco {
#include <l4/sys/types.h>
/**
* Return invalid L4 thread ID
*/
inline l4_threadid_t invalid_l4_threadid_t() { return L4_INVALID_ID; }
}
namespace Genode {
typedef volatile int Native_lock;
class Platform_thread;
typedef Fiasco::l4_threadid_t Native_thread_id;
struct Cap_dst_policy
{
typedef Fiasco::l4_threadid_t Dst;
static bool valid(Dst id) { return !Fiasco::l4_is_invalid_id(id); }
static Dst invalid()
{
using namespace Fiasco;
return L4_INVALID_ID;
}
static void copy(void* dst, Native_capability_tpl<Cap_dst_policy>* src);
};
struct Native_thread
{
Native_thread_id l4id;
@@ -62,54 +70,26 @@ namespace Genode {
*/
typedef struct { } Native_utcb;
/*
* On Fiasco, the local_name member of a capability is global
* to the whole system. Therefore, capabilities are to be
* created at a central place that prevents id clashes.
*/
class Native_capability
typedef Native_capability_tpl<Cap_dst_policy> Native_capability;
typedef Fiasco::l4_threadid_t Native_connection_state;
struct Native_config
{
protected:
/**
* Thread-context area configuration.
*/
static constexpr addr_t context_area_virtual_base() {
return 0x40000000UL; }
static constexpr addr_t context_area_virtual_size() {
return 0x10000000UL; }
Fiasco::l4_threadid_t _tid;
long _local_name;
public:
/**
* Default constructor
*/
Native_capability()
: _tid(Fiasco::invalid_l4_threadid_t()), _local_name(0) { }
long local_name() const { return _local_name; }
Fiasco::l4_threadid_t dst() const { return _tid; }
bool valid() const { return l4_is_invalid_id(_tid) == 0; }
/*****************************************************
** Functions to be used by the Fiasco backend only **
*****************************************************/
/**
* Constructor
*
* This constructor can be called to create a Fiasco
* capability by hand. It must never be used from
* generic code!
*/
Native_capability(Fiasco::l4_threadid_t tid,
Fiasco::l4_umword_t local_name)
: _tid(tid), _local_name(local_name) { }
/**
* Access raw capability data
*/
Fiasco::l4_threadid_t tid() const { return _tid; }
/**
* Size of virtual address region holding the context of one thread
*/
static constexpr addr_t context_virtual_size() { return 0x00100000UL; }
};
typedef Fiasco::l4_threadid_t Native_connection_state;
struct Native_pd_args { };
}
#endif /* _INCLUDE__BASE__NATIVE_TYPES_H_ */

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2007-2012 Genode Labs GmbH
* Copyright (C) 2007-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -1,8 +0,0 @@
REQUIRES = fiasco arm
LIBS = cxx lock
SRC_S = crt0.s
SRC_CC = _main.cc
INC_DIR += $(REP_DIR)/src/platform
vpath crt0.s $(REP_DIR)/src/platform/arm
vpath _main.cc $(dir $(call select_from_repositories,src/platform/_main.cc))

View File

@@ -0,0 +1,31 @@
#
# \brief Portions of base library shared by core and non-core processes
# \author Norman Feske
# \date 2013-02-14
#
LIBS += cxx startup
SRC_CC += cap_copy.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc
SRC_CC += pager/pager.cc pager/common.cc
SRC_CC += avl_tree/avl_tree.cc
SRC_CC += allocator/slab.cc
SRC_CC += allocator/allocator_avl.cc
SRC_CC += heap/heap.cc heap/sliced_heap.cc
SRC_CC += console/console.cc
SRC_CC += child/child.cc
SRC_CC += process/process.cc
SRC_CC += elf/elf_binary.cc
SRC_CC += lock/lock.cc
SRC_CC += signal/signal.cc signal/common.cc
SRC_CC += server/server.cc server/common.cc
SRC_CC += thread/thread.cc thread/thread_bootstrap.cc thread/trace.cc
SRC_CC += thread/context_allocator.cc
INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
vpath cap_copy.cc $(BASE_DIR)/src/platform
vpath %.cc $(REP_DIR)/src/base
vpath %.cc $(BASE_DIR)/src/base

View File

@@ -0,0 +1,16 @@
#
# \brief Portions of base library that are exclusive to non-core processes
# \author Norman Feske
# \date 2013-02-14
#
LIBS += base-common
SRC_CC += console/log_console.cc
SRC_CC += env/env.cc env/context_area.cc env/reinitialize.cc
SRC_CC += thread/thread_start.cc
INC_DIR += $(BASE_DIR)/src/base/env
vpath %.cc $(REP_DIR)/src/base
vpath %.cc $(BASE_DIR)/src/base

View File

@@ -1,5 +0,0 @@
SRC_CC = core_printf.cc
LIBS = cxx console
INC_DIR += $(REP_DIR)/src/base/console
vpath core_printf.cc $(BASE_DIR)/src/base/console

View File

@@ -1,3 +0,0 @@
SRC_CC = ipc.cc pager.cc
vpath %.cc $(REP_DIR)/src/base/ipc

View File

@@ -1,3 +0,0 @@
SRC_CC = lock.cc
vpath lock.cc $(REP_DIR)/src/base/lock

View File

@@ -1,3 +0,0 @@
SRC_CC = pager.cc
vpath pager.cc $(REP_DIR)/src/base/pager

View File

@@ -1,8 +0,0 @@
REQUIRES = fiasco x86
LIBS = cxx lock
SRC_S = crt0.s
SRC_CC = _main.cc
INC_DIR += $(BASE_DIR)/src/platform $(REP_DIR)/src/platform
vpath crt0.s $(dir $(call select_from_repositories,src/platform/x86_32/crt0.s))
vpath _main.cc $(dir $(call select_from_repositories,src/platform/_main.cc))

View File

@@ -13,19 +13,12 @@
L4_BUILD_DIR ?= $(BUILD_BASE_DIR)/l4
L4_SRC_DIR ?= $(REP_DIR)/contrib/fiasco/snapshot
#
# L4/sys headers
#
L4_INC_DIR += $(L4_BUILD_DIR)/include \
$(L4_BUILD_DIR)/include/l4v2
#
# Startup code to be used when building a program
#
STARTUP_LIB ?= startup
PRG_LIBS += $(STARTUP_LIB)
clean_contrib:
$(VERBOSE)rm -rf $(BUILD_BASE_DIR)/l4

View File

@@ -1,50 +0,0 @@
#
# Specifics for Fiasco on ARM
#
# The following variables must be defined by a platform spec file:
#
# L4SYS_ARM_CPU - Platform identifiert used for constructing l4sys path
# names corresponding to the ARM platform. For example,
# specify 'arm_int' for the ARM integrator board.
# RAM_BASE - Start address of physical memory. If not specified,
# the start adress 0x0 is used.
#
SPECS += arm fiasco 32bit
#
# ARM-specific L4/sys headers
#
L4_INC_DIR += $(L4_BUILD_DIR)/include/arm/l4v2 \
$(L4_BUILD_DIR)/include/arm
#
# Support for Fiasco's ARM-specific extensions of L4
# and ARM-specific utility functions.
#
REP_INC_DIR += include/arm
#
# Defines for L4/sys headers
#
CC_OPT += -DSYSTEM_$(L4SYS_ARM_CPU)_l4v2
CC_OPT += -DCONFIG_L4_CALL_SYSCALLS -DL4API_l4v2 -DARCH_arm
CC_OPT += -msoft-float -fomit-frame-pointer
AS_OPT += -mfpu=softfpa
#
# Linker options that are specific for L4 on ARM
#
RAM_BASE ?= 0x0
LD_TEXT_ADDR ?= $(shell printf "0x%x" $$(($(RAM_BASE) + 0x00078000)))
CXX_LINK_OPT += -Wl,-Ttext=$(LINK_TEXT_ADDR)
CXX_LINK_OPT += -L$(L4_BUILD_DIR)/lib/$(L4SYS_ARM_CPU)/l4v2
EXT_OBJECTS += -ll4sys
#
# Also include less-specific configuration last
#
include $(call select_from_repositories,mk/spec-32bit.mk)
include $(call select_from_repositories,mk/spec-fiasco.mk)
INC_DIR += $(L4_INC_DIR)

View File

@@ -3,7 +3,7 @@
#
SPECS += x86_32 fiasco
SPECS += pci ps2 vesa
SPECS += pci ps2 vesa framebuffer
#
# x86-specific L4v2/sys headers

View File

@@ -0,0 +1,15 @@
--- fiasco/snapshot/kernel/fiasco/src/kern/kernel_uart.cpp 2008-07-30 13:19:01.000000000 +0200
+++ fiasco/snapshot/kernel/fiasco/src/kern/kernel_uart.cpp 2013-06-10 14:21:54.183996620 +0200
@@ -72,6 +72,12 @@
if ( (s = strstr(cmdline, " -comport "))
||(s = strstr(cmdline, " -comport=")))
p = strtoul(s + 10, 0, 0);
+ else
+ {
+ unsigned short bda_comports = (*((unsigned short *)0x410) >> 9) & 0x7;
+ if (bda_comports)
+ p = *((unsigned short *)0x400);
+ }
if ((s = strstr(cmdline, " -comirq=")))
i = strtoul(s + 9, 0, 0);

View File

@@ -0,0 +1,30 @@
diff -ur contrib.bak/fiasco/snapshot/l4/pkg/l4sys/include/ARCH-x86/kdebug.h contrib/fiasco/snapshot/l4/pkg/l4sys/include/ARCH-x86/kdebug.h
--- fiasco/snapshot/l4/pkg/l4sys/include/ARCH-x86/kdebug.h 2008-07-30 13:19:01.000000000 +0200
+++ fiasco/snapshot/l4/pkg/l4sys/include/ARCH-x86/kdebug.h 2013-09-23 09:02:29.875532260 +0200
@@ -21,7 +21,7 @@
asm(\
"int $3 \n\t"\
"jmp 1f \n\t"\
- ".ascii \""text "\"\n\t"\
+ ".ascii \"" text "\"\n\t"\
"1: \n\t"\
)
@@ -35,7 +35,7 @@
#define asm_enter_kdebug(text) \
"int $3 \n\t"\
"jmp 1f \n\t"\
- ".ascii \""text "\"\n\t"\
+ ".ascii \"" text "\"\n\t"\
"1: \n\t"
/**
@@ -50,7 +50,7 @@
"int $3 \n\t"\
"nop \n\t"\
"jmp 1f \n\t"\
- ".ascii \""text "\"\n\t"\
+ ".ascii \"" text "\"\n\t"\
"1: \n\t"\
)

View File

@@ -8,6 +8,15 @@
#
##
# Install files needed to boot via PXE
#
proc install_pxe_bootloader_to_run_dir { } {
exec cp [genode_dir]/tool/boot/pulsar [run_dir]/boot/pulsar
exec cp [genode_dir]/tool/boot/bender [run_dir]/boot/bender
}
##
# Read the location of the Fiasco user directory from 'etc/fiasco.conf'
#
@@ -76,8 +85,12 @@ proc bin_dir { } {
exit 1
}
set fiasco_serial_esc_arg "-serial_esc "
proc build_boot_image {binaries} {
global fiasco_serial_esc_arg
#
# Collect contents of the ISO image
#
@@ -108,7 +121,7 @@ proc build_boot_image {binaries} {
puts $fh "default 0"
puts $fh "\ntitle Genode on L4/Fiasco"
puts $fh " kernel /fiasco/bootstrap -serial -modaddr=0x02000000"
puts $fh " module /fiasco/fiasco -serial -serial_esc -jdb_cmd=JH"
puts $fh " module /fiasco/fiasco -serial -jdb_cmd=JH $fiasco_serial_esc_arg"
puts $fh " module /fiasco/sigma0"
puts $fh " module /genode/core"
puts $fh " module /genode/config"
@@ -118,10 +131,69 @@ proc build_boot_image {binaries} {
puts $fh " vbeset 0x117 506070"
close $fh
#
# Install PXE bootloader pulsar
#
install_pxe_bootloader_to_run_dir
create_iso_image_from_run_dir
#
# Generate pulsar config file
#
set fh [open "[run_dir]/config-52-54-00-12-34-56" "WRONLY CREAT TRUNC"]
puts $fh " exec /boot/bender"
puts $fh " load /fiasco/bootstrap -serial -modaddr=0x02000000"
puts $fh " load /fiasco/fiasco -serial -serial_esc -jdb_cmd=JH"
puts $fh " load /fiasco/sigma0"
puts $fh " load /genode/core"
puts $fh " load /genode/config"
foreach binary $binaries {
if {$binary != "core"} {
puts $fh " load /genode/$binary" } }
close $fh
#
# Generate pulsar config file pointing to the config file above.
#
if {[info exists ::env(PXE_TFTP_DIR_BASE)] && [info exists ::env(PXE_TFTP_DIR_OFFSET)]} {
exec ln -nfs "[pwd]" "$::env(PXE_TFTP_DIR_BASE)$::env(PXE_TFTP_DIR_OFFSET)"
set tftp_base ""
if {[get_cmd_switch --tftp-absolute]} {
set tftp_base $::env(PXE_TFTP_DIR_BASE)
}
set fh [open "$::env(PXE_TFTP_DIR_BASE)$::env(PXE_TFTP_DIR_OFFSET)/config-00-00-00-00-00-00" "WRONLY CREAT TRUNC"]
puts $fh " root $tftp_base$::env(PXE_TFTP_DIR_OFFSET)/[run_dir]"
puts $fh " config config-52-54-00-12-34-56"
close $fh
}
}
proc run_genode_until {{wait_for_re forever} {timeout_value 0}} {
spawn_qemu $wait_for_re $timeout_value }
proc run_genode_until {{wait_for_re forever} {timeout_value 0} {running_spawn_id -1}} {
#
# If a running_spawn_id is specified, wait for the expected output
#
if {$running_spawn_id != -1} {
wait_for_output $wait_for_re $timeout_value $running_spawn_id
return
}
#
# Try to use one of the supported backends for running the scripts
#
if {[is_amt_available]} {
spawn_amt $wait_for_re $timeout_value
return
}
if {[is_qemu_available]} {
spawn_qemu $wait_for_re $timeout_value
return
}
global run_target
puts stderr "Error: Can't execute automatically on target '$run_target'"
exit -1
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -35,7 +35,7 @@ void Ipc_ostream::_send()
_snd_msg->send_dope = L4_IPC_DOPE((_write_offset + sizeof(umword_t) - 1)>>2, 0);
l4_msgdope_t result;
l4_ipc_send(_dst.tid(), _snd_msg->addr(), _dst.local_name(),
l4_ipc_send(_dst.dst(), _snd_msg->addr(), _dst.local_name(),
*reinterpret_cast<l4_umword_t *>(&_snd_msg->buf[sizeof(umword_t)]),
L4_IPC_NEVER, &result);
@@ -120,9 +120,9 @@ void Ipc_client::_call()
_snd_msg->send_dope = L4_IPC_DOPE((_write_offset + 2*sizeof(umword_t) - 1)>>2, 0);
_rcv_msg->size_dope = L4_IPC_DOPE(_rcv_msg->size()>>2, 0);
l4_ipc_call(_dst.tid(),
l4_ipc_call(Ipc_ostream::_dst.dst(),
_write_offset <= 2*sizeof(umword_t) ? L4_IPC_SHORT_MSG : _snd_msg->addr(),
_dst.local_name(),
Ipc_ostream::_dst.local_name(),
*reinterpret_cast<l4_umword_t *>(&_snd_msg->buf[sizeof(umword_t)]),
_rcv_msg->addr(),
reinterpret_cast<l4_umword_t *>(&rec_badge),
@@ -152,7 +152,7 @@ void Ipc_client::_call()
Ipc_client::Ipc_client(Native_capability const &srv, Msgbuf_base *snd_msg,
Msgbuf_base *rcv_msg):
Msgbuf_base *rcv_msg, unsigned short):
Ipc_istream(rcv_msg), Ipc_ostream(srv, snd_msg), _result(0)
{ }
@@ -180,7 +180,7 @@ void Ipc_server::_wait()
try { Ipc_istream::_wait(); } catch (Blocking_canceled) { }
/* define destination of next reply */
_dst = Native_capability(_rcv_cs, badge());
Ipc_ostream::_dst = Native_capability(_rcv_cs, badge());
_prepare_next_reply_wait();
}
@@ -193,7 +193,8 @@ void Ipc_server::_reply()
_snd_msg->send_dope = L4_IPC_DOPE((_write_offset + sizeof(umword_t) - 1)>>2, 0);
l4_msgdope_t result;
l4_ipc_send(_dst.tid(), _snd_msg->addr(), _dst.local_name(),
l4_ipc_send(Ipc_ostream::_dst.dst(), _snd_msg->addr(),
Ipc_ostream::_dst.local_name(),
*reinterpret_cast<l4_umword_t *>(&_snd_msg->buf[sizeof(umword_t)]),
L4_IPC_SEND_TIMEOUT_0, &result);
@@ -221,9 +222,9 @@ void Ipc_server::_reply_wait()
* an integer as RPC result.
*/
l4_ipc_reply_and_wait(
_dst.tid(),
Ipc_ostream::_dst.dst(),
_write_offset <= 2*sizeof(umword_t) ? L4_IPC_SHORT_MSG : _snd_msg->addr(),
_dst.local_name(),
Ipc_ostream::_dst.local_name(),
*reinterpret_cast<l4_umword_t *>(&_snd_msg->buf[sizeof(umword_t)]),
&_rcv_cs, _rcv_msg->addr(),
reinterpret_cast<l4_umword_t *>(&_rcv_msg->buf[0]),
@@ -247,7 +248,7 @@ void Ipc_server::_reply_wait()
} else _wait();
/* define destination of next reply */
_dst = Native_capability(_rcv_cs, badge());
Ipc_ostream::_dst = Native_capability(_rcv_cs, badge());
_prepare_next_reply_wait();
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2007-2012 Genode Labs GmbH
* Copyright (C) 2007-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -25,7 +25,7 @@ using namespace Genode;
Cancelable_lock::Cancelable_lock(Cancelable_lock::State initial)
: _native_lock(UNLOCKED)
: _lock(UNLOCKED)
{
if (initial == LOCKED)
lock();
@@ -38,7 +38,7 @@ void Cancelable_lock::lock()
* XXX: How to notice cancel-blocking signals issued when being outside the
* 'l4_ipc_sleep' system call?
*/
while (!Genode::cmpxchg(&_native_lock, UNLOCKED, LOCKED))
while (!Genode::cmpxchg(&_lock, UNLOCKED, LOCKED))
if (Fiasco::l4_ipc_sleep(Fiasco::l4_ipc_timeout(0, 0, 500, 0)) != L4_IPC_RETIMEOUT)
throw Genode::Blocking_canceled();
}
@@ -46,5 +46,5 @@ void Cancelable_lock::lock()
void Cancelable_lock::unlock()
{
_native_lock = UNLOCKED;
_lock = UNLOCKED;
}

View File

@@ -0,0 +1,34 @@
/*
* \brief L4/Fiasco-specific helper functions for the Lock implementation
* \author Norman Feske
* \date 2012-03-01
*
* L4/Fiasco is the only kernel that does not rely on Genode's generic lock
* implementation. The custom implementation contained in 'lock.cc' does not
* need 'lock_helper.h'. This file exists for the sole reason to make the
* L4/Fiasco version of 'lock_helper' usable from the DDE Kit's spin lock.
* Otherwise, we would need to add a special case for L4/Fiasco to the DDE Kit
* library.
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* L4/Fiasco includes */
namespace Fiasco {
#include <l4/sys/ipc.h>
}
/**
* Yield CPU time
*/
static inline void thread_yield()
{
Fiasco::l4_ipc_sleep(Fiasco::l4_ipc_timeout(0, 0, 500, 0));
}

View File

@@ -8,7 +8,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -34,19 +34,26 @@ void Pager_activation_base::entry()
_cap = pager;
_cap_valid.unlock();
pager.wait_for_fault();
Pager_object * obj;
bool reply = false;
while (1) {
if (reply)
pager.reply_and_wait_for_fault();
else
pager.wait_for_fault();
/* lookup referenced object */
Pager_object *obj = _ep ? _ep->obj_by_id(pager.badge()) : 0;
Object_pool<Pager_object>::Guard _obj(_ep ? _ep->lookup_and_lock(pager.badge()) : 0);
obj = _obj;
reply = false;
/* handle request */
if (obj) {
if (obj->pager(pager))
/* something strange occured - leave thread in pagefault */
pager.wait_for_fault();
else
pager.reply_and_wait_for_fault();
reply = !obj->pager(pager);
/* something strange occurred - leave thread in pagefault */
continue;
} else {
/* prevent threads outside of core to mess with our wake-up interface */
@@ -79,7 +86,6 @@ void Pager_activation_base::entry()
pager.set_reply_dst(obj->cap());
pager.acknowledge_wakeup();
}
pager.wait_for_fault();
}
};
}
@@ -96,7 +102,7 @@ Pager_entrypoint::Pager_entrypoint(Cap_session *, Pager_activation_base *a)
void Pager_entrypoint::dissolve(Pager_object *obj)
{
remove(obj);
remove_locked(obj);
}
@@ -105,8 +111,7 @@ Pager_capability Pager_entrypoint::manage(Pager_object *obj)
/* return invalid capability if no activation is present */
if (!_activation) return Pager_capability();
Native_thread_id tid = _activation->cap().tid();
Native_capability cap(_activation->cap().tid(), obj->badge());
Native_capability cap(_activation->cap().dst(), obj->badge());
/* add server object to object pool */
obj->cap(cap);

View File

@@ -0,0 +1,41 @@
/*
* \brief Platform specific thread initialization
* \author Martin Stein
* \date 2014-01-06
*/
/*
* Copyright (C) 2014 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/thread.h>
#include <base/env.h>
using namespace Genode;
/*****************************
** Startup library support **
*****************************/
void prepare_init_main_thread() { }
void prepare_reinit_main_thread() { }
/*****************
** Thread_base **
*****************/
void Thread_base::_thread_bootstrap() { }
void Thread_base::_init_platform_thread(Type type)
{
if (type == NORMAL) { return; }
_thread_cap = Genode::env()->parent()->main_thread_cap();
}

View File

@@ -1,24 +0,0 @@
/*
* \brief Platform support specific to ARM
* \author Norman Feske
* \date 2007-10-13
*/
/*
* Copyright (C) 2007-2012 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
#include "platform.h"
using namespace Genode;
void Platform::_setup_io_port_alloc()
{
/*
* This is just a dummy init function for the I/O port allocator.
* ARM does not I/O port support.
*/
}

View File

@@ -1,7 +0,0 @@
include $(PRG_DIR)/../target.inc
REQUIRES += arm
SRC_CC += platform_arm.cc
vpath io_port_session_component.cc $(GEN_CORE_DIR)/arm

View File

@@ -0,0 +1,28 @@
/*
* \brief Platform-specific parts of cores CPU-service
* \author Martin Stein
* \date 2012-04-17
*/
/*
* Copyright (C) 2009-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <base/printf.h>
/* Core includes */
#include <cpu_session_component.h>
using namespace Genode;
Ram_dataspace_capability Cpu_session_component::utcb(Thread_capability thread_cap)
{
PERR("%s: Not implemented", __PRETTY_FUNCTION__);
return Ram_dataspace_capability();
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2010-2012 Genode Labs GmbH
* Copyright (C) 2010-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -70,6 +70,17 @@ namespace Genode {
}
return true;
}
/**
* Unmap pages locally within core
*
* \param virt core-local address
* \param num_pages number of pages to unmap
*/
inline void unmap_local(addr_t virt, size_t num_pages)
{
PERR("unmap_local() called - not implemented yet");
}
}
#endif /* _CORE__INCLUDE__MAP_LOCAL_H_ */

View File

@@ -6,7 +6,7 @@
*/
/*
* Copyright (C) 2007-2012 Genode Labs GmbH
* Copyright (C) 2007-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -35,6 +35,7 @@ namespace Genode {
*/
typedef Synchronized_range_allocator<Allocator_avl> Phys_allocator;
char _core_label[1]; /* to satisfy _core_pd */
Platform_pd *_core_pd; /* core protection domain object */
Phys_allocator _ram_alloc; /* RAM allocator */
Phys_allocator _io_mem_alloc; /* MMIO allocator */

View File

@@ -8,7 +8,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -18,6 +18,7 @@
#define _CORE__INCLUDE__PLATFORM_PD_H_
#include <platform_thread.h>
#include <address_space.h>
namespace Fiasco {
#include <l4/sys/types.h>
@@ -26,7 +27,7 @@ namespace Fiasco {
namespace Genode {
class Platform_thread;
class Platform_pd
class Platform_pd : public Address_space
{
private:
@@ -141,7 +142,8 @@ namespace Genode {
/**
* Constructor
*/
Platform_pd(signed pd_id = PD_INVALID, bool create = true);
Platform_pd(char const *, signed pd_id = PD_INVALID,
bool create = true);
/**
* Destructor
@@ -176,6 +178,17 @@ namespace Genode {
int assign_parent(Native_capability parent) { return 0; }
int pd_id() const { return _pd_id; }
/*****************************
** Address-space interface **
*****************************/
/*
* On L4/Fiasco, we don't use directed unmap but rely on the
* in-kernel mapping database. See 'rm_session_support.cc'.
*/
void flush(addr_t, size_t) { PDBG("not implemented"); }
};
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -21,6 +21,7 @@
/* core includes */
#include <platform_pd.h>
#include <address_space.h>
/* Fiasco includes */
namespace Fiasco {
@@ -53,7 +54,7 @@ namespace Genode {
* Constructor
*/
Platform_thread(const char *name = 0, unsigned priority = 0,
int thread_id = THREAD_INVALID);
addr_t utcb = 0, int thread_id = THREAD_INVALID);
/**
* Destructor
@@ -102,14 +103,35 @@ namespace Genode {
void unbind();
/**
* Request thread state
* Override thread state with 's'
*
* \param state_dst destination state buffer
*
* \retval 0 successful
* \retval -1 thread state not accessible
* \throw Cpu_session::State_access_failed
*/
int state(Genode::Thread_state *state_dst);
void state(Thread_state s);
/**
* Read thread state
*
* \throw Cpu_session::State_access_failed
*/
Thread_state state();
/**
* Set the executing CPU for this thread
*
* SMP is not supported on L4/Fiasco.
*/
void affinity(Affinity::Location) { }
/**
* Request the affinity of this thread
*/
Affinity::Location affinity() { return Affinity::Location(); }
/**
* Return the address space to which the thread is bound
*/
Weak_ptr<Address_space> address_space();
/************************

View File

@@ -7,7 +7,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -46,7 +46,7 @@ addr_t Io_mem_session_component::_map_local(addr_t base, size_t size)
/* find appropriate region for mapping */
void *local_base = 0;
if (!platform()->region_alloc()->alloc_aligned(size, &local_base, alignment))
if (platform()->region_alloc()->alloc_aligned(size, &local_base, alignment).is_error())
return 0;
/* call sigma0 for I/O region */

View File

@@ -7,7 +7,7 @@
*/
/*
* Copyright (C) 2007-2012 Genode Labs GmbH
* Copyright (C) 2007-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -99,7 +99,7 @@ Irq_session_component::Irq_session_component(Cap_session *cap_session,
long irq_number = Arg_string::find_arg(args, "irq_number").long_value(-1);
if (irq_number == -1 || !irq_alloc ||
irq_alloc->alloc_addr(1, irq_number) != Range_allocator::ALLOC_OK) {
irq_alloc->alloc_addr(1, irq_number).is_error()) {
PERR("Unavailable IRQ %lx requested", irq_number);
throw Root::Invalid_args();
}

View File

@@ -5,7 +5,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -130,7 +130,7 @@ static void _core_pager_loop()
}
Platform::Sigma0::Sigma0() : Pager_object(0)
Platform::Sigma0::Sigma0() : Pager_object(0, Affinity::Location())
{
cap(reinterpret_cap_cast<Cpu_thread>(Native_capability(Fiasco::sigma0_threadid, 0)));
}
@@ -145,7 +145,7 @@ Platform::Sigma0 *Platform::sigma0()
Platform::Core_pager::Core_pager(Platform_pd *core_pd)
:
Platform_thread("core.pager"), Pager_object(0)
Platform_thread("core.pager"), Pager_object(0, Affinity::Location())
{
Platform_thread::pager(sigma0());
@@ -187,6 +187,14 @@ struct Region
Region() : start(0), end(0) { }
Region(addr_t s, addr_t e) : start(s), end(e) { }
/**
* Returns true if the specified range intersects with the region
*/
bool intersects(addr_t base, size_t size) const
{
return (((base + size) > start) && (base < end));
}
};
@@ -296,8 +304,11 @@ void Platform::_setup_mem_alloc()
}
region.start = addr; region.end = addr + size;
add_region(region, _ram_alloc);
add_region(region, _core_address_ranges());
if (!region.intersects(Native_config::context_area_virtual_base(),
Native_config::context_area_virtual_size())) {
add_region(region, _ram_alloc);
add_region(region, _core_address_ranges());
}
remove_region(region, _io_mem_alloc);
remove_region(region, _region_alloc);
}
@@ -391,8 +402,8 @@ void Platform::_setup_basics()
_region_alloc.add_range(_vm_start, _vm_size);
/* preserve context area in core's virtual address space */
_region_alloc.remove_range(Thread_base::CONTEXT_AREA_VIRTUAL_BASE,
Thread_base::CONTEXT_AREA_VIRTUAL_SIZE);
_region_alloc.remove_range(Native_config::context_area_virtual_base(),
Native_config::context_area_virtual_size());
/* I/O memory could be the whole user address space */
/* FIXME if the kernel helps to find out max address - use info here */
@@ -478,7 +489,8 @@ Platform::Platform() :
Platform_pd::init();
/* setup pd object for core pd */
_core_pd = new(core_mem_alloc()) Platform_pd(myself.id.task, false);
_core_label[0] = 0;
_core_pd = new(core_mem_alloc()) Platform_pd(_core_label, myself.id.task, false);
/*
* We setup the thread object for thread0 in core pd using a special

View File

@@ -12,7 +12,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -236,7 +236,7 @@ void Platform_pd::unbind_thread(Platform_thread *thread)
}
Platform_pd::Platform_pd(signed pd_id, bool create)
Platform_pd::Platform_pd(char const *, signed pd_id, bool create)
{
/* check correct init */
if (!_init)

View File

@@ -8,7 +8,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.
@@ -17,6 +17,7 @@
/* Genode includes */
#include <base/printf.h>
#include <util/string.h>
#include <cpu_session/cpu_session.h>
/* core includes */
#include <platform_thread.h>
@@ -37,7 +38,7 @@ int Platform_thread::start(void *ip, void *sp)
{
l4_umword_t dummy, old_eflags;
l4_threadid_t thread = _l4_thread_id;
l4_threadid_t pager = _pager ? _pager->cap().tid() : L4_INVALID_ID;
l4_threadid_t pager = _pager ? _pager->cap().dst() : L4_INVALID_ID;
l4_threadid_t preempter = L4_INVALID_ID;
l4_threadid_t cap_handler = L4_INVALID_ID;
@@ -101,8 +102,17 @@ void Platform_thread::unbind()
}
int Platform_thread::state(Thread_state *state_dst)
void Platform_thread::state(Thread_state s)
{
PDBG("Not implemented");
throw Cpu_session::State_access_failed();
}
Thread_state Platform_thread::state()
{
Thread_state s;
l4_umword_t old_eflags, ip, sp;
l4_threadid_t thread = _l4_thread_id;
l4_threadid_t pager = L4_INVALID_ID;
@@ -117,10 +127,10 @@ int Platform_thread::state(Thread_state *state_dst)
PWRN("old eflags == ~0 on ex_regs %x.%x", (int)thread.id.task, (int)thread.id.lthread);
/* fill thread state structure */
state_dst->ip = ip;
state_dst->sp = sp;
s.ip = ip;
s.sp = sp;
return 0;
return s;
}
@@ -135,7 +145,13 @@ void Platform_thread::cancel_blocking()
}
Platform_thread::Platform_thread(const char *name, unsigned, int thread_id)
Weak_ptr<Address_space> Platform_thread::address_space()
{
return _platform_pd->Address_space::weak_ptr();
}
Platform_thread::Platform_thread(const char *name, unsigned, addr_t, int thread_id)
: _thread_id(thread_id), _l4_thread_id(L4_INVALID_ID), _pager(0)
{
strncpy(_name, name, sizeof(_name));

View File

@@ -8,7 +8,7 @@
*/
/*
* Copyright (C) 2006-2012 Genode Labs GmbH
* Copyright (C) 2006-2013 Genode Labs GmbH
*
* This file is part of the Genode OS framework, which is distributed
* under the terms of the GNU General Public License version 2.

Some files were not shown because too many files have changed in this diff Show More