|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|