haiku/headers/private/kernel/arch/x86
Ingo Weinhold 4048494ce4 axeld + bonefish:
* Implemented automatic syscall restarts:
  - A syscall can indicate that it has been interrupted and can be
    restarted by setting a respective bit in thread::flags. It can
    store parameters it wants to be preserved for the restart in
    thread::syscall_restart::parameters. Another thread::flags bit
    indicates whether it has been restarted.
  - handle_signals() clears the restart flag, if the handled signal
    has a handler function installed and SA_RESTART is not set. Another
    thread flag (THREAD_FLAGS_DONT_RESTART_SYSCALL) can prevent syscalls
    from being restarted, even if they could be (not used yet, but we
    might want to use it in resume_thread(), so that we stay
    behaviorally compatible with BeOS).
  - The architecture specific syscall handler restarts the syscall, if
    the restart flag is set. Implemented for x86 only.
  - Added some support functions in the private <syscall_restart.h> to
    simplify the syscall restart code in the syscalls.
  - Adjusted all syscalls that can potentially be restarted accordingly.
  - _user_ioctl() sets new thread flag THREAD_FLAGS_IOCTL_SYSCALL while
    calling the underlying FS's/driver's hook, so that syscall restarts
    can also be supported there.
* thread_at_kernel_exit() invokes handle_signals() in a loop now, as
  long as the latter indicates that the thread shall be suspended, so
  that after waking up signals received in the meantime will be handled
  before the thread returns to userland. Adjusted handle_signals()
  accordingly -- when encountering a suspending signal we don't check
  for further signals.
* Fixed sigsuspend(): Suspending the thread and rescheduling doesn't
  result in the correct behavior. Instead we employ a temporary
  condition variable and interruptably wait on it. The POSIX test
  suite test passes, now.
* Made the switch_sem[_etc]() behavior on interruption consistent.
  Depending on when the signal arrived (before the call or when already
  waiting) the first semaphore would or wouldn't be released. Now we
  consistently release it.
* Refactored _user_{read,write}[v]() syscalls. Use a common function for
  either pair. The iovec version doesn't fail anymore, if anything could
  be read/written at all. It also checks whether a complete vector
  could be read/written, so that we won't skip data, if the underlying
  FS/driver couldn't read/write more ATM.
* Some refactoring in the x86 syscall handler: The int 99 and sysenter
  handlers use a common subroutine to avoid code duplication.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23983 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 15:48:30 +00:00
..
apm.h * Implemented APM generic syscall API to query the current power status. 2007-05-16 15:22:23 +00:00
arch_commpage.h Merged branch haiku/branches/developer/bonefish/optimization revision 2008-01-11 00:36:44 +00:00
arch_config.h Added definitions that describe the stack direction. 2004-11-18 14:43:28 +00:00
arch_cpu.h Merged branch haiku/branches/developer/bonefish/optimization revision 2008-01-11 00:36:44 +00:00
arch_elf.h Added new arch_elf.h header where the platform dependent relocation definitions 2003-05-03 12:51:56 +00:00
arch_int.h {install|remove}_io_interrupt_handler() now correctly handle the B_NO_ENABLE_COUNTER flag. 2005-04-27 01:08:35 +00:00
arch_kernel_args.h Added cpu_clock_speed field for now - might either be moved to the main 2004-11-30 20:57:36 +00:00
arch_kernel.h Merged branch haiku/branches/developer/bonefish/optimization revision 2008-01-11 00:36:44 +00:00
arch_real_time_data.h More regs in m68k iframe. 2007-10-26 14:28:54 +00:00
arch_system_info.h pulled over some stuff from newos: 2007-02-05 01:46:28 +00:00
arch_thread_types.h Merged branch haiku/branches/developer/bonefish/optimization revision 2008-01-11 00:36:44 +00:00
arch_thread.h axeld + bonefish: 2008-02-17 15:48:30 +00:00
arch_user_debugger.h Merged branch haiku/branches/developer/bonefish/optimization revision 2008-01-11 00:36:44 +00:00
arch_vm_translation_map.h Moved the vm_translation_map_get_pgdir() function from arch/vm_translation_map.h 2003-10-17 13:35:12 +00:00
arch_vm_types.h The short story: we now have MTRR support on Intel and AMD CPUs (the latter 2005-12-13 16:34:29 +00:00
arch_vm.h * vm_page::offset is now called cache_offset and is now an uint32 instead of off_t; 2005-12-21 12:38:31 +00:00
bios.h Got inspired by mmu_man's dmidecode release and added a simple identification 2004-11-29 20:42:04 +00:00
descriptors.h Implemented first basic APM driver. Only tested with QEMU so far, that's why 2006-01-28 18:11:20 +00:00
selector.h Moved <types.h> to <sys/types.h>. 2002-09-23 02:36:51 +00:00
smp_acpi.h Ignore disabled local APICs. 2007-12-12 18:39:41 +00:00
smp_apic.h * Initial support for ACPI tables to detect multiprocessor configurations 2007-12-09 21:01:55 +00:00
smp_priv.h Add volatile keyword to apic memory access, cleanup, add timeout to arch_smp_send_ici. 2007-02-25 23:32:21 +00:00
timer.h Removed execute property that was set accidently (since CVS days). 2005-03-18 01:50:45 +00:00
types.h Removed execute property that was set accidently (since CVS days). 2005-03-18 01:50:45 +00:00
vesa.h Removed execute property that was set accidently (since CVS days). 2005-03-18 01:50:45 +00:00