summaryrefslogtreecommitdiff
path: root/viengoos/thread.h
AgeCommit message (Collapse)Author
2009-01-16Conditionalize use of l4 functions on USE_L4.Neal H. Walfield
/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * Makefile.am (L4_SUBDIRS): New variable. Set to l4 directories if USE_L4 is true, otherwise leave empty. (SUBDIRS): Remove libl4 and laden. Replace with $(USE_L4). Rearrange order. benchmarks/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * activity-distribution.c (main): Use vg_thread_id_t and hurd_myself, not l4_thread_id_t and l4_myself. [USE_L4]: Only l4_sleep in this case. * cache.c (helper_fork): Use hurd_myself, not l4_myself. (main) [USE_L4]: Only call _L4_kdb in this case. * shared-memory-distribution.c (main): Use vg_thread_id_t and hurd_myself, not l4_thread_id_t and l4_myself. hieronymus/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * hieronymus.c (main): Use uint64_t, not l4_uint64_t. (main) [USE_L4]: Don't sleep in this case. hurd/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * lock.h (ss_mutex_trace_add) [! USE_L4]: Set SS_LOCK_TRACE[I].TID to zero. * thread.h (hurd_myself) [USE_L4]: Return l4_myself. * trace.h (trace_buffer_add) [! USE_L4 && ! RM_INTERN]: Use hurd_myself, not l4_myself. [! USE_L4 && RM_INTERN]: Don't print a tid. libc-parts/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * _exit.c (_exit): Use sched_yield, not l4_yield. * backtrace.c [USE_L4]: Only include <l4.h> in this case. [! RM_INTERN]: Include <hurd/thread.h>. (backtrace_print) [! USE_L4 && ! RM_INTERN]: Use hurd_myself to get the caller's tid. [! USE_L4 && RM_INTERN]: Don't print a tid. * ia32-cmain.c [! USE_L4]: Don't include <l4/globals.h>, <l4/init.h>, <l4/stubs.h>, or <l4/stubs-init.h>. (cmain) [! USE_L4]: Don't call l4_init or l4_init_stubs. * loader.c: Don't include <l4.h>. Include <bits/wordsize.h> and <endian.h>. (loader_elf_load): Use __WORDSIZE, __BYTE_ORDER, __LITTLE_ENDIAN and __BIG_ENDIAN instead of their L4 names. * panic.c: Include <viengoos/thread.h>. [! RM_INTERN]: Include <hurd/thread.h>. (panic_) [! USE_L4 && ! RM_INTERN]: Use hurd_myself, not l4_myself. [! USE_L4 && RM_INTERN]: Don't print a tid. (panic_): Call sched_yield, not l4_yield. * process-spawn.c (process_spawn) [! USE_L4]: Don't pass utcb and kip information. Change sp from a l4_word_to to a uintptr_t. * profile.c [! USE_L4]: Don't include <l4.h>. (now) [__gnu_hurd_viengoos__ && ! USE_L4]: Just return 0. (struct profile_block): Change tid to a vg_thread_id_t. (MYSELF) [__gnu_hurd_viengoos__ && ! USE_L4]: Just return 0. * s_printf.c (io_buffer_flush) [! USE_L4]: Abort. libhurd-mm/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * anonymous.h: Don't include <l4/thread.h>. Include <viengoos/thread.h>. (struct anonymous_pager): Change fill_thread's type to vg_thread_id_t. * anonymous.c (fault): Use hurd_myself and vg_niltid, not l4_myself and l4_nilthread. * as-build.c: Don't include <l4.h>. * as.h: Include <hurd/thread.h>. Don't include <l4/types.h>. (as_lock): Change as_rwlock_owner's type to vg_thread_id_t. Use hurd_myself, not l4_myself. (as_lock_readonly): Likewise. (as_unlock): Likewise. * as.c [! USE_L4]: Don't include <l4/types.h> or <l4/kip.h>. Include <bits/wordsize.h>. (DATA_ADDR_MAX): Define for 64-bit virtual address spaces. (as_rwlock_owner): Change type to vg_thread_id_t. (as_alloc_slow) [USE_L4]: Only check for conflicts with the kip and utcb in this case. (as_init) [USE_L4]: Only reserve the kip and utcb in this case. * exceptions.c [USE_L4]: Only include <l4/thread.h> in this case. (l4_utcb_state_save) [! USE_L4]: Make a no-op. (l4_utcb_state_restore) [! USE_L4]: Likewise. (hurd_activation_handler_normal): Use hurd_myself, not l4_myself. * map.c: Don't include <l4.h>. (map_fault): Use VG_WRITE, not L4_FPAGE_WRITABLE. * storage.c (storage_check_reserve_internal): Change as_rwlock_owner's type to vg_thread_id_t. libpthread/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * sysdeps/viengoos/pt-spin.c [USE_L4]: Only include <l4.h> in this case. (_pthread_spin_lock): Only implement exponential back off if a sleep function is available. * sysdeps/viengoos/pt-stack-alloc.c: Don't include <l4.h>. * sysdeps/viengoos/pt-sysdep.c (sched_yield) [! USE_L4]: Just return. (init_routine) [USE_L4]: Abort. * sysdeps/viengoos/pt-sysdep.h [USE_L4]: Only include <l4.h> in this case. (_pthread_self) [! USE_L4]: Abort. * sysdeps/viengoos/pt-thread-alloc.c (__pthread_thread_alloc): Use hurd_myself, not l4_myself. [! USE_L4]: Abort. * sysdeps/viengoos/pt-thread-start.c (__pthread_thread_start): Use hurd_myself, not l4_myself. use uintptr_t, not l4_word_t. * sysdeps/viengoos/sig-sysdep.h (SIGNAL_DISPATCH_ENTRY) [! USE_L4]: Abort. (SIGNAL_DISPATCH_EXIT) [! USE_L4]: Likewise. libviengoos/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * viengoos/thread.h (VG_READ): Define. (VG_WRITE): Define. (VG_EXECUTE): Likewise. (VG_ACTIVATION_FAULT_INFO_PRINTF): Use them. ruth/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * ruth.c [USE_L4]: Only include <l4.h> in this case. (main) [! USE_L4]: Don't print resource manager's thread id. (main): Use uintptr_t, not l4_word_t. Use hurd_myself, not l4_myself. Use sched_yield, not l4_yield. Improve synchronization for object_reply_on_destruction test in case sched_yield is a no-op. viengoos/ 2009-01-16 Neal H. Walfield <neal@gnu.org> * cap.h: Don't include <l4.h>. * mutex.h [USE_L4]: Only include <l4/thread.h> in this case. (ss_mutex_t) [! USE_L4]: Define to be an int. (ss_mutex_lock) [! USE_L4]: Make a no-op. (ss_mutex_unlock) [! USE_L4]: Likewise. (ss_mutex_trylock) [! USE_L4]: Likewise. * object.h [USE_L4]: Only include <l4.h> in this case. (object_desc_unmap) [! USE_L4]: Make a no-op. (object_desc_flush) [! USE_L4]: Likewise. * thread.h: Don't include <l4.h>. (struct thread): Make tid a vg_thread_id_t, not an l4_thread_id_t. (thread_lookup): Make threadid a vg_thread_id_t, not an l4_thread_id_t.
2008-12-18Add vg_ prefix to the (hopefully) remaining viengoos symbols.Neal H. Walfield
2008-12-18 Neal H. Walfield <neal@gnu.org> * viengoos/activity.h (struct activity_memory_policy): Rename from this... (struct vg_activity_memory_policy): ... to this. Update users. (struct activity_policy): Rename from this... (struct vg_activity_policy): ... to this. Update users. (ACTIVITY_STATS_PERIODS): Rename from this... (VG_ACTIVITY_STATS_PERIODS): ... to this. Update users. (struct activity_stats): Rename from this... (struct vg_activity_stats): ... to this. Update users. (struct activity_info): Rename from this... (struct vg_activity_info): ... to this. Update users. * viengoos/addr.h (struct addr): Rename from this... (struct vg_addr): ... to this. Update users. * viengoos/cap.h (struct object_policy): Rename from this... (struct vg_object_policy): ... to this. Update users. (struct object_name): Rename from this... (struct vg_object_name): ... to this. Update users. (struct object): Rename from this... (struct vg_object): ... to this. Update users. * viengoos/folio.h (struct folio_policy): Rename from this... (struct vg_folio_policy): ... to this. Update users. (struct folio): Rename for this... (struct vg_folio): ... to this. Update users. * viengoos/thread.h (HURD_EXREGS_SET_UTCB): Rename from this... (VG_EXREGS_SET_UTCB): ... to this. Update users. (HURD_EXREGS_SET_EXCEPTION_MESSENGER): Rename from this... (VG_EXREGS_SET_EXCEPTION_MESSENGER): ... to this. Update users. (HURD_EXREGS_SET_ASPACE): Rename from this... (VG_EXREGS_SET_ASPACE): ... to this. Update users. (HURD_EXREGS_SET_ACTIVITY): Rename from this... (VG_EXREGS_SET_ACTIVITY): ... to this. Update users. (HURD_EXREGS_SET_SP): Rename from this... (VG_EXREGS_SET_SP): ... to this. Update users. (HURD_EXREGS_SET_IP): Rename from this... (VG_EXREGS_SET_IP): ... to this. Update users. (HURD_EXREGS_SET_SP_IP): Rename from this... (VG_EXREGS_SET_SP_IP): ... to this. Update users. (HURD_EXREGS_SET_EFLAGS): Rename from this... (VG_EXREGS_SET_EFLAGS): ... to this. Update users. (HURD_EXREGS_SET_USER_HANDLE): Rename from this... (VG_EXREGS_SET_USER_HANDLE): ... to this. Update users. (HURD_EXREGS_SET_REGS): Rename from this... (VG_EXREGS_SET_REGS): ... to this. Update users. (HURD_EXREGS_GET_REGS): Rename from this... (VG_EXREGS_GET_REGS): ... to this. Update users. (HURD_EXREGS_START): Rename from this... (VG_EXREGS_START): ... to this. Update users. (HURD_EXREGS_STOP): Rename from this... (VG_EXREGS_STOP): ... to this. Update users. (HURD_EXREGS_ABORT_SEND): Rename from this... (VG_EXREGS_ABORT_SEND): ... to this. Update users. (HURD_EXREGS_ABORT_RECEIVE): Rename from this... (VG_EXREGS_ABORT_RECEIVE): ... to this. Update users. (HURD_EXREGS_ABORT_IPC): Rename from this... (VG_EXREGS_ABORT_IPC): ... to this. Update users. (struct hurd_thread_exregs_in): Rename form this... (struct vg_thread_exregs_in): ... to this. Update users. (struct hurd_thread_exregs_out): Rename form this... (struct vg_thread_exregs_out): ... to this. Update users. (RPC_STUB_PREFIX): Define to vg_activation. Update users. (RPC_ID_PREFIX): Define to VG_ACTIVATION. Update users. (ACTIVATION_fault): Rename from this... (VG_ACTIVATION_fault): ... to this. Update users.
2008-12-17Add a "vg_" to public viengoos identifiers.Neal H. Walfield
2008-12-17 Neal H. Walfield <neal@gnu.org> * viengoos/activity.h: Add a "vg_" to public viengoos identifiers. Update users. * viengoos/addr-trans.h: Likewise. * viengoos/addr.h: Likewise. * viengoos/cap.h: Likewise. * viengoos/folio.h: Likewise. * viengoos/futex.h: Likewise. * viengoos/rpc.h: Likewise. * viengoos/thread.h: Likewise.
2008-12-17Move viengoos header files to libviengoos.Neal H. Walfield
/ 2008-12-17 Neal H. Walfield <neal@gnu.org> * libviengoos: New directory. * Makefile.am (SUBDIRS): Add libviengoos. * configure.ac: Include libviengoos/headers.m4. Generate libviengoos/Makefile. hurd/ 2008-12-17 Neal H. Walfield <neal@gnu.org> * activity.h: Move to ../libviengoos/viengoos. Update references. * addr-trans.h: Likewise. * addr.h: Likewise. * cap.h: Likewise. * folio.h: Likewise. * futex.h: Likewise. * ipc.h: Likewise. * message.h: Likewise. * messenger.h: Likewise. * rpc.h: Likewise. * thread.h: Move viengoos specific bits... * ../libviengoos/viengoos/thread.h: ... to this new file. * thread.h (struct hurd_utcb): New structure. * exceptions.h (hurd_utcb): Use a struct hurd_utcb *, not a struct vg_utcb *. Update users. (hurd_activation_state_alloc): Likewise. (hurd_activation_state_free): Likewise. (hurd_activation_handler_activated): Likewise. (hurd_activation_handler_normal): Likewise. * t-addr-trans.c: Move to ../libviengoos. * t-addr.c: Likewise. * t-rpc.c: Likewise. * Makefile.am (TESTS, check_PROGRAMS, t_addr_CPPFLAGS) (t_addr_SOURCES, t_addr_trans_CPPFLAGS, t_addr_trans_SOURCES) (t_rpc_CPPFLAGS, t_rpc_SOURCES): Move from this file... * ../libviengoos/Makefile.am. * Makefile.am (includehurd_HEADERS): Don't mention activity.h, addr-trans.h, addr.h, cap.h, folio.h, futex.h, ipc.h, message.h or messenger.h. * headers.m4: Don't create a link to hurd/addr.h, hurd/addr-trans.h, hurd/cap.h, hurd/folio.h, hurd/rpc.h, hurd/activity.h, hurd/futex.h, hurd/message.h, hurd/messenger.h or hurd/ipc.h. libviengoos/ 2008-12-17 Neal H. Walfield <neal@gnu.org> * Makefile.am: New file. * headers.m4: Likewise. * t-addr-trans.c: Move from ../hurd. * t-addr.c: Likewise. * t-rpc.c: Likewise. * viengoos.h: Likewise. * viengoos/activity.h: Likewise. * viengoos/addr-trans.h: Likewise. * viengoos/addr.h: Likewise. * viengoos/cap.h: Likewise. * viengoos/folio.h: Likewise. * viengoos/futex.h: Likewise. * viengoos/ipc.h: Likewise. * viengoos/message.h: Likewise. * viengoos/messenger.h: Likewise. * viengoos/rpc.h: Likewise. * viengoos/misc.h: Moved from ../viengoos/rm.h. * viengoos/thread.h: New file split from ../hurd/thread.h. libpthread/ 2008-12-17 Neal H. Walfield <neal@gnu.org> * Makefile.am: New file. * headers.m4: Likewise. * t-addr-trans.c: Move from ../hurd. * t-addr.c: Likewise. * t-rpc.c: Likewise. * viengoos.h: Likewise. * viengoos/activity.h: Likewise. * viengoos/addr-trans.h: Likewise. * viengoos/addr.h: Likewise. * viengoos/cap.h: Likewise. * viengoos/folio.h: Likewise. * viengoos/futex.h: Likewise. * viengoos/ipc.h: Likewise. * viengoos/message.h: Likewise. * viengoos/messenger.h: Likewise. * viengoos/rpc.h: Likewise. * viengoos/misc.h: Moved from ../viengoos/rm.h. * viengoos/thread.h: New file split from ../hurd/thread.h. viengoos/ 2008-12-17 Neal H. Walfield <neal@gnu.org> * rm.h: Move from here... * ../libviengoos/viengoos/misc.h: ... to here. Update users. * headers.m4: Don't link rm.h to hurd/rm.h. * Makefile.am (viengoos_SOURCES): Remove rm.h.
2008-12-12New IPC system. Update code accordingly.Neal H. Walfield
hurd/ 2008-12-11 Neal H. Walfield <neal@gnu.org> Adapt RPC interfaces according to changes in IPC semantics. * messenger.h: New file. * message.h: New file. * ipc.h: New file. * headers.m4: Link sysroot/include/hurd/message.h to hurd/message.h, sysroot/include/hurd/messenger.h to hurd/messenger.h, and sysroot/include/hurd/ipc.h to hurd/ipc.h. * cap.h: Include <hurd/addr.h> and <stdbool.h>. (enum cap_type): Define cap_messenger, cap_rmessenger and cap_type_count. (cap_type_string): Handle cap_messenger and cap_rmessenger. (cap_types_compatible): Likewise. (cap_type_weak_p): Likewise. (cap_type_weaken): Likewise. (cap_type_strengthen): Likewise. (oid_t): Replace L4 type with standard type. (CAP_VOID): Define. * rpc.h [! RPC_TARGET]: Don't error out if not defined. [RPC_TARGET_ARG_]: Don't define or undefine. [RPC_TARGET_]: Likewise. [RPC_TARGET_NEED_ARG]: Ignore. Don't include <l4/ipc.h> or <l4/space.h>. Include <hurd/message.h> and <hurd/ipc.h>. (reply_buffer) [RM_INTERN]: Declare. (messenger_message_load) [RM_INTERN]: Likewise. [! RM_INTERN] Include <hurd/message-buffer.h>. (cap_t): Define. (CPP_FOREACH): Define. (CPP_SAFE_DEREF): Likewise. (RPC_ARGUMENTS): Take additional argument prefix. Use it. Update users. (RPC_CHOP): Rename from this... (RPC_CHOP2): ... to this. Update users. (RPC_TYPE_SHIFT): New define. (RPCLOADARG): Rewrite according to new marshalling semantics. (RPCSTOREARG): Likewise. (RPC_SEND_MARSHAL): Likewise. (RPC_SEND_UNMARSHAL): Likewise. (RPC_REPLY_MARSHAL): Likewise. (RPC_REPLY_UNMARSHAL): Likewise. (RPC_RECEIVE_MARSHAL): New define. (RPC_MARSHAL_GEN_): Break this into... (RPC_SEND_MARSHAL_GEN_): ... this... (RPC_RECEIVE_MARSHAL_GEN_): ... this... (RPC_REPLY_MARSHAL_GEN_): ... and this. Update users. (RPC_MARSHAL_GEN_): Redefine in terms of the new macros. (RPC_SEND_): Rewrite according to new marshalling and IPC semantics. (RPC_SEND_NONBLOCKING_): Define. (RPC_): Rewrite according to new marshalling and IPC semantics. (RPC_REPLY_): Likewise. (RPC_SIMPLE_): Don't define. (RPC_SIMPLE): Don't define. (RPC): Take additional argument ret_cap_count. Update users. (rpc_error_reply_marshal): Rewrite according to new marshalling and IPC semantics. (rpc_error_reply): Likewise. * t-rpc.c (RPC_TARGET_NEED_ARG): Don't define. (RPC_TARGET): Define. (RPC_noargs): Set to a large interger. (RPC_caps): New define. (noargs): Update interface specification according to new IDL interface. Update users. (onein): Likewise. (oneout): Likewise. (onlyin): Likewise. (onlyout): Likewise. (mix): Likewise. (noargs): Likewise. (onein): Likewise. (oneout): Likewise. (onlyin): Likewise. (onlyout): Likewise. (mix): New interface. (RPC_TARGET): Don't undefine. (main): Update to use the new RPC marshalling interface. Write a test using the new `mix' interface. * activity.h (RPC_TARGET_NEED_ARG): Don't undefine. (RPC_TARGET): Don't define. (activity_policy): Update interface specification according to new IDL interface. Update users. (activity_info): Likewise. * cap.h: (RPC_TARGET_NEED_ARG): Don't undefine. (RPC_TARGET): Don't define. (RM_object_slot_copy_out): Don't define. (RM_object_slot_copy_in): Likewise. (RM_object_slot_read): Likewise. (RM_object_reply_on_destruction): Define. (cap_copy): Update interface specification according to new IDL interface. Update users. (cap_rubout): Likewise. (cap_read): Likewise. (object_discarded_clear): Likewise. (object_discard): Likewise. (object_status): Likewise. (object_name): Likewise. (object_reply_on_destruction): New interface replacing thread_wait_destroy. (object_slot_copy_out): Remove interface. (object_slot_copy_in): Likewise. (object_slot_read): Likewise. (RPC_TARGET): Don't undefine. * exceptions.h: Don't include <l4/thread.h>. Include <l4/space.h>. (RPC_STUB_PREFIX): Redefine to `activation'. (RPC_ID_PREFIX EXCEPTION): Redefine to `ACTIVATION'. (RPC_TARGET_NEED_ARG): Don't define. (RPC_TARGET_ARG_TYPE): Likewise. (RPC_TARGET): Likewise. (EXCEPTION_fault): Rename from this... (ACTIVATION_fault): ... to this. Update users. (exception_method_id_string): Rename from this... (activation_method_id_string): ... to this. (struct exception_info): Rename from this... (struct activation_fault_info): ... to this. Update users. (EXCEPTION_INFO_FMT): Rename from this... (ACTIVATION_FAULT_INFO_FMT): ... to this. Update users. (EXCEPTION_INFO_PRINTF): Rename from this... (ACTIVATION_FAULT_INFO_PRINTF): ... to this. Update users. (fault): Update interface specification according to new IDL interface. Update users. * folio.h (RPC_TARGET_NEED_ARG): Don't undefine. (RPC_TARGET): Don't define. (folio_alloc): Update interface specification according to new IDL interface. Update users. (folio_free): Likewise. (folio_object_alloc): Likewise. (folio_policy): Likewise. (RPC_TARGET): Don't undefine. * futex.h (RPC_TARGET_NEED_ARG): Don't undefine. (RPC_TARGET): Don't define. (futex): Update interface specification according to new IDL interface. Update users. (RPC_TARGET): Don't undefine. (futex_using): New function. (futex): Implement in terms of it. (futex_wait_using): New function. (futex_wait): Implement in terms of it. (futex_wake_using): New function. (futex_wake): Implement in terms of it. * thread.h (RM_thread_wait_object_destroyed): Don't define. (RM_thread_raise_exception): Rename from this... (RM_thread_activation_collect): ... to this. (RM_thread_id): Define. (RPC_TARGET_NEED_ARG): Don't undefine. (RPC_TARGET): Don't define. (struct hurd_thread_exregs_in): Remove fields aspace, activity, exception_page, aspace_out, activity_out and exception_page_out. (thread_exregs): Update interface specification according to new IDL interface. Add additional parameters exception_messenger and exception_messenger_out. Update users. (thread_wait_object_destroyed): Remove interface. (struct exception_buffer): Don't define. (thread_raise_exception): Remove interface. (thread_id): New interface. (thread_activation_collect): Likewise. (RPC_TARGET): Don't undefine. * RPC: Update. * exceptions.h (hurd_activation_handler_init_early): New declaration. (hurd_activation_handler_init): Likewise. (hurd_utcb): Likewise. (EXCEPTION_STACK_SIZE_LOG2): Don't define. (EXCEPTION_STACK_SIZE): Likewise. (hurd_activation_state_alloc): New declaration. (exception_page_cleanup): Rename from this... (hurd_activation_state_free): ... to this. Update users. (exception_handler_activated): Rename from this... (hurd_activation_handler_activated): ... to this. (exception_handler_normal): Rename from this... (hurd_activation_handler_normal): ... to this. Update users. Take additional parameter utcb. (exception_handler_entry): Rename from this... (hurd_activation_handler_entry): ... to this. (exception_handler_end): Rename from this... (hurd_activation_handler_end): ... to this. (hurd_activation_message_register): New declaration. (hurd_activation_message_unregister): Likewise. (hurd_activation_stack_dump): Likewise. * thread.h [! __have_vg_thread_id_t] (__have_vg_thread_id_t): Define. [! __have_vg_thread_id_t && USE_L4]: Include <l4.h>. [! __have_vg_thread_id_t && !USE_L4]: Include <stdint.h>. [! __have_vg_thread_id_t] (vg_thread_id_t): Define. [! __have_vg_thread_id_t] (vg_niltid): Define. [! __have_vg_thread_id_t] (VG_THREAD_ID_FMT): Define. [! __have_activation_frame] (__have_activation_frame): Define. [! __have_activation_frame && USE_L4]: Include <l4/ipc.h>. [! __have_activation_frame] (struct hurd_message_buffer): Declare. [! __have_activation_frame] (struct activation_frame): Define in this case. Add fields normal_mode_stack and canary. [! __have_activation_frame && i386] (struct activation_frame): Change regs to have 10 elements. Add fields eax, ecx, edx, eflags, eip, ebx, edi, esi, ebp and esp. [! __have_activation_frame && !USE_L4] (struct activation_frame): Remove fields saved_sender, saved_receiver, saved_timeout, saved_error_code, saved_flags, and saved_br0 in this case. [__need_vg_thread_id_t || __need_activation_frame] (__need_vg_thread_id_t): Undefine. [__need_vg_thread_id_t || __need_activation_frame] (__need_activation_frame): Likewise. [!__need_vg_thread_id_t && !__need_activation_frame]: Include the rest of the file in this case. Include <stdint.h>, <hurd/types.h>, <hurd/addr.h>, <hurd/addr-trans.h>, <hurd/cap.h>, <hurd/messenger.h> and <setjmp.h>. (hurd_activation_frame_longjmp): New declaration. (struct hurd_fault_catcher): New definition. (hurd_fault_catcher_register): New declaration. (hurd_fault_catcher_unregister): Likewise. (struct exception_page): Rename from this... (struct vg_utcb): ... to this. Update users. Remove field exception. Add fields protected_payload, messenger_id, inline_words, inline_caps, inline_word_count, inline_cap_count, inline_data, exception_buffer, extant_messages, catchers, alternate_stack, alternate_stack_inuse, canary0, canary1. (UTCB_CANARY0): Define. (UTCB_CANARY1): Likewise. (THREAD_EXCEPTION_PAGE_SLOT): Rename from this... (THREAD_UTCB): ... to this. (THREAD_EXCEPTION_MESSENGER): Define. (THREAD_SLOTS): Likewise. (THREAD_SLOTS_LOG2): Likewise. (HURD_EXREGS_SET_EXCEPTION_PAGE): Rename from this... (HURD_EXREGS_SET_UTCB): ... to this. Update users. (HURD_EXREGS_SET_EXCEPTION_MESSENGER): Define. (HURD_EXREGS_SET_REGS): Add HURD_EXREGS_SET_EXCEPTION_MESSENGER. (vg_myself): New function. * startup.h (struct hurd_startup_data): Add field messengers. viengoos/ 2008-12-12 Neal H. Walfield <neal@gnu.org> Implement messengers and convert to new IPC semantics. * messenger.h: New file. * messenger.c: New file. * Makefile.am (viengoos_SOURCES): Add messenger.h and messenger.c. * ager.c: Include "messenger.h". (update_stats): Update notifivation code to use messengers. * cap.c: Include <hurd/messenger.h>. (cap_shootdown): Follow thread and messenger objects. * object.h (object_wait_queue_head): Use and return struct messenger *'s, not struct thread *'s. Update users. (object_wait_queue_tail): Likewise. (object_wait_queue_next): Likewise. (object_wait_queue_prev): Likewise. (object_wait_queue_enqueue): Likewise. (object_wait_queue_dequeue): Likewise. Rename from this... (object_wait_queue_unlink): ... to this. (object_wait_queue_push): New declaration. (folio_object_wait_queue_for_each): Use and return struct messenger *'s, not struct thread *'s. Update users. (object_wait_queue_for_each): Likewise. * object.c: Include <hurd/messenger.h> and "messenger.h". (folio_object_alloc): When destroying a messenger, call messenger_destroy. (folio_object_alloc): Send notifications using messengers. (object_wait_queue_head): Use and return struct messenger *'s, not struct thread *'s. (object_wait_queue_tail): Likewise. (object_wait_queue_next): Likewise. (object_wait_queue_prev): Likewise. (object_wait_queue_check): Likewise. (object_wait_queue_enqueue): Likewise. Add MESSENGER to end of the queue, not the beginning. (object_wait_queue_push): New function. (object_wait_queue_dequeue): Use and return struct messenger *'s, not struct thread *'s. Rename from this... (object_wait_queue_unlink): ... to this. * pager.c: Include "messenger.h". * thread.h: Don't include "list.h". Include <hurd/cap.h> and <hurd/thread.h>. (struct folio): Remove declaration. (THREAD_SLOTS): Don't define. (THREAD_WAIT_FUTEX): Move from here... * messenger.h (MESSENGER_WAIT_FUTEX): ... to here. * thread.h (THREAD_WAIT_DESTROY): Move from here... * messenger.h (MESSENGER_WAIT_DESTROY): ... to here. * thread.h (THREAD_WAIT_ACTIVITY_INFO): Move from here... * messenger.h (MESSENGER_WAIT_ACTIVITY_INFO): ... to here. * thread.h (struct thread): Rename field exception_page to utcb. Add field exception_messenger. Remove fields wait_queue_p, wait_queue_head, wait_queue_tail, wait_reason, wait_reason_arg, wait_reason_arg2, wait_queue and futex_waiter_node. (futex_waiters): Don't declare. (thread_exregs): Change input capabilities to not be pointers to capabilities but just capability structures. Add argument exception_messenger. Remove arguments aspace_out, activity_out and exception_page_out. Update users. (thread_activate): New declaration. (thread_raise_exception): Change MSG's type to be struct vg_message *. Update users. (thread_deliver_pending): New declaration. * thread.c (thread_deinit): Remove code to remove THREAD from a wait queue. (thread_exregs): Change input capabilities to not be pointers to capabilities but just capability structures. Update code. Add argument exception_messenger. Set THREAD's exception messenger according to it and CONTROL. Remove arguments aspace_out, activity_out and exception_page_out. Don't save the old capabilities. (thread_raise_exception): Move body of function... (thread_activate): ... to this new function. Update to use messengers. (thread_raise_exception): Implement in terms of it. (thread_deliver_pending): New function. * server.c: Include <hurd/ipc.h> and "messenger.h". (DEBUG): If label is the IPC label, use "IPC" as the function. (OBJECT_): Take additional parameter WRITABLE. Save whether the object is writable in *WRITABLE. Update users. (OBJECT): Likewise. (server_loop): Update to use messengers and the new IPC interface. Update method implementations appropriately. Don't marshal faults using exception_fault_send_marshal but the new activation_fault_send_marshal. Remove implementations of object_slot_copy_out, object_slot_copy_in and object_slot_read. Reimplement object_discard. In the thread_exregs implementation, handle the exception messenger. Implement thread_id. Remove thread_wait_object_destroyed. Implement object_reply_on_destruction. In activity_info and activity_policy, don't operate on PRINCIPAL but the invoke activity. Implement thread_activation_collect. When blocking on a futex, don't enqueue the calling thread but the reply messenger. Implement the messenger_id method. (REPLY): Redefine before processing an object invocation to reply using the reply messenger included in the request. * rm.h: Include <l4/message.h>. (rm_method_id_string): Don't handle object_slot_copy_out, object_slot_copy_in, object_slot_read, exception_collect or thread_wait_object_destroyed. Handle object_reply_on_destruction, thread_id, thread_activation_collect. (RPC_TARGET_NEED_ARG): Don't undefine. (RPC_TARGET): Don't define. (struct io_buffer): Redefine in terms of L4_NUM_BRS. (write): Update interface specification according to new IDL interface. Update users. (read): Likewise. (as_dump): Likewise. (fault): Likewise. (RPC_STUB_PREFIX): Don't undefine. (RPC_ID_PREFIX): Likewise. libhurd-mm/ 2008-12-12 Neal H. Walfield <neal@gnu.org> Update to new RPC interface and IPC semantics. Support messengers. * message-buffer.h: New file. * message-buffer.c: Likewise. * Makefile.am (libhurd_mm_a_SOURCES): Add message-buffer.h and message-buffer.c. * headers.m4: Link sysroot/include/hurd/message-buffer.h to libhurd-mm/message-buffer.h. * exceptions.c: Include <hurd/mm.h>, <hurd/rm.h> and <backtrace.h>. (hurd_fault_catcher_register): New function. (hurd_fault_catcher_unregister): Likewise. (hurd_activation_frame_longjmp): Likewise. (utcb_state_save): Rename from this... (l4_utcb_state_save): ... to this. Take a `struct activation_frame *', not a `struct exception_frame *'. (utcb_state_restore): Rename from this... (l4_utcb_state_restore): ... to this. Take a `struct activation_frame *', not a `struct exception_frame *'. (exception_fetch_exception): Rename from this... (hurd_activation_fetch): ... to this. (hurd_activation_message_register): New function. (hurd_activation_frame_longjmp): Likewise. (exception_frame_slab): Rename from this... (activation_frame_slab): ... to this. Use a static initializer. (exception_frame_slab_alloc): Rename from this... (activation_frame_slab_alloc): ... to this. Don't preserve the L4 utcb. (exception_frame_slab_dealloc): Rename from this... (activation_frame_slab_dealloc): ... to this. (exception_frame_alloc): Rename from this... (activation_frame_alloc): ... to this. If there are no preallocated frames, panic. Move the hard allocation code to... (check_activation_frame_reserve): ... this new function. (hurd_activation_stack_dump): New function. (hurd_activation_handler_normal): Take an additional parameter, the utcb. Add consistency checks. Handle IPC and closures. Update fault handling code to use the new fault interface. If unable to resolve the fault via the pager mechanism, see if a fault catcher in installed. Check the UTCB's canary. If running on the alternate stack, clear UTCB->ALTERNATE_STACK_INUSE on exit. (hurd_activation_handler_activated): Take a `struct vg_utcb *', not a `struct exception_page *'. Handle IPC and closures. Improve test to determine if the fault was a stack fault. If so, return to normal mode to handle the fault and use an alternate stack. (activation_handler_area0): New local variable. (activation_handler_msg): Likewise. (initial_utcb): Likewise. (simple_utcb_fetcher): New function. (hurd_utcb): New variable. (hurd_activation_handler_init_early): New function. (hurd_activation_handler_init): Likewise. (exception_handler_init): Remove function. (ACTIVATION_AREA_SIZE_LOG2): Define. (ACTIVATION_AREA_SIZE): Likewise. (hurd_activation_state_alloc): New function. (exception_page_cleanup): Rename from this... (hurd_activation_state_free): ... to this. Rewrite. * ia32-exception-entry.S (_hurd_activation_handler_entry): Save the eflags before executing a sub instruction. Don't try to smartly calculate the location of the UTCB. Instead, just reload it. (activation_frame_run): Use an alternate stack, if requested. Save ebx and ebi. Pass the utcb to the callback. * mm-init.c [i386]: Include <hurd/pager.h>. Include <backtrace.h>. (mm_init): Call hurd_activation_handler_init_early and hurd_activation_handler_init. Don't call exception_handler_init. (mm_init) [! NDEBUG && i386]: Test the activation code. * as-build.c (do_index): Handle indexing a cap_thread or a cap_messenger. (as_build): Likewise. * as-dump.c (do_walk): Handle indexing a cap_thread or a cap_messenger. * as-lookup.c (as_lookup_rel_internal): Likewise. * as.c (as_walk): Likewise. * storage.c: Include <backtrace.h>. (shadow_setup): Update use of rm_folio_object_alloc according to its new interface. (storage_check_reserve_internal): Likewise. (storage_free_): Likewise. (FREE_PAGES_SERIALIZE): Bump to 32. (storage_alloc): If we try to get storage more than 5 lives, print a warning that we may be experiencing live lock. * pager.h (pager_fault_t): Change info's type from `struct exception_info' to `struct activation_fault_info'. (PAGER_VOID): Define. * map.h: Don't include <hurd/exceptions.h>. Include <hurd/as.h>. (maps_lock_lock): Don't use EXCEPTION_STACK_SIZE but AS_STACK_SPACE. (map_fault): Change info's type from `struct exception_info' to `struct activation_fault_info'. * map.c (map_fault): Change info's type from `struct exception_info' to `struct activation_fault_info'. * as.h (AS_STACK_SPACE): Define. (as_lock): Use AS_STACK_SPACE instead of EXCEPTION_STACK_SIZE. (as_lock_readonly): Likewise. * as.h (AS_CHECK_SHADOW): Only check the address translator for capabilities that designate cappages. * anonymous.h (ANONYMOUS_MAGIC): Define. (struct anonymous_pager): Add field magic. * anonymous.c (fault): Assert that ANON->MAGIC has the expected value. Correctly size PAGES. (mdestroy): Assert that ANON->MAGIC has the expected value. (destroy): Likewise. (advise): Likewise. (anonymous_pager_alloc): Initialize ANON->MAGIC. benchmarks/ 2008-12-12 Neal H. Walfield <neal@gnu.org> Update according to new RPC interfaces. * activity-distribution.c (main): Update use of rm_activity_policy and rm_activity_info to be consistent with the new interface. Replace use of `struct exception_info' with `struct activation_fault_info'. * cache.c (helper): Update use of rm_activity_policy and rm_activity_info to be consistent with the new interface. * shared-memory-distribution.c (main): Likewise. hieronymus/ 2008-12-12 Neal H. Walfield <neal@gnu.org> Update according to new RPC interfaces. * hieronymus.c (activity_alloc): Update use of rm_activity_policy, rm_activity_info and rm_folio_object_alloc to be consistent with new interface. Replace use of rm_thread_wait_object_destroyed with rm_object_reply_on_destruction. libc-parts/ 2008-12-11 Neal H. Walfield <neal@gnu.org> Update to new RPC interfaces. * _exit.c (_exit): Update use of rm_folio_object_alloc to be consistent with the new interface. * backtrace.c (RA) [!RM_INTERN]: Set up a fault catch handler to avoid gratuitously faulting. (backtrace) [!RM_INTERN]: Set up a jump buffer. Jump to it on a fault. (backtrace_print): Use s_printf, not printf. * ia32-crt0.S (STACK_SIZE): Increase to 128 kb. * process-spawn.c (process_spawn): Don't use a capability slot to identify the root of the new thread's address space, allocate a thread object. Allocate messengers for the new thread and save them in STARTUP_DATA->MESSENGERS. * s_printf.c (io_buffer_flush): Use the debug output interface. (s_putchar): Don't call rm_write but use io_buffer_flush. libpthread/ 2008-12-11 Neal H. Walfield <neal@gnu.org> Update to new RPC interfaces, IPC semantics. * sysdeps/viengoos/bits/pthread-np.h: Include <hurd/exceptions.h>. (pthread_hurd_utcb_np): New declaration. * sysdeps/viengoos/pt-hurd-utcb-np.c: New file. * Makefile.am (libpthread_a_SOURCES): Add pt-hurd-utcb.c. * sysdeps/viengoos/pt-sysdep.h (EXCEPTION_AREA_SIZE): Don't define. (EXCEPTION_AREA_SIZE_LOG2): Likewise. (EXCEPTION_PAGE): Likewise. (PTHREAD_SYSDEP_MEMBERS): Remove fields exception_area, and exception_area_va. Add fields utcb and lock_message_buffer. * sysdeps/viengoos/pt-thread-alloc.c: Include <hurd/message-buffer.h>. (__pthread_thread_alloc): Initialize thread->lock_message_buffer. When executed the first time, set the thread's L4 user-defined handler. Initialize THREAD->UTCB with the thread's current utcb. Set HURD_UTCB to PTHREAD_HURD_UTCB_NP. For subsequent threads, don't manually set up the activation area. Instead, call hurd_activation_state_alloc. * sysdeps/viengoos/pt-thread-dealloc.c: Include <hurd/message-buffer.h>. (__pthread_thread_dealloc): Call __pthread_thread_halt. Don't manually clean up the activation area. Instead, call hurd_activation_state_free. Free THREAD->LOCK_MESSAGE_BUFFER. * sysdeps/viengoos/ia32/pt-setup.c (stack_setup): Pre-fault the first four pages of the new stack. (__pthread_setup): Don't set up the activation area. * sysdeps/viengoos/pt-wakeup.c (__pthread_wakeup): Use futex_wake_using with the calling thread's lock messenger. * sysdeps/viengoos/pt-block.c (__pthread_block): Use futex_wait_using and provide THREAD->LOCK_MESSAGE_BUFFER as the message buffer. * sysdeps/viengoos/pt-thread-start.c (__pthread_thread_start): Don't set the first thread's L4 user-defined handler here. (__pthread_thread_start): Update use of rm_thread_exregs according to be consistent with new interface. * sysdeps/viengoos/pt-thread-halt.c (__pthread_thread_halt): If THREAD is the current thread, call vg_suspend. * sysdeps/viengoos/pt-setactivity-np.c (pthread_setactivity_np): Update use of rm_thread_exregs according to be consistent with new interface. * sysdeps/viengoos/ia32/signal-dispatch-lowlevel.c (signal_dispatch_lowlevel): Use __builtin_frame_address to get the current stack frame's start. Update use of rm_thread_exregs according to be consistent with new interface. ruth/ 2008-12-12 Neal H. Walfield <neal@gnu.org> Update to new RPC interfaces. * ruth.c (main): Update use of rm_folio_alloc, rm_folio_object_alloc, rm_thread_exregs, rm_activity_policy, rm_activity_info. Replace use of rm_thread_wait_object_destroy with rm_object_reply_on_destruction. Replace use of `struct exception_info' with `struct activation_fault_info'. Fix signal test's use of condition variables to not rely on the scheduler. When checking deallocation code, set up a fault handler to programmatically determine success.
2008-06-27hurd/neal
2008-06-27 Neal H. Walfield <neal@gnu.org> * activity.h (RM_activity_stats): Don't define. (RM_activity_info): Replace with this. (struct activity_stats): Add field pressure_local. Make field pressure an 8 bit integer. (struct activity_stats_buffer): Remove structure. (struct activity_info): Replace with this structure. (activity_info_stats): Define. (activity_info_pressure): Likewise. (activity_stats): Remove method. (activity_info): Replace with this. viengoos/ 2008-06-27 Neal H. Walfield <neal@gnu.org> * activity.h (struct activity): Add fields free_bad_karma, free_goal, free_allocations and free_initial_allocation. * rm.h (rm_method_id_string): Replace RM_activity_stats handling with RM_activity_info handling. * thread.h (THREAD_WAIT_STATS): Remove. (THREAD_WAIT_ACTIVITY_INFO): Replace with this. (struct thread): Add field wait_reason_arg2. * ager.c (update_stats): Account for local pressure when calculating availability. Don't use activity_stats to inform threads of new statistics but activity_info. * object.c (object_desc_claim): Adjust the activity's FREE_GOAL, FREE_ALLOCATIONS, and FRAMES_EXCLUDED fields as appropriate. * pager.c (pager_collect): When selecting a victim, don't include an activity's excluded frames in its allocation. Don't even consider activities for which FREE_ALLOCATIONS is non-zero. Having selected a victim, don't increase the pressure do drastically. Update the local pressure. Having selected a victim from which to revoke pages, send any waiting threads a message to free memory. If VICTIM->FREE_BAD_KARMA is 0, assume that the memory will be freed and give the activity 100 claims to do it. If the activity has bad karma, decrease it by one. * server.c (server_loop): Replace activity_stats implementation with implementation appropriate for activity_info. hieronymus/ 2008-06-27 Neal H. Walfield <neal@gnu.org> * hieronymus.c (do_gather_stats): Change to use activity_info instead of activity_stats. (main): Introduce code to delay process creation. ruth/ 2008-06-27 Neal H. Walfield <neal@gnu.org> * ruth.c (main): Update to use activity_info instead of activity_stats. benchmarks/ 2008-06-27 Neal H. Walfield <neal@gnu.org> * shared-memory-distribution.c (main): Update to use activity_info instead of activity_status. * activity-distribution.c (main): Likewise. * GCbench.c: Include <stdint.h> and <stdbool.h>. (now): New function. (struct stats): Add fields time, gcs and iter. (have_a_hog): New variable. (mem_hog) [__gnu_hurd_viengoos__]: Rename from this... (helper) [__gnu_hurd_viengoos__]: ... to this. Use activity_info, not activity_stats. Gather more data. (helper) [! __gnu_hurd_viengoos__]: New function. (tid): Rename from this... (helper_tid): ... to this. (helper_fork) [__gnu_hurd_viengoos__]: Name activities. (main): Improve output. benchmarks/boehm-gc/ 2008-06-27 Neal H. Walfield <neal@gnu.org> * patches/05-viengoos-scheduler.patch: Update to use activity_info in place of activity_stats. Listen for pressure messages and act appropriately. Tighten adaptive code. Improve profiling code.
2008-06-26hurd/neal
2008-06-26 Neal H. Walfield <neal@gnu.org> * cap.h (RM_object_name): Define. (struct object_name): New struct. (object_name): New method. viengoos/ 2008-06-26 Neal H. Walfield <neal@gnu.org> * rm.h (rm_method_id_string): Handle the RM_object_name case. * server.c (server_loop): Implement the object_name method. * activity.h (struct activity): New field name. * thread.h (struct thread): Likewise. * object.h (OBJECT_NAME_FMT): New macro. (OBJECT_NAME_PRINTF): Likewise. * activity.c: Include "thread.h". (do_activity_dump): Use OBJECT_NAME_FMT and OBJECT_NAME_PRINTF rather than OID_FMT and OID_PRINTF. (activity_dump): Only call do_activity_dump if debugging output is enabled. * pager.c: Include "thread.h". (pager_collect): Use OBJECT_NAME_FMT and OBJECT_NAME_PRINTF rather than OID_FMT and OID_PRINTF. * ager.c (update_stats): Likewise.
2008-06-22viengoos/neal
2008-06-22 Neal H. Walfield <neal@gnu.org> * thread.h: Include "list.h". (struct thread) [! NDEBUG]: Add field futex_waiter_node. [! NDEBUG]: Instantiate the futex_waiter list class. (futex_waiters) [! NDEBUG]: Declare. * server.c (futex_waiters) [! NDEBUG]: New variable. (server_loop) [! NDEBUG]: If we don't get an RPC for a while, dequeue all thread's enqueued on FUTEX_WAITERS and return EDEADLK. When blocking a thread on a futex, add THREAD to FUTEX_WAITERS. * object.c (object_wait_queue_dequeue) [! NDEBUG]: If THREAD->WAIT_REASON is THREAD_WAIT_FUTEX, unlink THREAD from FUTEX_WAITERS. hurd/ 2008-06-22 Neal H. Walfield <neal@gnu.org> * futex.h [! RM_INTERN]: Include <errno.h>. (futex_wait): On error, set ERRNO and return -1. (futex_timed_wait): Likewise. (futex_wake): Likewise. * mutex.h (ss_mutex_lock): If FUTEX_WAIT returns failure, print some debugging information.
2008-05-24hurd/neal
2008-05-24 Neal H. Walfield <neal@gnu.org> * activity.h (activity_stats): Take additional parameter, until_period. viengoos/ 2008-05-24 Neal H. Walfield <neal@gnu.org> * thread.h (THREAD_WAIT_STATS): Define. * server.c (server_loop): Update implementation of activity_stats to handle the new parameter, until_period. If the current period is less than UNTIL_PERIOD, queue the caller on PRINCIPAL and do not reply. * ager.c: Include "thread.h". (ager_loop): When generating an activity's statistics, if a thread is waiting for the statistic, send it reply. ruth/ 2008-05-24 Neal H. Walfield <neal@gnu.org> * ruth.c (main): Update user of rm_activity_stats to be consistent with new interface.
2008-02-05hurd/neal
2008-02-05 Neal H. Walfield <neal@gnu.org> * folio.h (struct folio) [RM_INTERN]: Remove field dhazard, mhazard. Add field checksums. Rearrange data structure. (folio_object_type): New function. (folio_object_type_set): Likewise. (folio_object_policy): Likewise. (folio_object_policy_set): Likewise. [RM_INTERN]: Include <bit-array.h>. (folio_object_wait_queue_p) [RM_INTERN]:New function. (folio_object_wait_queue_p_set) [RM_INTERN]:Likewise. (folio_object_wait_queue) [RM_INTERN]:Likewise. (folio_object_wait_queue_set) [RM_INTERN]:Likewise. (folio_object_version) [RM_INTERN]:Likewise. (folio_object_version_set) [RM_INTERN]:Likewise. (folio_object_content) [RM_INTERN]:Likewise. (folio_object_content_set) [RM_INTERN]:Likewise. viengoos/ 2008-02-05 Neal H. Walfield <neal@gnu.org> * thread.h (struct wait_queue_node): Remove structure. (struct thread): Add field wait_queue_p. Make the wait queue next and previous pointers oid_t's and not struct cap's. Update users. * object.h (object_oid): New function. * as.c (as_build_internal): Don't access a folio's fields directly; use the accessor functions. * cap.c (cap_shootdown): Likewise. * cap-lookup.c (lookup): Likewise. * object.c (memory_object_destroy): Likewise. (object_find): Likewise. (folio_free): Likewise. (folio_object_alloc): Likewise. (object_wait_queue): Remove function. (object_wait_queue_head): Don't access a folio's fields directly; use the accessor functions. Update implementation to reflect struct thread changes. (object_wait_queue_tail): Likewise. (object_wait_queue_next): Likewise. (object_wait_queue_prev): Likewise. (object_wait_queue_check): Likewise. (object_wait_queue_enqueue): Likewise. (object_wait_queue_dequeue): Likewise. * object.h (folio_object_wait_queue_for_each): Likewise.
2008-01-16hurd/neal
2008-01-16 Neal H. Walfield <neal@gnu.org> * thread.h (RM_thread_wait_object_destroyed): New define. (thread_wait_object_destroyed): New method. * folio.h (folio_object_alloc): Take additional parameter return_code. viengoos/ 2008-01-16 Neal H. Walfield <neal@gnu.org> * thread.h (THREAD_WAIT_FUTEX): New define. (THREAD_WAIT_DESTROY): Likewise. (struct thread): Remove fields futex_block and futex_offset. Add fields wait_reason and wait_reason_arg. Update users. * object.h (folio_object_alloc): Take additional argument return_code. Update users. (folio_object_wait_queue_for_each): New macro. * object.c: Include <hurd/thread.h>. (folio_object_alloc): Take additional argument return_code. Wake any threads blocked on the object being destroyed. * server.c (server_loop): Update folio_object_alloc method implementation to new API. Pass RETURN_CODE to the call to folio_object_alloc. Implement the thread_wait_object_destroyed method. * t-activity.c (allocate_object): Update rm_folio_object_alloc use to reflect API changes. (test): Likewise. * t-as.c (allocate_object): Likewise. libhurd-mm/ 2008-01-16 Neal H. Walfield <neal@gnu.org> * storage.c (shadow_setup): Update rm_folio_object_alloc use to reflect API changes. (storage_alloc_): Likewise. (storage_free_): Likewise. ruth/ 2008-01-16 Neal H. Walfield <neal@gnu.org> * ruth.c (main): Update rm_folio_object_alloc use to reflect API changes. Add test case for thread_wait_object_destroy.
2008-01-15hurd/neal
2008-01-15 Neal H. Walfield <neal@gnu.org> * futex.h (futex_wait): New file. * Makefile.am (includehurd_HEADERS): Add futex.h. * headers.m4: Link $(BUILDIR)/include/hurd/futex.h to futex.h. * RPC: Add futex message id assignment. * folio.h (struct folio): Add field wait_queue. Remove field checksum (for now). viengoos/ 2008-01-15 Neal H. Walfield <neal@gnu.org> * object.h (struct thread): New forward. (object_wait_queue_head): New declaration. (object_wait_queue_tail): New declaration. (object_wait_queue_next): New declaration. (object_wait_queue_prev): New declaration. (object_wait_queue_enqueue): New declaration. (object_wait_queue_dequeue): New declaration. (object_wait_queue_for_each): New macro. * object.c (object_wait_queue): New function. (object_wait_queue_head): Likewise. (object_wait_queue_tail): Likewise. (object_wait_queue_next): Likewise. (object_wait_queue_prev): Likewise. (object_wait_queue_check): Likewise. (object_wait_queue_enqueue): Likewise. (object_wait_queue_dequeue): Likewise. * thread.h (struct wait_queue_node): New structure. (struct thread): Add fields wait_queue_head, wait_queue_tail, futex_block, futex_offset and wait_queue. * thread.c (thread_deinit): If THREAD is enqueue on a wait queue, dequeue it. * rm.h: Include <hurd/futex.h>. (rm_method_id_string): Handle the RM_futex case. * server.c: Include <hurd/futex.h>. (server_loop): Implement the rm_futex method. ruth/ 2008-01-15 Neal H. Walfield <neal@gnu.org> * ruth.c: Include <hurd/futex.h>. (main) Test futex implementation.
2007-12-25hurd/neal
2007-12-25 Neal H. Walfield <neal@gnu.org> * cap.h: Include <stdint.h>. (OBJECT_PRIORITY_BITS): Define. (OBJECT_PRIORITY_MAX): Likewise. (OBJECT_PRIORITY_LRU): Likewise. (OBJECT_PRIORITY_MIN): Likewise. (struct object_policy): New structure. (OBJECT_POLICY_INIT): Define. (OBJECT_POLICY): Likewise. (OBJECT_POLICY_VOID): Likewise. (OBJECT_POLICY_DEFAULT): Likewise. (struct cap_properties): New structure. (CAP_PROPERTIES_INIT): Define. (CAP_PROPERTIES): Likewise. (CAP_PROPERTIES_VOID): Likewise. (CAP_PROPERTIES_DEFAULT): Likewise. (struct cap): Add fields discardable and priority. [RM_INTERN]: Reduce OID to 54 bits. [! RM_INTERN]: Allow the shadow field an entire word. (CAP_PROPERTIES_GET): Define. (CAP_PROPERTIES_SET): Likewise. (CAP_COPY_DISCARDABLE_SET): Likewise. (CAP_COPY_PRIORITY_SET): Likewise. (cap_copy): Remove the stuct cap_addr_trans parameter and replace with a struct cap_properties. Update callers. (cap_read): Likewise. (object_slot_copy_out): Likewise. (object_slot_copy_in): Likewise. (object_slot_read): Likewise. (cap_copy_x): Likewise. Save the object policies in the shadow capability. (cap_get_shadow): Don't munge the address. (cap_set_shadow): Likewise. * thread.h: Include <hurd/cap.h>. (struct hurd_thread_exregs_in): Remove field aspace_addr_trans. Add field aspace_cap_properties. Rename field aspace_addr_trans_flags to aspace_cap_properties_flags. * folio.h (struct folio): Remove field discardable. Add field policy. (folio_object_alloc): Take an additional argument, a struct object_policy. Update users. * cap.h (cap_is_a): Remove dead code. (cap_is_a_page): Remove dead code. libhurd-mm/ 2007-12-25 Neal H. Walfield <neal@gnu.org> * as.h: Change VISIT's signature: pass a struct cap_properties instead of a struct cap_addr_trans. Update callers. * as.c (as_walk): Change VISIT's signature: pass a struct cap_properties instead of a struct cap_addr_trans. Call VISIT appropriately. (as_alloc_slow): Update rm_cap_read use to reflect API changes. (as_init): Update rm_cap_read use to reflect API changes. Use CAP_PROPERTIES_SET to set shadow capability properties. * storage.c (shadow_setup): Update rm_folio_object_alloc use to reflect API changes. Also save the object policy in the shadow capability. (storage_alloc_): Likewise. (storage_free_): Likewise. viengoos/ 2007-12-25 Neal H. Walfield <neal@gnu.org> * object.h (struct object_desc): Add field policy. (object_desc_to_cap): Also return the discardable bit and the priority. (folio_object_alloc): Take additional parameter, the object's policy. Update callers. * object.c (folio_object_alloc): Take additional parameter, the object policy. Save it in the folio header. * as.c (as_build_internal): Update cap_copy_x use to reflect API changes. * thread.h: Remove parameter addr_trans and replace with a parameter that includes it and the object policy. Update users. * thread.c (thread_exregs): Remove parameter addr_trans and replace with a parameter that includes it and the object policy. Pass it to cap_copy_x as appropriate. * server.c: Include "output.h". (server_loop): Update the folio_object_alloc, object_slot_copy_out, object_slot_copy_in, and cap_copy implementations to set the allocated object's policy consistent with the API changes. Update the object_slot_read and cap_read implementations to return the object policy consistent with the API changes. Update the thread_exregs implementation to handle the address space capability's object policy consistent with the API changes. ruth/ 2007-12-25 Neal H. Walfield <neal@gnu.org> * ruth.c (main): Change visit to be consistent with as_walk's expected function signature. Update rm_folio_object_alloc use to reflect API changes.
2007-12-182007-12-18 Neal H. Walfield <neal@gnu.org>neal
* ager.c: Include "activity.h". * as.c: Include "rm.h". * cap.h: Don't include "rm.h". * loader.c: Include "cap.h" and "thread.h". * loader.h: Don't include "activity.h" or "thread.h". (struct activity): Add forward declaration. (struct thread): Likewise. * thread.h: Don't include "cap.h". * viengoos.c: Include <hurd/thread.h>. * as.c (as_insert): Add assert. * cap-lookup.c (lookup): Improve assert.
2007-12-04viengoos/neal
2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * thread.h (THREAD_SLOTS): Bump to 3. (struct thread): Add field exception_page. Remove fields have_exception and exception. (thread_exregs): Take additional arguments exception_page and exception_page_out. Update users. (thread_raise_exception): New declaration. * thread.c (THREAD_VERSION): Define. (thread_init): Remove code related to the exception thread. (thread_commission): Likewise. (thread_decommission): Likewise. (thread_exregs): Likewise. Take additional arguments EXCEPTION_PAGE and EXCEPTION_PAGE_OUT. If CONTROL contains HURD_EXREGS_GET_REGS and EXCEPTION_PAGE_OUT is not NULL, return a capability to THREAD's exception page in *EXCEPTION_PAGE_OUT. If CONTROL contains HURD_EXREGS_SET_EXCEPTION_PAGE, then set THREAD's exception page to EXCEPTION_PAGE. (thread_raise_exception): New function. * server.c (server_loop): Remove code related to handling the exception thread. Call thread_raise_exception to propagate exception. Reimplement the exception_collect method. Update implementation of the thread_exregs method to support the new argument passing scheme. Add support for setting and retrieving the exception page. (REPLYW): Only clear MSG here. * rm.h (exception_collect): Take an additional argument, the principal. * object.h (object_type): New function. hurd/ 2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * thread.h: Include <l4/ipc.h>. (struct exception_page): New structure. (THREAD_EXCEPTION_PAGE_SLOT): Define. (HURD_EXREGS_EXCEPTION_THREAD): Don't define. (HURD_EXREGS_SET_EXCEPTION_PAGE): Define. (HURD_EXREGS_SET_REGS): Update. (hurd_exception_handler_t): New definition. (struct hurd_thread_exregs_in): New structure. (struct hurd_thread_exregs_out): New structure. (thread_exregs): Replace the bulk of the arguments with struct hurd_thread_exregs_in and struct hurd_thread_exregs_out. Update users. * exceptions.h (HURD_THREAD_MAIN_VERSION): Remove macro. (HURD_THREAD_EXCEPTION_VERSION): Likewise. (hurd_thread_is_exception_thread): Remove function. (hurd_thread_is_main_thread): Likewise. (hurd_exception_thread): Likewise. (hurd_main_thread): Likewise. (exception_handler_loop): Remove declaration. (exception_handler): New declaration. (exception_handler_entry): Likewise. (exception_handler_end): Likewise. libhurd-mm/ 2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * Makefile.am (ARCH_SOURCES): New variable. [ARCH_IA32]: Add ia32-exception-entry.S. (libhurd_mm_a_SOURCES): Add $(ARCH_SOURCES). * ia32-exception-entry.S: New file. * exceptions.c: Include <hurd/storage.h> and <hurd/thread.h>. (ARG): Don't define. (ARG64): Likewise. (ARG_ADDR): Likewise. (CHECK): Likewise. (exception_handler_loop): Remove function. (exception_fetch_exception): New function. (exception_handler): New function. (STACK_SIZE): Don't define. (stack): Don't declare. (exception_handler_init): Set up the thread's exception page. libpthread/ 2007-12-04 Neal H. Walfield <neal@gnu.org> Remove exception threads. Replace with support for activations. * sysdeps/l4/hurd/pt-sysdep.h (PTHREAD_SYSDEP_MEMBERS): Remove fields exception_handler_stack and exception_handler_sp. Add field exception_page. * sysdeps/l4/hurd/pt-thread-alloc.c (__pthread_thread_alloc): Allocate a page for THREAD->EXCEPTION_PAGE, not THREAD->EXCEPTION_HANDLER_STACK. * sysdeps/l4/hurd/ia32/pt-setup.c: Include <hurd/thread.h> and <hurd/exceptions.h>. (__pthread_setup): Remove code dealing with the exception thread. Set up the exception page. * sysdeps/l4/hurd/pt-thread-start.c (__pthread_thread_start): Remove code dealing with the exception thread. Update to use new rm_thread_exregs interface. Also set the thread's exception page. * sysdeps/l4/hurd/pt-thread-halt.c (__pthread_thread_halt): Remove code to dealing with the exception thread. Free the THREAD->EXCEPTION_PAGE. ruth/ 2007-12-04 Neal H. Walfield <neal@gnu.org> * ruth.c (main): Update to use new rm_thread_exregs interface.
2007-11-23/neal
2007-11-23 Neal H. Walfield <neal@gnu.org> * README: Add note that Pistachio must be compiled with the Pager ExchangeRegisters configure option enabled. hurd/ 2007-11-23 Neal H. Walfield <neal@gnu.org> * thread.h: Include <hurd/addr-trans.h>. (HURD_EXREGS_EXCEPTION_THREAD): New definition. (trans_exregs): Take two additional arguments for determining how to copy the aspace address translation bits. Update callers. (thread_stop): New function. * rpc.h (RPC12_4): New macro. (RPC13_4): Likewise. * exceptions.h (exception_handler_init): New declaration. (exception_handler_loop): Likewise. libhurd-mm/ 2007-11-23 Neal H. Walfield <neal@gnu.org> * exceptions.c (exception_thread): Rename from this... (exception_handler_loop): ... to this. Update caller. * Makefile.am (libhurd_mm_a_SOURCES): Remove exceptions.h. * exceptions.h: Remove file. viengoos/ 2007-11-23 Neal H. Walfield <neal@gnu.org> * thread.h (thread_exregs): Take two additional arguments, a cap_addr_trans structure and a corresponding flags. Update users. * thread.c (thread_commission): Don't start thread THREAD. (control_to_string): New function. (thread_exregs): Take two additional arguments, a cap_addr_trans structure and a corresponding flags. Use them when copying a supplied capability into the address space slot of the thread. Support the HURD_EXREGS_EXCEPTION_THREAD flag. Improve error detection and debugging out. * server.c (server_loop): Let a void address for the activity slot imply the caller's current activity. Take two additional arguments, a cap_addr_trans structure and a corresponding flags argument. Pass them to thread_exregs. * viengoos.c (system_task_load): Set THREAD_ACTIVITY. Don't call thread_commission. Instead, call thread_exregs. ruth/ 2007-11-23 Neal H. Walfield <neal@gnu.org> * ruth.c (main): Don't call rm_object_slot_copy_in to update the address space slot. Just use rm_thread_exregs. Add test for pthread library. * ia32-cmain.c (cmain): If _pthread_init_routine is not NULL, call it. Otherwise, just call finish directly.
2007-11-22viengoos/neal
2007-11-22 Neal H. Walfield <neal@gnu.org> * thread.h (struct thread): Add fields efalgs, user_handle and init. (thread_create_in): Rename from this... (thread_init): ... to this. Remove the activity argument. Update all users. (thread_create): Remove declaration. (thread_destroy): Rename from this... (thread_deinit): ... to this. Update all users. (thread_send_sp_ip): Remove declaration. (thread_exregs): New declaration. * thread.c: Include <hurd/thread.h>. (thread_lookup): Add additional asserts. (thread_create_in): Rename from this... (thread_init): ... to this. Remove the activity argument. Don't set THREAD->ACTIVITY. Set THREAD->INIT to true. (thread_create): Remove function. (thread_destroy): Rename from this... (thread_deinit): ... to this. Correctly calculate the bit to deallocate. Fix assert. Set THREAD->INIT to false. (thread_commission): If THREAD->INIT is false, first call thread_init. Correctly calculate the thread ids to initialize. (thread_send_sp_ip): Remove function. (thread_exregs): New function. * rm.h (RPC_STUB_PREFIX): Include <hurd/thread.h>. (rm_method_id_string): Support RM_thread_exregs. (THREAD_ASPACE_SLOT, THREAD_ACTIVITY_SLOT): Move from... * ../hurd/thread.h: ... to this new file. * server.c: Include <hurd/thread.h>. (server_loop): Implement the thread_exregs RPC. * viengoos.c (system_task_load): Set THREAD->ACTIVITY to a capability designating ROOT_ACTIVITY. hurd/ 2007-11-22 Neal H. Walfield <neal@gnu.org> * Makefile.am (includehurd_HEADERS): Add thread.h. * headers.m4: Link $(BUILDIR)/include/hurd/thread.h to thread.h. * thread.h: New file. * rpc.h: Include <errno.h>. ruth/ 2007-11-22 Neal H. Walfield <neal@gnu.org> * ruth.c: Include <hurd/thread.h>. (main): Add test case for thread creation.
2007-11-19hurd/neal
2007-11-19 Neal H. Walfield <neal@gnu.org> * Makefile.am (includehurd_HEADERS): Add exceptions.h. * headers.m4: Link $(BUILDIR)/include/hurd/exceptions.h to exceptions.h. * exceptions.h: New file. viengoos/ 2007-11-19 Neal H. Walfield <neal@gnu.org> * thread.h (struct thread): Add fields have_exception and exception. (UTCB_AREA_SIZE): Provide space for two UTCBs. * thread.c: Include <hurd/exceptions.h>. (thread_create_in): For each thread that we allocate, allocate two consecutive l4 thread ids. (thread_commission): Initialize the main thread and the exception thread. (thread_decommission): Destroy both the main thread and the exception thread. * rm.h: Add RM_exception_collect. (rm_method_id_string): Handle RM_exception_collect. (exception_collect): New RPC method. * server.c: Include <hurd/exceptions.h>. (server_loop): If FROM is the exception thread, look up the thread object using the main thread id. Propagate any fault to the exception thread. If not immediately successful, save the message in THREAD->EXCEPTION and set THREAD->HAVE_EXCEPTION. Implement the exception_collect method. (DEBUG): Also print the method number. libhurd-mm/ 2007-11-19 Neal H. Walfield <neal@gnu.org> * Makefile.am (libhurd_mm_a_SOURCES): Add exceptions.h, exceptions.c, pager.h, pager.c, anonymous.h and anonymous.c. * headers.m4: Link $(BUILDDIR)/include/hurd/pager.h to pager.h. Link $(BUILDDIR)/include/hurd/anonymous.h to anonymous.h. * mm-init.c: Include "exceptions.h". (mm_init): Call exception_handler_init. * pager.h: Completely rewrite. * pager.c: Likewise. * anonymous.h: Likewise. * anonymous.c: Likewise. * exceptions.h: New file. * exceptions.c: Likewise. * mmap.c: Include <hurd/anonymous.h>. (mmap): Rewrite to use an anonymous pager.
2007-11-162007-11-16 Neal H. Walfield <neal@gnu.org>neal
* viengoos/Makefile.am: New file based on ../wortel/Makefile.am. * viengoos/headers.m4: New file. * viengoos/config.m4: New file based on ../wortel/config.m4. * viengoos/viengoos.h: New file. * viengoos/viengoos.c: New file. * viengoos/activity.h: Likewise. * viengoos/activity.c: Likewise. * viengoos/as.h: Likewise. * viengoos/as.c: Likewise. * viengoos/cap-lookup.c: Likewise. * viengoos/cap.h: Likewise. * viengoos/cap.c: Likewise. * viengoos/thread.h: New file. * viengoos/thread.c: New file. * viengoos/object.h: New file. * viengoos/object.c: New file. * viengoos/rm.h: New file. * viengoos/server.c: New file. * viengoos/server.h: New file. * viengoos/zalloc.h: Copied from ../physmem. * viengoos/zalloc.c: Copied from ../physmem. Don't include "output.h". Include <hurd/stddef.h>. Change uses of min_page_size to PAGESIZE. * viengoos/memory.h: New file. * viengoos/memory.c: New file. * viengoos/sigma0.c: Copy from ../wortel. * viengoos/sigma0.h: Copy from ../wortel. Don't include "shutdown.h". Include <hurd/stddef.h>. * viengoos/bits.h: Likewise. * viengoos/panic.c: New file. * viengoos/debug.c: Likewise. * viengoos/debug.h: Likewise. * viengoos/boot-modules.h: Likewise. * viengoos/boot-modules.c: Likewise. * viengoos/elf.h: Copied from ../wortel. * viengoos/loader.c: New file based on ../wortel/loader.c. * viengoos/loader.h: New file. * viengoos/multiboot.h: Copied from Grub. * viengoos/mmap.c: New file based on ../physmem/mmap.c. * viengoos/malloc-wrap.c: New file based on ../physmem/malloc-wrap.c. * viengoos/malloc.c: Version 2.8.3 of Doug Lea's malloc.c. * viengoos/malloc.h: Version 2.8.3 of Doug Lea's malloc.h. * viengoos/ia32-cmain.c: New file based on ../wortel/ia32-cmain.c. * viengoos/ia32-crt0.S: Copied from ../wortel. (STACK_SIZE): Use a 16 page stack. * viengoos/ia32-output.c: Copied from ../wortel. * viengoos/ia32-shutdown.c: Likewise. * viengoos/output.h: New file based on ../wortel/output.h. Include <stdarg.h>. (cprintf): New definition. (output_debug): Don't define. (debug): Don't define. * viengoos/output.c: New file based on ../wortel/output.c. Don't include <stdlib.h>. (vprintf): New function. (printf): Implement in terms of vprintf. * viengoos/output-none.c: Copied from ../wortel. * viengoos/output-serial.c: Likewise. * viengoos/output-stdio.c: New file. * viengoos/output-vga.c: Copied from ../wortel. * viengoos/shutdown.h: New file based on ../wortel/shutdown.h. Don't include "output.h". (panic): Don't define. (shutdown): Rename from this... (shutdown_machine): ... to this. * viengoos/shutdown.c: New file based on ../wortel/shutdown.c. (reset) [_L4_TEST_ENVIRONMENT]: Call abort. (halt) [_L4_TEST_ENVIRONMENT]: Call abort. (shutdown): Rename from this... (shutdown_machine): ... to this. * viengoos/t-environment.h: New file based on ../libl4/tests/environment.h. Protect from multiple inclusion. Include <hurd/stddef.h>. Include <string.h>. Include <l4/stubs.h>. (program_name): New declaration. (check_nr): Don't assume that val1 and val2 are _L4_word_t, use typeof instead. (main): Call output_init. * viengoos/t-as.c: New file.