--- Gnu-Mach/ChangeLog 2020/09/02 04:47:10 1.1.1.7 +++ Gnu-Mach/ChangeLog 2020/09/02 04:51:44 1.1.1.9 @@ -1,3 +1,1708 @@ +2016-05-18 Thomas Schwinge + + GNU Mach 1.7 + * version.m4 (AC_PACKAGE_VERSION): Set to 1.7. + * NEWS: Finalize for 1.7. + +2016-05-18 Samuel Thibault + + Fix gcc-6 warnings + * ddb/db_elf.c (elf_db_sym_init): Turn `i' into unsigned. + * device/ds_routines.c (ds_device_open, device_writev_trap): Likewise. + * i386/i386/user_ldt.c (i386_set_ldt): Likewise for `i', `min_selector', and + `first_desc'. + (i386_get_ldt): Likewise for `ldt_count'. + (user_ldt_free): Likewise for `i'. + * i386/i386/xen.h (hyp_set_ldt): Turn `count' into unsigned long. + * i386/intel/pmap.c (pmap_bootstrap): Turn `i', `j' and 'n' into unsigned. + (pmap_clear_bootstrap_pagetable): Likewise for `i' and `j'. + * ipc/ipc_kmsg.c (ipc_msg_print): Turn `i' and `numwords' into unsigned. + * kern/boot_script.c (boot_script_parse_line): Likewise for `i'. + * kern/bootstrap.c (bootstrap_create): Likewise for `n' and `i'. + * kern/host.c (host_processors): Likewise for `i'. + * kern/ipc_tt.c (mach_ports_register): Likewise. + * kern/mach_clock.c (tickadj, bigadj): turn into unsigned. + * kern/processor.c (processor_set_things): Turn `i' into unsigned. + * kern/task.c (task_threads): Likewise. + * kern/thread.c (consider_thread_collect, stack_init): Likewise. + * kern/strings.c (memset): Turn `i' into size_t. + * vm/memory_object.c (memory_object_lock_request): Turn `i' into unsigned. + * xen/block.c (hyp_block_init): Use %u format for evt. + (device_open): Drop unused err variable. + (device_write): Turn `copy_npages', `i', `nbpages', and `j' into unsigned. + * xen/console.c (hypcnread, hypcnwrite, hypcnclose): Turn dev to dev_t. + (hypcnclose): Return void. + * xen/console.h (hypcnread, hypcnwrite, hypcnclose): Fix prototypes + accordingly. + * xen/evt.c (form_int_mask): Turn `i' into int. + * xen/net.c (hyp_net_init): Use %u format for evt. + (device_open): Remove unused `err' variable. + +2016-05-17 Samuel Thibault + + Revert "Fix getting ELF symbol bind and type" + This reverts commit a8a52cafb5621b475737ffdc81f63703d5b37904. + + It seems to be breaking backtracing in ddb... + +2016-05-16 Richard Braun + + Fix pageout deadlock + The pageout daemon uses small, internal, temporary objects to transport + the data out to memory managers, which are expected to release the data + once written out to backing store. Releasing this data is done with a + vm_deallocate call. The problem with this is that vm_map is allowed to + merge these objects, in which case vm_deallocate will only remove a + reference instead of releasing the underlying pages, causing the pageout + daemon to deadlock. + + This change makes the pageout daemon mark these objects so that they + don't get merged. + + * vm/vm_object.c (vm_object_bootstrap): Update template. + (vm_object_coalesce): Don't coalesce if an object is used for pageout. + * vm/vm_object.h (struct vm_object): New `used_for_pageout` member. + * vm/vm_pageout.c (vm_pageout_page): Mark new objects for pageout. + +2016-05-15 Richard Braun + + Fix warning + ddb/db_output.c (db_printf): Return 0. + ddb/db_printf.h (db_printf): Change declaration to return an int. + +2016-04-21 Samuel Thibault + + Fix xen boot + * i386/i386/pcb.c (pcb_init): Make sure there is a thread before calling + current_task(). + +2016-04-20 Justus Winter + + Fix type of program counter argument + * i386/i386/hardclock.c (hardclock): Use '0' instead of 'NULL'. + * vm/vm_fault (vm_fault_cleanup): Likewise. + + xen: fix build + * i386/xen/xen.c (hypclock_machine_intr): Fix 'clock_interrupt' call. + * xen/time.c (clkstart): Likewise. + +2016-04-20 Samuel Thibault + + Add kernel profiling through sampling + * NEWS: Advertise feature. + * configfrac.ac (--enable-kernsample): Add option. + * kern/pc_sample.h (take_pc_sample): Add usermode and pc parameter. + (take_pc_sample_macro): Take usermode and pc parameters, pass as such to + take_pc_sample. + * kern/pc_sample.c (take_pc_sample): Use pc parameter when usermode is 1. + * kern/mach_clock.c (clock_interrupt): Add pc parameter. Pass usermode and + pc to take_pc_sample_macro call. + * i386/i386/hardclock.c (hardclock): Pass regs->eip to clock_interrupt call + on normal interrupts, NULL on interrupt interrupt. + * vm/vm_fault.c (vm_fault_cleanup): Set usermode to 1 and pc to NULL in + take_pc_sample_macro call. + +2016-04-17 Samuel Thibault + + Add memory barrier to spl* + * i386/i386/spl.S (mb): Define macro + (SETIPL, spl0, spl7): Call mb. + + Avoid using C99 for variable declaration for now + * kern/gsync.c (gsync_setup): Declare `i' variable out of for loop. + +2016-04-15 Samuel Thibault + + update NEWS file + +2016-04-15 Agustina Arzille + + Lightweight synchronization mechanism + * Makefrag.am (libkernel_a_SOURCES): Add kern/gsync.c and kern/gsync.h. + * include/mach/gnumach.defs (gsync_wait, gsync_wake, gsync_requeue): New + routines. + * include/mach/kern_return.h (KERN_TIMEDOUT, KERN_INTERRUPTED): New error + codes. + * kern/gsync.c: New file. + * kern/gsync.h: New file. + * kern/startup.c: Include + (setup_main): Call gsync_setup. + +2016-04-15 Justus Winter + + Update NEWS file + + Add --disable-assert flag to disable assertions + * configfrag.ac: Use 'AC_HEADER_ASSERT'. + + i386: Fix error handling + * i386/i386at/model_dep.c (i386at_init): Fix error handling. + +2016-04-05 Flavio Cruz + + Fix bootstraping issues with stdint.h. + * include/mach/std_types.h: Do not include stdint.h. + * kern/rdxtree.h: Replace sys/types.h with stdint.h. + +2016-04-04 Samuel Thibault + + Follow-up stdint use + 7bbfa39f59dcbc55b21d31abb9e2febef6a51ebb ('Use uint32_t instead of + unsigned32_t.') missed some Xen code + + * xen/net.c (recompute_checksum): Use stdint.h types. + * xen/time.c (hyp_get_stime): Likewise. + +2016-04-04 Flavio Cruz + + Use uint32_t instead of unsigned32_t. + Implement stdint.h and use it in gnumach. + + Remove old type definitions such as signed* and unsigned*. + + * Makefile.am: Add -ffreestanding. + * i386/i386/xen.h: Use uint64_t. + * i386/include/mach/i386/machine_types.defs: Use uint32_t and int32_t. + * i386/include/mach/i386/vm_types.h: Remove definitions of int*, uint*, + unsigned* and signed* types. + * i386/xen/xen.c: Use uint64_t. + * include/device/device_types.defs: Use uint32_t. + * include/mach/std_types.defs: Use POSIX types. + * include/mach/std_types.h: Include stdint.h. + * include/stdint.h: New file with POSIX types. + * include/sys/types.h: Include stdint.h. + * ipc/ipc_kmsg.c: Use uint64_t. + * kern/exception.c: Use uint32_t. + * linux/dev/include/linux/types.h: Remove POSIX types. + * xen/block.c: Use uint64_t. + * xen/net.c: Do not use removed unsigned*_t types. + * xen/ring.h: Use uint32_t instead. + * xen/store.c: Use uint32_t. + * xen/store.h: Use uint32_t. + * xen/time.c: Use POSIX types only. + * xen/time.h: Use uint64_t. + +2016-03-19 Samuel Thibault + + Make kernel mapping start address configurable + and move it to 16MiB by default to free 24bit DMA area + + * i386/configfrag.ac (--with-_START_MAP): Add option, default to 0x1000000. + * i386/Makefrag.am (_START_MAP): Set to $(_START_MAP). + (_START): Set to _START_MAP+0xC0000000. + +2016-03-19 Samuel Thibault + + Fix getting ELF symbol bind and type + ddb/db_elf.c (elf_db_search_symbol): Use ELF32_ST_BIND and ELF32_ST_TYPE to + access symbol bind and type. + +2016-03-13 Richard Braun + + Avoid panics on physical memory exhaustion + * vm/vm_resident (vm_page_grab_contig): Return NULL instead of calling + panic on memory exhaustion. + +2016-03-11 Samuel Thibault + + Ship missing files + Makefrag.am (libkernel_a_SOURCES): Add kern/log2.h. + (EXTRA_DIST): Add kern/exc.defs. + i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/elf.h. + +2016-03-11 Richard Braun + + Merge remote-tracking branch 'remotes/origin/rbraun/vm_cache_policy' + Finally ;-). + +2016-03-09 Richard Braun + + Fix stack allocation on Xen + Stack allocation on Xen can fail because of fragmentation. This change + makes stack allocation use the slab allocator. + + * kern/thread.c (thread_stack_cache): New global variable. + (stack_alloc): Use kmem_cache_alloc instead of vm_page_grab_contig. + (stack_collect): Use kmem_cache_free instead of vm_page_free_contig. + (kmem_cache_init): Initialize thread_stack_cache. + +2016-03-09 Richard Braun + + Relax slab allocation alignment constraint + * kern/slab.c (kmem_pagealloc_virtual): Pass alignment to function, + call kmem_alloc_aligned when greater than a page. + (kmem_pagealloc): Pass alignment to function. + (kmem_slab_create): Update call to kmem_pagealloc. + (kalloc): Likewise. + (kmem_cache_compute_properties): Fix handling of color with large slab + sizes. + (kmem_cache_init): Allow alignment greater than the page size. + +2016-03-06 Samuel Thibault + + Inherit fpu control word from parent to child + * i386/i386/thread.h (struct pcb): Add init_control field. + * i386/i386/fpu.h (fpinherit): New prototype. + * i386/i386/fpu.c (fpinit): Add thread parameter. When init_control field is + set, use that value instead of a hardcoded one. + (fpinherit): New function. + (fp_load): Pass thread parameter to fpinit(). + * kern/thread.c (thread_create): Pass parent task to pcb_init(). + * i386/i386/pcb.c (pcb_init): Add parent_task parameter, call fpinherit when + it is equal to current_task(). + +2016-02-28 Justus Winter + + ipc: add missing kernel object type + * ipc/ipc_object.c (ikot_print_array): Add entry for IKOT_PAGER_PROXY. + + doc: clarify memory object initialization + * doc/mach.texi: Mention another way how a memory manager can signal + that an object is ready. + + i386: add parts of cpu.h from x15 + * i386/Makefrag.am (libkernel_a_SOURCES): Add new file. + * i386/i386/cpu.h: New file. + +2016-02-26 Justus Winter + + include: avoid generating unused client stubs + * include/mach/mach.defs: Avoid generating unused client stubs, some + of which use an unreasonable amount of stack space and showed up in + compiler warnings. + +2016-02-26 Samuel Thibault + + Document thread_sleep about events woken from interrupt handlers + * kern/sched_prim.c (thread_sleep): Document case of events woken from + interrupt handlers. + + Document why code is not racy + * i386/i386at/kd_mouse.c (kd_mouse_read): Document why the + assert_wait/thread_block pair is not racy. + +2016-02-23 Justus Winter + + Include the exception protocol in 'gnumach.msgids' + * Makefrag.am: Include the exception protocol in 'gnumach.msgids'. + * kern/exc.defs: New file. + +2016-02-22 Richard Braun + + Remove kmem cache flags from the debugging interface + * include/mach_debug/slab_info.h (CACHE_FLAGS_NO_CPU_POOL, + CACHE_FLAGS_SLAB_EXTERNAL, CACHE_FLAGS_NO_RECLAIM, + CACHE_FLAGS_VERIFY, CACHE_FLAGS_DIRECT): Remove macros. + * kern/slab.c (host_slab_info): Pass raw cache flags to caller. + +2016-02-22 Richard Braun + + Fix slab allocator option handling + The slab allocator has grown to use multiple ways to allocate slabs + as well as track them, which got a little messy. One consequence is + the breaking of the KMEM_CF_VERIFY option. In order to make the code + less confusing, this change expresses all options as explicit cache + flags and clearly defines their relationships. + + The special kmem_slab and vm_map_entry caches are initialized + accordingly. + + * kern/slab.c (KMEM_CF_DIRECTMAP): Rename to ... + (KMEM_CF_PHYSMEM): ... this new macro. + (KMEM_CF_DIRECT): Restore macro. + (KMEM_CF_USE_TREE, KMEM_CF_USE_PAGE): New macros. + (KMEM_CF_VERIFY): Update value. + (kmem_pagealloc_directmap): Rename to... + (kmem_pagealloc_physmem): ... this new function. + (kmem_pagefree_directmap): Rename to ... + (kmem_pagefree_physmem): ... this new function. + (kmem_pagealloc, kmem_pagefree): Update macro names. + (kmem_slab_use_tree): Remove function. + (kmem_slab_create, kmem_slab_destroy): Update according to the new + cache flags. + (kmem_cache_compute_sizes): Rename to ... + (kmem_cache_compute_properties): ... this new function, and update + to properly set cache flags. + (kmem_cache_init): Update call to kmem_cache_compute_properties. + (kmem_cache_alloc_from_slab): Check KMEM_CF_USE_TREE instead of + calling the defunct kmem_slab_use_tree function. + (kmem_cache_free_to_slab): Update according to the new cache flags. + kmem_cache_free_verify): Add assertion. + (slab_init): Update initialization of kmem_slab_cache. + * kern/slab.h (KMEM_CACHE_DIRECTMAP): Rename to ... + (KMEM_CACHE_PHYSMEM): ... this new macro. + * vm/vm_map.c (vm_map_init): Update initialization of vm_map_entry_cache. + +2016-02-22 Richard Braun + + Optimize slab lookup on the free path + Caches that use external slab data but allocate slabs from the direct + physical mapping can look up slab data in constant time by associating + the slab data directly with the underlying page. + + * kern/slab.c (kmem_slab_use_tree): Take KMEM_CF_DIRECTMAP into account. + (kmem_slab_create): Set page private data if relevant. + (kmem_slab_destroy): Clear page private data if relevant. + (kmem_cache_free_to_slab): Use page private data if relevant. + * vm/vm_page.c (vm_page_init_pa): Set `priv' member to NULL. + * vm/vm_page.h (vm_page_set_priv, vm_page_get_priv): New functions. + +2016-02-22 Richard Braun + + Fix unused variable warnings + * kern/slab.c (slab_init): Remove unused variables. + +2016-02-20 Richard Braun + + Avoid slab allocation failures caused by memory fragmentation + Since the slab allocator has been changed to sit directly on top of the + physical allocator, failures caused by fragmentation have been observed, + as one could expect. This change makes the slab allocator revert to + kernel virtual memory when allocating larger-than-page slabs. This + solution is motivated in part to avoid the complexity of other solutions + such as page mobility, and also because a microkernel cannot be extended + to new arbitrary uncontrolled usage patterns such as a monolithic kernel + with loadable modules. As such, large objects are rare, and their use + infrequent, which is compatible with the use of kernel virtual memory. + + * kern/slab.c: Update module description. + (KMEM_CF_SLAB_EXTERNAL, KMEM_CF_VERIFY): Update values. + (KMEM_CF_DIRECT): Remove macro. + (KMEM_CF_DIRECTMAP): New macro. + (kmem_pagealloc_directmap, kmem_pagefree_directmap, + kmem_pagealloc_virtual, kmem_pagefree_virtual): New functions. + (kmem_pagealloc, kmem_pagefree, kmem_slab_create, kmem_slab_destroy, + kalloc, kfree): Update to use the new pagealloc functions. + (kmem_cache_compute_sizes): Update the algorithm used to determine slab + size and other cache properties. + (kmem_slab_use_tree, kmem_cache_free_to_slab, host_slab_info): Update to + correctly use the cache flags. + (slab_init): Add KMEM_CACHE_DIRECTMAP to the kmem_slab_cache init flags. + * kern/slab.h (KMEM_CACHE_VERIFY): Change value. + (KMEM_CACHE_DIRECTMAP): New macro. + * vm/vm_map.c (vm_map_init): Add KMEM_CACHE_DIRECTMAP to the + vm_map_entry_cache init flags. + +2016-02-16 Richard Braun + + Avoid panics on physical memory exhaustion + * vm/vm_resident (vm_page_grab): Return NULL instead of calling panic + on memory exhaustion. + +2016-02-14 Samuel Thibault + + Reduce VM_KERNEL_MAP_SIZE + Now that KMEM_MAP_SIZE (128MiB) has been removed. + + * i386/i386/vm_param.h (VM_KERNEL_MAP_SIZE): Decrease by 128MiB. + +2016-02-07 Justus Winter <4winter@informatik.uni-hamburg.de> + + vm: initialize external maps + * vm/vm_external.c (vm_external_create): Initialize allocated maps. + +2016-02-07 Richard Braun + + Fix page cache accounting + * vm/vm_object.c (vm_object_bootstrap): Set template object `cached' + member to FALSE. + (vm_object_cache_add, vm_object_cache_remove): New functions. + (vm_object_collect, vm_object_deallocate, vm_object_lookup, + vm_object_lookup_name, vm_object_destroy): Use new cache management functions. + (vm_object_terminate, vm_object_collapse): Make sure object isn't cached. + * vm/vm_object.h (struct vm_object): New `cached' member. + +2016-02-07 Justus Winter <4winter@informatik.uni-hamburg.de> + + vm: allocate a large map for all objects larger than SMALL_SIZE + * vm/vm_external.c (vm_external_create): Allocate a large map for all + objects larger than SMALL_SIZE. 'vm_external_state_{g,s}et' can deal + with offsets larger than 'LARGE_SIZE', so currently objects larger + than 'LARGE_SIZE' are missing out on the optimization. + + vm: remove unused field from struct vm_external + * vm/vm_external.h (struct vm_external): Remove unused field + 'existence_count'. + +2016-02-07 Richard Braun + + Remove kmem map + Now that the slab allocator doesn't use kernel virtual memory any more, + this map has become irrelevant. + + * kern/slab.c (KMEM_MAP_SIZE): Remove macro. + (kmem_map_store, kmem_map): Remove variables. + (slab_init): Remove call kmem_submap. + * kern/slab.h (kmem_map): Remove extern declaration. + +2016-02-06 Richard Braun + + Change computation of slab size + Allocating directly out of the physical memory allocator makes the slab + allocator vulnerable to failures due to fragmentation. This change makes + the slab allocator use the lowest possible size for its slabs to reduce + the chance of contiguous allocation failures. + + * kern/slab.c (KMEM_MIN_BUFS_PER_SLAB, KMEM_SLAB_SIZE_THRESHOLD): Remove + macros. + (kmem_cache_compute_sizes): Update the algorithm used to determine slab + size and other cache properties. + +2016-02-02 Richard Braun + + Fix various memory managment errors + A few errors were introduced in the latest changes. + + o Add VM_PAGE_WAIT calls around physical allocation attempts in case of + memory exhaustion. + o Fix stack release. + o Fix memory exhaustion report. + o Fix free page accounting. + + * kern/slab.c (kmem_pagealloc, kmem_pagefree): New functions + (kmem_slab_create, kmem_slab_destroy, kalloc, kfree): Use kmem_pagealloc + and kmem_pagefree instead of the raw page allocation functions. + (kmem_cache_compute_sizes): Don't store slab order. + * kern/slab.h (struct kmem_cache): Remove `slab_order' member. + * kern/thread.c (stack_alloc): Call VM_PAGE_WAIT in case of memory + exhaustion. + (stack_collect): Call vm_page_free_contig instead of kmem_free to + release pages. + * vm/vm_page.c (vm_page_seg_alloc): Fix memory exhaustion report. + (vm_page_setup): Don't update vm_page_free_count. + (vm_page_free_pa): Check page parameter. + (vm_page_mem_free): New function. + * vm/vm_page.h (vm_page_free_count): Remove extern declaration. + (vm_page_mem_free): New prototype. + * vm/vm_pageout.c: Update comments not to refer to vm_page_free_count. + (vm_pageout_scan, vm_pageout_continue, vm_pageout): Use vm_page_mem_free + instead of vm_page_free_count, update types accordingly. + * vm/vm_resident.c (vm_page_free_count, vm_page_free_count_minimum): + Remove variables. + (vm_page_free_avail): New variable. + (vm_page_bootstrap, vm_page_grab, vm_page_release, vm_page_grab_contig, + vm_page_free_contig, vm_page_wait): Use vm_page_mem_free instead of vm_page_free_count, + update types accordingly, don't set vm_page_free_count_minimum. + * vm/vm_user.c (vm_statistics): Likewise. + +2016-02-02 Richard Braun + + Fix unused variable warnings + * i386/i386at/biosmem.c (biosmem_bootstrap): Remove unused variables. + +2016-02-02 Richard Braun + + Stack the slab allocator directly on top of the physical allocator + In order to increase the amount of memory available for kernel objects, + without reducing the amount of memory available for user processes, + a new allocation strategy is introduced in this change. + + Instead of allocating kernel objects out of kernel virtual memory, + the slab allocator directly uses the direct mapping of physical + memory as its backend. This largely increases the kernel heap, and + removes the need for address translation updates. + + In order to allow this strategy, an assumption made by the interrupt + code had to be removed. In addition, kernel stacks are now also + allocated directly from the physical allocator. + + * i386/i386/db_trace.c: Include i386at/model_dep.h + (db_i386_reg_value): Update stack check. + * i386/i386/locore.S (trap_from_kernel, all_intrs, + int_from_intstack): Update interrupt handling. + * i386/i386at/model_dep.c: Include kern/macros.h. + (int_stack, int_stack_base): New variables. + (int_stack_high): Remove variable. + (i386at_init): Update interrupt stack initialization. + * i386/i386at/model_dep.h: Include i386/vm_param.h. + (int_stack_top, int_stack_base): New extern declarations. + (ON_INT_STACK): New macro. + * kern/slab.c: Include vm/vm_page.h + (KMEM_CF_NO_CPU_POOL, KMEM_CF_NO_RECLAIM): Remove macros. + (kmem_pagealloc, kmem_pagefree, kalloc_pagealloc, kalloc_pagefree): Remove + functions. + (kmem_slab_create): Allocate slab pages directly from the physical allocator. + (kmem_slab_destroy): Release slab pages directly to the physical allocator. + (kmem_cache_compute_sizes): Update the slab size computation algorithm to + return a power-of-two suitable for the physical allocator. + (kmem_cache_init): Remove custom allocation function pointers. + (kmem_cache_reap): Remove check on KMEM_CF_NO_RECLAIM. + (slab_init, kalloc_init): Update calls to kmem_cache_init. + (kalloc, kfree): Directly fall back on the physical allocator for big + allocation sizes. + (host_slab_info): Remove checks on defunct flags. + * kern/slab.h (kmem_slab_alloc_fn_t, kmem_slab_free_fn_t): Remove types. + (struct kmem_cache): Add `slab_order' member, remove `slab_alloc_fn' and + `slab_free_fn' members. + (KMEM_CACHE_NOCPUPOOL, KMEM_CACHE_NORECLAIM): Remove macros. + (kmem_cache_init): Update prototype, remove custom allocation functions. + * kern/thread.c (stack_alloc): Allocate stacks from the physical allocator. + * vm/vm_map.c (vm_map_kentry_cache, kentry_data, kentry_data_size): Remove + variables. + (kentry_pagealloc): Remove function. + (vm_map_init): Update calls to kmem_cache_init, remove initialization of + vm_map_kentry_cache. + (vm_map_create, _vm_map_entry_dispose, vm_map_copyout): Unconditionnally + use vm_map_entry_cache. + * vm/vm_map.h (kentry_data, kentry_data_size, kentry_count): Remove extern + declarations. + * vm/vm_page.h (VM_PT_STACK): New page type. + * device/dev_lookup.c (dev_lookup_init): Update calls to kmem_cache_init. + * device/dev_pager.c (dev_pager_hash_init, device_pager_init): Likewise. + * device/ds_routines.c (mach_device_init, mach_device_trap_init): Likewise. + * device/net_io.c (net_io_init): Likewise. + * i386/i386/fpu.c (fpu_module_init): Likewise. + * i386/i386/machine_task.c (machine_task_module_init): Likewise. + * i386/i386/pcb.c (pcb_module_init): Likewise. + * i386/intel/pmap.c (pmap_init): Likewise. + * ipc/ipc_init.c (ipc_bootstrap): Likewise. + * ipc/ipc_marequest.c (ipc_marequest_init): Likewise. + * kern/act.c (global_act_init): Likewise. + * kern/processor.c (pset_sys_init): Likewise. + * kern/rdxtree.c (rdxtree_cache_init): Likewise. + * kern/task.c (task_init): Likewise. + * vm/memory_object_proxy.c (memory_object_proxy_init): Likewise. + * vm/vm_external.c (vm_external_module_initialize): Likewise. + * vm/vm_fault.c (vm_fault_init): Likewise. + * vm/vm_object.c (vm_object_bootstrap): Likewise. + * vm/vm_resident.c (vm_page_module_init): Likewise. + (vm_page_bootstrap): Remove initialization of kentry_data. + +2016-01-30 Richard Braun + + Fix early page allocation on Xen + The Xen target was completely ignored when porting the biosmem and + vm_page physical memory allocators. Let's fix this. + + * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/biosmem.{c,h}. + * i386/i386/vm_page.h (VM_PAGE_MAX_SEGS, VM_PAGE_DIRECTMAP_LIMIT, + VM_PAGE_HIGHMEM_LIMIT): Define for Xen. + * i386/i386at/biosmem.c: Include mach/xen.h. + (biosmem_panic_setup_msg): Comment out for Xen since it's unused. + (biosmem_map_build, biosmem_map_build_simple, + biosmem_save_cmdline_sizes, biosmem_find_boot_data_update, + biosmem_find_boot_data, biosmem_setup_allocator): Likewise. + (biosmem_bootstrap_common): New function. + (biosmem_xen_bootstrap): Likewise, for Xen. + (biosmem_bootalloc): Perform bottom-up allocations for Xen. + * i386/i386at/biosmem.h (biosmem_xen_bootstrap): New prototype, for Xen. + * i386/i386at/model_dep.c (i386at_init): Call biosmem_xen_bootstrap instead + of biosmem_bootstrap on Xen. + * i386/include/mach/i386/vm_types.h (phys_addr_t): Define as an unsigned + 64-bits integer when PAE is enabled. + +2016-01-29 Samuel Thibault + + Disable probing legacy IDE when AHCI driver works + * linux/src/drivers/block/ide.c (default_io_base): Do not qualify const. + (ide_disable_base): New function. + * linux/dev/include/linux/blk.h (ide_disable_base): New declaration. + * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Call ide_disable_base + with each I/O BAR of the AHCI PCI card. + + Use PCI macros + * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Use + PCI_BASE_ADDRESS_SPACE_IO and PCI_BASE_ADDRESS_MEM_MASK macros instead of + hardcoded values. + + ahci: print PCI bus/dev/fun in hexadecimal + * linux/dev/drivers/block/ahci.c: Print PCI bus/dev/fun number in + hexadecimal + +2016-01-29 Samuel Thibault + + Fallback on direct PCI access when no BIOS32 is available + Some hardware start shippping with no BIOS32 at all, and we'll have to + implement ACPI to get the address of the mmconfig table. In the meanwhile, + we can hope that the direct probe works (it does on HP820 for instance). + + * linux/src/arch/i386/kernel/bios32.c (pcibios_init): Also try + check_direct_pci() when bios32 probing failed. + +2016-01-23 Richard Braun + + Merge branch 'rbraun/vm_page' + +2016-01-23 Richard Braun + + Use vm_page as the physical memory allocator + This change replaces the historical page allocator with a buddy allocator + implemented in vm/vm_page.c. This allocator allows easy contiguous allocations + and also manages memory inside segments. In a future change, these segments + will be used to service requests with special constraints, such as "usable + for 16-bits DMA" or "must be part of the direct physical mapping". + + * Makefrag.am (libkernel_a_SOURCES): Add vm/vm_page.c. + * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/biosmem.{c,h}. + * i386/i386/vm_param.h: Include kern/macros.h. + (VM_PAGE_DMA_LIMIT, VM_PAGE_MAX_SEGS, VM_PAGE_DMA32_LIMIT, + VM_PAGE_DIRECTMAP_LIMIT, VM_PAGE_HIGHMEM_LIMIT, VM_PAGE_SEG_DMA, + VM_PAGE_SEG_DMA32, VM_PAGE_SEG_DIRECTMAP, VM_PAGE_SEG_HIGHMEM): New macros. + * i386/i386at/model_dep.c: Include i386at/biosmem.h. + (avail_next, avail_remaining): Remove variables. + (mem_size_init): Remove function. + (i386at_init): Initialize and use the biosmem module for early physical + memory management. + (pmap_free_pages): Return phys_last_addr instead of avail_remaining. + (init_alloc_aligned): Turn into a wrapper for biosmem_bootalloc. + (pmap_grab_page): Directly call init_alloc_aligned instead of pmap_next_page. + * i386/include/mach/i386/vm_types.h (phys_addr_t): New type. + * kern/bootstrap.c (free_bootstrap_pages): New function. + (bootstrap_create): Call free_bootstrap_pages instead of vm_page_create. + * kern/cpu_number.h (CPU_L1_SIZE): New macro. + * kern/slab.h: Include kern/cpu_number.h. + (CPU_L1_SIZE): Remove macro, moved to kern/cpu_number.h. + * kern/startup.c (setup_main): Change the value of machine_info.memory_size. + * linux/dev/glue/glue.h (alloc_contig_mem, free_contig_mem): Update prototypes. + * linux/dev/glue/kmem.c (linux_kmem_init): Don't use defunct page queue. + * linux/dev/init/main.c (linux_init): Don't free unused memory. + (alloc_contig_mem, free_contig_mem): Turn into wrappers for the vm_page + allocator. + * linux/pcmcia-cs/glue/ds.c (PAGE_SHIFT): Don't undefine. + * vm/pmap.h (pmap_startup, pmap_next_page): Remove prototypes. + * vm/vm_fault.c (vm_fault_page): Update calls to vm_page_convert. + * vm/vm_init.c (vm_mem_init): Call vm_page_info_all. + * vm/vm_object.c (vm_object_page_map): Update call to vm_page_init. + * vm/vm_page.h (vm_page_queue_free): Remove variable declaration. + (vm_page_create, vm_page_release_fictitious, vm_page_release): Remove + declarations. + (vm_page_convert, vm_page_init): Update prototypes. + (vm_page_grab_contig, vm_page_free_contig): New prototypes. + * vm/vm_resident.c (vm_page_template, vm_page_queue_free, + vm_page_big_pagenum): Remove variables. + (vm_page_bootstrap): Update and call vm_page_setup. + (pmap_steal_memory): Update and call vm_page_bootalloc. + (pmap_startup, vm_page_create, vm_page_grab_contiguous_pages): Remove functions. + (vm_page_init_template, vm_page_grab_contig, + vm_page_free_contig): New functions. + (vm_page_init): Update and call vm_page_init_template. + (vm_page_release_fictitious): Make static. + (vm_page_more_fictitious): Update call to vm_page_init. + (vm_page_convert): Rewrite to comply with vm_page. + (vm_page_grab): Update and call vm_page_alloc_pa. + (vm_page_release): Update and call vm_page_free_pa. + +2016-01-23 Richard Braun + + Import the vm_page module from X15 and relicense to GPLv2+ + * vm/vm_page.c: New File. + * vm/vm_page.h: Merge vm_page.h from X15. + (struct vm_page): New members: node, type, seg_index, order, + vm_page_header. Turn phys_addr into a phys_addr_t. + + Import the biosmem module from X15 and relicense to GPLv2+ + * i386/i386at/biosmem.c: New file. + * i386/i386at/biosmem.h: Likewise. + + Import the multiboot module from X15 and relicense to GPLv2+ + * i386/include/mach/i386/multiboot.h: Merge multiboot.h from X15. + + Import the elf module from X15 and relicense to GPLv2+ + * i386/i386at/elf.h: New file. + + Import the log2 module from X15 and relicense to GPLv2+ + * kern/log2.h: New file. + +2016-01-14 Samuel Thibault + + Fix build with gcc-6 + * linux/src/include/linux/compiler-gcc6.h: New file. + +2016-01-13 Samuel Thibault + + Increase kernel map size + To avoid running out of memory due to the increased consumption by radix + trees which replaced arrays. + + * kern/slab.c (KMEM_MAP_SIZE): Bump from 96MiB to 128MiB. + * i386/i386/vm_param.h (VM_KERNEL_MAP_SIZE): Add 32MiB accordingly. + +2016-01-02 Richard Braun + + Completely disable strict aliasing + * Makefile.am (AM_CFLAGS): Add -fno-strict-aliasing. + + Fix object page list type + * vm/vm_object.h (struct vm_object): Use queue_head_t instead of + queue_chain_t as the page list type. + +2016-01-02 Flavio Cruz + + replace extern with static in some linux code + * linux/dev/include/linux/fs.h: Replace extern with static. + * linux/dev/include/linux/locks.h: Likewise. + * linux/dev/include/linux/mm.h: Likewise. + * linux/src/drivers/net/e2100.c: Likewise + * linux/src/include/asm-i386/termios.h: Likewise. + * linux/src/include/linux/interrupt.h: Likewise. + * linux/src/include/net/route.h: Likewise. + * linux/src/include/net/sock.h: Likewise. + + fix t_addr assignment in lpropen + * i386/i386at/lpr.c (lpropen): Fix assignment to t_addr. + +2016-01-01 Flavio Cruz + + remove unnused disk code and headers + * i386/Makefrag.am: Remove disk.h. + * i386/i386at/disk.h: Remove unnused definitions. + * i386/include/mach/i386/disk.h: Remove. + * linux/dev/glue/block.c (device_get_status): Remove V_GETPARMS case. + + fix some compiler warnings in gnumach + * linux/dev/glue/block.c (out): Cast to device_t. + * linux/dev/init/main.c (alloc_contig_mem): Initialize addr and cast return value to void *. + * i386/i386/phys.c (pmap_copy_page): Initialize src_map. + * i386/intel/pmap.c: Include i386at/model_dep.h. + * kern/mach_clock.c (mapable_time_init): Cast to void *. + +2016-01-01 Richard Braun + + Slightly improve map debugging readability + * vm/vm_object.c (vm_object_print): Break line so all debugging output fits + in a page. + +2015-12-29 Richard Braun + + Improve map debugging readability + * vm/vm_map.c (vm_map_print): Reduce indentation, break lines earlier. + (vm_map_copy_print): Likewise. + * vm/vm_object.c (vm_object_print): Likewise. + + Improve VM map debugging + * vm/vm_map.c (vm_map_print): Update arguments to conform to ddb + protocol. + * vm/vm_print.h (vm_map_print): Likewise for prototype. + + Fix vm_map_copyout + * vm/vm_map.c (vm_map_copyout): Reinitialize copy map red-black tree. + +2015-12-11 Samuel Thibault + + Fix boot under kvm in linux 4.3 + * i386/i386/locore.S (discover_x86_cpu_type): Disable Cyrix CPU discovery. + +2015-11-29 Samuel Thibault + + Nicer out of memory condition reporting + * vm/vm_object.c (_vm_object_allocate): Return 0 immediately when + kmem_cache_alloc returned 0. + (vm_object_allocate): Panic when _vm_object_allocate returns 0. + +2015-11-27 Samuel Thibault + + Fix wired accounting + * vm/vm_map.c (vm_map_pageable_common): Put back wired_count decrementation + into user_wired_count test. + + Fix ahci unit MAX_PORTS check + * linux/dev/drivers/block/ahci.c (ahci_do_request): Fix checking unit + against MAX_PORTS. + + Fix bound + * i386/i386at/lpr.c (lprprobe): Fix checking unit against NLPR. + + Fix missing format in printk + * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Add missing format. + +2015-10-31 Thomas Schwinge + + GNU Mach 1.6 + * version.m4 (AC_PACKAGE_VERSION): Set to 1.6. + * NEWS: Finalize for 1.6. + +2015-10-31 Thomas Schwinge + + Rework *.msgids handling when neither client nor server stubs are required + Originally added in commit 255c47e669819f153c722c98a230f6fe4e6ece08, but "make + distcheck" didn't like that: + + [...] + ERROR: files left in build directory after distclean: + ./ipc/notify.msgids + Makefile:7489: recipe for target 'distcleancheck' failed + make[1]: *** [distcleancheck] Error 1 + make[1]: Leaving directory '[...]/gnumach/release.build/gnumach-1.5/_build/sub' + Makefile:7416: recipe for target 'distcheck' failed + make: *** [distcheck] Error 1 + + Instead of special-casing that, generalize the Makefile rules. + + * Makefrag.am (nodist_lib_dep_tr_for_defs_a_SOURCES): Add + ipc/notify.none.defs.c. + (nodist_libkernel_a_SOURCES): Add ipc/notify.none.msgids. + (gnumach.msgids): Remove ipc/notify.msgids prerequisite. + * Makerules.mig.am (%.msgids): Remove rule, and instead... + (%.none.defs.c, %.none.msgids): ... add these rules. + +2015-10-05 Justus Winter <4winter@informatik.uni-hamburg.de> + + Update NEWS file + +2015-10-05 Samuel Thibault + + Fix time going back in Xen case + when backward time correction happens to get bigger than the tick duration. + + * kern/mach_clock.c (clock_interrupt): When `tickdelta' is bigger than `usec', + truncate it to `usec-1'. + +2015-10-05 Joshua Branson + + Add generated mach documentation files to gitignore + * .gitignore: Add doc/mach.aux doc/mach.cp doc/mach.cps doc/mach.fn + doc/mach.fns doc/mach.ky doc/mach.log doc/mach.pdf doc/mach.pg doc/mach.toc + doc/mach.tp doc/mach.vr. + +2015-09-29 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern/slab: print total used and reclaimable memory + * kern/slab.c (_slab_info): Print total used and reclaimable memory. + + kern/slab: include flags in the slab information + * kern/slab.c (_slab_info): Include flags in the slab information. + + ddb: fix line formatting + * ddb/db_output.c (db_putchar): Fix off-by-one, allowing one more + character to be printed before the newline is inserted. + + ddb: add new command `show slabinfo' + * ddb/db_command.c (db_show_cmds): Add `slabinfo'. + * kern/slab.c (slab_info): Generalize so that it can be used with + different printf-like functions, and turn it into a static function. + (slab_info): New wrapper retaining the old behaviour. + (db_show_slab_info): New wrapper that uses `db_printf' instead. + * kern/slab.h (db_show_slab_info): New declaration. + +2015-09-27 Justus Winter <4winter@informatik.uni-hamburg.de> + + i386: trace syscalls of a single task + * i386/i386/debug_i386.c (syscall_trace_task): New variable. + (syscall_trace_print): If set, trace only syscalls from this task. + + i386: improve syscall tracing + * kern/syscall_sw.h (mach_trap_t): Turn unused field into `mach_trap_name'. + (MACH_TRAP, MACH_TRAP_STACK): Record name. + * i386/i386/debug_i386.c (syscall_trace_print): Use the name and + format the arguments to look like c. + + Fix build with -DDEBUG + * device/cirbuf.c: Add missing include. + * i386/i386/debug.h (dump_ss): Hide declaration from assembler. + * i386/i386/debug_i386.c: Fix include. + * kern/sched_prim.h: Add missing include, fix declaration. + + kern/bootstrap: drop into the debugger + * kern/bootstrap.c (boot_script_prompt_task_resume): Drop into the + debugger instead of merely waiting for return using `safe_gets', which + disables interrupts, making it impossible to break into the debugger + using the magic keys. + +2015-09-19 Flávio Cruz + + Add macros to convert between time_value_t and timespec + * include/mach/time_value.h (TIME_VALUE_TO_TIMESPEC, + TIMESPEC_TO_TIME_VALUE): New macros + +2015-09-07 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: use proper memory fences when handling the mapped time + * include/mach/time_value.h (struct mapped_time_value): Adjust comment. + * kern/mach_clock.c (mtime): Likewise. Also make it volatile. + (update_mapped_time): Use full hardware barriers. + (read_mapped_time): New macro with proper fences. + (record_time_stamp, host_get_time): Use the new macro. + +2015-09-07 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: fix loop reading the time value + Previously, recent versions of gcc would hoist the loads out of the + loop reading the time value. + + * kern/macros.h (access_once): New macro. + * kern/mach_clock.c (host_get_time): Use the new macro to prevent the + loads from being hoisted out of the loop. + +2015-09-07 Rik van Riel + + commit fce798016c4bd2be89b86b0d343ab54505409412 + [PATCH] advansys.c buffer overflow + + The Stanford checker found an error in advansys.c, the driver + is accessing field 6 in an array[6]. Since this is the only + place where this field is accessed it should be safe to simply + remove this line. + +2015-08-31 Samuel Thibault + + Reserve 64k at beginning of memory, not just 4k + Linux does this to be extra careful with some BIOSes which apparently + spuriously write between 4k and 64k. + + * i386/i386at/model_dep.c (RESERVED_BIOS): New macro. + (avail_next, mem_size_init, init_alloc_aligned): Use RESERVED_BIOS instead + of hardcoded 0x1000. + +2015-08-30 James Clarke + + Fix printk not handling ANSI escape codes + * i386/i386at/kd.c (kdstart): Moved escape sequence handling to new + kd_putc_esc function. + (kd_putc_esc): New function with logic from kdstart. + (kdcnputc): Call kd_putc_esc rather than kd_putc to allow for ANSI + escape codes. + * i386/i386at/kd.h (kd_putc_esc): New function. + +2015-08-28 Flávio Cruz + + Make sure the reply port's reference is released when the thread needs to be halted. + * kern/thread.h (thread_halt_self): Add continuation_t parameter. + * kern/thread.c (thread_halt_self): Pass continuation_t parameter to + thread_block instead of thread_exception_return. + * kern/ast.c (ast_taken): Pass thread_exception_return to thread_halt_self. + * kern/profile.c (profile_thread): Likewise. + * kern/exception.c (exception_no_server): Likewise. + (thread_release_and_exception_return): New function. + (exception_raise_continue_slow): Pass thread_release_and_exception_return to + thread_halt_self. + +2015-08-28 Flávio Cruz + + Add a thread_no_continuation definition + to replace the use of the NULL pointer. + + * kern/sched_prim.h (thread_no_continuation): New macro. + * kern/machine.c (processor_assign, processor_doaction): Use + thread_no_continuation instead of 0. + * kern/profile.c (send_last_sample_buf): Likewise + * kern/sched_prim.c (thread_sleep, thread_invoke, thread_dispatch): + Likewise. + * kern/task.c (task_terminate, task_assign): Likewise. + * kern/thread.c (thread_suspend): Likewise. + * kern/thread.h (struct thread): Change type of swap_func field to + continuation_t. + +2015-08-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern/bootstrap: tune locking + * kern/bootstrap.c (boot_script_exec_cmd): Avoid holding the lock + across the call to `thread_create'. + + i386: enable assertions + * i386/intel/pmap.c (pmap_page_protect): Enable assertions. + (phys_attribute_clear, phys_attribute_test): Likewise. + + kern: really zero-out unused simple lock info entries + * kern/lock.c (simple_unlock): Really zero-out unused simple lock info + entries. + +2015-08-18 Justus Winter <4winter@informatik.uni-hamburg.de> + + i386: fix panic message + * i386/intel/pmap.c (pmap_page_protect): Fix function name in panic + message. + + vm: collapse unreachable branch into assertion + * vm/vm_object.c (vm_object_collapse): Collapse unreachable branch + into assertion. + +2015-08-17 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: keep track of the writer when debugging locks + * configfrag.ac (MACH_LDEBUG): Adjust comment, we use it to sanity + check all locks now. + * kern/lock.c (lock_write): Keep track of the writer thread. + (lock_done): Clear writer. + (lock_read_to_write): Keep track of the writer thread. + (lock_write_to_read): Assert that the current thread holds the lock. + Clear writer. + (lock_try_write): Keep track of the writer thread. + (lock_try_read_to_write): Likewise. + (lock_set_recursive): Assert that the current thread holds the lock. + * kern/lock.h (struct lock): New field `writer'. + (have_read_lock, have_write_lock, have_lock): New macros that can be + used to assert that the current thread holds the given lock. If + MACH_LDEBUG is not set, they evaluate to true. + +2015-08-17 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: improve simple lock debugging + Do not bother saving the return address when acquire a simple lock. + Save the location as provided by the compiler as string instead. Also + save the lock parameter. + + * kern/lock.c (struct simple_locks_info): Drop `ra', add `expr', `loc'. + (simple_lock): Rename to `_simple_lock', add expression and location + parameters and save them. + (simple_lock_try): Likewise. + (simple_unlock): Zero-out the now unused slot in the list of taken locks. + (db_show_all_slocks): Use the new information. + * kern/lock.h (simple_lock, simple_lock_try): Provide macro versions + passing the location and expression as string. + +2015-08-17 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: disable the simple lock checks while debugging + * kern/lock.c (do_check_simple_locks): New variable. + (check_simple_locks): Make check conditional. + (check_simple_locks_{en,dis}able): New functions. + * kern/lock.h (check_simple_locks_{en,dis}able): New declarations. + * ddb/db_trap.c (db_task_trap): Disable simple lock checks. + +2015-08-15 Justus Winter <4winter@informatik.uni-hamburg.de> + + vm: fix compiler warning + * vm/vm_user.c (vm_wire): Drop unused but set variable `host'. + + vm: enable extra assertions + * vm/vm_fault.c (vm_fault_page): Enable extra assertions. + + Avoid re-defining macros + * kern/macros.h: Avoid re-defining macros. + * linux/src/include/linux/compiler-gcc.h: Likewise. + * linux/src/include/linux/compiler.h: Likewise. + +2015-07-25 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: add boot-time clock, use it for time stamps + The kernel keeps track of task and thread creation times by saving a + time stamp. Previously, the real-time clock was used for this. When + the real-time clock is changed, however, the reference frame for the + time stamps is lost. This surfaced in Hurd systems reporting + spuriously long uptimes. + + Fix this by creating a boot-time clock and use it as reference frame + for the time stamps. + + * kern/mach_clock.c (clock_boottime_offset): Create clock by keeping + track of the offset from the real-time. + (clock_boottime_update): New function. + (record_time_stamp): Use the boot-time clock for time stamps. + (read_time_stamp): New function to convert it back to real-time. + (host_set_time): Call `clock_boottime_update'. + * kern/mach_clock.h (record_time_stamp): Amend comment. + (read_time_stamp): New declaration. + * kern/task.c (task_info): Use `read_time_stamp'. + * kern/thread.c (thread_info): Likewise. + +2015-07-25 Justus Winter <4winter@informatik.uni-hamburg.de> + + include: provide time-value substraction + * include/mach/time_value.h (time_value_assert): New macro to assert + that the given value is well-formed. + (time_value_add_usec): Use the new macro. + (time_value_sub_usec): New macro. + (time_value_add): Use `time_value_add_usec'. + (time_value_sub_usec): New macro. + + kern/lock: make sure the macros are only used on simple locks + * kern/lock.h (struct slock, simple_lock_data_empty): Add field + `is_a_simple_lock'. + (simple_lock_assert): New macro that tests for `is_a_simple_lock'. + Use this macro to assert that the arguments to various other macros + are indeed simple locks. + + Disable the kernel tracing system XPR + * configfrag.ac (XPR_DEBUG): Disable tracing system. + + ipc/space: inline reference counting + * ipc/ipc_space.h (is_{reference,release}): Use the macro variant. + + Make sure the field offsets are updated + * Makerules.am: Make sure the field offsets are updated. + +2015-07-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern/bootstrap: deallocate thread + Previously, killing the thread would fail because of the extra + reference, making task_terminate loop forever. + + * kern/bootstrap.c (boot_script_exec_command): Deallocate thread. + +2015-07-19 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern/bootstrap: deallocate task + * kern/bootstrap.c (boot_script_free_task): Deallocate task. + +2015-07-18 Justus Winter <4winter@informatik.uni-hamburg.de> + + linux/net: fix build with -O0 + * linux/src/drivers/net/pci-scan.c: Avoid #erroring out. + +2015-07-18 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern/printf: do not serialize printf and co + A lot of code assumes that printf is re-entrant, e.g. the pagination + code in the debugger, or any use of assert inside the console driver. + + * kern/printf.c: Drop the lock serializing calls to `_doprnt'. + (printf_init): Remove function. + * kern/printf.h (printf_init): Remove declaration. + * kern/startup.c (setup_main): Remove call to `printf_init'. + +2015-07-18 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern/lock: use compiler built-in functions to get return address + * kern/lock.c (struct simple_locks_info): Fix type of `ra'. + (simple_lock, simple_lock_try): Use compiler built-in functions to get + return address. + + kern/bootstrap: fix locking + * kern/bootstrap.c (boot_script_exec_cmd): Add missing unlock. + (user_bootstrap): Likewise. + + kern/slab: fix locking + * kern/slab.c (host_slab_info): Fix locking. + +2015-07-15 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: use a general lock to protect IPC spaces + This fixes a corruption in the radix trees representing the IPC spaces + when memory was tight. + + * ipc/ipc_space.h: Use a general lock to protect IPC spaces. + +2015-07-15 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: fix the locking of the IPC entry allocation functions + * ipc/ipc_entry.c (ipc_entry_alloc): Assume the space is write-locked. + (ipc_entry_alloc_name): Likewise. + * ipc/ipc_object.c: Fix the locking around all call sites to the two + functions where the space was not locked before. + + i386: fix typo + * i386/intel/pmap.c: Fix typo. + +2015-07-12 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: avoid kmem_alloc + * ipc/ipc_table.c (ipc_table_alloc): Unconditionally use `kalloc'. + (ipc_table_free): Unconditionally use `kfree'. + +2015-07-12 Justus Winter <4winter@informatik.uni-hamburg.de> + + vm: really fix traversing the list of inactive pages + Previously, the pageout code traversed the list of pages in an object + instead of the list of inactive pages. + + * vm/vm_pageout.c (vm_pageout_scan): Fix traversing the list of + inactive pages. + +2015-07-11 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: make sure the queue macros are only used on queues + This turns mistakes as the one corrected in e59f05e9 into compile-time + errors. + + * kern/queue.h: Add a new macro, queue_assert, and use it to assert + that all arguments given to the queue macros have the correct type. + * device/net_io.c (ENQUEUE_DEAD): Adapt to the fact that + `queue_next(q)' is no longer an lvalue. + +2015-07-11 Justus Winter <4winter@informatik.uni-hamburg.de> + + vm: fix traversing the list of inactive pages + Previously, the pageout code traversed the hash table chain instead of + the list of inactive pages. The code merely compiled by accident, + because the `struct page' also has a field called `next' for the hash + table chain. + + * vm/vm_pageout.c (vm_pageout_scan): Fix traversing the list of + inactive pages. + +2015-07-10 Justus Winter <4winter@informatik.uni-hamburg.de> + + vm: drop debugging remnants + * vm/vm_object.c (vm_object_terminate): Drop debugging remnants. + + kern: make printf handle long long integers + * Makefile.am (clib_routines): Steal `__umoddi3'. + * kern/printf.c (MAXBUF): Increase size. + (printnum, _doprnt): Handle long long integers. + * kern/printf.h (printnum): Adjust declaration. + +2015-07-09 Justus Winter <4winter@informatik.uni-hamburg.de> + + vm: fix panic message + * vm/vm_kern.c (kmem_init): Fix panic message. + + i386: fix line wrapping in the immediate console + * i386/i386at/immc.c (immc_cnputc): Fix line wrapping. + + kern: remove superfluous file + * kern/server_loop.ch: Remove superfluous file. + + kern: improve error handling + * kern/bootstrap.c (boot_script_exec_cmd): Improve error handling. + +2015-07-09 Samuel Thibault + + Allow non-privileged tasks to wire 64KiB task memory + * doc/mach.texi (vm_wire): Document that the host port does not have to be + privileged. + * include/mach/mach_hosts.defs (vm_wire): Use mach_port_t instead of + host_priv_t. + * vm/vm_map.h (vm_map): Add user_wired field. + * vm/vm_map.c (vm_map_setup): Initialize user_wired field to 0. + (vm_map_pageable_common, vm_map_entry_delete, vm_map_copy_overwrite, + vm_map_copyout_page_list, vm_map_copyin_page_list): When switching + user_wired_count field of entry between 0 and non-0, accumulate the + corresponding size into the user_wired field of map. + * vm/vm_user.c (vm_wire): Turn host parameter into port parameter, and + inline a version of convert_port_to_host_priv which records whether the host + port is privileged or not. When it is not privileged, check whether + the additional amount to user_wired will overcome 64KiB. + +2015-07-07 Samuel Thibault + + Fix build with -O0 + * linux/src/include/linux/string.h (strcpy, strncpy, strcat, strncat, + strchr, strrchr, strlen, strnlen, strcmp, strncmp, memmove, + memscan): Comment out extern declarations. + * linux/dev/include/asm-i386/string.h (strcpy, strncpy, strcat, strncat, + strcmp, strncmp, strchr, strrchr, strlen, __memcpy, __constant_memcpy, + memmove, memchr, __memset_generic, __constant_c_memset, strnlen, + __constant_c_and_count_memset, memscan): Turn extern inline into static + inline. + * linux/dev/include/linux/fs.h (mark_buffer_uptodate): Likewise. + * linux/src/include/asm-i386/bitops.h (set_bit, clear_bit, change_bit, + test_and_set_bit, test_and_clear_bit, test_and_change_bit, test_bit, + find_first_zero_bit, find_next_zero_bit, ffz, ffs): Likewise. + * linux/src/include/asm-i386/io.h (virt_to_phys, phys_to_virt, __out##s, + __in##s, ins##s, outs##s): Likewise. + * linux/src/include/asm-i386/semaphore.h (down, down_interruptible, up): + Likewise. + * linux/src/include/asm-i386/segment.h [!__OPTIMIZE]: Emit an ud2 instruction + instead of an undefined reference. + +2015-07-05 Samuel Thibault + + Add missing distributed file + * Makefrag.am (EXTRA_DIST): Add ipc/notify.defs. + +2015-06-30 Justus Winter <4winter@informatik.uni-hamburg.de> + + Fix re-configuring out-of-tree builds + Previously, running `../configure ...' to reconfigure an out-of-tree + build would link `machine' to `i386/i386' instead of `../i386/i386' + (i.e. point to the build directory instead to the source) if + `i386/i386' also exists in the build directory because of a previous + build. + + * configfrag.ac: Prefix machine link target with `$srcdir'. + +2015-06-30 Samuel Thibault + + Fix restoring interrupts on timeout + * linux/dev/drivers/block/ahci.c (ahci_identify): Restore flags before + returning on timeout. + +2015-06-29 Samuel Thibault + + Print about powered-down AHCI ports + * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Print messages when + device is present but powered down. + +2015-06-28 Justus Winter <4winter@informatik.uni-hamburg.de> + + ddb: automatically display stack traces + * ddb/db_trap.c (db_task_trap): Automatically display stack traces if + an unexpected trap occurs. + +2015-06-28 Justus Winter <4winter@informatik.uni-hamburg.de> + + i386: improve the immediate console + Improve the immediate console to the point that it can be enabled and + display e.g. assertion failures from very early on (i.e. from + `c_boot_entry'). + + * device/cons.h (romgetc, romputc): New declarations. + * i386/configfrag.ac: Add configuration variable. + * i386/i386at/conf.c (dev_name_list): Add entry. + * i386/i386at/cons_conf.c (constab): Add entry. + * i386/i386at/immc.c: Add missing includes. + (immc_cnprobe, immc_cninit, immc_cngetc, immc_romputc): New functions. + (immc_cnputc): Fix signature, use virtual addresses. + * i386/i386at/immc.h: New file. + * i386/i386at/kd.c: Use `#if ENABLE_IMMEDIATE_CONSOLE'. + * i386/i386at/kd.h (kd_setpos): Add missing declaration. + * i386/i386at/model_dep.c (c_boot_entry): Install immediate console as + early boot console. + +2015-06-26 Justus Winter <4winter@informatik.uni-hamburg.de> + + i386: add comment + * i386/i386at/model_dep.c (rebootflag): Explain flag. + +2015-06-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: fix error handling + This avoids calling `thread_deallocate' with an uninitialized value, + as found by the Clang Static Analyzer. + + * kern/thread.c (kernel_thread): Fix error handling. + +2015-06-09 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: add function attributes to the printf-functions + * kern/printf.h (sprintf, snprintf, vsnprintf, printf): Add the + `printf' function attribute that allows the compiler to check the + format strings and arguments. + +2015-06-05 Flávio Cruz + + Fix typo + * vm/vm_kern.c (kmem_alloc_aligned): Fix typo. + + Use custom port macros. + * ipc/ipc_port.c (ipc_port_alloc_special): Use ip_alloc and ip_lock_init + macros instead of manually inlining them. + +2015-05-31 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: fix typo + * ipc/notify.defs: Fix typo. + + Include the notify protocol in `gnumach.msgids' + * Makefrag.am (gnumach.msgids): Add `notify.msgids' as prerequisite. + * Makerules.mig.am: Add rule to generate the list of message ids when + neither the client nor the server stubs are required. + * ipc/notify.defs: New file. + +2015-05-29 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: fix argument handling + Previously, the processor argument was not checked. If called with a + non-processor argument (like a task), `processor' is set to NULL, + triggering a page fault. Likewise for the other functions. + + * kern/processor.c (processor_get_assignment): Fix argument handling. + * kern/task.c (task_get_assignment): Likewise. + * kern/thread.c (thread_get_assignment): Likewise. + +2015-05-23 Justus Winter <4winter@informatik.uni-hamburg.de> + + Restrict `-fno-strict-aliasing' to the Linux drivers + * Makefile.am: Move `-fno-strict-aliasing'... + * linux/Makefrag.am: ... here. + + i386: avoid breaking the strict-aliasing rules + * i386/i386/pcb.c (switch_ktss): Cleanly convert the value. + + kern: avoid breaking the strict-aliasing rules + * kern/exception.c (exception_parse_reply): Use `BAD_TYPECHECK'. + + vm: drop unused `kmem_realloc' + * vm/vm_kern.c (kmem_realloc): Remove function. + (kmem_alloc_wired): Adopt comment. + * vm/vm_kern.h (kmem_realloc): Remove declaration. + +2015-05-23 Samuel Thibault + + Add stdint integer types in Linux glue + * linux/dev/include/linux/types.h (int8_t, uint8_t, int16_t, uint16_t, + int32_t, uint32_t, int64_t, uint64_t): New types. + +2015-05-22 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: drop remnants of the IPC tables + * ipc/ipc_table.c (ipc_table_entries): Remove. + (ipc_table_entries_size): Likewise. + (ipc_table_init): Remove initialization of `ipc_table_entries'. + (ipc_table_realloc): Remove function. + * ipc/ipc_table.h: Adjust comments. + (ipc_table_entries): Remove declaration. + (ipc_table_realloc): Likewise. + (it_entries_{alloc,reallocable,realloc,free}): Remove macros. + + ipc: drop size parameter from `ipc_space_create' + * ipc/ipc_space.c (ipc_space_create): Drop size parameter. + * ipc/ipc_space.h (ipc_space_create): Adopt declaration, fix comment. + * kern/ipc_tt.c (ipc_task_init): Adopt accordingly. + +2015-05-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: inline key ipc entry lookup functions + Declare functions looking up IPC entries that were previously inlined + manually with `static inline' so that they will be inlined into the + fast paths by the compiler. + + * ipc/ipc_entry.c (ipc_entry_lookup, ipc_entry_get, + ipc_entry_dealloc): Move functions... + * ipc/ipc_space.h: ... here, and declare them as `static inline'. + * ipc/ipc_entry.h: Drop associated declarations. + +2015-05-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: replace the IPC table with a radix tree + Currently, the port names are mapped to an IPC object (e.g. a port) + using a table. This, however, requires large chunks of continuous + memory, and leads to scalability problems as virtual kernel memory is + a scarce resource. To avoid excessive overhead, non-contiguous port + names are spilled into a splay tree. + + Replace the IPC table with a radix tree. As the radix tree is able to + store non-contiguous names with reasonable overhead, we can drop the + splay tree as well. + + * ipc/ipc_entry.c (ipc_entry_tree_collision): Remove function. + (ipc_entry_cache): New variable. + (ipc_entry_lookup): Replace with a radix tree lookup. + (ipc_entry_get): The free list handling is changed a little. Adopt + accordingly. + (ipc_entry_free_name): New function. + (ipc_entry_alloc): Adopt accordingly. + (ipc_entry_alloc_name): Likewise. + (ipc_entry_dealloc): Likewise. + (ipc_entry_grow_table): Remove function. + * ipc/ipc_entry.h (struct ipc_entry): Update comment, add field for + name and free list, remove unused fields. + (ipc_entry_cache, ie_alloc, ie_free): New declarations. + (struct ipc_tree_entry): Remove. Also remove any related declarations. + (ipc_entry_grow_table): Remove declaration. + * ipc/ipc_init.c (ipc_bootstrap): Adopt initialization. + * ipc/ipc_kmsg.c (ipc_kmsg_copyout_header): Use `ipc_entry_alloc' + instead of re-coding it. Adopt free list handling. + (ipc_kmsg_copyout_object): Adopt free list handling, store the name. + * ipc/ipc_object.c (ipc_object_copyout): Likewise. + (ipc_object_copyout_multiname): Likewise. + * ipc/ipc_space.c (ipc_space_create): Initialize radix tree and free list. + Drop table and splay tree initialization. + (ipc_space_destroy): Free ipc entries and radix tree, remove table and + splay tree cleanup. + * ipc/ipc_space.h (struct ipc_space): Add radix tree, free list, and size. + Remove all fields related to the table and splay tree. + * ddb/db_print.c (db_port_iterate): Adopt iteration. + (db_lookup_port): Adopt lookup. + * include/mach_debug/ipc_info.h: Remove unused parts of the debug interface. + * include/mach_debug/mach_debug.defs: Likewise. + * include/mach_debug/mach_debug_types.defs: Likewise. + * ipc/mach_debug.c: Likewise. + * ipc/ipc_right.c (ipc_right_reverse): Adopt lookup, store name. + (ipc_right_check): Adopt removal. + (ipc_right_destroy): Likewise. + (ipc_right_dealloc): Likewise. + (ipc_right_delta): Likewise. + (ipc_right_copyin): Adopt insertion, adopt removal. + (ipc_right_copyin_two): Adopt removal. + (ipc_right_copyout): Adopt insertion, adopt removal. + (ipc_right_rename): Likewise, also update comment. + * ipc/mach_port.c (mach_port_names): Adopt iteration. + (mach_port_get_set_status): Likewise. + * ipc/port.h: Update comment. + * ipc/ipc_hash.c: Delete file. + * ipc/ipc_hash.h: Likewise. + * ipc/ipc_splay.c: Likewise. + * ipc/ipc_splay.h: Likewise. + * Makefrag.am (libkernel_a_SOURCES): Remove these files. + +2015-05-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: replace reverse hash table with a radix tree + Currently, there is a hash table mapping (space, object) tuples to + `ipc_entry' objects. This hash table is intertwined with the IPC + tables. There is one hash table per IPC space, but it is only for the + entries in the IPC table. This hash table is called `local' in the + source. All IPC entries being spilled into the splay tree are instead + mapped by a global hash table. + + Replace the local (i.e. per IPC space) reverse hash table with a radix + tree. + + * ipc/ipc_entry.c (ipc_entry_grow_table): Adjust accordingly. + * ipc/ipc_entry.h (struct ipc_entry): Adjust comment. + * ipc/ipc_hash.c: Adjust comment explaining the local lookup table. + (IPC_LOCAL_HASH_INVARIANT): New macro. + (ipc_hash_local_lookup): Use the new `ipc_reverse_lookup' function. + (ipc_hash_local_insert): Use the new `ipc_reverse_insert' function. + (ipc_hash_local_delete): Use the new `ipc_reverse_remove' function. + * ipc/ipc_space.c (ipc_space_create): Initialize radix tree. + (ipc_space_destroy): Free radix tree. + * ipc/ipc_space.h (struct ipc_space): Add radix tree. + (ipc_reverse_insert): New function. + (ipc_reverse_remove): Likewise. + (ipc_reverse_remove_all): Likewise. + (ipc_reverse_lookup): Likewise. + * ipc/ipc_right.c (ipc_right_clean): Update comment. + +2015-05-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + ipc: undo manual inlining of `ipc_entry_X' functions + Today we can rely on the compiler to inline functions. Undoing this + manual optimization is a first step to replace the IPC tables. + + * ipc/mach_msg.c (mach_msg_trap): Undo the manual inlining of + `ipc_entry_lookup', `ipc_entry_dealloc', and `ipc_entry_get'. + * ipc/ipc_kmsg.c (ipc_kmsg_copyin_header, ipc_kmsg_copyout_header): Likewise. + * kern/exception.c (exception_raise): Likewise. + * kern/ipc_mig.c (fast_send_right_lookup): Likewise. + +2015-05-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: add radix tree library + Import a radix tree library from Richard Braun's librbraun. + + * Makefile.am (clib_routines): Steal `__ffsdi2'. + * Makefrag.am (libkernel_a_SOURCES): Add new files. + * kern/rdxtree.c: New file. + * kern/rdxtree.h: Likewise. + * kern/rdxtree_i.h: Likewise. + * kern/startup.c (setup_main): Initialize radix tree library. + +2015-05-20 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: gracefully handle resource shortage + * kern/thread.c (stack_alloc): Report resource shortage. + * kern/sched_prim.h (stack_alloc): Adjust declaration accordingly. + * kern/thread_swap.c (thread_doswapin): Report resource shortage. + (swapin_thread_continue): If the swap-in fails, put the thread back on + the queue and go back to sleep. + * kern/thread_swap.h (thread_doswapin): Adjust declaration accordingly. + + vm: gracefully handle resource shortage + * vm/vm_object.c (vm_object_copy_call): Gracefully handle resource + shortage by doing the allocation earlier and aborting the function if + unsuccessful. + + kern: gracefully handle resource shortage + * kern/task.c (task_create): Gracefully handle resource shortage. + +2015-05-19 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: import `macros.h' from x15 + Import the macro definitions from the x15 kernel project, and replace + all similar definitions littered all over the place with it. + + Importing this file will make importing code from the x15 kernel + easier. We are already using the red-black tree implementation and + the slab allocator from it, and we will import even more code in the + near future. + + * kern/list.h: Do not define `structof', include `macros.h' instead. + * kern/rbtree.h: Likewise. + * kern/slab.c: Do not define `ARRAY_SIZE', include `macros.h' instead. + * i386/grub/misc.h: Likewise. + * i386/i386/xen.h: Do not define `barrier', include `macros.h' instead. + * kern/macro_help.h: Delete file. Replaced by `macros.h'. + * kern/macros.h: New file. + * Makefrag.am (libkernel_a_SOURCES): Add new file, remove old file. + * device/dev_master.h: Adopt accordingly. + * device/io_req.h: Likewise. + * device/net_io.h: Likewise. + * i386/intel/read_fault.c: Likewise. + * ipc/ipc_kmsg.h: Likewise. + * ipc/ipc_mqueue.h: Likewise. + * ipc/ipc_object.h: Likewise. + * ipc/ipc_port.h: Likewise. + * ipc/ipc_space.h: Likewise. + * ipc/ipc_splay.c: Likewise. + * ipc/ipc_splay.h: Likewise. + * kern/assert.h: Likewise. + * kern/ast.h: Likewise. + * kern/pc_sample.h: Likewise. + * kern/refcount.h: Likewise. + * kern/sched.h: Likewise. + * kern/sched_prim.c: Likewise. + * kern/timer.c: Likewise. + * kern/timer.h: Likewise. + * vm/vm_fault.c: Likewise. + * vm/vm_map.h: Likewise. + * vm/vm_object.h: Likewise. + * vm/vm_page.h: Likewise. + +2015-05-17 Justus Winter <4winter@informatik.uni-hamburg.de> + + i386: avoid compiler warning + * i386/i386/phys.c (pmap_zero_page, pmap_copy_page, copy_to_phys, + copy_from_phys): Avoid compiler warning about `map' being used + uninitialized. + +2015-05-14 Justus Winter <4winter@informatik.uni-hamburg.de> + + i386: use macro to compute address of saved registers + * i386/i386/pcb.c (stack_attach): Use `USER_REGS'. + (stack_handoff): Likewise. + +2015-05-02 Samuel Thibault + + Fix semaphore failure path special calling convention + * linux/src/include/asm-i386/semaphore.h (down): Pass semaphore address to + down_failed through ecx. + (down_interruptible): Likewise to down_failed_interruptible. + (up): Likewise to up_wakeup. + +2015-05-02 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: fix comment + * kern/rbtree.h: Fix comment. + +2015-05-02 Samuel Thibault + + Fix warning + * i386/i386at/rtc.c (rtcget, rtcput): Make functions take an rtc_st + structure which it casts to char * itself. + + Fix warnings + * device/ds_routines.c (device_open, ds_open_done, device_close, + device_write, device_write_inband, ds_write_done, device_read, + device_read_inband, ds_read_done, device_set_status, mach_device_get_status, + device_set_filter, device_map, ds_no_senders): Convert from K&R declaration, + fix type of `device' into void*. + + Fix block_io_mmap prototype + * device/blkio.c (block_io_mmap): Fix prototype of dummy function. + * device/blkio.h (block_io_mmap): Likewise. + +2015-05-01 Samuel Thibault + + Use gnu89 inline style + * Makefile.am (AM_CFLAGS): Add -fgnu89-inline option. + +2015-05-01 Samuel Thibault + + Replace clobbers with earlyclobbers + Newer gccs consider the former "impossible" + + * linux/src/include/asm-i386/bitops.h (find_first_zero_bit): Replace + clobbers with earlyclobbers. + * linux/src/include/asm-i386/semaphore.h (down, down_interruptible, up): + Likewise. + +2015-04-30 Samuel Thibault + + Fix build with gcc-5 + * linux/src/include/linux/compiler-gcc5.h: New file. + +2015-04-24 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: avoid hardcoding the lowest priority + The number of priorities has been changed from 32 to 50 in + 6a234201081156e6d5742e7eeabb68418b518fad. + + * kern/syscall_subr.c (thread_depress_priority): Avoid hardcoding the + lowest priority. + +2015-04-23 Justus Winter <4winter@informatik.uni-hamburg.de> + + kern: disable stack allocation counters by default + Disable the stack allocation counters by default. Casual checking + revealed that the hits-to-miss ratio is excellent. + + * kern/thread.c (stack_alloc_{hits,misses,max}): Move variables... + * kern/counters.c: ... here, and add the usual counter prefix. + * kern/counters.h: New declarations. + +2015-04-23 Samuel Thibault + + Avoid accessing ip_protected_payload without the lock. + * ipc/ipc_kmsg.c (ipc_kmsg_copyout_header): Avoid accessing + dest->ip_protected_payload without the lock. + * ipc/mach_msg.c (ipc/mach_msg.c): Avoid accessing + dest_port->ip_protected_payload without the lock. + + Prepend 0x to hexadecimal offset + * i386/i386/db_trace.c (db_i386_stack_trace): Prepend 0x to hexadecimal offset. + 2015-04-10 Thomas Schwinge GNU Mach 1.5. @@ -3313,6 +5018,31 @@ Increase kernel map entry pool size * vm/vm_map.h (KENTRY_DATA_SIZE): Set to 256 pages. +2013-10-09 Richard Braun + + VM cache policy change + This patch lets the kernel unconditionnally cache non empty unreferenced + objects instead of using a fixed arbitrary limit. As the pageout daemon + evicts pages, it collects cached objects that have become empty. The + effective result is a graceful adjustment of the number of objects + related to memory management (virtual memory objects, their associated + ports, and potentially objects maintained in the external memory + managers). Physical memory can now be almost entirely filled up with + cached pages. In addition, these cached pages are not automatically + deactivated as objects can quickly be referenced again. + + There are problems with this patch however. The first is that, on + machines with a large amount of physical memory (above 1 GiB but it also + depends on usage patterns), scalability issues are exposed. For example, + file systems which don't throttle their writeback requests can create + thread storms, strongly reducing system responsiveness. Other issues + such as linear scans of memory objects also add visible CPU overhead. + + The second is that, as most memory is used, it increases the chances of + swapping deadlocks. Applications that map large objects and quickly + cause lots of page faults can still easily bring the system to its + knees. + 2013-09-28 Samuel Thibault Add files missing in distrib tarball