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_<arch> and DEFAULT_RELOC_<target> 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,<target>).
        * 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