Age | Commit message (Collapse) | Author |
|
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.
|
|
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.
|
|
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.
|
|
* ipc/ipc_entry.c (db_ipc_object_by_name): Remove forward declaration.
* ipc/ipc_entry.h (db_ipc_object_by_name): Add prototype.
|
|
* device/dev_lookup.c: Replace zalloc header, types and function calls
with their slab counterparts.
* device/dev_pager.c: Likewise.
* device/ds_routines.c: Likewise.
* device/io_req.h: Likewise.
* device/net_io.c: Likewise.
* i386/i386/fpu.c: Likewise.
* i386/i386/io_perm.c: Likewise.
* i386/i386/machine_task.c: Likewise.
* i386/i386/pcb.c: Likewise.
* i386/i386/task.h: Likewise.
* i386/intel/pmap.c: Likewise.
* i386/intel/pmap.h: Remove #include <kernel/zalloc.h>.
* include/mach_debug/mach_debug.defs (host_zone_info): Replace
routine declaration with skip directive.
(host_slab_info): New routine declaration.
* include/mach_debug/mach_debug_types.defs (zone_name_t)
(zone_name_array_t, zone_info_t, zone_info_array_t): Remove types.
(cache_info_t, cache_info_array_t): New types.
* include/mach_debug/mach_debug_types.h: Replace #include
<mach_debug/zone_info.h> with <mach_debug/slab_info.h>.
* ipc/ipc_entry.c: Replace zalloc header, types and function calls with
their slab counterparts.
* ipc/ipc_entry.h: Likewise.
* ipc/ipc_init.c: Likewise.
* ipc/ipc_marequest.c: Likewise.
* ipc/ipc_object.c: Likewise.
* ipc/ipc_object.h: Likewise.
* ipc/ipc_space.c: Likewise.
* ipc/ipc_space.h: Likewise.
* ipc/ipc_table.c (kalloc_map): Remove extern declaration.
* kern/act.c: Replace zalloc header, types and function calls with their
slab counterparts.
* kern/kalloc.h: Add #include <vm/vm_types.h>.
(MINSIZE): Remove definition.
(kalloc_map): Add extern declaration.
(kget): Remove prototype.
* kern/mach_clock.c: Adjust comment.
* kern/processor.c: Replace zalloc header, types and function calls with
their slab counterparts.
* kern/startup.c: Remove #include <kernel/zalloc.h>.
* kern/task.c: Replace zalloc header, types and function calls with
their slab counterparts.
* kern/thread.c: Likewise.
* vm/memory_object_proxy.c: Likewise.
* vm/vm_external.c: Likewise.
* vm/vm_fault.c: Likewise.
* vm/vm_init.c: Likewise.
* vm/vm_map.c: Likewise.
* vm/vm_object.c: Likewise.
* vm/vm_page.h: Remove #include <kernel/zalloc.h>.
* vm/vm_pageout.c: Replace zalloc header, types and function calls with
their slab counterparts.
* vm/vm_resident.c: Likewise.
(zdata, zdata_size): Remove declarations.
(vm_page_bootstrap): Don't steal memory for the zone system.
|
|
We're not in the eighties anymore. List arguments in function
prototypes and definitions for a lot of symbols. Also drop some unused
prototypes. I refrain from listing every changed symbol.
* chips/busses.h: Do as described.
* ddb/db_break.c: Likewise.
* ddb/db_break.h: Likewise.
* ddb/db_command.c: Likewise.
* ddb/db_command.h: Likewise.
* ddb/db_lex.c: Likewise.
* ddb/db_lex.h: Likewise.
* ddb/db_output.c: Likewise.
* ddb/db_output.h: Likewise.
* ddb/db_sym.h: Likewise.
* ddb/db_task_thread.c: Likewise.
* ddb/db_task_thread.h: Likewise.
* ddb/db_variables.h: Likewise.
* ddb/db_watch.c: Likewise.
* ddb/db_watch.h: Likewise.
* device/buf.h: Likewise.
* device/conf.h: Likewise.
* device/dev_hdr.h: Likewise.
* device/ds_routines.h: Likewise.
* device/if_ether.h: Likewise.
* device/io_req.h: Likewise.
* device/net_io.h: Likewise.
* i386/i386/io_port.h: Likewise.
* i386/i386/lock.h: Likewise.
* i386/i386/mp_desc.c: Likewise.
* i386/i386/mp_desc.h: Likewise.
* i386/i386/proc_reg.h: Likewise.
* i386/i386/user_ldt.h: Likewise.
* i386/i386at/kd_queue.h: Likewise.
* i386/i386at/kdsoft.h: Likewise.
* i386/intel/pmap.c: Likewise.
* i386/intel/pmap.h: Likewise.
* include/mach/mach_traps.h: Likewise.
* ipc/ipc_entry.h: Likewise.
* ipc/ipc_hash.h: Likewise.
* ipc/ipc_kmsg.h: Likewise.
* ipc/ipc_marequest.c: Likewise.
* ipc/ipc_marequest.h: Likewise.
* ipc/ipc_mqueue.h: Likewise.
* ipc/ipc_notify.h: Likewise.
* ipc/ipc_object.h: Likewise.
* ipc/ipc_port.h: Likewise.
* ipc/ipc_pset.h: Likewise.
* ipc/ipc_right.h: Likewise.
* ipc/ipc_space.h: Likewise.
* ipc/ipc_table.h: Likewise.
* ipc/mach_msg.c: Likewise.
* ipc/mach_msg.h: Likewise.
* kern/ast.c: Likewise.
* kern/ast.h: Likewise.
* kern/debug.c: Likewise.
* kern/debug.h: Likewise.
* kern/ipc_tt.c: Likewise.
* kern/ipc_tt.h: Likewise.
* kern/mach_factor.c: Likewise.
* kern/mach_factor.h: Likewise.
* kern/printf.c: Likewise.
* kern/printf.h: Likewise.
* kern/queue.h: Likewise.
* kern/sched.h: Likewise.
* kern/syscall_subr.c: Likewise.
* kern/syscall_subr.h: Likewise.
* kern/task.h: Likewise.
* kern/thread_swap.c: Likewise.
* kern/thread_swap.h: Likewise.
* kern/timer.h: Likewise.
* kern/xpr.c: Likewise.
* kern/xpr.h: Likewise.
* kern/zalloc.c: Likewise.
* kern/zalloc.h: Likewise.
* ipc/ipc_port.h: Don't include <ipc/ipc_space.h>.
* device/net_io.h: Include <device/if_hdr.h> and <device/io_req.h>.
* ipc/ipc_entry.h: Include <mach/mach_types.h> and <ipc/ipc_types.h>.
* ipc/ipc_kmsg.h: Include <ipc/ipc_object.h>, <ipc/ipc_types.h> and
<vm/vm_map.h>.
* ipc/ipc_marequest.h: Include <mach_debug/hash_info.h> and
<ipc/ipc_types.h>.
* ipc/ipc_object.h: Include <ipc/ipc_types.h>.
* ipc/ipc_right.h: Include <ipc/ipc_entry.h>.
* ipc/ipc_space.h: Include <mach/mach_types.h> and <ipc/ipc_types.h>.
* kern/ipc_tt.h: Include <mach/mach_types.h>.
* kern/sched.h: Include <kern/kern_types.h>.
* ipc/ipc_hash.c (ipc_hash_index_t): Move type definition...
* ipc/ipc_hash.h: ... into here.
|
|
* ddb/db_access.h: Fix obsolescent #else/#endif syntax.
* ddb/db_aout.c: Likewise.
* ddb/db_break.c: Likewise.
* ddb/db_break.h: Likewise.
* ddb/db_command.c: Likewise.
* ddb/db_command.h: Likewise.
* ddb/db_cond.c: Likewise.
* ddb/db_examine.c: Likewise.
* ddb/db_expr.c: Likewise.
* ddb/db_ext_symtab.c: Likewise.
* ddb/db_input.c: Likewise.
* ddb/db_lex.c: Likewise.
* ddb/db_macro.c: Likewise.
* ddb/db_mp.c: Likewise.
* ddb/db_output.c: Likewise.
* ddb/db_print.c: Likewise.
* ddb/db_run.c: Likewise.
* ddb/db_sym.c: Likewise.
* ddb/db_task_thread.c: Likewise.
* ddb/db_task_thread.h: Likewise.
* ddb/db_trap.c: Likewise.
* ddb/db_variables.c: Likewise.
* ddb/db_watch.c: Likewise.
* ddb/db_watch.h: Likewise.
* ddb/db_write_cmd.c: Likewise.
* device/dev_pager.c: Likewise.
* device/device_port.h: Likewise.
* device/device_types_kernel.h: Likewise.
* device/ds_routines.h: Likewise.
* device/errno.h: Likewise.
* device/if_ether.h: Likewise.
* device/if_hdr.h: Likewise.
* device/io_req.h: Likewise.
* device/net_io.c: Likewise.
* device/net_io.h: Likewise.
* i386/i386/ast_check.c: Likewise.
* i386/i386/cswitch.S: Likewise.
* i386/i386/db_disasm.c: Likewise.
* i386/i386/db_interface.c: Likewise.
* i386/i386/db_trace.c: Likewise.
* i386/i386/debug.h: Likewise.
* i386/i386/debug_i386.c: Likewise.
* i386/i386/debug_trace.S: Likewise.
* i386/i386/eflags.h: Likewise.
* i386/i386/gdt.h: Likewise.
* i386/i386/hardclock.c: Likewise.
* i386/i386/idt-gen.h: Likewise.
* i386/i386/ipl.h: Likewise.
* i386/i386/ktss.h: Likewise.
* i386/i386/kttd_interface.c: Likewise.
* i386/i386/ldt.h: Likewise.
* i386/i386/lock.h: Likewise.
* i386/i386/locore.S: Likewise.
* i386/i386/mp_desc.h: Likewise.
* i386/i386/pic.c: Likewise.
* i386/i386/pic.h: Likewise.
* i386/i386/pio.h: Likewise.
* i386/i386/pit.h: Likewise.
* i386/i386/seg.h: Likewise.
* i386/i386/thread.h: Likewise.
* i386/i386/trap.c: Likewise.
* i386/i386/trap.h: Likewise.
* i386/i386/vm_param.h: Likewise.
* i386/i386/vm_tuning.h: Likewise.
* i386/i386at/autoconf.c: Likewise.
* i386/i386at/blit.c: Likewise.
* i386/i386at/conf.c: Likewise.
* i386/i386at/fd.c: Likewise.
* i386/i386at/idt.h: Likewise.
* i386/i386at/immc.c: Likewise.
* i386/i386at/kd.c: Likewise.
* i386/i386at/kd_event.c: Likewise.
* i386/i386at/kd_mouse.c: Likewise.
* i386/i386at/model_dep.c: Likewise.
* i386/i386at/rtc.c: Likewise.
* i386/include/mach/i386/asm.h: Likewise.
* i386/include/mach/i386/eflags.h: Likewise.
* i386/include/mach/i386/mach_i386.defs: Likewise.
* i386/include/mach/i386/multiboot.h: Likewise.
* i386/include/mach/i386/trap.h: Likewise.
* i386/include/mach/i386/vm_types.h: Likewise.
* i386/include/mach/sa/stdarg.h: Likewise.
* i386/intel/pmap.c: Likewise.
* i386/intel/pmap.h: Likewise.
* include/alloca.h: Likewise.
* include/device/device_types.defs: Likewise.
* include/device/device_types.h: Likewise.
* include/device/disk_status.h: Likewise.
* include/device/net_status.h: Likewise.
* include/mach/mach.defs: Likewise.
* include/mach/memory_object.defs: Likewise.
* include/mach/std_types.defs: Likewise.
* include/mach_debug/hash_info.h: Likewise.
* include/mach_debug/ipc_info.h: Likewise.
* include/mach_debug/mach_debug.defs: Likewise.
* include/mach_debug/mach_debug_types.defs: Likewise.
* include/mach_debug/mach_debug_types.h: Likewise.
* include/mach_debug/vm_info.h: Likewise.
* include/mach_debug/zone_info.h: Likewise.
* include/sys/ioctl.h: Likewise.
* include/sys/time.h: Likewise.
* ipc/ipc_entry.h: Likewise.
* ipc/ipc_hash.h: Likewise.
* ipc/ipc_init.c: Likewise.
* ipc/ipc_kmsg.c: Likewise.
* ipc/ipc_kmsg.h: Likewise.
* ipc/ipc_marequest.c: Likewise.
* ipc/ipc_marequest.h: Likewise.
* ipc/ipc_mqueue.c: Likewise.
* ipc/ipc_mqueue.h: Likewise.
* ipc/ipc_notify.c: Likewise.
* ipc/ipc_notify.h: Likewise.
* ipc/ipc_object.c: Likewise.
* ipc/ipc_object.h: Likewise.
* ipc/ipc_port.c: Likewise.
* ipc/ipc_port.h: Likewise.
* ipc/ipc_pset.c: Likewise.
* ipc/ipc_pset.h: Likewise.
* ipc/ipc_right.c: Likewise.
* ipc/ipc_right.h: Likewise.
* ipc/ipc_space.c: Likewise.
* ipc/ipc_space.h: Likewise.
* ipc/mach_debug.c: Likewise.
* ipc/mach_msg.c: Likewise.
* ipc/mach_msg.h: Likewise.
* ipc/mach_port.c: Likewise.
* kern/act.c: Likewise.
* kern/assert.h: Likewise.
* kern/ast.c: Likewise.
* kern/ast.h: Likewise.
* kern/bootstrap.c: Likewise.
* kern/counters.c: Likewise.
* kern/counters.h: Likewise.
* kern/debug.h: Likewise.
* kern/exception.c: Likewise.
* kern/host.h: Likewise.
* kern/ipc_host.c: Likewise.
* kern/ipc_host.h: Likewise.
* kern/ipc_kobject.c: Likewise.
* kern/ipc_mig.c: Likewise.
* kern/ipc_tt.c: Likewise.
* kern/ipc_tt.h: Likewise.
* kern/kalloc.h: Likewise.
* kern/lock_mon.c: Likewise.
* kern/mach_clock.c: Likewise.
* kern/mach_factor.c: Likewise.
* kern/mach_param.h: Likewise.
* kern/machine.c: Likewise.
* kern/processor.c: Likewise.
* kern/profile.c: Likewise.
* kern/queue.h: Likewise.
* kern/sched.h: Likewise.
* kern/startup.c: Likewise.
* kern/syscall_emulation.h: Likewise.
* kern/syscall_subr.c: Likewise.
* kern/syscall_subr.h: Likewise.
* kern/syscall_sw.c: Likewise.
* kern/syscall_sw.h: Likewise.
* kern/task.h: Likewise.
* kern/thread_swap.h: Likewise.
* kern/time_out.h: Likewise.
* kern/time_stamp.c: Likewise.
* kern/time_stamp.h: Likewise.
* kern/timer.c: Likewise.
* kern/timer.h: Likewise.
* kern/xpr.c: Likewise.
* kern/xpr.h: Likewise.
* kern/zalloc.c: Likewise.
* kern/zalloc.h: Likewise.
* linux/dev/drivers/block/ide.c: Likewise.
* linux/dev/include/linux/blk.h: Likewise.
* linux/src/include/linux/cdrom.h: Likewise.
* linux/src/include/linux/md.h: Likewise.
* util/cpu.h: Likewise.
* vm/memory_object.c: Likewise.
* vm/memory_object.h: Likewise.
* vm/pmap.h: Likewise.
* vm/vm_debug.c: Likewise.
* vm/vm_external.h: Likewise.
* vm/vm_fault.c: Likewise.
* vm/vm_fault.h: Likewise.
* vm/vm_kern.h: Likewise.
* vm/vm_map.c: Likewise.
* vm/vm_map.h: Likewise.
* vm/vm_object.h: Likewise.
* vm/vm_pageout.c: Likewise.
* vm/vm_pageout.h: Likewise.
* vm/vm_user.h: Likewise.
|
|
|