summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2013-04-21Rework slab lists handlingRichard Braun
Don't enforce strong ordering of partial slabs. Separating partial slabs from free slabs is already effective against fragmentation, and sorting would sometimes cause pathological scalability issues. In addition, store new slabs (whether free or partial) in LIFO order for better cache usage. * kern/slab.c (kmem_cache_grow): Insert new slab at the head of the slabs list. (kmem_cache_alloc_from_slab): Likewise. In addition, don't sort partial slabs. (kmem_cache_free_to_slab): Likewise. * kern/slab.h: Remove comment about partial slabs sorting.
2013-04-21Fix locking error in the slab allocatorRichard Braun
* kern/slab.c (kmem_cache_free): Lock cache before releasing an object to the slab layer.
2013-04-08Add -fno-optimize-sibling-calls option for better kdb tracesSamuel Thibault
* Makefrag.am (AM_CFLAGS) [enable_kdb]: Add -fno-optimize-sibling-calls option.
2013-03-11Update BASEPRI_USERSamuel Thibault
* kern/sched.h (BASEPRI_USER): Increase to 25.
2013-03-11Fix build without kdbSamuel Thibault
* i386/i386/db_interface.h [! MACH_KBD] (db_set_hw_watchpoint, db_clear_hw_watchpoint, db_dr): Do not declare functions.
2013-03-06Increase number of prioritiesSamuel Thibault
* kern/sched.h (NRQS): Increase to 50.
2013-03-05Do not hardcode maximum priority valueSamuel Thibault
* kern/sched_prim.c (do_priority_computation): Replace 31 with NRQS - 1. idle_thread: Likewise.
2013-02-04Include machine/db_interface instead of hardcoding function prototypesSamuel Thibault
* ddb/db_access.c: Include <machine/db_interface.h>. (db_read_bytes, db_write_bytes): Remove functions prototypes. (db_get_task_value): Fix calling db_read_bytes. (db_put_task_value): Fix calling db_write_bytes. * ddb/db_watch.c: Include <machine/db_interface.h>. (db_set_hw_watchpoint, db_clear_hw_watchpoint): Remove functions prototypes.
2013-02-04Plug hw debug register support into kdbSamuel Thibault
Make the `watch' command use hw debug registers whenever possible. * ddb/db_watch.c (db_set_hw_watchpoint, db_clear_hw_watchpoint): Add functions prototypes. (db_set_watchpoints): Try to call db_set_hw_watchpoint. (db_clear_watchpoints): Call db_clear_hw_watchpoint. * i386/i386/db_interface.c: Include <ddb/db_watch.h> (db_set_hw_watchpoint): Take a db_watchpoint_t WATCH parameter instead of its content. Remove support for clearing a debug register. (db_clear_hw_watchpoint): Add function. * i386/i386/db_interface.h: Include <ddb/db_watch.h>. (db_set_hw_watchpoint): Fix function prototype. (db_clear_hw_watchpoint): Add function prototype. * i386/i386/db_machdep.h: Do not include <machine/db_interface.h>
2013-02-04Document dwatchSamuel Thibault
* doc/mach.texi: Add dwatch documentation.
2013-02-04Add x86 hardware debugging register supportSamuel Thibault
This adds using the x86 hardware debugging registers, either from the kernel through db_set_hw_watchpoint, or from userland through i386_DEBUG_STATE. While the kernel is using the registers, the userland values are ignored. * i386/i386/db_interface.c (kernel_dr, ids): New variables. (db_load_context, db_get_debug_state, db_set_debug_state, db_dr, db_set_hw_watchpoint): New functions. (kdb_trap): Use get_dr* instead of dr_addr[]. * i386/i386/db_interface.h (db_user_to_kernel_address, db_set_hw_watchpoint) (db_dr, db_get_debug_state, db_set_debug_state, db_load_context): Add functions prototypes. (dr0, dr1, dr2, dr3): Remove functions prototypes. * i386/i386/locore.S (dr6, dr0, dr1, dr2, dr3): Remove functions. (dr_msk, dr_addr): Remove variables. * i386/include/mach/i386/thread_status.h (i386_DEBUG_STATE): Add macro. (i386_debug_state): Add structure. (i386_DEBUG_STATE_COUNT): Add macro. * i386/i386/thread.h: Include <mach/machine/thread_status.h>. (i386_machine_state): Add `struct i386_debug_state ids' field. * i386/i386/pcb.c: Include <i386/db_interface.h>. (switch_ktss): Call db_load_context. (thread_setstatus, thread_getstatus): Add I386_DEBUG_STATE case. * i386/i386/proc_reg.h (get_dr0, set_dr0, get_dr1, set_dr1, get_dr2, set_dr2, get_dr3, set_dr3, get_dr6, set_dr6, get_dr7, set_dr7): Add macros.
2013-02-03Prevent the kernel from making any FPU useSamuel Thibault
* i386/Makefrag.am (AM_CFLAGS): Add -mno-3dnow -mno-mmx -mno-sse -mno-sse2.
2013-01-31Implement pmap_map_mfn for the PVH caseSamuel Thibault
* i386/intel/pmap.c (pmap_map_mfn) [MACH_XEN && !MACH_PV_PAGETABLES]: Implement.
2013-01-31Make the PVH variant get sure that the support is available in the hypervisorSamuel Thibault
* i386/xen/xen_boothdr.S (FEATURES): Mark PVH features as required.
2013-01-30Add comment for TODOSamuel Thibault
2013-01-30Do not use 4gb segment assistance in PVHSamuel Thibault
* i386/i386/gdt.c (gdt_init) [MACH_PV_DESCRIPTORS && !MACH_PV_PAGETABLES]: Do not enable VMASST_TYPE_4gb_segments. * i386/i386/trap.c (user_trap): Do not handle trap 15, 4gb segment assist notification.
2013-01-30Drop spurious inclusionSamuel Thibault
* i386/i386/vm_param.h [MACH_XEN && !MACH_PV_PAGETABLES]: Do not include <xen/public/xen.h>.
2013-01-30Increase VM_MAX_KERNEL_ADDRESS for PVH caseSamuel Thibault
* i386/i386/vm_param.h (VM_MAX_KERNEL_ADDRESS) [MACH_XEN && !MACH_PV_PAGETABLES]: Remove hypervisor area from VM_MAX_KERNEL_ADDRESS restriction.
2013-01-28More ifdef fixes for ring1 support and pv descriptors supportSamuel Thibault
* i386/i386/idt_inittab.S: Turn MACH_XEN test into MACH_PV_DESCRIPTORS test. * i386/i386/fpu.c: Turn appropriate MACH_HYP/XEN tests into MACH_RING1 tests. * i386/i386/ktss.c: Likewise. * i386/i386/locore.S: Likewise. * i386/i386/mp_desc.c: Likewise. * i386/i386/pcb.c: Likewise. * i386/i386/proc_reg.h: Likewise. * i386/i386/trap.c: Likewise.
2013-01-28Add initial code for disabling PV pagetablesSamuel Thibault
* xen/configfrag.ac (--disable-pv-pagetables): Add option. * i386/xen/xen_boothdr.S (XEN_ELFNOTE_FEATURES) [!MACH_PV_PAGETABLES]: Add writable_page_tables. * i386/i386/gdt.c: Turn appropriate MACH_XEN/MACH_HYP tests into MACH_PV_PAGETABLES tests. * i386/i386/i386asm.sym: Likewise * i386/i386/ldt.c: Likewise * i386/i386/locore.S: Likewise * i386/i386/proc_reg.h: Likewise * i386/i386/user_ldt.c: Likewise * i386/i386/vm_param.h: Likewise * i386/i386/xen.h: Likewise * i386/i386at/model_dep.c: Likewise * i386/intel/pmap.h: Likewise * include/mach/xen.h: Likewise * xen/console.c: Likewise * xen/store.c: Likewise * i386/intel/pmap.c: Likewise. Define pmap_map_mfn as TODO stub.
2013-01-28Fix commentsSamuel Thibault
2013-01-28Fix build with --disable-pseudo-physSamuel Thibault
* i386/i386/i386asm.sym (PFN_LIST) [!MACH_PSEUDO_PHYS]: Do not define.
2013-01-28Add initial code for disabling ring1 xen executionSamuel Thibault
* xen/configfrag.ac (--disable-ring1): Add option. * i386/xen/xen_boothdr.S (XEN_ELFNOTE_FEATURES) [!MACH_RING1]: Add supervisor_mode_kernel. * i386/i386/seg.h (KERNEL_RING) [!MACH_RING1]: Set macro to 0.
2013-01-28Add initial code for disabling PV descriptorsSamuel Thibault
* xen/configfrag.ac (--disable-pv-descriptors): Add option * i386/xen/xen_boothdr.S (XEN_ELFNOTE_FEATURES) [!MACH_PV_DESCRIPTORS]: Add writable_descriptor_tables. * i386/i386/gdt.c: Turn appropriate MACH_XEN/MACH_HYP tests into MACH_PV_DESCRIPTORS tests. * i386/i386/gdt.h: Likewise. * i386/i386/i386asm.sym: Likewise. * i386/i386/idt.c: Likewise. * i386/i386/idt_inittab.S: Likewise. * i386/i386/ldt.c: Likewise. * i386/i386/pcb.c: Likewise. * i386/i386/seg.h: Likewise. * i386/i386/user_ldt.c: Likewise. * i386/i386/user_ldt.h: Likewise.
2013-01-22Add the mach_print debugging system callRichard Braun
The purpose of this system call is to help debugging in situations where it's desirable to bypass the mach_msg call entirely. * include/mach/syscall_sw.h (mach_print): Generate system call code. * kern/syscall_subr.c: Include <kern/printf.h>. [MACH_KDB] (mach_print): New function. * kern/syscall_subr.h (mach_print): New prototype. * kern/syscall_sw.c [MACH_KDB] (mach_trap_table): Declare mach_print system call.
2013-01-13Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumachSamuel Thibault
2013-01-13Fix task stats incrementationsSamuel Thibault
* vm/vm_fault.c (vm_fault_page): Properly increment current_task()->zero_fills and cow_faults.
2013-01-13Add statistics for task_events_infoDavid Höppner
* ipc/ipc_mqueue.c (ipc_mqueue_send, ipc_mqueue_receive): Increment counters for message sent and received. * kern/ipc_kobject.c (ipc_kobject_server): Increment sent and received counters for the kernel task. * kern/task.c (task_create): Zero statistics. * kern/task.c (task_info): Add task_events_info call. * kern/task.h: Add statistics. * vm/vm_fault.c (vm_fault_page): Increment zero_fills, pageins, reactivations and cow_faults counters. * vm/vm_fault.c (vm_fault_wire_fast): Increment faults counters. * vm/vm_pageout.c (vm_pageout_scan): Increment reactivations counter.
2013-01-08Fix slab cache list lockingRichard Braun
This problem was overlooked because of simple locks being no-ops. * kern/slab.c (slab_collect): Fix lock name to kmem_cache_list_lock. (host_slab_info): Likewise.
2013-01-08Add function to dump a raw summary of the slab allocator stateRichard Braun
The purpose of this function is to allow kernel code to display the state of the slab caches in situations where the host_slab_info RPC wouldn't be available, e.g. before a panic. * kern/slab.c (slab_info): New function. * kern/slab.h: Add declaration for slab_info.
2013-01-06Double KENTRY_DATA_SIZESamuel Thibault
* vm/vm_map.h (KENTRY_DATA_SIZE): Bump from 32 pages to 64 pages.
2013-01-04Fix compilation warning implicit function declaration kdbprintfDavid Höppner
When kernel debugger support is requested ipc and vm need the prototype for the debugger function kdbprintf. * ddb/db_output.h: Add prototype for kdbprintf. * ipc/ipc_object.c: Add include file ddb/db_output.h * ipc/ipc_port.c: Likewise. * ipc/ipc_pset.c: Likewise. * vm/vm_map.c: Likewise. * vm/vm_object.c: Likewise. * vm/vm_resident.c: Likewise.
2012-12-27Fix slow boot in virtualboxSamuel Thibault
By disabling some of the most slow drivers by default, and giving progress feedback to the user. * linux/configfrag.ac (CONFIG_SCSI_NCR53C7xx, CONFIG_SCSI_AIC7XXX, CONFIG_SCSI_GDTH): Disable by default * linux/src/drivers/scsi/eata.c (__initfunc): Don't feed line in probe message. * linux/src/drivers/scsi/hosts.c (scsi_init): Print SCSI probe progress.
2012-12-27Fix spurious error on accessing fd1Samuel Thibault
Cherry picked from Linux kernel commit 76c25284e0d845bff4ee1031721556148af4db1c * linux/dev/drivers/block/floppy.c (config_types): Clear from `allowed_drive_mask' floppy drives whose cmos type is 0.
2012-12-23Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumachSamuel Thibault
2012-12-23Make thread_suspend wait for !TH_UNINTSamuel Thibault
0a55db5 made thread_suspend return KERN_FAILURE when the target thread is in TH_UNINT state. That however is not currently handled by libc, and it's more useful to just wait for the thread to get interruptible. * kern/sched_prim.c (thread_invoke): Wake NEW_THREAD->STATE for thread_suspend. * kern/thread.c (thread_suspend): Wait on NEW_THREAD->STATE as long as THREAD has TH_UNINT.
2012-12-21ide: Increase WAIT_DRQ to accomodate some CF cards and SSD drives.David S. Miller
Based upon a patch by Philippe De Muyter, and feedback from Mark Lord and Robert Hancock. As noted by Mark Lord, the outdated ATA1 spec specifies a 20msec timeout for setting DRQ but lots of common devices overshoot this. Signed-off-by: David S. Miller <davem@davemloft.net> (cherry picked from Linux kernel commit 602da297e293eb2cbd28dcdbbe247593a46a853a) * linux/src/drivers/block/ide.h (WAIT_DRQ): Increase to 1 s.
2012-12-21IDE disk drives with unusual C/H/S.Thomas Schwinge
* linux/src/drivers/block/ide.c: Partially update to Linux 2.0.40 code.
2012-12-05Fix kernel task creation timeRichard Braun
The mapable_time_init function is called before machine_init, but the latter sets the system boot time. Fix their calling order. * kern/startup.c (setup_main): Call machine_init before mapable_time_init.
2012-12-04Strongly reduce risks of name capture in rbtree macrosRichard Braun
* kern/rbtree.h (rbtree_lookup): Prefix local variable names with three underscores. (rbtree_lookup_nearest): Likewise. (rbtree_insert): Likewise. (rbtree_lookup_slot): Likewise. (rbtree_insert_slot): Rewrite as an inline function.
2012-11-20Fix calls to vm_map when size is 0Richard Braun
* vm/vm_map.c (vm_map_enter): return KERN_INVALID_ARGUMENT if size is 0. * vm/vm_user.c (vm_map): Likewise.
2012-11-19Fix compilation error with older versions of GCCMatthew Leach
Some versions of GCC will error if you define a type twice (even if the definition is the same). The NCR53C8XX SCSI driver defines 'vm_offset_t', this is also defined in vm_types.h and will therefore cause a compilation error depending on the GCC version. * linux/src/drivers/scsi/ncr53c8xx.c [!MACH] (vm_offset_t, vm_size_t): Don't define types.
2012-09-23Fix gnumach_server_routine prototypeSamuel Thibault
* kern/ipc_kobject.c (ipc_kobject_server): Set gnumach_server_routine prototype to mig_routine_t.
2012-09-23Add missing file for page statisticsRichard Braun
* kern/gnumach.srv: New file.
2012-09-23Add missing file for page statisticsRichard Braun
* include/mach/vm_cache_statistics.h: New file
2012-09-23Fix panic on irq >= 16Gianluca Guida
* linux/src/drivers/net/pci-scan.c (pci_drv_register): Skip device if we are getting an invalid IRQ >= 16 and different from 255 (it happens in some motherboard).
2012-09-23Update DMA auto-enabling, make forcing DMA an optionSergio Lopez
* linux/configfrag.ac (--enable-ide-forcedma): Add option. * linux/src/drivers/block/ide.c (ide_probe_promise_20246): Do not call ide_init_promise. (probe_for_hwifs): Add SI, VIA, AL PCI probing. * linux/src/drivers/block/ide.h (hwif_chipset_t): Add hpt343, udma and ultra66 chipsets. * linux/src/drivers/block/triton.c: Update to upstream 1.14 version. * linux/src/include/linux/hdreg.h (HDIO_GET_IDENTITY): Rename to ... (HDIO_OBSOLETE_IDENTITY): ... new macro. (HDIO_GET_IDENTITY): New macro. (hd_driveid): Add fields for extended identification.
2012-09-23Fix CDROM door unlock on closure without device_closeAlexey Dejneka
* linux/dev/glue/block.c (device_open): Properly return devp on multiple opens. (device_close_forced): Renamed from device_close, when force parameter is 1, do not wait for open_count to become 0 before closing. (device_close): New function. (device_no_senders): New function. linux_block_emulation_ops: Use (device_no_senders).
2012-09-23Provide basic page cache statisticsRichard Braun
* Makefrag.am (EXTRA_DIST): Add kern/gnumach.srv. (include_mach_HEADERS): Add include/mach/gnumach.defs and include/mach/vm_cache_statistics.h (nodist_libkernel_a_SOURCES): Add kern/gnumach.server.defs.c, kern/gnumach.server.h, kern/gnumach.server.c, kern/gnumach.server.msgids, kern/gnumach.server.defs. * include/mach/mach_types.h: Add #include <mach/vm_cache_statistics.h>. * kern/ipc_kobject.c (ipc_kobject_server): Declare and call gnumach_server_routine. * vm/vm_object.c (vm_object_cached_pages): New variable. (vm_object_cached_pages_lock_data): Likewise. (vm_object_deallocate): Update number of cached pages. (vm_object_lookup): Likewise. (vm_object_lookup_name): Likewise. (vm_object_destroy): Likewise. (vm_object_enter): Likewise. * vm/vm_object.h (ref_count): Declare as int. (resident_page_count): Likewise. (vm_object_cached_count): Add extern declaration. (vm_object_cached_pages): Likewise. (vm_object_cached_pages_lock_data): Likewise. (vm_object_cached_pages_update): New macro. * vm/vm_resident.c (vm_page_insert): Assert resident page count doesn't overflow, update number of cached pages as appropriate. (vm_page_replace): Likewise. (vm_page_remove): Update number of cached pages as appropriate. * vm/vm_user.c: Add #include <mach/vm_cache_statistics.h>. (vm_cache_statistics): New function. * vm/vm_user.h: Add #include <mach/mach_types.h>. (vm_cache_statistics): New declaration. * include/mach/gnumach.defs: New file.
2012-08-24Store threads waiting on a message queue in LIFO orderRichard Braun
* ipc/ipc_thread.h (ipc_thread_enqueue_macro): Insert thread at the head of the list instead of the tail.