2007-06-26: June Snapshot ************** ********** * CONTENT ********** ************** 1. Build environment 2. Dice 3. Fiasco 4. Added/Removed L4 Packages 5. Changes in L4 Packages 1. bootstrap 2. cxx 3. dde 4. dde_linux 5. dm_phys 6. events 7. generic_io 8. generic_ts 9. input 10. ipcmon 11. l4env 12. l4io 13. l4rm 14. l4sys 15. l4util 16. libc_backends_l4env 17. libsigma0 18. linux-24-headers 19. loader 20. lxfuxlibc 21. names 22. omega0 23. ore 24. roottask 25. rtc 26. sigma0 27. simple_ts 28. uclibc 29. uclibc++ ************** ********** * 1. BUILD ENVIRONMENT ********** ************** * [Feature]: * Added ctags and etags commands, and a 'make *tags' command for l4/pkg * [Bugfix]: * Fixed DEFAULT_RELOC{_...} code in BID. Now DEFAULT_RELOC, DEFAULT_RELOC_ and DEFAULT_RELOC_ may be used in the Makefiles. In every case the value of RAM_BASE is added to that value to calculate the particular link address. To access the link address in your own Makefile, you have to use $(call default_reloc,). * Fixed MODE, differentiates between linux and host mode. * Added sanity check for proper OBJ_DIR and source dir. * [Changed]: * Added support for STATIC files in the pkg dir of the build directory. ************** ********** * 2. DICE ********** ************** * [Feature]: * Only set receive window in message buffer to environment's receive flexpage if we really received a flexpage. * Only set exception in environment if we received an exception (this might require to reset the environment in case of error in calling code). * Add [default_timeout] attribute: if attribute is set, IPC timeout is set using constant, default timeout values. Otherwise the environment's timeout member is used. * Add simplistic exception support for C back-end. * Add -fsyscall= option to allow optimization of kernel entry. * [Bugfix]: * Send two variable sized arrays into one direction. * Configure is more strict if bison/flex are missing. * Bootstrap version checks are more accurate now. * Building user's manual in builddir != srcdir. * Build fixes for Ubuntu. * Really scrub dice dir on 'make cleanall' (fixes some subsequent build errors experienced by some users). * No dependency on a configured L4 object-dir anymore. * C++ back-end fixes. * -s option did not generate *-sys.h[h] file. * Sending array of flexpages works for L4 V2. * Signdness issues in generated code. * [Changed]: * Removed the obsolete developer's manual. * Removed --with-l4dir configure option. * Removed the Common Data Representation back-end. ************** ********** * 3. FIASCO ********** ************** * [Feature]: * Added memory resource limits to Fiasco. With these resource limits the kernel-memory usage of a set of tasks can be limited. The limits can be defined on task_new system calls. There are three possible modes for the limits of a new task: 1. The new task shares the quota with the creator (quota descriptor = 0). 2. The new task shares the quota with another task T (where the creator must be the chief of T). 3. The new task gets a new quota, which is accounted to the quota of a reference task T (where the creator must be the chief of T). * Experimental fast user-level semaphore implementation: now the semaphore is correctly working with timeouts and thread destruction (as long as no thread currently within the critical section is killed). * Added horizontal scroll feature to trace buffer view of kernel debugger (h and l keys). * [Changed]: * Improved memory efficiency of Fiasco. * Moved from 64bit UIDs to 32bit UIDs for all architectures, no longer containing chief, site and nest IDs. * All architectures use the same ABI. * Improved UTCB support. * IPC: Extra argument: the message tag describes additional characteristics of the IPC (e.g. UTCB transfer sizes, FPU transfer). The kernel will also flag kernel generated IPC messages appropriately (page-fault, IO-page-fault, exception etc.). * The UTCB layout has been changed. * Changed timeout format to X.2 format. * Added support IOPL 3 option in fiasco config: running with IOPL3 is now explicitely configured and may completely disabled IOPL3 operations in user land (like cli/sti). * New interrupt handling doing low-level interrupt handling in the kernel. ************** ********** * 4. ADDED/REMOVED L4 PACKAGES ********** ************** * Core packages: * Added: - dde - dde_linux26 - linux-26-headers - task * Removed: - exec * EMSCB packages: * Removed: - dde_linux26 - linux-26-headers ************** ********** * 5. CHANGES IN L4 PACKAGES ********** ************** Applies to all packages: * Adapted to ABI changes of Fiasco: * l4_threadid_t change to 32bit * Change of timeout format * Interrupt handling Note: * An IPC timeout pair can be specified with l4_ipc_timeout(snd_man, snd_exp, rcv_man, rcv_exp). * Additionally, the function l4util_microsecs2l4to returns an l4_timeout_s which is a single timeout, two of these timeouts can be combined by l4_timeout(snd, rcv) to an l4_timeout_t (for IPC). ************** * 1. bootstrap ************** * [Feature]: * Added -modaddr command line switch to set modaddr directly in bootstrap which now relocates the modules. * [Changed]: * Code cleanups ************** * 2. cxx ************** * [Bugfix]: * Count free objects in partial and empty slabs. ************** * 3. dde ************** * [Feature]: * First release of the new DDE including * DDEKit - a construction kit for device driver environments * DDE_Linux 2.6 - a new implementation of DDE2.6 using DDEKit ************** * 4. dde_linux ************** * [Changed]: * Updated to Linux 2.4.34.4 so that it compiles with GCC4. * Adapted to new Fiasco timeout handling. * Added driver for es1370 (QEMU emulates this card via "-soundhw es1370"). * Removed non-omega0 interrupt mode from dde_linux (Linux 2.4) new signature: int l4dde_irq_init(void). ************** * 5. dm_phys ************** * [Bugfix]: * Always round memory regions to complete pages. * Fixed zero page bug. * [Changed]: * Use memory descriptors on all architectures. ************** * 6. events ************** * [Bugfix]: * Solved malloc-backend problem. ************** * 7. generic_io ************** * [Bugfix]: * Dice related compile fix. * [Changed]: * l4io_request_mem_region(): * No longer returns offset value. * Supports (and uses by default) L4_PAGESIZE mappings. ************** * 8. generic_ts ************** * [Changed]: * Disabled some functions based on the chief ID (superseeded by the new task library). * Added new doxygen configuration file. ************** * 9. input ************** * [Bugfix]: * [FEATURE]: Improved support for USB keyboards in PS/2 legacy mode with buggy BIOSes. It doesn't work with USB mice! * [Changed]: * libinput now depends on l4io. * Unified native and UX version of libinput - libinput detects on initialization if running under Fiasco-UX - libinput-ux.a no longer exists - please adapt your packages ************** * 10. ipcmon ************** * [Feature]: * Introduce -r switch to express that all tasks are allowed to talk to roottask. This is needed: - for the tasks to find names - if roottask is not the chief of all tasks. ************** * 11. l4env ************** * [Changed]: * Refactoring: env.h is now architecture independent. * Check for appropriate Fiasco ABI version on startup. ************** * 12. l4io ************** * [Feature]: * Added "--nomtrr" command line switch. This switch disables MTRR programming which needs IOPL3. * Enhanced Fiasco-UX support: - If running under UX, l4io now parses the virtual H/W descriptors and announces them to the res module. - l4io_request_mem_region() can now be used under UX and native Fiasco. * Added support for I/O port fpages: - l4io_request/release_region() changed a bit. - generic_io.idl uses an fpage array on request - L4io requests port ranges on client request - currently from roottask, which should be sigma0. - Simple I/O port test program. * [Changed]: * Updated to Linux 2.4.34.4, which is compatible to GCC4. * Adapted to new l4sys interface (caching/buffering flags in flex page). * Removed MTRR support - finally l4io (and the rest of the userland) works with IOPL0. * Removed Ancient jiffies thread implementation. * Adaption to generic_io changes. * MMIO: * Requests MMIO regions from its pager (i.e., sigma0 because of roottask limitations) in compile-time option granularity (default is L4_PAGESIZE) * Does no longer request new MMIO region mappings from its pager for cacheable regions. * If MMIO regions share a page (some weird on-board controllers do that!), l4io no longer requests multiple mappings. Expect further changes here in the context of "untrusted device drivers". * Completely removed PIC programming from omega0 and l4io. The applied changes depend on a recent Fiasco version (merged irq_ack_devel branch). * l4io: - Removed non-Omega0 interrupt mode. Command line switches "--noirq", "--nosfn" and "--omega0" are no longer supported. - Removed usage of CLI/STI from PCI code - the only module depending on IOPL 3 is now MTRR programming. * omega0 - Added file headers. - Removed pic.c/pic.h - use irq-devel branch of Fiasco. Fiasco supports IRQ handling completely without touching the PIC in user land: * L4V2 protocol: - Receive from IRQ ID associates caller with this IRQ. - Receive from NIL ID with L4_IPC_RECV_TIMEOUT_0 disassociates the caller from all interrupts. * Recent Fiasco extended protocol: - Send to IRQ ID with dw0==0 enables (unmasks) the IRQ. - Send to IRQ ID with dw0==1 disassociates caller from this IRQ. Currently missing is an explicit "mask IRQ" function that is IMO not needed. Fiasco masks the IRQ on occurence and it is only unmasked on explicit request. * Removed non-omega0 interrupt mode from dde_linux (Linux 2.4) new signature: int l4dde_irq_init(void) * Adapted some users of dde_linux. ************** * 13. l4rm ************** * [Bugfix]: * Initialize dice-environment for every call to reset error conditions. * [Changed]: * Don't use some hard-coded value for vm-end, use the KIP! ************** * 14. l4sys ************** * [Feature]: * Provided a data structure for the user level part of the fast user-level semaphore. * [Bugfix]: * Fixed PIC call IPC binding. * Don't let gcc cache l4_myself and l4_nchief results. * [Changed]: * Adapted to new Fiasco's timeout handling. * Adapted to new Fiasco's IPC format (message tag). * Adapted to Fiasco ABI changes: - Restructured flex-page type definitions and added a true cache field to the memory flex page (no longer add bits to the raw values). - Removed a lot of code duplication among the architectures. - Proper interface to the 'Buffered' (IA32 write-combined) memory attributes supported by Fiasco. It is now no longer neccessary to use MTRRs for having non-cached but buffered device access to MMIO. However, the Fiasco kernel only supports buffered memory on IA32 PIII+ CPUs that have the page-attribute table feature. MTRRs are available from P6 on. * Added member to set the number of vital memory descriptors in the KIP. * Added bindings for Fiasco user-level lock and semaphore. * Cleaned up UTCB access functions. ************** * 15. l4util ************** * [Changed]: * Changes regarding the use of memory descriptors. * Removed wait_queue implementation that uses cli/sti. * Removed l4util_l4to2micros prototype. ************** * 16. libc_backends_l4env ************** * [Bugfix]: * Fixed alignment of the heap and allocation size for buddy allocations (required by buddy resp. slab impl.). * Slab part of buddy_slab_mem fixed. Before, it did only claim the first page of a grow set for its own which resulted in heap corruptions. ************** * 17. libsigma0 ************** * [Changed]: * Added #define for SIGMA0 thread ID. ************** * 18. linux-24-headers ************** * [Changed]: * Updated to Linux 2.4.34.4, which is compatible to GCC4. ************** * 19. loader ************** * [Feature]: * Added allow_bios and allow_vga options: note that l4linux now requires the allow_vga option when used with the VGA console! * Removed dummy page in loader as it was a communication channel for programs. * [Changed]: * Changes regarding memory descriptors. * Made pager cope with recent s0 requests. * Made pager cope with IPC types it doesn't know. * Added compile-time conditional tasklib support. * Removed exec related code, including idl interfaces. * Removed special l4linux(-2.2) reboot hook. ************** * 20. lxfuxlibc ************** * [Bugfix]: * lx_fseek(): just return 0 or -1, as fseek does. ************** * 21. names ************** * [Bugfix]: * Let the names demo wait for dm_phys in the beginning, so that its output is in a consistent state every time. * Fixed bug in names for query_id: if the function returns error (0), name should be set to 0, so the generated stubs won't try to call strlen on it. ************** * 22. omega0 ************** * [Changed]: * Unified l4io's libomega0 and omega0 (management thread handling). * Support easy config of test duration. * Removed some old OSKit related code from omega0. ************** * 23. ore ************** * [Feature]: * Added support for SysKonnect GigaEthernet cards. * [Bugfix]: * Let ORe behave like a good network interface, which means to not deliver a packet to the sender, even if the packet is a broadcast packet and the sender forged the source MAC (like the Linux ethernet bridge does...). * Race fixed. Someone (evil) might send us an EXIT event from a client, while the client tries to receive a packet at the same time. This may leave the rx list in an inconsistent state. Now we grab the channel lock before cleaning up and detect a closed connection during recv(). * Fixed use-after-free bug that caused ORe to fault sometimes if a client's rx list was being cleaned up. * Fixed dubious use of goto in client-MAC initialization. * Don't notify about dropped packets by default. * Never do IRQ handling when using the loopback device. It only handles local clients and those will have received this packets already beforehand. * Sanity check some function arguments for not being NULL. * Fixed bug in ORe MAC calculation: the ORe MAC is created by checksumming the device MAC (6 bytes) and the channel ID (4 bytes) and if we pack both into a char buffer, then of course the channel id starts at &buffer[6], not &buffer[7]. * Fix pointer arithmetics error in arping example. ************** * 24. roottask ************** * [Bugfix]: * Fixed some issue when no modules given. * Fixed some issue in module handling. * Fixed I/O protection detection. * Made roottask behave nicer when it gets exceptions and other IPCs it cannot handle. * [Changed]: * Changes regarding tasklib support. ************** * 25. rtc ************** * [Changed]: * No longer uses cli/sti. ************** * 26. sigma0 ************** * [Bugfix]: * Interpret KIP memory descriptor type 'dedicated' as memory not available to other applications. ************** * 27. simple_ts ************** * [Changed]: * Do not build simple_ts if tasklib is used. ************** * 28. uclibc ************** * [Bugfix]: * Use pre-obj target to build include before objects. Support parallel building. * [Changed]: * Added ip.h. ************** * 29. uclibc++ ************** * [Bugfix]: * Use pre-obj target to build include before objects. Support parallel building. 2007-02-28: February Snapshot * Build environment: * Changed: Fiasco and DICE source tree's are now separated from the general l4 tree. * Changed: build directories for fiasco, l4 packages and linux are in build. * DICE upgrade to newly released version 3.1.1: * Fixed: warn on colliding operation IDs for two base interfaces in the derived interface. * Fixed: classes generated from derived interfaces derive from the classes of the base interfaces now. This has some consequences for member variables (exist in base class) and constructors (call base class constructor). * Fixed: parameters with constructed type and [out, ref] parameter were not unmarshalled correctly * Fixed: for X0: actually invoke IPC in reply function * Fiasco: * Feature: move to new KIP format (with L4V4 memory descriptors). * Feature: FPU can be transfered with UTCB IPC, when sender and receiver agree to this. This feature is important especially for virtualization of Linux. * Fixed: (Bug 218) Fiasco-UX now also runs on systems with TLS (thread local storage) enabled libc's * Fixed: critical Bug in mapping code. In the case of a large send flex page and a small receive window. * Fixed: (Bug 289) when updating kernel memory pagetables with disabled interrupts, interrupts have been switched on and thus allowed breaking the cpu lock * Fixed: EFlags get restored also if IO protection is off. * Fixed: size of multiboot info in KIP memory descriptors. * L4Linux upgrade to 2.6.19: * Feature: use the new FPU state switching feature of Fiasco * Feature: add memisadma=xx option to cmdline to configure the size of ISA DMA memory, default stays at 2MB, use memisadma=0 to disable usage of ISA DMA memory * Fixed: tamer implementation. Formerly, under heavy workload a deadlock could occur * Fixed: irq struct in l4ore driver * Changed: use l4io (omega0) for interrupts * dm_phys: * Removed: limitation that always enables physically contiguous memory when requesting super pages * Fixed: a bug in __aligned_size that did only consider the start of the page area but not the end * l4rm: * Feature: a new interface in l4rm enables one to store user-defined pointers for regions. So the l4rm AVL tree for used regions can be reused to lookup user information about these regions. * log: * Removed: obsolete oskit code * loader: * Removed: obsolete oskit code * Fixed: documentation completly revised * roottask: * Fixed: some documentation bugs * Fixed: a typo bug * sigma0: * Removed: sigma0-ux is not needed anymore, use sigma0 instead * Changed: uses only memory descriptors from the KIP, no MBI or something else * ORe: * Added: some assertions * Changed: sequence of broadcast packet and of quota handling to gain a better performance * Changed: when looking up the ORe server, do some retries before giving up * Fixed: the ORe server's loopback device can be used to connect only to local clients and in absence of any HW NICs. In this case, the device's MTU is 16k and not ETH_FRAME_LEN, therefore adapt the ORe stub's receive buffer size * lxfuxlibc: * Feature: socket and connect support * slab: * Feature: support for multi-page slabs and automatic slab dimensioning * Removed: __resort() and l4slab_get_page_data() * Fixed: the slab implementation requires that the memory for the slab data is slab_size aligned, which is now guaranteed * ipcmon: * Feature: revocation works * Fixed: bug in lookup funktion * Added: loader script and Fiasco-UX run script for test scenario * libc_backends: * Feature: enhanced sigma0 backend available, which firstly allocates some memory from sigma0 before dm_phys gets it all 2006-12-05: October Snapshot: Patchlevel 3 * Major upgrade of DICE to newly released version 3.1.0: Fixes several problems, including those addressed in the second patch and a stack underflow problem that became apparent in the DOpE package provided with the additional EMSCB source tarball See Changelog file in the DICE source tree included in this snapshot * Adaptations to new DICE version in various user-level packages: * Instead of [prealloc], IDL interfaces now use [prealloc_client] and/or [prealloc_server]; see Section 1.6.4 of the DICE user manual for more details * Reverted preliminary fixes for loader and names package from patchlevel 2 * roottask: * Fixed the use of incorrect constants in the client library * Fixed client-side and server-side code of rmgr_set_task_id(): This function no longer registers a new name, but just tries to set the quota for a given task * Added missing bounds checking on names registry * Removed obsolete code for handling old sigma0 protocol * Fixed C++ compatibility of libio interface: adapted packages: generic_io, l4io * Fixed typo in inline documentation of sigma0 lib's header file concering cacheable/noncacheable memory mappings * Added missing documentation of 'all_sects_writable' directive in loader package * C++ compatibility fix in semaphore library * Fixes related to C standards and removal of obsolete code for older compilers in the the l4sys system-call bindings * Added ptest test case for names package * Minor fixes in log package * Changed default configuration of non-driver L4Linux so that it indeed does not touch any hardware (i.e., removed serial driver) * Fixes in the EMSCB tarball: * Fixed C++ compatibility of libio interface: adapted packages: dde_linux, dde_linux26 * Minor fixes in lxfuxlibc and l4vfs packages 2006-11-20: October Snapshot: Patchlevel 2 * Fix DICE-related problems in the names and loader packages: Add missing CORBA_alloc() and CORBA_free() 2006-10-27: October Snapshot: Patchlevel 1 * Fix for Fiasco: Clear reference to previosly freed I/O page table entries * Fix for Fiasco: Enable 4K stacks in order to avoid stack underflows 2006-10-16: October Snapshot with IPC-Mon Support * Fiasco: * Mapping database supports memory, I/O, and capability spaces * Support for mapping and unmapping task capabilities * Improved support for mapping and unmapping of superpages * Support for unmapping memory-mapped I/O pages and I/O flexpages * Support for querying dirty and accessed flags * Support for "directed unmap" * Support for reclaiming unused kernel memory from slab allocaters * Task capabilities (IPC-Mon) support in user-level packages: * ipcmon package provides a capability-fault handler and client library * roottask, simple_ts, and loader packages and system-call bindings adapted for task capabilities * Upgrade to L4linux 2.6.18 * Upgrade to new version of DICE 2006-07-13: July Snapshot: Patchlevel 1 * Extension to allow running multiple instances of the ORe network switch; includes changes for both ORe and L4Linux 2006-06-30: July Snapshot * Fast IPC path in Fiasco * Sigma0 extension for MTRR support (cacheable memory-mapped I/O) * Upgrade to L4linux 2.6.17 * L4Env build directories support * DICE messagebuffer changed to support X.2 * Dynamic loading of applications via ldso * Development overview document added 2006-06-09: March Snapshot: Patchlevel 1 * Fix for memory leak in ORe 2006-03-31: March Snapshot * First snapshot released! * Includes: Fiasco, L4Env core, L4Linux, DICE