summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2015-07-26kern/slab: move internal data to slab_i.hRichard Braun
As it's done for other modules, this separation makes the public interface easy to identify.
2015-07-26kern/slab: rework buffer-to-slab lookupRichard Braun
Instead of using a red-black tree, rely on the VM system to store kmem specific private data.
2015-07-26kern/slab: remove the KMEM_CACHE_NORECLAIM flagRichard Braun
Don't encourage anyone to use non reclaimable pools of resources, it's a Bad Thing To Do.
2015-07-26vm: verbatim import of x15's physical page allocatorJustus Winter
2015-07-26kern: remove the list of free stacksJustus Winter
* kern/counters.c: Remove relevant counters. * kern/counters.h: Likewise. * kern/thread.c (stack_free_{list,count,limit}): Drop variables. (stack_next): Remove macro. (stack_alloc_try): Allocate stack using the slab allocator. (stack_alloc): Merely call `stack_alloc_try'. (stack_free): Adopt accordingly.
2015-07-26kern: allocate kernel stacks using the slab allocatorJustus Winter
* kern/slab.c (kmem_cache_init): Relax alignment restriction. * kern/thread.c (stack_cache): New variable. (stack_alloc): Use the slab allocator. (stack_collect): Adjust accordingly. (thread_init): Initialize `stack_cache'.
2015-07-26kern: use a general lock for the IPC structuresfix-ipc-space-locking-2015-07-27Justus Winter
* ipc/ipc_thread.h (ith_{lock_init,lock,unlock}): Use a general lock. * kern/task.h (struct task): Use a general lock for `itk_lock_data'. (itk_{lock_init,lock,unlock}): Use a general lock. * kern/thread.h (struct thread): Use a general lock for `ith_lock_data'.
2015-07-26vm/object: use a general lock to protect vm objectsJustus Winter
* vm/vm_object.h (struct vm_object): Use a general lock, adapt macros.
2015-07-26kern/lock: add lock_takenJustus Winter
* kern/lock.h (lock_taken): New macro.
2015-07-26vm/object: use a general lock to protect the object cacheJustus Winter
* vm/vm_object.c: Use a general lock to protect the object cache.
2015-07-26kern/bootstrap: tune lockingJustus Winter
* kern/bootstrap.c (boot_script_exec_cmd): Avoid holding the lock across the call to `thread_create'.
2015-07-26vm: use a general lock to protect the default memory managerJustus Winter
* vm/memory_object.c: Use a general lock to protect the default memory manager.
2015-07-26device: use general lock for port listsJustus Winter
* device/if_hdr.h (struct ifnet): Turn the port list locks into general locks. (port_list_{lock_init,lock,unlock): New macros. * device/net_io.c (net_filter, net_set_filter): Use new macros. * device/subrs.c (if_init_queues): Likewise.
2015-07-26device: use general lock for `mach_device'Justus Winter
* device/dev_hdr.h (struct mach_device): Turn lock into a general lock. (device_lock_init): New macro. (device_lock, device_unlock): Adapt accordingly. * device/dev_lookup.c (device_lookup): Use `device_lock_init'. * device/ds_routines.c (device_open): Adapt accordingly.
2015-07-26turn all_psets_lock into a general lockJustus Winter
2015-07-26yyy more general locks, crashes, maybe b/c interrupt handlerJustus Winter
2015-07-26kern: new function `thread_sleep_lock'Justus Winter
* kern/sched_prim.c (thread_sleep_lock): New function. * kern/sched_prim.h (thread_sleep_lock): New delcaration.
2015-07-25kern: add boot-time clock, use it for time stampsHEADmasterJustus Winter
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-25include: provide time-value substractionJustus Winter
* 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.
2015-07-25kern/lock: make sure the macros are only used on simple locksJustus Winter
* 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.
2015-07-25Disable the kernel tracing system XPRJustus Winter
* configfrag.ac (XPR_DEBUG): Disable tracing system.
2015-07-25ipc/space: inline reference countingJustus Winter
* ipc/ipc_space.h (is_{reference,release}): Use the macro variant.
2015-07-25Make sure the field offsets are updatedJustus Winter
* Makerules.am: Make sure the field offsets are updated.
2015-07-20kern/bootstrap: deallocate threadJustus Winter
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-19kern/bootstrap: deallocate taskJustus Winter
* kern/bootstrap.c (boot_script_free_task): Deallocate task.
2015-07-18linux/net: fix build with -O0Justus Winter
* linux/src/drivers/net/pci-scan.c: Avoid #erroring out.
2015-07-18kern/printf: do not serialize printf and coJustus Winter
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-18kern/lock: use compiler built-in functions to get return addressJustus Winter
* 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.
2015-07-18kern/bootstrap: fix lockingJustus Winter
* kern/bootstrap.c (boot_script_exec_cmd): Add missing unlock. (user_bootstrap): Likewise.
2015-07-18kern/slab: fix lockingJustus Winter
* kern/slab.c (host_slab_info): Fix locking.
2015-07-15ipc: use a general lock to protect IPC spacesJustus Winter
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-15ipc: fix the locking of the IPC entry allocation functionsJustus Winter
* 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.
2015-07-15i386: fix typoJustus Winter
* i386/intel/pmap.c: Fix typo.
2015-07-12ipc: avoid kmem_allocJustus Winter
* ipc/ipc_table.c (ipc_table_alloc): Unconditionally use `kalloc'. (ipc_table_free): Unconditionally use `kfree'.
2015-07-12vm: really fix traversing the list of inactive pagesJustus Winter
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-11kern: make sure the queue macros are only used on queuesJustus Winter
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-11vm: fix traversing the list of inactive pagesJustus Winter
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-10vm: drop debugging remnantsJustus Winter
* vm/vm_object.c (vm_object_terminate): Drop debugging remnants.
2015-07-10kern: make printf handle long long integersJustus Winter
* 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-09vm: fix panic messageJustus Winter
* vm/vm_kern.c (kmem_init): Fix panic message.
2015-07-09i386: fix line wrapping in the immediate consoleJustus Winter
* i386/i386at/immc.c (immc_cnputc): Fix line wrapping.
2015-07-09kern: remove superfluous fileJustus Winter
* kern/server_loop.ch: Remove superfluous file.
2015-07-09kern: improve error handlingJustus Winter
* kern/bootstrap.c (boot_script_exec_cmd): Improve error handling.
2015-07-09Allow non-privileged tasks to wire 64KiB task memorySamuel Thibault
* 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-07Fix build with -O0Samuel Thibault
* 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-05Add missing distributed fileSamuel Thibault
* Makefrag.am (EXTRA_DIST): Add ipc/notify.defs.
2015-06-30Fix re-configuring out-of-tree buildsJustus Winter
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-30Fix restoring interrupts on timeoutSamuel Thibault
* linux/dev/drivers/block/ahci.c (ahci_identify): Restore flags before returning on timeout.
2015-06-29Print about powered-down AHCI portsSamuel Thibault
* linux/dev/drivers/block/ahci.c (ahci_probe_dev): Print messages when device is present but powered down.
2015-06-28ddb: automatically display stack tracesJustus Winter
* ddb/db_trap.c (db_task_trap): Automatically display stack traces if an unexpected trap occurs.