Commit Graph
100 Commits
Author SHA1 Message Date
Ingo Weinhold 2dbf8cd728 Source SetupEnvironment with the more portable ".".
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36537 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-29 18:15:41 +00:00
Ingo Weinhold f1a61cda9a Typo-fixed patch by mjw: Include SetupEnvironment from /etc/profile, so
shells started by remote login daemons (sshd, telnetd) also get the
environmental variables defined there. Closes #5789 and #2468.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36536 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-29 16:47:05 +00:00
Ingo Weinhold 73f4184b7b Unset sSyslogBuffer in all error cases in which we disable syslog output.
Spotted by Axel.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-29 15:32:54 +00:00
Ingo Weinhold d3166e469c Replaced no longer necessary send_signal_etc() work-arounds for
resume_thread().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36531 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-29 15:23:29 +00:00
Ingo Weinhold 28d05e026f Make scheduler_reschedule() an no-op until we're ready to start the
scheduler. This avoids the need to use the send_signal_etc() work-around for
resume_thread() during the early kernel initialization. Might fix #5851.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36530 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-29 15:10:37 +00:00
Ingo Weinhold 7b8344c61e syslog_init_post_vm(): If the syslog is disabled, clear sSyslogBuffer. It is
already initialized in syslog_init(), if the debug syslog feature is enabled.
Since the area would never be created, the pointer becomes invalid, however,
and could cause a double fault on entering KDL.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36528 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-29 14:16:25 +00:00
Ingo Weinhold d62afe7ab0 VMUserAddressSpace::LookupArea(): Although only a read-lock is the
precondition for calling the function it read/write accessed the fAreaHint
attribute in a non-atomic manner. I.e. if executed concurrently by two
threads of the same team one could return the wrong area. The most likely
problem could be caused in vm_soft_fault(), leading to pages being added to
the wrong caches.
The bug itself is inherited from NewOS, but is triggered way more likely
since the page daemon unmaps inactive pages (r35485). Probably fixes #5413.
Might also fix the sporadically occurring crashes/asserts in the hoard
allocator -- at least inactive pages being replaced by zeroed ones would be
an excellent explanation.
[Thanks to Matt for providing remote debug access to his machine.]


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36523 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-28 22:06:40 +00:00
Ingo Weinhold 56943eaa58 Automatic whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36509 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-27 20:14:18 +00:00
Ingo Weinhold 22984248fa * kernel_debugger_loop(): Don't access sSyslogBuffer without checking whether
it is non-NULL first.
* syslog_init_post_vm(): Make sure the area for the debug syslog could actually
  be created and fail otherwise.
* syslog_init_post_threads(): Fixed the cleanup on error. In case of a debug
  syslog we need to delete the respective area instead of free()ing the
  memory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36497 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 21:16:36 +00:00
Ingo Weinhold e76856a4a5 Enabled the IOCache depending on the amount of free pages. Currently the
limit is 180 MB.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36495 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 16:56:37 +00:00
Ingo Weinhold 5060d7980f IOCache implements IOScheduler, now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36494 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 15:43:20 +00:00
Ingo Weinhold 2eab54201c Added SetDeviceCapacity() method.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36493 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 15:42:34 +00:00
Ingo Weinhold 0715529b59 Renamed IOScheduler to IOSchedulerSimple and pulled an interface IOScheduler
out of it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36492 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 14:47:24 +00:00
Ingo Weinhold 7aba4e400e Moved IOSchedulerRoster into its own header/source files.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36491 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 14:09:39 +00:00
Ingo Weinhold b1e06d23ce * The "page_stats" command does now also print the longest contiguous runs of
free respective free and cached pages.
* Removed the unused vm_page_allocate_page_run_no_base().
* vm_page_allocate_page_run() (and allocate_page_run()):
  - Use vm_page_reserve_pages() instead of vm_page_try_reserve_pages(), i.e.
    wait until the reservation succeeds.
  - Now we iterates two times through the pages to find a suitable page run. In
    the first iteration it only looks for free/clear pages, in the second
    iteration it also considers cached pages. This increases the chance of the
    function to succeed, when a lot of caching is going on.
    This reduces the amount of memory required to use the IOCache when booting
    off the anyboot Live CD to around 160 MB in qemu. It also seems to work with
    128 MB, but the syslog indicates that some memory allocations fail, which
    is not exactly inspiring confidence.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36489 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 13:56:09 +00:00
Ingo Weinhold c1b8ab4ef0 vm_create_anonymous_area(): Allocate the page run for B_CONTIGUOUS areas
before locking the address space. That gives us a bit more flexibility in
vm_page_allocate_page_run().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36486 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-26 13:28:05 +00:00
Ingo Weinhold f14480bc2c Essentially rewrote the IOCache to use a VMCache and unmapped pages for
caching (similar to the file cache) instead of contiguous areas. This is
probably a little bit slower, but integrates better with the VM -- the
caching doesn't increase memory pressure and the least recently used pages
will automatically be recycled when needed.
There are still memory allocation issues on machines with little memory. The
USB stack apparently tries to allocate a rather big chunk of contiguous
memory, which fails when all not otherwise bound memory is used for caches,
since the VM functions for allocating contiguous memory consider only free
pages ATM.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36458 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-24 21:54:49 +00:00
Ingo Weinhold 1f4cc99a2a Removed not approved translations as reported by Siarzhuk.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36451 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-24 16:17:12 +00:00
Ingo Weinhold 574e5742ad Optionally use the IOCache instead of the IOScheduler (specified by
USE_IO_CACHE macro in the header). Currently disabled, though. It works fine,
if the machine has a good deal of RAM. I tested with the anyboot CD -- the
boot and installation times drop dramatically. On machines with little RAM
there are issues, though. Apparently the cache isn't drained fast enough, so
that other allocations can fail.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36438 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-23 18:14:53 +00:00
Ingo Weinhold e91e4ee0a6 Added IOCache, a simple write-through cache implementation that can be used
as a drop-in replacement for IOScheduler, processing IORequests synchronously
in FIFO order. It stores cache lines of user-defined size. Currently for each
cache line an area of contiguous memory is used, which is not optimal.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36436 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-23 18:07:31 +00:00
Ingo Weinhold ccb3f07a14 get_memory_map_etc(): Setting the return value to B_BUFFER_OVERFLOW in the
loop causes the function to return before setting the _numEntries. The
overflow case is checked at the end of the function anyway, so we can just
break out.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36425 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-22 22:48:33 +00:00
Ingo Weinhold 63fe660c1b * Replaced a few hardcoded partitioning/file system type names by the
respective constants.
* compare_image_boot(): Compare volume names case insensitively.
* DiskBootMethod::IsBootDevice(): For BOOT_METHOD_CD only accept devices with
  removable media.
* DiskBootMethod::IsBootPartition(): Added special recognition for anyboot
  CDs. Since their partition types aren't kPartitionTypeDataSession,
  compare_cd_boot() didn't prefer them and it was more or less random whether
  it was chosen when other Haiku installations where available. Moreover
  selecting the CD in the boot loader menu would cause the kernel not to find
  it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36403 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-21 18:00:23 +00:00
Ingo Weinhold 04b174ca25 * Moved IOCallback class into separate source file.
* Moved IOScheduler::_IOCallbackWrapper() to IOCallback::WrapperFunction().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36394 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-21 11:20:07 +00:00
Ingo Weinhold 51355c1037 Axel changed the HAIKU_ADD_ALTERNATIVE_GCC_LIBS semantics. Init to 0.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36385 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 19:27:58 +00:00
Ingo Weinhold 138f5fb42a Just check which's return value -- no need for test and output capturing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36384 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 19:01:53 +00:00
Ingo Weinhold b6c7c42861 Burn the witches.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36383 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 18:55:04 +00:00
Ingo Weinhold 089cfbf774 Updated required legacy gcc version.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36381 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 18:19:37 +00:00
Ingo Weinhold b26135a454 Merged r36378 from r1alpha2 branch back into trunk.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36380 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 18:16:07 +00:00
Ingo Weinhold 6e83a6fac9 * VMCache::Resize(): Corrected TODO comment.
* Changed the semantics of VMCache::HasPage(). It was interpreted
  inconsistently by the derived classes. Now it returns whether the backing
  store can provide the page (via Read()). The default implementation returns
  false. VNodeCache::HasPage() only returns true, if the given offset is
  within the cache (i.e. file) bounds. This prevents vm_soft_fault() from
  adding clean pages to vnode caches on faults beyond the file bounds.
  Probably fixes #5473 -- at least mmap_resize_test behaves correctly, now.
* Removed redundant HasPage() and Fault() overrides in VMCache derived
  classes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36374 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 15:10:09 +00:00
Ingo Weinhold efeca209a1 Made VMCache::Resize() virtual and let VMAnonymousCache override it to free
swap space when the cache shrinks. Currently the implementation stil leaks
swap space of busy pages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36373 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 14:04:18 +00:00
Ingo Weinhold ba16e4ec61 cut_area(): We should only resize RAM caches.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36372 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-20 13:56:45 +00:00
Ingo Weinhold 1c1d16b344 Adjusted indentation. No functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36360 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 20:41:05 +00:00
Ingo Weinhold fba84f08b8 Small test program that shows Haiku doesn't deal correctly with resizing
mmap()ed files. Also reproduces #5473.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 20:15:32 +00:00
Ingo Weinhold 3f9f9f9aee * Resolve symlinks to the standard libraries as suggested by Andreas Faerber.
Fixes #5744.
* Removed commented obsolete code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36355 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 16:29:23 +00:00
Ingo Weinhold 43f42779be Reverted the work-around introduced in r35619. It actually is harmful, since
it introduces cyclic dependencies. The .c files generated from the .def files
include builtext.h, which is built together with builtins.c. So builtins.c
can't depend on the generated .c files. Fixes #5750 for good.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36353 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 15:23:51 +00:00
Ingo Weinhold d78426257a Use SPINLOCK_PAUSE() in the pthread_spin_lock() loop.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36352 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 14:17:17 +00:00
Ingo Weinhold 45b01eb841 Added private system arch specific arch_cpu_defs.h header, currently defining
only a SPINLOCK_PAUSE() macro.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36351 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 14:16:48 +00:00
Ingo Weinhold 2f1e62186e mkbuiltins.c does not include builtext.h, it generates it. Resolves a cyclic
dependency that caused unnecessary bash rebuilds (#5750).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36350 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 13:39:14 +00:00
Ingo Weinhold 7f646d6952 parse.y includes builtext.h as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36349 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 13:37:38 +00:00
Ingo Weinhold cf25e85b0c Update libbe version info.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36347 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 12:09:21 +00:00
Ingo Weinhold 71ad4aedd9 Switched trunk to R1 pre-alpha 3.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36346 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 11:50:36 +00:00
Ingo Weinhold bf0a463e35 Introduced version constants for R1 alpha 2 and R1 pre alpha 3.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36344 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-19 11:41:00 +00:00
Ingo Weinhold 45538a5e31 x86_handle_debug_exception(): The values of dr6 and dr7 are only stored in
the CPU info, if x86_exit_user_debug_at_kernel_entry() was executed before,
i.e. if the debug exception occurred in userlands. In all other cases we need
to read the current register values. Fixes #5742, a regression introduced in
r35951.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36340 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-18 17:06:02 +00:00
Ingo Weinhold b9d586e9d9 Added wrappers for the spinlock functions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36334 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-17 19:59:02 +00:00
Ingo Weinhold ef1716f81b Patch by Lucian Adrian Grijincu: Added pthread spinlock support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36333 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-17 19:38:01 +00:00
Ingo Weinhold a34e7d0ec4 Set fTranslationMap to NULL in the constructor. Otherwise an error in
Create() could cause the destructor to crash.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36329 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-16 08:36:58 +00:00
Ingo Weinhold 89dc7e4875 Added private BPositionIO derived classes BFileIO and BFileDescriptorIO which
wrap a FILE* respectively a file descriptor.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36324 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 22:19:27 +00:00
Ingo Weinhold f71274580b * Private libroot locking primitives:
- Reimplemented mutex to use the _kern_mutex*() syscalls.
  - The initializer functions cannot fail anymore -- changed their return type
    to void.
  - Changed the initializer function semantics to not copy the name by default
    anymore (as in the kernel). Also added *_etc() versions of them that take an
    additional flags.
  - Added static initializer macros.
  - Made the mutex (and thus recursive_lock) lock functions non-interruptable.
  - Got rid of the "lazy" version. They are no longer needed, since the
    initialization of the standard types can be done statically and cannot fail.
* Adjusted libroot, runtime loader, and other code using the private libroot
  locking primitives to the new semantics.
* pthreads mutexes and condition variables:
  - Reimplemented using the _kern_mutex*() syscalls.
  - Consistently use POSIX error codes.
  - Fixed some not quite POSIX compliant behavior.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36323 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 21:52:49 +00:00
Ingo Weinhold 251e72542e Added TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36322 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 21:48:12 +00:00
Ingo Weinhold 35ca8fd8aa Added various missing functions to the error mapper.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36320 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 21:23:46 +00:00
Ingo Weinhold 0dffa8d48e * remove_user_mutex_entry(): The next entry wasn't removed from its own list.
* user_mutex_unlock_locked(): Set or clear the locked flag depending on whether
  we wake up a waiter.
* _user_mutex_switch_lock(): The syscall cannot be restartable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36319 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 21:21:32 +00:00
Ingo Weinhold 2385d1bdc8 * Replaced bogus perror() calls with printf()s.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36297 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 15:25:10 +00:00
Ingo Weinhold c25c05da25 * Fixed incorrect check: The behavior of pthread_mutex_unlock() is undefined
when called with a default-type mutex owned by another thread.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36294 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 14:20:02 +00:00
Ingo Weinhold e506fde883 wait_if_address_range_is_wired() was leaking a cache reference.
Fixes #5710.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36237 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 21:18:52 +00:00
Ingo Weinhold 5f310d4d0d Added TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36236 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 21:16:23 +00:00
Ingo Weinhold fc813f1a1a Fixed typo in area name.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36232 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 17:42:10 +00:00
Ingo Weinhold f6f047841e Use debug_memcpy() instead of user_memcpy() in the kernel debugger.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36231 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 17:40:50 +00:00
Ingo Weinhold c3676b54bf * Added vm_debug_copy_page_memory() which copies memory from a potentially not
mapped page.
* debug_{mem,strl}cpy():
  - Added "team" parameter for specifying the address space the address are
    to be interpreted in.
  - When the standard memcpy() (with fault handler) fails, fall back to
    vm_debug_copy_page_memory().
* Added debug_is_debugged_team(): Predicate returning true, if the supplied
  team_id refers to the same team debug_get_debugged_thread() belongs to.
* Added DebuggedThreadSetter class for scope-based debug_set_debugged_thread().
  Made use of it in several debugger functions.
* print_demangled_call() (x86): Fixed unsafe memory access.

Allows KDL stack traces to work correctly again, even if the page daemon has
already unmapped the concerned pages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36230 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 17:40:15 +00:00
Ingo Weinhold ca4dd26afd Missed that one in r36228: DebugHasPage() implementation.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36229 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 17:34:32 +00:00
Ingo Weinhold 86875ad9d1 Added VMCache::DebugHasPage() and DebugLookupPage() for use in the kernel
debugger.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36228 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 17:18:57 +00:00
Ingo Weinhold 09418c869b Added DebugGet() method for use in the kernel debugger.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36227 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-13 17:16:42 +00:00
Ingo Weinhold 50e4dd9328 axeld + bonefish: X86VMTranslationMap::Protect():
* Removed rounding up the end address to page alignment. It's not necessary
  and could cause an overflow.
* Fixed possible infinite loop triggered by a rare race condition: When two
  threads of a team were accessing the same unmapped page at the same time
  each would trigger a page fault. One thread would map the page again, the
  second would wait until the first one was done and update the page
  protection (unnecessarily but harmlessly). If the first thread accessed the
  page again at an unfortunate time, it would implicitly change the
  accessed/dirty flags of the page's PTE, which was a situation the loop in
  Protect() didn't consider and thus run forever.
  Seen the problem twice today in form of an app server freeze.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36197 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-12 20:30:49 +00:00
Ingo Weinhold aa26d10790 delete_area(): When the address space is the kernel address space, we need to
pass stricter allocation flags to VMAddressSpace::{Remove,Delete}Area() or
could deadlock otherwise.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36188 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-12 15:25:08 +00:00
Ingo Weinhold 813d4cbe94 * Moved created subdirectory src/system/kernel/lock.cpp to new subdirectory
locks.
* Added syscalls for a new kind of mutex. A mutex consists only of an int32 and
  doesn't require any kernel resources. So it's initialization cannot fail
  (it consists only of setting the mutex value to 0). An uncontended lock or
  unlock operation can basically consist of an atomic_*() in userland. The
  syscalls (when the mutex is contended) are a bit more expensive than semaphore
  operations, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36158 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-11 16:07:39 +00:00
Ingo Weinhold 349039ff2e Added vm_[un]wire_page(), which are essentially versions of
[un]lock_memory_etc() optimized for a single page.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36156 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-11 15:07:06 +00:00
Ingo Weinhold 713bede839 full_scan_inactive_pages(): Don't call DEBUG_PAGE_ACCESS_START() before
checking whether the page is busy.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36155 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-11 14:49:06 +00:00
Ingo Weinhold de0b831289 * opentty(): Added missing return in error case. Fixed warning.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36140 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-11 09:59:59 +00:00
Ingo Weinhold 37cfdb5d95 Patch by Sean Bartell:
* SuperBlock: In case of ReiserFS 3.6 we were stil loading only the old
  superblock format.
* Added support for ReiserFS labels (volume names).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36132 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-11 08:44:38 +00:00
Ingo Weinhold 37b79c0324 Patch by Sean Bartell: Added support for old ReiserFS 3.5 super block location.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36102 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-10 12:02:02 +00:00
Ingo Weinhold 9d3e718801 We must not resize the area hash table while holding an address space lock,
since it could be the kernel address space.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36091 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-08 18:30:22 +00:00
Ingo Weinhold e99d1fd16f * Fixed more incorrect occurrences of the pid_t == int assumption.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36090 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-08 17:32:09 +00:00
Ingo Weinhold d7754ff079 * More generous buffer sizes for the semaphore and shared memory object names.
* The result shared memory was mapped PROT_WRITE only, but since the variable in
  it is used with the increment operator, it needs PROT_READ, too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36089 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-08 17:15:49 +00:00
Ingo Weinhold baa26c5b4c Fixed "if" condition: We need to map the error code to a negative value, when
it is positive.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36088 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-08 17:09:56 +00:00
Ingo Weinhold 16b4b2c13b Fixed broken sprintf() invocation.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36087 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-08 17:06:56 +00:00
Ingo Weinhold aea8795346 Be more generous with the semaphore name array size. Large enough PIDs would
lead to overwriting its bounds.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36084 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-08 15:34:12 +00:00
Ingo Weinhold 078dbb2d0e Defined more sysconf() and _POSIX_* constants required by POSIX.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36074 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:52:25 +00:00
Ingo Weinhold f603ab3c58 Disabled more unused code (the cache allocation is disabled, so no need for
deallocation).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36073 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:51:00 +00:00
Ingo Weinhold 1f285441c3 Define B_GENERAL_ERROR_BASE to INT_MIN instead of LONG_MIN. On 32 bit
platforms it's the same value, but we actually want type int, not long.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36072 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:49:04 +00:00
Ingo Weinhold b4ab2a2c37 Fixed incorrect assumption that pid_t is int.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36071 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:32:47 +00:00
Ingo Weinhold 57ebe59dfd SEM_VALUE_MAX is not POSIX. Use sysconf(_SC_SEM_VALUE_MAX) instead.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36070 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:30:57 +00:00
Ingo Weinhold e327fa52fe Missing return value.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36069 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:29:25 +00:00
Ingo Weinhold dff3f62071 pthread_exit() cannot return, but the "noreturn" attribute is really a compiler
feature (which we haven't set yet). So return some dummy value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36068 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:27:34 +00:00
Ingo Weinhold 814f5ae159 SEM_VALUE_MAX is not POSIX. Use sysconf(_SC_SEM_VALUE_MAX) instead.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36067 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:24:13 +00:00
Ingo Weinhold 8e69b283a4 PTHREAD_ONCE_INIT only needs to be a valid initializer.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36066 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:18:11 +00:00
Ingo Weinhold 72d74075da Prevent unused variable errors in case CLOCK_REALTIME is not defined.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36065 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:16:12 +00:00
Ingo Weinhold a06cec2fdf <features.h> is not POSIX.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36064 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:14:34 +00:00
Ingo Weinhold b22623ba6a Prevent clashes with non-POSIX macros that are (or were?) still part of some
standard and are defined in our headers.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36063 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-07 18:13:49 +00:00
Ingo Weinhold 6f33e7286f Handle sigaction[_etc]() return value correctly (it's not an error code).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36056 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-06 20:24:23 +00:00
Ingo Weinhold 2be99447d8 * Added some comments to the thread flags.
* Added new thread flag THREAD_FLAGS_ALWAYS_RESTART_SYSCALL. If set, it forces
  syscall restart even when a signal handler without SA_RESTART was invoked.
* Fixed sigwait(): If one of requested signals wasn't already pending it would
  never wake up. Also, the syscall always needs to be restarted, if interrupted
  by another signal.
* Renamed a bunch of the POSIX signal function implementations which did return
  an error code directly (instead via errno). Added correct POSIX functions
  where needed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36054 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-06 20:23:18 +00:00
Ingo Weinhold d888ea5d13 Fixed out of bounds array access.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36051 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-06 18:44:58 +00:00
Ingo Weinhold 2b76954997 Removed tests that tested undefined behavior:
* Calling pthread_{join,detach}() on non-joinable threads.
* Calling mutexattr_setpshared() on uninitialized object.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36050 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-06 18:44:18 +00:00
Ingo Weinhold 5a0b30dbda Don't cancel the alarm on exec*(). POSIX alarm() requires that. The BeBook
doesn't mention the expected set_alarm() behavior. Tests under BeOS R5 Bone
crash the system in either case, though, so I guess we're free to go with the
expected POSIX behavior.
This make detection of hanging tests in the Open POSIX Test Suite work.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36046 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-06 17:06:08 +00:00
Ingo Weinhold 3b589a0fb7 Enable the mapping to positive POSIX error codes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36043 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 19:21:50 +00:00
Ingo Weinhold 691b9fac72 Left-over from before splitting the files. Duplicate definitions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36042 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 17:11:41 +00:00
Ingo Weinhold 02e6d76c9c Replaced enums by macros as required by POSIX.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36041 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 17:05:25 +00:00
Ingo Weinhold 4142e99f09 Copied Open POSIX Test Suite 1.5.2 to the trunk.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36040 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 13:10:28 +00:00
Ingo Weinhold 93de3bca5f Removed partial (unknown version) Open POSIX Test Suite from the build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36039 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 13:09:20 +00:00
Ingo Weinhold ca2bd87dd3 Removed PosixTestSuite optional package.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36038 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 13:06:17 +00:00
Ingo Weinhold 4f774c503c * VMArea::Unwire(addr_t, size_t, bool): Don't delete the removed range, but
return it.
* lock_memory_etc(): On error the VMAreaWiredRange object could be leaked.
* [un]lock_memory_etc(): Call VMArea::Unwire() with the cache locked and
  explicitly delete the range object after unlocking the cache to avoid
  potential deadlocks.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36035 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 12:12:36 +00:00
Ingo Weinhold 369111e741 * Removed the VMArea::Wire() version that has to allocate a VMAreaWiredRange.
Since the requirement is that the area's top cache is locked, allocating
  memory isn't allowed.
* lock_memory_etc(): Create the VMAreaWiredRange object explicitly before
  locking the area's top cache.

Fixes #5680 (deadlocks when using the slab as malloc() backend).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36033 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-05 11:08:01 +00:00